espial 0.0.36 → 0.0.37
raw patch · 71 files changed
+13266/−9742 lines, 71 filesdep +tlsdep +warp-tlsbinary-added
Dependencies added: tls, warp-tls
Files
- README.md +349/−305
- app/migration/Main.hs +296/−283
- changelog.md +189/−168
- config/routes +58/−56
- config/settings.yml +72/−65
- docker-compose.archivebox07.yml +52/−48
- docker-compose.yml +29/−26
- espial.cabal +571/−557
- frontend/src/api.ts +200/−157
- frontend/src/components/AccountSettings.tsx +157/−124
- frontend/src/components/AddForm.tsx +327/−323
- frontend/src/components/BMark.tsx +489/−389
- frontend/src/components/BulkEdit.tsx +458/−0
- frontend/src/components/NNote.tsx +240/−226
- frontend/src/components/TagCloud.tsx +258/−217
- frontend/src/globals.ts +125/−105
- frontend/src/index.tsx +105/−100
- frontend/src/types.ts +207/−179
- frontend/src/util.ts +72/−62
- hie.yaml +36/−31
- package.yaml +227/−225
- src/Application.hs +270/−236
- src/Foundation.hs +397/−393
- src/Handler/Add.hs +138/−141
- src/Handler/Common.hs +120/−121
- src/Handler/Edit.hs +81/−50
- src/Handler/Notes.hs +272/−269
- src/Handler/User.hs +266/−218
- src/Model.hs +972/−712
- src/Model/FileBookmark.hs +137/−129
- src/Model/FileFirefox.hs +83/−87
- src/Model/FileNetscape.hs +202/−207
- src/Model/FileNote.hs +100/−88
- src/Model/Form.hs +241/−238
- src/Settings.hs +242/−231
- src/Util.hs +31/−19
- stack.yaml +5/−5
- stack.yaml.lock +19/−19
- static/css/common.css +371/−350
- static/js/app-MD5JJQMB.min.js +0/−76
- static/js/app-MD5JJQMB.min.js.gz binary
- static/js/app-MD5JJQMB.min.js.map +0/−7
- static/js/app-MD5JJQMB.min.js.map.gz binary
- static/js/app-SAXM5TAE.min.js +76/−0
- static/js/app-SAXM5TAE.min.js.gz binary
- static/js/app-SAXM5TAE.min.js.map +7/−0
- static/js/app-SAXM5TAE.min.js.map.gz binary
- static/js/manifest.json +1/−1
- static/locales/de/translation.json +198/−162
- static/locales/en/translation.json +199/−162
- static/locales/es/translation.json +198/−162
- static/locales/fr/translation.json +198/−162
- static/locales/it/translation.json +198/−162
- static/locales/ja/translation.json +198/−162
- static/locales/ko/translation.json +198/−162
- static/locales/pl/translation.json +198/−162
- static/locales/pt-BR/translation.json +198/−162
- static/locales/ru/translation.json +198/−162
- static/locales/tr/translation.json +198/−162
- static/locales/uk/translation.json +198/−162
- static/locales/zh-Hans/translation.json +198/−162
- static/locales/zh-Hant/translation.json +198/−162
- templates/default-layout.hamlet +45/−46
- templates/notes.hamlet +36/−36
- templates/user.hamlet +79/−74
- test/Model/BookmarksBulkEditSpec.hs +170/−0
- test/Model/BookmarksPagingSpec.hs +279/−0
- test/Model/BookmarksQuerySpec.hs +171/−0
- test/Model/BookmarksSearchSpec.hs +451/−0
- test/Model/FileImportExportSpec.hs +635/−0
- test/TestImport.hs +79/−75
README.md view
@@ -1,305 +1,349 @@-# Espial--Espial is an open-source, web-based bookmarking server.--It supports multiple user accounts and is primarily intended for self-hosted deployments.--Bookmarks are stored in a SQLite database to keep setup and maintenance straightforward.--Espial also includes internationalization support.--### Adding Bookmarks--The easist way for logged-in users to add bookmarks, is with the "bookmarklet", found on the Settings page.--Espial also supports file import options.--## Demo Server--Log in with:--- username: `demo`-- password: `demo`--https://espdemo.ae8.org/u:demo----## Related Projects--Also, see the android app for adding bookmarks via an Android Share intent:--https://github.com/jonschoning/espial-share-android--## Installation--### Docker Setup (Recommended Method)--Docker installation is the recommended approach for most deployments.--See:--https://github.com/jonschoning/espial-docker--### Setup From Source--1. Install the Stack executable here:- - https://tech.fpcomplete.com/haskell/get-started-2. Build executables:--```bash-stack build-```--3. Create the database:--```bash-stack exec migration -- createdb-```--4. Create a user:--```bash-stack exec migration -- createuser --userName myusername --userPassword myuserpassword-```--5. Import a pinboard bookmark file for a user (optional):--```bash-stack exec migration -- importbookmarks --userName myusername --bookmarkFile sample-bookmarks.json-```--6. Import a firefox bookmark file for a user (optional):--```bash-stack exec migration -- importfirefoxbookmarks --userName myusername --bookmarkFile firefox-bookmarks.json-```--7. Start a production server:--```bash-stack exec espial-```--## Configuration--See `config/settings.yml` for changing default run-time parameters & environment variables.--- `config/settings.yml` is embedded into the app executable when compiled and also read once when the app starts. Current settings in `config/settings.yml` will override the embedded compile-time settings.-- `config/settings.yml` values formatted like `_env:ENV_VAR_NAME:default_value` can be overridden by the specified environment variable.-- Example:- - `_env:PORT:3000`- - environment variable `PORT`- - default app http port: `3000`--## Internationalization--Espial's frontend supports a selectable UI language per account, on the Account Settings (`settings`) page.--The Server Language default is controlled by `language-default` in `config/settings.yml`, which can also be set with environment variable `LANGUAGE_DEFAULT` to the language code; the default value is `en`.--#### Supported Languages:--| Code | English name | Native name |-| --------- | --------------------- | ------------------ |-| `en` | English | English |-| `de` | German | Deutsch |-| `es` | Spanish | Español |-| `fr` | French | Français |-| `it` | Italian | Italiano |-| `ja` | Japanese | 日本語 |-| `ko` | Korean | 한국어 |-| `pl` | Polish | Polski |-| `pt-BR` | Portuguese (Brazil) | Português (Brasil) |-| `ru` | Russian | Русский |-| `tr` | Turkish | Türkçe |-| `uk` | Ukrainian | Українська |-| `zh-Hans` | Chinese (Simplified) | 简体中文 |-| `zh-Hant` | Chinese (Traditional) | 繁體中文 |--## Request IP Logging--Espial supports the `IP_FROM_HEADER` environment variable for request logging.--- `IP_FROM_HEADER=true`: log the client IP from the `X-Real-IP` or `X-Forwarded-For` header when present, and fall back to the peer address if neither header is available.-- `IP_FROM_HEADER=false`: log the peer address from the HTTP connection.--Only set `IP_FROM_HEADER=true` if your application is safely positioned **behind a trusted reverse proxy**.--## SSL / Reverse Proxy--Espial does not terminate TLS itself. Run it behind a reverse proxy that handles HTTPS and forwards traffic to Espial over HTTP.--For container-based deployment examples, including production-oriented layouts, see the `espial-docker` repository:--- https://github.com/jonschoning/espial-docker--Minimal [Caddy](https://github.com/caddyserver/caddy) example:--Localhost without a real domain:--```caddyfile-https://localhost:3050 {- reverse_proxy localhost:3000-}-```--or with a domain:--```caddyfile-espial.example.com {- reverse_proxy 127.0.0.1:3000-}-```--With the domain setup:--- Caddy terminates TLS for `espial.example.com`.-- Espial continues listening on HTTP, locally on `127.0.0.1:3000`- - If using Docker Compose, it would like like `espial:3000`-- Set `IP_FROM_HEADER=true` only when Espial is reachable solely through that trusted proxy.--If you are using Cloudflare:--- Prefer Cloudflare SSL mode `Full (strict)`.-- use `header_up X-Forwarded-For {http.request.header.CF-Connecting-IP}`-- If traffic can reach Espial directly without passing through your trusted proxy, do not enable `IP_FROM_HEADER=true`, because client IP headers can be spoofed.--## Archive Backends--Espial supports configurable archive backends for saving bookmark snapshots.--Set the backend with `archive-backend` in `config/settings.yml`:--- `disabled`: archiving is turned off (default).-- `wayback-machine`: enables submission to the Internet Archive Wayback Machine.-- Wayback Machine support requires the following settings:- - `wayback-machine-access-key`- - `wayback-machine-secret-key`-- Create these by signing in to your Internet Archive account and generating S3-style API credentials at `https://archive.org/account/s3.php`. \- If `wayback-machine` is selected but the access key or secret key is missing, archiving is disabled at runtime.--- `archivebox07`: queues the URL in a local ArchiveBox 0.7 instance and stores an ArchiveBox link on the bookmark.-- **IMPORTANT - ArchiveBox stores all archive data in a single global index space, so this arcive-backend is best suited to single-user Espial instances.**-- **Recommended setup is to use Docker Compose to run the ArchiveBox instance**- - Simple example, running on localhost: [docker-compose.archivebox07.yml](docker-compose.archivebox07.yml)- - See https://github.com/jonschoning/espial-docker for more examples intended for deployment- - In all examples, you must change the `ARCHIVEBOX_PASSWORD` from it's default value.-- ArchiveBox support requires the following settings:- - `archivebox-url`-- `archivebox-url` is the URL espial uses to sign in to ArchiveBox and submit URLs through the web UI. In Docker Compose this is typically `http://archivebox:8000`.-- - `archivebox-public-url` (optional)-- Public ArchiveBox URL stored on bookmarks.-- - `archivebox-username` plus `archivebox-password`-- Espial signs in to the ArchiveBox web UI with these credentials before submitting URLs.-- - `archivebox-tag` (optional)-- A tag Espial adds to submissions (example: `espial`).-- - `archivebox-plugins` (optional)-- Comma-separated list of ArchiveBox methods (plugins) to request when submitting URLs, e.g. `title,favicon,singlefile,screenshot`.-- Set the ArchiveBox admin credentials in the override path by supplying:- - `ARCHIVEBOX_USERNAME=...`- - `ARCHIVEBOX_PASSWORD=...`-- The `Makefile` includes the following helpers:- - `docker-compose-up-archivebox07`- - `docker-compose-up-d-archivebox07`- - `docker-compose-exec-archivebox07`-- Or start the instance manually via docker compose, example:-- ```bash- docker compose -f docker-compose.archivebox07.yml up- ```-- Configure the enrivonment variable `ARCHIVE_METHODS` to control which archive methods ArchiveBox uses:-- ```yaml- environment:- - ARCHIVE_METHODS=title,favicon,singlefile,screenshot- ```-- Available ARCHIVE_METHODS plugins:- - `archive_org`, `dom`, `favicon`, `git`, `headers`, `htmltotext`, `media`, `mercury`, `pdf`, `readability`, `screenshot`, `singlefile`, `title`, `wget`-- If `ARCHIVE_METHODS` is unset/not-present, ArchiveBox will uses all plugins.-- For additional information and configuration, refer to the [ArchiveBox repository](https://github.com/ArchiveBox/ArchiveBox)--Optional proxy settings for archive requests:--- `archive-socks-proxy-host`-- `archive-socks-proxy-port`--## CLI--Migration commands are run via:--```bash-stack exec migration -- <command> [options]-```--All commands take an optional `--conn` parameter for the database location; if omitted, the database location is loaded from `config/settings.yml` or environment variable `SQLITE_DATABASE`--### Commands--| Command | Example |-| ---------------------------- | -------------------------------------------------------------------------------------------------------------- |-| `createdb` | `stack exec migration -- createdb` |-| `createuser` | `stack exec migration -- createuser --userName myusername --userPassword myuserpassword` |-| `createuser` (password file) | `stack exec migration -- createuser --userName myusername --userPasswordFile mypassword.txt` |-| `deleteuser` | `stack exec migration -- deleteuser --userName myusername` |-| `createapikey` | `stack exec migration -- createapikey --userName myusername` |-| `deleteapikey` | `stack exec migration -- deleteapikey --userName myusername` |-| `importbookmarks` | `stack exec migration -- importbookmarks --userName myusername --bookmarkFile sample-bookmarks.json` |-| `importfirefoxbookmarks` | `stack exec migration -- importfirefoxbookmarks --userName myusername --bookmarkFile firefox-bookmarks.json` |-| `importnetscapebookmarks` | `stack exec migration -- importnetscapebookmarks --userName myusername --bookmarkFile bookmarks.html` |-| `importnotes` | `stack exec migration -- importnotes --userName myusername --noteDirectory ./notes` |-| `exportbookmarks` | `stack exec migration -- exportbookmarks --userName myusername --bookmarkFile exported-bookmarks.json` |-| `exportnetscapebookmarks` | `stack exec migration -- exportnetscapebookmarks --userName myusername --bookmarkFile exported-bookmarks.html` |-| `printmigratedb` | `stack exec migration -- printmigratedb` |-| `showuser` | `stack exec migration -- showuser --userName myusername` |--### `importbookmarks` Command Notes:--See `sample-bookmarks.json`, which contains a JSON array, each line containing a `FileBookmark` object.--Example:--```json-[- {- "href": "http://raganwald.com/2018/02/23/forde.html",- "description": "Forde's Tenth Rule, or, \"How I Learned to Stop Worrying and \u2764\ufe0f the State Machine\"",- "extended": "",- "time": "2018-02-26T22:57:20Z",- "shared": "yes",- "toread": "yes",- "tags": "raganwald"- },- ,- {- "href": "http://downloads.haskell.org/~ghc/latest/docs/html/users_guide/flags.html",- "description": "7.6. Flag reference \u2014 Glasgow Haskell Compiler 8.2.2 User's Guide",- "extended": "-fprint-expanded-synonyms",- "time": "2018-02-26T21:52:02Z",- "shared": "yes",- "toread": "no",- "tags": "ghc haskell"- }-]-```+# Espial + +Espial is an open-source, web-based bookmarking server. + +It supports multiple user accounts and is primarily intended for self-hosted deployments. + +Bookmarks are stored in a SQLite database to keep setup and maintenance straightforward. + +Espial also includes internationalization support. + +### Adding Bookmarks + +The easist way for logged-in users to add bookmarks, is with the "bookmarklet", found on the Settings page. + +Espial also supports file import options. + +## Demo Server + +Log in with: + +- username: `demo` +- password: `demo` + +https://espdemo.ae8.org/u:demo + + + +## Related Projects + +Also, see the android app for adding bookmarks via an Android Share intent: + +https://github.com/jonschoning/espial-share-android + +## Installation + +### Docker Setup (Recommended Method) + +Docker installation is the recommended approach for most deployments. + +See: + +https://github.com/jonschoning/espial-docker + +### Setup From Source + +1. Install Haskell tooling (choose one): + - **Stack**: https://docs.haskellstack.org/en/stable/ + - **GHCup** (installs GHC, Stack, and more): https://www.haskell.org/ghcup/install/ +2. Build executables: + +```bash +stack build +``` + +3. Create the database: + +```bash +stack exec migration -- createdb +``` + +4. Create a user: + +```bash +stack exec migration -- createuser --userName myusername --userPassword myuserpassword +``` + +5. Import a pinboard bookmark file for a user (optional): + +```bash +stack exec migration -- importbookmarks --userName myusername --bookmarkFile sample-bookmarks.json +``` + +6. Import a firefox bookmark file for a user (optional): + +```bash +stack exec migration -- importfirefoxbookmarks --userName myusername --bookmarkFile firefox-bookmarks.json +``` + +7. Start a production server: + +```bash +stack exec espial +``` + +## Configuration + +See `config/settings.yml` for changing default run-time parameters & environment variables. + +- `config/settings.yml` is embedded into the app executable when compiled and also read once when the app starts. Current settings in `config/settings.yml` will override the embedded compile-time settings. +- `config/settings.yml` values formatted like `_env:ENV_VAR_NAME:default_value` can be overridden by the specified environment variable. +- Example: + - `_env:PORT:3000` + - environment variable `PORT` + - default app http port: `3000` + +## Internationalization + +Espial's frontend supports a selectable UI language per account, on the Account Settings (`settings`) page. + +The Server Language default is controlled by `language-default` in `config/settings.yml`, which can also be set with environment variable `LANGUAGE_DEFAULT` to the language code; the default value is `en`. + +#### Supported Languages: + +| Code | English name | Native name | +| --------- | --------------------- | ------------------ | +| `en` | English | English | +| `de` | German | Deutsch | +| `es` | Spanish | Español | +| `fr` | French | Français | +| `it` | Italian | Italiano | +| `ja` | Japanese | 日本語 | +| `ko` | Korean | 한국어 | +| `pl` | Polish | Polski | +| `pt-BR` | Portuguese (Brazil) | Português (Brasil) | +| `ru` | Russian | Русский | +| `tr` | Turkish | Türkçe | +| `uk` | Ukrainian | Українська | +| `zh-Hans` | Chinese (Simplified) | 简体中文 | +| `zh-Hant` | Chinese (Traditional) | 繁體中文 | + +## Request IP Logging + +Espial supports the `IP_FROM_HEADER` environment variable for request logging. + +- `IP_FROM_HEADER=true`: log the client IP from the `X-Real-IP` or `X-Forwarded-For` header when present, and fall back to the peer address if neither header is available. +- `IP_FROM_HEADER=false`: log the peer address from the HTTP connection. + +Only set `IP_FROM_HEADER=true` if your application is safely positioned **behind a trusted reverse proxy**. + +## TLS / Reverse Proxy + +A reverse proxy is the recommended approach for production and most self-hosted deployments. For simple local or LAN setups where that is impractical, Espial can also terminate TLS directly — see [Optional: In-Process TLS](#optional-in-process-tls) below. + +Set `SSL_ONLY=true` whenever Espial is served over HTTPS (via reverse proxy or in-process TLS) to enable the `Secure` cookie flag and HTTP→HTTPS redirects. + +### Recommended: Reverse Proxy (Caddy, nginx, Cloudflare Tunnel, …) + +Running Espial behind a reverse proxy is the recommended approach for production and most self-hosted deployments. The proxy terminates TLS and forwards plain HTTP to Espial. This gives you automatic certificate management, HTTP/2 and HTTP/3 at the edge, and cleaner separation of concerns. + +For container-based deployment examples, including production-oriented layouts, see the `espial-docker` repository: + +- https://github.com/jonschoning/espial-docker + +Minimal [Caddy](https://github.com/caddyserver/caddy) example: + +Localhost without a real domain: + +```caddyfile +https://localhost:3050 { + reverse_proxy localhost:3000 +} +``` + +or with a domain: + +```caddyfile +espial.example.com { + reverse_proxy 127.0.0.1:3000 +} +``` + +With the domain setup: + +- Caddy terminates TLS for `espial.example.com`. +- Espial continues listening on HTTP, locally on `127.0.0.1:3000` + - If using Docker Compose, it would look like `espial:3000` +- Set `IP_FROM_HEADER=true` only when Espial is reachable solely through that trusted proxy. + +If you are using Cloudflare: + +- Prefer Cloudflare SSL mode `Full (strict)`. +- use `header_up X-Forwarded-For {http.request.header.CF-Connecting-IP}` +- If traffic can reach Espial directly without passing through your trusted proxy, do not enable `IP_FROM_HEADER=true`, because client IP headers can be spoofed. + +### Optional: In-Process TLS + +For simple local or LAN deployments where adding a reverse proxy is impractical, Espial can terminate TLS directly using your own certificate and key files (PEM format, unencrypted key). + +Set the `TLS_CERT_FILE` and `TLS_KEY_FILE` environment variables (or the corresponding `tls-cert-file` / `tls-key-file` keys in `config/settings.yml`) to the paths of your certificate and private key: + +```bash +TLS_CERT_FILE=/path/to/cert.pem TLS_KEY_FILE=/path/to/key.pem stack exec espial +``` + +Or in `config/settings.yml`: + +```yaml +tls-cert-file: "/path/to/cert.pem" +tls-key-file: "/path/to/key.pem" +``` + +When both values are set Espial listens on HTTPS with HTTP/2 enabled. When either is absent Espial falls back to plain HTTP. + +**Certificate rotation** — Espial reloads the certificate from disk automatically every 12 hours without restarting or dropping existing connections. To trigger an immediate reload send `SIGHUP` to the process: + +```bash +kill -HUP <espial-pid> +``` + +**Notes:** + +- Let's Encrypt certificates (`fullchain.pem` + `privkey.pem`) work directly. +- A self-signed certificate for local testing can be generated with: + ```bash + openssl req -x509 -newkey rsa:2048 -nodes \ + -keyout key.pem -out cert.pem -days 3650 \ + -subj "/CN=localhost" \ + -addext "subjectAltName=DNS:localhost,IP:127.0.0.1" + ``` +- A reverse proxy is still preferred for production: it provides HTTP/3, edge caching, and hides the Espial process from the public internet. + +## Archive Backends + +Espial supports configurable archive backends for saving bookmark snapshots. + +Set the backend with `archive-backend` in `config/settings.yml`: + +- `disabled`: archiving is turned off (default). +- `wayback-machine`: enables submission to the Internet Archive Wayback Machine. + + Wayback Machine support requires the following settings: + - `wayback-machine-access-key` + - `wayback-machine-secret-key` + + Create these by signing in to your Internet Archive account and generating S3-style API credentials at `https://archive.org/account/s3.php`. \ + If `wayback-machine` is selected but the access key or secret key is missing, archiving is disabled at runtime. + +- `archivebox07`: queues the URL in a local ArchiveBox 0.7 instance and stores an ArchiveBox link on the bookmark. + + **IMPORTANT - ArchiveBox stores all archive data in a single global index space, so this arcive-backend is best suited to single-user Espial instances.** + + **Recommended setup is to use Docker Compose to run the ArchiveBox instance** + - Simple example, running on localhost: [docker-compose.archivebox07.yml](docker-compose.archivebox07.yml) + - See https://github.com/jonschoning/espial-docker for more examples intended for deployment + - In all examples, you must change the `ARCHIVEBOX_PASSWORD` from it's default value. + + ArchiveBox support requires the following settings: + - `archivebox-url` + + `archivebox-url` is the URL espial uses to sign in to ArchiveBox and submit URLs through the web UI. In Docker Compose this is typically `http://archivebox:8000`. + + - `archivebox-public-url` (optional) + + Public ArchiveBox URL stored on bookmarks. + + - `archivebox-username` plus `archivebox-password` + + Espial signs in to the ArchiveBox web UI with these credentials before submitting URLs. + + - `archivebox-tag` (optional) + + A tag Espial adds to submissions (example: `espial`). + + - `archivebox-plugins` (optional) + + Comma-separated list of ArchiveBox methods (plugins) to request when submitting URLs, e.g. `title,favicon,singlefile,screenshot`. + + Set the ArchiveBox admin credentials in the override path by supplying: + - `ARCHIVEBOX_USERNAME=...` + - `ARCHIVEBOX_PASSWORD=...` + + The `Makefile` includes the following helpers: + - `docker-compose-up-archivebox07` + - `docker-compose-up-d-archivebox07` + - `docker-compose-exec-archivebox07` + + Or start the instance manually via docker compose, example: + + ```bash + docker compose -f docker-compose.archivebox07.yml up + ``` + + Configure the enrivonment variable `ARCHIVE_METHODS` to control which archive methods ArchiveBox uses: + + ```yaml + environment: + - ARCHIVE_METHODS=title,favicon,singlefile,screenshot + ``` + + Available ARCHIVE_METHODS plugins: + - `archive_org`, `dom`, `favicon`, `git`, `headers`, `htmltotext`, `media`, `mercury`, `pdf`, `readability`, `screenshot`, `singlefile`, `title`, `wget` + + If `ARCHIVE_METHODS` is unset/not-present, ArchiveBox will uses all plugins. + + For additional information and configuration, refer to the [ArchiveBox repository](https://github.com/ArchiveBox/ArchiveBox) + +Optional proxy settings for archive requests: + +- `archive-socks-proxy-host` +- `archive-socks-proxy-port` + +## CLI + +Migration commands are run via: + +```bash +stack exec migration -- <command> [options] +``` + +All commands take an optional `--conn` parameter for the database location; if omitted, the database location is loaded from `config/settings.yml` or environment variable `SQLITE_DATABASE` + +### Commands + +| Command | Example | +| ---------------------------- | -------------------------------------------------------------------------------------------------------------- | +| `createdb` | `stack exec migration -- createdb` | +| `createuser` | `stack exec migration -- createuser --userName myusername --userPassword myuserpassword` | +| `createuser` (password file) | `stack exec migration -- createuser --userName myusername --userPasswordFile mypassword.txt` | +| `deleteuser` | `stack exec migration -- deleteuser --userName myusername` | +| `createapikey` | `stack exec migration -- createapikey --userName myusername` | +| `deleteapikey` | `stack exec migration -- deleteapikey --userName myusername` | +| `importbookmarks` | `stack exec migration -- importbookmarks --userName myusername --bookmarkFile sample-bookmarks.json` | +| `importfirefoxbookmarks` | `stack exec migration -- importfirefoxbookmarks --userName myusername --bookmarkFile firefox-bookmarks.json` | +| `importnetscapebookmarks` | `stack exec migration -- importnetscapebookmarks --userName myusername --bookmarkFile bookmarks.html` | +| `importnotes` | `stack exec migration -- importnotes --userName myusername --noteDirectory ./notes` | +| `exportbookmarks` | `stack exec migration -- exportbookmarks --userName myusername --bookmarkFile exported-bookmarks.json` | +| `exportnetscapebookmarks` | `stack exec migration -- exportnetscapebookmarks --userName myusername --bookmarkFile exported-bookmarks.html` | +| `printmigratedb` | `stack exec migration -- printmigratedb` | +| `showuser` | `stack exec migration -- showuser --userName myusername` | + +### `importbookmarks` Command Notes: + +See `sample-bookmarks.json`, which contains a JSON array, each line containing a `FileBookmark` object. + +Example: + +```json +[ + { + "href": "http://raganwald.com/2018/02/23/forde.html", + "description": "Forde's Tenth Rule, or, \"How I Learned to Stop Worrying and \u2764\ufe0f the State Machine\"", + "extended": "", + "time": "2018-02-26T22:57:20Z", + "shared": "yes", + "toread": "yes", + "tags": "raganwald" + }, + , + { + "href": "http://downloads.haskell.org/~ghc/latest/docs/html/users_guide/flags.html", + "description": "7.6. Flag reference \u2014 Glasgow Haskell Compiler 8.2.2 User's Guide", + "extended": "-fprint-expanded-synonyms", + "time": "2018-02-26T21:52:02Z", + "shared": "yes", + "toread": "no", + "tags": "ghc haskell" + } +] +```
app/migration/Main.hs view
@@ -1,283 +1,296 @@-{-# OPTIONS_GHC -fno-warn-name-shadowing #-}--module Main where--import ClassyPrelude-import Data.CaseInsensitive qualified as CI-import Data.Text qualified as T-import Database.Persist qualified as P-import Database.Persist.Sqlite qualified as P-import Import (configSettingsYmlValue)-import Lens.Micro-import Model-import Model.Custom-import Model.File-import Model.FileNetscape (exportNetscapeBookmarks)-import Model.Migrations (dumpMigration, runAppMigrations, runPersistentMigrations)-import Options.Applicative qualified as OA-import Options.Applicative.Help (suggestionsHelp)-import Options.Generic-import Settings (AppSettings (..))-import Types-import Yesod.Default.Config2 (configSettingsYml, loadYamlSettings, useEnv)--data MigrationOpts- = CreateDB {conn :: Maybe Text}- | CreateUser- { conn :: Maybe Text,- userName :: Text,- userPassword :: Password,- privateDefault :: Maybe Bool,- archiveDefault :: Maybe Bool,- suggestTags :: Maybe Bool,- privacyLock :: Maybe Bool,- userLanguage :: Maybe I18nLang- }- | CreateApiKey- { conn :: Maybe Text,- userName :: Text- }- | DeleteUser- { conn :: Maybe Text,- userName :: Text- }- | ShowUser- { conn :: Maybe Text,- userName :: Text- }- | DeleteApiKey- { conn :: Maybe Text,- userName :: Text- }- | ImportBookmarks- { conn :: Maybe Text,- userName :: Text,- bookmarkFile :: FilePath- }- | ExportBookmarks- { conn :: Maybe Text,- userName :: Text,- bookmarkFile :: FilePath- }- | ImportFirefoxBookmarks- { conn :: Maybe Text,- userName :: Text,- bookmarkFile :: FilePath- }- | ImportNetscapeBookmarks- { conn :: Maybe Text,- userName :: Text,- bookmarkFile :: FilePath- }- | ExportNetscapeBookmarks- { conn :: Maybe Text,- userName :: Text,- bookmarkFile :: FilePath- }- | ImportNotes- { conn :: Maybe Text,- userName :: Text,- noteDirectory :: FilePath- }- | PrintMigrateDB {conn :: Maybe Text}- deriving (Generic, Show)--instance ParseRecord MigrationOpts--parseI18nLang :: OA.ReadM I18nLang-parseI18nLang =- OA.str >>= \s ->- maybe- (OA.readerError $ "Invalid language: '" <> s <> "' Supported languages: " <> supportedLangs)- pure- (toI18nLang s)--instance ParseField I18nLang where- readField = parseI18nLang--main :: IO ()-main = do- hSetBuffering stdout LineBuffering- hSetBuffering stderr LineBuffering- args <- getRecord "Migrations"- case args of- PrintMigrateDB {..} -> do- connText <- getConnText conn- P.runSqlite connText dumpMigration- CreateDB {..} -> do- connText <- getConnText conn- let connInfo =- P.mkSqliteConnectionInfo connText- & set P.fkEnabled False- P.runSqliteInfo connInfo (runPersistentMigrations True)- P.runSqliteInfo connInfo (runAppMigrations True)- CreateUser {..} -> do- connText <- getConnText conn- P.runSqlite connText $ do- passwordText <- liftIO . fmap T.strip $ case userPassword of- PasswordText s -> pure s- PasswordFile f -> readFileUtf8 f- hash' <- liftIO (hashPassword passwordText)- let privateDefaultVal = fromMaybe False privateDefault- archiveDefaultVal = fromMaybe False archiveDefault- suggestTagsVal = fromMaybe True suggestTags- privacyLockVal = fromMaybe False privacyLock- userLanguageVal = userLanguage- void $- P.upsertBy- (UniqueUserName userName)- (User userName hash' Nothing privateDefaultVal archiveDefaultVal suggestTagsVal privacyLockVal userLanguageVal)- [ UserPasswordHash P.=. hash',- UserPrivateDefault P.=. privateDefaultVal,- UserArchiveDefault P.=. archiveDefaultVal,- UserSuggestTags P.=. suggestTagsVal,- UserPrivacyLock P.=. privacyLockVal,- UserLanguage P.=. userLanguageVal- ]- pure () :: DB ()- ShowUser {..} -> do- connText <- getConnText conn- P.runSqlite connText $ do- muser <- P.getBy (UniqueUserName userName)- case muser of- Nothing -> liftIO (print (userName ++ " not found"))- Just (P.Entity _ user) -> liftIO (putStrLn (formatUserSummary user))- CreateApiKey {..} -> do- connText <- getConnText conn- P.runSqlite connText $ do- apiKey@(ApiKey plainKey) <- liftIO generateApiKey- muser <- P.getBy (UniqueUserName userName)- case muser of- Nothing -> liftIO (print (userName ++ " not found"))- Just (P.Entity uid _) -> do- -- API key is only displayed once after creation,- -- since it is stored in hashed form.- let hashedKey = hashApiKey apiKey- P.update uid [UserApiToken P.=. Just hashedKey]- liftIO $ print plainKey- DeleteApiKey {..} -> do- connText <- getConnText conn- P.runSqlite connText $ do- muser <- P.getBy (UniqueUserName userName)- case muser of- Nothing -> liftIO (print (userName ++ " not found"))- Just (P.Entity uid _) -> do- P.update uid [UserApiToken P.=. Nothing]- DeleteUser {..} -> do- connText <- getConnText conn- P.runSqlite connText $ do- muser <- P.getBy (UniqueUserName userName)- case muser of- Nothing -> liftIO (print (userName ++ "not found"))- Just (P.Entity uid _) -> do- P.delete uid- pure () :: DB ()- ExportBookmarks {..} -> do- connText <- getConnText conn- P.runSqlite connText $ do- muser <- P.getBy (UniqueUserName userName)- case muser of- Just (P.Entity uid _) -> exportFileBookmarks uid bookmarkFile- Nothing -> liftIO (print (userName ++ "not found"))- ImportBookmarks {..} -> do- connText <- getConnText conn- P.runSqlite connText $ do- muser <- P.getBy (UniqueUserName userName)- case muser of- Just (P.Entity uid _) -> do- result <- insertFileBookmarks uid bookmarkFile- case result of- Left e -> liftIO (print e)- Right n -> liftIO (print (show n ++ " bookmarks imported."))- Nothing -> liftIO (print (userName ++ "not found"))- ImportFirefoxBookmarks {..} -> do- connText <- getConnText conn- P.runSqlite connText $ do- muser <- P.getBy (UniqueUserName userName)- case muser of- Just (P.Entity uid _) -> do- result <- insertFirefoxBookmarks uid bookmarkFile- case result of- Left e -> liftIO (print e)- Right n -> liftIO (print (show n ++ " bookmarks imported."))- Nothing -> liftIO (print (userName ++ "not found"))- ImportNotes {..} -> do- connText <- getConnText conn- P.runSqlite connText $ do- muser <- P.getBy (UniqueUserName userName)- case muser of- Just (P.Entity uid _) -> do- result <- insertDirFileNotes uid noteDirectory- case result of- Left e -> liftIO (print e)- Right n -> liftIO (print (show n ++ " notes imported."))- Nothing -> liftIO (print (userName ++ "not found"))- ImportNetscapeBookmarks {..} -> do- connText <- getConnText conn- P.runSqlite connText $ do- muser <- P.getBy (UniqueUserName userName)- case muser of- Just (P.Entity uid _) -> do- result <- insertNetscapeBookmarks uid bookmarkFile- case result of- Left e -> liftIO (print e)- Right n -> liftIO (print (show n ++ " bookmarks imported."))- Nothing -> liftIO (print (userName ++ "not found"))- ExportNetscapeBookmarks {..} -> do- connText <- getConnText conn- P.runSqlite connText $ do- muser <- P.getBy (UniqueUserName userName)- case muser of- Just (P.Entity uid _) -> exportNetscapeBookmarks uid bookmarkFile- Nothing -> liftIO (print (userName ++ "not found"))- where- getConnText :: Maybe Text -> IO Text- getConnText mconn =- maybe- (P.sqlDatabase . appDatabaseConf <$> loadYamlSettings [configSettingsYml] [configSettingsYmlValue] useEnv)- pure- mconn-- formatUserSummary :: User -> Text- formatUserSummary User {..} =- intercalate- "\n"- [ "name: " <> userName,- "privateDefault: " <> tshow userPrivateDefault,- "archiveDefault: " <> tshow userArchiveDefault,- "suggestTags: " <> tshow userSuggestTags,- "privacyLock: " <> tshow userPrivacyLock,- "hasApiKey: " <> tshow (isJust userApiToken)- ]--data Password- = PasswordText Text- | PasswordFile FilePath- deriving (Show, Read)--parsePassword :: OA.Parser Password-parsePassword = passwordText <|> passwordFile- where- passwordText =- PasswordText- <$> OA.strOption- ( OA.long "userPassword"- <> OA.metavar "PASSWORD"- <> OA.help "Password in plain-text"- )-- passwordFile =- PasswordFile- <$> OA.strOption- ( OA.long "userPasswordFile"- <> OA.metavar "FILE"- <> OA.help "Password file"- )--instance ParseFields Password--instance ParseRecord Password where- parseRecord = fmap getOnly parseRecord--instance ParseField Password where- parseField _ _ _ _ = parsePassword+{-# OPTIONS_GHC -fno-warn-name-shadowing #-} + +module Main where + +import ClassyPrelude +import Data.CaseInsensitive qualified as CI +import Data.Text qualified as T +import Database.Persist qualified as P +import Database.Persist.Sqlite qualified as P +import Import (configSettingsYmlValue) +import Lens.Micro +import Model +import Model.Custom +import Model.File +import Model.FileNetscape (exportNetscapeBookmarks) +import Model.Migrations (dumpMigration, runAppMigrations, runPersistentMigrations) +import Options.Applicative qualified as OA +import Options.Applicative.Help (suggestionsHelp) +import Options.Generic +import Settings (AppSettings (..)) +import Types +import Yesod.Default.Config2 (configSettingsYml, loadYamlSettings, useEnv) + +data MigrationOpts + = CreateDB {conn :: Maybe Text} + | CreateUser + { conn :: Maybe Text, + userName :: Text, + userPassword :: Password, + privateDefault :: Maybe Bool, + archiveDefault :: Maybe Bool, + suggestTags :: Maybe Bool, + privacyLock :: Maybe Bool, + publicTagCloud :: Maybe Bool, + userLanguage :: Maybe I18nLang + } + | CreateApiKey + { conn :: Maybe Text, + userName :: Text + } + | DeleteUser + { conn :: Maybe Text, + userName :: Text + } + | ShowUser + { conn :: Maybe Text, + userName :: Text + } + | DeleteApiKey + { conn :: Maybe Text, + userName :: Text + } + | ImportBookmarks + { conn :: Maybe Text, + userName :: Text, + bookmarkFile :: FilePath + } + | ExportBookmarks + { conn :: Maybe Text, + userName :: Text, + bookmarkFile :: FilePath + } + | ImportFirefoxBookmarks + { conn :: Maybe Text, + userName :: Text, + bookmarkFile :: FilePath + } + | ImportNetscapeBookmarks + { conn :: Maybe Text, + userName :: Text, + bookmarkFile :: FilePath + } + | ExportNetscapeBookmarks + { conn :: Maybe Text, + userName :: Text, + bookmarkFile :: FilePath + } + | ImportNotes + { conn :: Maybe Text, + userName :: Text, + noteDirectory :: FilePath + } + | PrintMigrateDB {conn :: Maybe Text} + deriving (Generic, Show) + +instance ParseRecord MigrationOpts + +parseI18nLang :: OA.ReadM I18nLang +parseI18nLang = + OA.str >>= \s -> + maybe + (OA.readerError $ "Invalid language: '" <> s <> "' Supported languages: " <> supportedLangs) + pure + (toI18nLang s) + +instance ParseField I18nLang where + readField = parseI18nLang + +main :: IO () +main = do + hSetBuffering stdout LineBuffering + hSetBuffering stderr LineBuffering + args <- getRecord "Migrations" + case args of + PrintMigrateDB {..} -> do + connText <- getConnText conn + P.runSqlite connText dumpMigration + CreateDB {..} -> do + connText <- getConnText conn + let connInfo = + P.mkSqliteConnectionInfo connText + & set P.fkEnabled False + P.runSqliteInfo connInfo (runPersistentMigrations True) + P.runSqliteInfo connInfo (runAppMigrations True) + CreateUser {..} -> do + connText <- getConnText conn + P.runSqlite connText $ do + passwordText <- liftIO . fmap T.strip $ case userPassword of + PasswordText s -> pure s + PasswordFile f -> readFileUtf8 f + hash' <- liftIO (hashPassword passwordText) + let privateDefaultVal = fromMaybe False privateDefault + archiveDefaultVal = fromMaybe False archiveDefault + suggestTagsVal = fromMaybe True suggestTags + privacyLockVal = fromMaybe False privacyLock + publicTagCloudVal = fromMaybe False publicTagCloud + userLanguageVal = userLanguage + void $ + P.upsertBy + (UniqueUserName userName) + (User userName hash' Nothing privateDefaultVal archiveDefaultVal suggestTagsVal privacyLockVal publicTagCloudVal userLanguageVal) + [ UserPasswordHash P.=. hash', + UserPrivateDefault P.=. privateDefaultVal, + UserArchiveDefault P.=. archiveDefaultVal, + UserSuggestTags P.=. suggestTagsVal, + UserPrivacyLock P.=. privacyLockVal, + UserPublicTagCloud P.=. publicTagCloudVal, + UserLanguage P.=. userLanguageVal + ] + pure () :: DB () + ShowUser {..} -> do + connText <- getConnText conn + P.runSqlite connText $ do + muser <- P.getBy (UniqueUserName userName) + case muser of + Nothing -> liftIO (print (userName ++ " not found")) + Just (P.Entity _ user) -> liftIO (putStrLn (formatUserSummary user)) + CreateApiKey {..} -> do + connText <- getConnText conn + P.runSqlite connText $ do + apiKey@(ApiKey plainKey) <- liftIO generateApiKey + muser <- P.getBy (UniqueUserName userName) + case muser of + Nothing -> liftIO (print (userName ++ " not found")) + Just (P.Entity uid _) -> do + -- API key is only displayed once after creation, + -- since it is stored in hashed form. + let hashedKey = hashApiKey apiKey + P.update uid [UserApiToken P.=. Just hashedKey] + liftIO $ print plainKey + DeleteApiKey {..} -> do + connText <- getConnText conn + P.runSqlite connText $ do + muser <- P.getBy (UniqueUserName userName) + case muser of + Nothing -> liftIO (print (userName ++ " not found")) + Just (P.Entity uid _) -> do + P.update uid [UserApiToken P.=. Nothing] + DeleteUser {..} -> do + connText <- getConnText conn + P.runSqlite connText $ do + muser <- P.getBy (UniqueUserName userName) + case muser of + Nothing -> liftIO (print (userName ++ "not found")) + Just (P.Entity uid _) -> do + P.delete uid + pure () :: DB () + ExportBookmarks {..} -> do + connText <- getConnText conn + P.runSqlite connText $ do + muser <- P.getBy (UniqueUserName userName) + case muser of + Just (P.Entity uid _) -> exportFileBookmarks uid bookmarkFile + Nothing -> liftIO (print (userName ++ "not found")) + ImportBookmarks {..} -> do + connText <- getConnText conn + mfmarks <- readFileBookmarks bookmarkFile + case mfmarks of + Left e -> print e + Right fmarks -> + P.runSqlite connText $ do + muser <- P.getBy (UniqueUserName userName) + case muser of + Just (P.Entity uid _) -> do + n <- insertFileBookmarks uid fmarks + liftIO (print (show n ++ " bookmarks imported.")) + Nothing -> liftIO (print (userName ++ "not found")) + ImportFirefoxBookmarks {..} -> do + connText <- getConnText conn + mfmarks <- readFirefoxBookmarks bookmarkFile + case mfmarks of + Left e -> print e + Right fmarks -> + P.runSqlite connText $ do + muser <- P.getBy (UniqueUserName userName) + case muser of + Just (P.Entity uid _) -> do + n <- insertFirefoxBookmarks uid fmarks + liftIO (print (show n ++ " bookmarks imported.")) + Nothing -> liftIO (print (userName ++ "not found")) + ImportNotes {..} -> do + connText <- getConnText conn + P.runSqlite connText $ do + muser <- P.getBy (UniqueUserName userName) + case muser of + Just (P.Entity uid _) -> do + result <- insertDirFileNotes uid noteDirectory + case result of + Left e -> liftIO (print e) + Right n -> liftIO (print (show n ++ " notes imported.")) + Nothing -> liftIO (print (userName ++ "not found")) + ImportNetscapeBookmarks {..} -> do + connText <- getConnText conn + mcontent <- tryAny (readFile bookmarkFile) + case mcontent of + Left _ -> print ("Could not read file" :: Text) + Right (bs :: ByteString) -> + case parseNetscapeBookmarks (decodeUtf8 bs) of + Left e -> print e + Right nbmarks -> + P.runSqlite connText $ do + muser <- P.getBy (UniqueUserName userName) + case muser of + Just (P.Entity uid _) -> do + n <- insertNetscapeBookmarks uid nbmarks + liftIO (print (show n ++ " bookmarks imported.")) + Nothing -> liftIO (print (userName ++ "not found")) + ExportNetscapeBookmarks {..} -> do + connText <- getConnText conn + P.runSqlite connText $ do + muser <- P.getBy (UniqueUserName userName) + case muser of + Just (P.Entity uid _) -> exportNetscapeBookmarks uid bookmarkFile + Nothing -> liftIO (print (userName ++ "not found")) + where + getConnText :: Maybe Text -> IO Text + getConnText mconn = + maybe + (P.sqlDatabase . appDatabaseConf <$> loadYamlSettings [configSettingsYml] [configSettingsYmlValue] useEnv) + pure + mconn + + formatUserSummary :: User -> Text + formatUserSummary User {..} = + intercalate + "\n" + [ "name: " <> userName, + "privateDefault: " <> tshow userPrivateDefault, + "archiveDefault: " <> tshow userArchiveDefault, + "suggestTags: " <> tshow userSuggestTags, + "privacyLock: " <> tshow userPrivacyLock, + "publicTagCloud: " <> tshow userPublicTagCloud, + "hasApiKey: " <> tshow (isJust userApiToken) + ] + +data Password + = PasswordText Text + | PasswordFile FilePath + deriving (Show, Read) + +parsePassword :: OA.Parser Password +parsePassword = passwordText <|> passwordFile + where + passwordText = + PasswordText + <$> OA.strOption + ( OA.long "userPassword" + <> OA.metavar "PASSWORD" + <> OA.help "Password in plain-text" + ) + + passwordFile = + PasswordFile + <$> OA.strOption + ( OA.long "userPasswordFile" + <> OA.metavar "FILE" + <> OA.help "Password file" + ) + +instance ParseFields Password + +instance ParseRecord Password where + parseRecord = fmap getOnly parseRecord + +instance ParseField Password where + parseField _ _ _ _ = parsePassword
changelog.md view
@@ -1,168 +1,189 @@-# Changelog--## v0.0.36 (2026-06-26)--- improve UI stability & positioning of elements after first render for less flash of content-- add language internationalization- - add language selector on `settings` page (persisted in user db and in session cookie)- - supported languages: `en`, `de`, `es`, `fr`, `it`, `ja`, `ko`, `pl`, `pt-BR`, `ru`, `tr`, `uk`, `zh-Hans`, `zh-Hant`- - add appSetting `language-default`- - if not logged in and no previous cookie is present, the `language-default` is used- - adjusted `migration` command `createUser` to take `language` option-- corrected `migration` command `createUser` to set additional properties correctly on initial user creation-- replaced npm Moment package with Intl.DateTimeFormat--## v0.0.35 (2026-06-17)--- add "appMigrations" on startup; normalize utctime fields in db for correct sorting-- record "appMigration" history and app version history in db-- add startup logs with version and revision information-- add 'view in context' link, visible when viewing single bookmark listing-- on bookmark and note listing, change '« earlier' and 'later »' links from pagenum-based params to time-based 'before'/'after' params-- update robots.txt to disallow robots-- add short versions of search term specifiers & updated search documentation:- - u: for url:, t: for tags:, ti: for title:, d: for description:, b: for before:, a: for after:-- add OCI Image Specification annotation keys to docker image (including version & revision)--## v0.0.34 (2026-06-11)--- fix serialization bug in Add bookmark handler (introduced in v0.0.33)--## v0.0.33 (2026-06-08)--- add new `archive-backend`: `archivebox07`- - additional documentation in readme-- add new archive-related elements on UI (visible when `archive-backend` is enabled)- - add url popup: `archive` checkbox (only displays for new bookmarks)- - when `Account Settings`: `Archive new non-Private bookmarks by default` is checked, the Archive checkbox is checked by default- - upon submission, the archive backend will run if checked- - bookmark edit form: `archive` button- - when clicked, immediately sends a request to the archive backend- - when a bookmark is marked as private, the archive checkbox/archive button are disabled- - `Account Settings`: `Privacy Lock (Private Account)` only controls authorization to view user's content on espial; it has no effect on whether bookmarks are archived.-- update shared libs in runtime docker image-- add docker compose examples--## v0.0.32 (2026-05-28)--- change runtime docker image from `jonschoning/espial:scratch` to `gcr.io/distroless/base-debian12`-- fix css for 404 page--## v0.0.31 (2026-05-27)--- use values in `config/settings.yml` at run-time (on app startup), instead of only the values from compile-time embedding of `config/settings.yml`-- add Archive Backend: `wayback-machine`- - add Wayback Machine Backend-related settings:- - `wayback-machine-access-key`- - `wayback-machine-secret-key`-- remove Archive Backend: `archive-li`-- only show the archive link icon on the user's bookmark page if the the `archiveUrl` exists-- adjust dark-mode link visited color and toggle-- hide status of starred, to-read, and archive properties of bookmarks when not viewed by the bookmark owner--## v0.0.30 (2026-05-24)--- add Dark Mode (fixes #59)--## v0.0.29 (2026-05-07)--- Extend migration to add commands: `importnetscapebookmarks`, `exportnetscapebookmarks` (fixes #30)-- fix migration command `ImportBookmarks` (pinboard import file) parsing bug to handle when the description is a boolean (fixes #32)-- tag suggestions: when a tag exactly matches an existing tag, it will appear first in the suggestion list--## v0.0.28 (2026-05-06)--- add new app setting: `archive-backend: "_env:ARCHIVE_BACKEND:disabled"`- - default to `disabled`, since `archive-li` appears to no longer be working due to added captchas- - when archiving is disabled, the `Archive Non-Private Bookmarks` Account Setting is also disabled in the UI--## v0.0.27 (2026-05-05)--- prevent private tags (starts with ".") from showing on public bookmark listing for a user if not owned--## v0.0.26 (2026-05-04)--- Add Tag Suggestion when adding/editing bookmarks.-- Add account settings controls for `suggestTags` (default `True`).-- Extend migration `createuser` with `suggestTags` setting.-- Extend migration to add `showuser` command-- Extend migration to load sql connection from yaml settings if not provided-- use hashed js output + manifest.json in frontend build--## v0.0.25 (2026-05-03)--- Fix display bug for non-markdown notes.--## v0.0.24 (2026-04-24)--- Correct `extra-source-files` in `package.yaml`.-- Correct GHC warnings.--## v0.0.23 (2026-04-24)--- Migrate frontend code from PureScript to TypeScript/React.-- Update Stackage resolver: `lts-24.37`.--## v0.0.22 (2025-05-23)--- Update to Stackage LTS 23 (`ghc-9.8.4`).-- Purs package-set update.--## v0.0.21 (2024-01-15)--- Switch to ESM JavaScript module imports.--## v0.0.20 (2024-01-18)--- Update version bounds for Cabal dependencies.--## v0.0.19 (2023-12-19)--- Update GHC and PureScript dependencies to latest.--## v0.0.18 (2023-10-02)--- Update GHC and PureScript dependencies to latest.--## v0.0.17 (2023-07-04)--- Update to GHC 9.4.5.--## v0.0.16 (2023-01-05)--- Add SIGTERM handler on Linux.-- Adjust Docker CMD entrypoint.--## v0.0.15 (2022-09-11)--- Avoid using external `static/tmp` folder for generated static files.--## v0.0.14 (2022-06-01)--- Upgrade to PureScript v0.15.-- Increase bookmarklet window height.--## v0.0.13 (2022-04-26)--- Add setting `ALLOW_NON_HTTP_URL_SCHEMES` (default `false`).--## v0.0.12 (2022-04-17)--- Update to GHC 9.--## v0.0.11 (2022-04-16)--- Add API key auth.-- Add `CreateApiKey`/`DeleteApiKey` commands to executable `migration`.--## v0.0.10 (2022-04-05)--- Update PureScript and package versions.--## v0.0.9 (2022-04-05)--- Rolling releases.--## v0.0.7 (2019-01-30)--- Init.+# Changelog + +## v0.0.37 (2026-06-30) + +- add Bulk Edit for bookmarks + - toggle the **bulk edit** panel via the top-level `edit` link in the bookmark listing toolbar + - Action and tag operations can be combined in a single submission + - Selection scope respects the current page's filter, tag, and search context, allowing targeted bulk edits + - e.g. effective rename of a tag by first clicking on an instance of it to filter by that tag. Then, bulk edit all pages, removing the existing tag and adding the new tag +- Tag Cloud improvements + - Add account setting `Public Tag Cloud` to make user's tag cloud available for public users (fixes #48) + - Related Tags includes `all‧2‧5‧10‧20` selectors + - By default, or when clicked, `Related Tags` only shows top 200 tags similar to `Top Tags` + - Related Tags section is now always closed by default +- add optional in-process TLS + - to enable HTTPS without a reverse proxy, set `TLS_CERT_FILE` and `TLS_KEY_FILE` (PEM) + - certificate is reloaded from disk automatically every 12 hours; send `SIGHUP` to trigger an immediate reload + - reverse proxy (Caddy, nginx, Cloudflare Tunnel, etc.) remains the recommended approach for production +- standardized bookmark api routes +- update stack package set lts-24.42 -> lts-24.46 +- improved error handling & feedback in UI for api requests +- bug fix: properly escape `_` and `%` in queries so they're treated as literals, not SQL wildcards + +## v0.0.36 (2026-06-26) + +- improve UI stability & positioning of elements after first render for less flash of content +- add language internationalization + - add language selector on `settings` page (persisted in user db and in session cookie) + - supported languages: `en`, `de`, `es`, `fr`, `it`, `ja`, `ko`, `pl`, `pt-BR`, `ru`, `tr`, `uk`, `zh-Hans`, `zh-Hant` + - add appSetting `language-default` + - if not logged in and no previous cookie is present, the `language-default` is used + - adjusted `migration` command `createUser` to take `language` option +- corrected `migration` command `createUser` to set additional properties correctly on initial user creation +- replaced npm Moment package with Intl.DateTimeFormat + +## v0.0.35 (2026-06-17) + +- add "appMigrations" on startup; normalize utctime fields in db for correct sorting +- record "appMigration" history and app version history in db +- add startup logs with version and revision information +- add 'view in context' link, visible when viewing single bookmark listing +- on bookmark and note listing, change '« earlier' and 'later »' links from pagenum-based params to time-based 'before'/'after' params +- update robots.txt to disallow robots +- add short versions of search term specifiers & updated search documentation: + - u: for url:, t: for tags:, ti: for title:, d: for description:, b: for before:, a: for after: +- add OCI Image Specification annotation keys to docker image (including version & revision) + +## v0.0.34 (2026-06-11) + +- fix serialization bug in Add bookmark handler (introduced in v0.0.33) + +## v0.0.33 (2026-06-08) + +- add new `archive-backend`: `archivebox07` + - additional documentation in readme +- add new archive-related elements on UI (visible when `archive-backend` is enabled) + - add url popup: `archive` checkbox (only displays for new bookmarks) + - when `Account Settings`: `Archive new non-Private bookmarks by default` is checked, the Archive checkbox is checked by default + - upon submission, the archive backend will run if checked + - bookmark edit form: `archive` button + - when clicked, immediately sends a request to the archive backend + - when a bookmark is marked as private, the archive checkbox/archive button are disabled + - `Account Settings`: `Privacy Lock (Private Account)` only controls authorization to view user's content on espial; it has no effect on whether bookmarks are archived. +- update shared libs in runtime docker image +- add docker compose examples + +## v0.0.32 (2026-05-28) + +- change runtime docker image from `jonschoning/espial:scratch` to `gcr.io/distroless/base-debian12` +- fix css for 404 page + +## v0.0.31 (2026-05-27) + +- use values in `config/settings.yml` at run-time (on app startup), instead of only the values from compile-time embedding of `config/settings.yml` +- add Archive Backend: `wayback-machine` + - add Wayback Machine Backend-related settings: + - `wayback-machine-access-key` + - `wayback-machine-secret-key` +- remove Archive Backend: `archive-li` +- only show the archive link icon on the user's bookmark page if the the `archiveUrl` exists +- adjust dark-mode link visited color and toggle +- hide status of starred, to-read, and archive properties of bookmarks when not viewed by the bookmark owner + +## v0.0.30 (2026-05-24) + +- add Dark Mode (fixes #59) + +## v0.0.29 (2026-05-07) + +- Extend migration to add commands: `importnetscapebookmarks`, `exportnetscapebookmarks` (fixes #30) +- fix migration command `ImportBookmarks` (pinboard import file) parsing bug to handle when the description is a boolean (fixes #32) +- tag suggestions: when a tag exactly matches an existing tag, it will appear first in the suggestion list + +## v0.0.28 (2026-05-06) + +- add new app setting: `archive-backend: "_env:ARCHIVE_BACKEND:disabled"` + - default to `disabled`, since `archive-li` appears to no longer be working due to added captchas + - when archiving is disabled, the `Archive Non-Private Bookmarks` Account Setting is also disabled in the UI + +## v0.0.27 (2026-05-05) + +- prevent private tags (starts with ".") from showing on public bookmark listing for a user if not owned + +## v0.0.26 (2026-05-04) + +- Add Tag Suggestion when adding/editing bookmarks. +- Add account settings controls for `suggestTags` (default `True`). +- Extend migration `createuser` with `suggestTags` setting. +- Extend migration to add `showuser` command +- Extend migration to load sql connection from yaml settings if not provided +- use hashed js output + manifest.json in frontend build + +## v0.0.25 (2026-05-03) + +- Fix display bug for non-markdown notes. + +## v0.0.24 (2026-04-24) + +- Correct `extra-source-files` in `package.yaml`. +- Correct GHC warnings. + +## v0.0.23 (2026-04-24) + +- Migrate frontend code from PureScript to TypeScript/React. +- Update Stackage resolver: `lts-24.37`. + +## v0.0.22 (2025-05-23) + +- Update to Stackage LTS 23 (`ghc-9.8.4`). +- Purs package-set update. + +## v0.0.21 (2024-01-15) + +- Switch to ESM JavaScript module imports. + +## v0.0.20 (2024-01-18) + +- Update version bounds for Cabal dependencies. + +## v0.0.19 (2023-12-19) + +- Update GHC and PureScript dependencies to latest. + +## v0.0.18 (2023-10-02) + +- Update GHC and PureScript dependencies to latest. + +## v0.0.17 (2023-07-04) + +- Update to GHC 9.4.5. + +## v0.0.16 (2023-01-05) + +- Add SIGTERM handler on Linux. +- Adjust Docker CMD entrypoint. + +## v0.0.15 (2022-09-11) + +- Avoid using external `static/tmp` folder for generated static files. + +## v0.0.14 (2022-06-01) + +- Upgrade to PureScript v0.15. +- Increase bookmarklet window height. + +## v0.0.13 (2022-04-26) + +- Add setting `ALLOW_NON_HTTP_URL_SCHEMES` (default `false`). + +## v0.0.12 (2022-04-17) + +- Update to GHC 9. + +## v0.0.11 (2022-04-16) + +- Add API key auth. +- Add `CreateApiKey`/`DeleteApiKey` commands to executable `migration`. + +## v0.0.10 (2022-04-05) + +- Update PureScript and package versions. + +## v0.0.9 (2022-04-05) + +- Rolling releases. + +## v0.0.7 (2019-01-30) + +- Init.
config/routes view
@@ -1,56 +1,58 @@-/static StaticR Static appStatic--/locales/#Text/*Texts LocalesFileR GET--/favicon.ico FaviconR GET-/robots.txt RobotsR GET--/auth AuthR Auth getAuth---- notes-!/#UserNameP/notes NotesR GET-!/#UserNameP/notes/add AddNoteViewR GET-!/notes/add AddNoteSlimViewR GET-!/#UserNameP/notes/feed.xml NotesFeedR GET-!/#UserNameP/notes/#NtSlug NoteR GET-!/api/note/add AddNoteR POST-!/api/note/#Int64 DeleteNoteR DELETE---- user-/ HomeR GET-!/#UserNameP UserR GET-!/#UserNameP/#SharedP UserSharedR GET-!/#UserNameP/#FilterP UserFilterR GET-!/#UserNameP/#TagsP UserTagsR GET--!/#UserNameP/feed.xml UserFeedR GET-!/#UserNameP/#SharedP/feed.xml UserFeedSharedR GET-!/#UserNameP/#FilterP/feed.xml UserFeedFilterR GET-!/#UserNameP/#TagsP/feed.xml UserFeedTagsR GET---- settings-/Settings AccountSettingsR GET-api/accountSettings EditAccountSettingsR POST---- settings/password-/Settings/Password ChangePasswordR GET POST---- add-/add AddViewR GET-api/add AddR POST---- api-api/lookuptitle LookupTitleR POST-api/tagcloud UserTagCloudR POST-api/tagcloudmode UserTagCloudModeR POST-api/tagSuggestions TagSuggestionsR POST---- edit-/bm/#Int64 DeleteR DELETE-/bm/#Int64/read ReadR POST-/bm/#Int64/star StarR POST-/bm/#Int64/unstar UnstarR POST-/bm/#Int64/archive ArchiveBookmarkR POST---- doc-/docs/search DocsSearchR GET+/static StaticR Static appStatic + +/locales/#Text/*Texts LocalesFileR GET + +/favicon.ico FaviconR GET +/robots.txt RobotsR GET + +/auth AuthR Auth getAuth + +-- notes +!/#UserNameP/notes NotesR GET +!/#UserNameP/notes/add AddNoteViewR GET +!/notes/add AddNoteSlimViewR GET +!/#UserNameP/notes/feed.xml NotesFeedR GET +!/#UserNameP/notes/#NtSlug NoteR GET +!/api/note/add AddNoteR POST +!/api/note/#Int64 DeleteNoteR DELETE + +-- user +/ HomeR GET +!/#UserNameP UserR GET +!/#UserNameP/#SharedP UserSharedR GET +!/#UserNameP/#FilterP UserFilterR GET +!/#UserNameP/#TagsP UserTagsR GET + +!/#UserNameP/feed.xml UserFeedR GET +!/#UserNameP/#SharedP/feed.xml UserFeedSharedR GET +!/#UserNameP/#FilterP/feed.xml UserFeedFilterR GET +!/#UserNameP/#TagsP/feed.xml UserFeedTagsR GET + +-- settings +/Settings AccountSettingsR GET +api/accountSettings EditAccountSettingsR POST + +-- settings/password +/Settings/Password ChangePasswordR GET POST + +-- add +/add AddViewR GET +api/add AddR POST + +-- api +api/lookuptitle LookupTitleR POST +api/tagSuggestions TagSuggestionsR POST +api/tagcloud UserTagCloudR POST +api/tagcloudmode UserTagCloudModeR POST +api/user/#UserNameP/tagcloud UserPublicTagCloudR POST + +-- edit +api/bm/#Int64 DeleteR DELETE +api/bm/#Int64/read ReadR PATCH +api/bm/#Int64/star StarR PATCH +api/bm/#Int64/unstar UnstarR PATCH +api/bm/#Int64/archive ArchiveBookmarkR POST +!api/bm/bulk BmBulkR POST + +-- doc +/docs/search DocsSearchR GET
config/settings.yml view
@@ -1,65 +1,72 @@-# Values formatted like "_env:ENV_VAR_NAME:default_value" can be overridden by the specified environment variable.-# See https://github.com/yesodweb/yesod/wiki/Configuration#overriding-configuration-values-with-environment-variables--static-dir: "_env:STATIC_DIR:static"-host: "_env:HOST:*4" # any IPv4 host-port: "_env:PORT:3000" # NB: The port `yesod devel` uses is distinct from this value. Set the `yesod devel` port from the command line.-ip-from-header: "_env:IP_FROM_HEADER:false"--# Default behavior: determine the application root from the request headers.-# Uncomment to set an explicit approot-#approot: "_env:APPROOT:http://localhost:3000"--# By default, `yesod devel` runs in development, and built executables use-# production settings (see below). To override this, use the following:-#-# development: false--# Optional values with the following production defaults.-# In development, they default to the inverse.-#-detailed-logging: "_env:DETAILED_LOGGING" # false-should-log-all: "_env:SHOULD_LOG_ALL" # false-startup-logging: "_env:STARTUP_LOGGING" # true-request-logging: "_env:REQUEST_LOGGING" # true-# reload-templates: false-# mutable-static: false-# skip-combining: false-# auth-dummy-login : false--# NB: If you need a numeric value (e.g. 123) to parse as a String, wrap it in single quotes (e.g. "_env:PGPASS:'123'")-# See https://github.com/yesodweb/yesod/wiki/Configuration#parsing-numeric-values-as-strings--database:- # See config/test-settings.yml for an override during tests- database: "_env:SQLITE_DATABASE:espial.sqlite3"- # database: ":memory:"- poolsize: "_env:SQLITE_POOLSIZE:10"--copyright: Insert copyright statement here-# analytics: UA-YOURCODE--archive-backend: "_env:ARCHIVE_BACKEND:disabled"-# archive-backend: "_env:ARCHIVE_BACKEND:wayback-machine"-# archive-backend: "_env:ARCHIVE_BACKEND:archivebox07"--archive-socks-proxy-host: "_env:ARCHIVE_SOCKS_PROXY_HOST"-archive-socks-proxy-port: "_env:ARCHIVE_SOCKS_PROXY_PORT"--wayback-machine-access-key: "_env:WAYBACK_MACHINE_ACCESS_KEY" # Wayback Machine S3 access key, used when archive-backend is set to wayback-machine.-wayback-machine-secret-key: "_env:WAYBACK_MACHINE_SECRET_KEY" # Wayback Machine S3 secret key, used when archive-backend is set to wayback-machine.--archivebox-url: "_env:ARCHIVEBOX_URL" # ArchiveBox base URL espial uses internally for login/add, e.g. http://archivebox:8000 inside docker compose.-archivebox-public-url: "_env:ARCHIVEBOX_PUBLIC_URL" # Public ArchiveBox URL stored on bookmarks, e.g. http://localhost:8000.-archivebox-username: "_env:ARCHIVEBOX_USERNAME" # ArchiveBox admin username used when archive-backend is set to archivebox.-archivebox-password: "_env:ARCHIVEBOX_PASSWORD" # ArchiveBox admin password used when archive-backend is set to archivebox.-archivebox-tag: "_env:ARCHIVEBOX_TAG:espial"-archivebox-plugins: "_env:ARCHIVEBOX_PLUGINS:title,favicon,singlefile,screenshot" # Comma-separated list of ArchiveBox plugins to run when espial adds a URL to ArchiveBox.--source-code-uri: "_env:SOURCE_CODE_URI:https://github.com/jonschoning/espial"--ssl-only: "_env:SSL_ONLY" # false--allow-non-http-url-schemes: "_env:ALLOW_NON_HTTP_URL_SCHEMES:false"--language-default: "_env:LANGUAGE_DEFAULT:en"+# Values formatted like "_env:ENV_VAR_NAME:default_value" can be overridden by the specified environment variable. +# See https://github.com/yesodweb/yesod/wiki/Configuration#overriding-configuration-values-with-environment-variables + +static-dir: "_env:STATIC_DIR:static" +host: "_env:HOST:*4" # any IPv4 host +port: "_env:PORT:3000" # NB: The port `yesod devel` uses is distinct from this value. Set the `yesod devel` port from the command line. +ip-from-header: "_env:IP_FROM_HEADER:false" + +# Default behavior: determine the application root from the request headers. +# Uncomment to set an explicit approot +#approot: "_env:APPROOT:http://localhost:3000" + +# By default, `yesod devel` runs in development, and built executables use +# production settings (see below). To override this, use the following: +# +# development: false + +# Optional values with the following production defaults. +# In development, they default to the inverse. +# +detailed-logging: "_env:DETAILED_LOGGING" # false +should-log-all: "_env:SHOULD_LOG_ALL" # false +startup-logging: "_env:STARTUP_LOGGING" # true +request-logging: "_env:REQUEST_LOGGING" # true +# reload-templates: false +# mutable-static: false +# skip-combining: false +# auth-dummy-login : false + +# NB: If you need a numeric value (e.g. 123) to parse as a String, wrap it in single quotes (e.g. "_env:PGPASS:'123'") +# See https://github.com/yesodweb/yesod/wiki/Configuration#parsing-numeric-values-as-strings + +database: + # See config/test-settings.yml for an override during tests + database: "_env:SQLITE_DATABASE:espial.sqlite3" + # database: ":memory:" + poolsize: "_env:SQLITE_POOLSIZE:10" + +copyright: Insert copyright statement here +# analytics: UA-YOURCODE + +archive-backend: "_env:ARCHIVE_BACKEND:disabled" +# archive-backend: "_env:ARCHIVE_BACKEND:wayback-machine" +# archive-backend: "_env:ARCHIVE_BACKEND:archivebox07" + +archive-socks-proxy-host: "_env:ARCHIVE_SOCKS_PROXY_HOST" +archive-socks-proxy-port: "_env:ARCHIVE_SOCKS_PROXY_PORT" + +wayback-machine-access-key: "_env:WAYBACK_MACHINE_ACCESS_KEY" # Wayback Machine S3 access key, used when archive-backend is set to wayback-machine. +wayback-machine-secret-key: "_env:WAYBACK_MACHINE_SECRET_KEY" # Wayback Machine S3 secret key, used when archive-backend is set to wayback-machine. + +archivebox-url: "_env:ARCHIVEBOX_URL" # ArchiveBox base URL espial uses internally for login/add, e.g. http://archivebox:8000 inside docker compose. +archivebox-public-url: "_env:ARCHIVEBOX_PUBLIC_URL" # Public ArchiveBox URL stored on bookmarks, e.g. http://localhost:8000. +archivebox-username: "_env:ARCHIVEBOX_USERNAME" # ArchiveBox admin username used when archive-backend is set to archivebox. +archivebox-password: "_env:ARCHIVEBOX_PASSWORD" # ArchiveBox admin password used when archive-backend is set to archivebox. +archivebox-tag: "_env:ARCHIVEBOX_TAG:espial" +archivebox-plugins: "_env:ARCHIVEBOX_PLUGINS:title,favicon,singlefile,screenshot" # Comma-separated list of ArchiveBox plugins to run when espial adds a URL to ArchiveBox. + +source-code-uri: "_env:SOURCE_CODE_URI:https://github.com/jonschoning/espial" + +ssl-only: "_env:SSL_ONLY" # when true, sets secure session cookie. + +# Optional: enable in-process TLS (see README § TLS / Reverse Proxy). +# Reverse proxy (Caddy, nginx, Cloudflare Tunnel, etc.) is the recommended approach. +tls-cert-file: "_env:TLS_CERT_FILE" # path to TLS certificate file (PEM); enables TLS when set together with tls-key-file +tls-key-file: "_env:TLS_KEY_FILE" # path to TLS private key file (PEM, unencrypted) + +allow-non-http-url-schemes: "_env:ALLOW_NON_HTTP_URL_SCHEMES:false" + +language-default: "_env:LANGUAGE_DEFAULT:en" + +public-tag-cloud-cache-duration-seconds: "_env:PUBLIC_TAG_CLOUD_CACHE_DURATION_SECONDS:30"
docker-compose.archivebox07.yml view
@@ -1,48 +1,52 @@-services:- espial:- image: '${HUB_REPO:-localhost}/${APPIMAGE:-espial:espial}'- restart: unless-stopped- build:- context: .- dockerfile: ${ESPIAL_DOCKERFILE:-./Dockerfile}- ports:- - "3000:3000"- volumes:- - '${DATA:-.}:/app/data'- environment:- PORT: 3000- SQLITE_DATABASE: /app/data/espial.sqlite3- IP_FROM_HEADER: false- SHOULD_LOG_ALL: ${SHOULD_LOG_ALL:-false}- ARCHIVE_BACKEND: archivebox07- ARCHIVEBOX_URL: ${ARCHIVEBOX_URL:-http://archivebox:8000}- ARCHIVEBOX_PUBLIC_URL: ${ARCHIVEBOX_PUBLIC_URL:-http://localhost:8000}- ARCHIVEBOX_USERNAME: ${ARCHIVEBOX_USERNAME:-admin}- ARCHIVEBOX_PASSWORD: ${ARCHIVEBOX_PASSWORD:-change-me}- ARCHIVEBOX_TAG: ${ARCHIVEBOX_TAG:-espial}- ARCHIVEBOX_PLUGINS: ${ARCHIVEBOX_PLUGINS:-title,favicon,singlefile,screenshot}-- archivebox:- image: ${ARCHIVEBOX_IMAGE:-archivebox/archivebox:0.7}- restart: unless-stopped- command:- - sh- - -c- - |- if [ "$$ADMIN_PASSWORD" = "change-me" ]; then- echo "Error: ADMIN_PASSWORD (ARCHIVEBOX_PASSWORD) is set to the default value. Please change it before running the server." && exit 1- else- archivebox server --quick-init 0.0.0.0:8000- fi- ports:- - "${ARCHIVEBOX_PORT:-8000}:8000"- volumes:- - '${ARCHIVEBOX_DATA:-./archivebox-data}:/data'- environment:- ALLOWED_HOSTS: ${ARCHIVEBOX_ALLOWED_HOSTS:-*}- ADMIN_USERNAME: ${ARCHIVEBOX_USERNAME:-admin}- ADMIN_PASSWORD: ${ARCHIVEBOX_PASSWORD:-change-me}- PUBLIC_INDEX: ${ARCHIVEBOX_PUBLIC_INDEX:-false}- PUBLIC_SNAPSHOTS: ${ARCHIVEBOX_PUBLIC_SNAPSHOTS:-false}- PUBLIC_ADD_VIEW: ${ARCHIVEBOX_PUBLIC_ADD_VIEW:-false}- shm_size: "1gb"+services: + espial: + image: '${HUB_REPO:-localhost}/${APPIMAGE:-espial:espial}' + restart: unless-stopped + build: + context: . + dockerfile: ${ESPIAL_DOCKERFILE:-./Dockerfile} + ports: + - "3000:3000" + volumes: + - '${DATA:-.}:/app/data' + environment: + PORT: 3000 + SQLITE_DATABASE: /app/data/espial.sqlite3 + IP_FROM_HEADER: false + # SSL_ONLY: false + # Optional: enable in-process TLS (reverse proxy is recommended; see README § TLS / Reverse Proxy) + # TLS_CERT_FILE: /app/data/tls/cert.pem + # TLS_KEY_FILE: /app/data/tls/key.pem + SHOULD_LOG_ALL: ${SHOULD_LOG_ALL:-false} + ARCHIVE_BACKEND: archivebox07 + ARCHIVEBOX_URL: ${ARCHIVEBOX_URL:-http://archivebox:8000} + ARCHIVEBOX_PUBLIC_URL: ${ARCHIVEBOX_PUBLIC_URL:-http://localhost:8000} + ARCHIVEBOX_USERNAME: ${ARCHIVEBOX_USERNAME:-admin} + ARCHIVEBOX_PASSWORD: ${ARCHIVEBOX_PASSWORD:-change-me} + ARCHIVEBOX_TAG: ${ARCHIVEBOX_TAG:-espial} + ARCHIVEBOX_PLUGINS: ${ARCHIVEBOX_PLUGINS:-title,favicon,singlefile,screenshot} + + archivebox: + image: ${ARCHIVEBOX_IMAGE:-archivebox/archivebox:0.7} + restart: unless-stopped + command: + - sh + - -c + - | + if [ "$$ADMIN_PASSWORD" = "change-me" ]; then + echo "Error: ADMIN_PASSWORD (ARCHIVEBOX_PASSWORD) is set to the default value. Please change it before running the server." && exit 1 + else + archivebox server --quick-init 0.0.0.0:8000 + fi + ports: + - "${ARCHIVEBOX_PORT:-8000}:8000" + volumes: + - '${ARCHIVEBOX_DATA:-./archivebox-data}:/data' + environment: + ALLOWED_HOSTS: ${ARCHIVEBOX_ALLOWED_HOSTS:-*} + ADMIN_USERNAME: ${ARCHIVEBOX_USERNAME:-admin} + ADMIN_PASSWORD: ${ARCHIVEBOX_PASSWORD:-change-me} + PUBLIC_INDEX: ${ARCHIVEBOX_PUBLIC_INDEX:-false} + PUBLIC_SNAPSHOTS: ${ARCHIVEBOX_PUBLIC_SNAPSHOTS:-false} + PUBLIC_ADD_VIEW: ${ARCHIVEBOX_PUBLIC_ADD_VIEW:-false} + shm_size: "1gb"
docker-compose.yml view
@@ -1,27 +1,30 @@-services:- espial:- image: '${HUB_REPO:-localhost}/${APPIMAGE:-espial:espial}'- restart: unless-stopped- build:- context: .- dockerfile: ${ESPIAL_DOCKERFILE:-./Dockerfile}- ports:- - "3000:3000"- volumes:- - '${DATA:-.}:/app/data'- environment:- PORT: 3000- SQLITE_DATABASE: /app/data/espial.sqlite3- IP_FROM_HEADER: false- # SSL_ONLY: false- SHOULD_LOG_ALL: ${SHOULD_LOG_ALL:-false}- # DETAILED_LOGGING: false- # ALLOW_NON_HTTP_URL_SCHEMES: false- # SOURCE_CODE_URI: https://github.com/jonschoning/espial- # ARCHIVE_SOCKS_PROXY_HOST: localhost- # ARCHIVE_SOCKS_PROXY_PORT: 8888-- ARCHIVE_BACKEND: ${ARCHIVE_BACKEND:-disabled}- # ARCHIVE_BACKEND: wayback-machine- # WAYBACK_MACHINE_ACCESS_KEY: ACCESS_KEY+services: + espial: + image: '${HUB_REPO:-localhost}/${APPIMAGE:-espial:espial}' + restart: unless-stopped + build: + context: . + dockerfile: ${ESPIAL_DOCKERFILE:-./Dockerfile} + ports: + - "3000:3000" + volumes: + - '${DATA:-.}:/app/data' + environment: + PORT: 3000 + SQLITE_DATABASE: /app/data/espial.sqlite3 + IP_FROM_HEADER: false + # SSL_ONLY: false + # Optional: enable in-process TLS (reverse proxy is recommended; see README § TLS / Reverse Proxy) + # TLS_CERT_FILE: /app/data/tls/cert.pem + # TLS_KEY_FILE: /app/data/tls/key.pem + SHOULD_LOG_ALL: ${SHOULD_LOG_ALL:-false} + # DETAILED_LOGGING: false + # ALLOW_NON_HTTP_URL_SCHEMES: false + # SOURCE_CODE_URI: https://github.com/jonschoning/espial + # ARCHIVE_SOCKS_PROXY_HOST: localhost + # ARCHIVE_SOCKS_PROXY_PORT: 8888 + + ARCHIVE_BACKEND: ${ARCHIVE_BACKEND:-disabled} + # ARCHIVE_BACKEND: wayback-machine + # WAYBACK_MACHINE_ACCESS_KEY: ACCESS_KEY # WAYBACK_MACHINE_SECRET_KEY: SECRET_KEY
espial.cabal view
@@ -1,557 +1,571 @@-cabal-version: 2.2---- This file has been generated from package.yaml by hpack version 0.39.1.------ see: https://github.com/sol/hpack--name: espial-version: 0.0.36-synopsis: Espial is an open-source, web-based bookmarking server.-description: Espial is an open-source, web-based bookmarking server.- - Yesod + TypeScript + sqlite3- - multi-user (w/ privacy scopes)- - multi-language (i18n)- - tags, stars, editing, deleting-category: Web-homepage: https://github.com/jonschoning/espial-bug-reports: https://github.com/jonschoning/espial/issues-author: Jon Schoning-maintainer: jonschoning@gmail.com-copyright: Copyright (c) 2018 Jon Schoning-license: AGPL-3.0-or-later-license-file: LICENSE-build-type: Simple-tested-with:- GHC == 9.10.3-extra-source-files:- Dockerfile- Dockerfile.buildkit- Makefile- appmigrations/002-normalize-bookmark-utctime-add-z.sql- appmigrations/002-normalize-bookmark-utctime-remove-z.sql- appmigrations/002-normalize-note-utctime-add-z.sql- appmigrations/002-normalize-note-utctime-remove-z.sql- config/favicon.ico- config/keter.yml- config/robots.txt- config/routes- config/settings.yml- config/test-settings.yml- docker-compose.archivebox07.yml- docker-compose.yml- frontend/.gitignore- frontend/.prettierignore- frontend/.prettierrc- frontend/Makefile- frontend/README.md- frontend/eslint.config.mjs- frontend/package-lock.json- frontend/package.json- frontend/scripts/publish-bundle.mjs- frontend/scripts/report-dist.mjs- frontend/src/@types/i18next.d.ts- frontend/src/@types/resources.ts- frontend/src/api.ts- frontend/src/components/AccountSettings.tsx- frontend/src/components/AddForm.tsx- frontend/src/components/BList.tsx- frontend/src/components/BMark.tsx- frontend/src/components/Markdown.tsx- frontend/src/components/NList.tsx- frontend/src/components/NNote.tsx- frontend/src/components/TagCloud.tsx- frontend/src/components/TagSuggestionsDropdown.tsx- frontend/src/globals.ts- frontend/src/hooks/useTagSuggestions.ts- frontend/src/i18n.ts- frontend/src/index.tsx- frontend/src/stores/bookmarksStore.ts- frontend/src/stores/tagCloudStore.ts- frontend/src/types.ts- frontend/src/util.ts- frontend/tsconfig.json- hie.yaml- package.yaml- stack.yaml- stack.yaml.lock- static/css/common.css- static/css/main.css- static/css/popup.css- static/css/tachyons.min.css- static/css/tachyons.min.css.gz- static/fonts/glyphicons-halflings-regular.eot- static/fonts/glyphicons-halflings-regular.svg- static/fonts/glyphicons-halflings-regular.ttf- static/fonts/glyphicons-halflings-regular.woff- static/images/bluepin.gif- static/js/app-MD5JJQMB.min.js- static/js/app-MD5JJQMB.min.js.gz- static/js/app-MD5JJQMB.min.js.map- static/js/app-MD5JJQMB.min.js.map.gz- static/js/js.cookie-2.2.0.min.js- static/js/js.cookie-2.2.0.min.js.gz- static/js/manifest.json- static/locales/de/translation.json- static/locales/en/translation.json- static/locales/es/translation.json- static/locales/fr/translation.json- static/locales/it/translation.json- static/locales/ja/translation.json- static/locales/ko/translation.json- static/locales/pl/translation.json- static/locales/pt-BR/translation.json- static/locales/ru/translation.json- static/locales/tr/translation.json- static/locales/uk/translation.json- static/locales/zh-Hans/translation.json- static/locales/zh-Hant/translation.json- templates/change-password.hamlet- templates/default-layout-wrapper.hamlet- templates/default-layout.hamlet- templates/docs-search.hamlet- templates/homepage.hamlet- templates/login.hamlet- templates/note.hamlet- templates/notes.hamlet- templates/pager.hamlet- templates/popup-layout.hamlet- templates/search.hamlet- templates/user-settings.hamlet- templates/user.hamlet-extra-doc-files:- changelog.md- README.md- SECURITY.md--source-repository head- type: git- location: https://github.com/jonschoning/espial.git--flag dev- description: Turn on development settings, like auto-reload templates.- manual: False- default: False--flag library-only- description: Build for use with "yesod devel"- manual: False- default: False--flag usebuildinfo- description: read buildinfo from generated file buildinfo/BuildInfo.hs- manual: True- default: False--library- exposed-modules:- Application- Archiver.ArchiveBox07- Archiver.Backend- Archiver.Debug- Archiver.WaybackMachine- Foundation- Generic- GraphUtils- Handler.AccountSettings- Handler.Add- Handler.Archive- Handler.Common- Handler.Docs- Handler.Edit- Handler.Home- Handler.Locales- Handler.Notes- Handler.User- I18n- Import- Import.NoFoundation- Model- Model.Custom- Model.File- Model.FileBookmark- Model.FileFirefox- Model.FileNetscape- Model.FileNote- Model.Form- Model.Migrations- PathPiece- Pretty- Settings- Settings.StaticFiles- Types- Util- Version- Paths_espial- autogen-modules:- Paths_espial- hs-source-dirs:- src- default-extensions:- BlockArguments- CPP- NoImplicitPrelude- OverloadedStrings- PartialTypeSignatures- QuasiQuotes- RecordWildCards- TemplateHaskell- TypeFamilies- ViewPatterns- build-depends:- aeson >=1.4- , attoparsec- , base >=4.18.1.0 && <5- , base64 ==1.*- , bcrypt >=0.0.8- , blaze-html >=0.9 && <1- , blaze-markup- , bytestring >=0.11.5 && <0.13- , case-insensitive- , classy-prelude >=1.4 && <1.6- , classy-prelude-conduit >=1.4 && <1.6- , classy-prelude-yesod >=1.4 && <1.6- , conduit >=1.0 && <2- , containers- , cryptohash-sha256- , crypton-connection- , data-default- , directory >=1.1 && <1.4- , entropy- , esqueleto >=3.5.11.1 && <3.7- , fast-logger >=2.2 && <4- , fgl- , file-embed- , filepath- , foreign-store- , gitrev- , hjsmin >=0.1 && <0.3- , hscolour- , html-entities- , http-api-data >=0.3.4- , http-client- , http-client-tls ==0.3.*- , http-conduit ==2.3.*- , http-types- , iso8601-time >=0.1.3- , microlens- , monad-logger ==0.3.*- , mtl- , parser-combinators- , persistent >=2.14 && <2.18- , persistent-sqlite ==2.13.3.0- , persistent-template ==2.12.*- , pretty-show- , safe- , shakespeare >=2.0 && <2.2- , template-haskell- , text ==2.*- , time- , transformers >=0.2.2- , unordered-containers- , vector- , wai- , wai-extra >=3.0 && <3.2- , wai-logger- , warp >=3.0 && <3.5- , yaml >=0.8 && <0.12- , yesod >=1.6 && <1.8- , yesod-auth >=1.6 && <1.8- , yesod-core >=1.6 && <1.8- , yesod-form >=1.6 && <1.8- , yesod-newsfeed >=1.6 && <1.8- , yesod-static >=1.6 && <1.8- default-language: GHC2024- if !os(windows)- build-depends:- unix- if flag(usebuildinfo)- exposed-modules:- BuildInfo- hs-source-dirs:- buildinfo- cpp-options: -DUSE_BUILDINFO- if (flag(dev)) || (flag(library-only))- ghc-options: -Wall -fwarn-tabs- cpp-options: -DDEVELOPMENT- else- ghc-options: -Wall -fwarn-tabs -O2--executable espial- main-is: main.hs- other-modules:- DevelMain- Paths_espial- autogen-modules:- Paths_espial- hs-source-dirs:- app- default-extensions:- BlockArguments- CPP- NoImplicitPrelude- OverloadedStrings- PartialTypeSignatures- QuasiQuotes- RecordWildCards- TemplateHaskell- TypeFamilies- ViewPatterns- ghc-options: -threaded -rtsopts -with-rtsopts=-N- build-depends:- aeson >=1.4- , attoparsec- , base >=4.18.1.0 && <5- , base64 ==1.*- , bcrypt >=0.0.8- , blaze-html >=0.9 && <1- , blaze-markup- , bytestring >=0.11.5 && <0.13- , case-insensitive- , classy-prelude >=1.4 && <1.6- , classy-prelude-conduit >=1.4 && <1.6- , classy-prelude-yesod >=1.4 && <1.6- , conduit >=1.0 && <2- , containers- , cryptohash-sha256- , crypton-connection- , data-default- , directory >=1.1 && <1.4- , entropy- , espial- , esqueleto >=3.5.11.1 && <3.7- , fast-logger >=2.2 && <4- , fgl- , file-embed- , filepath- , foreign-store- , gitrev- , hjsmin >=0.1 && <0.3- , hscolour- , html-entities- , http-api-data >=0.3.4- , http-client- , http-client-tls ==0.3.*- , http-conduit ==2.3.*- , http-types- , iso8601-time >=0.1.3- , microlens- , monad-logger ==0.3.*- , mtl- , parser-combinators- , persistent >=2.14 && <2.18- , persistent-sqlite ==2.13.3.0- , persistent-template ==2.12.*- , pretty-show- , safe- , shakespeare >=2.0 && <2.2- , template-haskell- , text ==2.*- , time- , transformers >=0.2.2- , unordered-containers- , vector- , wai- , wai-extra >=3.0 && <3.2- , wai-logger- , warp >=3.0 && <3.5- , yaml >=0.8 && <0.12- , yesod >=1.6 && <1.8- , yesod-auth >=1.6 && <1.8- , yesod-core >=1.6 && <1.8- , yesod-form >=1.6 && <1.8- , yesod-newsfeed >=1.6 && <1.8- , yesod-static >=1.6 && <1.8- default-language: GHC2024- if !os(windows)- build-depends:- unix- if flag(library-only)- buildable: False--executable migration- main-is: Main.hs- other-modules:- Paths_espial- autogen-modules:- Paths_espial- hs-source-dirs:- app/migration- default-extensions:- BlockArguments- CPP- NoImplicitPrelude- OverloadedStrings- PartialTypeSignatures- QuasiQuotes- RecordWildCards- TemplateHaskell- TypeFamilies- ViewPatterns- ghc-options: -threaded -rtsopts -with-rtsopts=-N- build-depends:- aeson >=1.4- , attoparsec- , base >=4.18.1.0 && <5- , base64 ==1.*- , bcrypt >=0.0.8- , blaze-html >=0.9 && <1- , blaze-markup- , bytestring >=0.11.5 && <0.13- , case-insensitive- , classy-prelude >=1.4 && <1.6- , classy-prelude-conduit >=1.4 && <1.6- , classy-prelude-yesod >=1.4 && <1.6- , conduit >=1.0 && <2- , containers- , cryptohash-sha256- , crypton-connection- , data-default- , directory >=1.1 && <1.4- , entropy- , espial- , esqueleto >=3.5.11.1 && <3.7- , fast-logger >=2.2 && <4- , fgl- , file-embed- , filepath- , foreign-store- , gitrev- , hjsmin >=0.1 && <0.3- , hscolour- , html-entities- , http-api-data >=0.3.4- , http-client- , http-client-tls ==0.3.*- , http-conduit ==2.3.*- , http-types- , iso8601-time >=0.1.3- , microlens- , monad-logger ==0.3.*- , mtl- , optparse-applicative- , optparse-generic >=1.2.3- , parser-combinators- , persistent >=2.14 && <2.18- , persistent-sqlite ==2.13.3.0- , persistent-template ==2.12.*- , pretty-show- , safe- , shakespeare >=2.0 && <2.2- , template-haskell- , text ==2.*- , time- , transformers >=0.2.2- , unordered-containers- , vector- , wai- , wai-extra >=3.0 && <3.2- , wai-logger- , warp >=3.0 && <3.5- , yaml >=0.8 && <0.12- , yesod >=1.6 && <1.8- , yesod-auth >=1.6 && <1.8- , yesod-core >=1.6 && <1.8- , yesod-form >=1.6 && <1.8- , yesod-newsfeed >=1.6 && <1.8- , yesod-static >=1.6 && <1.8- default-language: GHC2024- if !os(windows)- build-depends:- unix- if flag(library-only)- buildable: False--test-suite test- type: exitcode-stdio-1.0- main-is: Spec.hs- other-modules:- Handler.CommonSpec- Handler.HomeSpec- TestImport- Paths_espial- autogen-modules:- Paths_espial- hs-source-dirs:- test- default-extensions:- BlockArguments- CPP- NoImplicitPrelude- OverloadedStrings- PartialTypeSignatures- QuasiQuotes- RecordWildCards- TemplateHaskell- TypeFamilies- ViewPatterns- ghc-options: -Wall- build-depends:- aeson >=1.4- , attoparsec- , base >=4.18.1.0 && <5- , base64 ==1.*- , bcrypt >=0.0.8- , blaze-html >=0.9 && <1- , blaze-markup- , bytestring >=0.11.5 && <0.13- , case-insensitive- , classy-prelude >=1.4 && <1.6- , classy-prelude-conduit >=1.4 && <1.6- , classy-prelude-yesod >=1.4 && <1.6- , conduit >=1.0 && <2- , containers- , cryptohash-sha256- , crypton-connection- , data-default- , directory >=1.1 && <1.4- , entropy- , espial- , esqueleto >=3.5.11.1 && <3.7- , fast-logger >=2.2 && <4- , fgl- , file-embed- , filepath- , foreign-store- , gitrev- , hjsmin >=0.1 && <0.3- , hscolour- , hspec >=2- , html-entities- , http-api-data >=0.3.4- , http-client- , http-client-tls ==0.3.*- , http-conduit ==2.3.*- , http-types- , iso8601-time >=0.1.3- , microlens- , monad-logger ==0.3.*- , mtl- , parser-combinators- , persistent >=2.14 && <2.18- , persistent-sqlite ==2.13.3.0- , persistent-template ==2.12.*- , pretty-show- , safe- , shakespeare >=2.0 && <2.2- , template-haskell- , text ==2.*- , time- , transformers >=0.2.2- , unordered-containers- , vector- , wai- , wai-extra >=3.0 && <3.2- , wai-logger- , warp >=3.0 && <3.5- , yaml >=0.8 && <0.12- , yesod >=1.6 && <1.8- , yesod-auth >=1.6 && <1.8- , yesod-core >=1.6 && <1.8- , yesod-form >=1.6 && <1.8- , yesod-newsfeed >=1.6 && <1.8- , yesod-static >=1.6 && <1.8- , yesod-test- default-language: GHC2024- if !os(windows)- build-depends:- unix+cabal-version: 2.2 + +-- This file has been generated from package.yaml by hpack version 0.39.1. +-- +-- see: https://github.com/sol/hpack + +name: espial +version: 0.0.37 +synopsis: Espial is an open-source, web-based bookmarking server. +description: Espial is an open-source, web-based bookmarking server. + - Yesod + TypeScript + sqlite3 + - multi-user (w/ privacy scopes) + - multi-language (i18n) + - tags, stars, editing, deleting +category: Web +homepage: https://github.com/jonschoning/espial +bug-reports: https://github.com/jonschoning/espial/issues +author: Jon Schoning +maintainer: jonschoning@gmail.com +copyright: Copyright (c) 2018 Jon Schoning +license: AGPL-3.0-or-later +license-file: LICENSE +build-type: Simple +tested-with: + GHC == 9.10.3 +extra-source-files: + Dockerfile + Dockerfile.buildkit + Makefile + appmigrations/002-normalize-bookmark-utctime-add-z.sql + appmigrations/002-normalize-bookmark-utctime-remove-z.sql + appmigrations/002-normalize-note-utctime-add-z.sql + appmigrations/002-normalize-note-utctime-remove-z.sql + config/favicon.ico + config/keter.yml + config/robots.txt + config/routes + config/settings.yml + config/test-settings.yml + docker-compose.archivebox07.yml + docker-compose.yml + frontend/.gitignore + frontend/.prettierignore + frontend/.prettierrc + frontend/Makefile + frontend/README.md + frontend/eslint.config.mjs + frontend/package-lock.json + frontend/package.json + frontend/scripts/publish-bundle.mjs + frontend/scripts/report-dist.mjs + frontend/src/@types/i18next.d.ts + frontend/src/@types/resources.ts + frontend/src/api.ts + frontend/src/components/AccountSettings.tsx + frontend/src/components/AddForm.tsx + frontend/src/components/BList.tsx + frontend/src/components/BMark.tsx + frontend/src/components/BulkEdit.tsx + frontend/src/components/Markdown.tsx + frontend/src/components/NList.tsx + frontend/src/components/NNote.tsx + frontend/src/components/TagCloud.tsx + frontend/src/components/TagSuggestionsDropdown.tsx + frontend/src/globals.ts + frontend/src/hooks/useTagSuggestions.ts + frontend/src/i18n.ts + frontend/src/index.tsx + frontend/src/stores/bookmarksStore.ts + frontend/src/stores/tagCloudStore.ts + frontend/src/types.ts + frontend/src/util.ts + frontend/tsconfig.json + hie.yaml + package.yaml + stack.yaml + stack.yaml.lock + static/css/common.css + static/css/main.css + static/css/popup.css + static/css/tachyons.min.css + static/css/tachyons.min.css.gz + static/fonts/glyphicons-halflings-regular.eot + static/fonts/glyphicons-halflings-regular.svg + static/fonts/glyphicons-halflings-regular.ttf + static/fonts/glyphicons-halflings-regular.woff + static/images/bluepin.gif + static/js/app-SAXM5TAE.min.js + static/js/app-SAXM5TAE.min.js.gz + static/js/app-SAXM5TAE.min.js.map + static/js/app-SAXM5TAE.min.js.map.gz + static/js/js.cookie-2.2.0.min.js + static/js/js.cookie-2.2.0.min.js.gz + static/js/manifest.json + static/locales/de/translation.json + static/locales/en/translation.json + static/locales/es/translation.json + static/locales/fr/translation.json + static/locales/it/translation.json + static/locales/ja/translation.json + static/locales/ko/translation.json + static/locales/pl/translation.json + static/locales/pt-BR/translation.json + static/locales/ru/translation.json + static/locales/tr/translation.json + static/locales/uk/translation.json + static/locales/zh-Hans/translation.json + static/locales/zh-Hant/translation.json + templates/change-password.hamlet + templates/default-layout-wrapper.hamlet + templates/default-layout.hamlet + templates/docs-search.hamlet + templates/homepage.hamlet + templates/login.hamlet + templates/note.hamlet + templates/notes.hamlet + templates/pager.hamlet + templates/popup-layout.hamlet + templates/search.hamlet + templates/user-settings.hamlet + templates/user.hamlet +extra-doc-files: + changelog.md + README.md + SECURITY.md + +source-repository head + type: git + location: https://github.com/jonschoning/espial.git + +flag dev + description: Turn on development settings, like auto-reload templates. + manual: False + default: False + +flag library-only + description: Build for use with "yesod devel" + manual: False + default: False + +flag usebuildinfo + description: read buildinfo from generated file buildinfo/BuildInfo.hs + manual: True + default: False + +library + exposed-modules: + Application + Archiver.ArchiveBox07 + Archiver.Backend + Archiver.Debug + Archiver.WaybackMachine + Foundation + Generic + GraphUtils + Handler.AccountSettings + Handler.Add + Handler.Archive + Handler.Common + Handler.Docs + Handler.Edit + Handler.Home + Handler.Locales + Handler.Notes + Handler.User + I18n + Import + Import.NoFoundation + Model + Model.Custom + Model.File + Model.FileBookmark + Model.FileFirefox + Model.FileNetscape + Model.FileNote + Model.Form + Model.Migrations + PathPiece + Pretty + Settings + Settings.StaticFiles + Types + Util + Version + Paths_espial + autogen-modules: + Paths_espial + hs-source-dirs: + src + default-extensions: + BlockArguments + CPP + NoImplicitPrelude + OverloadedStrings + PartialTypeSignatures + QuasiQuotes + RecordWildCards + TemplateHaskell + TypeFamilies + ViewPatterns + build-depends: + aeson >=1.4 + , attoparsec + , base >=4.18.1.0 && <5 + , base64 ==1.* + , bcrypt >=0.0.8 + , blaze-html >=0.9 && <1 + , blaze-markup + , bytestring >=0.11.5 && <0.13 + , case-insensitive + , classy-prelude >=1.4 && <1.6 + , classy-prelude-conduit >=1.4 && <1.6 + , classy-prelude-yesod >=1.4 && <1.6 + , conduit >=1.0 && <2 + , containers + , cryptohash-sha256 + , crypton-connection + , data-default + , directory >=1.1 && <1.4 + , entropy + , esqueleto >=3.5.11.1 && <3.7 + , fast-logger >=2.2 && <4 + , fgl + , file-embed + , filepath + , foreign-store + , gitrev + , hjsmin >=0.1 && <0.3 + , hscolour + , html-entities + , http-api-data >=0.3.4 + , http-client + , http-client-tls ==0.3.* + , http-conduit ==2.3.* + , http-types + , iso8601-time >=0.1.3 + , microlens + , monad-logger ==0.3.* + , mtl + , parser-combinators + , persistent >=2.14 && <2.18 + , persistent-sqlite ==2.13.3.0 + , persistent-template ==2.12.* + , pretty-show + , safe + , shakespeare >=2.0 && <2.2 + , template-haskell + , text ==2.* + , time + , tls + , transformers >=0.2.2 + , unordered-containers + , vector + , wai + , wai-extra >=3.0 && <3.2 + , wai-logger + , warp >=3.0 && <3.5 + , warp-tls >=3.0 && <3.5 + , yaml >=0.8 && <0.12 + , yesod >=1.6 && <1.8 + , yesod-auth >=1.6 && <1.8 + , yesod-core >=1.6 && <1.8 + , yesod-form >=1.6 && <1.8 + , yesod-newsfeed >=1.6 && <1.8 + , yesod-static >=1.6 && <1.8 + default-language: GHC2024 + if !os(windows) + build-depends: + unix + if flag(usebuildinfo) + exposed-modules: + BuildInfo + hs-source-dirs: + buildinfo + cpp-options: -DUSE_BUILDINFO + if (flag(dev)) || (flag(library-only)) + ghc-options: -Wall -fwarn-tabs + cpp-options: -DDEVELOPMENT + else + ghc-options: -Wall -fwarn-tabs -O2 + +executable espial + main-is: main.hs + other-modules: + DevelMain + Paths_espial + autogen-modules: + Paths_espial + hs-source-dirs: + app + default-extensions: + BlockArguments + CPP + NoImplicitPrelude + OverloadedStrings + PartialTypeSignatures + QuasiQuotes + RecordWildCards + TemplateHaskell + TypeFamilies + ViewPatterns + ghc-options: -threaded -rtsopts -with-rtsopts=-N + build-depends: + aeson >=1.4 + , attoparsec + , base >=4.18.1.0 && <5 + , base64 ==1.* + , bcrypt >=0.0.8 + , blaze-html >=0.9 && <1 + , blaze-markup + , bytestring >=0.11.5 && <0.13 + , case-insensitive + , classy-prelude >=1.4 && <1.6 + , classy-prelude-conduit >=1.4 && <1.6 + , classy-prelude-yesod >=1.4 && <1.6 + , conduit >=1.0 && <2 + , containers + , cryptohash-sha256 + , crypton-connection + , data-default + , directory >=1.1 && <1.4 + , entropy + , espial + , esqueleto >=3.5.11.1 && <3.7 + , fast-logger >=2.2 && <4 + , fgl + , file-embed + , filepath + , foreign-store + , gitrev + , hjsmin >=0.1 && <0.3 + , hscolour + , html-entities + , http-api-data >=0.3.4 + , http-client + , http-client-tls ==0.3.* + , http-conduit ==2.3.* + , http-types + , iso8601-time >=0.1.3 + , microlens + , monad-logger ==0.3.* + , mtl + , parser-combinators + , persistent >=2.14 && <2.18 + , persistent-sqlite ==2.13.3.0 + , persistent-template ==2.12.* + , pretty-show + , safe + , shakespeare >=2.0 && <2.2 + , template-haskell + , text ==2.* + , time + , tls + , transformers >=0.2.2 + , unordered-containers + , vector + , wai + , wai-extra >=3.0 && <3.2 + , wai-logger + , warp >=3.0 && <3.5 + , warp-tls >=3.0 && <3.5 + , yaml >=0.8 && <0.12 + , yesod >=1.6 && <1.8 + , yesod-auth >=1.6 && <1.8 + , yesod-core >=1.6 && <1.8 + , yesod-form >=1.6 && <1.8 + , yesod-newsfeed >=1.6 && <1.8 + , yesod-static >=1.6 && <1.8 + default-language: GHC2024 + if !os(windows) + build-depends: + unix + if flag(library-only) + buildable: False + +executable migration + main-is: Main.hs + other-modules: + Paths_espial + autogen-modules: + Paths_espial + hs-source-dirs: + app/migration + default-extensions: + BlockArguments + CPP + NoImplicitPrelude + OverloadedStrings + PartialTypeSignatures + QuasiQuotes + RecordWildCards + TemplateHaskell + TypeFamilies + ViewPatterns + ghc-options: -threaded -rtsopts -with-rtsopts=-N + build-depends: + aeson >=1.4 + , attoparsec + , base >=4.18.1.0 && <5 + , base64 ==1.* + , bcrypt >=0.0.8 + , blaze-html >=0.9 && <1 + , blaze-markup + , bytestring >=0.11.5 && <0.13 + , case-insensitive + , classy-prelude >=1.4 && <1.6 + , classy-prelude-conduit >=1.4 && <1.6 + , classy-prelude-yesod >=1.4 && <1.6 + , conduit >=1.0 && <2 + , containers + , cryptohash-sha256 + , crypton-connection + , data-default + , directory >=1.1 && <1.4 + , entropy + , espial + , esqueleto >=3.5.11.1 && <3.7 + , fast-logger >=2.2 && <4 + , fgl + , file-embed + , filepath + , foreign-store + , gitrev + , hjsmin >=0.1 && <0.3 + , hscolour + , html-entities + , http-api-data >=0.3.4 + , http-client + , http-client-tls ==0.3.* + , http-conduit ==2.3.* + , http-types + , iso8601-time >=0.1.3 + , microlens + , monad-logger ==0.3.* + , mtl + , optparse-applicative + , optparse-generic >=1.2.3 + , parser-combinators + , persistent >=2.14 && <2.18 + , persistent-sqlite ==2.13.3.0 + , persistent-template ==2.12.* + , pretty-show + , safe + , shakespeare >=2.0 && <2.2 + , template-haskell + , text ==2.* + , time + , tls + , transformers >=0.2.2 + , unordered-containers + , vector + , wai + , wai-extra >=3.0 && <3.2 + , wai-logger + , warp >=3.0 && <3.5 + , warp-tls >=3.0 && <3.5 + , yaml >=0.8 && <0.12 + , yesod >=1.6 && <1.8 + , yesod-auth >=1.6 && <1.8 + , yesod-core >=1.6 && <1.8 + , yesod-form >=1.6 && <1.8 + , yesod-newsfeed >=1.6 && <1.8 + , yesod-static >=1.6 && <1.8 + default-language: GHC2024 + if !os(windows) + build-depends: + unix + if flag(library-only) + buildable: False + +test-suite test + type: exitcode-stdio-1.0 + main-is: Spec.hs + other-modules: + Handler.CommonSpec + Handler.HomeSpec + Model.BookmarksBulkEditSpec + Model.BookmarksPagingSpec + Model.BookmarksQuerySpec + Model.BookmarksSearchSpec + Model.FileImportExportSpec + TestImport + Paths_espial + autogen-modules: + Paths_espial + hs-source-dirs: + test + default-extensions: + BlockArguments + CPP + NoImplicitPrelude + OverloadedStrings + PartialTypeSignatures + QuasiQuotes + RecordWildCards + TemplateHaskell + TypeFamilies + ViewPatterns + ghc-options: -Wall + build-depends: + aeson >=1.4 + , attoparsec + , base >=4.18.1.0 && <5 + , base64 ==1.* + , bcrypt >=0.0.8 + , blaze-html >=0.9 && <1 + , blaze-markup + , bytestring >=0.11.5 && <0.13 + , case-insensitive + , classy-prelude >=1.4 && <1.6 + , classy-prelude-conduit >=1.4 && <1.6 + , classy-prelude-yesod >=1.4 && <1.6 + , conduit >=1.0 && <2 + , containers + , cryptohash-sha256 + , crypton-connection + , data-default + , directory >=1.1 && <1.4 + , entropy + , espial + , esqueleto >=3.5.11.1 && <3.7 + , fast-logger >=2.2 && <4 + , fgl + , file-embed + , filepath + , foreign-store + , gitrev + , hjsmin >=0.1 && <0.3 + , hscolour + , hspec >=2 + , html-entities + , http-api-data >=0.3.4 + , http-client + , http-client-tls ==0.3.* + , http-conduit ==2.3.* + , http-types + , iso8601-time >=0.1.3 + , microlens + , monad-logger ==0.3.* + , mtl + , parser-combinators + , persistent >=2.14 && <2.18 + , persistent-sqlite ==2.13.3.0 + , persistent-template ==2.12.* + , pretty-show + , safe + , shakespeare >=2.0 && <2.2 + , template-haskell + , text ==2.* + , time + , tls + , transformers >=0.2.2 + , unordered-containers + , vector + , wai + , wai-extra >=3.0 && <3.2 + , wai-logger + , warp >=3.0 && <3.5 + , warp-tls >=3.0 && <3.5 + , yaml >=0.8 && <0.12 + , yesod >=1.6 && <1.8 + , yesod-auth >=1.6 && <1.8 + , yesod-core >=1.6 && <1.8 + , yesod-form >=1.6 && <1.8 + , yesod-newsfeed >=1.6 && <1.8 + , yesod-static >=1.6 && <1.8 + , yesod-test + default-language: GHC2024 + if !os(windows) + build-depends: + unix
frontend/src/api.ts view
@@ -1,157 +1,200 @@-import ky from 'ky';--import { app } from './globals';-import type {- AccountSettings,- Bookmark,- Note,- TagCloud,- TagCloudMode,- TagSuggestionRequest,- TagSuggestionResponse,-} from './types';--export type StarAction = 'star' | 'unstar';--function withCsrf(headers?: HeadersInit): HeadersInit {- const a = app();- const h = new Headers(headers);- h.set(a.csrfHeaderName, a.csrfToken);- return h;-}--function urlFor(path: string): string {- // Preserve PureScript semantics: simple string concatenation.- return `${app().homeR}${path}`;-}--function toRelativePath(urlOrPath: string): string {- try {- const u = new URL(urlOrPath, window.location.origin);- const rel = `${u.pathname}${u.search}${u.hash}`;- return rel.startsWith('/') ? rel.slice(1) : rel;- } catch {- return urlOrPath.replace(/^\/+/, '');- }-}--async function request(- method: string,- path: string,- opts: { headers?: HeadersInit; body?: BodyInit | null } = {},-) {- const res = await ky(urlFor(path), {- method,- headers: withCsrf(opts.headers),- body: opts.body ?? undefined,- throwHttpErrors: false,- });- return res;-}--export async function toggleStar(bid: number, action: StarAction): Promise<void> {- await request('POST', `bm/${bid.toString()}/${action}`, {- headers: { 'content-type': 'application/x-www-form-urlencoded' },- });-}--export async function destroy(bid: number): Promise<void> {- await request('DELETE', `bm/${bid.toString()}`, {- headers: { 'content-type': 'application/x-www-form-urlencoded' },- });-}--export async function markRead(bid: number): Promise<void> {- await request('POST', `bm/${bid.toString()}/read`, {- headers: { 'content-type': 'application/x-www-form-urlencoded' },- });-}--export async function archiveBookmark(bid: number): Promise<void> {- await request('POST', `bm/${bid.toString()}/archive`, {- headers: { 'content-type': 'application/x-www-form-urlencoded' },- });-}--export async function editBookmark(- bm: Bookmark,-): Promise<{ ok: boolean; status: number; bodyText: string }> {- const res = await request('POST', 'api/add', {- headers: { 'content-type': 'application/json' },- body: JSON.stringify(bm),- });- return { ok: res.ok, status: res.status, bodyText: await res.text() };-}--export async function editNote(- note: Note,-): Promise<{ ok: boolean; status: number; bodyText: string }> {- const res = await request('POST', 'api/note/add', {- headers: { 'content-type': 'application/json' },- body: JSON.stringify(note),- });- return { ok: res.ok, status: res.status, bodyText: await res.text() };-}--export async function lookupTitle(bm: Bookmark): Promise<string | null> {- const res = await request('POST', 'api/lookuptitle', {- headers: { 'content-type': 'application/json' },- body: JSON.stringify(bm),- });- if (res.status === 200) return await res.text();- return null;-}--export async function getTagCloud(mode: TagCloudMode): Promise<TagCloud | null> {- const res = await request('POST', 'api/tagcloud', {- headers: { 'content-type': 'application/json' },- body: JSON.stringify(mode),- });- if (!res.ok) return null;- try {- return await res.json();- } catch {- return null;- }-}--export async function updateTagCloudMode(mode: TagCloudMode): Promise<void> {- await request('POST', 'api/tagcloudmode', {- headers: { 'content-type': 'application/json' },- body: JSON.stringify(mode),- });-}--export async function fetchTagSuggestions(- data: TagSuggestionRequest,-): Promise<TagSuggestionResponse | null> {- const res = await request('POST', 'api/tagSuggestions', {- headers: { 'content-type': 'application/json' },- body: JSON.stringify(data),- });- if (!res.ok) return null;- try {- return await res.json<TagSuggestionResponse>();- } catch {- return null;- }-}--export async function destroyNote(nid: number): Promise<void> {- await request('DELETE', `api/note/${nid.toString()}`, {- headers: { 'content-type': 'application/x-www-form-urlencoded' },- });-}--export async function editAccountSettings(us: AccountSettings): Promise<void> {- await request('POST', 'api/accountSettings', {- headers: { 'content-type': 'application/json' },- body: JSON.stringify(us),- });-}--export async function logout(): Promise<void> {- const a = app();- await request('POST', toRelativePath(a.authRlogoutR));- window.location.reload();-}+import ky from 'ky'; + +import { app, tagCloudEndpoint } from './globals'; +import type { + AccountSettings, + Bookmark, + BulkEditRequest, + BulkEditResponse, + Note, + TagCloud, + TagCloudMode, + TagSuggestionRequest, + TagSuggestionResponse, +} from './types'; + +export type StarAction = 'star' | 'unstar'; + +function withCsrf(headers?: HeadersInit): HeadersInit { + const a = app(); + const h = new Headers(headers); + h.set(a.csrfHeaderName, a.csrfToken); + return h; +} + +function urlFor(path: string): string { + // Preserve PureScript semantics: simple string concatenation. + return `${app().homeR}${path}`; +} + +function toRelativePath(urlOrPath: string): string { + try { + const u = new URL(urlOrPath, window.location.origin); + const rel = `${u.pathname}${u.search}${u.hash}`; + return rel.startsWith('/') ? rel.slice(1) : rel; + } catch { + return urlOrPath.replace(/^\/+/, ''); + } +} + +async function request( + method: string, + path: string, + opts: { headers?: HeadersInit; body?: BodyInit | null; timeout?: number | false } = {}, +) { + const res = await ky(urlFor(path), { + method, + headers: withCsrf(opts.headers), + body: opts.body ?? undefined, + throwHttpErrors: false, + timeout: opts.timeout, + }); + return res; +} + +export async function toggleStar( + bid: number, + action: StarAction, +): Promise<{ ok: boolean; status: number; bodyText: string }> { + const res = await request('PATCH', `api/bm/${bid.toString()}/${action}`, { + headers: { 'content-type': 'application/x-www-form-urlencoded' }, + }); + return { ok: res.ok, status: res.status, bodyText: await res.text() }; +} + +export async function markRead( + bid: number, +): Promise<{ ok: boolean; status: number; bodyText: string }> { + const res = await request('PATCH', `api/bm/${bid.toString()}/read`, { + headers: { 'content-type': 'application/x-www-form-urlencoded' }, + }); + return { ok: res.ok, status: res.status, bodyText: await res.text() }; +} + +export async function destroy( + bid: number, +): Promise<{ ok: boolean; status: number; bodyText: string }> { + const res = await request('DELETE', `api/bm/${bid.toString()}`, { + headers: { 'content-type': 'application/x-www-form-urlencoded' }, + }); + return { ok: res.ok, status: res.status, bodyText: await res.text() }; +} + +export async function bulkEdit(req: BulkEditRequest): Promise<BulkEditResponse> { + const res = await request('POST', 'api/bm/bulk', { + headers: { 'content-type': 'application/json' }, + body: JSON.stringify(req), + timeout: 300_000, + }); + const contentType = res.headers.get('content-type') ?? ''; + let bodyText: string | undefined; + let data: { editedCount: number } | undefined; + if (contentType.includes('application/json')) { + try { + data = await res.json(); + } catch { + data = undefined; + } + } else { + bodyText = await res.text(); + } + return { ok: res.ok, status: res.status, bodyText, data }; +} + +export async function archiveBookmark( + bid: number, +): Promise<{ ok: boolean; status: number; bodyText: string }> { + const res = await request('POST', `api/bm/${bid.toString()}/archive`, { + headers: { 'content-type': 'application/x-www-form-urlencoded' }, + }); + return { ok: res.ok, status: res.status, bodyText: await res.text() }; +} + +export async function editBookmark( + bm: Bookmark, +): Promise<{ ok: boolean; status: number; bodyText: string }> { + const res = await request('POST', 'api/add', { + headers: { 'content-type': 'application/json' }, + body: JSON.stringify(bm), + }); + return { ok: res.ok, status: res.status, bodyText: await res.text() }; +} + +export async function editNote( + note: Note, +): Promise<{ ok: boolean; status: number; bodyText: string }> { + const res = await request('POST', 'api/note/add', { + headers: { 'content-type': 'application/json' }, + body: JSON.stringify(note), + }); + return { ok: res.ok, status: res.status, bodyText: await res.text() }; +} + +export async function lookupTitle(bm: Bookmark): Promise<string | null> { + const res = await request('POST', 'api/lookuptitle', { + headers: { 'content-type': 'application/json' }, + body: JSON.stringify(bm), + }); + if (res.status === 200) return await res.text(); + return null; +} + +export async function getTagCloud(mode: TagCloudMode): Promise<TagCloud | null> { + const res = await request('POST', toRelativePath(tagCloudEndpoint()), { + headers: { 'content-type': 'application/json' }, + body: JSON.stringify(mode), + }); + if (!res.ok) return null; + try { + return await res.json(); + } catch { + return null; + } +} + +export async function updateTagCloudMode(mode: TagCloudMode): Promise<void> { + await request('POST', 'api/tagcloudmode', { + headers: { 'content-type': 'application/json' }, + body: JSON.stringify(mode), + }); +} + +export async function fetchTagSuggestions( + data: TagSuggestionRequest, +): Promise<TagSuggestionResponse | null> { + const res = await request('POST', 'api/tagSuggestions', { + headers: { 'content-type': 'application/json' }, + body: JSON.stringify(data), + }); + if (!res.ok) return null; + try { + return await res.json<TagSuggestionResponse>(); + } catch { + return null; + } +} + +export async function destroyNote( + nid: number, +): Promise<{ ok: boolean; status: number; bodyText: string }> { + const res = await request('DELETE', `api/note/${nid.toString()}`, { + headers: { 'content-type': 'application/x-www-form-urlencoded' }, + }); + return { ok: res.ok, status: res.status, bodyText: await res.text() }; +} + +export async function editAccountSettings( + us: AccountSettings, +): Promise<{ ok: boolean; status: number; bodyText: string }> { + const res = await request('POST', 'api/accountSettings', { + headers: { 'content-type': 'application/json' }, + body: JSON.stringify(us), + }); + return { ok: res.ok, status: res.status, bodyText: await res.text() }; +} + +export async function logout(): Promise<void> { + const a = app(); + await request('POST', toRelativePath(a.authRlogoutR)); + window.location.reload(); +}
frontend/src/components/AccountSettings.tsx view
@@ -1,124 +1,157 @@-import React from 'react';-import { useTranslation } from 'react-i18next';--import { editAccountSettings } from '../api';-import type { AccountSettings } from '../types';--/** Displays and edits the current user's account settings. */-export function AccountSettingsView({ initial }: { initial: AccountSettings }) {- const { t } = useTranslation();- const [us, setUs] = React.useState<AccountSettings>(initial);- const archiveDisabled = !us.archiveBackendEnabled;- const archiveDisabledTitle = archiveDisabled ? t('settings.archivingDisabled') : undefined;-- async function update(next: AccountSettings) {- setUs(next);- await editAccountSettings(next);- }-- return (- <div className="settings-form">- <div className="fw7 mb2">{t('settings.accountTitle')}</div>-- <div className="flex items-center mb2">- <label htmlFor="language" className="lh-copy mr2">- {t('settings.language')}- </label>- <select- id="language"- name="language"- className="pointer"- value={us.language ?? ''}- onChange={(e) => {- const next = { ...us, language: e.target.value === '' ? null : e.target.value };- setUs(next);- void editAccountSettings(next).then(() => {- window.location.reload();- });- }}- >- <option value="">{t('settings.serverDefault')}</option>- <option value="en">English</option>- <option value="de">Deutsch</option>- <option value="es">Español</option>- <option value="fr">Français</option>- <option value="it">Italiano</option>- <option value="ja">日本語</option>- <option value="ko">한국어</option>- <option value="pl">Polski</option>- <option value="pt-BR">Português (Brasil)</option>- <option value="ru">Русский</option>- <option value="tr">Türkçe</option>- <option value="uk">Українська</option>- <option value="zh-Hans">简体中文</option>- <option value="zh-Hant">繁體中文</option>- </select>- </div>-- <div- className={`flex items-center mb2${archiveDisabled ? ' o-50' : ''}`}- title={archiveDisabledTitle}- >- <input- type="checkbox"- className={`mr2${archiveDisabled ? '' : ' pointer'}`}- id="archiveDefault"- name="archiveDefault"- checked={us.archiveDefault}- disabled={archiveDisabled}- title={archiveDisabledTitle}- onChange={(e) => void update({ ...us, archiveDefault: e.target.checked })}- />- <label- htmlFor="archiveDefault"- className={`lh-copy${archiveDisabled ? ' thm-text-tertiary' : ''}`}- title={archiveDisabledTitle}- >- {t('settings.archiveDefault')}- </label>- </div>-- <div className="flex items-center mb2">- <input- type="checkbox"- className="pointer mr2"- id="privateDefault"- name="privateDefault"- checked={us.privateDefault}- onChange={(e) => void update({ ...us, privateDefault: e.target.checked })}- />- <label htmlFor="privateDefault" className="lh-copy">- {t('settings.privateDefault')}- </label>- </div>-- <div className="flex items-center mb2">- <input- type="checkbox"- className="pointer mr2"- id="suggestTags"- name="suggestTags"- checked={us.suggestTags}- onChange={(e) => void update({ ...us, suggestTags: e.target.checked })}- />- <label htmlFor="suggestTags" className="lh-copy">- {t('settings.suggestTags')}- </label>- </div>-- <div className="flex items-center mb2">- <input- type="checkbox"- className="pointer mr2"- id="privacyLock"- name="privacyLock"- checked={us.privacyLock}- onChange={(e) => void update({ ...us, privacyLock: e.target.checked })}- />- <label htmlFor="privacyLock" className="lh-copy">- {t('settings.privacyLock')}- </label>- </div>- </div>- );-}+import { TimeoutError } from 'ky'; +import React from 'react'; +import { useTranslation } from 'react-i18next'; + +import { editAccountSettings } from '../api'; +import type { AccountSettings } from '../types'; +import { apiErrorMsg } from '../util'; + +/** Displays and edits the current user's account settings. */ +export function AccountSettingsView({ initial }: { initial: AccountSettings }) { + const { t } = useTranslation(); + const [us, setUs] = React.useState<AccountSettings>(initial); + const [apiError, setApiError] = React.useState<string | null>(null); + const archiveDisabled = !us.archiveBackendEnabled; + const archiveDisabledTitle = archiveDisabled ? t('settings.archivingDisabled') : undefined; + + async function update(next: AccountSettings): Promise<boolean> { + try { + const res = await editAccountSettings(next); + if (!res.ok) { + setApiError(apiErrorMsg(t, res.status, res.bodyText)); + return false; + } + setApiError(null); + setUs(next); + const lockIcon = document.getElementById('privacy-lock-icon'); + if (lockIcon) lockIcon.style.display = next.privacyLock ? '' : 'none'; + return true; + } catch (err) { + setApiError( + err instanceof TimeoutError ? t('error.requestTimedOut') : t('error.networkError'), + ); + return false; + } + } + + return ( + <div className="settings-form"> + <div className="fw7 mb2">{t('settings.accountTitle')}</div> + + <div className="flex items-center mb2"> + <label htmlFor="language" className="lh-copy mr2"> + {t('settings.language')} + </label> + <select + id="language" + name="language" + className="pointer" + value={us.language ?? ''} + onChange={(e) => { + const next = { ...us, language: e.target.value === '' ? null : e.target.value }; + void update(next).then((ok) => { + if (ok) window.location.reload(); + }); + }} + > + <option value="">{t('settings.serverDefault')}</option> + <option value="en">English</option> + <option value="de">Deutsch</option> + <option value="es">Español</option> + <option value="fr">Français</option> + <option value="it">Italiano</option> + <option value="ja">日本語</option> + <option value="ko">한국어</option> + <option value="pl">Polski</option> + <option value="pt-BR">Português (Brasil)</option> + <option value="ru">Русский</option> + <option value="tr">Türkçe</option> + <option value="uk">Українська</option> + <option value="zh-Hans">简体中文</option> + <option value="zh-Hant">繁體中文</option> + </select> + </div> + + <div + className={`flex items-center mb2${archiveDisabled ? ' o-50' : ''}`} + title={archiveDisabledTitle} + > + <input + type="checkbox" + className={`mr2${archiveDisabled ? '' : ' pointer'}`} + id="archiveDefault" + name="archiveDefault" + checked={us.archiveDefault} + disabled={archiveDisabled} + title={archiveDisabledTitle} + onChange={(e) => void update({ ...us, archiveDefault: e.target.checked })} + /> + <label + htmlFor="archiveDefault" + className={`lh-copy${archiveDisabled ? ' thm-text-tertiary' : ''}`} + title={archiveDisabledTitle} + > + {t('settings.archiveDefault')} + </label> + </div> + + <div className="flex items-center mb2"> + <input + type="checkbox" + className="pointer mr2" + id="suggestTags" + name="suggestTags" + checked={us.suggestTags} + onChange={(e) => void update({ ...us, suggestTags: e.target.checked })} + /> + <label htmlFor="suggestTags" className="lh-copy"> + {t('settings.suggestTags')} + </label> + </div> + + <div className="flex items-center mb2"> + <input + type="checkbox" + className="pointer mr2" + id="privateDefault" + name="privateDefault" + checked={us.privateDefault} + onChange={(e) => void update({ ...us, privateDefault: e.target.checked })} + /> + <label htmlFor="privateDefault" className="lh-copy"> + {t('settings.privateDefault')} + </label> + </div> + + <div className="flex items-center mb2"> + <input + type="checkbox" + className="pointer mr2" + id="publicTagCloud" + name="publicTagCloud" + checked={us.publicTagCloud} + onChange={(e) => void update({ ...us, publicTagCloud: e.target.checked })} + /> + <label htmlFor="publicTagCloud" className="lh-copy"> + {t('settings.publicTagCloud')} + </label> + </div> + + <div className="flex items-center mb2"> + <input + type="checkbox" + className="pointer mr2" + id="privacyLock" + name="privacyLock" + checked={us.privacyLock} + onChange={(e) => void update({ ...us, privacyLock: e.target.checked })} + /> + <label htmlFor="privacyLock" className="lh-copy"> + {t('settings.privacyLock')} + </label> + </div> + + {apiError ? <div className="thm-text-error f7 mt2">{apiError}</div> : null} + </div> + ); +}
frontend/src/components/AddForm.tsx view
@@ -1,323 +1,327 @@-import React from 'react';-import { useTranslation } from 'react-i18next';--import { destroy, editBookmark, lookupTitle } from '../api';-import { app, closeWindow, fromNow, shdatetime } from '../globals';-import { useTagSuggestions } from '../hooks/useTagSuggestions';-import type { Bookmark } from '../types';-import { curQuerystring, lookupQueryStringValue, normalizeTags } from '../util';-import { TagSuggestionsDropdown } from './TagSuggestionsDropdown';--/** Form for adding or editing a single bookmark, used in the popup window. */-export function AddForm({ initial }: { initial: Bookmark }) {- const { t } = useTranslation();- const a = app();- const [bm, setBm] = React.useState<Bookmark>(initial);- const [editBm, setEditBm] = React.useState<Bookmark>(initial);- const [deleteAsk, setDeleteAsk] = React.useState(false);- const [loading, setLoading] = React.useState(false);- const [destroyed, setDestroyed] = React.useState(false);- const [apiError, setApiError] = React.useState<string | null>(null);- const suggestEnabled = a.dat.suggestTags === true;- const fromNowVal = React.useMemo(() => fromNow(a.lang, bm.time), [a.lang, bm.time]);-- const {- tagInputRef,- suggestionState,- closeSuggestions,- onTagsChange,- onTagsKeyDown,- onTagsSelect,- onSuggestionHover,- onSuggestionPick,- } = useTagSuggestions({- enabled: suggestEnabled,- tags: editBm.tags,- maxSuggestions: 4,- onTagsUpdate: (tags) => {- setEditBm((x) => ({ ...x, tags }));- },- });-- async function onFetchTitle() {- setLoading(true);- try {- const title = await lookupTitle(editBm);- if (title != null) setEditBm((x) => ({ ...x, title }));- } finally {- setLoading(false);- }- }-- async function onDestroy() {- await destroy(bm.bid);- setDestroyed(true);- }-- const onSubmit = async (e: React.SyntheticEvent<HTMLFormElement, SubmitEvent>): Promise<void> => {- e.preventDefault();- setApiError(null);- const editBm2 = { ...editBm, tags: normalizeTags(editBm.tags) };-- const res = await editBookmark(editBm2);- if (res.ok && res.status >= 200 && res.status < 300) {- setBm(editBm2);-- const qs = curQuerystring();- const next = lookupQueryStringValue(qs, 'next');- const ref = document.referrer;- const org = window.location.origin;-- if (next === 'closeWindow') closeWindow(window);- else if (next === 'back') {- if (ref.startsWith(org)) window.location.href = ref;- else window.location.href = org;- } else {- closeWindow(window);- }- } else {- setApiError(res.bodyText);- }- };-- if (destroyed) return <p className="thm-text-killed">{t('addForm.killed')}</p>;-- return (- <form- onSubmit={(e) => {- void onSubmit(e);- }}- >- <table className="w-100">- <tbody>- <tr>- <td className="w1" />- <td>- {bm.bid > 0 ? (- <div className="alert">- {t('addForm.previouslySaved')} - <span- className="link f7 dib thm-text-tertiary thm-hover-link-color pr3"- data-time={bm.time}- title={shdatetime(a.lang, bm.time)}- >- {fromNowVal}- </span>- <div className="edit_links dib ml1">- <div className="delete_link di">- <button- type="button"- onClick={() => {- setDeleteAsk(true);- }}- className="delete"- hidden={deleteAsk}- >- {t('delete')}- </button>- <span className="confirm thm-text-error" hidden={!deleteAsk}>- <button- type="button"- onClick={() => {- setDeleteAsk(false);- }}- >- {t('cancel')} / - </button>- <button- type="button"- onClick={() => void onDestroy()}- className="thm-text-error"- >- {t('destroy')}- </button>- </span>- </div>- </div>- </div>- ) : null}- {apiError ? <div className="alert alert-err">{apiError}</div> : null}- </td>- </tr>-- <tr>- <td>- <label htmlFor="url">{t('addForm.url')}</label>- </td>- <td>- <input- type="url"- id="url"- className="w-100 mv1"- required- name="url"- autoFocus={bm.url === ''}- value={editBm.url}- onChange={(e) => {- setEditBm((x) => ({ ...x, url: e.target.value }));- }}- />- </td>- </tr>-- <tr>- <td>- <label htmlFor="title">{t('bmark.title')}</label>- </td>- <td className="flex">- <input- type="text"- id="title"- className="w-100 mv1 flex-auto"- name="title"- value={editBm.title}- onChange={(e) => {- setEditBm((x) => ({ ...x, title: e.target.value }));- }}- />- <button- disabled={loading}- type="button"- onClick={() => void onFetchTitle()}- className={`ml2 input-reset ba thm-border-primary pointer f6 di dim pa1 ma1 mr0${loading ? ' thm-bg-disabled' : ''}`}- >- {t('fetch')}- </button>- </td>- </tr>-- <tr>- <td>- <label htmlFor="description">{t('bmark.description')}</label>- </td>- <td>- <textarea- className="w-100 mt1 thm-text-secondary"- id="description"- name="description"- rows={4}- value={editBm.description}- onChange={(e) => {- setEditBm((x) => ({ ...x, description: e.target.value }));- }}- />- </td>- </tr>-- <tr>- <td>- <label htmlFor="tags">{t('bmark.tags')}</label>- </td>- <td>- <div className="relative">- <input- ref={tagInputRef}- type="text"- id="tags"- className="w-100 mv1"- name="tags"- autoComplete="off"- autoCapitalize="off"- autoFocus={bm.url !== ''}- value={editBm.tags}- onChange={onTagsChange}- onKeyDown={onTagsKeyDown}- onClick={onTagsSelect}- onSelect={onTagsSelect}- onBlur={() => {- window.setTimeout(() => {- closeSuggestions();- }, 0);- }}- />- {suggestionState != null ? (- <TagSuggestionsDropdown- suggestionState={suggestionState}- onHover={onSuggestionHover}- onPick={onSuggestionPick}- />- ) : null}- </div>- </td>- </tr>-- <tr>- <td>- <label htmlFor="private">{t('bmark.private')}</label>- </td>- <td>- <div className="mr4 dib">- <input- type="checkbox"- id="private"- className="private pointer"- name="private"- checked={editBm.private}- onChange={(e) => {- setEditBm((x) => ({- ...x,- private: e.target.checked,- ...(a.dat.archiveBackendEnabled && editBm.archiveRequested && e.target.checked- ? { archiveRequested: false }- : {}),- }));- }}- />- </div>- {!(bm.bid > 0) && a.dat.archiveBackendEnabled ? (- <div- className={`dib ${editBm.private ? 'o-50' : ''}`}- title={editBm.private ? t('addForm.archiveUnavailable') : undefined}- >- <label className="mr2 di" htmlFor="archiveRequested">- {t('archive')}- </label>- <input- type="checkbox"- id="archiveRequested"- className="archive pointer ml2"- name="archiveRequested"- disabled={editBm.private}- checked={editBm.archiveRequested ?? false}- onChange={(e) => {- setEditBm((x) => ({ ...x, archiveRequested: e.target.checked }));- }}- />- </div>- ) : null}- </td>- </tr>-- <tr>- <td>- <label htmlFor="toread">{t('addForm.readLater')}</label>- </td>- <td>- <input- type="checkbox"- id="toread"- className="toread pointer"- name="toread"- checked={editBm.toread}- onChange={(e) => {- setEditBm((x) => ({ ...x, toread: e.target.checked }));- }}- />- </td>- </tr>-- <tr>- <td />- <td>- <input- type="submit"- className="ph3 pv2 input-reset thm-text-strong ba thm-border-primary bg-transparent pointer f6 dib mt1 dim"- value={bm.bid > 0 ? t('addForm.update') : t('addForm.add')}- />- </td>- </tr>- </tbody>- </table>- </form>- );-}+import React from 'react'; +import { useTranslation } from 'react-i18next'; + +import { destroy, editBookmark, lookupTitle } from '../api'; +import { app, closeWindow, fromNow, shdatetime } from '../globals'; +import { useTagSuggestions } from '../hooks/useTagSuggestions'; +import type { Bookmark } from '../types'; +import { curQuerystring, lookupQueryStringValue, normalizeTags } from '../util'; +import { TagSuggestionsDropdown } from './TagSuggestionsDropdown'; + +/** Form for adding or editing a single bookmark, used in the popup window. */ +export function AddForm({ initial }: { initial: Bookmark }) { + const { t } = useTranslation(); + const a = app(); + const [bm, setBm] = React.useState<Bookmark>(initial); + const [editBm, setEditBm] = React.useState<Bookmark>(initial); + const [deleteAsk, setDeleteAsk] = React.useState(false); + const [loading, setLoading] = React.useState(false); + const [destroyed, setDestroyed] = React.useState(false); + const [apiError, setApiError] = React.useState<string | null>(null); + const suggestEnabled = a.dat.suggestTags === true; + const fromNowVal = React.useMemo(() => fromNow(a.lang, bm.time), [a.lang, bm.time]); + + const { + tagInputRef, + suggestionState, + closeSuggestions, + onTagsChange, + onTagsKeyDown, + onTagsSelect, + onSuggestionHover, + onSuggestionPick, + } = useTagSuggestions({ + enabled: suggestEnabled, + tags: editBm.tags, + maxSuggestions: 4, + onTagsUpdate: (tags) => { + setEditBm((x) => ({ ...x, tags })); + }, + }); + + async function onFetchTitle() { + setLoading(true); + try { + const title = await lookupTitle(editBm); + if (title != null) setEditBm((x) => ({ ...x, title })); + } finally { + setLoading(false); + } + } + + async function onDestroy() { + const res = await destroy(bm.bid); + if (!res.ok) { + setApiError(res.bodyText); + return; + } + setDestroyed(true); + } + + const onSubmit = async (e: React.SyntheticEvent<HTMLFormElement, SubmitEvent>): Promise<void> => { + e.preventDefault(); + setApiError(null); + const editBm2 = { ...editBm, tags: normalizeTags(editBm.tags) }; + + const res = await editBookmark(editBm2); + if (res.ok && res.status >= 200 && res.status < 300) { + setBm(editBm2); + + const qs = curQuerystring(); + const next = lookupQueryStringValue(qs, 'next'); + const ref = document.referrer; + const org = window.location.origin; + + if (next === 'closeWindow') closeWindow(window); + else if (next === 'back') { + if (ref.startsWith(org)) window.location.href = ref; + else window.location.href = org; + } else { + closeWindow(window); + } + } else { + setApiError(res.bodyText); + } + }; + + if (destroyed) return <p className="thm-text-killed">{t('addForm.killed')}</p>; + + return ( + <form + onSubmit={(e) => { + void onSubmit(e); + }} + > + <table className="w-100"> + <tbody> + <tr> + <td className="w1" /> + <td> + {bm.bid > 0 ? ( + <div className="alert"> + {t('addForm.previouslySaved')} + <span + className="link f7 dib thm-text-tertiary thm-hover-link-color pr3" + data-time={bm.time} + title={shdatetime(a.lang, bm.time)} + > + {fromNowVal} + </span> + <div className="edit_links dib ml1"> + <div className="delete_link di"> + <button + type="button" + onClick={() => { + setDeleteAsk(true); + }} + className="delete" + hidden={deleteAsk} + > + {t('delete')} + </button> + <span className="confirm thm-text-error" hidden={!deleteAsk}> + <button + type="button" + onClick={() => { + setDeleteAsk(false); + }} + > + {t('cancel')} / + </button> + <button + type="button" + onClick={() => void onDestroy()} + className="thm-text-error" + > + {t('destroy')} + </button> + </span> + </div> + </div> + </div> + ) : null} + {apiError ? <div className="alert alert-err">{apiError}</div> : null} + </td> + </tr> + + <tr> + <td> + <label htmlFor="url">{t('addForm.url')}</label> + </td> + <td> + <input + type="url" + id="url" + className="w-100 mv1" + required + name="url" + autoFocus={bm.url === ''} + value={editBm.url} + onChange={(e) => { + setEditBm((x) => ({ ...x, url: e.target.value })); + }} + /> + </td> + </tr> + + <tr> + <td> + <label htmlFor="title">{t('bmark.title')}</label> + </td> + <td className="flex"> + <input + type="text" + id="title" + className="w-100 mv1 flex-auto" + name="title" + value={editBm.title} + onChange={(e) => { + setEditBm((x) => ({ ...x, title: e.target.value })); + }} + /> + <button + disabled={loading} + type="button" + onClick={() => void onFetchTitle()} + className={`ml2 input-reset ba thm-border-primary pointer f6 di dim pa1 ma1 mr0${loading ? ' thm-bg-disabled' : ''}`} + > + {t('fetch')} + </button> + </td> + </tr> + + <tr> + <td> + <label htmlFor="description">{t('bmark.description')}</label> + </td> + <td> + <textarea + className="w-100 mt1 thm-text-secondary" + id="description" + name="description" + rows={4} + value={editBm.description} + onChange={(e) => { + setEditBm((x) => ({ ...x, description: e.target.value })); + }} + /> + </td> + </tr> + + <tr> + <td> + <label htmlFor="tags">{t('bmark.tags')}</label> + </td> + <td> + <div className="relative"> + <input + ref={tagInputRef} + type="text" + id="tags" + className="w-100 mv1" + name="tags" + autoComplete="off" + autoCapitalize="off" + autoFocus={bm.url !== ''} + value={editBm.tags} + onChange={onTagsChange} + onKeyDown={onTagsKeyDown} + onClick={onTagsSelect} + onSelect={onTagsSelect} + onBlur={() => { + window.setTimeout(() => { + closeSuggestions(); + }, 0); + }} + /> + {suggestionState != null ? ( + <TagSuggestionsDropdown + suggestionState={suggestionState} + onHover={onSuggestionHover} + onPick={onSuggestionPick} + /> + ) : null} + </div> + </td> + </tr> + + <tr> + <td> + <label htmlFor="private">{t('bmark.private')}</label> + </td> + <td> + <div className="mr4 dib"> + <input + type="checkbox" + id="private" + className="private pointer" + name="private" + checked={editBm.private} + onChange={(e) => { + setEditBm((x) => ({ + ...x, + private: e.target.checked, + ...(a.dat.archiveBackendEnabled && editBm.archiveRequested && e.target.checked + ? { archiveRequested: false } + : {}), + })); + }} + /> + </div> + {!(bm.bid > 0) && a.dat.archiveBackendEnabled ? ( + <div + className={`dib ${editBm.private ? 'o-50' : ''}`} + title={editBm.private ? t('addForm.archiveUnavailable') : undefined} + > + <label className="mr2 di" htmlFor="archiveRequested"> + {t('archive')} + </label> + <input + type="checkbox" + id="archiveRequested" + className="archive pointer ml2" + name="archiveRequested" + disabled={editBm.private} + checked={editBm.archiveRequested ?? false} + onChange={(e) => { + setEditBm((x) => ({ ...x, archiveRequested: e.target.checked })); + }} + /> + </div> + ) : null} + </td> + </tr> + + <tr> + <td> + <label htmlFor="toread">{t('addForm.readLater')}</label> + </td> + <td> + <input + type="checkbox" + id="toread" + className="toread pointer" + name="toread" + checked={editBm.toread} + onChange={(e) => { + setEditBm((x) => ({ ...x, toread: e.target.checked })); + }} + /> + </td> + </tr> + + <tr> + <td /> + <td> + <input + type="submit" + className="ph3 pv2 input-reset thm-text-strong ba thm-border-primary bg-transparent pointer f6 dib mt1 dim" + value={bm.bid > 0 ? t('addForm.update') : t('addForm.add')} + /> + </td> + </tr> + </tbody> + </table> + </form> + ); +}
frontend/src/components/BMark.tsx view
@@ -1,389 +1,489 @@-import React from 'react';-import { useTranslation } from 'react-i18next';--import { archiveBookmark, destroy, editBookmark, lookupTitle, markRead, toggleStar } from '../api';-import { app, setFocus, shdatetime, toLocaleDateString } from '../globals';-import { useTagSuggestions } from '../hooks/useTagSuggestions';-import type { Bookmark } from '../types';-import { encodeTag, fromNullableStr, normalizeTags } from '../util';-import { Markdown } from './Markdown';-import { TagSuggestionsDropdown } from './TagSuggestionsDropdown';--/** Displays a single bookmark with inline editing, starring, and deletion. */-export function BMark({- initial,- onNotifyRemove,- onUpdated,-}: {- initial: Bookmark;- onNotifyRemove: () => void;- onUpdated: (bm: Bookmark) => void;-}) {- const { t } = useTranslation();- const a = app();- const [bm, setBm] = React.useState<Bookmark>(initial);- const [editBm, setEditBm] = React.useState<Bookmark>(initial);- const [deleteAsk, setDeleteAsk] = React.useState(false);- const [edit, setEdit] = React.useState(false);- const [loading, setLoading] = React.useState(false);- const [archiving, setArchiving] = React.useState(false);- const [apiError, setApiError] = React.useState<string | null>(null);-- const tagInputId = `${bm.bid.toString()}_tags`;-- const linkToFilterSingle = `${fromNullableStr(a.userR)}/b:${bm.slug}`;- const linkToFilterTag = (tag: string) => `${fromNullableStr(a.userR)}/t:${encodeTag(tag)}`;- const viewInContextTime = (time: Date) => {- const t = new Date(time);- const t2 = new Date(t.getTime() + 2);- return t2.toISOString();- };- const linkToViewInContext = `${fromNullableStr(a.userR)}?before=${encodeURIComponent(viewInContextTime(new Date(bm.time)))}`;-- const suggestEnabled = a.dat.suggestTags === true;-- const {- tagInputRef,- suggestionState,- closeSuggestions,- onTagsChange,- onTagsKeyDown,- onTagsSelect,- onSuggestionHover,- onSuggestionPick,- } = useTagSuggestions({- enabled: suggestEnabled,- tags: editBm.tags,- onTagsUpdate: (tags) => {- setEditBm((x) => ({ ...x, tags }));- },- });-- async function onStar(next: boolean) {- await toggleStar(bm.bid, next ? 'star' : 'unstar');- const updated = { ...bm, selected: next };- setBm(updated);- setEditBm((x) => ({ ...x, selected: next }));- onUpdated(updated);- }-- async function onDestroy() {- await destroy(bm.bid);- onNotifyRemove();- }-- async function onMarkRead() {- await markRead(bm.bid);- const updated = { ...bm, toread: false };- setBm(updated);- onUpdated(updated);- }-- function startEdit(next: boolean) {- setEditBm(bm);- setEdit(next);- setApiError(null);- setArchiving(false);- closeSuggestions();- if (next) setFocus(tagInputId);- }-- async function onFetchTitle() {- setLoading(true);- try {- const title = await lookupTitle(editBm);- if (title != null) setEditBm((x) => ({ ...x, title }));- } finally {- setLoading(false);- }- }-- async function onArchive() {- setArchiving(true);- await archiveBookmark(bm.bid);- }-- const onSubmit = async (e: React.SyntheticEvent<HTMLFormElement, SubmitEvent>): Promise<void> => {- e.preventDefault();- setApiError(null);- const editBm2 = { ...editBm, tags: normalizeTags(editBm.tags) };-- const res = await editBookmark(editBm2);- if (res.ok && res.status >= 200 && res.status < 300) {- setBm(editBm2);- setEdit(false);- onUpdated(editBm2);- } else {- setApiError(res.bodyText);- }- };-- const archivingDisabled = archiving || editBm.private || bm.url !== editBm.url;-- return (- <div- id={String(bm.bid)}- className={`bookmark w-100 mw7 pa1 mb3${bm.private ? ' private' : ''}`}- >- {a.dat.isowner ? (- <div className={`star fl pointer${bm.selected ? ' selected' : ''}`}>- <button- className="thm-text-border"- onClick={() => void onStar(!bm.selected)}- type="button"- >- ✭- </button>- </div>- ) : null}-- {!edit ? (- <div className="display">- <a- href={bm.url}- target="_blank"- rel="noreferrer"- className={`link f5 lh-title${bm.toread ? ' unread' : ''}`}- >- {bm.title === '' ? t('noTitle') : bm.title}- </a>- <br />- <a href={bm.url} className="link f7 thm-text-tertiary thm-hover-link-color">- {bm.url}- </a>- {bm.archiveUrl ? (- <a- href={bm.archiveUrl}- className="link f7 thm-text-tertiary thm-hover-link-color ml2 thm-text-success"- target="_blank"- rel="noreferrer"- title={t('bmark.archiveLinkTitle')}- >- ☑- </a>- ) : null}- <br />- <div className="description mt1 thm-text-secondary">- <Markdown text={bm.description} />- </div>- <div className="tags">- {bm.tags !== ''- ? bm.tags.split(' ').map((tag) => (- <a- key={tag}- className={`link tag mr1${tag.slice(0, 1) === '.' ? ' private' : ''}`}- href={linkToFilterTag(tag)}- >- {tag}- </a>- ))- : null}- </div>-- <div>- <a- className="link f7 di mr5 thm-text-tertiary"- href={linkToFilterSingle}- data-time={bm.time}- title={shdatetime(a.lang, bm.time)}- >- {toLocaleDateString(a.lang, bm.time)}- </a>-- {a.dat.isowner ? (- <div className="edit_links di">- <button- type="button"- onClick={() => {- startEdit(true);- }}- className="edit thm-text-muted thm-hover-link-color"- >- {t('edit')} - </button>- <div className="delete_link di">- <button- type="button"- onClick={() => {- setDeleteAsk(true);- }}- className={`delete thm-text-muted thm-hover-link-color${deleteAsk ? ' dn' : ''}`}- >- {t('delete')}- </button>- <span className={`confirm thm-text-error${!deleteAsk ? ' dn' : ''}`}>- <button- type="button"- onClick={() => {- setDeleteAsk(false);- }}- >- {t('cancel')} / - </button>- <button- type="button"- onClick={() => void onDestroy()}- className="thm-text-error"- >- {t('destroy')}- </button>- </span>- </div>- </div>- ) : null}-- {a.dat.isowner && bm.toread ? (- <div className="read di">- - <button onClick={() => void onMarkRead()} className="mark_read" type="button">- {t('bmark.markAsRead')}- </button>- </div>- ) : null}- </div>-- {a.dat.filter?.tag == 'FilterSingle' ? (- <div className="mt2">- <a className="link f7 di mr5" href={linkToViewInContext}>- {t('bmark.viewInContext')}- </a>- </div>- ) : null}- </div>- ) : (- <div className="edit_bookmark_form pa2 pt0 thm-bg-surface">- {apiError ? <div className="alert alert-err">{apiError}</div> : null}- <form onSubmit={(e) => void onSubmit(e)}>- <div>{t('bmark.url')}</div>- <input- type="url"- className="url w-100 mb2 pt1 edit_form_input"- required- name="url"- value={editBm.url}- onChange={(e) => {- setEditBm((x) => ({ ...x, url: e.target.value }));- }}- />- <div>{t('bmark.title')}</div>- <div className="flex">- <input- type="text"- className="title w-100 mb2 pt1 edit_form_input"- name="title"- value={editBm.title}- onChange={(e) => {- setEditBm((x) => ({ ...x, title: e.target.value }));- }}- />- <button- disabled={loading}- type="button"- onClick={() => void onFetchTitle()}- className={`ml1 pa1 mb2 thm-text-primary ba thm-border-default thm-bg-secondary pointer rdim f7${- loading ? ' thm-bg-disabled' : ''- }`}- >- {t('fetch')}- </button>- </div>- <div>{t('bmark.description')}</div>- <textarea- className="description w-100 mb1 pt1 edit_form_input"- name="description"- rows={5}- value={editBm.description}- onChange={(e) => {- setEditBm((x) => ({ ...x, description: e.target.value }));- }}- />- <div id="tags_input_box">- <div>{t('bmark.tags')}</div>- <div className="relative">- <input- id={tagInputId}- ref={tagInputRef}- type="text"- className="tags w-100 mb1 pt1 edit_form_input"- name="tags"- autoComplete="off"- autoCapitalize="off"- value={editBm.tags}- onChange={onTagsChange}- onKeyDown={onTagsKeyDown}- onClick={onTagsSelect}- onSelect={onTagsSelect}- onBlur={() => {- window.setTimeout(() => {- closeSuggestions();- }, 0);- }}- />- {suggestionState != null ? (- <TagSuggestionsDropdown- suggestionState={suggestionState}- onHover={onSuggestionHover}- onPick={onSuggestionPick}- />- ) : null}- </div>- </div>- <div className="edit_form_checkboxes mv3">- <input- type="checkbox"- className="private pointer"- id="edit_private"- name="private"- checked={editBm.private}- onChange={(e) => {- setEditBm((x) => ({ ...x, private: e.target.checked }));- }}- />{' '}- <label htmlFor="edit_private" className="mr2">- {t('bmark.private')}- </label>{' '}- <input- type="checkbox"- className="toread pointer"- id="edit_toread"- name="toread"- checked={editBm.toread}- onChange={(e) => {- setEditBm((x) => ({ ...x, toread: e.target.checked }));- }}- />{' '}- <label htmlFor="edit_toread">{t('bmark.toread')}</label>- </div>- <div className="flex justify-between items-center">- <div>- <input- type="submit"- className="mr1 pv1 ph2 thm-text-primary ba thm-border-default thm-bg-secondary pointer rdim"- value={t('save')}- />{' '}- <input- type="reset"- className="pv1 ph2 thm-text-primary ba thm-border-default thm-bg-secondary pointer rdim"- value={t('cancel')}- onClick={() => {- startEdit(false);- }}- />- </div>- {a.dat.archiveBackendEnabled ? (- <button- type="button"- disabled={archivingDisabled}- onClick={() => void onArchive()}- className={`pv1 ph2 thm-text-primary ba thm-border-default thm-bg-secondary${archiving ? ' thm-bg-disabled' : ''}${archivingDisabled ? ' not-allowed o-20' : ''}`}- >- {archiving ? t('archiving') : t('archive')}- </button>- ) : null}- </div>- </form>- </div>- )}- </div>- );-}+import { TimeoutError } from 'ky'; +import React from 'react'; +import { useTranslation } from 'react-i18next'; + +import { archiveBookmark, destroy, editBookmark, lookupTitle, markRead, toggleStar } from '../api'; +import { app, setFocus, shdatetime, toLocaleDateString } from '../globals'; +import { useTagSuggestions } from '../hooks/useTagSuggestions'; +import type { Bookmark } from '../types'; +import { apiErrorMsg, encodeTag, fromNullableStr, normalizeTags } from '../util'; +import { Markdown } from './Markdown'; +import { TagSuggestionsDropdown } from './TagSuggestionsDropdown'; + +/** Displays a single bookmark with inline editing, starring, and deletion. */ +export function BMark({ + initial, + onNotifyRemove, + onUpdated, +}: { + initial: Bookmark; + onNotifyRemove: () => void; + onUpdated: (bm: Bookmark) => void; +}) { + const { t } = useTranslation(); + const a = app(); + const [bm, setBm] = React.useState<Bookmark>(initial); + const [editBm, setEditBm] = React.useState<Bookmark>(initial); + const [deleteAsk, setDeleteAsk] = React.useState(false); + const [edit, setEdit] = React.useState(false); + const [loading, setLoading] = React.useState(false); + const [archiving, setArchiving] = React.useState(false); + const [actionError, setActionError] = React.useState<string | null>(null); + const [errorFadingOut, setErrorFadingOut] = React.useState(false); + const errorTimer = React.useRef<number | null>(null); + const fadeTimer = React.useRef<number | null>(null); + + React.useEffect(() => { + return () => { + if (errorTimer.current !== null) window.clearTimeout(errorTimer.current); + if (fadeTimer.current !== null) window.clearTimeout(fadeTimer.current); + }; + }, []); + + function clearErrorTimers() { + if (errorTimer.current !== null) { + window.clearTimeout(errorTimer.current); + errorTimer.current = null; + } + if (fadeTimer.current !== null) { + window.clearTimeout(fadeTimer.current); + fadeTimer.current = null; + } + } + + function showActionError(msg: string) { + clearErrorTimers(); + setErrorFadingOut(false); + setActionError(msg); + errorTimer.current = window.setTimeout(() => { + errorTimer.current = null; + setErrorFadingOut(true); + fadeTimer.current = window.setTimeout(() => { + setActionError(null); + setErrorFadingOut(false); + fadeTimer.current = null; + }, 5000); + }, 3000); + } + + const tagInputId = `${bm.bid.toString()}_tags`; + + const linkToFilterSingle = `${fromNullableStr(a.userR)}/b:${bm.slug}`; + const linkToFilterTag = (tag: string) => `${fromNullableStr(a.userR)}/t:${encodeTag(tag)}`; + const viewInContextTime = (time: Date) => { + const t = new Date(time); + const t2 = new Date(t.getTime() + 2); + return t2.toISOString(); + }; + const linkToViewInContext = `${fromNullableStr(a.userR)}?before=${encodeURIComponent(viewInContextTime(new Date(bm.time)))}`; + + const suggestEnabled = a.dat.suggestTags === true; + + const { + tagInputRef, + suggestionState, + closeSuggestions, + onTagsChange, + onTagsKeyDown, + onTagsSelect, + onSuggestionHover, + onSuggestionPick, + } = useTagSuggestions({ + enabled: suggestEnabled, + tags: editBm.tags, + onTagsUpdate: (tags) => { + setEditBm((x) => ({ ...x, tags })); + }, + }); + + async function onStar(next: boolean) { + try { + const res = await toggleStar(bm.bid, next ? 'star' : 'unstar'); + if (!res.ok) { + showActionError(apiErrorMsg(t, res.status, res.bodyText)); + return; + } + clearErrorTimers(); + setActionError(null); + const updated = { ...bm, selected: next }; + setBm(updated); + setEditBm((x) => ({ ...x, selected: next })); + onUpdated(updated); + } catch (err) { + showActionError( + err instanceof TimeoutError ? t('error.requestTimedOut') : t('error.networkError'), + ); + } + } + + async function onDestroy() { + try { + const res = await destroy(bm.bid); + if (!res.ok) { + showActionError(apiErrorMsg(t, res.status, res.bodyText)); + return; + } + onNotifyRemove(); + } catch (err) { + showActionError( + err instanceof TimeoutError ? t('error.requestTimedOut') : t('error.networkError'), + ); + } + } + + async function onMarkRead() { + try { + const res = await markRead(bm.bid); + if (!res.ok) { + showActionError(apiErrorMsg(t, res.status, res.bodyText)); + return; + } + clearErrorTimers(); + setActionError(null); + const updated = { ...bm, toread: false }; + setBm(updated); + onUpdated(updated); + } catch (err) { + showActionError( + err instanceof TimeoutError ? t('error.requestTimedOut') : t('error.networkError'), + ); + } + } + + function startEdit(next: boolean) { + setEditBm(bm); + setEdit(next); + clearErrorTimers(); + setActionError(null); + setErrorFadingOut(false); + setArchiving(false); + closeSuggestions(); + if (next) setFocus(tagInputId); + } + + async function onFetchTitle() { + setLoading(true); + try { + const title = await lookupTitle(editBm); + if (title != null) setEditBm((x) => ({ ...x, title })); + } finally { + setLoading(false); + } + } + + async function onArchive() { + setArchiving(true); + try { + const res = await archiveBookmark(bm.bid); + if (!res.ok) { + showActionError(apiErrorMsg(t, res.status, res.bodyText)); + return; + } + } finally { + setArchiving(false); + } + } + + const onSubmit = async (e: React.SyntheticEvent<HTMLFormElement, SubmitEvent>): Promise<void> => { + e.preventDefault(); + clearErrorTimers(); + setActionError(null); + setErrorFadingOut(false); + const editBm2 = { ...editBm, tags: normalizeTags(editBm.tags) }; + try { + const res = await editBookmark(editBm2); + if (res.ok && res.status >= 200 && res.status < 300) { + setBm(editBm2); + setEdit(false); + onUpdated(editBm2); + } else { + showActionError(apiErrorMsg(t, res.status, res.bodyText)); + } + } catch (err) { + showActionError( + err instanceof TimeoutError ? t('error.requestTimedOut') : t('error.networkError'), + ); + } + }; + + const archivingDisabled = archiving || editBm.private || bm.url !== editBm.url; + + return ( + <div + id={String(bm.bid)} + className={`bookmark w-100 mw7 pa1 mb3${bm.private ? ' private' : ''}`} + > + {a.dat.isowner ? ( + <div className={`star fl pointer${bm.selected ? ' selected' : ''}`}> + <button + className="thm-text-border" + onClick={() => void onStar(!bm.selected)} + type="button" + > + ✭ + </button> + </div> + ) : null} + + {!edit ? ( + <div className="display"> + <a + href={bm.url} + target="_blank" + rel="noreferrer" + className={`link f5 lh-title${bm.toread ? ' unread' : ''}`} + > + {bm.title === '' ? t('noTitle') : bm.title} + </a> + <br /> + <a href={bm.url} className="link f7 thm-text-tertiary thm-hover-link-color"> + {bm.url} + </a> + {bm.archiveUrl ? ( + <a + href={bm.archiveUrl} + className="link f7 thm-text-tertiary thm-hover-link-color ml2 thm-text-success" + target="_blank" + rel="noreferrer" + title={t('bmark.archiveLinkTitle')} + > + ☑ + </a> + ) : null} + <br /> + <div className="description mt1 thm-text-secondary"> + <Markdown text={bm.description} /> + </div> + <div className="tags"> + {bm.tags !== '' + ? bm.tags.split(' ').map((tag) => ( + <a + key={tag} + className={`link tag mr1${tag.slice(0, 1) === '.' ? ' private' : ''}`} + href={linkToFilterTag(tag)} + > + {tag} + </a> + )) + : null} + </div> + + <div> + <a + className="link f7 di mr5 thm-text-tertiary" + href={linkToFilterSingle} + data-time={bm.time} + title={shdatetime(a.lang, bm.time)} + > + {toLocaleDateString(a.lang, bm.time)} + </a> + + {a.dat.isowner ? ( + <div className="edit_links di"> + <button + type="button" + onClick={() => { + startEdit(true); + }} + className="edit thm-text-muted thm-hover-link-color" + > + {t('edit')} + </button> + <div className="delete_link di"> + <button + type="button" + onClick={() => { + setDeleteAsk(true); + }} + className={`delete thm-text-muted thm-hover-link-color${deleteAsk ? ' dn' : ''}`} + > + {t('delete')} + </button> + <span className={`confirm thm-text-error${!deleteAsk ? ' dn' : ''}`}> + <button + type="button" + onClick={() => { + setDeleteAsk(false); + }} + > + {t('cancel')} / + </button> + <button + type="button" + onClick={() => void onDestroy()} + className="thm-text-error" + > + {t('destroy')} + </button> + </span> + </div> + </div> + ) : null} + + {a.dat.isowner && bm.toread ? ( + <div className="read di"> + + <button onClick={() => void onMarkRead()} className="mark_read" type="button"> + {t('bmark.markAsRead')} + </button> + </div> + ) : null} + </div> + + {a.dat.filter?.tag == 'FilterSingle' ? ( + <div className="mt2"> + <a className="link f7 di mr5" href={linkToViewInContext}> + {t('bmark.viewInContext')} + </a> + </div> + ) : null} + </div> + ) : null} + {edit ? ( + <div className="edit_bookmark_form pa2 pt0 thm-bg-surface"> + <form onSubmit={(e) => void onSubmit(e)}> + <div>{t('bmark.url')}</div> + <input + type="url" + className="url w-100 mb2 pt1 edit_form_input" + required + name="url" + value={editBm.url} + onChange={(e) => { + setEditBm((x) => ({ ...x, url: e.target.value })); + }} + /> + <div>{t('bmark.title')}</div> + <div className="flex"> + <input + type="text" + className="title w-100 mb2 pt1 edit_form_input" + name="title" + value={editBm.title} + onChange={(e) => { + setEditBm((x) => ({ ...x, title: e.target.value })); + }} + /> + <button + disabled={loading} + type="button" + onClick={() => void onFetchTitle()} + className={`ml1 pa1 mb2 thm-text-primary ba thm-border-default thm-bg-secondary pointer rdim f7${ + loading ? ' thm-bg-disabled' : '' + }`} + > + {t('fetch')} + </button> + </div> + <div>{t('bmark.description')}</div> + <textarea + className="description w-100 mb1 pt1 edit_form_input" + name="description" + rows={5} + value={editBm.description} + onChange={(e) => { + setEditBm((x) => ({ ...x, description: e.target.value })); + }} + /> + <div id="tags_input_box"> + <div>{t('bmark.tags')}</div> + <div className="relative"> + <input + id={tagInputId} + ref={tagInputRef} + type="text" + className="tags w-100 mb1 pt1 edit_form_input" + name="tags" + autoComplete="off" + autoCapitalize="off" + value={editBm.tags} + onChange={onTagsChange} + onKeyDown={onTagsKeyDown} + onClick={onTagsSelect} + onSelect={onTagsSelect} + onBlur={() => { + window.setTimeout(() => { + closeSuggestions(); + }, 0); + }} + /> + {suggestionState != null ? ( + <TagSuggestionsDropdown + suggestionState={suggestionState} + onHover={onSuggestionHover} + onPick={onSuggestionPick} + /> + ) : null} + </div> + </div> + <div className="edit_form_checkboxes mv3"> + <input + type="checkbox" + className="private pointer" + id="edit_private" + name="private" + checked={editBm.private} + onChange={(e) => { + setEditBm((x) => ({ ...x, private: e.target.checked })); + }} + />{' '} + <label htmlFor="edit_private" className="mr2"> + {t('bmark.private')} + </label>{' '} + <input + type="checkbox" + className="toread pointer" + id="edit_toread" + name="toread" + checked={editBm.toread} + onChange={(e) => { + setEditBm((x) => ({ ...x, toread: e.target.checked })); + }} + />{' '} + <label htmlFor="edit_toread">{t('bmark.toread')}</label> + </div> + <div className="flex justify-between items-center"> + <div> + <input + type="submit" + className="mr1 pv1 ph2 thm-text-primary ba thm-border-default thm-bg-secondary pointer rdim" + value={t('save')} + />{' '} + <input + type="reset" + className="pv1 ph2 thm-text-primary ba thm-border-default thm-bg-secondary pointer rdim" + value={t('cancel')} + onClick={() => { + startEdit(false); + }} + /> + </div> + {a.dat.archiveBackendEnabled ? ( + <button + type="button" + disabled={archivingDisabled} + onClick={() => void onArchive()} + className={`pv1 ph2 thm-text-primary ba thm-border-default thm-bg-secondary${archiving ? ' thm-bg-disabled' : ''}${archivingDisabled ? ' not-allowed o-20' : ''}`} + > + {archiving ? t('archiving') : t('archive')} + </button> + ) : null} + </div> + </form> + </div> + ) : null} + + {actionError != null ? ( + <span + className="thm-text-error f7 db mt1" + style={{ + opacity: errorFadingOut ? 0 : 1, + transition: errorFadingOut ? 'opacity 5s' : 'none', + }} + > + {actionError} + </span> + ) : null} + </div> + ); +}
+ frontend/src/components/BulkEdit.tsx view
@@ -0,0 +1,458 @@+import { TimeoutError } from 'ky'; +import React, { useEffect, useRef, useState } from 'react'; +import { useTranslation } from 'react-i18next'; + +import { apiErrorMsg, normalizeTags } from '@/util'; + +import * as api from '../api'; +import { app } from '../globals'; +import { useTagSuggestions } from '../hooks/useTagSuggestions'; +import { useBookmarksStore } from '../stores/bookmarksStore'; +import { TagSuggestionsDropdown } from './TagSuggestionsDropdown'; + +type BulkAction = 'read' | 'unread' | 'star' | 'unstar' | 'delete' | 'private' | 'public'; +type BulkSelection = 'page' | 'all'; + +interface Props { + bcount: number; +} + +type BulkValidationKey = + | 'bulkEdit.pleaseAddSelection' + | 'bulkEdit.pleaseChooseAction' + | 'bulkEdit.tooManyTags'; + +function disabledReason( + selection: BulkSelection | null, + action: BulkAction | null, + addTags: string, + removeTags: string, + bcount: number, +): BulkValidationKey | null { + if (selection === null) return 'bulkEdit.pleaseAddSelection'; + if (!action && !addTags.trim() && !removeTags.trim()) return 'bulkEdit.pleaseChooseAction'; + if (bcount > 20000 && addTags.trim().split(/\s+/).filter(Boolean).length > 10) + return 'bulkEdit.tooManyTags'; + return null; +} + +function navLink<T>(current: T | null, value: T, label: string, onClick: (v: T) => void) { + return ( + <a + href="#" + className={`dib mt1 link${current === value ? ' nav-active' : ' silver hover-alt'}`} + onClick={(e) => { + e.preventDefault(); + onClick(value); + }} + > + {label} + </a> + ); +} + +export function BulkEdit({ bcount }: Props) { + const { t } = useTranslation(); + const [visible, setVisible] = useState(false); + const [selection, setSelection] = useState<BulkSelection | null>(null); + const [action, setAction] = useState<BulkAction | null>(null); + const [addTags, setAddTags] = useState(''); + const [removeTags, setRemoveTags] = useState(''); + const [submitting, setSubmitting] = useState(false); + const [confirmDelete, setConfirmDelete] = useState(false); + const [confirmPublic, setConfirmPublic] = useState(false); + const [validationMsg, setValidationMsg] = useState<string | null>(null); + const [errorFadingOut, setErrorFadingOut] = useState(false); + const validationTimer = useRef<number | null>(null); + const fadeTimer = useRef<number | null>(null); + + const a = app(); + const suggestEnabled = a.dat.suggestTags === true; + const bulkFilter = a.dat.filter ?? { tag: 'FilterAll' as const }; + const bulkSharedp = a.dat.sharedp ?? 'all'; + const bulkTags = a.dat.tags ?? []; + const bulkQuery = a.dat.query ?? null; + + const bmarks = useBookmarksStore((s) => s.bmarks); + const bids = bmarks.map((b) => b.bid); + const pageCount = bids.length; + const selectionCount = selection === null ? 0 : selection === 'page' ? pageCount : bcount; + + const reason = disabledReason(selection, action, addTags, removeTags, bcount); + const isVisuallyDisabled = submitting || reason !== null || confirmDelete || confirmPublic; + + const { + tagInputRef: removeTagsRef, + suggestionState: removeSuggestionState, + closeSuggestions: closeRemoveSuggestions, + onTagsChange: onRemoveTagsChange, + onTagsKeyDown: onRemoveTagsKeyDown, + onTagsSelect: onRemoveTagsSelect, + onSuggestionHover: onRemoveSuggestionHover, + onSuggestionPick: onRemoveSuggestionPick, + } = useTagSuggestions({ + enabled: suggestEnabled && action !== 'delete', + tags: removeTags, + onTagsUpdate: setRemoveTags, + }); + + const { + tagInputRef: addTagsRef, + suggestionState: addSuggestionState, + closeSuggestions: closeAddSuggestions, + onTagsChange: onAddTagsChange, + onTagsKeyDown: onAddTagsKeyDown, + onTagsSelect: onAddTagsSelect, + onSuggestionHover: onAddSuggestionHover, + onSuggestionPick: onAddSuggestionPick, + } = useTagSuggestions({ + enabled: suggestEnabled && action !== 'delete', + tags: addTags, + onTagsUpdate: setAddTags, + }); + + const clearValidationTimers = () => { + if (validationTimer.current !== null) { + window.clearTimeout(validationTimer.current); + validationTimer.current = null; + } + if (fadeTimer.current !== null) { + window.clearTimeout(fadeTimer.current); + fadeTimer.current = null; + } + }; + + const resetForm = () => { + setSelection(null); + setAction(null); + setAddTags(''); + setRemoveTags(''); + setConfirmDelete(false); + setConfirmPublic(false); + setValidationMsg(null); + setErrorFadingOut(false); + clearValidationTimers(); + }; + + useEffect(() => { + const el = document.getElementById('bulk-edit-toggle'); + if (!el) return; + const handler = (e: Event) => { + e.preventDefault(); + resetForm(); + setVisible((v) => !v); + }; + el.addEventListener('click', handler); + return () => { + el.removeEventListener('click', handler); + }; + }, []); + + useEffect(() => { + const el = document.getElementById('bulk-edit-toggle'); + if (!el) return; + el.classList.toggle('nav-active', visible); + el.classList.toggle('silver', !visible); + }, [visible]); + + useEffect(() => { + setConfirmDelete(false); + setConfirmPublic(false); + setValidationMsg(null); + setErrorFadingOut(false); + }, [action, selection]); + + useEffect(() => { + return () => { + clearValidationTimers(); + }; + }, []); + + const showValidationMsg = (msg: string) => { + clearValidationTimers(); + setErrorFadingOut(false); + setValidationMsg(msg); + validationTimer.current = window.setTimeout(() => { + validationTimer.current = null; + setErrorFadingOut(true); + fadeTimer.current = window.setTimeout(() => { + setValidationMsg(null); + setErrorFadingOut(false); + fadeTimer.current = null; + }, 5000); + }, 3000); + }; + + const handleSubmit = async ( + e: React.SyntheticEvent<HTMLFormElement, SubmitEvent>, + ): Promise<void> => { + e.preventDefault(); + setValidationMsg(null); + setErrorFadingOut(false); + + const addTagsTrimmed = normalizeTags(addTags); + const removeTagsTrimmed = normalizeTags(removeTags); + const r = disabledReason(selection, action, addTagsTrimmed, removeTagsTrimmed, bcount); + if (r !== null) { + showValidationMsg(t(r)); + return; + } + if (action === 'delete' && !confirmDelete) { + setConfirmDelete(true); + return; + } + if (action === 'public' && !confirmPublic) { + setConfirmPublic(true); + return; + } + setConfirmDelete(false); + setConfirmPublic(false); + setSubmitting(true); + try { + if (selection === null) return; + const res = await api.bulkEdit( + selection === 'page' + ? { + selection: 'page', + bids, + action, + addTags: addTagsTrimmed, + removeTags: removeTagsTrimmed, + selectionCount, + } + : { + selection: 'all', + filter: bulkFilter, + sharedp: bulkSharedp, + tags: bulkTags, + query: bulkQuery, + action, + addTags: addTagsTrimmed, + removeTags: removeTagsTrimmed, + selectionCount, + }, + ); + if (res.ok) { + window.location.reload(); + } else { + showValidationMsg(apiErrorMsg(t, res.status, res.bodyText ?? '')); + } + } catch (err) { + if (err instanceof TimeoutError) { + showValidationMsg(t('error.requestTimedOut')); + } else { + showValidationMsg(t('error.networkError')); + } + } finally { + setSubmitting(false); + } + }; + + if (!visible) return null; + + const toggleAction = (v: BulkAction) => { + setAction((cur) => (cur === v ? null : v)); + if (v === 'delete') { + setAddTags(''); + setRemoveTags(''); + } + }; + + return ( + <form + onSubmit={(e) => { + void handleSubmit(e); + }} + className="w-100 mw7 pa2 bulk_bookmark_form mt1" + > + <div className="mb2"> + <div> + <span className="fw7">{t('bulkEdit.select')}</span> + {selection !== null && ( + <span className="ml2"> + {selectionCount === 1 + ? t('bulkEdit.oneBookmarkSelected') + : t('bulkEdit.bookmarksSelected', { count: selectionCount })} + </span> + )} + </div> + <div> + {navLink(selection, 'page', t('bulkEdit.thisPage'), setSelection)} + {' ‧ '} + {navLink(selection, 'all', t('bulkEdit.allPages'), setSelection)} + </div> + </div> + + <div className="mb2"> + <div> + <span className="fw7">{t('bulkEdit.action')}</span> + </div> + <div> + {navLink(action, 'private', t('bulkEdit.makePrivate'), toggleAction)} + {' ‧ '} + {navLink(action, 'public', t('bulkEdit.makePublic'), toggleAction)} + {' ‧ '} + {navLink(action, 'read', t('bulkEdit.markAsRead'), toggleAction)} + {' ‧ '} + {navLink(action, 'unread', t('bulkEdit.unread'), toggleAction)} + {' ‧ '} + {navLink(action, 'star', t('bulkEdit.addStars'), toggleAction)} + {' ‧ '} + {navLink(action, 'unstar', t('bulkEdit.removeStars'), toggleAction)} + {' ‧ '} + {navLink(action, 'delete', t('delete'), toggleAction)} + </div> + </div> + + <div className="mb2"> + <div> + <span className={`fw7${normalizeTags(removeTags) ? ' nav-active' : ''}`}> + {t('bulkEdit.removeTags')} + </span> + </div> + <div className="relative"> + <input + ref={removeTagsRef} + type="text" + className={`tags w-100 mb1 pt1 edit_form_input${action === 'delete' ? ' o-50 not-allowed' : ''}`} + disabled={action === 'delete'} + autoComplete="off" + autoCapitalize="off" + value={removeTags} + onChange={onRemoveTagsChange} + onKeyDown={onRemoveTagsKeyDown} + onClick={onRemoveTagsSelect} + onSelect={onRemoveTagsSelect} + onBlur={() => { + window.setTimeout(() => { + closeRemoveSuggestions(); + }, 0); + }} + /> + {removeSuggestionState != null ? ( + <TagSuggestionsDropdown + suggestionState={removeSuggestionState} + onHover={onRemoveSuggestionHover} + onPick={onRemoveSuggestionPick} + /> + ) : null} + </div> + </div> + + <div className="mb2"> + <div> + <span className={`fw7${normalizeTags(addTags) ? ' nav-active' : ''}`}> + {t('bulkEdit.addTags')} + </span> + </div> + <div className="relative"> + <input + ref={addTagsRef} + type="text" + className={`tags w-100 mb1 pt1 edit_form_input${action === 'delete' ? ' o-50 not-allowed' : ''}`} + disabled={action === 'delete'} + autoComplete="off" + autoCapitalize="off" + value={addTags} + onChange={onAddTagsChange} + onKeyDown={onAddTagsKeyDown} + onClick={onAddTagsSelect} + onSelect={onAddTagsSelect} + onBlur={() => { + window.setTimeout(() => { + closeAddSuggestions(); + }, 0); + }} + /> + {addSuggestionState != null ? ( + <TagSuggestionsDropdown + suggestionState={addSuggestionState} + onHover={onAddSuggestionHover} + onPick={onAddSuggestionPick} + /> + ) : null} + </div> + </div> + + <div className="flex items-center"> + <button + type="submit" + disabled={submitting || confirmDelete || confirmPublic} + className={`mr2 pv1 ph2 thm-text-primary ba thm-border-default rdim${isVisuallyDisabled ? ' thm-bg-disabled not-allowed' : ' thm-bg-secondary pointer'}`} + onClick={() => { + if (reason !== null) showValidationMsg(t(reason)); + }} + > + {submitting ? t('bulkEdit.submitting') : t('bulkEdit.submit')} + </button>{' '} + <button + type="button" + className="pv1 ph2 thm-text-primary ba thm-border-default thm-bg-secondary pointer rdim" + onClick={() => { + resetForm(); + setVisible(false); + }} + > + {t('cancel')} + </button> + {validationMsg != null && ( + <span + className="thm-text-error f6 ml2" + style={{ + opacity: errorFadingOut ? 0 : 1, + transition: errorFadingOut ? 'opacity 5s' : 'none', + }} + > + {validationMsg} + </span> + )} + {confirmDelete && ( + <span className="f6 ml2"> + <span className="mr2"> + {selectionCount === 1 + ? t('bulkEdit.destroyOne') + : t('bulkEdit.destroyMany', { count: selectionCount })} + </span> + <span className="nowrap"> + <button + type="button" + onClick={() => { + setConfirmDelete(false); + }} + > + {t('cancel')} + </button> + {' / '} + <button type="submit" className="thm-text-error"> + {t('destroy')} + </button> + </span> + </span> + )} + {confirmPublic && ( + <span className="f6 ml2"> + <span className="mr2"> + {selectionCount === 1 + ? t('bulkEdit.publicOne') + : t('bulkEdit.publicMany', { count: selectionCount })} + </span> + <span className="nowrap"> + <button + type="button" + onClick={() => { + setConfirmPublic(false); + }} + > + {t('cancel')} + </button> + {' / '} + <button type="submit" className="thm-text-error"> + {t('bulkEdit.makePublic')} + </button> + </span> + </span> + )} + </div> + </form> + ); +}
frontend/src/components/NNote.tsx view
@@ -1,226 +1,240 @@-import React from 'react';-import { useTranslation } from 'react-i18next';--import { destroyNote, editNote } from '../api';-import { app, closeWindow, fromNow, setFocus, shdatetime } from '../globals';-import type { Note } from '../types';-import { curQuerystring, fromNullableStr, lookupQueryStringValue } from '../util';-import { Markdown } from './Markdown';--function toTextarea(input: string) {- const lines = input.split('\n');- return (- <>- {lines[0]}- {lines.slice(1).map((x, idx) => (- <React.Fragment key={idx}>- <br />- {x}- </React.Fragment>- ))}- </>- );-}--/** Displays a single note with inline editing and deletion, used in the popup window. */-export function NNote({ initial }: { initial: Note }) {- const { t } = useTranslation();- const a = app();-- const [note, setNote] = React.useState<Note>(initial);- const [editNoteState, setEditNoteState] = React.useState<Note>(initial);- const [deleteAsk, setDeleteAsk] = React.useState(false);- const [edit, setEdit] = React.useState(initial.id <= 0);- const [destroyed, setDestroyed] = React.useState(false);- const [apiError, setApiError] = React.useState<string | null>(null);- const fromNowVal = fromNow(a.lang, note.created);-- const notetextid = `${note.id.toString()}_text`;-- function startEdit(next: boolean) {- setEditNoteState(note);- setEdit(next);- const qs = curQuerystring();- const q = lookupQueryStringValue(qs, 'next');- if (!next && q === 'closeWindow') closeWindow(window);- else if (next) setFocus(notetextid);- }-- async function onDestroy() {- await destroyNote(note.id);- setDestroyed(true);- }-- const onSubmit = async (e: React.SyntheticEvent<HTMLFormElement, SubmitEvent>): Promise<void> => {- e.preventDefault();- setApiError(null);-- const res = await editNote(editNoteState);- if (res.ok && res.status >= 200 && res.status < 300) {- const qs = curQuerystring();- const next = lookupQueryStringValue(qs, 'next');- const ref = document.referrer;- const org = window.location.origin;-- if (next === 'closeWindow') closeWindow(window);- else if (next === 'back') {- if (ref.startsWith(org)) window.location.href = ref;- else window.location.href = org;- } else if (editNoteState.id === 0) {- window.location.href = fromNullableStr(a.noteR);- } else {- setNote(editNoteState);- setEdit(false);- }- } else {- setApiError(res.bodyText);- // eslint-disable-next-line no-console- console.log(res.bodyText);- }- };-- if (destroyed) return <p className="thm-text-error">{t('note.killed')}</p>;-- return (- <div id={String(note.id)} className="note w-100 mw7 pa1 mb2">- {!edit ? (- <>- <div className="display">- <div className="link f5 lh-title">{note.title === '' ? t('noTitle') : note.title}</div>- <br />- {note.isMarkdown ? (- <div className="description mt1">- <Markdown text={note.text} />- </div>- ) : (- <div className="description mt1 thm-text-secondary">{toTextarea(note.text)}</div>- )}- <div className="link f7 mt2 dib thm-text-tertiary w4">- <span data-created={note.created} title={shdatetime(a.lang, note.created)}>- {fromNowVal}- </span>- {' - '}- <span className="thm-text-tertiary">- {note.shared ? t('filter.public') : t('filter.private')}- </span>- </div>- </div>-- {a.dat.isowner ? (- <div className="edit_links db mt3">- <button- type="button"- onClick={() => {- startEdit(true);- }}- className="edit thm-text-muted thm-hover-link-color"- >- {t('edit')} - </button>- <div className="delete_link di">- <button- type="button"- onClick={() => {- setDeleteAsk(true);- }}- className={`delete thm-text-muted thm-hover-link-color${deleteAsk ? ' dn' : ''}`}- >- {t('delete')}- </button>- <span className={`confirm thm-text-error${!deleteAsk ? ' dn' : ''}`}>- <button- type="button"- onClick={() => {- setDeleteAsk(false);- }}- >- {t('cancel')} / - </button>- <button type="button" onClick={() => void onDestroy()} className="thm-text-error">- {t('destroy')}- </button>- </span>- </div>- </div>- ) : null}- </>- ) : (- <form- onSubmit={(e) => {- void onSubmit(e);- }}- >- {apiError ? <div className="alert alert-err">{apiError}</div> : null}- <p className="mt2 mb1">{t('note.titleLabel')}</p>- <input- type="text"- className="title w-100 mb1 pt1 edit_form_input"- name="title"- value={editNoteState.title}- onChange={(e) => {- setEditNoteState((x) => ({ ...x, title: e.target.value }));- }}- autoFocus={editNoteState.title === ''}- />- <br />- <p className="mt2 mb1">{t('note.descriptionLabel')}</p>- <textarea- id={notetextid}- className="description w-100 mb1 pt1 edit_form_input"- name="text"- rows={25}- value={editNoteState.text}- onChange={(e) => {- setEditNoteState((x) => ({ ...x, text: e.target.value }));- }}- />- <div className="edit_form_checkboxes mb3">- <input- type="checkbox"- className="is-markdown pointer"- id="edit_ismarkdown"- name="ismarkdown"- checked={editNoteState.isMarkdown}- onChange={(e) => {- setEditNoteState((x) => ({ ...x, isMarkdown: e.target.checked }));- }}- />{' '}- <label htmlFor="edit_ismarkdown" className="mr2">- {t('note.useMarkdown')}- </label>- <br />- </div>- <div className="edit_form_checkboxes mb3">- <input- type="checkbox"- className="is-markdown pointer"- id="edit_shared"- name="shared"- checked={editNoteState.shared}- onChange={(e) => {- setEditNoteState((x) => ({ ...x, shared: e.target.checked }));- }}- />{' '}- <label htmlFor="edit_shared" className="mr2">- {t('note.publicLabel')}- </label>- <br />- </div>- <input- type="submit"- className="mr1 pv1 ph2 thm-text-primary ba thm-border-default thm-bg-secondary pointer rdim"- value={t('save')}- />{' '}- <input- type="reset"- className="pv1 ph2 thm-text-primary ba thm-border-default thm-bg-secondary pointer rdim"- value={t('cancel')}- onClick={() => {- startEdit(false);- }}- />- </form>- )}- </div>- );-}+import { TimeoutError } from 'ky'; +import React from 'react'; +import { useTranslation } from 'react-i18next'; + +import { destroyNote, editNote } from '../api'; +import { app, closeWindow, fromNow, setFocus, shdatetime } from '../globals'; +import type { Note } from '../types'; +import { apiErrorMsg, curQuerystring, fromNullableStr, lookupQueryStringValue } from '../util'; +import { Markdown } from './Markdown'; + +function toTextarea(input: string) { + const lines = input.split('\n'); + return ( + <> + {lines[0]} + {lines.slice(1).map((x, idx) => ( + <React.Fragment key={idx}> + <br /> + {x} + </React.Fragment> + ))} + </> + ); +} + +/** Displays a single note with inline editing and deletion, used in the popup window. */ +export function NNote({ initial }: { initial: Note }) { + const { t } = useTranslation(); + const a = app(); + + const [note, setNote] = React.useState<Note>(initial); + const [editNoteState, setEditNoteState] = React.useState<Note>(initial); + const [deleteAsk, setDeleteAsk] = React.useState(false); + const [edit, setEdit] = React.useState(initial.id <= 0); + const [destroyed, setDestroyed] = React.useState(false); + const [apiError, setApiError] = React.useState<string | null>(null); + const fromNowVal = fromNow(a.lang, note.created); + + const notetextid = `${note.id.toString()}_text`; + + function startEdit(next: boolean) { + setEditNoteState(note); + setEdit(next); + const qs = curQuerystring(); + const q = lookupQueryStringValue(qs, 'next'); + if (!next && q === 'closeWindow') closeWindow(window); + else if (next) setFocus(notetextid); + } + + async function onDestroy() { + try { + const res = await destroyNote(note.id); + if (!res.ok) { + setApiError(apiErrorMsg(t, res.status, res.bodyText)); + return; + } + setDestroyed(true); + } catch (err) { + setApiError( + err instanceof TimeoutError ? t('error.requestTimedOut') : t('error.networkError'), + ); + } + } + + const onSubmit = async (e: React.SyntheticEvent<HTMLFormElement, SubmitEvent>): Promise<void> => { + e.preventDefault(); + setApiError(null); + try { + const res = await editNote(editNoteState); + if (res.ok && res.status >= 200 && res.status < 300) { + const qs = curQuerystring(); + const next = lookupQueryStringValue(qs, 'next'); + const ref = document.referrer; + const org = window.location.origin; + + if (next === 'closeWindow') closeWindow(window); + else if (next === 'back') { + if (ref.startsWith(org)) window.location.href = ref; + else window.location.href = org; + } else if (editNoteState.id === 0) { + window.location.href = fromNullableStr(a.noteR); + } else { + setNote(editNoteState); + setEdit(false); + } + } else { + setApiError(apiErrorMsg(t, res.status, res.bodyText)); + } + } catch (err) { + setApiError( + err instanceof TimeoutError ? t('error.requestTimedOut') : t('error.networkError'), + ); + } + }; + + if (destroyed) return <p className="thm-text-error">{t('note.killed')}</p>; + + return ( + <div id={String(note.id)} className="note w-100 mw7 pa1 mb2"> + {apiError ? <div className="alert alert-err mb2">{apiError}</div> : null} + {!edit ? ( + <> + <div className="display"> + <div className="link f5 lh-title">{note.title === '' ? t('noTitle') : note.title}</div> + <br /> + {note.isMarkdown ? ( + <div className="description mt1"> + <Markdown text={note.text} /> + </div> + ) : ( + <div className="description mt1 thm-text-secondary">{toTextarea(note.text)}</div> + )} + <div className="link f7 mt2 dib thm-text-tertiary w4"> + <span data-created={note.created} title={shdatetime(a.lang, note.created)}> + {fromNowVal} + </span> + {' - '} + <span className="thm-text-tertiary"> + {note.shared ? t('filter.public') : t('filter.private')} + </span> + </div> + </div> + + {a.dat.isowner ? ( + <div className="edit_links db mt3"> + <button + type="button" + onClick={() => { + startEdit(true); + }} + className="edit thm-text-muted thm-hover-link-color" + > + {t('edit')} + </button> + <div className="delete_link di"> + <button + type="button" + onClick={() => { + setDeleteAsk(true); + }} + className={`delete thm-text-muted thm-hover-link-color${deleteAsk ? ' dn' : ''}`} + > + {t('delete')} + </button> + <span className={`confirm thm-text-error${!deleteAsk ? ' dn' : ''}`}> + <button + type="button" + onClick={() => { + setDeleteAsk(false); + }} + > + {t('cancel')} / + </button> + <button type="button" onClick={() => void onDestroy()} className="thm-text-error"> + {t('destroy')} + </button> + </span> + </div> + </div> + ) : null} + </> + ) : ( + <form + onSubmit={(e) => { + void onSubmit(e); + }} + > + <p className="mt2 mb1">{t('note.titleLabel')}</p> + <input + type="text" + className="title w-100 mb1 pt1 edit_form_input" + name="title" + value={editNoteState.title} + onChange={(e) => { + setEditNoteState((x) => ({ ...x, title: e.target.value })); + }} + autoFocus={editNoteState.title === ''} + /> + <br /> + <p className="mt2 mb1">{t('note.descriptionLabel')}</p> + <textarea + id={notetextid} + className="description w-100 mb1 pt1 edit_form_input" + name="text" + rows={25} + value={editNoteState.text} + onChange={(e) => { + setEditNoteState((x) => ({ ...x, text: e.target.value })); + }} + /> + <div className="edit_form_checkboxes mb3"> + <input + type="checkbox" + className="is-markdown pointer" + id="edit_ismarkdown" + name="ismarkdown" + checked={editNoteState.isMarkdown} + onChange={(e) => { + setEditNoteState((x) => ({ ...x, isMarkdown: e.target.checked })); + }} + />{' '} + <label htmlFor="edit_ismarkdown" className="mr2"> + {t('note.useMarkdown')} + </label> + <br /> + </div> + <div className="edit_form_checkboxes mb3"> + <input + type="checkbox" + className="is-markdown pointer" + id="edit_shared" + name="shared" + checked={editNoteState.shared} + onChange={(e) => { + setEditNoteState((x) => ({ ...x, shared: e.target.checked })); + }} + />{' '} + <label htmlFor="edit_shared" className="mr2"> + {t('note.publicLabel')} + </label> + <br /> + </div> + <input + type="submit" + className="mr1 pv1 ph2 thm-text-primary ba thm-border-default thm-bg-secondary pointer rdim" + value={t('save')} + />{' '} + <input + type="reset" + className="pv1 ph2 thm-text-primary ba thm-border-default thm-bg-secondary pointer rdim" + value={t('cancel')} + onClick={() => { + startEdit(false); + }} + /> + </form> + )} + </div> + ); +}
frontend/src/components/TagCloud.tsx view
@@ -1,217 +1,258 @@-import React from 'react';-import { useTranslation } from 'react-i18next';--import { getTagCloud, updateTagCloudMode } from '../api';-import { app } from '../globals';-import { useTagCloudStore } from '../stores/tagCloudStore';-import {- isExpanded,- isRelated,- setExpanded,- type TagCloud as TagCloudT,- type TagCloudModeF,- tagCloudModeFromF,-} from '../types';-import { encodeTag, fromNullableStr } from '../util';--/** Displays the tag cloud, with controls to filter by top tags, frequency, or related tags. */-export function TagCloud({ initialMode }: { initialMode: TagCloudModeF }) {- const { t } = useTranslation();- const mode = useTagCloudStore((s) => s.mode);- const tagcloud = useTagCloudStore((s) => s.tagcloud);- const setMode = useTagCloudStore((s) => s.setMode);- const setTagCloud = useTagCloudStore((s) => s.setTagCloud);-- React.useEffect(() => {- setMode(initialMode);- }, [initialMode]);-- React.useEffect(() => {- async function fetchTagCloud(m: TagCloudModeF) {- if (m.kind === 'none') return;- const tc = await getTagCloud(tagCloudModeFromF(m));- setTagCloud(tc ?? {});- }- void fetchTagCloud(mode);- }, [mode, setTagCloud]);-- if (mode.kind === 'none') return <div className="tag_cloud" />;-- const modetop: TagCloudModeF = { kind: 'top', expanded: isExpanded(mode), value: 200 };- const modelb1: TagCloudModeF = { kind: 'lowerBound', expanded: isExpanded(mode), value: 1 };- const modelb2: TagCloudModeF = { kind: 'lowerBound', expanded: isExpanded(mode), value: 2 };- const modelb5: TagCloudModeF = { kind: 'lowerBound', expanded: isExpanded(mode), value: 5 };- const modelb10: TagCloudModeF = { kind: 'lowerBound', expanded: isExpanded(mode), value: 10 };- const modelb20: TagCloudModeF = { kind: 'lowerBound', expanded: isExpanded(mode), value: 20 };-- const values = Object.values(tagcloud);- const n = values.length ? Math.min(...values) : 1;- const m = values.length ? Math.max(...values) : 1;-- async function onExpanded(expanded: boolean) {- const next = setExpanded(mode, expanded);- setMode(next);- await updateTagCloudMode(tagCloudModeFromF(next));- }-- async function onChangeMode(next: TagCloudModeF) {- if (JSON.stringify(mode) === JSON.stringify(next)) {- await onExpanded(!isExpanded(mode));- } else {- setMode(setExpanded(next, true));- }- }-- return (- <div className="tag_cloud mv3">- <div className="tag_cloud_header mb2">- {isRelated(mode) ? (- <button- type="button"- className="pa1 f7 link thm-hover-link-color mr1 b"- onClick={() => void onExpanded(!isExpanded(mode))}- >- {t('tagCloud.relatedTags')}- </button>- ) : (- <>- <button- type="button"- className={`pa1 f7 link thm-hover-link-color mr1${JSON.stringify(mode) === JSON.stringify(modetop) ? ' b' : ''}`}- title={t('tagCloud.topTagsTitle')}- onClick={() => void onChangeMode(modetop)}- >- {t('tagCloud.topTags')}- </button>- <button- type="button"- className={`pa1 f7 link thm-hover-link-color ml2 ${JSON.stringify(mode) === JSON.stringify(modelb1) ? ' b' : ''}`}- title={t('tagCloud.allTitle')}- onClick={() => void onChangeMode(modelb1)}- >- {t('filter.all')}- </button>- {'‧'}- <button- type="button"- className={`pa1 f7 link thm-hover-link-color${JSON.stringify(mode) === JSON.stringify(modelb2) ? ' b' : ''}`}- title={t('tagCloud.min2Title')}- onClick={() => void onChangeMode(modelb2)}- >- 2- </button>- {'‧'}- <button- type="button"- className={`pa1 f7 link thm-hover-link-color${JSON.stringify(mode) === JSON.stringify(modelb5) ? ' b' : ''}`}- title={t('tagCloud.min5Title')}- onClick={() => void onChangeMode(modelb5)}- >- 5- </button>- {'‧'}- <button- type="button"- className={`pa1 f7 link thm-hover-link-color${JSON.stringify(mode) === JSON.stringify(modelb10) ? ' b' : ''}`}- title={t('tagCloud.min10Title')}- onClick={() => void onChangeMode(modelb10)}- >- 10- </button>- {'‧'}- <button- type="button"- className={`pa1 f7 link thm-hover-link-color${JSON.stringify(mode) === JSON.stringify(modelb20) ? ' b' : ''}`}- title={t('tagCloud.min20Title')}- onClick={() => void onChangeMode(modelb20)}- >- 20- </button>- </>- )}- <button- type="button"- className="pa1 ml2 f7 link thm-text-faded thm-hover-link-color"- onClick={() => void onExpanded(!isExpanded(mode))}- >- {isExpanded(mode) ? t('tagCloud.hide') : t('tagCloud.show')}- </button>- </div>-- {isExpanded(mode) ? (- <div className="tag_cloud_body">- {mode.kind === 'related'- ? toArray(mode.value, n, m, tagcloud)- : toArray([], n, m, tagcloud)}- </div>- ) : null}- </div>- );-}--function toArray(curtags: string[], n: number, m: number, tagcloud: TagCloudT) {- const a = app();- const cur = curtags.map((tag) => tag.toLowerCase());- const entries: Array<[string, number]> = Object.entries(tagcloud).sort((x, y) =>- x[0].toLowerCase().localeCompare(y[0].toLowerCase()),- );-- const linkToFilterTag = (rest: string) =>- `${fromNullableStr(a.userR)}${rest === '' ? '' : `/t:${rest}`}`;-- const out: Array<React.ReactNode> = [];- for (const [k, v] of entries) {- const kLower = k.toLowerCase();- const fontsize = rescale((x) => x, v, n, m, 100.0, 150.0);- const opacity = rescale((x) => Math.log(1.0 + x), v, n, m, 0.6, 1.0);- const style: React.CSSProperties = { fontSize: `${fontsize.toString()}%`, opacity };-- const includeExclude =- cur.length === 0 ? null : !cur.includes(kLower) ? (- <a- href={linkToFilterTag(cur.concat([kLower]).map(encodeTag).join('+'))}- className="link mr2 tag-include"- >- ⊕- </a>- ) : (- <a- href={linkToFilterTag(- cur- .filter((t) => t !== kLower)- .map(encodeTag)- .join('+'),- )}- className="link mr2 tag-exclude"- >- ⊖- </a>- );-- out.push(- <a- key={`${k}-tag`}- href={linkToFilterTag(encodeTag(k))}- className="link tag mr1"- style={style}- >- {k}- </a>,- );- if (includeExclude) out.push(<React.Fragment key={`${k}-ie`}>{includeExclude}</React.Fragment>);- }- return out;-}--function rescale(- f: (x: number) => number,- v: number,- n: number,- m: number,- l: number,- h: number,-): number {- const denom = f(m - n);- const ratio = m - n < 0.01 || denom === 0 ? 1.0 : f(v - n) / denom;- return ratio * (h - l) + l;-}+import React from 'react'; +import { useTranslation } from 'react-i18next'; + +import { getTagCloud, updateTagCloudMode } from '../api'; +import { app } from '../globals'; +import { useTagCloudStore } from '../stores/tagCloudStore'; +import { + isExpanded, + setExpanded, + type TagCloud, + type TagCloudModeBrowse, + type TagCloudModeF, + tagCloudModeFromF, + type TagCloudModeRelated, +} from '../types'; +import { encodeTag, fromNullableStr } from '../util'; + +/** Displays the tag cloud, with controls to filter by top tags, frequency, or related tags. */ +export function TagCloud({ initialMode }: { initialMode: TagCloudModeF }) { + const { t } = useTranslation(); + const mode = useTagCloudStore((s) => s.mode); + const tagcloud = useTagCloudStore((s) => s.tagcloud); + const setMode = useTagCloudStore((s) => s.setMode); + const setTagCloud = useTagCloudStore((s) => s.setTagCloud); + + React.useEffect(() => { + setMode(initialMode); + }, [initialMode]); + + React.useEffect(() => { + async function fetchTagCloud(m: TagCloudModeF) { + if (m.kind === 'none') return; + const tc = await getTagCloud(tagCloudModeFromF(m)); + setTagCloud(tc ?? {}); + } + void fetchTagCloud(mode); + }, [mode, setTagCloud]); + + if (mode.kind === 'none') return <div className="tag_cloud" />; + + const makeLbMode = (n: number): TagCloudModeBrowse => ({ + kind: 'lowerBound', + expanded: isExpanded(mode), + value: n, + }); + + const relatedTags = + mode.kind === 'related' || mode.kind === 'relatedLowerBound' ? mode.value : []; + const makeRelatedMode = (): TagCloudModeRelated => ({ + kind: 'related', + expanded: isExpanded(mode), + value: relatedTags, + }); + const makeRelatedLbMode = (lb: number): TagCloudModeRelated => ({ + kind: 'relatedLowerBound', + expanded: isExpanded(mode), + value: relatedTags, + lowerBound: lb, + }); + + async function onExpanded(expanded: boolean) { + const next = setExpanded(mode, expanded); + setMode(next); + if (app().dat.isowner) { + await updateTagCloudMode(tagCloudModeFromF(next)); + } + } + + async function onChangeBrowse(next: TagCloudModeBrowse) { + const isActive = + (next.kind === 'top' && mode.kind === 'top') || + (next.kind === 'lowerBound' && mode.kind === 'lowerBound' && mode.value === next.value); + if (isActive) { + await onExpanded(!isExpanded(mode)); + } else { + setMode(setExpanded(next, true)); + } + } + + function onChangeRelated(next: TagCloudModeRelated) { + const isActive = + (next.kind === 'related' && mode.kind === 'related') || + (next.kind === 'relatedLowerBound' && + mode.kind === 'relatedLowerBound' && + mode.lowerBound === next.lowerBound); + if (isActive) { + void onExpanded(!isExpanded(mode)); + } else { + setMode(setExpanded(next, true)); + } + } + + const isTagCloudModeRelated = mode.kind === 'related' || mode.kind === 'relatedLowerBound'; + const activeLb = mode.kind === 'relatedLowerBound' ? mode.lowerBound : 0; + + return ( + <div className="tag_cloud mv3"> + <div className="tag_cloud_header mb2"> + {isTagCloudModeRelated ? ( + <> + <button + type="button" + className={`pa1 f7 link thm-hover-link-color mr1${mode.kind === 'related' ? ' b' : ''}`} + title={t('tagCloud.topTagsTitle')} + onClick={() => { + onChangeRelated(makeRelatedMode()); + }} + > + {t('tagCloud.relatedTags')} + </button> + {( + [ + [1, 'tagCloud.allTitle'], + [2, 'tagCloud.min2Title'], + [5, 'tagCloud.min5Title'], + [10, 'tagCloud.min10Title'], + [20, 'tagCloud.min20Title'], + ] as const + ).map(([lb, titleKey]) => ( + <React.Fragment key={lb}> + {lb !== 1 && '‧'} + <button + type="button" + className={`pa1 f7 link thm-hover-link-color${lb === 1 ? ' ml2' : ''}${activeLb === lb ? ' b' : ''}`} + title={t(titleKey)} + onClick={() => { + onChangeRelated(makeRelatedLbMode(lb)); + }} + > + {lb === 1 ? t('filter.all') : lb} + </button> + </React.Fragment> + ))} + </> + ) : ( + <> + <button + type="button" + className={`pa1 f7 link thm-hover-link-color mr1${mode.kind === 'top' ? ' b' : ''}`} + title={t('tagCloud.topTagsTitle')} + onClick={() => void onChangeBrowse({ kind: 'top', expanded: isExpanded(mode) })} + > + {t('tagCloud.topTags')} + </button> + {( + [ + [1, 'tagCloud.allTitle'], + [2, 'tagCloud.min2Title'], + [5, 'tagCloud.min5Title'], + [10, 'tagCloud.min10Title'], + [20, 'tagCloud.min20Title'], + ] as const + ).map(([n, titleKey]) => ( + <React.Fragment key={n}> + {n !== 1 && '‧'} + <button + type="button" + className={`pa1 f7 link thm-hover-link-color${n === 1 ? ' ml2' : ''}${mode.kind === 'lowerBound' && mode.value === n ? ' b' : ''}`} + title={t(titleKey)} + onClick={() => void onChangeBrowse(makeLbMode(n))} + > + {n === 1 ? t('filter.all') : n} + </button> + </React.Fragment> + ))} + </> + )} + <button + type="button" + className="pa1 ml2 f7 link thm-text-faded thm-hover-link-color" + onClick={() => void onExpanded(!isExpanded(mode))} + > + {isExpanded(mode) ? t('tagCloud.hide') : t('tagCloud.show')} + </button> + </div> + + {isExpanded(mode) ? ( + <div className="tag_cloud_body"> + {renderLinks(isTagCloudModeRelated ? mode.value : [], tagcloud)} + </div> + ) : null} + </div> + ); +} + +function renderLinks(curtags: string[], tagcloud: TagCloud) { + const a = app(); + const cur = curtags.map((tag) => tag.toLowerCase()); + + const linkToFilterTag = (rest: string) => + `${fromNullableStr(a.userR)}${rest === '' ? '' : `/t:${rest}`}`; + + const tagCounts = Object.values(tagcloud); + const cMin = tagCounts.length ? Math.min(...tagCounts) : 1; + const cMax = tagCounts.length ? Math.max(...tagCounts) : 1; + + return Object.entries(tagcloud) + .sort((x, y) => x[0].toLowerCase().localeCompare(y[0].toLowerCase())) + .map(([tag, c]) => { + const kLower = tag.toLowerCase(); + const fontsize = rescale((x) => Math.log(1.0 + x), c, cMin, cMax, 100.0, 133.0); + const opacity = rescale((x) => Math.log(1.0 + x), c, cMin, cMax, 0.6, 1.0); + const style: React.CSSProperties = { fontSize: `${fontsize.toString()}%`, opacity }; + + const includeExcludeLink = + cur.length === 0 ? null : !cur.includes(kLower) ? ( + <a + href={linkToFilterTag(cur.concat([kLower]).map(encodeTag).join('+'))} + className="link mr2 tag-include" + > + ⊕ + </a> + ) : ( + <a + href={linkToFilterTag( + cur + .filter((t) => t !== kLower) + .map(encodeTag) + .join('+'), + )} + className="link mr2 tag-exclude" + > + ⊖ + </a> + ); + + return ( + <React.Fragment key={tag}> + <a href={linkToFilterTag(encodeTag(tag))} className="link tag mr1" style={style}> + {tag} + </a> + {includeExcludeLink} + </React.Fragment> + ); + }); +} + +/** Rescales a value v in the range [n, m] to a value in the range [l, h] using a function f. + * @param f - The function to apply to the value. + * @param v - The value to rescale. + * @param n - The minimum of the input range. + * @param m - The maximum of the input range. + * @param l - The minimum of the output range. + * @param h - The maximum of the output range. + * @returns The rescaled value. + */ +function rescale( + f: (x: number) => number, + v: number, + n: number, + m: number, + l: number, + h: number, +): number { + const denom = f(m - n); + const ratio = m - n < 0.01 || denom === 0 ? 1.0 : f(v - n) / denom; + return ratio * (h - l) + l; +}
frontend/src/globals.ts view
@@ -1,105 +1,125 @@-import type { Bookmark, Filter } from './types';--/** Server-rendered page data. */-export type AppData = {- /** The list of bookmarks for the current page. */- bmarks: Bookmark[];- /** A single bookmark, used when viewing or editing one entry. */- bmark: Bookmark;- /** Whether the current user owns the displayed profile. */- isowner: boolean;- /** Whether tag suggestions are enabled. */- suggestTags?: boolean;- /** Whether the archive backend is enabled. */- archiveBackendEnabled?: boolean;- /** The current filter applied to the bookmarks. */- filter?: Filter;-};--/** Server-rendered global data. */-export type App = {- /** The HTTP header name used to send the CSRF token. */- csrfHeaderName: string;- /** The cookie name that holds the CSRF token. */- csrfCookieName: string;- /** The form parameter name used to submit the CSRF token. */- csrfParamName: string;- /** The current CSRF token value. */- csrfToken: string;- /** URL for the home route. */- homeR: string;- /** URL for the logout route. */- authRlogoutR: string;- /** URL for the current user's profile, or null if not logged in. */- userR: string | null;- /** URL for the current note, or null if not viewing a note. */- noteR: string | null;- /** URL for the i18n backend */- i18nR: string;- /** The current language code (e.g. 'en', 'fr'). */- lang: string;- /** Server-rendered page data. */- dat: AppData;-};--declare global {- // Provided by the server in a <script> tag.-- var app: App;-}--export function app(): App {- return globalThis.app;-}--export function fromNow(locale = navigator.language, date: Date | number | string): string {- const target = date instanceof Date ? date.getTime() : new Date(date).getTime();-- const diff = target - Date.now();- const abs = Math.abs(diff);-- const units: readonly [Intl.RelativeTimeFormatUnit, number][] = [- ['year', 365 * 24 * 60 * 60 * 1000],- ['month', 30 * 24 * 60 * 60 * 1000],- ['day', 24 * 60 * 60 * 1000],- ['hour', 60 * 60 * 1000],- ['minute', 60 * 1000],- ['second', 1000],- ];-- const rtf = new Intl.RelativeTimeFormat(locale, { numeric: 'auto' });-- for (const [unit, ms] of units) {- if (abs >= ms || unit === 'second') {- return rtf.format(Math.round(diff / ms), unit);- }- }-- // Unreachable, but satisfies TypeScript.- return '';-}--export function shdatetime(lang: string, dateString: string): string {- return new Date(dateString).toLocaleString(lang, {- dateStyle: 'full',- timeStyle: 'long',- });-}--export function toLocaleDateString(lang: string, dateString: string): string {- return new Date(dateString).toLocaleDateString(lang, {- year: 'numeric',- month: 'short',- day: 'numeric',- });-}--export function closeWindow(win: Window): void {- win.close();-}--export type RawHTML = string;--export function setFocus(elemId: string): void {- document.getElementById(elemId)?.focus();-}+import type { Bookmark, Filter, SharedP } from './types'; + +/** Server-rendered page data. */ +export type AppData = { + /** The list of bookmarks for the current page. */ + bmarks: Bookmark[]; + /** A single bookmark, used when viewing or editing one entry. */ + bmark: Bookmark; + /** Whether the current user owns the displayed profile. */ + isowner: boolean; + /** Whether tag suggestions are enabled. */ + suggestTags?: boolean; + /** Whether the archive backend is enabled. */ + archiveBackendEnabled?: boolean; + /** The current filter applied to the bookmarks. */ + filter?: Filter; + /** The current shared/private filter. */ + sharedp?: SharedP; + /** The path tags currently filtering bookmarks. */ + tags?: string[]; + /** The current search query string, or null if none. */ + query?: string | null; +}; + +/** Server-rendered global data. */ +export type App = { + /** The HTTP header name used to send the CSRF token. */ + csrfHeaderName: string; + /** The cookie name that holds the CSRF token. */ + csrfCookieName: string; + /** The form parameter name used to submit the CSRF token. */ + csrfParamName: string; + /** The current CSRF token value. */ + csrfToken: string; + /** URL for the home route. */ + homeR: string; + /** URL for the logout route. */ + authRlogoutR: string; + /** URL for the current user's profile, or null if not logged in. */ + userR: string | null; + /** Endpoint URL for fetching tag cloud data. */ + tagCloudR?: string; + /** URL for the current note, or null if not viewing a note. */ + noteR: string | null; + /** URL for the i18n backend */ + i18nR: string; + /** The current language code (e.g. 'en', 'fr'). */ + lang: string; + /** Server-rendered page data. */ + dat: AppData; +}; + +declare global { + // Provided by the server in a <script> tag. + + var app: App; +} + +export function app(): App { + return globalThis.app; +} + +export function tagCloudEndpoint(): string { + const raw = globalThis.app.tagCloudR; + if (!raw) return 'api/tagcloud'; + try { + const u = new URL(raw, window.location.origin); + const rel = `${u.pathname}${u.search}${u.hash}`; + return rel.startsWith('/') ? rel.slice(1) : rel; + } catch { + return raw.replace(/^\/+/, ''); + } +} + +export function fromNow(locale = navigator.language, date: Date | number | string): string { + const target = date instanceof Date ? date.getTime() : new Date(date).getTime(); + + const diff = target - Date.now(); + const abs = Math.abs(diff); + + const units: readonly [Intl.RelativeTimeFormatUnit, number][] = [ + ['year', 365 * 24 * 60 * 60 * 1000], + ['month', 30 * 24 * 60 * 60 * 1000], + ['day', 24 * 60 * 60 * 1000], + ['hour', 60 * 60 * 1000], + ['minute', 60 * 1000], + ['second', 1000], + ]; + + const rtf = new Intl.RelativeTimeFormat(locale, { numeric: 'auto' }); + + for (const [unit, ms] of units) { + if (abs >= ms || unit === 'second') { + return rtf.format(Math.round(diff / ms), unit); + } + } + + // Unreachable, but satisfies TypeScript. + return ''; +} + +export function shdatetime(lang: string, dateString: string): string { + return new Date(dateString).toLocaleString(lang, { + dateStyle: 'full', + timeStyle: 'long', + }); +} + +export function toLocaleDateString(lang: string, dateString: string): string { + return new Date(dateString).toLocaleDateString(lang, { + year: 'numeric', + month: 'short', + day: 'numeric', + }); +} + +export function closeWindow(win: Window): void { + win.close(); +} + +export type RawHTML = string; + +export function setFocus(elemId: string): void { + document.getElementById(elemId)?.focus(); +}
frontend/src/index.tsx view
@@ -1,100 +1,105 @@-import './i18n';--import { type ReactNode, useLayoutEffect } from 'react';-import { createRoot } from 'react-dom/client';--import { logout } from './api';-import { AccountSettingsView } from './components/AccountSettings';-import { AddForm } from './components/AddForm';-import { BList } from './components/BList';-import { NList } from './components/NList';-import { NNote } from './components/NNote';-import { TagCloud } from './components/TagCloud';-import type { AccountSettings, Bookmark, ColorSchemePreference, Note, TagCloudMode } from './types';-import { tagCloudModeToF } from './types';--function selectEl(selector: string): Element | null {- return document.querySelector(selector);-}--function viewRendered(): void {- const el = document.querySelector('#content');- if (el) el.setAttribute('view-rendered', '');-}--function RenderReady({ children }: { children: ReactNode }) {- useLayoutEffect(() => {- viewRendered();- }, []);-- return children;-}--function renderView(renderElSelector: string, node: ReactNode): void {- const el = selectEl(renderElSelector);- if (!el) return;- createRoot(el).render(<RenderReady>{node}</RenderReady>);-}--export const logoutE = (e: Event) => () => {- e.preventDefault();- void logout();-};--export const renderBookmarks = (renderElSelector: string) => (bmarks: Bookmark[]) => () => {- renderView(renderElSelector, <BList initial={bmarks} />);-};--export const renderTagCloud = (renderElSelector: string) => (tagCloudMode: TagCloudMode) => () => {- const el = selectEl(renderElSelector);- if (!el) return;- createRoot(el).render(<TagCloud initialMode={tagCloudModeToF(tagCloudMode)} />);-};--export const renderAddForm = (renderElSelector: string) => (bmark: Bookmark) => () => {- renderView(renderElSelector, <AddForm initial={bmark} />);-};--export const renderNotes = (renderElSelector: string) => (notes: Note[]) => () => {- renderView(renderElSelector, <NList initial={notes} />);-};--export const renderNote = (renderElSelector: string) => (note: Note) => () => {- renderView(renderElSelector, <NNote initial={note} />);-};--export const renderAccountSettings =- (renderElSelector: string) => (accountSettings: AccountSettings) => () => {- renderView(renderElSelector, <AccountSettingsView initial={accountSettings} />);- };--export function initColorSchemeToggle(): void {- function isColorSchemePreference(value: string | null): value is ColorSchemePreference {- return value === 'light' || value === 'dark';- }- function getEffectiveColorScheme(): ColorSchemePreference {- const explicit = document.documentElement.dataset.colorScheme;- if (explicit === 'light' || explicit === 'dark') return explicit;- return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';- }-- function applyColorSchemePreference(preference: ColorSchemePreference): void {- document.documentElement.dataset.colorScheme = preference;- }-- const colorSchemeStorageKey = 'espial-color-scheme';- const stored = window.localStorage.getItem(colorSchemeStorageKey);- if (isColorSchemePreference(stored)) {- applyColorSchemePreference(stored);- }-- const toggleEl = document.querySelector<HTMLAnchorElement>('#color-scheme-toggle');- if (!toggleEl) return;-- toggleEl.addEventListener('click', (e) => {- e.preventDefault();- const next: ColorSchemePreference = getEffectiveColorScheme() === 'dark' ? 'light' : 'dark';- applyColorSchemePreference(next);- window.localStorage.setItem(colorSchemeStorageKey, next);- });-}+import './i18n'; + +import { type ReactNode, useLayoutEffect } from 'react'; +import { createRoot } from 'react-dom/client'; + +import { logout } from './api'; +import { AccountSettingsView } from './components/AccountSettings'; +import { AddForm } from './components/AddForm'; +import { BList } from './components/BList'; +import { BulkEdit } from './components/BulkEdit'; +import { NList } from './components/NList'; +import { NNote } from './components/NNote'; +import { TagCloud } from './components/TagCloud'; +import type { AccountSettings, Bookmark, ColorSchemePreference, Note, TagCloudMode } from './types'; +import { tagCloudModeToF } from './types'; + +function selectEl(selector: string): Element | null { + return document.querySelector(selector); +} + +function viewRendered(): void { + const el = document.querySelector('#content'); + if (el) el.setAttribute('view-rendered', ''); +} + +function RenderReady({ children }: { children: ReactNode }) { + useLayoutEffect(() => { + viewRendered(); + }, []); + + return children; +} + +function renderView(renderElSelector: string, node: ReactNode): void { + const el = selectEl(renderElSelector); + if (!el) return; + createRoot(el).render(<RenderReady>{node}</RenderReady>); +} + +export const logoutE = (e: Event) => () => { + e.preventDefault(); + void logout(); +}; + +export const renderBookmarks = (renderElSelector: string) => (bmarks: Bookmark[]) => () => { + renderView(renderElSelector, <BList initial={bmarks} />); +}; + +export const renderBulkEdit = (renderElSelector: string) => (bcount: number) => () => { + renderView(renderElSelector, <BulkEdit bcount={bcount} />); +}; + +export const renderTagCloud = (renderElSelector: string) => (tagCloudMode: TagCloudMode) => () => { + const el = selectEl(renderElSelector); + if (!el) return; + createRoot(el).render(<TagCloud initialMode={tagCloudModeToF(tagCloudMode)} />); +}; + +export const renderAddForm = (renderElSelector: string) => (bmark: Bookmark) => () => { + renderView(renderElSelector, <AddForm initial={bmark} />); +}; + +export const renderNotes = (renderElSelector: string) => (notes: Note[]) => () => { + renderView(renderElSelector, <NList initial={notes} />); +}; + +export const renderNote = (renderElSelector: string) => (note: Note) => () => { + renderView(renderElSelector, <NNote initial={note} />); +}; + +export const renderAccountSettings = + (renderElSelector: string) => (accountSettings: AccountSettings) => () => { + renderView(renderElSelector, <AccountSettingsView initial={accountSettings} />); + }; + +export function initColorSchemeToggle(): void { + function isColorSchemePreference(value: string | null): value is ColorSchemePreference { + return value === 'light' || value === 'dark'; + } + function getEffectiveColorScheme(): ColorSchemePreference { + const explicit = document.documentElement.dataset.colorScheme; + if (explicit === 'light' || explicit === 'dark') return explicit; + return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'; + } + + function applyColorSchemePreference(preference: ColorSchemePreference): void { + document.documentElement.dataset.colorScheme = preference; + } + + const colorSchemeStorageKey = 'espial-color-scheme'; + const stored = window.localStorage.getItem(colorSchemeStorageKey); + if (isColorSchemePreference(stored)) { + applyColorSchemePreference(stored); + } + + const toggleEl = document.querySelector<HTMLAnchorElement>('#color-scheme-toggle'); + if (!toggleEl) return; + + toggleEl.addEventListener('click', (e) => { + e.preventDefault(); + const next: ColorSchemePreference = getEffectiveColorScheme() === 'dark' ? 'light' : 'dark'; + applyColorSchemePreference(next); + window.localStorage.setItem(colorSchemeStorageKey, next); + }); +}
frontend/src/types.ts view
@@ -1,179 +1,207 @@-/** User's preferred color scheme. */-export type ColorSchemePreference = 'light' | 'dark';--/** Unique identifier for a bookmark. */-export type BookmarkId = number;--export type Bookmark = {- /** The bookmarked URL. */- url: string;- /** Display title of the bookmark. */- title: string;- /** Optional user-provided description. */- description: string;- /** Space-separated list of tags. */- tags: string;- /** Whether the bookmark is private (not visible to others). */- private: boolean;- /** Whether the bookmark is marked for later reading. */- toread: boolean;- /** Whether the bookmark should be archived (request). */- archiveRequested?: boolean | null;- /** Database ID of the bookmark. */- bid: BookmarkId;- /** URL-friendly slug for the bookmark. */- slug: string;- /** Whether the bookmark is starred. */- selected: boolean;- /** ISO 8601 creation timestamp. */- time: string;- /** URL of the archived copy, or null if not archived. */- archiveUrl: string | null;-};--/** Unique identifier for a note. */-export type NoteId = number;-/** URL-friendly slug for a note. */-export type NoteSlug = string;--export type Note = {- /** Database ID of the note. */- id: NoteId;- /** URL-friendly slug for the note. */- slug: NoteSlug;- /** Display title of the note. */- title: string;- /** Raw text content of the note. */- text: string;- /** Character length of the note text. */- length: number;- /** Whether the note body should be rendered as Markdown. */- isMarkdown: boolean;- /** Whether the note is publicly visible. */- shared: boolean;- /** ISO 8601 creation timestamp. */- created: string;- /** ISO 8601 last-updated timestamp. */- updated: string;-};--export type Filter =- | { tag: 'FilterAll' }- | { tag: 'FilterUnread' }- | { tag: 'FilterUntagged' }- | { tag: 'FilterStarred' }- | { tag: 'FilterSingle'; contents: string };--export type AccountSettings = {- /** Whether bookmarks are archived by default. */- archiveDefault: boolean;- /** Whether new bookmarks are private by default. */- privateDefault: boolean;- /** Whether tag suggestions are enabled. */- suggestTags: boolean;- /** Whether the account is locked to private-only mode. */- privacyLock: boolean;- /** Whether the archive backend is enabled. */- archiveBackendEnabled: boolean;- /** The user's preferred language (null means server default). */- language: string | null;-};--/** Raw tag cloud mode as stored/sent by the server. */-export type TagCloudMode = {- /** The mode name (e.g. 'top', 'lowerBound', 'related', 'none'). */- mode: string;- /** Mode-specific parameter value. */- value: unknown;- /** Whether the tag cloud panel is expanded. */- expanded: boolean;-};--/** Map of tag name to usage count. */-export type TagCloud = Record<string, number>;--/** A single tag suggestion with its usage count. */-export type TSuggestion = {- term: string;- count: number;-};--/** Request payload for fetching tag suggestions based on a query and current tags. */-export type TagSuggestionRequest = {- query: string;- currentTags: string[];-};--/** Response payload containing a list of tag suggestions. */-export type TagSuggestionResponse = {- suggestions: TSuggestion[];-};--/** Discriminated union representing the tag cloud filter mode. */-export type TagCloudModeF =- | { kind: 'top'; expanded: boolean; value: number }- | { kind: 'lowerBound'; expanded: boolean; value: number }- | { kind: 'related'; expanded: boolean; value: string[] }- | { kind: 'none' };--export function tagCloudModeToF(mode: TagCloudMode): TagCloudModeF {- switch (mode.mode) {- case 'top': {- const n = typeof mode.value === 'number' ? mode.value : Number(mode.value);- return Number.isFinite(n)- ? { kind: 'top', expanded: mode.expanded, value: n }- : { kind: 'none' };- }- case 'lowerBound': {- const n = typeof mode.value === 'number' ? mode.value : Number(mode.value);- return Number.isFinite(n)- ? { kind: 'lowerBound', expanded: mode.expanded, value: n }- : { kind: 'none' };- }- case 'related': {- const s = typeof mode.value === 'string' ? mode.value : '';- const tags = s ? s.split(' ') : [];- return { kind: 'related', expanded: mode.expanded, value: tags };- }- default:- return { kind: 'none' };- }-}--export function tagCloudModeFromF(mode: TagCloudModeF): TagCloudMode {- switch (mode.kind) {- case 'top':- return { mode: 'top', value: mode.value, expanded: mode.expanded };- case 'lowerBound':- return { mode: 'lowerBound', value: mode.value, expanded: mode.expanded };- case 'related':- return { mode: 'related', value: mode.value.join(' '), expanded: mode.expanded };- case 'none':- return { mode: 'none', value: '', expanded: false };- }-}--export function isExpanded(mode: TagCloudModeF): boolean {- return mode.kind === 'none' ? false : mode.expanded;-}--export function isRelated(mode: TagCloudModeF): boolean {- return mode.kind === 'related';-}--export function setExpanded(mode: TagCloudModeF, expanded: boolean): TagCloudModeF {- return mode.kind === 'none' ? mode : { ...mode, expanded };-}--export function showMode(mode: TagCloudModeF): string {- switch (mode.kind) {- case 'top':- return 'top';- case 'lowerBound':- return 'lowerBound';- case 'related':- return 'related';- case 'none':- return '';- }-}+/** User's preferred color scheme. */ +export type ColorSchemePreference = 'light' | 'dark'; + +/** Unique identifier for a bookmark. */ +export type BookmarkId = number; + +export type Bookmark = { + /** The bookmarked URL. */ + url: string; + /** Display title of the bookmark. */ + title: string; + /** Optional user-provided description. */ + description: string; + /** Space-separated list of tags. */ + tags: string; + /** Whether the bookmark is private (not visible to others). */ + private: boolean; + /** Whether the bookmark is marked for later reading. */ + toread: boolean; + /** Whether the bookmark should be archived (request). */ + archiveRequested?: boolean | null; + /** Database ID of the bookmark. */ + bid: BookmarkId; + /** URL-friendly slug for the bookmark. */ + slug: string; + /** Whether the bookmark is starred. */ + selected: boolean; + /** ISO 8601 creation timestamp. */ + time: string; + /** URL of the archived copy, or null if not archived. */ + archiveUrl: string | null; +}; + +/** Unique identifier for a note. */ +export type NoteId = number; +/** URL-friendly slug for a note. */ +export type NoteSlug = string; + +export type Note = { + /** Database ID of the note. */ + id: NoteId; + /** URL-friendly slug for the note. */ + slug: NoteSlug; + /** Display title of the note. */ + title: string; + /** Raw text content of the note. */ + text: string; + /** Character length of the note text. */ + length: number; + /** Whether the note body should be rendered as Markdown. */ + isMarkdown: boolean; + /** Whether the note is publicly visible. */ + shared: boolean; + /** ISO 8601 creation timestamp. */ + created: string; + /** ISO 8601 last-updated timestamp. */ + updated: string; +}; + +export type Filter = + | { tag: 'FilterAll' } + | { tag: 'FilterUnread' } + | { tag: 'FilterUntagged' } + | { tag: 'FilterStarred' } + | { tag: 'FilterSingle'; contents: string }; + +export type AccountSettings = { + /** Whether bookmarks are archived by default. */ + archiveDefault: boolean; + /** Whether new bookmarks are private by default. */ + privateDefault: boolean; + /** Whether tag suggestions are enabled. */ + suggestTags: boolean; + /** Whether the account is locked to private-only mode. */ + privacyLock: boolean; + /** Whether the tag cloud is visible to non-authenticated visitors. */ + publicTagCloud: boolean; + /** Whether the archive backend is enabled. */ + archiveBackendEnabled: boolean; + /** The user's preferred language (null means server default). */ + language: string | null; +}; + +/** A single tag suggestion with its usage count. */ +export type TSuggestion = { + term: string; + count: number; +}; + +/** Request payload for fetching tag suggestions based on a query and current tags. */ +export type TagSuggestionRequest = { + query: string; + currentTags: string[]; +}; + +/** Response payload containing a list of tag suggestions. */ +export type TagSuggestionResponse = { + suggestions: TSuggestion[]; +}; + +export type BulkAction = 'read' | 'unread' | 'star' | 'unstar' | 'delete' | 'private' | 'public'; +export type SharedP = 'all' | 'public' | 'private'; + +type BulkEditRequestBase = { + action: BulkAction | null; + addTags: string; + removeTags: string; + selectionCount: number; +}; + +export type BulkEditRequest = + | (BulkEditRequestBase & { selection: 'page'; bids: number[] }) + | (BulkEditRequestBase & { + selection: 'all'; + filter: Filter; + sharedp: SharedP; + tags: string[]; + query: string | null; + }); + +export type BulkEditResponse = { + ok: boolean; + status: number; + bodyText?: string; + data?: { editedCount: number }; +}; + +/** Raw tag cloud mode as stored/sent by the server. */ +export type TagCloudMode = { + /** The mode name (e.g. 'top', 'lowerBound', 'related', 'none'). */ + mode: string; + /** Mode-specific parameter value. */ + value: unknown; + /** Whether the tag cloud panel is expanded. */ + expanded: boolean; + /** Minimum bookmark count for related tags (only used in 'related' mode). */ + lowerBound?: number; +}; + +/** Map of tag name to usage count. */ +export type TagCloud = Record<string, number>; + +/** Discriminated union representing the tag cloud filter mode. */ +export type TagCloudModeF = + | { kind: 'top'; expanded: boolean } + | { kind: 'lowerBound'; expanded: boolean; value: number } + | { kind: 'related'; expanded: boolean; value: string[] } + | { kind: 'relatedLowerBound'; expanded: boolean; value: string[]; lowerBound: number } + | { kind: 'none' }; + +export type TagCloudModeBrowse = Extract<TagCloudModeF, { kind: 'top' | 'lowerBound' }>; +export type TagCloudModeRelated = Extract<TagCloudModeF, { kind: 'related' | 'relatedLowerBound' }>; + +export function tagCloudModeToF(mode: TagCloudMode): TagCloudModeF { + switch (mode.mode) { + case 'top': + return { kind: 'top', expanded: mode.expanded }; + case 'lowerBound': { + const n = typeof mode.value === 'number' ? mode.value : Number(mode.value); + return Number.isFinite(n) + ? { kind: 'lowerBound', expanded: mode.expanded, value: n } + : { kind: 'none' }; + } + case 'related': { + const s = typeof mode.value === 'string' ? mode.value : ''; + const tags = s ? s.split(' ') : []; + return { kind: 'related', expanded: mode.expanded, value: tags }; + } + case 'relatedLowerBound': { + const s = typeof mode.value === 'string' ? mode.value : ''; + const tags = s ? s.split(' ') : []; + const lowerBound = + typeof mode.lowerBound === 'number' && mode.lowerBound > 0 ? mode.lowerBound : 1; + return { kind: 'relatedLowerBound', expanded: mode.expanded, value: tags, lowerBound }; + } + default: + return { kind: 'none' }; + } +} + +export function tagCloudModeFromF(mode: TagCloudModeF): TagCloudMode { + switch (mode.kind) { + case 'top': + return { mode: 'top', value: null, expanded: mode.expanded }; + case 'lowerBound': + return { mode: 'lowerBound', value: mode.value, expanded: mode.expanded }; + case 'related': + return { mode: 'related', value: mode.value.join(' '), expanded: mode.expanded }; + case 'relatedLowerBound': + return { + mode: 'relatedLowerBound', + value: mode.value.join(' '), + expanded: mode.expanded, + lowerBound: mode.lowerBound, + }; + case 'none': + return { mode: 'none', value: '', expanded: false }; + } +} + +export function isExpanded(mode: TagCloudModeF): boolean { + return mode.kind === 'none' ? false : mode.expanded; +} + +export function setExpanded(mode: TagCloudModeF, expanded: boolean): TagCloudModeF { + return mode.kind === 'none' ? mode : { ...mode, expanded }; +}
frontend/src/util.ts view
@@ -1,62 +1,72 @@-export type QueryStringArray = Array<[string, string | null]>;--function unsafeDecode(str: string): string {- return decodeURIComponent(str);-}--export function parseQueryString(searchOrHash: string): QueryStringArray {- const first = searchOrHash.slice(0, 1);- const qs = first === '#' || first === '?' ? searchOrHash.slice(1) : searchOrHash;- const parts = qs.split('&').filter((x) => x !== '');-- const decode = (s: string) => unsafeDecode(s.replace(/\+/g, ' '));-- const out: QueryStringArray = [];- for (const kv of parts) {- const [k, ...rest] = kv.split('=');- if (!k) continue;- if (rest.length === 0) out.push([decode(k), null]);- else if (rest.length === 1) out.push([decode(k), decode(rest[0] ?? '')]);- }- return out;-}--export function curQuerystring(): QueryStringArray {- return parseQueryString(window.location.search);-}--export function lookupQueryStringValue(qs: QueryStringArray, k: string): string | null {- for (const [key, val] of qs) {- if (key === k) return val;- }- return null;-}--export function encodeTag(tag: string): string {- return encodeURIComponent(tag.replace(/\+/g, '%2B'));-}--export function fromNullableStr(s: string | null | undefined): string {- return s ?? '';-}--export function normalizeTags(tags: string | null): string {- return tags?.replace(/,/g, ' ').replace(/\s+/g, ' ').trim() ?? '';-}--/**- * Generates a short, non-cryptographic hash from a string.- * @param str - The input string to hash.- * @returns A short alphanumeric string hash.- */-export function getShortHash(str: string): string {- let hash = 5381;- let i = str.length;-- while (i) {- hash = (hash * 33) ^ str.charCodeAt(--i);- }-- // Convert to an unsigned 32-bit integer, then to a base36 string- return (hash >>> 0).toString(36);-}+import type { TFunction } from 'i18next'; + +export type QueryStringArray = Array<[string, string | null]>; + +function unsafeDecode(str: string): string { + return decodeURIComponent(str); +} + +export function parseQueryString(searchOrHash: string): QueryStringArray { + const first = searchOrHash.slice(0, 1); + const qs = first === '#' || first === '?' ? searchOrHash.slice(1) : searchOrHash; + const parts = qs.split('&').filter((x) => x !== ''); + + const decode = (s: string) => unsafeDecode(s.replace(/\+/g, ' ')); + + const out: QueryStringArray = []; + for (const kv of parts) { + const [k, ...rest] = kv.split('='); + if (!k) continue; + if (rest.length === 0) out.push([decode(k), null]); + else if (rest.length === 1) out.push([decode(k), decode(rest[0] ?? '')]); + } + return out; +} + +export function curQuerystring(): QueryStringArray { + return parseQueryString(window.location.search); +} + +export function lookupQueryStringValue(qs: QueryStringArray, k: string): string | null { + for (const [key, val] of qs) { + if (key === k) return val; + } + return null; +} + +export function encodeTag(tag: string): string { + return encodeURIComponent(tag.replace(/\+/g, '%2B')); +} + +export function fromNullableStr(s: string | null | undefined): string { + return s ?? ''; +} + +export function normalizeTags(tags: string | null): string { + return tags?.replace(/,/g, ' ').replace(/\s+/g, ' ').trim() ?? ''; +} + +export function apiErrorMsg(t: TFunction, status: number, bodyText: string): string { + const body = bodyText.trim(); + if (!body.includes('\n') && !body.includes('doctype html') && body.length > 0) { + return t('error.errorWithMsg', { status, msg: body }); + } + return t('error.error', { status }); +} + +/** + * Generates a short, non-cryptographic hash from a string. + * @param str - The input string to hash. + * @returns A short alphanumeric string hash. + */ +export function getShortHash(str: string): string { + let hash = 5381; + let i = str.length; + + while (i) { + hash = (hash * 33) ^ str.charCodeAt(--i); + } + + // Convert to an unsigned 32-bit integer, then to a base36 string + return (hash >>> 0).toString(36); +}
hie.yaml view
@@ -1,31 +1,36 @@-cradle:- multi:- - path: "./app/devel.hs"- config:- cradle:- stack:- component: "espial:exe:espial"-- - path: "./app/migration"- config:- cradle:- stack:- component: "espial:exe:migration"-- - path: "./app"- config:- cradle:- stack:- component: "espial:exe:espial"-- - path: "./src"- config:- cradle:- stack:- component: "espial:lib"-- - path: "./test"- config:- cradle:- stack:- component: "espial:test:test"+cradle: + multi: + - path: "./app/devel.hs" + config: + cradle: + stack: + component: "espial:exe:espial" + + - path: "./app/migration" + config: + cradle: + stack: + component: "espial:exe:migration" + + - path: "./app" + config: + cradle: + stack: + component: "espial:exe:espial" + + - path: "./src" + config: + cradle: + stack: + component: "espial:lib" + + - path: "./test/Spec.hs" + config: + cradle: + none: + + - path: "./test" + config: + cradle: + stack: + component: "espial:test:test"
package.yaml view
@@ -1,225 +1,227 @@-name: espial-synopsis: Espial is an open-source, web-based bookmarking server.-version: "0.0.36"-description: ! "- Espial is an open-source, web-based bookmarking server.-- - Yesod + TypeScript + sqlite3-- - multi-user (w/ privacy scopes)-- - multi-language (i18n)-- - tags, stars, editing, deleting"-category: Web-author: Jon Schoning-maintainer: jonschoning@gmail.com-copyright: Copyright (c) 2018 Jon Schoning-license: AGPL-3.0-or-later-license-file: LICENSE-homepage: https://github.com/jonschoning/espial-git: https://github.com/jonschoning/espial.git-bug-reports: https://github.com/jonschoning/espial/issues-extra-doc-files:- - changelog.md- - README.md- - SECURITY.md-extra-source-files:- - Dockerfile- - Dockerfile.buildkit- - Makefile- - appmigrations/**- - config/favicon.ico- - config/keter.yml- - config/robots.txt- - config/routes- - config/settings.yml- - config/test-settings.yml- - docker-compose.archivebox07.yml- - docker-compose.yml- - frontend/.gitignore- - frontend/.prettierignore- - frontend/.prettierrc- - frontend/Makefile- - frontend/README.md- - frontend/eslint.config.mjs- - frontend/package-lock.json- - frontend/package.json- - frontend/scripts/**/*- - frontend/src/**/*- - frontend/tsconfig.json- - hie.yaml- - package.yaml- - stack.yaml- - stack.yaml.lock- - static/css/**- - static/fonts/**- - static/images/**- - static/js/**- - static/locales/**/*- - templates/**--language: GHC2024--default-extensions:- - BlockArguments- - CPP- - NoImplicitPrelude- - OverloadedStrings- - PartialTypeSignatures- - QuasiQuotes- - RecordWildCards- - TemplateHaskell- - TypeFamilies- - ViewPatterns--dependencies:- - base >=4.18.1.0 && <5- - yesod >=1.6 && <1.8- - yesod-core >=1.6 && <1.8- - yesod-auth >=1.6 && <1.8- - yesod-static >=1.6 && <1.8- - yesod-form >=1.6 && <1.8- - yesod-newsfeed >= 1.6 && < 1.8- - classy-prelude >=1.4 && <1.6- - classy-prelude-conduit >=1.4 && <1.6- - classy-prelude-yesod >=1.4 && <1.6- - bytestring >=0.11.5 && <0.13- - text >=2 && <3- - persistent >=2.14 && <2.18- - blaze-html >= 0.9 && < 1- - persistent-template >=2.12 && <2.13- - template-haskell- - shakespeare >=2.0 && <2.2- - blaze-markup- - hjsmin >=0.1 && <0.3- - wai-extra >=3.0 && <3.2- - yaml >=0.8 && <0.12- - http-client-tls >=0.3 && <0.4- - http-conduit >=2.3 && <2.4- - directory >=1.1 && <1.4- - warp >=3.0 && <3.5- - data-default- - conduit >=1.0 && <2- - monad-logger >=0.3 && <0.4- - fast-logger >=2.2 && <4- - wai-logger- - file-embed- - safe- - unordered-containers- - containers- - vector- - time- - case-insensitive- - wai- - foreign-store-- - aeson >=1.4- - attoparsec- - base64 >=1 && < 2- - bcrypt >= 0.0.8- - cryptohash-sha256- - crypton-connection- - entropy- - esqueleto >= 3.5.11.1 && < 3.7- - filepath- - fgl- - gitrev- - hscolour- - html-entities- - http-api-data >= 0.3.4- - http-client- - http-types- - iso8601-time >=0.1.3- - microlens- - mtl- - parser-combinators- - persistent-sqlite == 2.13.3.0- - pretty-show- - transformers >= 0.2.2--when:- - condition: "!os(windows)"- dependencies:- - unix--tested-with:- - GHC == 9.10.3--# The library contains all of our application code. The executable-# defined below is just a thin wrapper.-library:- source-dirs: src- generated-exposed-modules:- - Paths_espial- when:- - condition: flag(usebuildinfo)- exposed-modules:- - BuildInfo- source-dirs: buildinfo- cpp-options:- - -DUSE_BUILDINFO- - condition: (flag(dev)) || (flag(library-only))- then:- ghc-options:- - -Wall- - -fwarn-tabs- cpp-options: -DDEVELOPMENT- else:- ghc-options:- - -Wall- - -fwarn-tabs- - -O2--# Runnable executable for our application-executables:- espial:- main: main.hs- source-dirs: app- ghc-options:- - -threaded- - -rtsopts- - -with-rtsopts=-N- dependencies:- - espial- when:- - condition: flag(library-only)- buildable: false- migration:- when:- - condition: flag(library-only)- buildable: false- main: Main.hs- source-dirs:- - app/migration- ghc-options: -threaded -rtsopts -with-rtsopts=-N- dependencies:- - espial- - optparse-generic >= 1.2.3- - optparse-applicative--# Test suite-tests:- test:- main: Spec.hs- source-dirs: test- ghc-options: -Wall- dependencies:- - espial- - hspec >=2- - yesod-test--# Define flags used by "yesod devel" to make compilation faster-flags:- library-only:- description: Build for use with "yesod devel"- manual: false- default: false- dev:- description: Turn on development settings, like auto-reload templates.- manual: false- default: false- usebuildinfo:- description: read buildinfo from generated file buildinfo/BuildInfo.hs- default: false- manual: true+name: espial +synopsis: Espial is an open-source, web-based bookmarking server. +version: "0.0.37" +description: ! " + Espial is an open-source, web-based bookmarking server. + + - Yesod + TypeScript + sqlite3 + + - multi-user (w/ privacy scopes) + + - multi-language (i18n) + + - tags, stars, editing, deleting" +category: Web +author: Jon Schoning +maintainer: jonschoning@gmail.com +copyright: Copyright (c) 2018 Jon Schoning +license: AGPL-3.0-or-later +license-file: LICENSE +homepage: https://github.com/jonschoning/espial +git: https://github.com/jonschoning/espial.git +bug-reports: https://github.com/jonschoning/espial/issues +extra-doc-files: + - changelog.md + - README.md + - SECURITY.md +extra-source-files: + - Dockerfile + - Dockerfile.buildkit + - Makefile + - appmigrations/** + - config/favicon.ico + - config/keter.yml + - config/robots.txt + - config/routes + - config/settings.yml + - config/test-settings.yml + - docker-compose.archivebox07.yml + - docker-compose.yml + - frontend/.gitignore + - frontend/.prettierignore + - frontend/.prettierrc + - frontend/Makefile + - frontend/README.md + - frontend/eslint.config.mjs + - frontend/package-lock.json + - frontend/package.json + - frontend/scripts/**/* + - frontend/src/**/* + - frontend/tsconfig.json + - hie.yaml + - package.yaml + - stack.yaml + - stack.yaml.lock + - static/css/** + - static/fonts/** + - static/images/** + - static/js/** + - static/locales/**/* + - templates/** + +language: GHC2024 + +default-extensions: + - BlockArguments + - CPP + - NoImplicitPrelude + - OverloadedStrings + - PartialTypeSignatures + - QuasiQuotes + - RecordWildCards + - TemplateHaskell + - TypeFamilies + - ViewPatterns + +dependencies: + - base >=4.18.1.0 && <5 + - yesod >=1.6 && <1.8 + - yesod-core >=1.6 && <1.8 + - yesod-auth >=1.6 && <1.8 + - yesod-static >=1.6 && <1.8 + - yesod-form >=1.6 && <1.8 + - yesod-newsfeed >= 1.6 && < 1.8 + - classy-prelude >=1.4 && <1.6 + - classy-prelude-conduit >=1.4 && <1.6 + - classy-prelude-yesod >=1.4 && <1.6 + - bytestring >=0.11.5 && <0.13 + - text >=2 && <3 + - persistent >=2.14 && <2.18 + - blaze-html >= 0.9 && < 1 + - persistent-template >=2.12 && <2.13 + - template-haskell + - shakespeare >=2.0 && <2.2 + - blaze-markup + - hjsmin >=0.1 && <0.3 + - wai-extra >=3.0 && <3.2 + - yaml >=0.8 && <0.12 + - http-client-tls >=0.3 && <0.4 + - http-conduit >=2.3 && <2.4 + - directory >=1.1 && <1.4 + - warp >=3.0 && <3.5 + - warp-tls >=3.0 && <3.5 + - tls + - data-default + - conduit >=1.0 && <2 + - monad-logger >=0.3 && <0.4 + - fast-logger >=2.2 && <4 + - wai-logger + - file-embed + - safe + - unordered-containers + - containers + - vector + - time + - case-insensitive + - wai + - foreign-store + + - aeson >=1.4 + - attoparsec + - base64 >=1 && < 2 + - bcrypt >= 0.0.8 + - cryptohash-sha256 + - crypton-connection + - entropy + - esqueleto >= 3.5.11.1 && < 3.7 + - filepath + - fgl + - gitrev + - hscolour + - html-entities + - http-api-data >= 0.3.4 + - http-client + - http-types + - iso8601-time >=0.1.3 + - microlens + - mtl + - parser-combinators + - persistent-sqlite == 2.13.3.0 + - pretty-show + - transformers >= 0.2.2 + +when: + - condition: "!os(windows)" + dependencies: + - unix + +tested-with: + - GHC == 9.10.3 + +# The library contains all of our application code. The executable +# defined below is just a thin wrapper. +library: + source-dirs: src + generated-exposed-modules: + - Paths_espial + when: + - condition: flag(usebuildinfo) + exposed-modules: + - BuildInfo + source-dirs: buildinfo + cpp-options: + - -DUSE_BUILDINFO + - condition: (flag(dev)) || (flag(library-only)) + then: + ghc-options: + - -Wall + - -fwarn-tabs + cpp-options: -DDEVELOPMENT + else: + ghc-options: + - -Wall + - -fwarn-tabs + - -O2 + +# Runnable executable for our application +executables: + espial: + main: main.hs + source-dirs: app + ghc-options: + - -threaded + - -rtsopts + - -with-rtsopts=-N + dependencies: + - espial + when: + - condition: flag(library-only) + buildable: false + migration: + when: + - condition: flag(library-only) + buildable: false + main: Main.hs + source-dirs: + - app/migration + ghc-options: -threaded -rtsopts -with-rtsopts=-N + dependencies: + - espial + - optparse-generic >= 1.2.3 + - optparse-applicative + +# Test suite +tests: + test: + main: Spec.hs + source-dirs: test + ghc-options: -Wall + dependencies: + - espial + - hspec >=2 + - yesod-test + +# Define flags used by "yesod devel" to make compilation faster +flags: + library-only: + description: Build for use with "yesod devel" + manual: false + default: false + dev: + description: Turn on development settings, like auto-reload templates. + manual: false + default: false + usebuildinfo: + description: read buildinfo from generated file buildinfo/BuildInfo.hs + default: false + manual: true
src/Application.hs view
@@ -1,236 +1,270 @@-{-# OPTIONS_GHC -fno-warn-orphans #-}-{-# OPTIONS_GHC -fno-warn-partial-type-signatures #-}--module Application- ( getApplicationDev,- appMain,- develMain,- makeFoundation,- makeLogWare,-- -- * for DevelMain- getApplicationRepl,- shutdownApp,-- -- * for GHCI- handler,- db,- )-where---- Import all relevant handler modules here.--- Don't forget to add new modules to your cabal file!--import Archiver.ArchiveBox07 (archiveBox07Backend)-import Archiver.Backend (ArchiverBackend)-import Archiver.Debug (debugArchiverBackend)-import Archiver.WaybackMachine (waybackMachineBackend)-import Control.Monad.Logger-import Data.Aeson qualified as A-import Database.Persist.Sqlite (ConnectionPool, createSqlitePoolFromInfo, fkEnabled, mkSqliteConnectionInfo, runSqlPool, sqlDatabase, sqlPoolSize)-import Handler.AccountSettings-import Handler.Add-import Handler.Archive-import Handler.Common-import Handler.Docs-import Handler.Edit-import Handler.Home-import Handler.Locales-import Handler.Notes-import Handler.User-import I18n qualified-import Import-import Language.Haskell.TH.Syntax (qLocation)-import Lens.Micro-import Model.Migrations (runPersistentMigrations, runAppMigrations)-import Network.Connection qualified as NC-import Network.HTTP.Client.TLS-import Network.HTTP.Client.TLS qualified as NHT-import Network.Wai (Middleware)-import Network.Wai.Handler.Warp (Settings, defaultSettings, defaultShouldDisplayException, getPort, runSettings, setHost, setOnException, setPort)-import Network.Wai.Middleware.AcceptOverride-import Network.Wai.Middleware.Autohead-import Network.Wai.Middleware.Gzip hiding (def)-import Network.Wai.Middleware.MethodOverride-import Network.Wai.Middleware.RequestLogger (Destination (Logger), IPAddrSource (..), OutputFormat (..), destination, mkRequestLogger, outputFormat)-import System.Log.FastLogger (defaultBufSize, newStdoutLoggerSet)-import Version qualified as Version--#ifndef mingw32_HOST_OS-import System.Posix.Signals qualified as PS (Handler (CatchOnce), installHandler, sigTERM)-import Control.Concurrent qualified as CC (killThread, myThreadId)-#endif--mkYesodDispatch "App" resourcesApp--makeFoundation :: AppSettings -> IO App-makeFoundation appSettings@AppSettings {..} = do- appHttpManager <- getGlobalManager- appLogger <- newStdoutLoggerSet defaultBufSize >>= makeYesodLogger- appFrontendBundleName <- loadFrontendBundleName appStaticDir- appStatic <- (if appMutableStatic then staticDevel else static) appStaticDir- (appTranslationsHash, appTranslations) <- I18n.loadTranslations appStaticDir- let appTranslate lang = I18n.translate appTranslations lang (I18nNs "translation")- appI18nR = LocalesFileR appTranslationsHash []- mkFoundation appConnPool appArchiver = App {..}- appLogFunc = messageLoggerSource (mkFoundation (error "connPool forced in tempFoundation") Nothing) appLogger- startupLogFunc = if appEnableStartupLogging then appLogFunc else \_ _ _ _ -> pure ()- flip runLoggingT startupLogFunc $ do - (logInfoNS "startup" Version.versionSpec)- do migrationsPool <- mkPool startupLogFunc False- runSqlPool (runPersistentMigrations appEnableStartupLogging) migrationsPool- runSqlPool (runAppMigrations appEnableStartupLogging) migrationsPool- appPool <- mkPool appLogFunc True- appArchiver <- mkArchiverBackend appLogFunc appPool- flip runLoggingT startupLogFunc $ do - (logInfoNS "startup" $ "archive backend: " <> tshow appArchiveBackend)- (logDebugNS "startup" ("language-default: " <> fromI18nLang' appLanguageDefault))- return (mkFoundation appPool appArchiver)- where- mkPool :: _ -> Bool -> IO ConnectionPool- mkPool logFunc isFkEnabled =- flip runLoggingT logFunc $ do- let dbPath = sqlDatabase appDatabaseConf- poolSize = sqlPoolSize appDatabaseConf- connInfo =- mkSqliteConnectionInfo dbPath- & set fkEnabled isFkEnabled- createSqlitePoolFromInfo connInfo poolSize- mkArchiverBackend :: _ -> ConnectionPool -> IO (Maybe ArchiverBackend)- mkArchiverBackend logFunc pool = do- case appArchiveBackend of- ArchiveBackendDisabled -> pure Nothing- ArchiveBackendDebug -> pure (Just (debugArchiverBackend logFunc))- ArchiveBackendArchiveLi -> mkArchiveLiArchiver- ArchiveBackendWaybackMachine -> mkWaybackArchiver- ArchiveBackendArchiveBox07 -> mkArchiveBox07Archiver- where- mkArchiveLiArchiver = do- flip runLoggingT logFunc ($(logWarn) ("Archive backend `archive-li` selected but functionality has been removed; archiving disabled"))- pure Nothing- mkWaybackArchiver = do- case (appWaybackMachineAccessKey, appWaybackMachineSecretKey) of- (Just accessKey, Just secretKey) -> do- archiveManager <- do- let mSocks = NC.SockSettingsSimple <$> fmap unpack appArchiveSocksProxyHost <*> fmap toEnum appArchiveSocksProxyPort- NHT.newTlsManagerWith (NHT.mkManagerSettings def mSocks)- pure $ Just $ waybackMachineBackend accessKey secretKey pool archiveManager logFunc- _ -> do- flip runLoggingT logFunc ($(logWarn) ("Archive backend `wayback-machine` selected but access/secret key missing; archiving disabled"))- pure Nothing- mkArchiveBox07Archiver = archiveBox07Backend appSettings pool logFunc--loadFrontendBundleName :: FilePath -> IO Text-loadFrontendBundleName staticDir = do- let manifestPath = staticDir <> "/js/manifest.json"- fallbackName = "app.min.js"- mManifest <- A.decodeFileStrict' manifestPath- pure $ maybe fallbackName appBundle mManifest--newtype FrontendBundleManifest = FrontendBundleManifest- { appBundle :: Text- }--instance A.FromJSON FrontendBundleManifest where- parseJSON = A.withObject "FrontendBundleManifest" $ \o -> do- appBundle <- o A..: "appBundle"- pure FrontendBundleManifest {..}--makeApplication :: App -> IO Application-makeApplication foundation = do- logWare <- makeLogWare foundation- appPlain <- toWaiAppPlain foundation- return (logWare (makeMiddleware appPlain))--makeMiddleware :: Middleware-makeMiddleware =- acceptOverride- . autohead- . gzip def {gzipFiles = GzipPreCompressed GzipIgnore}- . methodOverride--makeLogWare :: App -> IO Middleware-makeLogWare foundation- | appEnableRequestLogging (appSettings foundation) =- mkRequestLogger- def- { outputFormat =- if appDetailedRequestLogging (appSettings foundation)- then Detailed True- else- Apache- ( if appIpFromHeader (appSettings foundation)- then FromFallback- else FromSocket- ),- destination = Logger (loggerSet (appLogger foundation))- }- | otherwise = pure id---- | Warp settings for the given foundation value.-warpSettings :: App -> Settings-warpSettings foundation =- setPort (appPort (appSettings foundation))- $ setHost (appHost (appSettings foundation))- $ setOnException- ( \_req e ->- when (defaultShouldDisplayException e)- $ messageLoggerSource- foundation- (appLogger foundation)- $(qLocation >>= liftLoc)- "yesod"- LevelError- (toLogStr $ "Exception from Warp: " ++ show e)- )- defaultSettings---- | For yesod devel, return the Warp settings and WAI Application.-getApplicationDev :: IO (Settings, Application)-getApplicationDev = do- settings <- getAppSettings- foundation <- makeFoundation settings- wsettings <- getDevSettings (warpSettings foundation)- app <- makeApplication foundation- return (wsettings, app)--getAppSettings :: IO AppSettings-getAppSettings = loadYamlSettings [configSettingsYml] [configSettingsYmlValue] useEnv---- | main function for use by yesod devel-develMain :: IO ()-develMain = develMainHelper getApplicationDev---- | The @main@ function for an executable running this site.-appMain :: IO ()-appMain = do- hSetBuffering stdout LineBuffering- hSetBuffering stderr LineBuffering- settings <- getAppSettings- foundation <- makeFoundation settings- app <- makeApplication foundation-#ifndef mingw32_HOST_OS- mainThreadId <- CC.myThreadId- void $ PS.installHandler PS.sigTERM (PS.CatchOnce (CC.killThread mainThreadId)) Nothing-#endif- flip runLoggingT (messageLoggerSource foundation (appLogger foundation)) (logInfoNS "startup" "starting espial server")- runSettings (warpSettings foundation) app--getApplicationRepl :: IO (Int, App, Application)-getApplicationRepl = do- settings <- getAppSettings- foundation <- makeFoundation settings- wsettings <- getDevSettings (warpSettings foundation)- app1 <- makeApplication foundation- return (getPort wsettings, foundation, app1)--shutdownApp :: App -> IO ()-shutdownApp _ = return ()---- | Run a handler-handler :: Handler a -> IO a-handler h = getAppSettings >>= makeFoundation >>= flip unsafeHandler h---- | Run DB queries-db :: ReaderT SqlBackend (HandlerFor App) a -> IO a-db = handler . runDB+{-# OPTIONS_GHC -fno-warn-orphans #-} +{-# OPTIONS_GHC -fno-warn-partial-type-signatures #-} + +module Application + ( getApplicationDev, + appMain, + develMain, + makeFoundation, + makeLogWare, + + -- * for DevelMain + getApplicationRepl, + shutdownApp, + + -- * for GHCI + handler, + db, + ) +where + +-- Import all relevant handler modules here. +-- Don't forget to add new modules to your cabal file! + +import Archiver.ArchiveBox07 (archiveBox07Backend) +import Archiver.Backend (ArchiverBackend) +import Archiver.Debug (debugArchiverBackend) +import Archiver.WaybackMachine (waybackMachineBackend) +import Control.Monad.Logger +import Data.Aeson qualified as A +import Database.Persist.Sqlite (ConnectionPool, createSqlitePoolFromInfo, fkEnabled, mkSqliteConnectionInfo, runSqlPool, sqlDatabase, sqlPoolSize) +import Handler.AccountSettings +import Handler.Add +import Handler.Archive +import Handler.Common +import Handler.Docs +import Handler.Edit +import Handler.Home +import Handler.Locales +import Handler.Notes +import Handler.User +import I18n qualified +import Import +import Language.Haskell.TH.Syntax (qLocation) +import Lens.Micro +import Model.Migrations (runPersistentMigrations, runAppMigrations) +import Network.Connection qualified as NC +import Network.HTTP.Client.TLS +import Network.HTTP.Client.TLS qualified as NHT +import Network.Wai (Middleware) +import Network.Wai.Handler.Warp (Settings, defaultSettings, defaultShouldDisplayException, getPort, runSettings, setHost, setOnException, setPort) +import Network.Wai.Handler.WarpTLS (TLSSettings (..), runTLS, tlsSettings) +import Network.TLS (Credentials (..), ServerHooks (..)) +import Network.TLS qualified as TLS +import Control.Concurrent (forkIO, threadDelay) +import Network.Wai.Middleware.AcceptOverride +import Network.Wai.Middleware.Autohead +import Network.Wai.Middleware.Gzip hiding (def) +import Network.Wai.Middleware.MethodOverride +import Network.Wai.Middleware.RequestLogger (Destination (Logger), IPAddrSource (..), OutputFormat (..), destination, mkRequestLogger, outputFormat) +import System.Log.FastLogger (defaultBufSize, newStdoutLoggerSet) +import Version qualified as Version + +#ifndef mingw32_HOST_OS +import System.Posix.Signals qualified as PS (Handler (Catch, CatchOnce), installHandler, sigHUP, sigTERM) +import Control.Concurrent qualified as CC (killThread, myThreadId) +#endif + +mkYesodDispatch "App" resourcesApp + +makeFoundation :: AppSettings -> IO App +makeFoundation appSettings@AppSettings {..} = do + appHttpManager <- getGlobalManager + appLogger <- newStdoutLoggerSet defaultBufSize >>= makeYesodLogger + appFrontendBundleName <- loadFrontendBundleName appStaticDir + appStatic <- (if appMutableStatic then staticDevel else static) appStaticDir + (appTranslationsHash, appTranslations) <- I18n.loadTranslations appStaticDir + appPublicTagCloudCache <- newIORef mempty + let appTranslate lang = I18n.translate appTranslations lang (I18nNs "translation") + appI18nR = LocalesFileR appTranslationsHash [] + mkFoundation appConnPool appArchiver = App {..} + appLogFunc = messageLoggerSource (mkFoundation (error "connPool forced in tempFoundation") Nothing) appLogger + startupLogFunc = if appEnableStartupLogging then appLogFunc else \_ _ _ _ -> pure () + flip runLoggingT startupLogFunc $ do + (logInfoNS "startup" Version.versionSpec) + do migrationsPool <- mkPool startupLogFunc False + runSqlPool (runPersistentMigrations appEnableStartupLogging) migrationsPool + runSqlPool (runAppMigrations appEnableStartupLogging) migrationsPool + appPool <- mkPool appLogFunc True + appArchiver <- mkArchiverBackend appLogFunc appPool + flip runLoggingT startupLogFunc $ do + (logInfoNS "startup" $ "archive backend: " <> tshow appArchiveBackend) + (logDebugNS "startup" ("language-default: " <> fromI18nLang' appLanguageDefault)) + return (mkFoundation appPool appArchiver) + where + mkPool :: _ -> Bool -> IO ConnectionPool + mkPool logFunc isFkEnabled = + flip runLoggingT logFunc $ do + let dbPath = sqlDatabase appDatabaseConf + poolSize = sqlPoolSize appDatabaseConf + connInfo = + mkSqliteConnectionInfo dbPath + & set fkEnabled isFkEnabled + createSqlitePoolFromInfo connInfo poolSize + mkArchiverBackend :: _ -> ConnectionPool -> IO (Maybe ArchiverBackend) + mkArchiverBackend logFunc pool = do + case appArchiveBackend of + ArchiveBackendDisabled -> pure Nothing + ArchiveBackendDebug -> pure (Just (debugArchiverBackend logFunc)) + ArchiveBackendArchiveLi -> mkArchiveLiArchiver + ArchiveBackendWaybackMachine -> mkWaybackArchiver + ArchiveBackendArchiveBox07 -> mkArchiveBox07Archiver + where + mkArchiveLiArchiver = do + flip runLoggingT logFunc ($(logWarn) ("Archive backend `archive-li` selected but functionality has been removed; archiving disabled")) + pure Nothing + mkWaybackArchiver = do + case (appWaybackMachineAccessKey, appWaybackMachineSecretKey) of + (Just accessKey, Just secretKey) -> do + archiveManager <- do + let mSocks = NC.SockSettingsSimple <$> fmap unpack appArchiveSocksProxyHost <*> fmap toEnum appArchiveSocksProxyPort + NHT.newTlsManagerWith (NHT.mkManagerSettings def mSocks) + pure $ Just $ waybackMachineBackend accessKey secretKey pool archiveManager logFunc + _ -> do + flip runLoggingT logFunc ($(logWarn) ("Archive backend `wayback-machine` selected but access/secret key missing; archiving disabled")) + pure Nothing + mkArchiveBox07Archiver = archiveBox07Backend appSettings pool logFunc + +loadFrontendBundleName :: FilePath -> IO Text +loadFrontendBundleName staticDir = do + let manifestPath = staticDir <> "/js/manifest.json" + fallbackName = "app.min.js" + mManifest <- A.decodeFileStrict' manifestPath + pure $ maybe fallbackName appBundle mManifest + +newtype FrontendBundleManifest = FrontendBundleManifest + { appBundle :: Text + } + +instance A.FromJSON FrontendBundleManifest where + parseJSON = A.withObject "FrontendBundleManifest" $ \o -> do + appBundle <- o A..: "appBundle" + pure FrontendBundleManifest {..} + +makeApplication :: App -> IO Application +makeApplication foundation = do + logWare <- makeLogWare foundation + appPlain <- toWaiAppPlain foundation + return (logWare (makeMiddleware appPlain)) + +makeMiddleware :: Middleware +makeMiddleware = + acceptOverride + . autohead + . gzip def {gzipFiles = GzipPreCompressed GzipIgnore} + . methodOverride + +makeLogWare :: App -> IO Middleware +makeLogWare foundation + | appEnableRequestLogging (appSettings foundation) = + mkRequestLogger + def + { outputFormat = + if appDetailedRequestLogging (appSettings foundation) + then Detailed True + else + Apache + ( if appIpFromHeader (appSettings foundation) + then FromFallback + else FromSocket + ), + destination = Logger (loggerSet (appLogger foundation)) + } + | otherwise = pure id + +-- | Warp settings for the given foundation value. +warpSettings :: App -> Settings +warpSettings foundation = + setPort (appPort (appSettings foundation)) + $ setHost (appHost (appSettings foundation)) + $ setOnException + ( \_req e -> + when (defaultShouldDisplayException e) + $ messageLoggerSource + foundation + (appLogger foundation) + $(qLocation >>= liftLoc) + "yesod" + LevelError + (toLogStr $ "Exception from Warp: " ++ show e) + ) + defaultSettings + +makeTlsSettings :: FilePath -> FilePath -> IO TLSSettings +makeTlsSettings certPath keyPath = do + creds <- loadCreds + credsRef <- newIORef creds + void $ forkIO $ forever $ do + threadDelay reloadCredsFrequency + reloadCreds credsRef +#ifndef mingw32_HOST_OS + void $ PS.installHandler PS.sigHUP (PS.Catch $ reloadCreds credsRef) Nothing +#endif + pure (tlsSettings certPath keyPath) + { tlsServerHooks = def { onServerNameIndication = \_ -> readIORef credsRef } } + where + reloadCredsFrequency = 12 * 60 * 60 * 1_000_000 -- 12 hours in microseconds + loadCreds = + TLS.credentialLoadX509 certPath keyPath >>= \case + Left e -> throwString $ "TLS credential load failed: " ++ e + Right c -> pure $ Credentials [c] + reloadCreds ref = + tryAny loadCreds >>= \case + Left e -> putStrLn $ "TLS cert reload failed: " <> tshow e + Right c -> writeIORef ref c + +-- | For yesod devel, return the Warp settings and WAI Application. +getApplicationDev :: IO (Settings, Application) +getApplicationDev = do + settings <- getAppSettings + foundation <- makeFoundation settings + wsettings <- getDevSettings (warpSettings foundation) + app <- makeApplication foundation + return (wsettings, app) + +getAppSettings :: IO AppSettings +getAppSettings = loadYamlSettings [configSettingsYml] [configSettingsYmlValue] useEnv + +-- | main function for use by yesod devel +develMain :: IO () +develMain = develMainHelper getApplicationDev + +-- | The @main@ function for an executable running this site. +appMain :: IO () +appMain = do + hSetBuffering stdout LineBuffering + hSetBuffering stderr LineBuffering + settings <- getAppSettings + foundation <- makeFoundation settings + app <- makeApplication foundation +#ifndef mingw32_HOST_OS + mainThreadId <- CC.myThreadId + void $ PS.installHandler PS.sigTERM (PS.CatchOnce (CC.killThread mainThreadId)) Nothing +#endif + case (appTLSCertFile (appSettings foundation), appTLSKeyFile (appSettings foundation)) of + (Just certFile, Just keyFile) -> do + tlsS <- makeTlsSettings certFile keyFile + flip runLoggingT (messageLoggerSource foundation (appLogger foundation)) (logInfoNS "startup" "starting espial server [tls]") + runTLS tlsS (warpSettings foundation) app + _ -> do + flip runLoggingT (messageLoggerSource foundation (appLogger foundation)) (logInfoNS "startup" "starting espial server [http]") + runSettings (warpSettings foundation) app + +getApplicationRepl :: IO (Int, App, Application) +getApplicationRepl = do + settings <- getAppSettings + foundation <- makeFoundation settings + wsettings <- getDevSettings (warpSettings foundation) + app1 <- makeApplication foundation + return (getPort wsettings, foundation, app1) + +shutdownApp :: App -> IO () +shutdownApp _ = return () + +-- | Run a handler +handler :: Handler a -> IO a +handler h = getAppSettings >>= makeFoundation >>= flip unsafeHandler h + +-- | Run DB queries +db :: ReaderT SqlBackend (HandlerFor App) a -> IO a +db = handler . runDB
src/Foundation.hs view
@@ -1,394 +1,398 @@-{-# OPTIONS_GHC -fno-warn-unused-matches #-}--module Foundation where--import Archiver.Backend (ArchiverBackend)-import ClassyPrelude.Yesod qualified as CP (Lang)-import Data.CaseInsensitive qualified as CI-import Data.Text.Encoding qualified as TE-import Data.Text.Encoding.Error qualified as TEE-import Data.Type.Equality (type (~))-import Database.Persist.Sql (ConnectionPool, runSqlPool)-import Import.NoFoundation-import Network.Wai qualified as Wai-import PathPiece ()-import Text.Hamlet (hamletFile)-import Yesod.Auth.Message-import Yesod.Core.Types-import Yesod.Core.Unsafe qualified as Unsafe---- * App--data App = App- { appSettings :: AppSettings,- -- | Settings for static file serving.- appStatic :: Static,- -- | Frontend ESM bundle filename under static/js.- appFrontendBundleName :: Text,- -- | Database connection pool.- appConnPool :: ConnectionPool,- -- | HTTP manager, used for making HTTP requests to external services.- appHttpManager :: Manager,- -- | Logger- appLogger :: Logger,- -- | Active archiver plugin; 'Nothing' disables archiving.- appArchiver :: Maybe ArchiverBackend,- -- | i18n translation function- appTranslate :: I18nLang -> I18nKey -> Text,- -- | Route to the i18n json data- appI18nR :: Route App- }- deriving (Typeable)--mkYesodData "App" $(parseRoutesFile "config/routes")--deriving instance Typeable Route--deriving instance Generic (Route App)---- YesodPersist--instance YesodPersist App where- type YesodPersistBackend App = SqlBackend- runDB action = do- app <- getYesod- runSqlPool action (appConnPool app)--instance YesodPersistRunner App where- getDBRunner = defaultGetDBRunner appConnPool--session_timeout_minutes :: Int-session_timeout_minutes = 10080 -- (7 days)---- * Yesod App--instance Yesod App where- approot = ApprootRequest \app req ->- case appRoot (appSettings app) of- Nothing -> getApprootText guessApproot app req- Just root -> root-- makeSessionBackend :: App -> IO (Maybe SessionBackend)- makeSessionBackend App {appSettings} = do- backend <-- defaultClientSessionBackend- session_timeout_minutes- "config/client_session_key.aes"- maybeSSLOnly $ pure (Just backend)- where- maybeSSLOnly =- if appSSLOnly appSettings- then sslOnlySessions- else id-- yesodMiddleware :: HandlerFor App res -> HandlerFor App res- yesodMiddleware = customMiddleware . defaultYesodMiddleware . customCsrfMiddleware- where- customCsrfMiddleware handler = do- maybeRoute <- getCurrentRoute- dontCheckCsrf <- case maybeRoute of- -- `maybeAuthId` checks for the validity of the Authorization- -- header anyway, but it is still a good idea to limit this- -- flexibility to designated routes.- -- For the time being, `AddR` is the only route that accepts an- -- authentication token.- Just AddR -> isJust <$> lookupHeader "Authorization"- _ -> pure False- (if dontCheckCsrf then id else defaultCsrfMiddleware) handler-- customMiddleware handler = do- addHeader "X-Frame-Options" "DENY"- yesod <- getYesod- ( if appSSLOnly (appSettings yesod)- then sslOnlyMiddleware session_timeout_minutes- else id- )- handler-- jsAttributes _ = [("type", "module")]-- shouldLogIO app "yesod-core" LevelWarn = pure False -- remove verbose CSRF token warnings- shouldLogIO app "startup" level =- pure- ( ( appEnableStartupLogging (appSettings app)- && (appShouldLogAll (appSettings app) || level == LevelInfo || level == LevelWarn || level == LevelError)- )- || level == LevelWarn- || level == LevelError- )- shouldLogIO app source level = pure $ appShouldLogAll (appSettings app) || level == LevelWarn || level == LevelError-- makeLogger = return . appLogger-- authRoute _ = Just (AuthR LoginR)-- isAuthorized (AuthR _) _ = pure Authorized- isAuthorized _ _ = pure Authorized-- errorHandler :: ErrorResponse -> HandlerFor App TypedContent- errorHandler err = do- app <- getYesod- session <- getSession- let lang = maybe (appLanguageDefault (appSettings app)) id (toI18nLang . decodeUtf8 =<< lookup "_LANG" session)- t = \key -> appTranslate app lang (I18nKey key)- case err of- NotFound -> _notFoundErrorHandler (t "error.notFound")- InternalError e -> _internalErrorHandler e (t "error.internalError")- NotAuthenticated -> _notAuthenticatedErrorHandler (t "error.notAuthenticated")- BadMethod _ -> _genericErrorHandler (t "error.badMethod")- InvalidArgs _ -> _genericErrorHandler (t "error.invalidArgs")- PermissionDenied _ -> _genericErrorHandler (t "error.permissionDenied")- where- _notFoundErrorHandler :: Text -> HandlerFor App TypedContent- _notFoundErrorHandler title = do- selectRep $ do- provideRep $ defaultLayout $ do- r <- waiRequest- let path' = TE.decodeUtf8With TEE.lenientDecode $ Wai.rawPathInfo r- defaultMessageWidget (fromString (unpack (title))) [hamlet|<p>#{path'}|]- provideRep $ return $ object ["message" .= title]- provideRep $ return title- _internalErrorHandler :: Text -> Text -> HandlerFor App TypedContent- _internalErrorHandler e title = do- $logErrorS "yesod-core" e- selectRep $ do- provideRep $ defaultLayout $ do- defaultMessageWidget (fromString (unpack (title))) [hamlet|<pre>#{e}|]- provideRep $ return $ object ["message" .= title, "error" .= e]- provideRep $ return $ title <> ": " <> e- _notAuthenticatedErrorHandler :: Text -> HandlerFor App TypedContent- _notAuthenticatedErrorHandler title = selectRep $ do- provideRep $- defaultLayout $- defaultMessageWidget (fromString (unpack (title))) [hamlet|<p style="display:none;"><p>#{title} |]- provideRep $ do- addHeader "WWW-Authenticate" "RedirectJSON realm=\"application\", param=\"authentication_url\""- site <- getYesod- rend <- getUrlRender- let apair u = ["authentication_url" .= rend u]- content = maybe [] apair (authRoute site)- return $ object $ ("message" .= title) : content- provideRep $ return title- _genericErrorHandler :: Text -> HandlerFor App TypedContent- _genericErrorHandler title = do- selectRep $ do- provideRep $ defaultLayout $ do- defaultMessageWidget (fromString (unpack (title))) [hamlet|<p>#{title}|]- provideRep $ return $ object ["message" .= title]- provideRep $ return $ title-- defaultMessageWidget :: Html -> HtmlUrl (Route App) -> WidgetFor App ()- defaultMessageWidget title body = do- setTitle title- toWidget- [hamlet|- <main .pv2.ph3.mh1>- <div .w-100.mw8.center>- <div .pa3.thm-bg-secondary>- <h1>#{title}- ^{body}- |]-- defaultLayout :: WidgetFor App () -> HandlerFor App Html- defaultLayout widget = do- req <- getRequest- app <- getYesod- urlrender <- getUrlRender- mmsg <- getMessage- musername <- maybeAuthUsername- muser <- (fmap . fmap) snd maybeAuthPair- session <- getSession- let msourceCodeUri = appSourceCodeUri (appSettings app)- frontendBundleName = appFrontendBundleName app- lang = fromMaybe (appLanguageDefault (appSettings app)) ((muser >>= userLanguage) <|> (toI18nLang . decodeUtf8 =<< lookup "_LANG" session))- t = \key -> appTranslate app lang (I18nKey key)- i18nR = appI18nR app- pc <- widgetToPageContent do- setTitle "Espial"- addStylesheet (StaticR css_tachyons_min_css)- addStylesheet (StaticR css_common_css)- addStylesheet (StaticR css_main_css)- $(widgetFile "default-layout")- withUrlRenderer $(hamletFile "templates/default-layout-wrapper.hamlet")--popupLayout :: Widget -> Handler Html-popupLayout widget = do- req <- getRequest- app <- getYesod- mmsg <- getMessage- session <- getSession- muser <- fmap entityVal <$> maybeAuth- let musername = fmap userName muser- msourceCodeUri = appSourceCodeUri (appSettings app)- frontendBundleName = appFrontendBundleName app- lang = fromMaybe (appLanguageDefault (appSettings app)) ((muser >>= userLanguage) <|> (toI18nLang . decodeUtf8 =<< lookup "_LANG" session))- t = \key -> appTranslate app lang (I18nKey key)- i18nR = appI18nR app- pc <- widgetToPageContent do- setTitle "Espial"- addStylesheet (StaticR css_tachyons_min_css)- addStylesheet (StaticR css_common_css)- addStylesheet (StaticR css_popup_css)- $(widgetFile "popup-layout")- withUrlRenderer $(hamletFile "templates/default-layout-wrapper.hamlet")---- * YesodAuth App--instance YesodAuth App where- type AuthId App = UserId- authPlugins _ = [dbAuthPlugin]- where- dbAuthPlugin :: AuthPlugin App- dbAuthPlugin = AuthPlugin dbAuthPluginName dbDispatch dbLoginHandler- where- dbDispatch :: Text -> [Text] -> AuthHandler App TypedContent- dbDispatch "POST" ["login"] = dbPostLoginR >>= sendResponse- dbDispatch _ _ = notFound- dbLoginHandler toParent = do- req <- getRequest- lookupSession ultDestKey >>= \case- Just dest | "logout" `isInfixOf` dest -> deleteSession ultDestKey- _ -> pure ()- app <- getYesod- session <- getSession- let lang = maybe (appLanguageDefault (appSettings app)) id (toI18nLang . decodeUtf8 =<< lookup "_LANG" session)- t = \key -> appTranslate app lang (I18nKey key)- setTitle ("Espial | " <> fromString (unpack (t "login.pageTitle")))- $(widgetFile "login")-- dbPostLoginR :: (master ~ App) => AuthHandler master TypedContent- dbPostLoginR = do- mresult <-- runInputPostResult- ( dbLoginCreds- <$> ireq textField "username"- <*> ireq textField "password"- )- case mresult of- FormSuccess creds -> setCredsRedirect creds- _ -> do- app <- getYesod- session <- getSession- let lang = maybe (appLanguageDefault (appSettings app)) id (toI18nLang . decodeUtf8 =<< lookup "_LANG" session)- t = \key -> appTranslate app lang (I18nKey key)- loginErrorMessage (AuthR LoginR) (t "auth.invalidUsernamePass")- where- dbLoginCreds :: Text -> Text -> Creds master- dbLoginCreds username password =- Creds- { credsPlugin = dbAuthPluginName,- credsIdent = username,- credsExtra = [("password", password)]- }-- ultDestKey :: Text- ultDestKey = "_ULT"-- authenticate = authenticateCreds- where- authenticateCreds ::- (MonadHandler m, HandlerSite m ~ App) =>- Creds App ->- m (AuthenticationResult App)- authenticateCreds Creds {..} = do- muser <- case (credsPlugin, lookup "password" credsExtra) of- (plugin, Just pwd)- | plugin == dbAuthPluginName ->- liftHandler $ runDB $ authenticatePassword credsIdent pwd- _ -> pure Nothing- case muser of- Nothing -> pure (UserError InvalidUsernamePass)- Just (Entity uid _) -> pure (Authenticated uid)- loginDest = const HomeR- logoutDest = const HomeR- onLogin =- maybeAuth >>= \case- Nothing -> cpprint ("onLogin: could not find user" :: Text)- Just (Entity user uname) -> do- app <- getYesod- let lang = fromMaybe (appLanguageDefault (appSettings app)) (userLanguage uname)- setSession userNameKey (userName uname)- setLanguage (fromI18nLang lang)- onLogout =- deleteSession userNameKey- redirectToReferer = const True- maybeAuthId = do- req <- waiRequest- let mAuthHeader = lookup "Authorization" (Wai.requestHeaders req)- extractKey = stripPrefix "ApiKey " . TE.decodeUtf8- case mAuthHeader of- Just authHeader ->- case extractKey authHeader of- Just apiKey -> do- user <- liftHandler $ runDB $ getApiKeyUser (ApiKey apiKey)- let userId = entityKey <$> user- pure userId- -- Since we disable CSRF middleware in the presence of Authorization- -- header, we need to explicitly check for the validity of the header- -- content. Otherwise, a dummy Authorization header with garbage input- -- could be provided to circumvent CSRF token requirement, making the app- -- vulnerable to CSRF attacks.- Nothing -> pure Nothing- _ -> defaultMaybeAuthId- renderAuthMessage :: App -> [Text] -> AuthMessage -> Text- renderAuthMessage app langs msg = do- let settings = appSettings app- pickLang (langs ++ [CI.foldedCase $ fromI18nLang (appLanguageDefault settings)])- where- pickLang [] = englishMessage msg- pickLang (l : ls) = case l of- "en" -> englishMessage msg- "cs" -> czechMessage msg- "da" -> danishMessage msg- "de" -> germanMessage msg- "es" -> spanishMessage msg- "fi" -> finnishMessage msg- "fr" -> frenchMessage msg- "hr" -> croatianMessage msg- "ja" -> japaneseMessage msg- "ko" -> koreanMessage msg- "nb" -> norwegianBokmålMessage msg- "nl" -> dutchMessage msg- "pt" -> portugueseMessage msg- "pl" -> pickLang ("cs" : ls) -- TODO- "ro" -> romanianMessage msg- "ru" -> russianMessage msg- "sv" -> swedishMessage msg- "zh" -> chineseMessage msg- _ -> pickLang ls--instance YesodAuthPersist App---- instance RenderMessage App AuthMessage where--- renderMessage :: App -> [CP.Lang] -> AuthMessage -> Text--- renderMessage _ _ msg = defaultMessage msg--instance RenderMessage App FormMessage where- renderMessage :: App -> [CP.Lang] -> FormMessage -> Text- renderMessage _ _ = defaultFormMessage--instance HasHttpManager App where- getHttpManager :: App -> Manager- getHttpManager = appHttpManager---- session keys--maybeAuthUsername :: Handler (Maybe Text)-maybeAuthUsername = do- lookupSession userNameKey--userNameKey :: Text-userNameKey = "_UNAME"---- dbAuthPlugin--dbAuthPluginName :: Text-dbAuthPluginName = "db"--dbLoginR :: AuthRoute-dbLoginR = PluginR dbAuthPluginName ["login"]---- Util--unsafeHandler :: App -> Handler a -> IO a+{-# OPTIONS_GHC -fno-warn-unused-matches #-} + +module Foundation where + +import Archiver.Backend (ArchiverBackend) +import ClassyPrelude.Yesod qualified as CP (Lang) +import Data.CaseInsensitive qualified as CI +import Data.Text.Encoding qualified as TE +import Data.Text.Encoding.Error qualified as TEE +import Data.Type.Equality (type (~)) +import Database.Persist.Sql (ConnectionPool, runSqlPool) +import Import.NoFoundation +import Network.Wai qualified as Wai +import PathPiece () +import Text.Hamlet (hamletFile) +import Yesod.Auth.Message +import Yesod.Core.Types +import Yesod.Core.Unsafe qualified as Unsafe + +-- * App + +type PublicTagCloudCache = IORef (Map (Text, TagCloudMode) (UTCTime, Map Text Int)) + +data App = App + { appSettings :: AppSettings, + -- | Settings for static file serving. + appStatic :: Static, + -- | Frontend ESM bundle filename under static/js. + appFrontendBundleName :: Text, + -- | Database connection pool. + appConnPool :: ConnectionPool, + -- | HTTP manager, used for making HTTP requests to external services. + appHttpManager :: Manager, + -- | Logger + appLogger :: Logger, + -- | Active archiver plugin; 'Nothing' disables archiving. + appArchiver :: Maybe ArchiverBackend, + -- | i18n translation function + appTranslate :: I18nLang -> I18nKey -> Text, + -- | Route to the i18n json data + appI18nR :: Route App, + -- | In-memory cache for public tag cloud responses (30s TTL, 1000-entry cap). + appPublicTagCloudCache :: PublicTagCloudCache + } + deriving (Typeable) + +mkYesodData "App" $(parseRoutesFile "config/routes") + +deriving instance Typeable Route + +deriving instance Generic (Route App) + +-- YesodPersist + +instance YesodPersist App where + type YesodPersistBackend App = SqlBackend + runDB action = do + app <- getYesod + runSqlPool action (appConnPool app) + +instance YesodPersistRunner App where + getDBRunner = defaultGetDBRunner appConnPool + +session_timeout_minutes :: Int +session_timeout_minutes = 10080 -- (7 days) + +-- * Yesod App + +instance Yesod App where + approot = ApprootRequest \app req -> + case appRoot (appSettings app) of + Nothing -> getApprootText guessApproot app req + Just root -> root + + makeSessionBackend :: App -> IO (Maybe SessionBackend) + makeSessionBackend App {appSettings} = do + backend <- + defaultClientSessionBackend + session_timeout_minutes + "config/client_session_key.aes" + maybeSSLOnly $ pure (Just backend) + where + maybeSSLOnly = + if appSSLOnly appSettings + then sslOnlySessions + else id + + yesodMiddleware :: HandlerFor App res -> HandlerFor App res + yesodMiddleware = customMiddleware . defaultYesodMiddleware . customCsrfMiddleware + where + customCsrfMiddleware handler = do + maybeRoute <- getCurrentRoute + dontCheckCsrf <- case maybeRoute of + -- `maybeAuthId` checks for the validity of the Authorization + -- header anyway, but it is still a good idea to limit this + -- flexibility to designated routes. + -- For the time being, `AddR` is the only route that accepts an + -- authentication token. + Just AddR -> isJust <$> lookupHeader "Authorization" + _ -> pure False + (if dontCheckCsrf then id else defaultCsrfMiddleware) handler + + customMiddleware handler = do + addHeader "X-Frame-Options" "DENY" + yesod <- getYesod + ( if appSSLOnly (appSettings yesod) + then sslOnlyMiddleware session_timeout_minutes + else id + ) + handler + + jsAttributes _ = [("type", "module")] + + shouldLogIO app "yesod-core" LevelWarn = pure False -- remove verbose CSRF token warnings + shouldLogIO app "startup" level = + pure + ( ( appEnableStartupLogging (appSettings app) + && (appShouldLogAll (appSettings app) || level == LevelInfo || level == LevelWarn || level == LevelError) + ) + || level == LevelWarn + || level == LevelError + ) + shouldLogIO app source level = pure $ appShouldLogAll (appSettings app) || level == LevelWarn || level == LevelError + + makeLogger = return . appLogger + + authRoute _ = Just (AuthR LoginR) + + isAuthorized (AuthR _) _ = pure Authorized + isAuthorized _ _ = pure Authorized + + errorHandler :: ErrorResponse -> HandlerFor App TypedContent + errorHandler err = do + app <- getYesod + session <- getSession + let lang = maybe (appLanguageDefault (appSettings app)) id (toI18nLang . decodeUtf8 =<< lookup "_LANG" session) + t = \key -> appTranslate app lang (I18nKey key) + case err of + NotFound -> _notFoundErrorHandler (t "error.notFound") + InternalError e -> _internalErrorHandler e (t "error.internalError") + NotAuthenticated -> _notAuthenticatedErrorHandler (t "error.notAuthenticated") + BadMethod _ -> _genericErrorHandler (t "error.badMethod") + InvalidArgs _ -> _genericErrorHandler (t "error.invalidArgs") + PermissionDenied _ -> _genericErrorHandler (t "error.permissionDenied") + where + _notFoundErrorHandler :: Text -> HandlerFor App TypedContent + _notFoundErrorHandler title = do + selectRep $ do + provideRep $ defaultLayout $ do + r <- waiRequest + let path' = TE.decodeUtf8With TEE.lenientDecode $ Wai.rawPathInfo r + defaultMessageWidget (fromString (unpack (title))) [hamlet|<p>#{path'}|] + provideRep $ return $ object ["message" .= title] + provideRep $ return title + _internalErrorHandler :: Text -> Text -> HandlerFor App TypedContent + _internalErrorHandler e title = do + $logErrorS "yesod-core" e + selectRep $ do + provideRep $ defaultLayout $ do + defaultMessageWidget (fromString (unpack (title))) [hamlet|<pre>#{e}|] + provideRep $ return $ object ["message" .= title, "error" .= e] + provideRep $ return $ title <> ": " <> e + _notAuthenticatedErrorHandler :: Text -> HandlerFor App TypedContent + _notAuthenticatedErrorHandler title = selectRep $ do + provideRep $ + defaultLayout $ + defaultMessageWidget (fromString (unpack (title))) [hamlet|<p style="display:none;"><p>#{title} |] + provideRep $ do + addHeader "WWW-Authenticate" "RedirectJSON realm=\"application\", param=\"authentication_url\"" + site <- getYesod + rend <- getUrlRender + let apair u = ["authentication_url" .= rend u] + content = maybe [] apair (authRoute site) + return $ object $ ("message" .= title) : content + provideRep $ return title + _genericErrorHandler :: Text -> HandlerFor App TypedContent + _genericErrorHandler title = do + selectRep $ do + provideRep $ defaultLayout $ do + defaultMessageWidget (fromString (unpack (title))) [hamlet|<p>#{title}|] + provideRep $ return $ object ["message" .= title] + provideRep $ return $ title + + defaultMessageWidget :: Html -> HtmlUrl (Route App) -> WidgetFor App () + defaultMessageWidget title body = do + setTitle title + toWidget + [hamlet| + <main .pv2.ph3.mh1> + <div .w-100.mw8.center> + <div .pa3.thm-bg-secondary> + <h1>#{title} + ^{body} + |] + + defaultLayout :: WidgetFor App () -> HandlerFor App Html + defaultLayout widget = do + req <- getRequest + app <- getYesod + urlrender <- getUrlRender + mmsg <- getMessage + musername <- maybeAuthUsername + muser <- (fmap . fmap) snd maybeAuthPair + session <- getSession + let msourceCodeUri = appSourceCodeUri (appSettings app) + frontendBundleName = appFrontendBundleName app + lang = fromMaybe (appLanguageDefault (appSettings app)) ((muser >>= userLanguage) <|> (toI18nLang . decodeUtf8 =<< lookup "_LANG" session)) + t = \key -> appTranslate app lang (I18nKey key) + i18nR = appI18nR app + pc <- widgetToPageContent do + setTitle "Espial" + addStylesheet (StaticR css_tachyons_min_css) + addStylesheet (StaticR css_common_css) + addStylesheet (StaticR css_main_css) + $(widgetFile "default-layout") + withUrlRenderer $(hamletFile "templates/default-layout-wrapper.hamlet") + +popupLayout :: Widget -> Handler Html +popupLayout widget = do + req <- getRequest + app <- getYesod + mmsg <- getMessage + session <- getSession + muser <- fmap entityVal <$> maybeAuth + let musername = fmap userName muser + msourceCodeUri = appSourceCodeUri (appSettings app) + frontendBundleName = appFrontendBundleName app + lang = fromMaybe (appLanguageDefault (appSettings app)) ((muser >>= userLanguage) <|> (toI18nLang . decodeUtf8 =<< lookup "_LANG" session)) + t = \key -> appTranslate app lang (I18nKey key) + i18nR = appI18nR app + pc <- widgetToPageContent do + setTitle "Espial" + addStylesheet (StaticR css_tachyons_min_css) + addStylesheet (StaticR css_common_css) + addStylesheet (StaticR css_popup_css) + $(widgetFile "popup-layout") + withUrlRenderer $(hamletFile "templates/default-layout-wrapper.hamlet") + +-- * YesodAuth App + +instance YesodAuth App where + type AuthId App = UserId + authPlugins _ = [dbAuthPlugin] + where + dbAuthPlugin :: AuthPlugin App + dbAuthPlugin = AuthPlugin dbAuthPluginName dbDispatch dbLoginHandler + where + dbDispatch :: Text -> [Text] -> AuthHandler App TypedContent + dbDispatch "POST" ["login"] = dbPostLoginR >>= sendResponse + dbDispatch _ _ = notFound + dbLoginHandler toParent = do + req <- getRequest + lookupSession ultDestKey >>= \case + Just dest | "logout" `isInfixOf` dest -> deleteSession ultDestKey + _ -> pure () + app <- getYesod + session <- getSession + let lang = maybe (appLanguageDefault (appSettings app)) id (toI18nLang . decodeUtf8 =<< lookup "_LANG" session) + t = \key -> appTranslate app lang (I18nKey key) + setTitle ("Espial | " <> fromString (unpack (t "login.pageTitle"))) + $(widgetFile "login") + + dbPostLoginR :: (master ~ App) => AuthHandler master TypedContent + dbPostLoginR = do + mresult <- + runInputPostResult + ( dbLoginCreds + <$> ireq textField "username" + <*> ireq textField "password" + ) + case mresult of + FormSuccess creds -> setCredsRedirect creds + _ -> do + app <- getYesod + session <- getSession + let lang = maybe (appLanguageDefault (appSettings app)) id (toI18nLang . decodeUtf8 =<< lookup "_LANG" session) + t = \key -> appTranslate app lang (I18nKey key) + loginErrorMessage (AuthR LoginR) (t "auth.invalidUsernamePass") + where + dbLoginCreds :: Text -> Text -> Creds master + dbLoginCreds username password = + Creds + { credsPlugin = dbAuthPluginName, + credsIdent = username, + credsExtra = [("password", password)] + } + + ultDestKey :: Text + ultDestKey = "_ULT" + + authenticate = authenticateCreds + where + authenticateCreds :: + (MonadHandler m, HandlerSite m ~ App) => + Creds App -> + m (AuthenticationResult App) + authenticateCreds Creds {..} = do + muser <- case (credsPlugin, lookup "password" credsExtra) of + (plugin, Just pwd) + | plugin == dbAuthPluginName -> + liftHandler $ runDB $ authenticatePassword credsIdent pwd + _ -> pure Nothing + case muser of + Nothing -> pure (UserError InvalidUsernamePass) + Just (Entity uid _) -> pure (Authenticated uid) + loginDest = const HomeR + logoutDest = const HomeR + onLogin = + maybeAuth >>= \case + Nothing -> cpprint ("onLogin: could not find user" :: Text) + Just (Entity user uname) -> do + app <- getYesod + let lang = fromMaybe (appLanguageDefault (appSettings app)) (userLanguage uname) + setSession userNameKey (userName uname) + setLanguage (fromI18nLang lang) + onLogout = + deleteSession userNameKey + redirectToReferer = const True + maybeAuthId = do + req <- waiRequest + let mAuthHeader = lookup "Authorization" (Wai.requestHeaders req) + extractKey = stripPrefix "ApiKey " . TE.decodeUtf8 + case mAuthHeader of + Just authHeader -> + case extractKey authHeader of + Just apiKey -> do + user <- liftHandler $ runDB $ getApiKeyUser (ApiKey apiKey) + let userId = entityKey <$> user + pure userId + -- Since we disable CSRF middleware in the presence of Authorization + -- header, we need to explicitly check for the validity of the header + -- content. Otherwise, a dummy Authorization header with garbage input + -- could be provided to circumvent CSRF token requirement, making the app + -- vulnerable to CSRF attacks. + Nothing -> pure Nothing + _ -> defaultMaybeAuthId + renderAuthMessage :: App -> [Text] -> AuthMessage -> Text + renderAuthMessage app langs msg = do + let settings = appSettings app + pickLang (langs ++ [CI.foldedCase $ fromI18nLang (appLanguageDefault settings)]) + where + pickLang [] = englishMessage msg + pickLang (l : ls) = case l of + "en" -> englishMessage msg + "cs" -> czechMessage msg + "da" -> danishMessage msg + "de" -> germanMessage msg + "es" -> spanishMessage msg + "fi" -> finnishMessage msg + "fr" -> frenchMessage msg + "hr" -> croatianMessage msg + "ja" -> japaneseMessage msg + "ko" -> koreanMessage msg + "nb" -> norwegianBokmålMessage msg + "nl" -> dutchMessage msg + "pt" -> portugueseMessage msg + "pl" -> pickLang ("cs" : ls) -- TODO + "ro" -> romanianMessage msg + "ru" -> russianMessage msg + "sv" -> swedishMessage msg + "zh" -> chineseMessage msg + _ -> pickLang ls + +instance YesodAuthPersist App + +-- instance RenderMessage App AuthMessage where +-- renderMessage :: App -> [CP.Lang] -> AuthMessage -> Text +-- renderMessage _ _ msg = defaultMessage msg + +instance RenderMessage App FormMessage where + renderMessage :: App -> [CP.Lang] -> FormMessage -> Text + renderMessage _ _ = defaultFormMessage + +instance HasHttpManager App where + getHttpManager :: App -> Manager + getHttpManager = appHttpManager + +-- session keys + +maybeAuthUsername :: Handler (Maybe Text) +maybeAuthUsername = do + lookupSession userNameKey + +userNameKey :: Text +userNameKey = "_UNAME" + +-- dbAuthPlugin + +dbAuthPluginName :: Text +dbAuthPluginName = "db" + +dbLoginR :: AuthRoute +dbLoginR = PluginR dbAuthPluginName ["login"] + +-- Util + +unsafeHandler :: App -> Handler a -> IO a unsafeHandler = Unsafe.fakeHandlerGetLogger appLogger
src/Handler/Add.hs view
@@ -1,141 +1,138 @@-module Handler.Add where--import Data.Aeson.Encoding (encodingToLazyByteString)-import Data.Attoparsec.ByteString qualified as AP-import Data.ByteString.Lazy qualified as LBS-import Data.Char (ord)-import Data.Function ((&))-import Data.List (nub)-import Data.Text qualified as T (replace)-import Data.Text.Lazy.Builder (toLazyText)-import HTMLEntities.Decoder (htmlEncodedText)-import Handler.Archive-import Handler.Common (browserUserAgent)-import Import-import Network.HTTP.Client qualified as NH-import Network.HTTP.Client.TLS qualified as NHT---- * View--getAddViewR :: Handler Html-getAddViewR = do- Entity userId user <- requireAuth- yesod <- getYesod- let frontendBundleName = appFrontendBundleName yesod- archiveBackendEnabled = isJust (appArchiver yesod)- murl <- lookupGetParam "url"- mBookmarkDb <- runDB (fetchBookmarkByUrl userId murl)- newBookmarkForm <- mkNewBookmarkFormForUrl archiveBackendEnabled- let mExistingBookmarkForm = toBookmarkForm <$> mBookmarkDb- bookmarkForm = mExistingBookmarkForm <|> Just newBookmarkForm- renderEl = "addForm" :: Text-- popupLayout do- toWidget- [whamlet|- <div id="#{ renderEl }">- |]- toWidgetBody- [julius|- app.dat.bmark = #{ toRawJs bookmarkForm }; - app.dat.archiveBackendEnabled = #{ archiveBackendEnabled };- app.dat.suggestTags = #{ userSuggestTags user };- |]- toWidget- [hamlet|- <script type="module">- import { renderAddForm } from '@{StaticR (StaticRoute ["js", frontendBundleName] [])}'- renderAddForm('##{renderEl}')(app.dat.bmark)();- |]- where- toRawJs = rawJS . decodeUtf8 . encodingToLazyByteString . toEncoding- mkNewBookmarkFormForUrl :: Bool -> Handler BookmarkForm- mkNewBookmarkFormForUrl archiveBackendEnabled = do- Entity _ user <- requireAuth- url <- lookupGetParam "url" <&> fromMaybe ""- title <- lookupGetParam "title"- description <- lookupGetParam "description" <&> fmap Textarea- tags <- lookupGetParam "tags"- private <- lookupGetParam "private" <&> fmap parseChk <&> (<|> Just (userPrivateDefault user))- toread <- lookupGetParam "toread" <&> fmap parseChk- pure (mkNewBookmarkForm archiveBackendEnabled user url title description tags private toread)- where- parseChk s = s == "yes" || s == "on" || s == "true" || s == "1"---- * API--postAddR :: Handler Text-postAddR = do- bookmarkForm <- requireCheckJsonBody- handleFormSuccess bookmarkForm >>= \case- Created bid -> sendStatusJSON created201 bid- Updated _ -> sendResponseStatus noContent204 ()- Failed s -> sendResponseStatus status400 s- where- handleFormSuccess :: BookmarkForm -> Handler (UpsertResult (Key Bookmark))- handleFormSuccess bookmarkForm = do- (userId, user) <- requireAuthPair- appSettings <- appSettings <$> getYesod- case (appAllowNonHttpUrlSchemes appSettings, (parseRequest . unpack . _url) bookmarkForm) of- (False, Nothing) -> pure $ Failed "Invalid URL"- _ -> do- let mkbid = toSqlKey <$> _bid bookmarkForm- tags = maybe [] toTagList (_tags bookmarkForm)- bm <- liftIO $ bookmarkFormToBookmark userId bookmarkForm- res <- runDB (upsertBookmark userId mkbid bm tags)- case res of- Created kbid- | (maybe (userArchiveDefault user) id (_archiveRequested bookmarkForm)) ->- whenM- (shouldArchiveBookmark bm)- (void $ async $ archiveBookmarkUrl kbid (Url (bookmarkHref bm)))- _ -> pure ()- pure res- where- toTagList = nub . words . T.replace "," " "--postLookupTitleR :: Handler ()-postLookupTitleR = do- void requireAuthId- bookmarkForm <- (requireCheckJsonBody :: Handler BookmarkForm)- fetchPageTitle (Url (_url bookmarkForm)) >>= \case- Left _ -> sendResponseStatus noContent204 ()- Right title -> sendResponseStatus ok200 title- where- fetchPageTitle :: Url -> Handler (Either String Text)- fetchPageTitle url =- do- req <- buildPageTitleRequest- res <- liftIO $ NH.httpLbs req =<< NHT.getGlobalManager- let body = LBS.toStrict (responseBody res)- pure (decodeHtmlBs <$> parseTitle body)- `catch` ( \(e :: SomeException) -> do- $(logError) $ (pack . show) e- pure (Left (show e))- )- where- parseTitle bs =- flip AP.parseOnly bs do- _ <- skipAnyTill (AP.string "<title")- _ <- skipAnyTill (AP.string ">")- let lt = toEnum (ord '<')- AP.takeTill (== lt)- decodeHtmlBs = toStrict . toLazyText . htmlEncodedText . decodeUtf8- skipAnyTill end = go where go = end $> () <|> AP.anyWord8 *> go- buildPageTitleRequest = do- let UserAgent ua = browserUserAgent- pure $ NH.parseRequest_ (unpack (unUrl url)) & \r ->- r- { NH.requestHeaders =- [ ("Cache-Control", "max-age=0"),- ("User-Agent", encodeUtf8 ua)- ]- }--postTagSuggestionsR :: Handler Text-postTagSuggestionsR = do- userId <- requireAuthId- tagSuggestionRequest <- requireCheckJsonBody- let suggestion_limit = 10- tagSuggestions <- runDB $ getTagSuggestions userId tagSuggestionRequest suggestion_limit- sendStatusJSON ok200 tagSuggestions+module Handler.Add where + +import Data.Aeson.Encoding (encodingToLazyByteString) +import Data.Attoparsec.ByteString qualified as AP +import Data.ByteString.Lazy qualified as LBS +import Data.Char (ord) +import Data.Function ((&)) +import Data.Text.Lazy.Builder (toLazyText) +import HTMLEntities.Decoder (htmlEncodedText) +import Handler.Archive +import Handler.Common (browserUserAgent) +import Import +import Network.HTTP.Client qualified as NH +import Network.HTTP.Client.TLS qualified as NHT +import Util + +-- * View + +getAddViewR :: Handler Html +getAddViewR = do + Entity userId user <- requireAuth + yesod <- getYesod + let frontendBundleName = appFrontendBundleName yesod + archiveBackendEnabled = isJust (appArchiver yesod) + murl <- lookupGetParam "url" + mBookmarkDb <- runDB (fetchBookmarkByUrl userId murl) + newBookmarkForm <- mkNewBookmarkFormForUrl archiveBackendEnabled + let mExistingBookmarkForm = toBookmarkForm <$> mBookmarkDb + bookmarkForm = mExistingBookmarkForm <|> Just newBookmarkForm + renderEl = "addForm" :: Text + + popupLayout do + toWidget + [whamlet| + <div id="#{ renderEl }"> + |] + toWidgetBody + [julius| + app.dat.bmark = #{ toRawJs bookmarkForm }; + app.dat.archiveBackendEnabled = #{ archiveBackendEnabled }; + app.dat.suggestTags = #{ userSuggestTags user }; + |] + toWidget + [hamlet| + <script type="module"> + import { renderAddForm } from '@{StaticR (StaticRoute ["js", frontendBundleName] [])}' + renderAddForm('##{renderEl}')(app.dat.bmark)(); + |] + where + toRawJs = rawJS . decodeUtf8 . encodingToLazyByteString . toEncoding + mkNewBookmarkFormForUrl :: Bool -> Handler BookmarkForm + mkNewBookmarkFormForUrl archiveBackendEnabled = do + Entity _ user <- requireAuth + url <- lookupGetParam "url" <&> fromMaybe "" + title <- lookupGetParam "title" + description <- lookupGetParam "description" <&> fmap Textarea + tags <- lookupGetParam "tags" + private <- lookupGetParam "private" <&> fmap parseChk <&> (<|> Just (userPrivateDefault user)) + toread <- lookupGetParam "toread" <&> fmap parseChk + pure (mkNewBookmarkForm archiveBackendEnabled user url title description tags private toread) + where + parseChk s = s == "yes" || s == "on" || s == "true" || s == "1" + +-- * API + +postAddR :: Handler Text +postAddR = do + bookmarkForm <- requireCheckJsonBody + handleFormSuccess bookmarkForm >>= \case + Created bid -> sendStatusJSON created201 bid + Updated _ -> sendResponseStatus noContent204 () + Failed s -> sendResponseStatus status400 s + where + handleFormSuccess :: BookmarkForm -> Handler (UpsertResult (Key Bookmark)) + handleFormSuccess bookmarkForm = do + (userId, user) <- requireAuthPair + appSettings <- appSettings <$> getYesod + case (appAllowNonHttpUrlSchemes appSettings, (parseRequest . unpack . _url) bookmarkForm) of + (False, Nothing) -> pure $ Failed "Invalid URL" + _ -> do + let mkbid = toSqlKey <$> _bid bookmarkForm + tags = maybe [] normalizeTags (_tags bookmarkForm) + bm <- liftIO $ bookmarkFormToBookmark userId bookmarkForm + res <- runDB (upsertBookmark userId mkbid bm tags) + case res of + Created kbid + | (maybe (userArchiveDefault user) id (_archiveRequested bookmarkForm)) -> + whenM + (shouldArchiveBookmark bm) + (void $ async $ archiveBookmarkUrl kbid (Url (bookmarkHref bm))) + _ -> pure () + pure res + +postLookupTitleR :: Handler () +postLookupTitleR = do + void requireAuthId + bookmarkForm <- (requireCheckJsonBody :: Handler BookmarkForm) + fetchPageTitle (Url (_url bookmarkForm)) >>= \case + Left _ -> sendResponseStatus noContent204 () + Right title -> sendResponseStatus ok200 title + where + fetchPageTitle :: Url -> Handler (Either String Text) + fetchPageTitle url = + do + req <- buildPageTitleRequest + res <- liftIO $ NH.httpLbs req =<< NHT.getGlobalManager + let body = LBS.toStrict (responseBody res) + pure (decodeHtmlBs <$> parseTitle body) + `catch` ( \(e :: SomeException) -> do + $(logError) $ (pack . show) e + pure (Left (show e)) + ) + where + parseTitle bs = + flip AP.parseOnly bs do + _ <- skipAnyTill (AP.string "<title") + _ <- skipAnyTill (AP.string ">") + let lt = toEnum (ord '<') + AP.takeTill (== lt) + decodeHtmlBs = toStrict . toLazyText . htmlEncodedText . decodeUtf8 + skipAnyTill end = go where go = end $> () <|> AP.anyWord8 *> go + buildPageTitleRequest = do + let UserAgent ua = browserUserAgent + pure $ NH.parseRequest_ (unpack (unUrl url)) & \r -> + r + { NH.requestHeaders = + [ ("Cache-Control", "max-age=0"), + ("User-Agent", encodeUtf8 ua) + ] + } + +postTagSuggestionsR :: Handler Text +postTagSuggestionsR = do + userId <- requireAuthId + tagSuggestionRequest <- requireCheckJsonBody + let suggestion_limit = 10 + tagSuggestions <- runDB $ getTagSuggestions userId tagSuggestionRequest suggestion_limit + sendStatusJSON ok200 tagSuggestions
src/Handler/Common.hs view
@@ -1,121 +1,120 @@--- | Common handler functions.-module Handler.Common where--import Data.Aeson qualified as A-import Data.ByteString.Char8 qualified as BS8-import Data.FileEmbed (embedFile)-import Import-import Network.Wai (requestHeaderHost)-import Text.Read---- These handlers embed files in the executable at compile time to avoid a--- runtime dependency, and for efficiency.--getFaviconR :: Handler TypedContent-getFaviconR = do- cacheSeconds $ 60 * 5- -- cacheSeconds $ 60 * 60 * 24 * 30 -- cache for a month- return- $ TypedContent "image/x-icon"- $ toContent $(embedFile "config/favicon.ico")--getRobotsR :: Handler TypedContent-getRobotsR =- return- $ TypedContent typePlain- $ toContent $(embedFile "config/robots.txt")--lookupPagingParams :: Handler (Maybe Int64, Maybe Int64)-lookupPagingParams =- (,)- <$> getUrlSessionParam "count"- <*> getUrlParam "page"--pagingCursorBeforeParam :: Text-pagingCursorBeforeParam = "before"--pagingCursorAfterParam :: Text-pagingCursorAfterParam = "after"--format8601 :: UTCTime -> Text-format8601 = pack . formatTime defaultTimeLocale "%FT%T%QZ"--formatEntityPagingCursorTimeBm :: Entity Bookmark -> Text-formatEntityPagingCursorTimeBm = format8601 . bookmarkTime . entityVal--formatEntityPagingCursorTimeNt :: Entity Note -> Text-formatEntityPagingCursorTimeNt = format8601 . noteCreated . entityVal--parsePagingCursorTime :: Text -> Maybe UTCTime-parsePagingCursorTime = parseTimeText--formatEntityPagingCursorKey :: (ToBackendKey SqlBackend record) => Entity record -> Text-formatEntityPagingCursorKey = tshow . fromSqlKey . entityKey--parsePagingCursorKey :: (ToBackendKey SqlBackend record) => Text -> Maybe (Key record)-parsePagingCursorKey t =- toSqlKey <$> (readMaybe (unpack t) :: Maybe Int64)--parsePagingCursorParams ::- (Text -> Maybe cursor) ->- (Text -> Maybe cursor) ->- Maybe Text ->- Maybe Text ->- Maybe cursor-parsePagingCursorParams mkBefore mkAfter mbefore mafter =- (mkBefore =<< mbefore) <|> (mkAfter =<< mafter)--espialUserAgent :: Handler UserAgent-espialUserAgent = do- mHost <- requestHeaderHost . reqWaiRequest <$> getRequest- pure $ UserAgent $ pack $ "espial-" <> maybe "" (BS8.unpack . BS8.takeWhile (/= ':')) mHost--browserUserAgent :: UserAgent-browserUserAgent =- UserAgent- $ pack- $ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "- <> "AppleWebKit/537.36 (KHTML, like Gecko) "- <> "Chrome/136.0.0.0 Safari/537.36"--getUrlParam :: (Read a) => Text -> Handler (Maybe a)-getUrlParam name = do- fmap parseMaybe (lookupGetParam name)- where- parseMaybe x = readMaybe . unpack =<< x--getUrlSessionParam ::- forall a.- (Show a, Read a) =>- Text ->- Handler (Maybe a)-getUrlSessionParam name = do- p <- fmap parseMaybe (lookupGetParam name)- s <- fmap parseMaybe (lookupSession name)- for_ p (setSession name . (pack . show))- pure (p <|> s)- where- parseMaybe :: Maybe Text -> Maybe a- parseMaybe x = readMaybe . unpack =<< x--lookupTagCloudMode :: (MonadHandler m) => m (Maybe TagCloudMode)-lookupTagCloudMode = do- (A.decode . fromStrict =<<) <$> lookupSessionBS "tagCloudMode"--setTagCloudMode :: (MonadHandler m) => TagCloudMode -> m ()-setTagCloudMode = setSessionBS "tagCloudMode" . toStrict . A.encode--getTagCloudMode :: (MonadHandler m) => Bool -> [Tag] -> m TagCloudMode-getTagCloudMode isowner tags = do- ms <- lookupTagCloudMode- let expanded = maybe False isExpanded ms- pure- $ if not isowner- then TagCloudModeNone- else- if not (null tags)- then TagCloudModeRelated expanded tags- else case ms of- Nothing -> TagCloudModeTop expanded 200- Just (TagCloudModeRelated e _) -> TagCloudModeTop e 200- Just m -> m+-- | Common handler functions. +module Handler.Common where + +import Data.Aeson qualified as A +import Data.ByteString.Char8 qualified as BS8 +import Data.FileEmbed (embedFile) +import Import +import Network.Wai (requestHeaderHost) +import Text.Read + +-- These handlers embed files in the executable at compile time to avoid a +-- runtime dependency, and for efficiency. + +getFaviconR :: Handler TypedContent +getFaviconR = do + cacheSeconds $ 60 * 5 + -- cacheSeconds $ 60 * 60 * 24 * 30 -- cache for a month + return + $ TypedContent "image/x-icon" + $ toContent $(embedFile "config/favicon.ico") + +getRobotsR :: Handler TypedContent +getRobotsR = + return + $ TypedContent typePlain + $ toContent $(embedFile "config/robots.txt") + +lookupPagingParams :: Handler (Maybe Int64, Maybe Int64) +lookupPagingParams = + (,) + <$> getUrlSessionParam "count" + <*> getUrlParam "page" + +pagingCursorBeforeParam :: Text +pagingCursorBeforeParam = "before" + +pagingCursorAfterParam :: Text +pagingCursorAfterParam = "after" + +format8601 :: UTCTime -> Text +format8601 = pack . formatTime defaultTimeLocale "%FT%T%QZ" + +formatEntityPagingCursorTimeBm :: Entity Bookmark -> Text +formatEntityPagingCursorTimeBm = format8601 . bookmarkTime . entityVal + +formatEntityPagingCursorTimeNt :: Entity Note -> Text +formatEntityPagingCursorTimeNt = format8601 . noteCreated . entityVal + +parsePagingCursorTime :: Text -> Maybe UTCTime +parsePagingCursorTime = parseTimeText + +formatEntityPagingCursorKey :: (ToBackendKey SqlBackend record) => Entity record -> Text +formatEntityPagingCursorKey = tshow . fromSqlKey . entityKey + +parsePagingCursorKey :: (ToBackendKey SqlBackend record) => Text -> Maybe (Key record) +parsePagingCursorKey t = + toSqlKey <$> (readMaybe (unpack t) :: Maybe Int64) + +parsePagingCursorParams :: + (Text -> Maybe cursor) -> + (Text -> Maybe cursor) -> + Maybe Text -> + Maybe Text -> + Maybe cursor +parsePagingCursorParams mkBefore mkAfter mbefore mafter = + (mkBefore =<< mbefore) <|> (mkAfter =<< mafter) + +espialUserAgent :: Handler UserAgent +espialUserAgent = do + mHost <- requestHeaderHost . reqWaiRequest <$> getRequest + pure $ UserAgent $ pack $ "espial-" <> maybe "" (BS8.unpack . BS8.takeWhile (/= ':')) mHost + +browserUserAgent :: UserAgent +browserUserAgent = + UserAgent + $ pack + $ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " + <> "AppleWebKit/537.36 (KHTML, like Gecko) " + <> "Chrome/136.0.0.0 Safari/537.36" + +getUrlParam :: (Read a) => Text -> Handler (Maybe a) +getUrlParam name = do + fmap parseMaybe (lookupGetParam name) + where + parseMaybe x = readMaybe . unpack =<< x + +getUrlSessionParam :: + forall a. + (Show a, Read a) => + Text -> + Handler (Maybe a) +getUrlSessionParam name = do + p <- fmap parseMaybe (lookupGetParam name) + s <- fmap parseMaybe (lookupSession name) + for_ p (setSession name . (pack . show)) + pure (p <|> s) + where + parseMaybe :: Maybe Text -> Maybe a + parseMaybe x = readMaybe . unpack =<< x + +lookupTagCloudMode :: (MonadHandler m) => m (Maybe TagCloudMode) +lookupTagCloudMode = do + (A.decode . fromStrict =<<) <$> lookupSessionBS "tagCloudMode" + +setTagCloudMode :: (MonadHandler m) => TagCloudMode -> m () +setTagCloudMode = setSessionBS "tagCloudMode" . toStrict . A.encode + +getTagCloudMode :: (MonadHandler m) => Bool -> Bool -> [Tag] -> m TagCloudMode +getTagCloudMode isowner publicTagCloud tags = do + ms <- lookupTagCloudMode + let expanded = maybe False isExpanded ms + if not isowner && not publicTagCloud + then pure TagCloudModeNone + else if not (null tags) + then pure $ TagCloudModeRelated False tags + else pure $ case ms of + Nothing -> TagCloudModeTop expanded + Just (TagCloudModeRelated e _) -> TagCloudModeTop e + Just (TagCloudModeRelatedLowerBound e _ _) -> TagCloudModeTop e + Just m -> m
src/Handler/Edit.hs view
@@ -1,50 +1,81 @@-{-# OPTIONS_GHC -fno-warn-unused-matches #-}--module Handler.Edit where--import Database.Persist.Sql-import Import---- routes--deleteDeleteR :: Int64 -> Handler Html-deleteDeleteR bid = do- userId <- requireAuthId- runDB do- let k_bid = toSqlKey bid- _ <- requireResource userId k_bid- delete k_bid- return ""--postReadR :: Int64 -> Handler Html-postReadR bid = do- userId <- requireAuthId- runDB do- let k_bid = toSqlKey bid- _ <- requireResource userId k_bid- update k_bid [BookmarkToRead =. False]- return ""--postStarR :: Int64 -> Handler Html-postStarR bid = _setSelected bid True--postUnstarR :: Int64 -> Handler Html-postUnstarR bid = _setSelected bid False---- common--_setSelected :: Int64 -> Bool -> Handler Html-_setSelected bid selected = do- userId <- requireAuthId- runDB do- let k_bid = toSqlKey bid- bm <- requireResource userId k_bid- update k_bid [BookmarkSelected =. selected]- pure ""--requireResource :: UserId -> Key Bookmark -> DBM Handler Bookmark-requireResource userId k_bid = do- bmark <- get404 k_bid- if userId == bookmarkUserId bmark- then return bmark- else notFound+{-# OPTIONS_GHC -fno-warn-unused-matches #-} + +module Handler.Edit where + +import Data.Text qualified as T +import Database.Persist.Sql +import Import + +-- routes + +patchStarR :: Int64 -> Handler Html +patchStarR bid = _setSelected bid True + +patchUnstarR :: Int64 -> Handler Html +patchUnstarR bid = _setSelected bid False + +patchReadR :: Int64 -> Handler Html +patchReadR bid = do + userId <- requireAuthId + runDB do + let k_bid = toSqlKey bid + _ <- _requireResource userId k_bid + update k_bid [BookmarkToRead =. False] + return "" + +deleteDeleteR :: Int64 -> Handler Html +deleteDeleteR bid = do + userId <- requireAuthId + runDB do + let k_bid = toSqlKey bid + _ <- _requireResource userId k_bid + delete k_bid + return "" + +postBmBulkR :: Handler () +postBmBulkR = do + app <- getYesod + (userId, user) <- requireAuthPair + let lang = fromMaybe (appLanguageDefault (appSettings app)) (userLanguage user) + t key = appTranslate app lang (I18nKey key) + bmBulkForm <- requireCheckJsonBody + result <- runDB $ bookmarksBulkEdit userId bmBulkForm + case result of + Left err -> sendResponseStatus status409 (translateBulkEditError t err) + Right editedCount -> do + let tsuffix = if editedCount == 1 then "_one" else "_other" + if (editedCount == _beSelectionCount bmBulkForm) + then + setMessage + $ (fromString . unpack) + $ T.replace "{{editedCount}}" (tshow editedCount) + $ t ("bulkEdit.editedCount" <> tsuffix) + else + setMessage + $ (fromString . unpack) + $ T.replace "{{selectionCount}}" (tshow (_beSelectionCount bmBulkForm)) + $ T.replace "{{editedCount}}" (tshow editedCount) + $ t ("bulkEdit.editedCountMismatch" <> tsuffix) + sendResponseStatus ok200 (object ["editedCount" .= editedCount]) + where + translateBulkEditError t = \case + BulkEditErrorPageMismatch -> + t "bulkEdit.pageMismatch" + +-- common + +_setSelected :: Int64 -> Bool -> Handler Html +_setSelected bid selected = do + userId <- requireAuthId + runDB do + let k_bid = toSqlKey bid + bm <- _requireResource userId k_bid + update k_bid [BookmarkSelected =. selected] + pure "" + +_requireResource :: UserId -> Key Bookmark -> DBM Handler Bookmark +_requireResource userId k_bid = do + bmark <- get404 k_bid + if userId == bookmarkUserId bmark + then return bmark + else notFound
src/Handler/Notes.hs view
@@ -1,269 +1,272 @@-{-# OPTIONS_GHC -fno-warn-unused-matches #-}--module Handler.Notes where--import Data.Aeson qualified as A-import Data.Text qualified as T-import Handler.Common-import Import-import Network.Wai.Internal qualified as W-import Text.Blaze.Html5 qualified as H-import Yesod.RssFeed--getNotesR :: UserNameP -> Handler Html-getNotesR unamep@(UserNameP uname) = do- app <- getYesod- muser <- fmap entityVal <$> maybeAuth- let lang = fromMaybe (appLanguageDefault (appSettings app)) (muser >>= userLanguage)- frontendBundleName = appFrontendBundleName app- t = \key -> appTranslate app lang (I18nKey key)- mauthuname <- maybeAuthUsername- (limit', page') <- lookupPagingParams- let queryp = "query"- beforep = pagingCursorBeforeParam- afterp = pagingCursorAfterParam- mquery <- lookupGetParam queryp- mcursor <- parsePagingCursorParams (fmap PagingCursorBefore . parsePagingCursorTime) (fmap PagingCursorAfter . parsePagingCursorTime) <$> lookupGetParam beforep <*> lookupGetParam afterp- let limit = maybe 20 fromIntegral limit'- page = maybe 1 fromIntegral page'- mqueryp = fmap (queryp,) mquery- isowner = Just uname == mauthuname- (bcount, notes, hasEarlier, hasLater) <- runDB do- Entity userId user <- getBy404 (UniqueUserName uname)- let sharedp = if isowner then SharedAll else SharedPublic- when- (not isowner && userPrivacyLock user)- (redirect (AuthR LoginR))- getNoteList userId mquery mcursor sharedp limit page- let mfirstNote = headMay notes- mlastNote = lastMay notes- mqueryEarlierp =- fmap- (beforep,)- (formatEntityPagingCursorTimeNt <$> mlastNote)- mqueryLaterp =- fmap- (afterp,)- (formatEntityPagingCursorTimeNt <$> mfirstNote)- req <- getRequest- mroute <- getCurrentRoute- defaultLayout do- rssLink (NotesFeedR unamep) "feed"- let pager = $(widgetFile "pager")- search = $(widgetFile "search")- renderEl = "notes" :: Text- $(widgetFile "notes")- toWidgetBody- [julius|- app.userR = "@{UserR unamep}";- app.dat.notes = #{ toJSON notes } || [];- app.dat.isowner = #{ isowner };- |]- toWidget- [hamlet|- <script type="module">- import { renderNotes } from '@{StaticR (StaticRoute ["js", frontendBundleName] [])}'- renderNotes('##{renderEl}')(app.dat.notes)();- |]--getNoteR :: UserNameP -> NtSlug -> Handler Html-getNoteR unamep@(UserNameP uname) slug = do- frontendBundleName <- appFrontendBundleName <$> getYesod- mauthuname <- maybeAuthUsername- let renderEl = "note" :: Text- isowner = Just uname == mauthuname- note <-- runDB- $ do- Entity userId user <- getBy404 (UniqueUserName uname)- mnote <- getNote userId slug- note <- maybe notFound pure mnote- when- (not isowner && (userPrivacyLock user || (not . noteShared . entityVal) note))- (redirect (AuthR LoginR))- pure note- defaultLayout do- $(widgetFile "note")- toWidgetBody- [julius|- app.userR = "@{UserR unamep}";- app.dat.note = #{ toJSON note } || [];- app.dat.isowner = #{ isowner };- |]- toWidget- [hamlet|- <script type="module">- import { renderNote } from '@{StaticR (StaticRoute ["js", frontendBundleName] [])}'- renderNote('##{renderEl}')(app.dat.note)();- |]--getAddNoteSlimViewR :: Handler Html-getAddNoteSlimViewR = do- Entity userId user <- requireAuth- getAddNoteViewR (UserNameP (userName user))--getAddNoteViewR :: UserNameP -> Handler Html-getAddNoteViewR unamep@(UserNameP uname) = do- frontendBundleName <- appFrontendBundleName <$> getYesod- userId <- requireAuthId- note <- liftIO . _toNote userId =<< noteFormUrl- let renderEl = "note" :: Text- enote = Entity (NoteKey 0) note- defaultLayout do- $(widgetFile "note")- toWidgetBody- [julius|- app.userR = "@{UserR unamep}";- app.noteR = "@{NoteR unamep (noteSlug (entityVal enote))}";- app.dat.note = #{ toJSON enote } || [];- |]- toWidget- [hamlet|- <script type="module">- import { renderNote } from '@{StaticR (StaticRoute ["js", frontendBundleName] [])}'- renderNote('##{renderEl}')(app.dat.note)();- |]--deleteDeleteNoteR :: Int64 -> Handler Html-deleteDeleteNoteR nid = do- userId <- requireAuthId- runDB do- let k_nid = toSqlKey nid- _ <- requireResource userId k_nid- delete k_nid- return ""--postAddNoteR :: Handler Text-postAddNoteR = do- noteForm <- requireCheckJsonBody- _handleFormSuccess noteForm >>= \case- Created nid -> sendStatusJSON created201 nid- Updated _ -> sendResponseStatus noContent204 ()- Failed s -> sendResponseStatus status400 s--requireResource :: UserId -> Key Note -> DBM Handler Note-requireResource userId k_nid = do- nnote <- get404 k_nid- if userId == noteUserId nnote- then return nnote- else notFound--_handleFormSuccess :: NoteForm -> Handler (UpsertResult (Key Note))-_handleFormSuccess noteForm = do- userId <- requireAuthId- note <- liftIO $ _toNote userId noteForm- runDB (upsertNote userId knid note)- where- knid = toSqlKey <$> (_id noteForm >>= \i -> if i > 0 then Just i else Nothing)--data NoteForm = NoteForm- { _id :: Maybe Int64,- _slug :: Maybe NtSlug,- _title :: Maybe Text,- _text :: Maybe Textarea,- _isMarkdown :: Maybe Bool,- _shared :: Maybe Bool,- _created :: Maybe UTCTimeStr,- _updated :: Maybe UTCTimeStr- }- deriving (Show, Eq, Read, Generic)--instance FromJSON NoteForm where parseJSON = A.genericParseJSON gNoteFormOptions--instance ToJSON NoteForm where toJSON = A.genericToJSON gNoteFormOptions--gNoteFormOptions :: A.Options-gNoteFormOptions = A.defaultOptions {A.fieldLabelModifier = drop 1}--noteFormUrl :: Handler NoteForm-noteFormUrl = do- title <- lookupGetParam "title"- description <- lookupGetParam "description" <&> fmap Textarea- isMarkdown <- lookupGetParam "isMarkdown" <&> fmap parseChk- pure- $ NoteForm- { _id = Nothing,- _slug = Nothing,- _title = title,- _text = description,- _isMarkdown = isMarkdown,- _shared = Nothing,- _created = Nothing,- _updated = Nothing- }- where- parseChk s = s == "yes" || s == "on" || s == "true" || s == "1"--_toNote :: UserId -> NoteForm -> IO Note-_toNote userId NoteForm {..} = do- time <- liftIO getCurrentTime- slug <- maybe mkNtSlug pure _slug- pure- $ Note- { noteUserId = userId,- noteSlug = slug,- noteLength = length _text,- noteTitle = fromMaybe "" _title,- noteText = maybe "" unTextarea _text,- noteIsMarkdown = Just True == _isMarkdown,- noteShared = Just True == _shared,- noteCreated = maybe time unUTCTimeStr _created,- noteUpdated = maybe time unUTCTimeStr _updated- }--noteToRssEntry :: (Route App -> Text) -> UserNameP -> Entity Note -> FeedEntry Text-noteToRssEntry render usernamep (Entity entryId entry) =- FeedEntry- { feedEntryLink = render $ NoteR usernamep (noteSlug entry),- feedEntryUpdated = noteUpdated entry,- feedEntryTitle = noteTitle entry,- feedEntryContent = toHtml (noteText entry),- feedEntryEnclosure = Nothing,- feedEntryCategories = []- }--getNotesFeedR :: UserNameP -> Handler RepRss-getNotesFeedR unamep@(UserNameP uname) = do- mauthuname <- maybeAuthUsername- (limit', page') <- lookupPagingParams- mquery <- lookupGetParam "query"- mbefore <- lookupGetParam pagingCursorBeforeParam- mafter <- lookupGetParam pagingCursorAfterParam- let mcursor = parsePagingCursorParams (fmap PagingCursorBefore . parsePagingCursorTime) (fmap PagingCursorAfter . parsePagingCursorTime) mbefore mafter- let limit = maybe 20 fromIntegral limit'- page = maybe 1 fromIntegral page'- isowner = Just uname == mauthuname- sharedp = if isowner then SharedAll else SharedPublic- (_, notes, _, _) <- runDB do- Entity userId user <- getBy404 (UniqueUserName uname)- when- (not isowner && userPrivacyLock user)- (redirect (AuthR LoginR))- getNoteList userId mquery mcursor sharedp limit page- render <- getUrlRender- let (descr :: Html) = toHtml $ H.text (uname <> " notes")- entries = map (noteToRssEntry render unamep) notes- updated <- case maximumMay (map feedEntryUpdated entries) of- Nothing -> liftIO getCurrentTime- Just m -> return m- (feedLinkSelf, feedLinkHome) <- getFeedLinkSelf- rssFeedText- $ Feed- { feedTitle = uname <> " notes",- feedLinkSelf = feedLinkSelf,- feedLinkHome = feedLinkHome,- feedAuthor = uname,- feedDescription = descr,- feedLanguage = "en",- feedUpdated = updated,- feedLogo = Nothing,- feedEntries = entries- }- where- getFeedLinkSelf = do- request <- getRequest- render <- getUrlRender- let rawRequest = reqWaiRequest request- feedLinkSelf = render HomeR <> (T.drop 1 (decodeUtf8 (W.rawPathInfo rawRequest <> W.rawQueryString rawRequest)))- feedLinkHome = render (UserR unamep)- pure (feedLinkSelf, feedLinkHome)+{-# OPTIONS_GHC -fno-warn-unused-matches #-} + +module Handler.Notes where + +import Data.Aeson qualified as A +import Data.Text qualified as T +import Handler.Common +import Import +import Network.Wai.Internal qualified as W +import Text.Blaze.Html5 qualified as H +import Yesod.RssFeed + +getNotesR :: UserNameP -> Handler Html +getNotesR unamep@(UserNameP uname) = do + app <- getYesod + muser <- fmap entityVal <$> maybeAuth + let lang = fromMaybe (appLanguageDefault (appSettings app)) (muser >>= userLanguage) + frontendBundleName = appFrontendBundleName app + t = \key -> appTranslate app lang (I18nKey key) + tc = \key n -> + let suffix = if n == (1 :: Int) then "_one" else "_other" + in T.replace "{{count}}" (tshow n) (t (key <> suffix)) + mauthuname <- maybeAuthUsername + (limit', page') <- lookupPagingParams + let queryp = "query" + beforep = pagingCursorBeforeParam + afterp = pagingCursorAfterParam + mquery <- lookupGetParam queryp + mcursor <- parsePagingCursorParams (fmap PagingCursorBefore . parsePagingCursorTime) (fmap PagingCursorAfter . parsePagingCursorTime) <$> lookupGetParam beforep <*> lookupGetParam afterp + let limit = maybe 20 fromIntegral limit' + page = maybe 1 fromIntegral page' + mqueryp = fmap (queryp,) mquery + isowner = Just uname == mauthuname + (bcount, notes, hasEarlier, hasLater) <- runDB do + Entity userId user <- getBy404 (UniqueUserName uname) + let sharedp = if isowner then SharedAll else SharedPublic + when + (not isowner && userPrivacyLock user) + (redirect (AuthR LoginR)) + getNoteList userId mquery mcursor sharedp limit page + let mfirstNote = headMay notes + mlastNote = lastMay notes + mqueryEarlierp = + fmap + (beforep,) + (formatEntityPagingCursorTimeNt <$> mlastNote) + mqueryLaterp = + fmap + (afterp,) + (formatEntityPagingCursorTimeNt <$> mfirstNote) + req <- getRequest + mroute <- getCurrentRoute + defaultLayout do + rssLink (NotesFeedR unamep) "feed" + let pager = $(widgetFile "pager") + search = $(widgetFile "search") + renderEl = "notes" :: Text + $(widgetFile "notes") + toWidgetBody + [julius| + app.userR = "@{UserR unamep}"; + app.dat.notes = #{ toJSON notes } || []; + app.dat.isowner = #{ isowner }; + |] + toWidget + [hamlet| + <script type="module"> + import { renderNotes } from '@{StaticR (StaticRoute ["js", frontendBundleName] [])}' + renderNotes('##{renderEl}')(app.dat.notes)(); + |] + +getNoteR :: UserNameP -> NtSlug -> Handler Html +getNoteR unamep@(UserNameP uname) slug = do + frontendBundleName <- appFrontendBundleName <$> getYesod + mauthuname <- maybeAuthUsername + let renderEl = "note" :: Text + isowner = Just uname == mauthuname + note <- + runDB + $ do + Entity userId user <- getBy404 (UniqueUserName uname) + mnote <- getNote userId slug + note <- maybe notFound pure mnote + when + (not isowner && (userPrivacyLock user || (not . noteShared . entityVal) note)) + (redirect (AuthR LoginR)) + pure note + defaultLayout do + $(widgetFile "note") + toWidgetBody + [julius| + app.userR = "@{UserR unamep}"; + app.dat.note = #{ toJSON note } || []; + app.dat.isowner = #{ isowner }; + |] + toWidget + [hamlet| + <script type="module"> + import { renderNote } from '@{StaticR (StaticRoute ["js", frontendBundleName] [])}' + renderNote('##{renderEl}')(app.dat.note)(); + |] + +getAddNoteSlimViewR :: Handler Html +getAddNoteSlimViewR = do + Entity userId user <- requireAuth + getAddNoteViewR (UserNameP (userName user)) + +getAddNoteViewR :: UserNameP -> Handler Html +getAddNoteViewR unamep@(UserNameP uname) = do + frontendBundleName <- appFrontendBundleName <$> getYesod + userId <- requireAuthId + note <- liftIO . _toNote userId =<< noteFormUrl + let renderEl = "note" :: Text + enote = Entity (NoteKey 0) note + defaultLayout do + $(widgetFile "note") + toWidgetBody + [julius| + app.userR = "@{UserR unamep}"; + app.noteR = "@{NoteR unamep (noteSlug (entityVal enote))}"; + app.dat.note = #{ toJSON enote } || []; + |] + toWidget + [hamlet| + <script type="module"> + import { renderNote } from '@{StaticR (StaticRoute ["js", frontendBundleName] [])}' + renderNote('##{renderEl}')(app.dat.note)(); + |] + +deleteDeleteNoteR :: Int64 -> Handler Html +deleteDeleteNoteR nid = do + userId <- requireAuthId + runDB do + let k_nid = toSqlKey nid + _ <- requireResource userId k_nid + delete k_nid + return "" + +postAddNoteR :: Handler Text +postAddNoteR = do + noteForm <- requireCheckJsonBody + _handleFormSuccess noteForm >>= \case + Created nid -> sendStatusJSON created201 nid + Updated _ -> sendResponseStatus noContent204 () + Failed s -> sendResponseStatus status400 s + +requireResource :: UserId -> Key Note -> DBM Handler Note +requireResource userId k_nid = do + nnote <- get404 k_nid + if userId == noteUserId nnote + then return nnote + else notFound + +_handleFormSuccess :: NoteForm -> Handler (UpsertResult (Key Note)) +_handleFormSuccess noteForm = do + userId <- requireAuthId + note <- liftIO $ _toNote userId noteForm + runDB (upsertNote userId knid note) + where + knid = toSqlKey <$> (_id noteForm >>= \i -> if i > 0 then Just i else Nothing) + +data NoteForm = NoteForm + { _id :: Maybe Int64, + _slug :: Maybe NtSlug, + _title :: Maybe Text, + _text :: Maybe Textarea, + _isMarkdown :: Maybe Bool, + _shared :: Maybe Bool, + _created :: Maybe UTCTimeStr, + _updated :: Maybe UTCTimeStr + } + deriving (Show, Eq, Read, Generic) + +instance FromJSON NoteForm where parseJSON = A.genericParseJSON gNoteFormOptions + +instance ToJSON NoteForm where toJSON = A.genericToJSON gNoteFormOptions + +gNoteFormOptions :: A.Options +gNoteFormOptions = A.defaultOptions {A.fieldLabelModifier = drop 1} + +noteFormUrl :: Handler NoteForm +noteFormUrl = do + title <- lookupGetParam "title" + description <- lookupGetParam "description" <&> fmap Textarea + isMarkdown <- lookupGetParam "isMarkdown" <&> fmap parseChk + pure + $ NoteForm + { _id = Nothing, + _slug = Nothing, + _title = title, + _text = description, + _isMarkdown = isMarkdown, + _shared = Nothing, + _created = Nothing, + _updated = Nothing + } + where + parseChk s = s == "yes" || s == "on" || s == "true" || s == "1" + +_toNote :: UserId -> NoteForm -> IO Note +_toNote userId NoteForm {..} = do + time <- liftIO getCurrentTime + slug <- maybe mkNtSlug pure _slug + pure + $ Note + { noteUserId = userId, + noteSlug = slug, + noteLength = length _text, + noteTitle = fromMaybe "" _title, + noteText = maybe "" unTextarea _text, + noteIsMarkdown = Just True == _isMarkdown, + noteShared = Just True == _shared, + noteCreated = maybe time unUTCTimeStr _created, + noteUpdated = maybe time unUTCTimeStr _updated + } + +noteToRssEntry :: (Route App -> Text) -> UserNameP -> Entity Note -> FeedEntry Text +noteToRssEntry render usernamep (Entity entryId entry) = + FeedEntry + { feedEntryLink = render $ NoteR usernamep (noteSlug entry), + feedEntryUpdated = noteUpdated entry, + feedEntryTitle = noteTitle entry, + feedEntryContent = toHtml (noteText entry), + feedEntryEnclosure = Nothing, + feedEntryCategories = [] + } + +getNotesFeedR :: UserNameP -> Handler RepRss +getNotesFeedR unamep@(UserNameP uname) = do + mauthuname <- maybeAuthUsername + (limit', page') <- lookupPagingParams + mquery <- lookupGetParam "query" + mbefore <- lookupGetParam pagingCursorBeforeParam + mafter <- lookupGetParam pagingCursorAfterParam + let mcursor = parsePagingCursorParams (fmap PagingCursorBefore . parsePagingCursorTime) (fmap PagingCursorAfter . parsePagingCursorTime) mbefore mafter + let limit = maybe 20 fromIntegral limit' + page = maybe 1 fromIntegral page' + isowner = Just uname == mauthuname + sharedp = if isowner then SharedAll else SharedPublic + (_, notes, _, _) <- runDB do + Entity userId user <- getBy404 (UniqueUserName uname) + when + (not isowner && userPrivacyLock user) + (redirect (AuthR LoginR)) + getNoteList userId mquery mcursor sharedp limit page + render <- getUrlRender + let (descr :: Html) = toHtml $ H.text (uname <> " notes") + entries = map (noteToRssEntry render unamep) notes + updated <- case maximumMay (map feedEntryUpdated entries) of + Nothing -> liftIO getCurrentTime + Just m -> return m + (feedLinkSelf, feedLinkHome) <- getFeedLinkSelf + rssFeedText + $ Feed + { feedTitle = uname <> " notes", + feedLinkSelf = feedLinkSelf, + feedLinkHome = feedLinkHome, + feedAuthor = uname, + feedDescription = descr, + feedLanguage = "en", + feedUpdated = updated, + feedLogo = Nothing, + feedEntries = entries + } + where + getFeedLinkSelf = do + request <- getRequest + render <- getUrlRender + let rawRequest = reqWaiRequest request + feedLinkSelf = render HomeR <> (T.drop 1 (decodeUtf8 (W.rawPathInfo rawRequest <> W.rawQueryString rawRequest))) + feedLinkHome = render (UserR unamep) + pure (feedLinkSelf, feedLinkHome)
src/Handler/User.hs view
@@ -1,218 +1,266 @@-{-# OPTIONS_GHC -fno-warn-unused-matches #-}--module Handler.User where--import Data.Aeson.Encoding (encodingToLazyByteString)-import Data.Map qualified as Map-import Data.Text qualified as T-import Handler.Common-import Import-import Network.Wai.Internal qualified as W-import Text.Blaze.Html5 qualified as H-import Yesod.RssFeed--getUserR :: UserNameP -> Handler Html-getUserR uname =- _getUser uname SharedAll FilterAll (TagsP [])--getUserSharedR :: UserNameP -> SharedP -> Handler Html-getUserSharedR uname sharedp =- _getUser uname sharedp FilterAll (TagsP [])--getUserFilterR :: UserNameP -> FilterP -> Handler Html-getUserFilterR uname filterp =- _getUser uname SharedAll filterp (TagsP [])--getUserTagsR :: UserNameP -> TagsP -> Handler Html-getUserTagsR uname = _getUser uname SharedAll FilterAll--_getUser :: UserNameP -> SharedP -> FilterP -> TagsP -> Handler Html-_getUser unamep@(UserNameP uname) sharedp' filterp' (TagsP pathtags) = do- app <- getYesod- muser <- fmap entityVal <$> maybeAuth- let lang = fromMaybe (appLanguageDefault (appSettings app)) (muser >>= userLanguage)- t = \key -> appTranslate app lang (I18nKey key)- frontendBundleName = appFrontendBundleName app- (limit', page') <- lookupPagingParams- let limit = maybe 120 fromIntegral limit'- page = maybe 1 fromIntegral page'- isowner = Just uname == fmap userName muser- sharedp = if isowner then sharedp' else SharedPublic- filterp = case filterp' of- FilterSingle _ -> filterp'- _ -> if isowner then filterp' else FilterAll- isAll = filterp == FilterAll && sharedp == SharedAll && null pathtags- queryp = "query" :: Text- beforep = pagingCursorBeforeParam- afterp = pagingCursorAfterParam- mquery <- lookupGetParam queryp- mcursor <-- parsePagingCursorParams- (fmap PagingCursorBefore . parsePagingCursorTime)- (fmap PagingCursorAfter . parsePagingCursorTime)- <$> lookupGetParam beforep- <*> lookupGetParam afterp- (suggestTags, bcount, btmarks, hasEarlier, hasLater) <- runDB $ do- Entity userId user <- getBy404 (UniqueUserName uname)- when- (not isowner && userPrivacyLock user)- (redirect (AuthR LoginR))- (bcount, btmarks, hasEarlier, hasLater) <-- bookmarksTagsQuery userId isowner sharedp filterp pathtags mquery mcursor limit page- pure (userSuggestTags user, bcount, btmarks, hasEarlier, hasLater)- when (bcount == 0) (case filterp of FilterSingle _ -> notFound; _ -> pure ())- mroute <- getCurrentRoute- tagCloudMode <- getTagCloudMode isowner pathtags- req <- getRequest- let archiveBackendEnabled = isJust (appArchiver app)- mfirstBookmark = headMay (map fst btmarks)- mlastBookmark = lastMay (map fst btmarks)- mqueryEarlierp =- fmap- (beforep,)- (formatEntityPagingCursorTimeBm <$> mlastBookmark)- mqueryLaterp =- fmap- (afterp,)- (formatEntityPagingCursorTimeBm <$> mfirstBookmark)- mqueryp = fmap (queryp,) mquery- renderEl = "bookmarks" :: Text- tagCloudRenderEl = "tagCloud" :: Text-- defaultLayout do- let pager = $(widgetFile "pager")- search = $(widgetFile "search")- rssLink (UserFeedR unamep) "feed"- $(widgetFile "user")- toWidgetBody- [julius|- app.dat.bmarks = #{ toRawJs $ toBookmarkFormListForViewer isowner btmarks } || [];- app.dat.isowner = #{ isowner };- app.dat.suggestTags = #{ suggestTags };- app.dat.archiveBackendEnabled = #{ archiveBackendEnabled };- app.dat.filter = #{ toJSON filterp' } || {};- app.userR = "@{UserR unamep}";- app.tagCloudMode = #{ toJSON $ tagCloudMode } || {};- |]- toWidget- [hamlet|- <script type="module">- import { renderBookmarks, renderTagCloud } from '@{StaticR (StaticRoute ["js", frontendBundleName] [])}'- setTimeout(() => {- renderBookmarks('##{renderEl}')(app.dat.bmarks)();- }, 0);- setTimeout(() => {- renderTagCloud('##{tagCloudRenderEl}')(app.tagCloudMode)();- }, 0);- |]- where- toRawJs = rawJS . decodeUtf8 . encodingToLazyByteString . toEncoding---- Form--postUserTagCloudR :: Handler ()-postUserTagCloudR = do- userId <- requireAuthId- mode <- requireCheckJsonBody- _updateTagCloudMode mode- tc <- runDB $ case mode of- TagCloudModeTop _ n -> tagCountTop userId n- TagCloudModeLowerBound _ n -> tagCountLowerBound userId n- TagCloudModeRelated _ tags -> tagCountRelated userId tags- TagCloudModeNone -> notFound- sendStatusJSON ok200 (Map.fromList tc :: Map.Map Text Int)--postUserTagCloudModeR :: Handler ()-postUserTagCloudModeR = do- userId <- requireAuthId- mode <- requireCheckJsonBody- _updateTagCloudMode mode--_updateTagCloudMode :: TagCloudMode -> Handler ()-_updateTagCloudMode mode =- case mode of- TagCloudModeTop _ _ -> setTagCloudMode mode- TagCloudModeLowerBound _ _ -> setTagCloudMode mode- TagCloudModeRelated _ _ -> setTagCloudMode mode- TagCloudModeNone -> notFound--bookmarkToRssEntry :: (Entity Bookmark, Maybe Text) -> FeedEntry Text-bookmarkToRssEntry (Entity entryId entry, tags) =- FeedEntry- { feedEntryLink = bookmarkHref entry,- feedEntryUpdated = bookmarkTime entry,- feedEntryTitle = bookmarkDescription entry,- feedEntryContent = toHtml (bookmarkExtended entry),- feedEntryCategories = map (EntryCategory Nothing Nothing) (maybe [] words tags),- feedEntryEnclosure = Nothing- }--getUserFeedR :: UserNameP -> Handler RepRss-getUserFeedR unamep = do- _getUserFeed unamep SharedAll FilterAll (TagsP [])--getUserFeedSharedR :: UserNameP -> SharedP -> Handler RepRss-getUserFeedSharedR uname sharedp =- _getUserFeed uname sharedp FilterAll (TagsP [])--getUserFeedFilterR :: UserNameP -> FilterP -> Handler RepRss-getUserFeedFilterR uname filterp =- _getUserFeed uname SharedAll filterp (TagsP [])--getUserFeedTagsR :: UserNameP -> TagsP -> Handler RepRss-getUserFeedTagsR uname = _getUserFeed uname SharedAll FilterAll--_getUserFeed :: UserNameP -> SharedP -> FilterP -> TagsP -> Handler RepRss-_getUserFeed unamep@(UserNameP uname) sharedp' filterp' (TagsP pathtags) = do- mauthuname <- maybeAuthUsername- (limit', page') <- lookupPagingParams- let limit = maybe 120 fromIntegral limit'- page = maybe 1 fromIntegral page'- isowner = Just uname == mauthuname- sharedp = if isowner then sharedp' else SharedPublic- filterp = case filterp' of- FilterSingle _ -> filterp'- _ -> if isowner then filterp' else FilterAll- -- isAll = filterp == FilterAll && sharedp == SharedAll && null pathtags- queryp = "query" :: Text- beforep = pagingCursorBeforeParam- afterp = pagingCursorAfterParam- mquery <- lookupGetParam queryp- mcursor <-- parsePagingCursorParams- (fmap PagingCursorBefore . parsePagingCursorTime)- (fmap PagingCursorAfter . parsePagingCursorTime)- <$> lookupGetParam beforep- <*> lookupGetParam afterp- (_, btmarks, _, _) <- runDB $ do- Entity userId user <- getBy404 (UniqueUserName uname)- when- (not isowner && userPrivacyLock user)- (redirect (AuthR LoginR))- bookmarksTagsQuery userId isowner sharedp filterp pathtags mquery mcursor limit page- let (descr :: Html) = toHtml $ H.text ("Bookmarks saved by " <> uname)- entries = map bookmarkToRssEntry btmarks- updated <- case maximumMay (map feedEntryUpdated entries) of- Nothing -> liftIO getCurrentTime- Just m -> return m- (feedLinkSelf, feedLinkHome) <- getFeedLinkSelf- rssFeedText- $ Feed- { feedTitle = "espial " <> uname,- feedLinkSelf = feedLinkSelf,- feedLinkHome = feedLinkHome,- feedAuthor = uname,- feedDescription = descr,- feedLanguage = "en",- feedUpdated = updated,- feedLogo = Nothing,- feedEntries = entries- }- where- getFeedLinkSelf = do- request <- getRequest- render <- getUrlRender- let rawRequest = reqWaiRequest request- feedLinkSelf = render HomeR <> (T.drop 1 (decodeUtf8 (W.rawPathInfo rawRequest <> W.rawQueryString rawRequest)))- feedLinkHome = render (UserR unamep)- pure (feedLinkSelf, feedLinkHome)+{-# OPTIONS_GHC -fno-warn-unused-matches #-} + +module Handler.User where + +import Data.Aeson.Encoding (encodingToLazyByteString) +import Data.Map qualified as Map +import Data.Text qualified as T +import Data.Time (diffUTCTime) +import Handler.Common +import Import +import Network.Wai.Internal qualified as W +import Text.Blaze.Html5 qualified as H +import Yesod.RssFeed + +getUserR :: UserNameP -> Handler Html +getUserR uname = + _getUser uname SharedAll FilterAll (TagsP []) + +getUserSharedR :: UserNameP -> SharedP -> Handler Html +getUserSharedR uname sharedp = + _getUser uname sharedp FilterAll (TagsP []) + +getUserFilterR :: UserNameP -> FilterP -> Handler Html +getUserFilterR uname filterp = + _getUser uname SharedAll filterp (TagsP []) + +getUserTagsR :: UserNameP -> TagsP -> Handler Html +getUserTagsR uname = _getUser uname SharedAll FilterAll + +_getUser :: UserNameP -> SharedP -> FilterP -> TagsP -> Handler Html +_getUser unamep@(UserNameP uname) sharedp' filterp' (TagsP pathtags) = do + app <- getYesod + muser <- fmap entityVal <$> maybeAuth + let lang = fromMaybe (appLanguageDefault (appSettings app)) (muser >>= userLanguage) + t = \key -> appTranslate app lang (I18nKey key) + frontendBundleName = appFrontendBundleName app + (limit', page') <- lookupPagingParams + let limit = maybe 120 fromIntegral limit' + page = maybe 1 fromIntegral page' + isowner = Just uname == fmap userName muser + sharedp = if isowner then sharedp' else SharedPublic + filterp = case filterp' of + FilterSingle _ -> filterp' + _ -> if isowner then filterp' else FilterAll + isAll = filterp == FilterAll && sharedp == SharedAll && null pathtags + queryp = "query" :: Text + beforep = pagingCursorBeforeParam + afterp = pagingCursorAfterParam + mquery <- lookupGetParam queryp + mcursor <- + parsePagingCursorParams + (fmap PagingCursorBefore . parsePagingCursorTime) + (fmap PagingCursorAfter . parsePagingCursorTime) + <$> lookupGetParam beforep + <*> lookupGetParam afterp + (suggestTags, publicTagCloud, bcount, btmarks, hasEarlier, hasLater) <- runDB $ do + Entity userId user <- getBy404 (UniqueUserName uname) + when + (not isowner && userPrivacyLock user) + (redirect (AuthR LoginR)) + (bcount, btmarks, hasEarlier, hasLater) <- + bookmarksTagsQuery userId isowner sharedp filterp pathtags mquery mcursor limit page + pure (userSuggestTags user, userPublicTagCloud user, bcount, btmarks, hasEarlier, hasLater) + when (bcount == 0) (case filterp of FilterSingle _ -> notFound; _ -> pure ()) + mroute <- getCurrentRoute + tagCloudMode <- getTagCloudMode isowner publicTagCloud pathtags + render <- getUrlRender + let archiveBackendEnabled = isJust (appArchiver app) + mfirstBookmark = headMay (map fst btmarks) + mlastBookmark = lastMay (map fst btmarks) + mqueryEarlierp = + fmap + (beforep,) + (formatEntityPagingCursorTimeBm <$> mlastBookmark) + mqueryLaterp = + fmap + (afterp,) + (formatEntityPagingCursorTimeBm <$> mfirstBookmark) + mqueryp = fmap (queryp,) mquery + renderEl = "bookmarks" :: Text + tagCloudRenderEl = "tagCloud" :: Text + showTagCloud = isowner || publicTagCloud + tagCloudUrl :: Text + tagCloudUrl + | isowner = render UserTagCloudR + | publicTagCloud = render (UserPublicTagCloudR unamep) + | otherwise = "" + + defaultLayout do + let pager = $(widgetFile "pager") + search = $(widgetFile "search") + rssLink (UserFeedR unamep) "feed" + $(widgetFile "user") + toWidgetBody + [julius| + app.dat.bmarks = #{ toRawJs $ toBookmarkFormListForViewer isowner btmarks } || []; + app.dat.bcount = #{ toJSON bcount }; + app.dat.isowner = #{ isowner }; + app.dat.suggestTags = #{ suggestTags }; + app.dat.archiveBackendEnabled = #{ archiveBackendEnabled }; + app.dat.filter = #{ toJSON filterp } || {}; + app.dat.sharedp = #{ toJSON sharedp }; + app.dat.tags = #{ toJSON pathtags }; + app.dat.query = #{ toJSON mquery }; + app.userR = "@{UserR unamep}"; + app.tagCloudMode = #{ toJSON $ tagCloudMode } || {}; + app.tagCloudR = #{toJSON tagCloudUrl}; + |] + toWidget + [hamlet| + <script type="module"> + import { renderBookmarks, renderTagCloud, renderBulkEdit } from '@{StaticR (StaticRoute ["js", frontendBundleName] [])}' + setTimeout(() => { + renderBookmarks('##{renderEl}')(app.dat.bmarks)(); + }, 0); + setTimeout(() => { + renderTagCloud('##{tagCloudRenderEl}')(app.tagCloudMode)(); + }, 0); + $if isowner + setTimeout(() => { + renderBulkEdit('#bulkEditRenderEl')(app.dat.bcount)(); + }, 0); + |] + where + toRawJs = rawJS . decodeUtf8 . encodingToLazyByteString . toEncoding + +-- Form + +postUserTagCloudR :: Handler () +postUserTagCloudR = do + userId <- requireAuthId + mode <- requireCheckJsonBody + _updateTagCloudMode mode + tc <- runDB $ case mode of + TagCloudModeTop _ -> tagCountTop userId True + TagCloudModeTopLowerBound _ n -> tagCountLowerBound userId n True + TagCloudModeRelated _ tags -> tagCountRelated userId tags True + TagCloudModeRelatedLowerBound _ tags lb -> tagCountRelatedLowerBound userId tags lb True + TagCloudModeNone -> pure [] + sendStatusJSON ok200 (Map.fromList tc :: Map.Map Text Int) + +postUserPublicTagCloudR :: UserNameP -> Handler () +postUserPublicTagCloudR (UserNameP uname) = do + Entity userId user <- runDB $ getBy404 (UniqueUserName uname) + unless (userPublicTagCloud user) notFound + when (userPrivacyLock user) notFound + mode <- requireCheckJsonBody + _updateTagCloudMode mode + app' <- getYesod + let cacheRef = appPublicTagCloudCache app' + ttl = fromIntegral (appPublicTagCloudCacheDurationSeconds (appSettings app')) + now <- liftIO getCurrentTime + cacheMap <- liftIO $ readIORef cacheRef + case Map.lookup (uname, mode) cacheMap of + Just (storedAt, tc) + | diffUTCTime now storedAt < ttl -> + sendStatusJSON ok200 tc + _ -> do + tcList <- runDB $ case mode of + TagCloudModeTop _ -> tagCountTop userId False + TagCloudModeTopLowerBound _ n -> tagCountLowerBound userId n False + TagCloudModeRelated _ tags -> tagCountRelated userId tags False + TagCloudModeRelatedLowerBound _ tags lb -> tagCountRelatedLowerBound userId tags lb False + TagCloudModeNone -> pure [] + let tc = Map.fromList tcList + liftIO $ atomicModifyIORef' cacheRef $ \m -> + let pruned = Map.filter (\(t, _) -> diffUTCTime now t < ttl) m + evicted = if Map.size pruned >= 1000 then Map.deleteMin pruned else pruned + in (Map.insert (uname, mode) (now, tc) evicted, ()) + sendStatusJSON ok200 tc + +postUserTagCloudModeR :: Handler () +postUserTagCloudModeR = do + userId <- requireAuthId + mode <- requireCheckJsonBody + _updateTagCloudMode mode + +_updateTagCloudMode :: TagCloudMode -> Handler () +_updateTagCloudMode mode = + case mode of + TagCloudModeTop _ -> setTagCloudMode mode + TagCloudModeTopLowerBound _ _ -> setTagCloudMode mode + TagCloudModeRelated _ _ -> pure () + TagCloudModeRelatedLowerBound _ _ _ -> pure () + TagCloudModeNone -> notFound + +bookmarkToRssEntry :: (Entity Bookmark, Maybe Text) -> FeedEntry Text +bookmarkToRssEntry (Entity entryId entry, tags) = + FeedEntry + { feedEntryLink = bookmarkHref entry, + feedEntryUpdated = bookmarkTime entry, + feedEntryTitle = bookmarkDescription entry, + feedEntryContent = toHtml (bookmarkExtended entry), + feedEntryCategories = map (EntryCategory Nothing Nothing) (maybe [] words tags), + feedEntryEnclosure = Nothing + } + +getUserFeedR :: UserNameP -> Handler RepRss +getUserFeedR unamep = do + _getUserFeed unamep SharedAll FilterAll (TagsP []) + +getUserFeedSharedR :: UserNameP -> SharedP -> Handler RepRss +getUserFeedSharedR uname sharedp = + _getUserFeed uname sharedp FilterAll (TagsP []) + +getUserFeedFilterR :: UserNameP -> FilterP -> Handler RepRss +getUserFeedFilterR uname filterp = + _getUserFeed uname SharedAll filterp (TagsP []) + +getUserFeedTagsR :: UserNameP -> TagsP -> Handler RepRss +getUserFeedTagsR uname = _getUserFeed uname SharedAll FilterAll + +_getUserFeed :: UserNameP -> SharedP -> FilterP -> TagsP -> Handler RepRss +_getUserFeed unamep@(UserNameP uname) sharedp' filterp' (TagsP pathtags) = do + mauthuname <- maybeAuthUsername + (limit', page') <- lookupPagingParams + let limit = maybe 120 fromIntegral limit' + page = maybe 1 fromIntegral page' + isowner = Just uname == mauthuname + sharedp = if isowner then sharedp' else SharedPublic + filterp = case filterp' of + FilterSingle _ -> filterp' + _ -> if isowner then filterp' else FilterAll + -- isAll = filterp == FilterAll && sharedp == SharedAll && null pathtags + queryp = "query" :: Text + beforep = pagingCursorBeforeParam + afterp = pagingCursorAfterParam + mquery <- lookupGetParam queryp + mcursor <- + parsePagingCursorParams + (fmap PagingCursorBefore . parsePagingCursorTime) + (fmap PagingCursorAfter . parsePagingCursorTime) + <$> lookupGetParam beforep + <*> lookupGetParam afterp + (_, btmarks, _, _) <- runDB $ do + Entity userId user <- getBy404 (UniqueUserName uname) + when + (not isowner && userPrivacyLock user) + (redirect (AuthR LoginR)) + bookmarksTagsQuery userId isowner sharedp filterp pathtags mquery mcursor limit page + let (descr :: Html) = toHtml $ H.text ("Bookmarks saved by " <> uname) + entries = map bookmarkToRssEntry btmarks + updated <- case maximumMay (map feedEntryUpdated entries) of + Nothing -> liftIO getCurrentTime + Just m -> return m + (feedLinkSelf, feedLinkHome) <- getFeedLinkSelf + rssFeedText + $ Feed + { feedTitle = "espial " <> uname, + feedLinkSelf = feedLinkSelf, + feedLinkHome = feedLinkHome, + feedAuthor = uname, + feedDescription = descr, + feedLanguage = "en", + feedUpdated = updated, + feedLogo = Nothing, + feedEntries = entries + } + where + getFeedLinkSelf = do + request <- getRequest + render <- getUrlRender + let rawRequest = reqWaiRequest request + feedLinkSelf = render HomeR <> (T.drop 1 (decodeUtf8 (W.rawPathInfo rawRequest <> W.rawQueryString rawRequest))) + feedLinkHome = render (UserR unamep) + pure (feedLinkSelf, feedLinkHome)
src/Model.hs view
@@ -1,712 +1,972 @@-{-# LANGUAGE DerivingVia #-}-{-# LANGUAGE UndecidableInstances #-}--module Model where--import ClassyPrelude.Yesod hiding (Value, exists, groupBy, on, (<=.), (==.), (>=.), (||.))-import ClassyPrelude.Yesod qualified as CP-import Control.Monad (fail)-import Control.Monad.Combinators qualified as PC (between)-import Control.Monad.Fail (MonadFail)-import Control.Monad.Trans.Maybe (MaybeT (..), runMaybeT)-import Data.Aeson qualified as A-import Data.Aeson.KeyMap qualified as KM-import Data.Aeson.Types qualified as A (parseFail)-import Data.Attoparsec.Text qualified as P-import Data.Char (isSpace)-import Data.Either (fromRight)-import Data.Foldable (foldl, foldl1, sequenceA_)-import Data.Time qualified as TI (ParseTime)-import Data.Time.ISO8601 qualified as TISO (formatISO8601Millis, parseISO8601)-import Database.Esqueleto.Experimental hiding ((<&>))-import Database.Esqueleto.Internal.Internal (unsafeSqlFunction)-import Model.Custom-import Text.Blaze (ToMarkup, toMarkup)-import Types-import Util---- * Database models--share- [mkPersist sqlSettings, mkMigrate "migrateSchema"]- [persistLowerCase|--AppMigration- dbVersion Int- migrationDescription Text- appVersionSpec Text- appliedAt UTCTime- UniqueAppMigrationDbVersion dbVersion- deriving Show Eq Typeable Ord--AppVersion- appVersionSpec Text- appVersion Text- appGitSha Text- created UTCTime- deriving Show Eq Typeable Ord--User json- name Text- passwordHash BCrypt- apiToken HashedApiKey Maybe- privateDefault Bool- archiveDefault Bool- suggestTags Bool default=True- privacyLock Bool- language I18nLang Maybe- UniqueUserName name- deriving Show Eq Typeable Ord--Bookmark json- userId UserId OnDeleteCascade- slug BmSlug default="(lower(hex(randomblob(6))))"- href Text- description Text- extended Text- time UTCTime- shared Bool- toRead Bool- selected Bool- archiveHref Text Maybe- UniqueUserHref userId href- UniqueUserSlug userId slug- deriving Show Eq Typeable Ord--BookmarkTag json- userId UserId OnDeleteCascade- tag Text- bookmarkId BookmarkId OnDeleteCascade- seq Int- UniqueUserTagBookmarkId userId tag bookmarkId- UniqueUserBookmarkIdTagSeq userId bookmarkId tag seq- deriving Show Eq Typeable Ord--Note json- userId UserId OnDeleteCascade- slug NtSlug default="(lower(hex(randomblob(10))))"- length Int- title Text- text Text- isMarkdown Bool- shared Bool default=False- created UTCTime- updated UTCTime- deriving Show Eq Typeable Ord-|]---- * Custom types--newtype UserAgent- = UserAgent {unUserAgent :: Text}- deriving (Eq, Show, Read)--newtype Url- = Url {unUrl :: Text}- deriving (Eq, Show, Read)--type Limit = Int64--type Page = Int64---- Path/Routing Types--newtype UTCTimeStr- = UTCTimeStr {unUTCTimeStr :: UTCTime}- deriving (Eq, Show, Read, Generic, FromJSON, ToJSON)--instance PathPiece UTCTimeStr where- toPathPiece (UTCTimeStr u) = pack (TISO.formatISO8601Millis u)- fromPathPiece s = UTCTimeStr <$> TISO.parseISO8601 (unpack s)--newtype UserNameP- = UserNameP {unUserNameP :: Text}- deriving (Eq, Show, Read)--newtype TagsP- = TagsP {unTagsP :: [Text]}- deriving (Eq, Show, Read)--data SharedP- = SharedAll- | SharedPublic- | SharedPrivate- deriving (Eq, Show, Read)--data FilterP- = FilterAll- | FilterUnread- | FilterUntagged- | FilterStarred- | FilterSingle BmSlug- deriving (Eq, Show, Read, Generic)--instance FromJSON FilterP where parseJSON = A.genericParseJSON A.defaultOptions--instance ToJSON FilterP where toJSON = A.genericToJSON A.defaultOptions---- * Paging--data PagingCursor a- = PagingCursorBefore a- | PagingCursorAfter a- deriving (Eq, Show, Read)--type BookmarkPagingCursor = PagingCursor BookmarkId--type BookmarkPagingCursorTime = PagingCursor UTCTime--type NotePagingCursor = PagingCursor NoteId--type NotePagingCursorTime = PagingCursor UTCTime---- * I18n---- | Translation map: language -> namespace -> key -> translation-type I18nMap = HashMap I18nLang (HashMap I18nNs (HashMap I18nKey Text))---- | Translation namespace-newtype I18nNs = I18nNs {unI18nNs :: Text} deriving (Eq, Ord, Show, Hashable, FromJSON, ToJSON)---- | Translation key-newtype I18nKey = I18nKey {unI18nKey :: Text} deriving (Eq, Ord, Show, Hashable)---- | Supported languages for translation-data I18nLang- = -- | English- I18nLangEn- | -- | German- I18nLangDe- | -- | Spanish- I18nLangEs- | -- | French- I18nLangFr- | -- | Italian- I18nLangIt- | -- | Japanese- I18nLangJa- | -- | Korean- I18nLangKo- | -- | Polish- I18nLangPl- | -- | Portuguese (Brazil)- I18nLangPtBr- | -- | Russian- I18nLangRu- | -- | Turkish- I18nLangTr- | -- | Ukrainian- I18nLangUk- | -- | Chinese (Simplified)- I18nLangZhHans- | -- | Chinese (Traditional)- I18nLangZhHant- deriving (Eq, Ord, Enum, Bounded, Generic)--instance Hashable I18nLang where hashWithSalt s = hashWithSalt s . fromEnum--instance ToMarkup I18nLang where toMarkup = toMarkup . fromI18nLang'--instance PersistField I18nLang where- toPersistValue = PersistText . fromI18nLang'- fromPersistValue (PersistText t) =- maybe - (Right I18nLangEn) -- in case of version downgrade, default to English if the language is not recognized- Right - (toI18nLang t)- fromPersistValue _ = Left "Invalid PersistValue for I18nLang"--instance PersistFieldSql I18nLang where sqlType _ = SqlString--fromI18nLang :: (IsString a) => I18nLang -> a-fromI18nLang = \case- I18nLangEn -> "en"- I18nLangDe -> "de"- I18nLangEs -> "es"- I18nLangFr -> "fr"- I18nLangIt -> "it"- I18nLangJa -> "ja"- I18nLangKo -> "ko"- I18nLangPl -> "pl"- I18nLangPtBr -> "pt-BR"- I18nLangRu -> "ru"- I18nLangTr -> "tr"- I18nLangUk -> "uk"- I18nLangZhHans -> "zh-Hans"- I18nLangZhHant -> "zh-Hant"--fromI18nLang' :: I18nLang -> Text-fromI18nLang' = fromI18nLang--toI18nLang :: (Ord s, IsString s) => s -> Maybe I18nLang-toI18nLang s = inverseMap fromI18nLang s--instance Show I18nLang where show = fromI18nLang--instance ToJSON I18nLang where toJSON = A.String . fromI18nLang--instance FromJSON I18nLang where- parseJSON = A.withText "I18nLang" $ \s ->- maybe- (fail $ "Invalid language: '" <> unpack s <> "'. Supported languages: " <> supportedLangs)- pure- (toI18nLang s)--supportedLangs :: String-supportedLangs = intercalate ", " (fmap fromI18nLang [minBound .. maxBound])---- * Model functions--sqliteGroupConcat ::- (PersistField a) =>- SqlExpr (Value a) ->- SqlExpr (Value a) ->- SqlExpr (Value Text)-sqliteGroupConcat expr sep = unsafeSqlFunction "GROUP_CONCAT" [expr, sep]--authenticatePassword :: Text -> Text -> DB (Maybe (Entity User))-authenticatePassword username password = do- getBy (UniqueUserName username) >>= \case- Nothing -> pure Nothing- Just dbuser ->- if validatePasswordHash (userPasswordHash (entityVal dbuser)) password- then pure (Just dbuser)- else pure Nothing--getUserByName :: UserNameP -> DB (Maybe (Entity User))-getUserByName (UserNameP uname) =- selectFirst [UserName CP.==. uname] []--getApiKeyUser :: ApiKey -> DB (Maybe (Entity User))-getApiKeyUser apiKey =- selectFirst [UserApiToken CP.==. Just (hashApiKey apiKey)] []---- returns a list of pair of bookmark with tags merged into a string-bookmarksTagsQuery ::- Key User ->- Bool ->- SharedP ->- FilterP ->- [Tag] ->- Maybe Text ->- Maybe BookmarkPagingCursorTime ->- Limit ->- Page ->- DB (Int, [(Entity Bookmark, Maybe Text)], Bool, Bool)-bookmarksTagsQuery userId isowner sharedp filterp tags mquery mcursor limit' page = do- total <-- fmap- (sum . fmap unValue)- ( select $ from (table @Bookmark) >>= \b -> do- _whereClause b- pure countRows- )- rows <-- (fmap . fmap . fmap)- unValue- ( select $ from (table @Bookmark) >>= \b -> do- _whereClause b- for_ mcursor $ \case- PagingCursorBefore before -> where_ (isBeforeCursor b before)- PagingCursorAfter after -> where_ (isAfterCursor b after)- orderBy (bookmarkOrder b)- limit (limit' + 1) -- fetch one extra row to determine if there are more rows in the given direction- offset ((page - 1) * limit')- pure- ( b,- subSelect $ from (table @BookmarkTag) >>= \t -> do- where_ (t ^. BookmarkTagBookmarkId ==. b ^. BookmarkId)- when- (not isowner)- (where_ (not_ (t ^. BookmarkTagTag `like` val ".%")))- groupBy (t ^. BookmarkTagBookmarkId)- orderBy [asc (t ^. BookmarkTagSeq)]- pure $ sqliteGroupConcat (t ^. BookmarkTagTag) (val " ")- )- )- let hasMoreInQueryDirection = fromIntegral (length rows) > limit'- pageRows = take (fromIntegral limit') rows- hasEarlier =- case mcursor of- Just (PagingCursorAfter _) -> not (null pageRows)- _ -> hasMoreInQueryDirection- hasLater =- case mcursor of- Just (PagingCursorAfter _) -> hasMoreInQueryDirection- Just (PagingCursorBefore _) -> not (null pageRows)- Nothing -> False- pure (total, finalizeRows pageRows, hasEarlier, hasLater)- where- _whereClause b = do- where_- $ foldl- ( \expr tag ->- expr- &&. exists- ( -- each tag becomes an exists constraint- from (table @BookmarkTag) >>= \t ->- where_- ( t ^. BookmarkTagBookmarkId ==. b ^. BookmarkId- &&. (t ^. BookmarkTagTag `like` val tag)- )- )- )- (b ^. BookmarkUserId ==. val userId)- tags- case sharedp of- SharedAll -> pure ()- SharedPublic -> where_ (b ^. BookmarkShared ==. val True)- SharedPrivate -> where_ (b ^. BookmarkShared ==. val False)- case filterp of- FilterAll -> pure ()- FilterUnread -> where_ (b ^. BookmarkToRead ==. val True)- FilterStarred -> where_ (b ^. BookmarkSelected ==. val True)- FilterSingle slug -> where_ (b ^. BookmarkSlug ==. val slug)- FilterUntagged ->- where_ $ notExists $ from (table @BookmarkTag) >>= \t ->- where_ $ t ^. BookmarkTagBookmarkId ==. b ^. BookmarkId- sequenceA_ (parseSearchQuery (toLikeExpr b) =<< mquery)- toLikeExpr b term = fromRight p_allFields (P.parseOnly p_onefield term)- where- wild s = (%) ++. val s ++. (%)- toLikeB field s = b ^. field `like` wild s- p_allFields =- toLikeB BookmarkHref term- ||. toLikeB BookmarkDescription term- ||. toLikeB BookmarkExtended term- ||. exists- ( from (table @BookmarkTag) >>= \t ->- where_- $ (t ^. BookmarkTagBookmarkId ==. b ^. BookmarkId)- &&. (t ^. BookmarkTagTag `like` wild term)- )- p_onefield = p_url <|> p_title <|> p_description <|> p_tags <|> p_after <|> p_before- where- p_url = ("url:" <|> "u:") *> fmap (toLikeB BookmarkHref) P.takeText- p_title = ("title:" <|> "ti:") *> fmap (toLikeB BookmarkDescription) P.takeText- p_description = ("description:" <|> "d:") *> fmap (toLikeB BookmarkExtended) P.takeText- p_tags =- ("tags:" <|> "t:")- *> fmap- ( \term' ->- exists $ from (table @BookmarkTag) >>= \t ->- where_- $ (t ^. BookmarkTagBookmarkId ==. b ^. BookmarkId)- &&. (t ^. BookmarkTagTag `like` wild term')- )- P.takeText- p_after = ("after:" <|> "a:") *> fmap ((b ^. BookmarkTime >=.) . val) (parseTimeText =<< P.takeText)- p_before = ("before:" <|> "b:") *> fmap ((b ^. BookmarkTime <=.) . val) (parseTimeText =<< P.takeText)- bookmarkOrder b = case mcursor of- Just (PagingCursorAfter _) -> [asc (b ^. BookmarkTime), asc (b ^. BookmarkId)]- _ -> [desc (b ^. BookmarkTime), desc (b ^. BookmarkId)]- finalizeRows = case mcursor of- Just (PagingCursorAfter _) -> reverse -- because of asc order fetch for after cursor, reverse to get newest first order- _ -> id- isBeforeCursor b before =- ((b ^. BookmarkTime) Database.Esqueleto.Experimental.<. val before)- isAfterCursor b after =- ((b ^. BookmarkTime) Database.Esqueleto.Experimental.>. val after)---- returns a list of pair of bookmark with tags merged into a string-allUserBookmarks :: Key User -> DB [(Entity Bookmark, Text)]-allUserBookmarks user =- (fmap . fmap . fmap) (fromMaybe "" . unValue)- $ select- $ do- b <- from (table @Bookmark)- where_ (b ^. BookmarkUserId ==. val user)- orderBy [asc (b ^. BookmarkTime)]- pure- ( b,- subSelect $ from (table @BookmarkTag) >>= \t -> do- where_ (t ^. BookmarkTagBookmarkId ==. b ^. BookmarkId)- groupBy (t ^. BookmarkTagBookmarkId)- orderBy [asc (t ^. BookmarkTagSeq)]- pure $ sqliteGroupConcat (t ^. BookmarkTagTag) (val " ")- )--parseSearchQuery ::- (Text -> SqlExpr (Value Bool)) ->- Text ->- Maybe (SqlQuery ())-parseSearchQuery toExpr =- fmap where_ . either (const Nothing) Just . P.parseOnly andE- where- andE = foldl1 (&&.) <$> P.many1 (P.skipSpace *> orE <|> tokenTermE)- orE = foldl1 (||.) <$> tokenTermE `P.sepBy1` P.char '|'- tokenTermE = negE termE <|> termE- where- negE p = not_ <$> (P.char '-' *> p)- termE = toExpr <$> (fieldTerm <|> quotedTerm <|> simpleTerm)- fieldTerm = concat <$> sequence [simpleTerm, P.string ":", quotedTerm <|> simpleTerm]- quotedTerm = PC.between (P.char '"') (P.char '"') (P.takeWhile1 (/= '"'))- simpleTerm = P.takeWhile1 (\c -> not (isSpace c) && c /= ':' && c /= '|')--parseTimeText :: (TI.ParseTime t, MonadFail m, Alternative m) => Text -> m t-parseTimeText t =- asum- $ flip (parseTimeM True defaultTimeLocale) (unpack t)- <$> [ "%FT%T%Q%Z", -- 2018-12-31T23:59:59.123Z (iso8601 with timezone)- "%FT%T%Q", -- 2018-12-31T23:59:59.123 (iso8601 without timezone)- "%F %T%Q", -- 2018-12-31 23:59:59.123- "%F %T%Q %Z", -- 2018-12-31 23:59:59.123 UTC- "%F", -- 2018-12-31- "%-m/%-d/%Y", -- 12/31/2018- "%s", -- 1535932800- "%s%Q" -- 1535932800.123- ]--withTags :: Key Bookmark -> DB [Entity BookmarkTag]-withTags key = selectList [BookmarkTagBookmarkId CP.==. key] [Asc BookmarkTagSeq]---- Note List Query--getNote :: Key User -> NtSlug -> DB (Maybe (Entity Note))-getNote userKey slug =- selectFirst [NoteUserId CP.==. userKey, NoteSlug CP.==. slug] []--getNoteList :: Key User -> Maybe Text -> Maybe NotePagingCursorTime -> SharedP -> Limit -> Page -> DB (Int, [Entity Note], Bool, Bool)-getNoteList key mquery mcursor sharedp limit' page = do- total <-- fmap- (sum . fmap unValue)- ( select $ do- b <- from (table @Note)- _whereClause b- pure countRows- )- rows <-- select $ do- b <- from (table @Note)- _whereClause b- for_ mcursor $ \case- PagingCursorBefore before -> where_ (isBeforeCursor b before)- PagingCursorAfter after -> where_ (isAfterCursor b after)- orderBy (noteOrder b)- limit (limit' + 1) -- fetch one extra row to determine if there are more rows in the given direction- offset ((page - 1) * limit')- pure b- let hasMoreInQueryDirection = fromIntegral (length rows) > limit'- pageRows = take (fromIntegral limit') rows- hasEarlier =- case mcursor of- Just (PagingCursorAfter _) -> not (null pageRows)- _ -> hasMoreInQueryDirection- hasLater =- case mcursor of- Just (PagingCursorAfter _) -> hasMoreInQueryDirection- Just (PagingCursorBefore _) -> not (null pageRows)- Nothing -> False- pure (total, finalizeRows pageRows, hasEarlier, hasLater)- where- _whereClause b = do- where_ (b ^. NoteUserId ==. val key)- -- search- sequenceA_ (parseSearchQuery (toLikeExpr b) =<< mquery)- case sharedp of- SharedAll -> pure ()- SharedPublic -> where_ (b ^. NoteShared ==. val True)- SharedPrivate -> where_ (b ^. NoteShared ==. val False)- toLikeExpr b term = fromRight p_allFields (P.parseOnly p_onefield term)- where- wild s = (%) ++. val s ++. (%)- toLikeN field s = b ^. field `like` wild s- p_allFields = toLikeN NoteTitle term ||. toLikeN NoteText term- p_onefield = p_title <|> p_text <|> p_after <|> p_before- where- p_title = ("title:" <|> "ti:") *> fmap (toLikeN NoteTitle) P.takeText- p_text = ("description:" <|> "d:") *> fmap (toLikeN NoteText) P.takeText- p_after = ("after:" <|> "a:") *> fmap ((b ^. NoteCreated >=.) . val) (parseTimeText =<< P.takeText)- p_before = ("before:" <|> "b:") *> fmap ((b ^. NoteCreated <=.) . val) (parseTimeText =<< P.takeText)- noteOrder b =- case mcursor of- Just (PagingCursorAfter _) -> [asc (b ^. NoteCreated), asc (b ^. NoteId)]- _ -> [desc (b ^. NoteCreated), desc (b ^. NoteId)]- finalizeRows =- case mcursor of- Just (PagingCursorAfter _) -> reverse -- because of asc order fetch for after cursor, reverse to get newest first order- _ -> id- isBeforeCursor b before =- (b ^. NoteCreated) Database.Esqueleto.Experimental.<. val before- isAfterCursor b after =- (b ^. NoteCreated) Database.Esqueleto.Experimental.>. val after--mkBookmarkTags :: Key User -> Key Bookmark -> [Tag] -> [BookmarkTag]-mkBookmarkTags userId bookmarkId tags =- (\(i, tag) -> BookmarkTag userId tag bookmarkId i) <$> zip [1 ..] tags---- * Bookmark Tag Cloud--data TagCloudMode- = TagCloudModeTop Bool Int -- { mode: "top", value: 200 }- | TagCloudModeLowerBound Bool Int -- { mode: "lowerBound", value: 20 }- | TagCloudModeRelated Bool [Tag]- | TagCloudModeNone- deriving (Show, Eq, Read, Generic)--isExpanded :: TagCloudMode -> Bool-isExpanded (TagCloudModeTop e _) = e-isExpanded (TagCloudModeLowerBound e _) = e-isExpanded (TagCloudModeRelated e _) = e-isExpanded TagCloudModeNone = False--instance FromJSON TagCloudMode where- parseJSON (Object o) =- case KM.lookup "mode" o of- Just (String "top") -> TagCloudModeTop <$> o .: "expanded" <*> o .: "value"- Just (String "lowerBound") -> TagCloudModeLowerBound <$> o .: "expanded" <*> o .: "value"- Just (String "related") -> TagCloudModeRelated <$> o .: "expanded" <*> fmap words (o .: "value")- Just (String "none") -> pure TagCloudModeNone- _ -> A.parseFail "bad parse"- parseJSON _ = A.parseFail "bad parse"--instance ToJSON TagCloudMode where- toJSON (TagCloudModeTop e i) =- object- [ "mode" .= String "top",- "value" .= toJSON i,- "expanded" .= Bool e- ]- toJSON (TagCloudModeLowerBound e i) =- object- [ "mode" .= String "lowerBound",- "value" .= toJSON i,- "expanded" .= Bool e- ]- toJSON (TagCloudModeRelated e tags) =- object- [ "mode" .= String "related",- "value" .= String (unwords tags),- "expanded" .= Bool e- ]- toJSON TagCloudModeNone =- object- [ "mode" .= String "none",- "value" .= Null,- "expanded" .= Bool False- ]--type Tag = Text--tagCountTop :: Key User -> Int -> DB [(Text, Int)]-tagCountTop user top =- sortOn (toLower . fst)- . fmap (bimap unValue unValue)- <$> ( select $ do- t <- from (table @BookmarkTag)- where_ (t ^. BookmarkTagUserId ==. val user)- groupBy (lower_ $ t ^. BookmarkTagTag)- let countRows' = countRows- orderBy [desc countRows']- limit (fromIntegral top)- pure (t ^. BookmarkTagTag, countRows')- )--tagCountLowerBound :: Key User -> Int -> DB [(Text, Int)]-tagCountLowerBound user lowerBound =- fmap (bimap unValue unValue)- <$> ( select $ do- t <- from (table @BookmarkTag)- where_ (t ^. BookmarkTagUserId ==. val user)- groupBy (lower_ $ t ^. BookmarkTagTag)- let countRows' = countRows- orderBy [asc (t ^. BookmarkTagTag)]- having (countRows' >=. val lowerBound)- pure (t ^. BookmarkTagTag, countRows')- )--tagCountRelated :: Key User -> [Tag] -> DB [(Text, Int)]-tagCountRelated user tags =- fmap (bimap unValue unValue)- <$> ( select $ do- t <- from (table @BookmarkTag)- where_- $ foldl- ( \expr tag ->- expr- &&. exists- ( do- u <- from (table @BookmarkTag)- where_- ( u ^. BookmarkTagBookmarkId ==. t ^. BookmarkTagBookmarkId- &&. (u ^. BookmarkTagTag `like` val tag)- )- )- )- (t ^. BookmarkTagUserId ==. val user)- tags- groupBy (lower_ $ t ^. BookmarkTagTag)- let countRows' = countRows- orderBy [asc $ lower_ $ (t ^. BookmarkTagTag)]- pure (t ^. BookmarkTagTag, countRows')- )--fetchBookmarkByUrl :: Key User -> Maybe Text -> DB (Maybe (Entity Bookmark, [Entity BookmarkTag]))-fetchBookmarkByUrl userId murl = runMaybeT do- bmark <- MaybeT . getBy . UniqueUserHref userId =<< MaybeT (pure murl)- btags <- lift $ withTags (entityKey bmark)- pure (bmark, btags)--data UpsertResult a = Created a | Updated a | Failed String- deriving (Show, Eq, Functor)--maybeUpsertResult :: UpsertResult a -> Maybe a-maybeUpsertResult (Created a) = Just a-maybeUpsertResult (Updated a) = Just a-maybeUpsertResult _ = Nothing--upsertBookmark :: Key User -> Maybe (Key Bookmark) -> Bookmark -> [Text] -> DB (UpsertResult (Key Bookmark))-upsertBookmark userId _ bm _ | userId /= bookmarkUserId bm = pure (Failed "unauthorized")-upsertBookmark userId mbid bm tags = do- res <- case mbid of- Just bid ->- get bid >>= \case- Just prev_bm- | userId == bookmarkUserId prev_bm ->- replaceBookmark bid prev_bm- Just _ -> pure (Failed "unauthorized")- _ -> pure (Failed "not found")- Nothing ->- getBy (UniqueUserHref userId (bookmarkHref bm)) >>= \case- Just (Entity bid prev_bm)- | userId == bookmarkUserId prev_bm ->- replaceBookmark bid prev_bm- Just _ -> pure (Failed "unauthorized")- _ -> Created <$> insert bm- forM_ (maybeUpsertResult res) (insertTags (bookmarkUserId bm))- pure res- where- prepareReplace prev_bm =- if bookmarkHref bm /= bookmarkHref prev_bm- then bm {bookmarkSlug = bookmarkSlug prev_bm, bookmarkArchiveHref = Nothing}- else bm {bookmarkSlug = bookmarkSlug prev_bm, bookmarkArchiveHref = bookmarkArchiveHref prev_bm}- replaceBookmark bid prev_bm = do- replace bid (prepareReplace prev_bm)- deleteTags bid- pure (Updated bid)- deleteTags bid =- deleteWhere [BookmarkTagBookmarkId CP.==. bid]- insertTags userId' bid' =- insertMany_ (mkBookmarkTags userId' bid' tags)--updateBookmarkArchiveUrl :: Key User -> Key Bookmark -> Maybe Text -> DB ()-updateBookmarkArchiveUrl userId bid marchiveUrl =- updateWhere- [BookmarkUserId CP.==. userId, BookmarkId CP.==. bid]- [BookmarkArchiveHref CP.=. marchiveUrl]--upsertNote :: Key User -> Maybe (Key Note) -> Note -> DB (UpsertResult (Key Note))-upsertNote userId mnid note =- case mnid of- Just nid -> do- get nid >>= \case- Just note' -> do- when- (userId /= noteUserId note')- (throwString "unauthorized")- replace nid note- pure (Updated nid)- _ -> throwString "not found"- Nothing -> do- Created <$> insert note+{-# LANGUAGE DerivingVia #-} +{-# LANGUAGE UndecidableInstances #-} + +module Model where + +import ClassyPrelude.Yesod hiding (Value, delete, exists, groupBy, on, update, (<=.), (=.), (==.), (>=.), (||.)) +import ClassyPrelude.Yesod qualified as CP +import Control.Monad (fail) +import Control.Monad.Combinators qualified as PC (between) +import Control.Monad.Fail (MonadFail) +import Control.Monad.Trans.Maybe (MaybeT (..), runMaybeT) +import Data.Aeson qualified as A +import Data.Aeson.KeyMap qualified as KM +import Data.Aeson.Types qualified as A (parseFail) +import Data.Attoparsec.Text qualified as P +import Data.CaseInsensitive (CI) +import Data.CaseInsensitive qualified as CI +import Data.Char (isSpace) +import Data.Either (fromRight) +import Data.Foldable (foldl, foldl1, sequenceA_) +import Data.Map.Strict qualified as Map +import Data.Set qualified as Set +import Data.Text qualified as T +import Data.Time qualified as TI (ParseTime) +import Data.Time.ISO8601 qualified as TISO (formatISO8601Millis, parseISO8601) +import Database.Esqueleto.Experimental hiding ((<&>)) +import Database.Esqueleto.Internal.Internal (unsafeSqlFunction) +import Model.Custom +import Text.Blaze (ToMarkup, toMarkup) +import Types +import Util + +-- * Database models + +share + [mkPersist sqlSettings, mkMigrate "migrateSchema"] + [persistLowerCase| + +AppMigration + dbVersion Int + migrationDescription Text + appVersionSpec Text + appliedAt UTCTime + UniqueAppMigrationDbVersion dbVersion + deriving Show Eq Typeable Ord + +AppVersion + appVersionSpec Text + appVersion Text + appGitSha Text + created UTCTime + deriving Show Eq Typeable Ord + +User json + name Text + passwordHash BCrypt + apiToken HashedApiKey Maybe + privateDefault Bool + archiveDefault Bool + suggestTags Bool default=True + privacyLock Bool + publicTagCloud Bool default=False + language I18nLang Maybe + UniqueUserName name + deriving Show Eq Typeable Ord + +Bookmark json + userId UserId OnDeleteCascade + slug BmSlug default="(lower(hex(randomblob(6))))" + href Text + description Text + extended Text + time UTCTime + shared Bool + toRead Bool + selected Bool + archiveHref Text Maybe + UniqueUserHref userId href + UniqueUserSlug userId slug + deriving Show Eq Typeable Ord + +BookmarkTag json + userId UserId OnDeleteCascade + tag Text + bookmarkId BookmarkId OnDeleteCascade + seq Int + UniqueUserTagBookmarkId userId tag bookmarkId + UniqueUserBookmarkIdTagSeq userId bookmarkId tag seq + deriving Show Eq Typeable Ord + +Note json + userId UserId OnDeleteCascade + slug NtSlug default="(lower(hex(randomblob(10))))" + length Int + title Text + text Text + isMarkdown Bool + shared Bool default=False + created UTCTime + updated UTCTime + deriving Show Eq Typeable Ord +|] + +-- * Custom types + +newtype UserAgent + = UserAgent {unUserAgent :: Text} + deriving (Eq, Show, Read) + +newtype Url + = Url {unUrl :: Text} + deriving (Eq, Show, Read) + +type Limit = Int64 + +type Page = Int64 + +-- Path/Routing Types + +newtype UTCTimeStr + = UTCTimeStr {unUTCTimeStr :: UTCTime} + deriving (Eq, Show, Read, Generic, FromJSON, ToJSON) + +instance PathPiece UTCTimeStr where + toPathPiece (UTCTimeStr u) = pack (TISO.formatISO8601Millis u) + fromPathPiece s = UTCTimeStr <$> TISO.parseISO8601 (unpack s) + +newtype UserNameP + = UserNameP {unUserNameP :: Text} + deriving (Eq, Show, Read) + +newtype TagsP + = TagsP {unTagsP :: [Text]} + deriving (Eq, Show, Read) + +data SharedP + = SharedAll + | SharedPublic + | SharedPrivate + deriving (Eq, Show, Read) + +instance ToJSON SharedP where + toJSON SharedAll = "all" + toJSON SharedPublic = "public" + toJSON SharedPrivate = "private" + +instance FromJSON SharedP where + parseJSON = A.withText "SharedP" \case + "all" -> pure SharedAll + "public" -> pure SharedPublic + "private" -> pure SharedPrivate + _ -> empty + +data FilterP + = FilterAll + | FilterUnread + | FilterUntagged + | FilterStarred + | FilterSingle BmSlug + deriving (Eq, Show, Read, Generic) + +instance FromJSON FilterP where parseJSON = A.genericParseJSON A.defaultOptions + +instance ToJSON FilterP where toJSON = A.genericToJSON A.defaultOptions + +-- * Paging + +data PagingCursor a + = PagingCursorBefore a + | PagingCursorAfter a + deriving (Eq, Show, Read) + +type BookmarkPagingCursor = PagingCursor BookmarkId + +type BookmarkPagingCursorTime = PagingCursor UTCTime + +type NotePagingCursor = PagingCursor NoteId + +type NotePagingCursorTime = PagingCursor UTCTime + +-- * I18n + +-- | Translation map: language -> namespace -> key -> translation +type I18nMap = HashMap I18nLang (HashMap I18nNs (HashMap I18nKey Text)) + +-- | Translation namespace +newtype I18nNs = I18nNs {unI18nNs :: Text} deriving (Eq, Ord, Show, Hashable, FromJSON, ToJSON) + +-- | Translation key +newtype I18nKey = I18nKey {unI18nKey :: Text} deriving (Eq, Ord, Show, Hashable) + +-- | Supported languages for translation +data I18nLang + = -- | English + I18nLangEn + | -- | German + I18nLangDe + | -- | Spanish + I18nLangEs + | -- | French + I18nLangFr + | -- | Italian + I18nLangIt + | -- | Japanese + I18nLangJa + | -- | Korean + I18nLangKo + | -- | Polish + I18nLangPl + | -- | Portuguese (Brazil) + I18nLangPtBr + | -- | Russian + I18nLangRu + | -- | Turkish + I18nLangTr + | -- | Ukrainian + I18nLangUk + | -- | Chinese (Simplified) + I18nLangZhHans + | -- | Chinese (Traditional) + I18nLangZhHant + deriving (Eq, Ord, Enum, Bounded, Generic) + +instance Hashable I18nLang where hashWithSalt s = hashWithSalt s . fromEnum + +instance ToMarkup I18nLang where toMarkup = toMarkup . fromI18nLang' + +instance PersistField I18nLang where + toPersistValue = PersistText . fromI18nLang' + fromPersistValue (PersistText t) = + maybe + (Right I18nLangEn) -- in case of version downgrade, default to English if the language is not recognized + Right + (toI18nLang t) + fromPersistValue _ = Left "Invalid PersistValue for I18nLang" + +instance PersistFieldSql I18nLang where sqlType _ = SqlString + +fromI18nLang :: (IsString a) => I18nLang -> a +fromI18nLang = \case + I18nLangEn -> "en" + I18nLangDe -> "de" + I18nLangEs -> "es" + I18nLangFr -> "fr" + I18nLangIt -> "it" + I18nLangJa -> "ja" + I18nLangKo -> "ko" + I18nLangPl -> "pl" + I18nLangPtBr -> "pt-BR" + I18nLangRu -> "ru" + I18nLangTr -> "tr" + I18nLangUk -> "uk" + I18nLangZhHans -> "zh-Hans" + I18nLangZhHant -> "zh-Hant" + +fromI18nLang' :: I18nLang -> Text +fromI18nLang' = fromI18nLang + +toI18nLang :: (Ord s, IsString s) => s -> Maybe I18nLang +toI18nLang s = inverseMap fromI18nLang s + +instance Show I18nLang where show = fromI18nLang + +instance ToJSON I18nLang where toJSON = A.String . fromI18nLang + +instance FromJSON I18nLang where + parseJSON = A.withText "I18nLang" $ \s -> + maybe + (fail $ "Invalid language: '" <> unpack s <> "'. Supported languages: " <> supportedLangs) + pure + (toI18nLang s) + +supportedLangs :: String +supportedLangs = intercalate ", " (fmap fromI18nLang [minBound .. maxBound]) + +-- * Model functions + +-- | Maximum number of parameters for SQLite queries +sqliteMaxParameters :: Int +sqliteMaxParameters = 32000 + +-- | SQLite GROUP_CONCAT function for concatenating values with a separator +sqliteGroupConcat :: + (PersistField a) => + SqlExpr (Value a) -> + SqlExpr (Value a) -> + SqlExpr (Value Text) +sqliteGroupConcat expr sep = unsafeSqlFunction "GROUP_CONCAT" [expr, sep] + +-- | Case-insensitive exact tag match via SQLite's three-arg like(pattern, string, escape). +-- Equivalent to: col LIKE f v ESCAPE e +sqliteLike :: (Text -> Text) -> Text -> SqlExpr (Value Text) -> Text -> SqlExpr (Value Bool) +sqliteLike f e col v = unsafeSqlFunction "like" [val (f v), col, val e] + +-- Equivalent to: col LIKE escapedTag ESCAPE '\' +sqliteLikeExact :: SqlExpr (Value Text) -> Text -> SqlExpr (Value Bool) +sqliteLikeExact col = sqliteLike escapeLike "\\" col + +-- Equivalent to: col LIKE '%' || escaped_term || '%' ESCAPE '\' +sqliteLikeContains :: SqlExpr (Value Text) -> Text -> SqlExpr (Value Bool) +sqliteLikeContains col = sqliteLike (\v -> "%" <> escapeLike v <> "%") "\\" col + +-- | Escape wildcards in a string for use in a LIKE pattern, so that _ and % match literally. +escapeLike :: Text -> Text +escapeLike = T.replace "_" "\\_" . T.replace "%" "\\%" . T.replace "\\" "\\\\" + +authenticatePassword :: Text -> Text -> DB (Maybe (Entity User)) +authenticatePassword username password = do + getBy (UniqueUserName username) >>= \case + Nothing -> pure Nothing + Just dbuser -> + if validatePasswordHash (userPasswordHash (entityVal dbuser)) password + then pure (Just dbuser) + else pure Nothing + +getUserByName :: UserNameP -> DB (Maybe (Entity User)) +getUserByName (UserNameP uname) = + selectFirst [UserName CP.==. uname] [] + +getApiKeyUser :: ApiKey -> DB (Maybe (Entity User)) +getApiKeyUser apiKey = + selectFirst [UserApiToken CP.==. Just (hashApiKey apiKey)] [] + +-- returns a list of pair of bookmark with tags merged into a string +bookmarksTagsQuery :: + Key User -> + Bool -> + SharedP -> + FilterP -> + [Tag] -> + Maybe Text -> + Maybe BookmarkPagingCursorTime -> + Limit -> + Page -> + DB (Int, [(Entity Bookmark, Maybe Text)], Bool, Bool) +bookmarksTagsQuery userId isowner sharedp filterp tags mquery mcursor limit' page = do + total <- + fmap + (sum . fmap unValue) + ( select $ from (table @Bookmark) >>= \b -> do + bookmarkWhereClause userId sharedp filterp tags mquery b + pure countRows + ) + rows <- + (fmap . fmap . fmap) + unValue + ( select $ from (table @Bookmark) >>= \b -> do + bookmarkWhereClause userId sharedp filterp tags mquery b + for_ mcursor $ \case + PagingCursorBefore before -> where_ (isBeforeCursor b before) + PagingCursorAfter after -> where_ (isAfterCursor b after) + orderBy (bookmarkOrder b) + limit (limit' + 1) -- fetch one extra row to determine if there are more rows in the given direction + offset ((page - 1) * limit') + pure + ( b, + subSelect $ from (table @BookmarkTag) >>= \t -> do + where_ (t ^. BookmarkTagBookmarkId ==. b ^. BookmarkId) + when + (not isowner) + (where_ (not_ (t ^. BookmarkTagTag `like` val ".%"))) + groupBy (t ^. BookmarkTagBookmarkId) + orderBy [asc (t ^. BookmarkTagSeq)] + pure $ sqliteGroupConcat (t ^. BookmarkTagTag) (val " ") + ) + ) + let hasMoreInQueryDirection = fromIntegral (length rows) > limit' + pageRows = take (fromIntegral limit') rows + hasEarlier = + case mcursor of + Just (PagingCursorAfter _) -> not (null pageRows) + _ -> hasMoreInQueryDirection + hasLater = + case mcursor of + Just (PagingCursorAfter _) -> hasMoreInQueryDirection + Just (PagingCursorBefore _) -> not (null pageRows) + Nothing -> False + pure (total, finalizeRows pageRows, hasEarlier, hasLater) + where + bookmarkOrder b = case mcursor of + Just (PagingCursorAfter _) -> [asc (b ^. BookmarkTime), asc (b ^. BookmarkId)] + _ -> [desc (b ^. BookmarkTime), desc (b ^. BookmarkId)] + finalizeRows = case mcursor of + Just (PagingCursorAfter _) -> reverse -- because of asc order fetch for after cursor, reverse to get newest first order + _ -> id + isBeforeCursor b before = + ((b ^. BookmarkTime) Database.Esqueleto.Experimental.<. val before) + isAfterCursor b after = + ((b ^. BookmarkTime) Database.Esqueleto.Experimental.>. val after) + +bookmarkWhereClause :: + Key User -> + SharedP -> + FilterP -> + [Tag] -> + Maybe Text -> + SqlExpr (Entity Bookmark) -> + SqlQuery () +bookmarkWhereClause userId sharedp filterp tags mquery b = do + where_ + $ foldl + ( \expr tag -> + expr + &&. exists + ( from (table @BookmarkTag) >>= \t -> + where_ + ( t ^. BookmarkTagBookmarkId ==. b ^. BookmarkId + &&. sqliteLikeExact (t ^. BookmarkTagTag) tag + ) + ) + ) + (b ^. BookmarkUserId ==. val userId) + tags + case sharedp of + SharedAll -> pure () + SharedPublic -> where_ (b ^. BookmarkShared ==. val True) + SharedPrivate -> where_ (b ^. BookmarkShared ==. val False) + case filterp of + FilterAll -> pure () + FilterUnread -> where_ (b ^. BookmarkToRead ==. val True) + FilterStarred -> where_ (b ^. BookmarkSelected ==. val True) + FilterSingle slug -> where_ (b ^. BookmarkSlug ==. val slug) + FilterUntagged -> + where_ $ notExists $ from (table @BookmarkTag) >>= \t -> + where_ $ t ^. BookmarkTagBookmarkId ==. b ^. BookmarkId + sequenceA_ (parseSearchQuery (bookmarkLikeExpr b) =<< mquery) + +bookmarkLikeExpr :: SqlExpr (Entity Bookmark) -> Text -> SqlExpr (Value Bool) +bookmarkLikeExpr b term = fromRight p_allFields (P.parseOnly p_onefield term) + where + toLikeB field s = sqliteLikeContains (b ^. field) s + p_allFields = + toLikeB BookmarkHref term + ||. toLikeB BookmarkDescription term + ||. toLikeB BookmarkExtended term + ||. exists + ( from (table @BookmarkTag) >>= \t -> + where_ + $ (t ^. BookmarkTagBookmarkId ==. b ^. BookmarkId) + &&. sqliteLikeContains (t ^. BookmarkTagTag) term + ) + p_onefield = p_url <|> p_title <|> p_description <|> p_tags <|> p_after <|> p_before + where + p_url = ("url:" <|> "u:") *> fmap (toLikeB BookmarkHref) P.takeText + p_title = ("title:" <|> "ti:") *> fmap (toLikeB BookmarkDescription) P.takeText + p_description = ("description:" <|> "d:") *> fmap (toLikeB BookmarkExtended) P.takeText + p_tags = + ("tags:" <|> "t:") + *> fmap + ( \term' -> + exists $ from (table @BookmarkTag) >>= \t -> + where_ + $ (t ^. BookmarkTagBookmarkId ==. b ^. BookmarkId) + &&. sqliteLikeContains (t ^. BookmarkTagTag) term' + ) + P.takeText + p_after = ("after:" <|> "a:") *> fmap ((b ^. BookmarkTime >=.) . val) (parseTimeText =<< P.takeText) + p_before = ("before:" <|> "b:") *> fmap ((b ^. BookmarkTime <=.) . val) (parseTimeText =<< P.takeText) + +-- * BulkEdit types + +data BulkEditError + = BulkEditErrorPageMismatch + deriving (Show, Eq) + +data BulkSelection + = BulkSelectionPage + -- | selected bookmark IDs on the current page + [Int64] + | BulkSelectionAll + -- | filter + FilterP + -- | shared + SharedP + -- | tags + [Tag] + -- | query + (Maybe Text) + deriving (Show, Eq) + +data BulkAction = BulkActionRead | BulkActionUnread | BulkActionStar | BulkActionUnstar | BulkActionDelete | BulkActionPrivate | BulkActionPublic + deriving (Show, Eq, Generic) + +data BulkEditForm = BulkEditForm + { _beSelection :: BulkSelection, + _beAction :: Maybe BulkAction, + _beAddTags :: Text, + _beRemoveTags :: Text, + _beSelectionCount :: Int + } + deriving (Show, Eq) + +instance FromJSON BulkAction where + parseJSON = A.withText "BulkAction" \case + "read" -> pure BulkActionRead + "unread" -> pure BulkActionUnread + "star" -> pure BulkActionStar + "unstar" -> pure BulkActionUnstar + "delete" -> pure BulkActionDelete + "private" -> pure BulkActionPrivate + "public" -> pure BulkActionPublic + _ -> empty + +instance FromJSON BulkEditForm where + parseJSON = A.withObject "BulkEditForm" \o -> do + selTag <- o .: "selection" + selection <- case (selTag :: Text) of + "page" -> BulkSelectionPage <$> o .: "bids" + "all" -> + BulkSelectionAll + <$> o + .: "filter" + <*> o + .: "sharedp" + <*> o + .: "tags" + <*> o + A..:? "query" + _ -> fail $ "Unknown selection: " <> unpack selTag + BulkEditForm selection + <$> o + A..:? "action" + <*> o + .: "addTags" + <*> o + .: "removeTags" + <*> o + .: "selectionCount" + +bookmarksBulkEdit :: Key User -> BulkEditForm -> DB (Either BulkEditError Int) +bookmarksBulkEdit userId BulkEditForm {..} = do + eValid <- validateCount + case eValid of + Left err -> return (Left err) + Right n -> do + let removeTags = normalizeTags _beRemoveTags + addTags' = normalizeTags _beAddTags + mTagKbids <- + if null removeTags && null addTags' + then pure Nothing + else Just <$> resolveKbids + forM_ _beAction applyAction + forM_ mTagKbids $ \kbids -> do + unless (null removeTags) $ applyRemoveTags kbids removeTags + unless (null addTags') $ applyAddTags kbids addTags' + return (Right n) + where + toKbids = map (toSqlKey @Bookmark) + + validateCount = case _beSelection of + BulkSelectionPage bids -> + if length bids /= _beSelectionCount + then return $ Left BulkEditErrorPageMismatch + else return (Right (length bids)) + BulkSelectionAll fp sp ts q -> do + result <- + select $ from (table @Bookmark) >>= \b -> do + bookmarkWhereClause userId sp fp ts q b + pure countRows + return $ Right $ maybe 0 unValue (listToMaybe result) + + resolveKbids = case _beSelection of + BulkSelectionPage bids -> return (toKbids bids) + BulkSelectionAll fp sp ts q -> + fmap (map unValue) + $ select + $ from (table @Bookmark) + >>= \b -> do + bookmarkWhereClause userId sp fp ts q b + pure (b ^. BookmarkId) + + applyAction = \case + BulkActionPrivate -> bulkUpdate BookmarkShared False + BulkActionPublic -> bulkUpdate BookmarkShared True + BulkActionRead -> bulkUpdate BookmarkToRead False + BulkActionStar -> bulkUpdate BookmarkSelected True + BulkActionUnread -> bulkUpdate BookmarkToRead True + BulkActionUnstar -> bulkUpdate BookmarkSelected False + BulkActionDelete -> case _beSelection of + BulkSelectionPage bids -> + CP.deleteWhere [BookmarkId CP.<-. toKbids bids, BookmarkUserId CP.==. userId] + BulkSelectionAll fp sp ts q -> + delete $ from (table @Bookmark) >>= bookmarkWhereClause userId sp fp ts q + + bulkUpdate field v = case _beSelection of + BulkSelectionPage bids -> + CP.updateWhere [BookmarkId CP.<-. toKbids bids, BookmarkUserId CP.==. userId] [field CP.=. v] + BulkSelectionAll fp sp ts q -> + update $ \b -> do + set b [field =. val v] + bookmarkWhereClause userId sp fp ts q b + + applyRemoveTags kbids removeTags = + mapM_ + ( \batch -> + delete + $ from (table @BookmarkTag) + >>= \t -> do + where_ (t ^. BookmarkTagBookmarkId `in_` valList batch) + where_ (t ^. BookmarkTagUserId ==. val userId) + where_ + $ foldl1 (||.) + $ map (sqliteLikeExact (t ^. BookmarkTagTag)) removeTags + ) + (batchOf sqliteMaxParameters kbids) + + applyAddTags kbids addTags' = + mapM_ (`addTagsToBids` addTags') (batchOf sqliteMaxParameters kbids) + + addTagsToBids kbids addTags' = do + existingTags <- + selectList + [BookmarkTagBookmarkId CP.<-. kbids, BookmarkTagUserId CP.==. userId] + [Asc BookmarkTagSeq] + let bidTagMap :: Map BookmarkId (Int, Set (CI Tag)) + bidTagMap = + foldl + ( \m (Entity _ bt) -> + let bid = bookmarkTagBookmarkId bt + tag = bookmarkTagTag bt + seq' = bookmarkTagSeq bt + in Map.insertWith + (\(newSeq, newTags) (oldSeq, oldTags) -> (max newSeq oldSeq, Set.union newTags oldTags)) + bid + (seq', Set.singleton (CI.mk tag)) + m + ) + Map.empty + existingTags + newEntries = + kbids >>= \kbid -> + let (maxSeq, existingSet) = Map.findWithDefault (0, Set.empty) kbid bidTagMap + newTags = filter (`Set.notMember` existingSet) (map CI.mk addTags') + in zipWith (\i tag -> BookmarkTag userId tag kbid i) [maxSeq + 1 ..] (map CI.original newTags) + insertMany_ newEntries + +-- returns a list of pair of bookmark with tags merged into a string +allUserBookmarks :: Key User -> DB [(Entity Bookmark, Text)] +allUserBookmarks user = + (fmap . fmap . fmap) (fromMaybe "" . unValue) + $ select + $ do + b <- from (table @Bookmark) + where_ (b ^. BookmarkUserId ==. val user) + orderBy [asc (b ^. BookmarkTime)] + pure + ( b, + subSelect $ from (table @BookmarkTag) >>= \t -> do + where_ (t ^. BookmarkTagBookmarkId ==. b ^. BookmarkId) + groupBy (t ^. BookmarkTagBookmarkId) + orderBy [asc (t ^. BookmarkTagSeq)] + pure $ sqliteGroupConcat (t ^. BookmarkTagTag) (val " ") + ) + +parseSearchQuery :: + (Text -> SqlExpr (Value Bool)) -> + Text -> + Maybe (SqlQuery ()) +parseSearchQuery toExpr = + fmap where_ . either (const Nothing) Just . P.parseOnly andE + where + andE = foldl1 (&&.) <$> P.many1 (P.skipSpace *> orE <|> tokenTermE) + orE = foldl1 (||.) <$> tokenTermE `P.sepBy1` P.char '|' + tokenTermE = negE termE <|> termE + where + negE p = not_ <$> (P.char '-' *> p) + termE = toExpr <$> (fieldTerm <|> quotedTerm <|> simpleTerm) + fieldTerm = concat <$> sequence [simpleTerm, P.string ":", quotedTerm <|> simpleTerm] + quotedTerm = PC.between (P.char '"') (P.char '"') (P.takeWhile1 (/= '"')) + simpleTerm = P.takeWhile1 (\c -> not (isSpace c) && c /= ':' && c /= '|') + +parseTimeText :: (TI.ParseTime t, MonadFail m, Alternative m) => Text -> m t +parseTimeText t = + asum + $ flip (parseTimeM True defaultTimeLocale) (unpack t) + <$> [ "%FT%T%Q%Z", -- 2018-12-31T23:59:59.123Z (iso8601 with timezone) + "%FT%T%Q", -- 2018-12-31T23:59:59.123 (iso8601 without timezone) + "%F %T%Q", -- 2018-12-31 23:59:59.123 + "%F %T%Q %Z", -- 2018-12-31 23:59:59.123 UTC + "%F", -- 2018-12-31 + "%-m/%-d/%Y", -- 12/31/2018 + "%s", -- 1535932800 + "%s%Q" -- 1535932800.123 + ] + +withTags :: Key Bookmark -> DB [Entity BookmarkTag] +withTags key = selectList [BookmarkTagBookmarkId CP.==. key] [Asc BookmarkTagSeq] + +-- Note List Query + +getNote :: Key User -> NtSlug -> DB (Maybe (Entity Note)) +getNote userKey slug = + selectFirst [NoteUserId CP.==. userKey, NoteSlug CP.==. slug] [] + +getNoteList :: Key User -> Maybe Text -> Maybe NotePagingCursorTime -> SharedP -> Limit -> Page -> DB (Int, [Entity Note], Bool, Bool) +getNoteList key mquery mcursor sharedp limit' page = do + total <- + fmap + (sum . fmap unValue) + ( select $ do + b <- from (table @Note) + _whereClause b + pure countRows + ) + rows <- + select $ do + b <- from (table @Note) + _whereClause b + for_ mcursor $ \case + PagingCursorBefore before -> where_ (isBeforeCursor b before) + PagingCursorAfter after -> where_ (isAfterCursor b after) + orderBy (noteOrder b) + limit (limit' + 1) -- fetch one extra row to determine if there are more rows in the given direction + offset ((page - 1) * limit') + pure b + let hasMoreInQueryDirection = fromIntegral (length rows) > limit' + pageRows = take (fromIntegral limit') rows + hasEarlier = + case mcursor of + Just (PagingCursorAfter _) -> not (null pageRows) + _ -> hasMoreInQueryDirection + hasLater = + case mcursor of + Just (PagingCursorAfter _) -> hasMoreInQueryDirection + Just (PagingCursorBefore _) -> not (null pageRows) + Nothing -> False + pure (total, finalizeRows pageRows, hasEarlier, hasLater) + where + _whereClause b = do + where_ (b ^. NoteUserId ==. val key) + -- search + sequenceA_ (parseSearchQuery (toLikeExpr b) =<< mquery) + case sharedp of + SharedAll -> pure () + SharedPublic -> where_ (b ^. NoteShared ==. val True) + SharedPrivate -> where_ (b ^. NoteShared ==. val False) + toLikeExpr b term = fromRight p_allFields (P.parseOnly p_onefield term) + where + toLikeN field s = sqliteLikeContains (b ^. field) s + p_allFields = toLikeN NoteTitle term ||. toLikeN NoteText term + p_onefield = p_title <|> p_text <|> p_after <|> p_before + where + p_title = ("title:" <|> "ti:") *> fmap (toLikeN NoteTitle) P.takeText + p_text = ("description:" <|> "d:") *> fmap (toLikeN NoteText) P.takeText + p_after = ("after:" <|> "a:") *> fmap ((b ^. NoteCreated >=.) . val) (parseTimeText =<< P.takeText) + p_before = ("before:" <|> "b:") *> fmap ((b ^. NoteCreated <=.) . val) (parseTimeText =<< P.takeText) + noteOrder b = + case mcursor of + Just (PagingCursorAfter _) -> [asc (b ^. NoteCreated), asc (b ^. NoteId)] + _ -> [desc (b ^. NoteCreated), desc (b ^. NoteId)] + finalizeRows = + case mcursor of + Just (PagingCursorAfter _) -> reverse -- because of asc order fetch for after cursor, reverse to get newest first order + _ -> id + isBeforeCursor b before = + (b ^. NoteCreated) Database.Esqueleto.Experimental.<. val before + isAfterCursor b after = + (b ^. NoteCreated) Database.Esqueleto.Experimental.>. val after + +mkBookmarkTags :: Key User -> Key Bookmark -> [Tag] -> [BookmarkTag] +mkBookmarkTags userId bookmarkId tags = + (\(i, tag) -> BookmarkTag userId tag bookmarkId i) <$> zip [1 ..] tags + +-- * Bookmark Tag Cloud + +data TagCloudMode + = TagCloudModeTop Bool -- { mode: "top" } + | TagCloudModeTopLowerBound Bool Int -- { mode: "lowerBound", value: 20 } + | TagCloudModeRelated Bool [Tag] -- { mode: "related", value: "tag1 tag2" } + | TagCloudModeRelatedLowerBound Bool [Tag] Int -- { mode: "relatedLowerBound", value: "tag1 tag2", lowerBound: 5 } + | TagCloudModeNone + deriving (Show, Eq, Ord, Read, Generic) + +isExpanded :: TagCloudMode -> Bool +isExpanded (TagCloudModeTop e) = e +isExpanded (TagCloudModeTopLowerBound e _) = e +isExpanded (TagCloudModeRelated e _) = e +isExpanded (TagCloudModeRelatedLowerBound e _ _) = e +isExpanded TagCloudModeNone = False + +instance FromJSON TagCloudMode where + parseJSON (Object o) = + case KM.lookup "mode" o of + Just (String "top") -> TagCloudModeTop <$> o .: "expanded" + Just (String "lowerBound") -> TagCloudModeTopLowerBound <$> o .: "expanded" <*> o .: "value" + Just (String "related") -> TagCloudModeRelated <$> o .: "expanded" <*> fmap words (o .: "value") + Just (String "relatedLowerBound") -> TagCloudModeRelatedLowerBound <$> o .: "expanded" <*> fmap words (o .: "value") <*> o .: "lowerBound" + Just (String "none") -> pure TagCloudModeNone + _ -> A.parseFail "bad parse" + parseJSON _ = A.parseFail "bad parse" + +instance ToJSON TagCloudMode where + toJSON (TagCloudModeTop e) = + object ["mode" .= ("top" :: Text), "expanded" .= e] + toJSON (TagCloudModeTopLowerBound e i) = + object ["mode" .= ("lowerBound" :: Text), "value" .= i, "expanded" .= e] + toJSON (TagCloudModeRelated e tags) = + object ["mode" .= ("related" :: Text), "value" .= unwords tags, "expanded" .= e] + toJSON (TagCloudModeRelatedLowerBound e tags lb) = + object ["mode" .= ("relatedLowerBound" :: Text), "value" .= unwords tags, "lowerBound" .= lb, "expanded" .= e] + toJSON TagCloudModeNone = + object ["mode" .= ("none" :: Text), "value" .= A.Null, "expanded" .= False] + toEncoding (TagCloudModeTop e) = + A.pairs ("mode" .= ("top" :: Text) <> "expanded" .= e) + toEncoding (TagCloudModeTopLowerBound e i) = + A.pairs ("mode" .= ("lowerBound" :: Text) <> "value" .= i <> "expanded" .= e) + toEncoding (TagCloudModeRelated e tags) = + A.pairs ("mode" .= ("related" :: Text) <> "value" .= unwords tags <> "expanded" .= e) + toEncoding (TagCloudModeRelatedLowerBound e tags lb) = + A.pairs ("mode" .= ("relatedLowerBound" :: Text) <> "value" .= unwords tags <> "lowerBound" .= lb <> "expanded" .= e) + toEncoding TagCloudModeNone = + A.pairs ("mode" .= ("none" :: Text) <> "value" .= A.Null <> "expanded" .= False) + +type Tag = Text + +tagCountTop :: Key User -> Bool -> DB [(Text, Int)] +tagCountTop user isOwner = + sortOn (toLower . fst) + . fmap (bimap unValue unValue) + <$> ( select $ do + t <- from (table @BookmarkTag) + where_ (t ^. BookmarkTagUserId ==. val user) + when (not isOwner) $ do + b <- from (table @Bookmark) + where_ (b ^. BookmarkId ==. t ^. BookmarkTagBookmarkId &&. b ^. BookmarkShared ==. val True) + where_ (not_ (t ^. BookmarkTagTag `like` val ".%")) + groupBy (lower_ $ t ^. BookmarkTagTag) + let countRows' = countRows + orderBy [desc countRows'] + limit 200 + pure (t ^. BookmarkTagTag, countRows') + ) + +tagCountLowerBound :: Key User -> Int -> Bool -> DB [(Text, Int)] +tagCountLowerBound user lowerBound isOwner = + fmap (bimap unValue unValue) + <$> ( select $ do + t <- from (table @BookmarkTag) + where_ (t ^. BookmarkTagUserId ==. val user) + when (not isOwner) $ do + b <- from (table @Bookmark) + where_ (b ^. BookmarkId ==. t ^. BookmarkTagBookmarkId &&. b ^. BookmarkShared ==. val True) + where_ (not_ (t ^. BookmarkTagTag `like` val ".%")) + groupBy (lower_ $ t ^. BookmarkTagTag) + let countRows' = countRows + orderBy [asc (t ^. BookmarkTagTag)] + having (countRows' >=. val lowerBound) + pure (t ^. BookmarkTagTag, countRows') + ) + +tagCountRelated :: Key User -> [Tag] -> Bool -> DB [(Text, Int)] +tagCountRelated user tags isOwner = + let effectiveTags = if isOwner then tags else filter (not . T.isPrefixOf ".") tags + in sortOn (toLower . fst) + . fmap (bimap unValue unValue) + <$> ( select $ do + t <- from (table @BookmarkTag) + where_ (relatedTagWhere user effectiveTags t) + when (not isOwner) $ do + b <- from (table @Bookmark) + where_ + ( b ^. BookmarkId ==. t ^. BookmarkTagBookmarkId + &&. b ^. BookmarkShared ==. val True + ) + where_ (not_ (t ^. BookmarkTagTag `like` val ".%")) + groupBy (lower_ $ t ^. BookmarkTagTag) + let countRows' = countRows + orderBy [desc countRows'] + limit 200 + pure (t ^. BookmarkTagTag, countRows') + ) + +tagCountRelatedLowerBound :: Key User -> [Tag] -> Int -> Bool -> DB [(Text, Int)] +tagCountRelatedLowerBound user tags lowerBound isOwner = + let effectiveTags = if isOwner then tags else filter (not . T.isPrefixOf ".") tags + in fmap (bimap unValue unValue) + <$> ( select $ do + t <- from (table @BookmarkTag) + where_ (relatedTagWhere user effectiveTags t) + when (not isOwner) $ do + b <- from (table @Bookmark) + where_ (b ^. BookmarkId ==. t ^. BookmarkTagBookmarkId &&. b ^. BookmarkShared ==. val True) + where_ (not_ (t ^. BookmarkTagTag `like` val ".%")) + groupBy (lower_ $ t ^. BookmarkTagTag) + let countRows' = countRows + having (countRows' >=. val lowerBound) + orderBy [asc $ lower_ $ (t ^. BookmarkTagTag)] + pure (t ^. BookmarkTagTag, countRows') + ) + +relatedTagWhere :: Key User -> [Tag] -> SqlExpr (Entity BookmarkTag) -> SqlExpr (Value Bool) +relatedTagWhere user tags t = + foldl + ( \expr tag -> + expr + &&. exists + ( do + u <- from (table @BookmarkTag) + where_ (u ^. BookmarkTagBookmarkId ==. t ^. BookmarkTagBookmarkId &&. sqliteLikeExact (u ^. BookmarkTagTag) tag) + ) + ) + (t ^. BookmarkTagUserId ==. val user) + tags + +fetchBookmarkByUrl :: Key User -> Maybe Text -> DB (Maybe (Entity Bookmark, [Entity BookmarkTag])) +fetchBookmarkByUrl userId murl = runMaybeT do + bmark <- MaybeT . getBy . UniqueUserHref userId =<< MaybeT (pure murl) + btags <- lift $ withTags (entityKey bmark) + pure (bmark, btags) + +data UpsertResult a = Created a | Updated a | Failed String + deriving (Show, Eq, Functor) + +maybeUpsertResult :: UpsertResult a -> Maybe a +maybeUpsertResult (Created a) = Just a +maybeUpsertResult (Updated a) = Just a +maybeUpsertResult _ = Nothing + +upsertBookmark :: Key User -> Maybe (Key Bookmark) -> Bookmark -> [Text] -> DB (UpsertResult (Key Bookmark)) +upsertBookmark userId _ bm _ | userId /= bookmarkUserId bm = pure (Failed "unauthorized") +upsertBookmark userId mbid bm tags = do + res <- case mbid of + Just bid -> + get bid >>= \case + Just prev_bm + | userId == bookmarkUserId prev_bm -> + replaceBookmark bid prev_bm + Just _ -> pure (Failed "unauthorized") + _ -> pure (Failed "not found") + Nothing -> + getBy (UniqueUserHref userId (bookmarkHref bm)) >>= \case + Just (Entity bid prev_bm) + | userId == bookmarkUserId prev_bm -> + replaceBookmark bid prev_bm + Just _ -> pure (Failed "unauthorized") + _ -> Created <$> insert bm + forM_ (maybeUpsertResult res) (insertTags (bookmarkUserId bm)) + pure res + where + prepareReplace prev_bm = + if bookmarkHref bm /= bookmarkHref prev_bm + then bm {bookmarkSlug = bookmarkSlug prev_bm, bookmarkArchiveHref = Nothing} + else bm {bookmarkSlug = bookmarkSlug prev_bm, bookmarkArchiveHref = bookmarkArchiveHref prev_bm} + replaceBookmark bid prev_bm = do + replace bid (prepareReplace prev_bm) + deleteTags bid + pure (Updated bid) + deleteTags bid = + deleteWhere [BookmarkTagBookmarkId CP.==. bid] + insertTags userId' bid' = + insertMany_ (mkBookmarkTags userId' bid' tags) + +updateBookmarkArchiveUrl :: Key User -> Key Bookmark -> Maybe Text -> DB () +updateBookmarkArchiveUrl userId bid marchiveUrl = + updateWhere + [BookmarkUserId CP.==. userId, BookmarkId CP.==. bid] + [BookmarkArchiveHref CP.=. marchiveUrl] + +upsertNote :: Key User -> Maybe (Key Note) -> Note -> DB (UpsertResult (Key Note)) +upsertNote userId mnid note = + case mnid of + Just nid -> do + get nid >>= \case + Just note' -> do + when + (userId /= noteUserId note') + (throwString "unauthorized") + replace nid note + pure (Updated nid) + _ -> throwString "not found" + Nothing -> do + Created <$> insert note
src/Model/FileBookmark.hs view
@@ -1,129 +1,137 @@-module Model.FileBookmark where--import ClassyPrelude.Yesod hiding (Value, exists, groupBy, on, (<=.), (==.), (>=.), (||.))-import Data.Aeson qualified as A-import Data.Aeson.Types qualified as A (parseFail)-import Model-import Model.Custom-import Types---- * FileBookmarks--data FileBookmark = FileBookmark- { fileBookmarkHref :: !Text,- fileBookmarkDescription :: !Text,- fileBookmarkExtended :: !Text,- fileBookmarkTime :: !UTCTime,- fileBookmarkShared :: !Bool,- fileBookmarkToRead :: !Bool,- fileBookmarkSelected :: !(Maybe Bool),- fileBookmarkArchiveHref :: !(Maybe Text),- fileBookmarkTags :: !Text- }- deriving (Show, Eq, Typeable, Ord)--instance FromJSON FileBookmark where- parseJSON (Object o) =- FileBookmark- <$> o- .: "href"- <*> (parseDescriptionValue =<< o .: "description")- <*> o- .: "extended"- <*> o- .: "time"- <*> (boolFromYesNo <$> o .: "shared")- <*> (boolFromYesNo <$> o .: "toread")- <*> (o A..:? "selected")- <*> (o A..:? "archive_url")- <*> (o .: "tags")- where- parseDescriptionValue (String t) = pure t- parseDescriptionValue (Bool _) = pure ""- parseDescriptionValue _ = A.parseFail "bad parse"- parseJSON _ = A.parseFail "bad parse"--instance ToJSON FileBookmark where- toJSON FileBookmark {..} =- object- [ "href" .= toJSON fileBookmarkHref,- "description" .= toJSON fileBookmarkDescription,- "extended" .= toJSON fileBookmarkExtended,- "time" .= toJSON fileBookmarkTime,- "shared" .= toJSON (boolToYesNo fileBookmarkShared),- "toread" .= toJSON (boolToYesNo fileBookmarkToRead),- "selected" .= toJSON fileBookmarkSelected,- "archive_url" .= toJSON fileBookmarkArchiveHref,- "tags" .= toJSON fileBookmarkTags- ]--boolFromYesNo :: Text -> Bool-boolFromYesNo "yes" = True-boolFromYesNo _ = False--boolToYesNo :: Bool -> Text-boolToYesNo True = "yes"-boolToYesNo _ = "no"--fileBookmarkToBookmark :: UserId -> FileBookmark -> IO Bookmark-fileBookmarkToBookmark user FileBookmark {..} = do- slug <- mkBmSlug- pure- $ Bookmark- { bookmarkUserId = user,- bookmarkSlug = slug,- bookmarkHref = fileBookmarkHref,- bookmarkDescription = fileBookmarkDescription,- bookmarkExtended = fileBookmarkExtended,- bookmarkTime = fileBookmarkTime,- bookmarkShared = fileBookmarkShared,- bookmarkToRead = fileBookmarkToRead,- bookmarkSelected = Just True == fileBookmarkSelected,- bookmarkArchiveHref = fileBookmarkArchiveHref- }--bookmarkTofileBookmark :: Bookmark -> Text -> FileBookmark-bookmarkTofileBookmark Bookmark {..} tags =- FileBookmark- { fileBookmarkHref = bookmarkHref,- fileBookmarkDescription = bookmarkDescription,- fileBookmarkExtended = bookmarkExtended,- fileBookmarkTime = bookmarkTime,- fileBookmarkShared = bookmarkShared,- fileBookmarkToRead = bookmarkToRead,- fileBookmarkSelected = Just bookmarkSelected,- fileBookmarkArchiveHref = bookmarkArchiveHref,- fileBookmarkTags = tags- }--readFileBookmarks :: (MonadIO m) => FilePath -> m (Either String [FileBookmark])-readFileBookmarks fpath =- A.eitherDecode' . fromStrict <$> readFile fpath--insertFileBookmarks :: Key User -> FilePath -> DB (Either String Int)-insertFileBookmarks userId bookmarkFile = do- mfmarks <- liftIO $ readFileBookmarks bookmarkFile- case mfmarks of- Left e -> pure $ Left e- Right fmarks -> do- bmarks <- liftIO $ mapM (fileBookmarkToBookmark userId) fmarks- mbids <- mapM insertUnique bmarks- mapM_ (void . insertUnique)- $ concatMap (uncurry (mkBookmarkTags userId))- $ catMaybes- $ zipWith- (\mbid tags -> (,tags) <$> mbid)- mbids- (extractTags <$> fmarks)- pure $ Right (length bmarks)- where- extractTags = words . fileBookmarkTags--exportFileBookmarks :: Key User -> FilePath -> DB ()-exportFileBookmarks user fpath =- liftIO . A.encodeFile fpath =<< getFileBookmarks- where- getFileBookmarks :: DB [FileBookmark]- getFileBookmarks = do- marks <- allUserBookmarks user- pure $ fmap (\(bm, t) -> bookmarkTofileBookmark (entityVal bm) t) marks+module Model.FileBookmark where + +import ClassyPrelude.Yesod hiding (Value, exists, groupBy, on, (<=.), (==.), (>=.), (||.)) +import Data.Aeson qualified as A +import Data.Aeson.Types qualified as A (parseFail) +import Model +import Model.Custom +import Types + +-- * FileBookmarks + +data FileBookmark = FileBookmark + { fileBookmarkHref :: !Text, + fileBookmarkDescription :: !Text, + fileBookmarkExtended :: !Text, + fileBookmarkTime :: !UTCTime, + fileBookmarkShared :: !Bool, + fileBookmarkToRead :: !Bool, + fileBookmarkSelected :: !(Maybe Bool), + fileBookmarkArchiveHref :: !(Maybe Text), + fileBookmarkTags :: !Text + } + deriving (Show, Eq, Typeable, Ord) + +instance FromJSON FileBookmark where + parseJSON (Object o) = + FileBookmark + <$> o + .: "href" + <*> (parseDescriptionValue =<< o .: "description") + <*> o + .: "extended" + <*> o + .: "time" + <*> (boolFromYesNo <$> o .: "shared") + <*> (boolFromYesNo <$> o .: "toread") + <*> (o A..:? "selected") + <*> (o A..:? "archive_url") + <*> (o .: "tags") + where + parseDescriptionValue (String t) = pure t + parseDescriptionValue (Bool _) = pure "" + parseDescriptionValue _ = A.parseFail "bad parse" + parseJSON _ = A.parseFail "bad parse" + +instance ToJSON FileBookmark where + toJSON FileBookmark {..} = + object + [ "href" .= fileBookmarkHref, + "description" .= fileBookmarkDescription, + "extended" .= fileBookmarkExtended, + "time" .= fileBookmarkTime, + "shared" .= boolToYesNo fileBookmarkShared, + "toread" .= boolToYesNo fileBookmarkToRead, + "selected" .= fileBookmarkSelected, + "archive_url" .= fileBookmarkArchiveHref, + "tags" .= fileBookmarkTags + ] + toEncoding FileBookmark {..} = + A.pairs + ( "href" .= fileBookmarkHref + <> "description" .= fileBookmarkDescription + <> "extended" .= fileBookmarkExtended + <> "time" .= fileBookmarkTime + <> "shared" .= boolToYesNo fileBookmarkShared + <> "toread" .= boolToYesNo fileBookmarkToRead + <> "selected" .= fileBookmarkSelected + <> "archive_url" .= fileBookmarkArchiveHref + <> "tags" .= fileBookmarkTags + ) + +boolFromYesNo :: Text -> Bool +boolFromYesNo "yes" = True +boolFromYesNo _ = False + +boolToYesNo :: Bool -> Text +boolToYesNo True = "yes" +boolToYesNo _ = "no" + +fileBookmarkToBookmark :: UserId -> FileBookmark -> IO Bookmark +fileBookmarkToBookmark user FileBookmark {..} = do + slug <- mkBmSlug + pure + $ Bookmark + { bookmarkUserId = user, + bookmarkSlug = slug, + bookmarkHref = fileBookmarkHref, + bookmarkDescription = fileBookmarkDescription, + bookmarkExtended = fileBookmarkExtended, + bookmarkTime = fileBookmarkTime, + bookmarkShared = fileBookmarkShared, + bookmarkToRead = fileBookmarkToRead, + bookmarkSelected = Just True == fileBookmarkSelected, + bookmarkArchiveHref = fileBookmarkArchiveHref + } + +bookmarkTofileBookmark :: Bookmark -> Text -> FileBookmark +bookmarkTofileBookmark Bookmark {..} tags = + FileBookmark + { fileBookmarkHref = bookmarkHref, + fileBookmarkDescription = bookmarkDescription, + fileBookmarkExtended = bookmarkExtended, + fileBookmarkTime = bookmarkTime, + fileBookmarkShared = bookmarkShared, + fileBookmarkToRead = bookmarkToRead, + fileBookmarkSelected = Just bookmarkSelected, + fileBookmarkArchiveHref = bookmarkArchiveHref, + fileBookmarkTags = tags + } + +readFileBookmarks :: (MonadIO m) => FilePath -> m (Either String [FileBookmark]) +readFileBookmarks fpath = + A.eitherDecode' . fromStrict <$> readFile fpath + +insertFileBookmarks :: Key User -> [FileBookmark] -> DB Int +insertFileBookmarks userId fmarks = do + bmarks <- liftIO $ mapM (fileBookmarkToBookmark userId) fmarks + mbids <- mapM insertUnique bmarks + mapM_ (void . insertUnique) + $ concatMap (uncurry (mkBookmarkTags userId)) + $ catMaybes + $ zipWith + (\mbid tags -> (,tags) <$> mbid) + mbids + (extractTags <$> fmarks) + pure (length bmarks) + where + extractTags = words . fileBookmarkTags + +getFileBookmarks :: Key User -> DB [FileBookmark] +getFileBookmarks user = do + marks <- allUserBookmarks user + pure $ fmap (\(bm, t) -> bookmarkTofileBookmark (entityVal bm) t) marks + +exportFileBookmarks :: Key User -> FilePath -> DB () +exportFileBookmarks user fpath = + liftIO . A.encodeFile fpath =<< getFileBookmarks user
src/Model/FileFirefox.hs view
@@ -1,87 +1,83 @@-module Model.FileFirefox where--import ClassyPrelude.Yesod hiding (Value, exists, groupBy, on, (<=.), (==.), (>=.), (||.))-import Data.Aeson qualified as A-import Data.Aeson.Types qualified as A (parseFail)-import Data.Time.Clock.POSIX qualified as TI (POSIXTime, posixSecondsToUTCTime)-import Model-import Model.Custom-import Types---- * Firefox Bookmarks--data FirefoxBookmarkNode = FirefoxBookmarkNode- { firefoxBookmarkChildren :: Maybe [FirefoxBookmarkNode],- firefoxBookmarkDateAdded :: !TI.POSIXTime,- firefoxBookmarkGuid :: !Text,- firefoxBookmarkIconUri :: !(Maybe Text),- firefoxBookmarkId :: !Int,- firefoxBookmarkIndex :: !Int,- firefoxBookmarkLastModified :: !TI.POSIXTime,- firefoxBookmarkRoot :: !(Maybe Text),- firefoxBookmarkTitle :: !Text,- firefoxBookmarkType :: !Text,- firefoxBookmarkTypeCode :: !Int,- firefoxBookmarkUri :: !(Maybe Text)- }- deriving (Show, Eq, Typeable, Ord)--instance FromJSON FirefoxBookmarkNode where- parseJSON (Object o) =- FirefoxBookmarkNode- <$> (o A..:? "children")- <*> (o .: "dateAdded")- <*> o- .: "guid"- <*> (o A..:? "iconUri")- <*> o- .: "id"- <*> o- .: "index"- <*> (o .: "lastModified")- <*> (o A..:? "root")- <*> (o .: "title")- <*> (o .: "type")- <*> (o .: "typeCode")- <*> (o A..:? "uri")- parseJSON _ = A.parseFail "bad parse"--firefoxBookmarkNodeToBookmark :: UserId -> FirefoxBookmarkNode -> IO [Bookmark]-firefoxBookmarkNodeToBookmark user FirefoxBookmarkNode {..} =- case firefoxBookmarkTypeCode of- 1 -> do- slug <- mkBmSlug- pure- $ [ Bookmark- { bookmarkUserId = user,- bookmarkSlug = slug,- bookmarkHref = fromMaybe "" firefoxBookmarkUri,- bookmarkDescription = firefoxBookmarkTitle,- bookmarkExtended = "",- bookmarkTime = TI.posixSecondsToUTCTime (firefoxBookmarkDateAdded / 1000000),- bookmarkShared = True,- bookmarkToRead = False,- bookmarkSelected = False,- bookmarkArchiveHref = Nothing- }- ]- 2 ->- join- <$> mapM- (firefoxBookmarkNodeToBookmark user)- (fromMaybe [] firefoxBookmarkChildren)- _ -> pure []--readFirefoxBookmarks :: (MonadIO m) => FilePath -> m (Either String FirefoxBookmarkNode)-readFirefoxBookmarks fpath =- A.eitherDecode' . fromStrict <$> readFile fpath--insertFirefoxBookmarks :: Key User -> FilePath -> DB (Either String Int)-insertFirefoxBookmarks userId bookmarkFile = do- mfmarks <- liftIO $ readFirefoxBookmarks bookmarkFile- case mfmarks of- Left e -> pure $ Left e- Right fmarks -> do- bmarks <- liftIO $ firefoxBookmarkNodeToBookmark userId fmarks- mapM_ (void . insertUnique) bmarks- pure $ Right (length bmarks)+module Model.FileFirefox where + +import ClassyPrelude.Yesod hiding (Value, exists, groupBy, on, (<=.), (==.), (>=.), (||.)) +import Data.Aeson qualified as A +import Data.Aeson.Types qualified as A (parseFail) +import Data.Time.Clock.POSIX qualified as TI (POSIXTime, posixSecondsToUTCTime) +import Model +import Model.Custom +import Types + +-- * Firefox Bookmarks + +data FirefoxBookmarkNode = FirefoxBookmarkNode + { firefoxBookmarkChildren :: Maybe [FirefoxBookmarkNode], + firefoxBookmarkDateAdded :: !TI.POSIXTime, + firefoxBookmarkGuid :: !Text, + firefoxBookmarkIconUri :: !(Maybe Text), + firefoxBookmarkId :: !Int, + firefoxBookmarkIndex :: !Int, + firefoxBookmarkLastModified :: !TI.POSIXTime, + firefoxBookmarkRoot :: !(Maybe Text), + firefoxBookmarkTitle :: !Text, + firefoxBookmarkType :: !Text, + firefoxBookmarkTypeCode :: !Int, + firefoxBookmarkUri :: !(Maybe Text) + } + deriving (Show, Eq, Typeable, Ord) + +instance FromJSON FirefoxBookmarkNode where + parseJSON (Object o) = + FirefoxBookmarkNode + <$> (o A..:? "children") + <*> (o .: "dateAdded") + <*> o + .: "guid" + <*> (o A..:? "iconUri") + <*> o + .: "id" + <*> o + .: "index" + <*> (o .: "lastModified") + <*> (o A..:? "root") + <*> (o .: "title") + <*> (o .: "type") + <*> (o .: "typeCode") + <*> (o A..:? "uri") + parseJSON _ = A.parseFail "bad parse" + +firefoxBookmarkNodeToBookmark :: UserId -> FirefoxBookmarkNode -> IO [Bookmark] +firefoxBookmarkNodeToBookmark user FirefoxBookmarkNode {..} = + case firefoxBookmarkTypeCode of + 1 -> do + slug <- mkBmSlug + pure + $ [ Bookmark + { bookmarkUserId = user, + bookmarkSlug = slug, + bookmarkHref = fromMaybe "" firefoxBookmarkUri, + bookmarkDescription = firefoxBookmarkTitle, + bookmarkExtended = "", + bookmarkTime = TI.posixSecondsToUTCTime (firefoxBookmarkDateAdded / 1000000), + bookmarkShared = True, + bookmarkToRead = False, + bookmarkSelected = False, + bookmarkArchiveHref = Nothing + } + ] + 2 -> + join + <$> mapM + (firefoxBookmarkNodeToBookmark user) + (fromMaybe [] firefoxBookmarkChildren) + _ -> pure [] + +readFirefoxBookmarks :: (MonadIO m) => FilePath -> m (Either String FirefoxBookmarkNode) +readFirefoxBookmarks fpath = + A.eitherDecode' . fromStrict <$> readFile fpath + +insertFirefoxBookmarks :: Key User -> FirefoxBookmarkNode -> DB Int +insertFirefoxBookmarks userId fmarks = do + bmarks <- liftIO $ firefoxBookmarkNodeToBookmark userId fmarks + mapM_ (void . insertUnique) bmarks + pure (length bmarks)
src/Model/FileNetscape.hs view
@@ -1,207 +1,202 @@-module Model.FileNetscape where--import ClassyPrelude.Yesod hiding (Value, exists, groupBy, on, (<=.), (==.), (>=.), (||.))-import Data.Char (isSpace)-import Data.List (elemIndex, findIndex)-import Data.Text (breakOn, splitOn, strip)-import Data.Text.Lazy qualified as TL-import Data.Text.Lazy.Builder qualified as TLB-import Data.Time.Clock.POSIX qualified as TI (posixSecondsToUTCTime, utcTimeToPOSIXSeconds)-import HTMLEntities.Decoder qualified as HED-import HTMLEntities.Text qualified as HE-import Model-import Model.Custom-import Types---- * Netscape Bookmarks--data NetscapeBookmark = NetscapeBookmark- { nsbHref :: !Text,- nsbTitle :: !Text,- nsbDescription :: !Text,- nsbTags :: !Text,- nsbTime :: !UTCTime- }- deriving (Eq, Typeable, Ord, Show)--parseNetscapeBookmarks :: Text -> Either String [NetscapeBookmark]-parseNetscapeBookmarks content = do- let links = extractLinks- if null links- then Left "No bookmarks found"- else Right links- where- -- Extract bookmark links from NETSCAPE-Bookmark-file HTML.- -- Split on "<DT>" so each segment corresponds to one entry. A <DD>- -- following the </A> within that same segment is the description for that- -- entry (matching the Netscape model: DD belongs to the last seen DT).- extractLinks :: [NetscapeBookmark]- extractLinks =- let dtSegments = drop 1 $ splitOnDT content- anchorSegments = filter (\s -> "<A " `isInfixOf` s && "</A>" `isInfixOf` s) dtSegments- in catMaybes (_parseNetscapeLink <$> anchorSegments)-- -- Split content into segments at each "<DT>", discarding any text before- -- the first marker.- splitOnDT :: Text -> [Text]- splitOnDT txt =- case breakOn "<DT>" txt of- (_, "") -> [txt]- (before, rest) -> before : splitOnDT (drop 4 rest) -- drop "<DT>" (4 chars)---- Parse a single <A HREF="..." ...>Title</A> line-_parseNetscapeLink :: Text -> Maybe NetscapeBookmark-_parseNetscapeLink line = do- guard (("<A " `isInfixOf` line) && ("</A>" `isInfixOf` line))- href <- extractAttr "HREF"- let lineStr = unpack line- aIdx = findIndex (isPrefixOf "<A ") (tails lineStr)- case aIdx of- Nothing -> Nothing- Just idx ->- let aTag = drop idx lineStr- gtIdx = elemIndex '>' aTag- in case gtIdx of- Nothing -> Nothing- Just gtOffset ->- let afterGt = drop (gtOffset + 1) aTag- ltIdx = elemIndex '<' afterGt- titleStr = case ltIdx of- Nothing -> afterGt- Just ltidx -> take ltidx afterGt- title = strip (decodeHtml (pack titleStr))- in do- guard (not (null href))- let tags = fromMaybe "" (decodeHtml <$> extractAttr "TAGS")- timeStr = fromMaybe "" (extractAttr "ADD_DATE")- timeInt = readMay timeStr :: Maybe Int- utcTime = maybe (UTCTime (toEnum 0) 0) (TI.posixSecondsToUTCTime . fromIntegral) timeInt- pure- $ NetscapeBookmark- { nsbHref = href,- nsbTitle = title,- nsbDescription = extractDD,- nsbTags = tags,- nsbTime = utcTime- }- where- -- Extract description text from a <DD> tag that follows </A> in the chunk.- extractDD :: Text- extractDD =- let afterClose = snd (breakOn "</A>" line)- afterDD = snd (breakOn "<DD>" afterClose)- in if null afterDD- then ""- else- let inner = drop 4 afterDD -- drop "<DD>"- trimmed = fst (breakOn "<" inner)- trimmedStr = dropWhile isSpace . reverse . dropWhile isSpace . reverse . unpack $ trimmed- in decodeHtml (pack trimmedStr)-- -- Extract an HTML attribute value (e.g., HREF="value" -> value)- extractAttr :: Text -> Maybe Text- extractAttr attr =- let attrPattern = unpack attr <> "=\""- lineStr = unpack line- in case dropWhile (\s -> not (attrPattern `isPrefixOf` s)) (tails lineStr) of- [] -> Nothing- (match : _) ->- let afterPattern = drop (length attrPattern) match- in case elemIndex '"' afterPattern of- Nothing -> Nothing- Just endIdx ->- let extracted = take endIdx afterPattern- in if null extracted then Nothing else Just (decodeHtml (pack extracted))-- decodeHtml :: Text -> Text- decodeHtml = TL.toStrict . TLB.toLazyText . HED.htmlEncodedText--netscapeBookmarkToBookmark :: UserId -> NetscapeBookmark -> IO Bookmark-netscapeBookmarkToBookmark user NetscapeBookmark {..} = do- slug <- mkBmSlug- pure- $ Bookmark- { bookmarkUserId = user,- bookmarkSlug = slug,- bookmarkHref = nsbHref,- bookmarkDescription = nsbTitle,- bookmarkExtended = nsbDescription,- bookmarkTime = nsbTime,- bookmarkShared = True,- bookmarkToRead = False,- bookmarkSelected = False,- bookmarkArchiveHref = Nothing- }--bookmarkToNetscapeBookmark :: Bookmark -> Text -> NetscapeBookmark-bookmarkToNetscapeBookmark Bookmark {..} tags =- NetscapeBookmark- { nsbHref = bookmarkHref,- nsbTitle = bookmarkDescription,- nsbDescription = bookmarkExtended,- nsbTags = tags,- nsbTime = bookmarkTime- }--renderNetscapeBookmarks :: [NetscapeBookmark] -> Text-renderNetscapeBookmarks bmarks =- unlines- $ [ "<!DOCTYPE NETSCAPE-Bookmark-file-1>",- "<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=UTF-8\">",- "<TITLE>Bookmarks</TITLE>",- "<H1>Bookmarks</H1>",- "<DL><p>"- ]- <> concatMap renderBookmark bmarks- <> ["</DL><p>"]- where- renderBookmark :: NetscapeBookmark -> [Text]- renderBookmark NetscapeBookmark {..} =- [ " <DT><A HREF=\""- <> escapeHtml nsbHref- <> "\" ADD_DATE=\""- <> tshow (floor (TI.utcTimeToPOSIXSeconds nsbTime) :: Int)- <> "\" TAGS=\""- <> escapeHtml nsbTags- <> "\">"- <> escapeHtml nsbTitle- <> "</A>"- ]- <> [" <DD>" <> escapeHtml nsbDescription | not (null (strip nsbDescription))]- escapeHtml :: Text -> Text- escapeHtml = HE.text--insertNetscapeBookmarks :: Key User -> FilePath -> DB (Either String Int)-insertNetscapeBookmarks userId bookmarkFile = do- meither <- liftIO $ tryAny (readFile bookmarkFile)- case meither of- Left _ -> pure $ Left "Could not read file"- Right (content :: ByteString) ->- let contentText = decodeUtf8 content- in case parseNetscapeBookmarks contentText of- Left e -> pure $ Left e- Right nbmarks -> do- bmarks <- liftIO $ mapM (netscapeBookmarkToBookmark userId) nbmarks- mbids <- mapM insertUnique bmarks- mapM_ (void . insertUnique)- $ concatMap (uncurry (mkBookmarkTags userId))- $ catMaybes- $ zipWith- (\mbid nbm -> (,parseNetscapeTags $ nsbTags nbm) <$> mbid)- mbids- nbmarks- pure $ Right (length bmarks)- where- parseNetscapeTags :: Text -> [Text]- parseNetscapeTags tagsText =- filter (not . null)- . map strip- $ if ',' `elem` unpack tagsText- then splitOn "," tagsText- else words tagsText--exportNetscapeBookmarks :: Key User -> FilePath -> DB ()-exportNetscapeBookmarks user fpath = do- marks <- allUserBookmarks user- let bmarks = fmap (\(bm, t) -> bookmarkToNetscapeBookmark (entityVal bm) t) marks- liftIO $ writeFileUtf8 fpath (renderNetscapeBookmarks bmarks)+module Model.FileNetscape where + +import ClassyPrelude.Yesod hiding (Value, exists, groupBy, on, (<=.), (==.), (>=.), (||.)) +import Data.Char (isSpace) +import Data.List (elemIndex, findIndex) +import Data.Text (breakOn, splitOn, strip) +import Data.Text.Lazy qualified as TL +import Data.Text.Lazy.Builder qualified as TLB +import Data.Time.Clock.POSIX qualified as TI (posixSecondsToUTCTime, utcTimeToPOSIXSeconds) +import HTMLEntities.Decoder qualified as HED +import HTMLEntities.Text qualified as HE +import Model +import Model.Custom +import Types + +-- * Netscape Bookmarks + +data NetscapeBookmark = NetscapeBookmark + { nsbHref :: !Text, + nsbTitle :: !Text, + nsbDescription :: !Text, + nsbTags :: !Text, + nsbTime :: !UTCTime + } + deriving (Eq, Typeable, Ord, Show) + +parseNetscapeBookmarks :: Text -> Either String [NetscapeBookmark] +parseNetscapeBookmarks content = do + let links = extractLinks + if null links + then Left "No bookmarks found" + else Right links + where + -- Extract bookmark links from NETSCAPE-Bookmark-file HTML. + -- Split on "<DT>" so each segment corresponds to one entry. A <DD> + -- following the </A> within that same segment is the description for that + -- entry (matching the Netscape model: DD belongs to the last seen DT). + extractLinks :: [NetscapeBookmark] + extractLinks = + let dtSegments = drop 1 $ splitOnDT content + anchorSegments = filter (\s -> "<A " `isInfixOf` s && "</A>" `isInfixOf` s) dtSegments + in catMaybes (_parseNetscapeLink <$> anchorSegments) + + -- Split content into segments at each "<DT>", discarding any text before + -- the first marker. + splitOnDT :: Text -> [Text] + splitOnDT txt = + case breakOn "<DT>" txt of + (_, "") -> [txt] + (before, rest) -> before : splitOnDT (drop 4 rest) -- drop "<DT>" (4 chars) + +-- Parse a single <A HREF="..." ...>Title</A> line +_parseNetscapeLink :: Text -> Maybe NetscapeBookmark +_parseNetscapeLink line = do + guard (("<A " `isInfixOf` line) && ("</A>" `isInfixOf` line)) + href <- extractAttr "HREF" + let lineStr = unpack line + aIdx = findIndex (isPrefixOf "<A ") (tails lineStr) + case aIdx of + Nothing -> Nothing + Just idx -> + let aTag = drop idx lineStr + gtIdx = elemIndex '>' aTag + in case gtIdx of + Nothing -> Nothing + Just gtOffset -> + let afterGt = drop (gtOffset + 1) aTag + ltIdx = elemIndex '<' afterGt + titleStr = case ltIdx of + Nothing -> afterGt + Just ltidx -> take ltidx afterGt + title = strip (decodeHtml (pack titleStr)) + in do + guard (not (null href)) + let tags = fromMaybe "" (decodeHtml <$> extractAttr "TAGS") + timeStr = fromMaybe "" (extractAttr "ADD_DATE") + timeInt = readMay timeStr :: Maybe Int + utcTime = maybe (UTCTime (toEnum 0) 0) (TI.posixSecondsToUTCTime . fromIntegral) timeInt + pure + $ NetscapeBookmark + { nsbHref = href, + nsbTitle = title, + nsbDescription = extractDD, + nsbTags = tags, + nsbTime = utcTime + } + where + -- Extract description text from a <DD> tag that follows </A> in the chunk. + extractDD :: Text + extractDD = + let afterClose = snd (breakOn "</A>" line) + afterDD = snd (breakOn "<DD>" afterClose) + in if null afterDD + then "" + else + let inner = drop 4 afterDD -- drop "<DD>" + trimmed = fst (breakOn "<" inner) + trimmedStr = dropWhile isSpace . reverse . dropWhile isSpace . reverse . unpack $ trimmed + in decodeHtml (pack trimmedStr) + + -- Extract an HTML attribute value (e.g., HREF="value" -> value) + extractAttr :: Text -> Maybe Text + extractAttr attr = + let attrPattern = unpack attr <> "=\"" + lineStr = unpack line + in case dropWhile (\s -> not (attrPattern `isPrefixOf` s)) (tails lineStr) of + [] -> Nothing + (match : _) -> + let afterPattern = drop (length attrPattern) match + in case elemIndex '"' afterPattern of + Nothing -> Nothing + Just endIdx -> + let extracted = take endIdx afterPattern + in if null extracted then Nothing else Just (decodeHtml (pack extracted)) + + decodeHtml :: Text -> Text + decodeHtml = TL.toStrict . TLB.toLazyText . HED.htmlEncodedText + +netscapeBookmarkToBookmark :: UserId -> NetscapeBookmark -> IO Bookmark +netscapeBookmarkToBookmark user NetscapeBookmark {..} = do + slug <- mkBmSlug + pure + $ Bookmark + { bookmarkUserId = user, + bookmarkSlug = slug, + bookmarkHref = nsbHref, + bookmarkDescription = nsbTitle, + bookmarkExtended = nsbDescription, + bookmarkTime = nsbTime, + bookmarkShared = True, + bookmarkToRead = False, + bookmarkSelected = False, + bookmarkArchiveHref = Nothing + } + +bookmarkToNetscapeBookmark :: Bookmark -> Text -> NetscapeBookmark +bookmarkToNetscapeBookmark Bookmark {..} tags = + NetscapeBookmark + { nsbHref = bookmarkHref, + nsbTitle = bookmarkDescription, + nsbDescription = bookmarkExtended, + nsbTags = tags, + nsbTime = bookmarkTime + } + +renderNetscapeBookmarks :: [NetscapeBookmark] -> Text +renderNetscapeBookmarks bmarks = + unlines + $ [ "<!DOCTYPE NETSCAPE-Bookmark-file-1>", + "<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=UTF-8\">", + "<TITLE>Bookmarks</TITLE>", + "<H1>Bookmarks</H1>", + "<DL><p>" + ] + <> concatMap renderBookmark bmarks + <> ["</DL><p>"] + where + renderBookmark :: NetscapeBookmark -> [Text] + renderBookmark NetscapeBookmark {..} = + [ " <DT><A HREF=\"" + <> escapeHtml nsbHref + <> "\" ADD_DATE=\"" + <> tshow (floor (TI.utcTimeToPOSIXSeconds nsbTime) :: Int) + <> "\" TAGS=\"" + <> escapeHtml nsbTags + <> "\">" + <> escapeHtml nsbTitle + <> "</A>" + ] + <> [" <DD>" <> escapeHtml nsbDescription | not (null (strip nsbDescription))] + escapeHtml :: Text -> Text + escapeHtml = HE.text + +insertNetscapeBookmarks :: Key User -> [NetscapeBookmark] -> DB Int +insertNetscapeBookmarks userId nbmarks = do + bmarks <- liftIO $ mapM (netscapeBookmarkToBookmark userId) nbmarks + mbids <- mapM insertUnique bmarks + mapM_ (void . insertUnique) + $ concatMap (uncurry (mkBookmarkTags userId)) + $ catMaybes + $ zipWith + (\mbid nbm -> (,parseNetscapeTags $ nsbTags nbm) <$> mbid) + mbids + nbmarks + pure (length nbmarks) + where + parseNetscapeTags :: Text -> [Text] + parseNetscapeTags tagsText = + filter (not . null) + . map strip + $ if ',' `elem` unpack tagsText + then splitOn "," tagsText + else words tagsText + +getNetscapeBookmarks :: Key User -> DB [NetscapeBookmark] +getNetscapeBookmarks user = do + marks <- allUserBookmarks user + pure $ fmap (\(bm, t) -> bookmarkToNetscapeBookmark (entityVal bm) t) marks + +exportNetscapeBookmarks :: Key User -> FilePath -> DB () +exportNetscapeBookmarks user fpath = + liftIO . writeFileUtf8 fpath . renderNetscapeBookmarks =<< getNetscapeBookmarks user
src/Model/FileNote.hs view
@@ -1,88 +1,100 @@-module Model.FileNote where--import ClassyPrelude.Yesod hiding (Value, exists, groupBy, on, (<=.), (==.), (>=.), (||.))-import Control.Monad.Fail (MonadFail)-import Data.Aeson qualified as A-import Data.Aeson.Types qualified as A (parseFail)-import Model-import Model.Custom-import System.Directory (listDirectory)-import Types---- * FileNotes--data FileNote = FileNote- { fileNoteId :: !Text,- fileNoteTitle :: !Text,- fileNoteText :: !Text,- fileNoteLength :: !Int,- fileNoteCreatedAt :: !UTCTime,- fileNoteUpdatedAt :: !UTCTime- }- deriving (Show, Eq, Typeable, Ord)--instance FromJSON FileNote where- parseJSON (Object o) =- FileNote- <$> o- .: "id"- <*> o- .: "title"- <*> o- .: "text"- <*> o- .: "length"- <*> (readFileNoteTime =<< o .: "created_at")- <*> (readFileNoteTime =<< o .: "updated_at")- parseJSON _ = A.parseFail "bad parse"--instance ToJSON FileNote where- toJSON FileNote {..} =- object- [ "id" .= toJSON fileNoteId,- "title" .= toJSON fileNoteTitle,- "text" .= toJSON fileNoteText,- "length" .= toJSON fileNoteLength,- "created_at" .= toJSON (showFileNoteTime fileNoteCreatedAt),- "updated_at" .= toJSON (showFileNoteTime fileNoteUpdatedAt)- ]--readFileNoteTime ::- (MonadFail m) =>- String -> m UTCTime-readFileNoteTime = parseTimeM True defaultTimeLocale "%F %T"--showFileNoteTime :: UTCTime -> String-showFileNoteTime = formatTime defaultTimeLocale "%F %T"--fileNoteToNote :: UserId -> FileNote -> IO Note-fileNoteToNote user FileNote {..} = do- slug <- mkNtSlug- pure- $ Note- { noteUserId = user,- noteSlug = slug,- noteLength = fileNoteLength,- noteTitle = fileNoteTitle,- noteText = fileNoteText,- noteIsMarkdown = False,- noteShared = False,- noteCreated = fileNoteCreatedAt,- noteUpdated = fileNoteUpdatedAt- }--insertDirFileNotes :: Key User -> FilePath -> DB (Either String Int)-insertDirFileNotes userId noteDirectory = do- mfnotes <- liftIO $ readFileNotes noteDirectory- case mfnotes of- Left e -> pure $ Left e- Right fnotes -> do- notes <- liftIO $ mapM (fileNoteToNote userId) fnotes- void $ mapM insertUnique notes- pure $ Right (length notes)- where- readFileNotes :: (MonadIO m) => FilePath -> m (Either String [FileNote])- readFileNotes fdir = do- files <- liftIO (listDirectory fdir)- noteBSS <- mapM (readFile . (fdir </>)) files- pure (mapM (A.eitherDecode' . fromStrict) noteBSS)+module Model.FileNote where + +import ClassyPrelude.Yesod hiding (Value, exists, groupBy, on, (<=.), (==.), (>=.), (||.)) +import Control.Monad.Fail (MonadFail) +import Data.Aeson qualified as A +import Data.Aeson.Types qualified as A (parseFail) +import Model +import Model.Custom +import System.Directory (listDirectory) +import Types + +-- * FileNotes + +data FileNote = FileNote + { fileNoteId :: !Text, + fileNoteTitle :: !Text, + fileNoteText :: !Text, + fileNoteLength :: !Int, + fileNoteCreatedAt :: !UTCTime, + fileNoteUpdatedAt :: !UTCTime + } + deriving (Show, Eq, Typeable, Ord) + +instance FromJSON FileNote where + parseJSON (Object o) = + FileNote + <$> o + .: "id" + <*> o + .: "title" + <*> o + .: "text" + <*> o + .: "length" + <*> (readFileNoteTime =<< o .: "created_at") + <*> (readFileNoteTime =<< o .: "updated_at") + parseJSON _ = A.parseFail "bad parse" + +instance ToJSON FileNote where + toJSON FileNote {..} = + object + [ "id" .= fileNoteId, + "title" .= fileNoteTitle, + "text" .= fileNoteText, + "length" .= fileNoteLength, + "created_at" .= showFileNoteTime fileNoteCreatedAt, + "updated_at" .= showFileNoteTime fileNoteUpdatedAt + ] + toEncoding FileNote {..} = + A.pairs + ( "id" .= fileNoteId + <> "title" .= fileNoteTitle + <> "text" .= fileNoteText + <> "length" .= fileNoteLength + <> "created_at" .= showFileNoteTime fileNoteCreatedAt + <> "updated_at" .= showFileNoteTime fileNoteUpdatedAt + ) + +readFileNoteTime :: + (MonadFail m) => + String -> m UTCTime +readFileNoteTime = parseTimeM True defaultTimeLocale "%F %T" + +showFileNoteTime :: UTCTime -> String +showFileNoteTime = formatTime defaultTimeLocale "%F %T" + +fileNoteToNote :: UserId -> FileNote -> IO Note +fileNoteToNote user FileNote {..} = do + slug <- mkNtSlug + pure + $ Note + { noteUserId = user, + noteSlug = slug, + noteLength = fileNoteLength, + noteTitle = fileNoteTitle, + noteText = fileNoteText, + noteIsMarkdown = False, + noteShared = False, + noteCreated = fileNoteCreatedAt, + noteUpdated = fileNoteUpdatedAt + } + +readDirFileNotes :: (MonadIO m) => FilePath -> m (Either String [FileNote]) +readDirFileNotes fdir = liftIO $ do + files <- listDirectory fdir + noteBSS <- mapM (readFile . (fdir </>)) files + pure (mapM (A.eitherDecode' . fromStrict) noteBSS) + +insertFileNotes :: Key User -> [FileNote] -> DB Int +insertFileNotes userId fnotes = do + notes <- liftIO $ mapM (fileNoteToNote userId) fnotes + void $ mapM insertUnique notes + pure (length notes) + +insertDirFileNotes :: Key User -> FilePath -> DB (Either String Int) +insertDirFileNotes userId noteDirectory = do + mfnotes <- liftIO $ readDirFileNotes noteDirectory + case mfnotes of + Left e -> pure $ Left e + Right fnotes -> Right <$> insertFileNotes userId fnotes
src/Model/Form.hs view
@@ -1,238 +1,241 @@-module Model.Form where--import ClassyPrelude.Yesod hiding (Value, exists, groupBy, on, (<=.), (==.), (>=.), (||.))-import ClassyPrelude.Yesod qualified as CP-import Data.Aeson qualified as A-import Database.Esqueleto.Experimental hiding ((<&>))-import Model-import Model.Custom-import Types---- * AccountSettingsForm--data AccountSettingsForm = AccountSettingsForm- { _privateDefault :: Bool,- _archiveDefault :: Bool,- _suggestTags :: Bool,- _privacyLock :: Bool,- _archiveBackendEnabled :: Bool,- _language :: Maybe I18nLang- }- deriving (Show, Eq, Generic)--instance FromJSON AccountSettingsForm where parseJSON = A.genericParseJSON gDefaultFormOptions--instance ToJSON AccountSettingsForm where toJSON = A.genericToJSON gDefaultFormOptions--toAccountSettingsForm :: Bool -> User -> AccountSettingsForm-toAccountSettingsForm archiveBackendEnabled User {..} =- AccountSettingsForm- { _privateDefault = userPrivateDefault,- _archiveDefault = userArchiveDefault,- _suggestTags = userSuggestTags,- _privacyLock = userPrivacyLock,- _archiveBackendEnabled = archiveBackendEnabled,- _language = userLanguage- }--updateUserFromAccountSettingsForm :: Key User -> AccountSettingsForm -> DB ()-updateUserFromAccountSettingsForm userId AccountSettingsForm {..} =- CP.update- userId- [ UserPrivateDefault CP.=. _privateDefault,- UserArchiveDefault CP.=. _archiveDefault,- UserSuggestTags CP.=. _suggestTags,- UserPrivacyLock CP.=. _privacyLock,- UserLanguage CP.=. _language- ]---- * BookmarkForm--data BookmarkForm = BookmarkForm- { _url :: Text,- _title :: Maybe Text,- _description :: Maybe Textarea,- _tags :: Maybe Text,- _private :: Maybe Bool,- _toread :: Maybe Bool,- _bid :: Maybe Int64,- _slug :: Maybe BmSlug,- _selected :: Maybe Bool,- _time :: Maybe UTCTimeStr,- _archiveUrl :: Maybe Text,- _archiveRequested :: Maybe Bool- }- deriving (Show, Eq, Read, Generic)--instance FromJSON BookmarkForm where parseJSON = A.genericParseJSON gDefaultFormOptions--instance ToJSON BookmarkForm where- toJSON BookmarkForm {..} =- A.object- $ [ "url" .= _url,- "title" .= _title,- "description" .= _description,- "tags" .= _tags,- "private" .= _private,- "toread" .= _toread,- "bid" .= _bid,- "slug" .= _slug,- "selected" .= _selected,- "time" .= _time- ]- ++ maybe [] (\x -> ["archiveUrl" .= x]) _archiveUrl- ++ maybe [] (\x -> ["archiveRequested" .= x]) _archiveRequested- toEncoding BookmarkForm {..} =- A.pairs- $ mconcat- [ "url" .= _url,- "title" .= _title,- "description" .= _description,- "tags" .= _tags,- "private" .= _private,- "toread" .= _toread,- "bid" .= _bid,- "slug" .= _slug,- "selected" .= _selected,- "time" .= _time- ]- <> maybe mempty ("archiveUrl" .=) _archiveUrl- <> maybe mempty ("archiveRequested" .=) _archiveRequested--gDefaultFormOptions :: A.Options-gDefaultFormOptions = A.defaultOptions {A.fieldLabelModifier = drop 1}--toBookmarkFormListForViewer :: Bool -> [(Entity Bookmark, Maybe Text)] -> [BookmarkForm]-toBookmarkFormListForViewer isowner =- fmap $ \entry ->- let form = _toBookmarkForm' entry- in if isowner then form else form {_selected = Just False, _toread = Just False, _archiveUrl = Nothing}--mkNewBookmarkForm :: Bool -> User -> Text -> Maybe Text -> Maybe Textarea -> Maybe Text -> Maybe Bool -> Maybe Bool -> BookmarkForm-mkNewBookmarkForm archiveBackendEnabled user url title description tags private toread =- BookmarkForm- { _url = url,- _title = title,- _description = description,- _tags = tags,- _private = private,- _toread = toread,- _bid = Nothing,- _slug = Nothing,- _selected = Nothing,- _time = Nothing,- _archiveUrl = Nothing,- _archiveRequested =- if archiveBackendEnabled- then Just (userArchiveDefault user && maybe True not private)- else Nothing- }--toBookmarkForm :: (Entity Bookmark, [Entity BookmarkTag]) -> BookmarkForm-toBookmarkForm (bm, tags) =- _toBookmarkForm' (bm, Just $ tagsToText tags)- where- tagsToText :: [Entity BookmarkTag] -> Text- tagsToText = unwords . fmap (bookmarkTagTag . entityVal)--_toBookmarkForm' :: (Entity Bookmark, Maybe Text) -> BookmarkForm-_toBookmarkForm' (Entity bid Bookmark {..}, tags) =- BookmarkForm- { _url = bookmarkHref,- _title = Just bookmarkDescription,- _description = Just $ Textarea $ bookmarkExtended,- _tags = Just $ fromMaybe "" tags,- _private = Just $ not bookmarkShared,- _toread = Just bookmarkToRead,- _bid = Just $ fromSqlKey $ bid,- _slug = Just bookmarkSlug,- _selected = Just bookmarkSelected,- _time = Just $ UTCTimeStr $ bookmarkTime,- _archiveUrl = bookmarkArchiveHref,- _archiveRequested = Nothing- }--bookmarkFormToBookmark :: UserId -> BookmarkForm -> IO Bookmark-bookmarkFormToBookmark userId BookmarkForm {..} = do- time <- liftIO getCurrentTime- slug <- maybe mkBmSlug pure _slug- pure- $ Bookmark- { bookmarkUserId = userId,- bookmarkSlug = slug,- bookmarkHref = _url,- bookmarkDescription = fromMaybe "" _title,- bookmarkExtended = maybe "" unTextarea _description,- bookmarkTime = maybe time unUTCTimeStr _time,- bookmarkShared = maybe True not _private,- bookmarkToRead = Just True == _toread,- bookmarkSelected = Just True == _selected,- bookmarkArchiveHref = _archiveUrl- }---- * Tag suggestions--data TagSuggestionRequest = TagSuggestionRequest- { _query :: Text,- _currentTags :: Maybe [Text]- }- deriving (Show, Eq, Read, Generic)--data TagSuggestionResponse = TagSuggestionResponse- { _suggestions :: [Suggestion]- }- deriving (Show, Eq, Read, Generic)--data Suggestion = Suggestion- { _term :: Text,- _count :: Int- }- deriving (Show, Eq, Read, Generic)--instance FromJSON TagSuggestionRequest where parseJSON = A.genericParseJSON gDefaultFormOptions--instance ToJSON TagSuggestionRequest where toJSON = A.genericToJSON gDefaultFormOptions--instance FromJSON TagSuggestionResponse where parseJSON = A.genericParseJSON gDefaultFormOptions--instance ToJSON TagSuggestionResponse where toJSON = A.genericToJSON gDefaultFormOptions--instance FromJSON Suggestion where parseJSON = A.genericParseJSON gDefaultFormOptions--instance ToJSON Suggestion where toJSON = A.genericToJSON gDefaultFormOptions--getTagSuggestions :: Key User -> TagSuggestionRequest -> Int -> DB TagSuggestionResponse-getTagSuggestions user TagSuggestionRequest {_query = query, _currentTags = currentTags} top = do- values <-- fmap (bimap unValue unValue)- <$> ( select $ do- (tag, countRows', matchPriority) <- from suggestionsQuery- orderBy [asc matchPriority, desc countRows', asc $ lower_ tag]- limit (fromIntegral top)- pure (tag, countRows')- )- pure- TagSuggestionResponse- { _suggestions = uncurry Suggestion <$> values- }- where- excludedTags = take 400 $ map toLower (fromMaybe ([] :: [Text]) currentTags)-- suggestionsQuery = do- t <- from (table @BookmarkTag)- where_- ( t- ^. BookmarkTagUserId- ==. val user- &&. (lower_ (t ^. BookmarkTagTag) `like` lower_ ((%) ++. val query ++. (%)))- )- unless (null excludedTags) $ where_ $ not_ (lower_ (t ^. BookmarkTagTag) `in_` valList excludedTags)- let countRows' = countRows- matchPriority =- case_- [ when_ (lower_ (t ^. BookmarkTagTag) ==. lower_ (val query)) then_ (val (0 :: Int)),- when_ (lower_ (t ^. BookmarkTagTag) `like` lower_ (val query ++. (%))) then_ (val (1 :: Int))- ]- (else_ (val (2 :: Int)))- groupBy (lower_ (t ^. BookmarkTagTag))- pure (t ^. BookmarkTagTag, countRows', matchPriority)+module Model.Form where + +import ClassyPrelude.Yesod hiding (Value, exists, groupBy, on, (<=.), (==.), (>=.), (||.)) +import ClassyPrelude.Yesod qualified as CP +import Data.Aeson qualified as A +import Database.Esqueleto.Experimental hiding ((<&>)) +import Model +import Model.Custom +import Types + +-- * AccountSettingsForm + +data AccountSettingsForm = AccountSettingsForm + { _privateDefault :: Bool, + _archiveDefault :: Bool, + _suggestTags :: Bool, + _privacyLock :: Bool, + _publicTagCloud :: Bool, + _archiveBackendEnabled :: Bool, + _language :: Maybe I18nLang + } + deriving (Show, Eq, Generic) + +instance FromJSON AccountSettingsForm where parseJSON = A.genericParseJSON gDefaultFormOptions + +instance ToJSON AccountSettingsForm where toJSON = A.genericToJSON gDefaultFormOptions + +toAccountSettingsForm :: Bool -> User -> AccountSettingsForm +toAccountSettingsForm archiveBackendEnabled User {..} = + AccountSettingsForm + { _privateDefault = userPrivateDefault, + _archiveDefault = userArchiveDefault, + _suggestTags = userSuggestTags, + _privacyLock = userPrivacyLock, + _publicTagCloud = userPublicTagCloud, + _archiveBackendEnabled = archiveBackendEnabled, + _language = userLanguage + } + +updateUserFromAccountSettingsForm :: Key User -> AccountSettingsForm -> DB () +updateUserFromAccountSettingsForm userId AccountSettingsForm {..} = + CP.update + userId + [ UserPrivateDefault CP.=. _privateDefault, + UserArchiveDefault CP.=. _archiveDefault, + UserSuggestTags CP.=. _suggestTags, + UserPrivacyLock CP.=. _privacyLock, + UserPublicTagCloud CP.=. _publicTagCloud, + UserLanguage CP.=. _language + ] + +-- * BookmarkForm + +data BookmarkForm = BookmarkForm + { _url :: Text, + _title :: Maybe Text, + _description :: Maybe Textarea, + _tags :: Maybe Text, + _private :: Maybe Bool, + _toread :: Maybe Bool, + _bid :: Maybe Int64, + _slug :: Maybe BmSlug, + _selected :: Maybe Bool, + _time :: Maybe UTCTimeStr, + _archiveUrl :: Maybe Text, + _archiveRequested :: Maybe Bool + } + deriving (Show, Eq, Read, Generic) + +instance FromJSON BookmarkForm where parseJSON = A.genericParseJSON gDefaultFormOptions + +instance ToJSON BookmarkForm where + toJSON BookmarkForm {..} = + A.object + $ [ "url" .= _url, + "title" .= _title, + "description" .= _description, + "tags" .= _tags, + "private" .= _private, + "toread" .= _toread, + "bid" .= _bid, + "slug" .= _slug, + "selected" .= _selected, + "time" .= _time + ] + ++ maybe [] (\x -> ["archiveUrl" .= x]) _archiveUrl + ++ maybe [] (\x -> ["archiveRequested" .= x]) _archiveRequested + toEncoding BookmarkForm {..} = + A.pairs + $ mconcat + [ "url" .= _url, + "title" .= _title, + "description" .= _description, + "tags" .= _tags, + "private" .= _private, + "toread" .= _toread, + "bid" .= _bid, + "slug" .= _slug, + "selected" .= _selected, + "time" .= _time + ] + <> maybe mempty ("archiveUrl" .=) _archiveUrl + <> maybe mempty ("archiveRequested" .=) _archiveRequested + +gDefaultFormOptions :: A.Options +gDefaultFormOptions = A.defaultOptions {A.fieldLabelModifier = drop 1} + +toBookmarkFormListForViewer :: Bool -> [(Entity Bookmark, Maybe Text)] -> [BookmarkForm] +toBookmarkFormListForViewer isowner = + fmap $ \entry -> + let form = _toBookmarkForm' entry + in if isowner then form else form {_selected = Just False, _toread = Just False, _archiveUrl = Nothing} + +mkNewBookmarkForm :: Bool -> User -> Text -> Maybe Text -> Maybe Textarea -> Maybe Text -> Maybe Bool -> Maybe Bool -> BookmarkForm +mkNewBookmarkForm archiveBackendEnabled user url title description tags private toread = + BookmarkForm + { _url = url, + _title = title, + _description = description, + _tags = tags, + _private = private, + _toread = toread, + _bid = Nothing, + _slug = Nothing, + _selected = Nothing, + _time = Nothing, + _archiveUrl = Nothing, + _archiveRequested = + if archiveBackendEnabled + then Just (userArchiveDefault user && maybe True not private) + else Nothing + } + +toBookmarkForm :: (Entity Bookmark, [Entity BookmarkTag]) -> BookmarkForm +toBookmarkForm (bm, tags) = + _toBookmarkForm' (bm, Just $ tagsToText tags) + where + tagsToText :: [Entity BookmarkTag] -> Text + tagsToText = unwords . fmap (bookmarkTagTag . entityVal) + +_toBookmarkForm' :: (Entity Bookmark, Maybe Text) -> BookmarkForm +_toBookmarkForm' (Entity bid Bookmark {..}, tags) = + BookmarkForm + { _url = bookmarkHref, + _title = Just bookmarkDescription, + _description = Just $ Textarea $ bookmarkExtended, + _tags = Just $ fromMaybe "" tags, + _private = Just $ not bookmarkShared, + _toread = Just bookmarkToRead, + _bid = Just $ fromSqlKey $ bid, + _slug = Just bookmarkSlug, + _selected = Just bookmarkSelected, + _time = Just $ UTCTimeStr $ bookmarkTime, + _archiveUrl = bookmarkArchiveHref, + _archiveRequested = Nothing + } + +bookmarkFormToBookmark :: UserId -> BookmarkForm -> IO Bookmark +bookmarkFormToBookmark userId BookmarkForm {..} = do + time <- liftIO getCurrentTime + slug <- maybe mkBmSlug pure _slug + pure + $ Bookmark + { bookmarkUserId = userId, + bookmarkSlug = slug, + bookmarkHref = _url, + bookmarkDescription = fromMaybe "" _title, + bookmarkExtended = maybe "" unTextarea _description, + bookmarkTime = maybe time unUTCTimeStr _time, + bookmarkShared = maybe True not _private, + bookmarkToRead = Just True == _toread, + bookmarkSelected = Just True == _selected, + bookmarkArchiveHref = _archiveUrl + } + +-- * Tag suggestions + +data TagSuggestionRequest = TagSuggestionRequest + { _query :: Text, + _currentTags :: Maybe [Text] + } + deriving (Show, Eq, Read, Generic) + +data TagSuggestionResponse = TagSuggestionResponse + { _suggestions :: [Suggestion] + } + deriving (Show, Eq, Read, Generic) + +data Suggestion = Suggestion + { _term :: Text, + _count :: Int + } + deriving (Show, Eq, Read, Generic) + +instance FromJSON TagSuggestionRequest where parseJSON = A.genericParseJSON gDefaultFormOptions + +instance ToJSON TagSuggestionRequest where toJSON = A.genericToJSON gDefaultFormOptions + +instance FromJSON TagSuggestionResponse where parseJSON = A.genericParseJSON gDefaultFormOptions + +instance ToJSON TagSuggestionResponse where toJSON = A.genericToJSON gDefaultFormOptions + +instance FromJSON Suggestion where parseJSON = A.genericParseJSON gDefaultFormOptions + +instance ToJSON Suggestion where toJSON = A.genericToJSON gDefaultFormOptions + +getTagSuggestions :: Key User -> TagSuggestionRequest -> Int -> DB TagSuggestionResponse +getTagSuggestions user TagSuggestionRequest {_query = query, _currentTags = currentTags} top = do + values <- + fmap (bimap unValue unValue) + <$> ( select $ do + (tag, countRows', matchPriority) <- from suggestionsQuery + orderBy [asc matchPriority, desc countRows', asc $ lower_ tag] + limit (fromIntegral top) + pure (tag, countRows') + ) + pure + TagSuggestionResponse + { _suggestions = uncurry Suggestion <$> values + } + where + excludedTags = take 400 $ map toLower (fromMaybe ([] :: [Text]) currentTags) + + suggestionsQuery = do + t <- from (table @BookmarkTag) + where_ + ( t + ^. BookmarkTagUserId + ==. val user + &&. (lower_ (t ^. BookmarkTagTag) `like` lower_ ((%) ++. val query ++. (%))) + ) + unless (null excludedTags) $ where_ $ not_ (lower_ (t ^. BookmarkTagTag) `in_` valList excludedTags) + let countRows' = countRows + matchPriority = + case_ + [ when_ (lower_ (t ^. BookmarkTagTag) ==. lower_ (val query)) then_ (val (0 :: Int)), + when_ (lower_ (t ^. BookmarkTagTag) `like` lower_ (val query ++. (%))) then_ (val (1 :: Int)) + ] + (else_ (val (2 :: Int))) + groupBy (lower_ (t ^. BookmarkTagTag)) + pure (t ^. BookmarkTagTag, countRows', matchPriority)
src/Settings.hs view
@@ -1,232 +1,243 @@--- | Settings are centralized, as much as possible, into this file. This--- includes database connection settings, static file locations, etc.--- In addition, you can configure a number of different aspects of Yesod--- by overriding methods in the Yesod typeclass. That instance is--- declared in the Foundation.hs file.-module Settings where--import ClassyPrelude.Yesod-import qualified Control.Exception as Exception-import Data.Aeson- ( Result (..),- encode,- fromJSON,- withObject,- withText,- (.!=),- (.:?),- )-import Data.FileEmbed (embedFile)-import Data.Yaml (decodeEither')-import Database.Persist.Sqlite (SqliteConf)-import Language.Haskell.TH.Syntax (Exp, Name, Q)-import Network.Wai.Handler.Warp (HostPreference)-import Yesod.Default.Config2 (applyEnvValue, configSettingsYml)-import Yesod.Default.Util- ( WidgetFileSettings,- widgetFileNoReload,- widgetFileReload,- )-import Model---- | Runtime settings to configure this application. These settings can be--- loaded from various sources: defaults, environment variables, config files,--- theoretically even a database.-data AppSettings = AppSettings- { -- | Directory from which to serve static files.- appStaticDir :: String,- -- | Configuration settings for accessing the database.- appDatabaseConf :: SqliteConf,- -- | Base for all generated URLs. If @Nothing@, determined- -- from the request headers.- appRoot :: Maybe Text,- -- | Host/interface the server should bind to.- appHost :: HostPreference,- -- | Port to listen on- appPort :: Int,- -- | Get the IP address from the header when logging. Useful when sitting- -- behind a reverse proxy.- appIpFromHeader :: Bool,- -- | Use detailed request logging system- appDetailedRequestLogging :: Bool,- -- | Enable request logging middleware.- appEnableRequestLogging :: Bool,- -- | Should all log messages be displayed?- appShouldLogAll :: Bool,- -- | Enable startup and migration log output.- appEnableStartupLogging :: Bool,- -- | Use the reload version of templates- appReloadTemplates :: Bool,- -- | Assume that files in the static dir may change after compilation- appMutableStatic :: Bool,- -- | Perform no stylesheet/script combining- appSkipCombining :: Bool,- -- Example app-specific configuration values.-- -- | Copyright text to appear in the footer of the page- appCopyright :: Text,- -- | Google Analytics code- appAnalytics :: Maybe Text,- -- | Indicate if auth dummy login should be enabled.- appAuthDummyLogin :: Bool,- -- | Socks proxy host to use when making archive requests- appArchiveSocksProxyHost :: Maybe Text,- -- | Socks proxy port to use when making archive requests- appArchiveSocksProxyPort :: Maybe Int,- -- | Wayback Machine access key for archive requests- appWaybackMachineAccessKey :: Maybe Text,- -- | Wayback Machine secret key for archive requests- appWaybackMachineSecretKey :: Maybe Text,- -- | ArchiveBox-07 base URL used for web UI login and submissions- appArchiveBoxUrl :: Maybe Text,- -- | Public ArchiveBox-07 base URL used for bookmark links- appArchiveBoxPublicUrl :: Maybe Text,- -- | ArchiveBox-07 admin username used for web UI login- appArchiveBoxUsername :: Maybe Text,- -- | ArchiveBox-07 admin password used for web UI login- appArchiveBoxPassword :: Maybe Text,- -- | Tag applied to URLs submitted via the ArchiveBox-07 backend- appArchiveBoxTag :: Text,- -- | Optional comma-separated ArchiveBox-07 archive method override- appArchiveBoxPlugins :: Maybe Text,- -- | Which archiver backend to use (or disabled)- appArchiveBackend :: ArchiveBackend,- -- | Uri to app source code- appSourceCodeUri :: Maybe Text,- -- | Whether to only allow SSL connections (i.e. disable non-https cookies and redirects)- appSSLOnly :: Bool,- -- | Whether to allow non-http URL schemes (e.g. mailto:, ipfs:, etc.) in user input.- appAllowNonHttpUrlSchemes :: Bool,- -- | Default language for the application- appLanguageDefault :: I18nLang- }--instance FromJSON AppSettings where- parseJSON = withObject "AppSettings" \o -> do- let defaultDev =-#ifdef DEVELOPMENT- True-#else- False-#endif- appStaticDir <- o .: "static-dir"- appDatabaseConf <- o .: "database"- appRoot <- o .:? "approot"- appHost <- fromString <$> o .: "host"- appPort <- o .: "port"- appIpFromHeader <- o .: "ip-from-header"-- dev <- o .:? "development" .!= defaultDev-- appDetailedRequestLogging <- o .:? "detailed-logging" .!= dev- appEnableRequestLogging <- o .:? "request-logging" .!= True- appShouldLogAll <- o .:? "should-log-all" .!= dev- appEnableStartupLogging <- o .:? "startup-logging" .!= True- appReloadTemplates <- o .:? "reload-templates" .!= dev- appMutableStatic <- o .:? "mutable-static" .!= dev- appSkipCombining <- o .:? "skip-combining" .!= dev-- appCopyright <- o .: "copyright"- appAnalytics <- o .:? "analytics"-- appAuthDummyLogin <- o .:? "auth-dummy-login" .!= dev-- appArchiveBackend <- o .:? "archive-backend" .!= ArchiveBackendDisabled-- appArchiveSocksProxyHost <- o .:? "archive-socks-proxy-host"- appArchiveSocksProxyPort <- o .:? "archive-socks-proxy-port"-- appWaybackMachineAccessKey <- fmap toText <$> o .:? "wayback-machine-access-key"- appWaybackMachineSecretKey <- fmap toText <$> o .:? "wayback-machine-secret-key"-- appArchiveBoxUrl <- o .:? "archivebox-url"- appArchiveBoxPublicUrl <- o .:? "archivebox-public-url"- appArchiveBoxUsername <- fmap toText <$> o .:? "archivebox-username"- appArchiveBoxPassword <- fmap toText <$> o .:? "archivebox-password"- appArchiveBoxTag <- (fmap toText <$> o .:? "archivebox-tag") .!= "espial"- appArchiveBoxPlugins <- o .:? "archivebox-plugins"-- appSourceCodeUri <- o .:? "source-code-uri"-- appSSLOnly <- fromMaybe False <$> o .:? "ssl-only"-- appAllowNonHttpUrlSchemes <- o .:? "allow-non-http-url-schemes" .!= False-- appLanguageDefault <- o .:? "language-default" .!= I18nLangEn-- return AppSettings {..}- where- toText (String t) = t- toText other = (decodeUtf8 . toStrict . encode) other---- | Selects which archive backend is active.-data ArchiveBackend = ArchiveBackendDisabled | ArchiveBackendDebug | ArchiveBackendArchiveLi | ArchiveBackendWaybackMachine | ArchiveBackendArchiveBox07- deriving (Show, Eq)--instance FromJSON ArchiveBackend where- parseJSON = withText "ArchiveBackend" $ \case- "disabled" -> pure ArchiveBackendDisabled- "debug" -> pure ArchiveBackendDebug- "archive-li" -> pure ArchiveBackendArchiveLi- "wayback-machine" -> pure ArchiveBackendWaybackMachine- "archivebox07" -> pure ArchiveBackendArchiveBox07- _ -> mzero---- | Settings for 'widgetFile', such as which template languages to support and--- default Hamlet settings.------ For more information on modifying behavior, see:------ https://github.com/yesodweb/yesod/wiki/Overriding-widgetFile-widgetFileSettings :: WidgetFileSettings-widgetFileSettings = def---- | How static files should be combined.-combineSettings :: CombineSettings-combineSettings = def---- The rest of this file contains settings which rarely need changing by a--- user.--widgetFile :: String -> Q Exp-widgetFile =- ( if appReloadTemplates compileTimeAppSettings- then widgetFileReload- else widgetFileNoReload- )- widgetFileSettings---- | Raw bytes at compile time of @config/settings.yml@-configSettingsYmlBS :: ByteString-configSettingsYmlBS = $(embedFile configSettingsYml)---- | @config/settings.yml@, parsed to a @Value@.-configSettingsYmlValue :: Value-configSettingsYmlValue =- either Exception.throw id- $ decodeEither' configSettingsYmlBS---- | A version of @AppSettings@ parsed at compile time from @config/settings.yml@.-compileTimeAppSettings :: AppSettings-compileTimeAppSettings =- case fromJSON $ applyEnvValue False mempty configSettingsYmlValue of- Error e -> error e- Success settings -> settings---- The following two functions can be used to combine multiple CSS or JS files--- at compile time to decrease the number of http requests.--- Sample usage (inside a Widget):------ > $(combineStylesheets 'StaticR [style1_css, style2_css])--combineStylesheets :: Name -> [Route Static] -> Q Exp-combineStylesheets =- combineStylesheets'- (appSkipCombining compileTimeAppSettings)- combineSettings--combineScripts :: Name -> [Route Static] -> Q Exp-combineScripts =- combineScripts'- (appSkipCombining compileTimeAppSettings)+-- | Settings are centralized, as much as possible, into this file. This +-- includes database connection settings, static file locations, etc. +-- In addition, you can configure a number of different aspects of Yesod +-- by overriding methods in the Yesod typeclass. That instance is +-- declared in the Foundation.hs file. +module Settings where + +import ClassyPrelude.Yesod +import qualified Control.Exception as Exception +import Data.Aeson + ( Result (..), + encode, + fromJSON, + withObject, + withText, + (.!=), + (.:?), + ) +import Data.FileEmbed (embedFile) +import Data.Yaml (decodeEither') +import Database.Persist.Sqlite (SqliteConf) +import Language.Haskell.TH.Syntax (Exp, Name, Q) +import Network.Wai.Handler.Warp (HostPreference) +import Yesod.Default.Config2 (applyEnvValue, configSettingsYml) +import Yesod.Default.Util + ( WidgetFileSettings, + widgetFileNoReload, + widgetFileReload, + ) +import Model + +-- | Runtime settings to configure this application. These settings can be +-- loaded from various sources: defaults, environment variables, config files, +-- theoretically even a database. +data AppSettings = AppSettings + { -- | Directory from which to serve static files. + appStaticDir :: String, + -- | Configuration settings for accessing the database. + appDatabaseConf :: SqliteConf, + -- | Base for all generated URLs. If @Nothing@, determined + -- from the request headers. + appRoot :: Maybe Text, + -- | Host/interface the server should bind to. + appHost :: HostPreference, + -- | Port to listen on + appPort :: Int, + -- | Get the IP address from the header when logging. Useful when sitting + -- behind a reverse proxy. + appIpFromHeader :: Bool, + -- | Use detailed request logging system + appDetailedRequestLogging :: Bool, + -- | Enable request logging middleware. + appEnableRequestLogging :: Bool, + -- | Should all log messages be displayed? + appShouldLogAll :: Bool, + -- | Enable startup and migration log output. + appEnableStartupLogging :: Bool, + -- | Use the reload version of templates + appReloadTemplates :: Bool, + -- | Assume that files in the static dir may change after compilation + appMutableStatic :: Bool, + -- | Perform no stylesheet/script combining + appSkipCombining :: Bool, + -- Example app-specific configuration values. + + -- | Copyright text to appear in the footer of the page + appCopyright :: Text, + -- | Google Analytics code + appAnalytics :: Maybe Text, + -- | Indicate if auth dummy login should be enabled. + appAuthDummyLogin :: Bool, + -- | Socks proxy host to use when making archive requests + appArchiveSocksProxyHost :: Maybe Text, + -- | Socks proxy port to use when making archive requests + appArchiveSocksProxyPort :: Maybe Int, + -- | Wayback Machine access key for archive requests + appWaybackMachineAccessKey :: Maybe Text, + -- | Wayback Machine secret key for archive requests + appWaybackMachineSecretKey :: Maybe Text, + -- | ArchiveBox-07 base URL used for web UI login and submissions + appArchiveBoxUrl :: Maybe Text, + -- | Public ArchiveBox-07 base URL used for bookmark links + appArchiveBoxPublicUrl :: Maybe Text, + -- | ArchiveBox-07 admin username used for web UI login + appArchiveBoxUsername :: Maybe Text, + -- | ArchiveBox-07 admin password used for web UI login + appArchiveBoxPassword :: Maybe Text, + -- | Tag applied to URLs submitted via the ArchiveBox-07 backend + appArchiveBoxTag :: Text, + -- | Optional comma-separated ArchiveBox-07 archive method override + appArchiveBoxPlugins :: Maybe Text, + -- | Which archiver backend to use (or disabled) + appArchiveBackend :: ArchiveBackend, + -- | Uri to app source code + appSourceCodeUri :: Maybe Text, + -- | Whether to only allow SSL connections (i.e. disable non-https cookies and redirects) + appSSLOnly :: Bool, + -- | Whether to allow non-http URL schemes (e.g. mailto:, ipfs:, etc.) in user input. + appAllowNonHttpUrlSchemes :: Bool, + -- | Default language for the application + appLanguageDefault :: I18nLang, + -- | Path to TLS certificate file; enables TLS when set with appTLSKeyFile + appTLSCertFile :: Maybe FilePath, + -- | Path to TLS private key file; enables TLS when set with appTLSCertFile + appTLSKeyFile :: Maybe FilePath, + -- | TTL in seconds for the public tag cloud response cache + appPublicTagCloudCacheDurationSeconds :: Int + } + +instance FromJSON AppSettings where + parseJSON = withObject "AppSettings" \o -> do + let defaultDev = +#ifdef DEVELOPMENT + True +#else + False +#endif + appStaticDir <- o .: "static-dir" + appDatabaseConf <- o .: "database" + appRoot <- o .:? "approot" + appHost <- fromString <$> o .: "host" + appPort <- o .: "port" + appIpFromHeader <- o .: "ip-from-header" + + dev <- o .:? "development" .!= defaultDev + + appDetailedRequestLogging <- o .:? "detailed-logging" .!= dev + appEnableRequestLogging <- o .:? "request-logging" .!= True + appShouldLogAll <- o .:? "should-log-all" .!= dev + appEnableStartupLogging <- o .:? "startup-logging" .!= True + appReloadTemplates <- o .:? "reload-templates" .!= dev + appMutableStatic <- o .:? "mutable-static" .!= dev + appSkipCombining <- o .:? "skip-combining" .!= dev + + appCopyright <- o .: "copyright" + appAnalytics <- o .:? "analytics" + + appAuthDummyLogin <- o .:? "auth-dummy-login" .!= dev + + appArchiveBackend <- o .:? "archive-backend" .!= ArchiveBackendDisabled + + appArchiveSocksProxyHost <- o .:? "archive-socks-proxy-host" + appArchiveSocksProxyPort <- o .:? "archive-socks-proxy-port" + + appWaybackMachineAccessKey <- fmap toText <$> o .:? "wayback-machine-access-key" + appWaybackMachineSecretKey <- fmap toText <$> o .:? "wayback-machine-secret-key" + + appArchiveBoxUrl <- o .:? "archivebox-url" + appArchiveBoxPublicUrl <- o .:? "archivebox-public-url" + appArchiveBoxUsername <- fmap toText <$> o .:? "archivebox-username" + appArchiveBoxPassword <- fmap toText <$> o .:? "archivebox-password" + appArchiveBoxTag <- (fmap toText <$> o .:? "archivebox-tag") .!= "espial" + appArchiveBoxPlugins <- o .:? "archivebox-plugins" + + appSourceCodeUri <- o .:? "source-code-uri" + + appSSLOnly <- fromMaybe False <$> o .:? "ssl-only" + + appAllowNonHttpUrlSchemes <- o .:? "allow-non-http-url-schemes" .!= False + + appLanguageDefault <- o .:? "language-default" .!= I18nLangEn + + appTLSCertFile <- o .:? "tls-cert-file" + appTLSKeyFile <- o .:? "tls-key-file" + + appPublicTagCloudCacheDurationSeconds <- o .:? "public-tag-cloud-cache-duration-seconds" .!= 30 + + return AppSettings {..} + where + toText (String t) = t + toText other = (decodeUtf8 . toStrict . encode) other + +-- | Selects which archive backend is active. +data ArchiveBackend = ArchiveBackendDisabled | ArchiveBackendDebug | ArchiveBackendArchiveLi | ArchiveBackendWaybackMachine | ArchiveBackendArchiveBox07 + deriving (Show, Eq) + +instance FromJSON ArchiveBackend where + parseJSON = withText "ArchiveBackend" $ \case + "disabled" -> pure ArchiveBackendDisabled + "debug" -> pure ArchiveBackendDebug + "archive-li" -> pure ArchiveBackendArchiveLi + "wayback-machine" -> pure ArchiveBackendWaybackMachine + "archivebox07" -> pure ArchiveBackendArchiveBox07 + _ -> mzero + +-- | Settings for 'widgetFile', such as which template languages to support and +-- default Hamlet settings. +-- +-- For more information on modifying behavior, see: +-- +-- https://github.com/yesodweb/yesod/wiki/Overriding-widgetFile +widgetFileSettings :: WidgetFileSettings +widgetFileSettings = def + +-- | How static files should be combined. +combineSettings :: CombineSettings +combineSettings = def + +-- The rest of this file contains settings which rarely need changing by a +-- user. + +widgetFile :: String -> Q Exp +widgetFile = + ( if appReloadTemplates compileTimeAppSettings + then widgetFileReload + else widgetFileNoReload + ) + widgetFileSettings + +-- | Raw bytes at compile time of @config/settings.yml@ +configSettingsYmlBS :: ByteString +configSettingsYmlBS = $(embedFile configSettingsYml) + +-- | @config/settings.yml@, parsed to a @Value@. +configSettingsYmlValue :: Value +configSettingsYmlValue = + either Exception.throw id + $ decodeEither' configSettingsYmlBS + +-- | A version of @AppSettings@ parsed at compile time from @config/settings.yml@. +compileTimeAppSettings :: AppSettings +compileTimeAppSettings = + case fromJSON $ applyEnvValue False mempty configSettingsYmlValue of + Error e -> error e + Success settings -> settings + +-- The following two functions can be used to combine multiple CSS or JS files +-- at compile time to decrease the number of http requests. +-- Sample usage (inside a Widget): +-- +-- > $(combineStylesheets 'StaticR [style1_css, style2_css]) + +combineStylesheets :: Name -> [Route Static] -> Q Exp +combineStylesheets = + combineStylesheets' + (appSkipCombining compileTimeAppSettings) + combineSettings + +combineScripts :: Name -> [Route Static] -> Q Exp +combineScripts = + combineScripts' + (appSkipCombining compileTimeAppSettings) combineSettings
src/Util.hs view
@@ -1,19 +1,31 @@-module Util where--import Data.Map.Strict qualified as M-import Prelude--inverseMap ::- forall a k.- (Bounded a, Enum a, Ord k) =>- (a -> k) ->- (k -> Maybe a)-inverseMap f = \k -> M.lookup k dict- where- dict :: M.Map k a- dict = M.fromList ((fmap . toFst) f ([minBound .. maxBound]))-{-# INLINE inverseMap #-}--toFst :: (a -> b) -> a -> (b, a)-toFst f a = (f a, a)-{-# INLINE toFst #-}+module Util where + +import ClassyPrelude (Text) +import Data.CaseInsensitive qualified as CI +import Data.List (nubBy) +import Data.Map.Strict qualified as M +import Data.Text (replace, words) +import Prelude hiding (words) + +inverseMap :: + forall a k. + (Bounded a, Enum a, Ord k) => + (a -> k) -> + (k -> Maybe a) +inverseMap f = \k -> M.lookup k dict + where + dict :: M.Map k a + dict = M.fromList ((fmap . toFst) f ([minBound .. maxBound])) +{-# INLINE inverseMap #-} + +toFst :: (a -> b) -> a -> (b, a) +toFst f a = (f a, a) +{-# INLINE toFst #-} + +batchOf :: Int -> [a] -> [[a]] +batchOf _ [] = [] +batchOf n xs = let (h, t) = splitAt n xs in h : batchOf n t +{-# INLINE batchOf #-} + +normalizeTags :: Text -> [Text] +normalizeTags = nubBy (\a b -> CI.mk a == CI.mk b) . words . replace "," " "
stack.yaml view
@@ -1,5 +1,5 @@-resolver: lts-24.42-packages:-- .-extra-deps:-- persistent-sqlite-2.13.3.0@sha256:04caa8dba2a310a4dcf06295fbb4be7eed2ca9c2da92076bac3dd1a66b946062,5155+resolver: lts-24.46 +packages: + - . +extra-deps: + - persistent-sqlite-2.13.3.0@sha256:04caa8dba2a310a4dcf06295fbb4be7eed2ca9c2da92076bac3dd1a66b946062,5155
stack.yaml.lock view
@@ -1,19 +1,19 @@-# This file was autogenerated by Stack.-# You should not edit this file by hand.-# For more information, please see the documentation at:-# https://docs.haskellstack.org/en/stable/topics/lock_files--packages:-- completed:- hackage: persistent-sqlite-2.13.3.0@sha256:04caa8dba2a310a4dcf06295fbb4be7eed2ca9c2da92076bac3dd1a66b946062,5155- pantry-tree:- sha256: a0bf1dbfce66d6c2191c30940c567379f2a7f7fa1fc0153e1b3727fab711a475- size: 834- original:- hackage: persistent-sqlite-2.13.3.0@sha256:04caa8dba2a310a4dcf06295fbb4be7eed2ca9c2da92076bac3dd1a66b946062,5155-snapshots:-- completed:- sha256: 85363ca92602ef9c8c3f6cfdb188efd3db3209ca3280eea4aad3b38b12a208a1- size: 729011- url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/24/42.yaml- original: lts-24.42+# This file was autogenerated by Stack. +# You should not edit this file by hand. +# For more information, please see the documentation at: +# https://docs.haskellstack.org/en/stable/topics/lock_files + +packages: +- completed: + hackage: persistent-sqlite-2.13.3.0@sha256:04caa8dba2a310a4dcf06295fbb4be7eed2ca9c2da92076bac3dd1a66b946062,5155 + pantry-tree: + sha256: a0bf1dbfce66d6c2191c30940c567379f2a7f7fa1fc0153e1b3727fab711a475 + size: 834 + original: + hackage: persistent-sqlite-2.13.3.0@sha256:04caa8dba2a310a4dcf06295fbb4be7eed2ca9c2da92076bac3dd1a66b946062,5155 +snapshots: +- completed: + sha256: 2e84de3088a8643c3743210ec31c50b2aeccf5fb085042d2e43e3ef700e7a2cd + size: 732461 + url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/24/46.yaml + original: lts-24.46
static/css/common.css view
@@ -1,350 +1,371 @@-/* Base */-html,-body {- background-color: light-dark(#fff, #121212);-}--[hidden] {- display: none !important;-}--a {- color: light-dark(oklch(42.903% 0.29735 264.073), oklch(76% 0.29735 264.073));-}--a:visited {- color: light-dark(oklch(37.836% 0.17168 302.149), oklch(73% 0.12 283));-}--a:active {- color: light-dark(oklch(59.598% 0.24457 29.223), oklch(75% 0.24457 29.223));-}--button {- background: none;- border: none;- padding: 0;- cursor: pointer;- white-space: nowrap;-}--button:focus {- outline: none;-}--input[type="text"],-input[type="url"],-input[type="password"],-textarea {- font-size: 16px;-}--input[type="text"],-input[type="url"],-input[type="password"],-input[type="search"],-input[type="email"],-input[type="number"],-textarea {- color: light-dark(#000, #f2f2f2);- background-color: light-dark(#fff, #0c0c0c);-- border: 1px solid light-dark(#767676, #555);- appearance: none;- -webkit-appearance: none;- box-shadow: none;- caret-color: currentColor;- -webkit-text-fill-color: currentColor;-}--:is(- input[type="text"],- input[type="url"],- input[type="password"],- input[type="search"],- input[type="email"],- input[type="number"],- textarea-):focus,-:is(- input[type="text"],- input[type="url"],- input[type="password"],- input[type="search"],- input[type="email"],- input[type="number"],- textarea-):focus-visible {- outline: none;- border-width: 2px;- border-color: light-dark(oklch(0% 0 258), oklch(75% 0 258));- border-radius: 4px;-}--label {- cursor: pointer;-}--:root {- color-scheme: light dark;-}--:root[data-color-scheme="light"] {- color-scheme: light;-}--:root[data-color-scheme="dark"] {- color-scheme: dark;-}--.color-scheme-toggle-dark-label,-.color-scheme-toggle-light-label {- display: none;-}--:root[data-color-scheme="light"] .color-scheme-toggle-dark-label {- display: inline;-}--:root[data-color-scheme="dark"] .color-scheme-toggle-light-label {- display: inline;-}--/* Colors */-.thm-bg-surface {- background-color: light-dark(#fff, #121212);-}--.thm-bg-secondary {- background-color: light-dark(#f4f4f4, #1f1f1f);-}--.thm-bg-selected {- background-color: light-dark(#96ccff, #1c4f7e);-}--.thm-bg-disabled {- background-color: light-dark(#aaa, #666);- cursor: not-allowed;-}--.not-allowed {- cursor: not-allowed;-}--.thm-text-primary {- color: light-dark(#333, #ddd);-}--.thm-text-secondary {- color: light-dark(#555, #bdbdbd);-}--.thm-text-tertiary,-.pager-arrow,-.search-icon {- color: light-dark(#777, #999);-}--.thm-text-muted {- color: light-dark(#aaa, #7a7a7a);-}--.thm-text-border,-.thm-text-faded {- color: light-dark(#ccc, #666);-}--.thm-text-strong {- color: light-dark(#000, #fff);-}--.thm-text-error {- color: light-dark(#ff4136, #ff6b63);-}--.thm-text-killed {- color: light-dark(#f00, #ff5c5c);-}--.thm-text-success {- color: light-dark(#137752, #44c08a);-}--.thm-text-selected {- color: light-dark(#001b44, #cfe1ff);-}--.thm-border-default {- border-color: light-dark(#ccc, #666);-}--.thm-border-dotted {- border-color: light-dark(#aaa, #777);-}--.thm-border-pwd {- border-color: light-dark(rgba(0, 0, 0, 0.2), rgba(255, 255, 255, 0.35));-}--.thm-border-pwd-box {- border-color: light-dark(rgba(0, 0, 0, 0.1), rgba(255, 255, 255, 0.2));-}--.thm-border-doc-table {- border-color: light-dark(rgba(0, 0, 0, 0.1), rgba(255, 255, 255, 0.2));-}--.thm-border-primary {- border-color: light-dark(#111, #efefef);-}--.thm-hover-link-color:hover {- color: light-dark(#06c, #6ab0ff);-}--input::placeholder {- color: light-dark(#d3d3d3, #8a8a8a);-}--.queryInput {- border-color: light-dark(gray, #8f8f8f);-}--.submitting .queryInput,-.queryInput.search-active {- border-color: light-dark(#990, #d9c65a);- background-color: light-dark(#ff9, #5b4d00);-}--.star.selected button {- color: light-dark(#22a, #7da2ff);-}--.tag,-a.tag:visited {- color: light-dark(oklch(54.38% 0.13279 52.009), oklch(64% 0.13229 52.009));-}--.tag-include,-a.tag-include:visited {- color: light-dark(#ddd, #9a9a9a);-}--.tag-exclude,-a.tag-exclude:visited {- color: light-dark(#faa, #ff9b9b);-}--.private {- background: light-dark(#ddd, #252525);- border: 1px solid light-dark(#d1d1d1, #101010);-}--.unread,-a.unread {- color: light-dark(oklch(54.561% 0.16363 39.683), oklch(81.93% 0.1259 60.765));-}--.mark_read {- color: light-dark(oklch(64.082% 0.12701 90.313), oklch(72% 0.12701 90.313));-}--.flash {- color: light-dark(green, #6fdd8b);- background: light-dark(#efe, #143321);-}--.top_menu a {- color: light-dark(blue, #8ab4ff);-}--.alert {- background: light-dark(#ced, #1d3340);- border: 1px solid light-dark(#acc, #3c5c70);-}--.alert.alert-err {- background-color: light-dark(#ffdfdf, #4a2323);-}--.edit_bookmark_form {- color: light-dark(#888, #a0a0a0);-}--.edit_bookmark_form input,-.edit_bookmark_form textarea {- border: 1px solid light-dark(#ddd, #555);-}--.nav-active {- background: light-dark(#ff8, #645700);- color: light-dark(rgb(0, 0, 255), #9ec1ff);-}--.close-x {- stroke: light-dark(gray, #9a9a9a);-}--.rss {- color: light-dark(- oklch(82.529% 0.17086 80.013),- oklch(62.035% 0.17086 80.013)- );-}--.rss:hover {- color: light-dark(- oklch(69.203% 0.20655 42.566),- oklch(49.203% 0.20655 42.566)- );-}--.hover-alt:hover {- color: light-dark(#357edd, #7aaeff);-}--.pager-link {- color: light-dark(#aaa, #8d8d8d);-}--.logo-div {- color: light-dark(#aaa, #eee);-}--.post-input {- color: light-dark(#000, #f2f2f2);- border-color: light-dark(#001b44, #5f88d6);-}--.layout-msg {- color: light-dark(- oklch(23.191% 0.08487 257.743),- oklch(63.176% 0.04487 257.743)- );- border-color: light-dark(- oklch(23.191% 0.08487 257.743),- oklch(63.176% 0.04487 257.743)- );- background-color: light-dark(- oklch(98.883% 0.02238 98.671),- oklch(28.242% 0.02238 98.671)- );-}--.query-info-icon {- color: light-dark(#357edd, #7aaeff);-}--.docs-item-bg,-.docs-striped-item:nth-child(odd) {- background-color: light-dark(#eee, #242424);-}--.login-div {- background-color: light-dark(#fff, #121212);-}--.login-bg {- background-color: light-dark(#f4f4f4, #1f1f1f);-}+/* Base */ +html, +body { + background-color: light-dark(#fff, #121212); +} + +[hidden] { + display: none !important; +} + +a { + color: light-dark(oklch(42.903% 0.29735 264.073), oklch(76% 0.29735 264.073)); +} + +a:visited { + color: light-dark(oklch(37.836% 0.17168 302.149), oklch(73% 0.12 283)); +} + +a:active { + color: light-dark(oklch(59.598% 0.24457 29.223), oklch(75% 0.24457 29.223)); +} + +button { + background: none; + border: none; + padding: 0; + cursor: pointer; + white-space: nowrap; +} + +button:focus { + outline: none; +} + +input[type="text"], +input[type="url"], +input[type="password"], +textarea { + font-size: 16px; +} + +input[type="text"], +input[type="url"], +input[type="password"], +input[type="search"], +input[type="email"], +input[type="number"], +textarea { + color: light-dark(#000, #f2f2f2); + background-color: light-dark(#fff, #0c0c0c); + + border: 1px solid light-dark(#767676, #555); + appearance: none; + -webkit-appearance: none; + box-shadow: none; + caret-color: currentColor; + -webkit-text-fill-color: currentColor; +} + +:is( + input[type="text"], + input[type="url"], + input[type="password"], + input[type="search"], + input[type="email"], + input[type="number"], + textarea +):focus, +:is( + input[type="text"], + input[type="url"], + input[type="password"], + input[type="search"], + input[type="email"], + input[type="number"], + textarea +):focus-visible { + outline: none; + border-width: 2px; + border-color: light-dark(oklch(0% 0 258), oklch(75% 0 258)); + border-radius: 4px; +} + +label { + cursor: pointer; +} + +:root { + color-scheme: light dark; +} + +:root[data-color-scheme="light"] { + color-scheme: light; +} + +:root[data-color-scheme="dark"] { + color-scheme: dark; +} + +.color-scheme-toggle-dark-label, +.color-scheme-toggle-light-label { + display: none; +} + +:root[data-color-scheme="light"] .color-scheme-toggle-dark-label { + display: inline; +} + +:root[data-color-scheme="dark"] .color-scheme-toggle-light-label { + display: inline; +} + +/* Colors */ +.thm-bg-surface { + background-color: light-dark(#fff, #121212); +} + +.thm-bg-secondary { + background-color: light-dark(#f4f4f4, #1f1f1f); +} + +.thm-bg-selected { + background-color: light-dark(#96ccff, #1c4f7e); +} + +.thm-bg-disabled { + background-color: light-dark(#aaa, #666); + cursor: not-allowed; +} + +.not-allowed { + cursor: not-allowed; +} + +.thm-text-primary { + color: light-dark(#333, #ddd); +} + +.thm-text-secondary { + color: light-dark(#555, #bdbdbd); +} + +.thm-text-tertiary, +.pager-arrow, +.search-icon { + color: light-dark(#777, #999); +} + +.thm-text-muted { + color: light-dark(#aaa, #7a7a7a); +} + +.thm-text-border, +.thm-text-faded { + color: light-dark(#ccc, #666); +} + +.thm-text-strong { + color: light-dark(#000, #fff); +} + +.thm-text-error { + color: light-dark(#ff4136, #ff6b63); +} + +.thm-text-killed { + color: light-dark(#f00, #ff5c5c); +} + +.thm-text-success { + color: light-dark(#137752, #44c08a); +} + +.thm-text-selected { + color: light-dark(#001b44, #cfe1ff); +} + +.thm-border-default { + border-color: light-dark(#ccc, #666); +} + +.thm-border-dotted { + border-color: light-dark(#aaa, #777); +} + +.thm-border-pwd { + border-color: light-dark(rgba(0, 0, 0, 0.2), rgba(255, 255, 255, 0.35)); +} + +.thm-border-pwd-box { + border-color: light-dark(rgba(0, 0, 0, 0.1), rgba(255, 255, 255, 0.2)); +} + +.thm-border-doc-table { + border-color: light-dark(rgba(0, 0, 0, 0.1), rgba(255, 255, 255, 0.2)); +} + +.thm-border-primary { + border-color: light-dark(#111, #efefef); +} + +.thm-hover-link-color:hover { + color: light-dark(#06c, #6ab0ff); +} + +input::placeholder { + color: light-dark(#d3d3d3, #8a8a8a); +} + +.queryInput { + border-color: light-dark(gray, #8f8f8f); +} + +.submitting .queryInput, +.queryInput.search-active { + border-color: light-dark(#990, #d9c65a); + background-color: light-dark(#ff9, #5b4d00); +} + +.star.selected button { + color: light-dark(#22a, #7da2ff); +} + +.tag, +a.tag:visited { + color: light-dark(oklch(54.38% 0.13279 52.009), oklch(64% 0.13229 52.009)); +} + +.tag-include, +a.tag-include:visited { + color: light-dark(#ddd, #9a9a9a); +} + +.tag-exclude, +a.tag-exclude:visited { + color: light-dark(#faa, #ff9b9b); +} + +.private { + background: light-dark(#ddd, #252525); + border: 1px solid light-dark(#d1d1d1, #101010); +} + +.unread, +a.unread { + color: light-dark(oklch(54.561% 0.16363 39.683), oklch(81.93% 0.1259 60.765)); +} + +.mark_read { + color: light-dark(oklch(64.082% 0.12701 90.313), oklch(72% 0.12701 90.313)); +} + +.flash { + color: light-dark(green, #6fdd8b); + background: light-dark(#efe, #143321); +} + +.top_menu a { + color: light-dark(blue, #8ab4ff); +} + +.alert { + background: light-dark(#ced, #1d3340); + border: 1px solid light-dark(#acc, #3c5c70); +} + +.alert.alert-err { + background-color: light-dark(#ffdfdf, #4a2323); +} + +.bulk_bookmark_form { + border: 1px solid light-dark(#d1d1d1, #666); + /* background: light-dark(#ddd, #252525); */ + /* color: light-dark(#888, #a0a0a0); */ +} + +.bulk_bookmark_form input, +.bulk_bookmark_form textarea { + border: 1px solid light-dark(#ddd, #555); +} + +.edit_bookmark_form { + color: light-dark(#888, #a0a0a0); +} + +.edit_bookmark_form input, +.edit_bookmark_form textarea { + border: 1px solid light-dark(#ddd, #555); +} + +.nav-active { + /* color: light-dark(rgb(0, 0, 255), #9ec1ff); */ + background: light-dark(#ff8, #645700); + font-weight: 700; +} + +.close-x { + stroke: light-dark(gray, #9a9a9a); +} + +.rss { + color: light-dark( + oklch(82.529% 0.17086 80.013), + oklch(62.035% 0.17086 80.013) + ); +} + +.rss:hover { + color: light-dark( + oklch(69.203% 0.20655 42.566), + oklch(49.203% 0.20655 42.566) + ); +} + +.hover-alt:hover { + color: light-dark(#357edd, #7aaeff); +} + +.pager-link { + color: light-dark(#aaa, #8d8d8d); +} + +.logo-div { + color: light-dark(#aaa, #eee); +} + +.post-input { + color: light-dark(#000, #f2f2f2); + border-color: light-dark(#001b44, #5f88d6); +} + +@keyframes flashIn { + from { + opacity: 0; + transform: translateY(-6px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +.layout-msg { + color: light-dark(oklch(23.191% 0.08487 257.743), oklch(0.96 0.03 107.8)); + border-color: light-dark( + oklch(23.191% 0.08487 257.743), + oklch(0.69 0.03 105.53) + ); + background-color: light-dark( + oklch(98.883% 0.02238 98.671), + oklch(0.26 0.03 111.5) + ); + animation: flashIn 0.35s ease-out; +} + +.query-info-icon { + color: light-dark(#357edd, #7aaeff); +} + +.docs-item-bg, +.docs-striped-item:nth-child(odd) { + background-color: light-dark(#eee, #242424); +} + +.login-div { + background-color: light-dark(#fff, #121212); +} + +.login-bg { + background-color: light-dark(#f4f4f4, #1f1f1f); +}
− static/js/app-MD5JJQMB.min.js
@@ -1,76 +0,0 @@-var R1=Object.create;var vc=Object.defineProperty,O1=Object.defineProperties,w1=Object.getOwnPropertyDescriptor,N1=Object.getOwnPropertyDescriptors,_1=Object.getOwnPropertyNames,zs=Object.getOwnPropertySymbols,C1=Object.getPrototypeOf,Sc=Object.prototype.hasOwnProperty,Hp=Object.prototype.propertyIsEnumerable;var Bp=e=>{throw TypeError(e)};var bc=(e,t,n)=>t in e?vc(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,T=(e,t)=>{for(var n in t||(t={}))Sc.call(t,n)&&bc(e,n,t[n]);if(zs)for(var n of zs(t))Hp.call(t,n)&&bc(e,n,t[n]);return e},z=(e,t)=>O1(e,N1(t));var Mn=(e,t)=>{var n={};for(var a in e)Sc.call(e,a)&&t.indexOf(a)<0&&(n[a]=e[a]);if(e!=null&&zs)for(var a of zs(e))t.indexOf(a)<0&&Hp.call(e,a)&&(n[a]=e[a]);return n};var Ot=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var D1=(e,t,n,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of _1(t))!Sc.call(e,i)&&i!==n&&vc(e,i,{get:()=>t[i],enumerable:!(a=w1(t,i))||a.enumerable});return e};var Z=(e,t,n)=>(n=e!=null?R1(C1(e)):{},D1(t||!e||!e.__esModule?vc(n,"default",{value:e,enumerable:!0}):n,e));var G=(e,t,n)=>bc(e,typeof t!="symbol"?t+"":t,n),Tc=(e,t,n)=>t.has(e)||Bp("Cannot "+n);var E=(e,t,n)=>(Tc(e,t,"read from private field"),n?n.call(e):t.get(e)),yt=(e,t,n)=>t.has(e)?Bp("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,n),it=(e,t,n,a)=>(Tc(e,t,"write to private field"),a?a.call(e,n):t.set(e,n),n),H=(e,t,n)=>(Tc(e,t,"access private method"),n);var xc=(e,t,n,a)=>({set _(i){it(e,t,i,n)},get _(){return E(e,t,a)}});var xm=Ot(F=>{"use strict";var qc=Symbol.for("react.transitional.element"),dT=Symbol.for("react.portal"),hT=Symbol.for("react.fragment"),pT=Symbol.for("react.strict_mode"),mT=Symbol.for("react.profiler"),gT=Symbol.for("react.consumer"),yT=Symbol.for("react.context"),bT=Symbol.for("react.forward_ref"),vT=Symbol.for("react.suspense"),ST=Symbol.for("react.memo"),gm=Symbol.for("react.lazy"),TT=Symbol.for("react.activity"),dm=Symbol.iterator;function xT(e){return e===null||typeof e!="object"?null:(e=dm&&e[dm]||e["@@iterator"],typeof e=="function"?e:null)}var ym={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},bm=Object.assign,vm={};function Ci(e,t,n){this.props=e,this.context=t,this.refs=vm,this.updater=n||ym}Ci.prototype.isReactComponent={};Ci.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};Ci.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function Sm(){}Sm.prototype=Ci.prototype;function Yc(e,t,n){this.props=e,this.context=t,this.refs=vm,this.updater=n||ym}var Gc=Yc.prototype=new Sm;Gc.constructor=Yc;bm(Gc,Ci.prototype);Gc.isPureReactComponent=!0;var hm=Array.isArray;function jc(){}var Ae={H:null,A:null,T:null,S:null},Tm=Object.prototype.hasOwnProperty;function Vc(e,t,n){var a=n.ref;return{$$typeof:qc,type:e,key:t,ref:a!==void 0?a:null,props:n}}function ET(e,t){return Vc(e.type,t,e.props)}function Xc(e){return typeof e=="object"&&e!==null&&e.$$typeof===qc}function AT(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,function(n){return t[n]})}var pm=/\/+/g;function Bc(e,t){return typeof e=="object"&&e!==null&&e.key!=null?AT(""+e.key):t.toString(36)}function kT(e){switch(e.status){case"fulfilled":return e.value;case"rejected":throw e.reason;default:switch(typeof e.status=="string"?e.then(jc,jc):(e.status="pending",e.then(function(t){e.status==="pending"&&(e.status="fulfilled",e.value=t)},function(t){e.status==="pending"&&(e.status="rejected",e.reason=t)})),e.status){case"fulfilled":return e.value;case"rejected":throw e.reason}}throw e}function _i(e,t,n,a,i){var l=typeof e;(l==="undefined"||l==="boolean")&&(e=null);var r=!1;if(e===null)r=!0;else switch(l){case"bigint":case"string":case"number":r=!0;break;case"object":switch(e.$$typeof){case qc:case dT:r=!0;break;case gm:return r=e._init,_i(r(e._payload),t,n,a,i)}}if(r)return i=i(e),r=a===""?"."+Bc(e,0):a,hm(i)?(n="",r!=null&&(n=r.replace(pm,"$&/")+"/"),_i(i,t,n,"",function(u){return u})):i!=null&&(Xc(i)&&(i=ET(i,n+(i.key==null||e&&e.key===i.key?"":(""+i.key).replace(pm,"$&/")+"/")+r)),t.push(i)),1;r=0;var s=a===""?".":a+":";if(hm(e))for(var o=0;o<e.length;o++)a=e[o],l=s+Bc(a,o),r+=_i(a,t,n,l,i);else if(o=xT(e),typeof o=="function")for(e=o.call(e),o=0;!(a=e.next()).done;)a=a.value,l=s+Bc(a,o++),r+=_i(a,t,n,l,i);else if(l==="object"){if(typeof e.then=="function")return _i(kT(e),t,n,a,i);throw t=String(e),Error("Objects are not valid as a React child (found: "+(t==="[object Object]"?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.")}return r}function Vs(e,t,n){if(e==null)return e;var a=[],i=0;return _i(e,a,"","",function(l){return t.call(n,l,i++)}),a}function RT(e){if(e._status===-1){var t=e._result;t=t(),t.then(function(n){(e._status===0||e._status===-1)&&(e._status=1,e._result=n)},function(n){(e._status===0||e._status===-1)&&(e._status=2,e._result=n)}),e._status===-1&&(e._status=0,e._result=t)}if(e._status===1)return e._result.default;throw e._result}var mm=typeof reportError=="function"?reportError:function(e){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var t=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof e=="object"&&e!==null&&typeof e.message=="string"?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",e);return}console.error(e)},OT={map:Vs,forEach:function(e,t,n){Vs(e,function(){t.apply(this,arguments)},n)},count:function(e){var t=0;return Vs(e,function(){t++}),t},toArray:function(e){return Vs(e,function(t){return t})||[]},only:function(e){if(!Xc(e))throw Error("React.Children.only expected to receive a single React element child.");return e}};F.Activity=TT;F.Children=OT;F.Component=Ci;F.Fragment=hT;F.Profiler=mT;F.PureComponent=Yc;F.StrictMode=pT;F.Suspense=vT;F.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=Ae;F.__COMPILER_RUNTIME={__proto__:null,c:function(e){return Ae.H.useMemoCache(e)}};F.cache=function(e){return function(){return e.apply(null,arguments)}};F.cacheSignal=function(){return null};F.cloneElement=function(e,t,n){if(e==null)throw Error("The argument must be a React element, but you passed "+e+".");var a=bm({},e.props),i=e.key;if(t!=null)for(l in t.key!==void 0&&(i=""+t.key),t)!Tm.call(t,l)||l==="key"||l==="__self"||l==="__source"||l==="ref"&&t.ref===void 0||(a[l]=t[l]);var l=arguments.length-2;if(l===1)a.children=n;else if(1<l){for(var r=Array(l),s=0;s<l;s++)r[s]=arguments[s+2];a.children=r}return Vc(e.type,i,a)};F.createContext=function(e){return e={$$typeof:yT,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null},e.Provider=e,e.Consumer={$$typeof:gT,_context:e},e};F.createElement=function(e,t,n){var a,i={},l=null;if(t!=null)for(a in t.key!==void 0&&(l=""+t.key),t)Tm.call(t,a)&&a!=="key"&&a!=="__self"&&a!=="__source"&&(i[a]=t[a]);var r=arguments.length-2;if(r===1)i.children=n;else if(1<r){for(var s=Array(r),o=0;o<r;o++)s[o]=arguments[o+2];i.children=s}if(e&&e.defaultProps)for(a in r=e.defaultProps,r)i[a]===void 0&&(i[a]=r[a]);return Vc(e,l,i)};F.createRef=function(){return{current:null}};F.forwardRef=function(e){return{$$typeof:bT,render:e}};F.isValidElement=Xc;F.lazy=function(e){return{$$typeof:gm,_payload:{_status:-1,_result:e},_init:RT}};F.memo=function(e,t){return{$$typeof:ST,type:e,compare:t===void 0?null:t}};F.startTransition=function(e){var t=Ae.T,n={};Ae.T=n;try{var a=e(),i=Ae.S;i!==null&&i(n,a),typeof a=="object"&&a!==null&&typeof a.then=="function"&&a.then(jc,mm)}catch(l){mm(l)}finally{t!==null&&n.types!==null&&(t.types=n.types),Ae.T=t}};F.unstable_useCacheRefresh=function(){return Ae.H.useCacheRefresh()};F.use=function(e){return Ae.H.use(e)};F.useActionState=function(e,t,n){return Ae.H.useActionState(e,t,n)};F.useCallback=function(e,t){return Ae.H.useCallback(e,t)};F.useContext=function(e){return Ae.H.useContext(e)};F.useDebugValue=function(){};F.useDeferredValue=function(e,t){return Ae.H.useDeferredValue(e,t)};F.useEffect=function(e,t){return Ae.H.useEffect(e,t)};F.useEffectEvent=function(e){return Ae.H.useEffectEvent(e)};F.useId=function(){return Ae.H.useId()};F.useImperativeHandle=function(e,t,n){return Ae.H.useImperativeHandle(e,t,n)};F.useInsertionEffect=function(e,t){return Ae.H.useInsertionEffect(e,t)};F.useLayoutEffect=function(e,t){return Ae.H.useLayoutEffect(e,t)};F.useMemo=function(e,t){return Ae.H.useMemo(e,t)};F.useOptimistic=function(e,t){return Ae.H.useOptimistic(e,t)};F.useReducer=function(e,t,n){return Ae.H.useReducer(e,t,n)};F.useRef=function(e){return Ae.H.useRef(e)};F.useState=function(e){return Ae.H.useState(e)};F.useSyncExternalStore=function(e,t,n){return Ae.H.useSyncExternalStore(e,t,n)};F.useTransition=function(){return Ae.H.useTransition()};F.version="19.2.6"});var ye=Ot((yO,Em)=>{"use strict";Em.exports=xm()});var km=Ot((bO,Am)=>{Am.exports={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0}});var Bm=Ot(Hm=>{"use strict";var zi=ye();function HT(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var BT=typeof Object.is=="function"?Object.is:HT,jT=zi.useState,qT=zi.useEffect,YT=zi.useLayoutEffect,GT=zi.useDebugValue;function VT(e,t){var n=t(),a=jT({inst:{value:n,getSnapshot:t}}),i=a[0].inst,l=a[1];return YT(function(){i.value=n,i.getSnapshot=t,Fc(i)&&l({inst:i})},[e,n,t]),qT(function(){return Fc(i)&&l({inst:i}),e(function(){Fc(i)&&l({inst:i})})},[e]),GT(n),n}function Fc(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!BT(e,n)}catch(a){return!0}}function XT(e,t){return t()}var $T=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?XT:VT;Hm.useSyncExternalStore=zi.useSyncExternalStore!==void 0?zi.useSyncExternalStore:$T});var qm=Ot((gw,jm)=>{"use strict";jm.exports=Bm()});var ag=Ot(we=>{"use strict";function ef(e,t){var n=e.length;e.push(t);e:for(;0<n;){var a=n-1>>>1,i=e[a];if(0<Ws(i,t))e[a]=t,e[n]=i,n=a;else break e}}function vn(e){return e.length===0?null:e[0]}function to(e){if(e.length===0)return null;var t=e[0],n=e.pop();if(n!==t){e[0]=n;e:for(var a=0,i=e.length,l=i>>>1;a<l;){var r=2*(a+1)-1,s=e[r],o=r+1,u=e[o];if(0>Ws(s,n))o<i&&0>Ws(u,s)?(e[a]=u,e[o]=n,a=o):(e[a]=s,e[r]=n,a=r);else if(o<i&&0>Ws(u,n))e[a]=u,e[o]=n,a=o;else break e}}return t}function Ws(e,t){var n=e.sortIndex-t.sortIndex;return n!==0?n:e.id-t.id}we.unstable_now=void 0;typeof performance=="object"&&typeof performance.now=="function"?(Km=performance,we.unstable_now=function(){return Km.now()}):(Ic=Date,Fm=Ic.now(),we.unstable_now=function(){return Ic.now()-Fm});var Km,Ic,Fm,Un=[],oa=[],ax=1,qt=null,st=3,tf=!1,nr=!1,ar=!1,nf=!1,Pm=typeof setTimeout=="function"?setTimeout:null,Wm=typeof clearTimeout=="function"?clearTimeout:null,Jm=typeof setImmediate<"u"?setImmediate:null;function eo(e){for(var t=vn(oa);t!==null;){if(t.callback===null)to(oa);else if(t.startTime<=e)to(oa),t.sortIndex=t.expirationTime,ef(Un,t);else break;t=vn(oa)}}function af(e){if(ar=!1,eo(e),!nr)if(vn(Un)!==null)nr=!0,Bi||(Bi=!0,Hi());else{var t=vn(oa);t!==null&&lf(af,t.startTime-e)}}var Bi=!1,ir=-1,eg=5,tg=-1;function ng(){return nf?!0:!(we.unstable_now()-tg<eg)}function Pc(){if(nf=!1,Bi){var e=we.unstable_now();tg=e;var t=!0;try{e:{nr=!1,ar&&(ar=!1,Wm(ir),ir=-1),tf=!0;var n=st;try{t:{for(eo(e),qt=vn(Un);qt!==null&&!(qt.expirationTime>e&&ng());){var a=qt.callback;if(typeof a=="function"){qt.callback=null,st=qt.priorityLevel;var i=a(qt.expirationTime<=e);if(e=we.unstable_now(),typeof i=="function"){qt.callback=i,eo(e),t=!0;break t}qt===vn(Un)&&to(Un),eo(e)}else to(Un);qt=vn(Un)}if(qt!==null)t=!0;else{var l=vn(oa);l!==null&&lf(af,l.startTime-e),t=!1}}break e}finally{qt=null,st=n,tf=!1}t=void 0}}finally{t?Hi():Bi=!1}}}var Hi;typeof Jm=="function"?Hi=function(){Jm(Pc)}:typeof MessageChannel<"u"?(Wc=new MessageChannel,Im=Wc.port2,Wc.port1.onmessage=Pc,Hi=function(){Im.postMessage(null)}):Hi=function(){Pm(Pc,0)};var Wc,Im;function lf(e,t){ir=Pm(function(){e(we.unstable_now())},t)}we.unstable_IdlePriority=5;we.unstable_ImmediatePriority=1;we.unstable_LowPriority=4;we.unstable_NormalPriority=3;we.unstable_Profiling=null;we.unstable_UserBlockingPriority=2;we.unstable_cancelCallback=function(e){e.callback=null};we.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):eg=0<e?Math.floor(1e3/e):5};we.unstable_getCurrentPriorityLevel=function(){return st};we.unstable_next=function(e){switch(st){case 1:case 2:case 3:var t=3;break;default:t=st}var n=st;st=t;try{return e()}finally{st=n}};we.unstable_requestPaint=function(){nf=!0};we.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=st;st=e;try{return t()}finally{st=n}};we.unstable_scheduleCallback=function(e,t,n){var a=we.unstable_now();switch(typeof n=="object"&&n!==null?(n=n.delay,n=typeof n=="number"&&0<n?a+n:a):n=a,e){case 1:var i=-1;break;case 2:i=250;break;case 5:i=1073741823;break;case 4:i=1e4;break;default:i=5e3}return i=n+i,e={id:ax++,callback:t,priorityLevel:e,startTime:n,expirationTime:i,sortIndex:-1},n>a?(e.sortIndex=n,ef(oa,e),vn(Un)===null&&e===vn(oa)&&(ar?(Wm(ir),ir=-1):ar=!0,lf(af,n-a))):(e.sortIndex=i,ef(Un,e),nr||tf||(nr=!0,Bi||(Bi=!0,Hi()))),e};we.unstable_shouldYield=ng;we.unstable_wrapCallback=function(e){var t=st;return function(){var n=st;st=t;try{return e.apply(this,arguments)}finally{st=n}}}});var lg=Ot((vN,ig)=>{"use strict";ig.exports=ag()});var sg=Ot(dt=>{"use strict";var ix=ye();function rg(e){var t="https://react.dev/errors/"+e;if(1<arguments.length){t+="?args[]="+encodeURIComponent(arguments[1]);for(var n=2;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n])}return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function ua(){}var ft={d:{f:ua,r:function(){throw Error(rg(522))},D:ua,C:ua,L:ua,m:ua,X:ua,S:ua,M:ua},p:0,findDOMNode:null},lx=Symbol.for("react.portal");function rx(e,t,n){var a=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:lx,key:a==null?null:""+a,children:e,containerInfo:t,implementation:n}}var lr=ix.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function no(e,t){if(e==="font")return"";if(typeof t=="string")return t==="use-credentials"?t:""}dt.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=ft;dt.createPortal=function(e,t){var n=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!t||t.nodeType!==1&&t.nodeType!==9&&t.nodeType!==11)throw Error(rg(299));return rx(e,t,null,n)};dt.flushSync=function(e){var t=lr.T,n=ft.p;try{if(lr.T=null,ft.p=2,e)return e()}finally{lr.T=t,ft.p=n,ft.d.f()}};dt.preconnect=function(e,t){typeof e=="string"&&(t?(t=t.crossOrigin,t=typeof t=="string"?t==="use-credentials"?t:"":void 0):t=null,ft.d.C(e,t))};dt.prefetchDNS=function(e){typeof e=="string"&&ft.d.D(e)};dt.preinit=function(e,t){if(typeof e=="string"&&t&&typeof t.as=="string"){var n=t.as,a=no(n,t.crossOrigin),i=typeof t.integrity=="string"?t.integrity:void 0,l=typeof t.fetchPriority=="string"?t.fetchPriority:void 0;n==="style"?ft.d.S(e,typeof t.precedence=="string"?t.precedence:void 0,{crossOrigin:a,integrity:i,fetchPriority:l}):n==="script"&&ft.d.X(e,{crossOrigin:a,integrity:i,fetchPriority:l,nonce:typeof t.nonce=="string"?t.nonce:void 0})}};dt.preinitModule=function(e,t){if(typeof e=="string")if(typeof t=="object"&&t!==null){if(t.as==null||t.as==="script"){var n=no(t.as,t.crossOrigin);ft.d.M(e,{crossOrigin:n,integrity:typeof t.integrity=="string"?t.integrity:void 0,nonce:typeof t.nonce=="string"?t.nonce:void 0})}}else t==null&&ft.d.M(e)};dt.preload=function(e,t){if(typeof e=="string"&&typeof t=="object"&&t!==null&&typeof t.as=="string"){var n=t.as,a=no(n,t.crossOrigin);ft.d.L(e,n,{crossOrigin:a,integrity:typeof t.integrity=="string"?t.integrity:void 0,nonce:typeof t.nonce=="string"?t.nonce:void 0,type:typeof t.type=="string"?t.type:void 0,fetchPriority:typeof t.fetchPriority=="string"?t.fetchPriority:void 0,referrerPolicy:typeof t.referrerPolicy=="string"?t.referrerPolicy:void 0,imageSrcSet:typeof t.imageSrcSet=="string"?t.imageSrcSet:void 0,imageSizes:typeof t.imageSizes=="string"?t.imageSizes:void 0,media:typeof t.media=="string"?t.media:void 0})}};dt.preloadModule=function(e,t){if(typeof e=="string")if(t){var n=no(t.as,t.crossOrigin);ft.d.m(e,{as:typeof t.as=="string"&&t.as!=="script"?t.as:void 0,crossOrigin:n,integrity:typeof t.integrity=="string"?t.integrity:void 0})}else ft.d.m(e)};dt.requestFormReset=function(e){ft.d.r(e)};dt.unstable_batchedUpdates=function(e,t){return e(t)};dt.useFormState=function(e,t,n){return lr.H.useFormState(e,t,n)};dt.useFormStatus=function(){return lr.H.useHostTransitionStatus()};dt.version="19.2.6"});var cg=Ot((TN,ug)=>{"use strict";function og(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(og)}catch(e){console.error(e)}}og(),ug.exports=sg()});var xv=Ot(wu=>{"use strict";var Xe=lg(),Uy=ye(),sx=cg();function R(e){var t="https://react.dev/errors/"+e;if(1<arguments.length){t+="?args[]="+encodeURIComponent(arguments[1]);for(var n=2;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n])}return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function Hy(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11)}function $r(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do t=e,(t.flags&4098)!==0&&(n=t.return),e=t.return;while(e)}return t.tag===3?n:null}function By(e){if(e.tag===13){var t=e.memoizedState;if(t===null&&(e=e.alternate,e!==null&&(t=e.memoizedState)),t!==null)return t.dehydrated}return null}function jy(e){if(e.tag===31){var t=e.memoizedState;if(t===null&&(e=e.alternate,e!==null&&(t=e.memoizedState)),t!==null)return t.dehydrated}return null}function fg(e){if($r(e)!==e)throw Error(R(188))}function ox(e){var t=e.alternate;if(!t){if(t=$r(e),t===null)throw Error(R(188));return t!==e?null:e}for(var n=e,a=t;;){var i=n.return;if(i===null)break;var l=i.alternate;if(l===null){if(a=i.return,a!==null){n=a;continue}break}if(i.child===l.child){for(l=i.child;l;){if(l===n)return fg(i),e;if(l===a)return fg(i),t;l=l.sibling}throw Error(R(188))}if(n.return!==a.return)n=i,a=l;else{for(var r=!1,s=i.child;s;){if(s===n){r=!0,n=i,a=l;break}if(s===a){r=!0,a=i,n=l;break}s=s.sibling}if(!r){for(s=l.child;s;){if(s===n){r=!0,n=l,a=i;break}if(s===a){r=!0,a=l,n=i;break}s=s.sibling}if(!r)throw Error(R(189))}}if(n.alternate!==a)throw Error(R(190))}if(n.tag!==3)throw Error(R(188));return n.stateNode.current===n?e:t}function qy(e){var t=e.tag;if(t===5||t===26||t===27||t===6)return e;for(e=e.child;e!==null;){if(t=qy(e),t!==null)return t;e=e.sibling}return null}var Oe=Object.assign,ux=Symbol.for("react.element"),ao=Symbol.for("react.transitional.element"),hr=Symbol.for("react.portal"),Xi=Symbol.for("react.fragment"),Yy=Symbol.for("react.strict_mode"),jf=Symbol.for("react.profiler"),Gy=Symbol.for("react.consumer"),Xn=Symbol.for("react.context"),Md=Symbol.for("react.forward_ref"),qf=Symbol.for("react.suspense"),Yf=Symbol.for("react.suspense_list"),Ld=Symbol.for("react.memo"),ca=Symbol.for("react.lazy"),Gf=Symbol.for("react.activity"),cx=Symbol.for("react.memo_cache_sentinel"),dg=Symbol.iterator;function rr(e){return e===null||typeof e!="object"?null:(e=dg&&e[dg]||e["@@iterator"],typeof e=="function"?e:null)}var fx=Symbol.for("react.client.reference");function Vf(e){if(e==null)return null;if(typeof e=="function")return e.$$typeof===fx?null:e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Xi:return"Fragment";case jf:return"Profiler";case Yy:return"StrictMode";case qf:return"Suspense";case Yf:return"SuspenseList";case Gf:return"Activity"}if(typeof e=="object")switch(e.$$typeof){case hr:return"Portal";case Xn:return e.displayName||"Context";case Gy:return(e._context.displayName||"Context")+".Consumer";case Md:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Ld:return t=e.displayName||null,t!==null?t:Vf(e.type)||"Memo";case ca:t=e._payload,e=e._init;try{return Vf(e(t))}catch(n){}}return null}var pr=Array.isArray,$=Uy.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,oe=sx.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,ti={pending:!1,data:null,method:null,action:null},Xf=[],$i=-1;function An(e){return{current:e}}function Je(e){0>$i||(e.current=Xf[$i],Xf[$i]=null,$i--)}function Te(e,t){$i++,Xf[$i]=e.current,e.current=t}var En=An(null),Cr=An(null),Ta=An(null),Ho=An(null);function Bo(e,t){switch(Te(Ta,t),Te(Cr,e),Te(En,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?vy(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=vy(t),e=ov(t,e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}Je(En),Te(En,e)}function ul(){Je(En),Je(Cr),Je(Ta)}function $f(e){e.memoizedState!==null&&Te(Ho,e);var t=En.current,n=ov(t,e.type);t!==n&&(Te(Cr,e),Te(En,n))}function jo(e){Cr.current===e&&(Je(En),Je(Cr)),Ho.current===e&&(Je(Ho),Gr._currentValue=ti)}var rf,hg;function Ia(e){if(rf===void 0)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);rf=t&&t[1]||"",hg=-1<n.stack.indexOf("\n at")?" (<anonymous>)":-1<n.stack.indexOf("@")?"@unknown:0:0":""}return"\n"+rf+e+hg}var sf=!1;function of(e,t){if(!e||sf)return"";sf=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{var a={DetermineComponentFrameRoot:function(){try{if(t){var f=function(){throw Error()};if(Object.defineProperty(f.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(f,[])}catch(p){var d=p}Reflect.construct(e,[],f)}else{try{f.call()}catch(p){d=p}e.call(f.prototype)}}else{try{throw Error()}catch(p){d=p}(f=e())&&typeof f.catch=="function"&&f.catch(function(){})}}catch(p){if(p&&d&&typeof p.stack=="string")return[p.stack,d.stack]}return[null,null]}};a.DetermineComponentFrameRoot.displayName="DetermineComponentFrameRoot";var i=Object.getOwnPropertyDescriptor(a.DetermineComponentFrameRoot,"name");i&&i.configurable&&Object.defineProperty(a.DetermineComponentFrameRoot,"name",{value:"DetermineComponentFrameRoot"});var l=a.DetermineComponentFrameRoot(),r=l[0],s=l[1];if(r&&s){var o=r.split("\n"),u=s.split("\n");for(i=a=0;a<o.length&&!o[a].includes("DetermineComponentFrameRoot");)a++;for(;i<u.length&&!u[i].includes("DetermineComponentFrameRoot");)i++;if(a===o.length||i===u.length)for(a=o.length-1,i=u.length-1;1<=a&&0<=i&&o[a]!==u[i];)i--;for(;1<=a&&0<=i;a--,i--)if(o[a]!==u[i]){if(a!==1||i!==1)do if(a--,i--,0>i||o[a]!==u[i]){var c="\n"+o[a].replace(" at new "," at ");return e.displayName&&c.includes("<anonymous>")&&(c=c.replace("<anonymous>",e.displayName)),c}while(1<=a&&0<=i);break}}}finally{sf=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:"")?Ia(n):""}function dx(e,t){switch(e.tag){case 26:case 27:case 5:return Ia(e.type);case 16:return Ia("Lazy");case 13:return e.child!==t&&t!==null?Ia("Suspense Fallback"):Ia("Suspense");case 19:return Ia("SuspenseList");case 0:case 15:return of(e.type,!1);case 11:return of(e.type.render,!1);case 1:return of(e.type,!0);case 31:return Ia("Activity");default:return""}}function pg(e){try{var t="",n=null;do t+=dx(e,n),n=e,e=e.return;while(e);return t}catch(a){return"\nError generating stack: "+a.message+"\n"+a.stack}}var Qf=Object.prototype.hasOwnProperty,Ud=Xe.unstable_scheduleCallback,uf=Xe.unstable_cancelCallback,hx=Xe.unstable_shouldYield,px=Xe.unstable_requestPaint,Dt=Xe.unstable_now,mx=Xe.unstable_getCurrentPriorityLevel,Vy=Xe.unstable_ImmediatePriority,Xy=Xe.unstable_UserBlockingPriority,qo=Xe.unstable_NormalPriority,gx=Xe.unstable_LowPriority,$y=Xe.unstable_IdlePriority,yx=Xe.log,bx=Xe.unstable_setDisableYieldValue,Qr=null,zt=null;function ga(e){if(typeof yx=="function"&&bx(e),zt&&typeof zt.setStrictMode=="function")try{zt.setStrictMode(Qr,e)}catch(t){}}var Mt=Math.clz32?Math.clz32:Tx,vx=Math.log,Sx=Math.LN2;function Tx(e){return e>>>=0,e===0?32:31-(vx(e)/Sx|0)|0}var io=256,lo=262144,ro=4194304;function Pa(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function du(e,t,n){var a=e.pendingLanes;if(a===0)return 0;var i=0,l=e.suspendedLanes,r=e.pingedLanes;e=e.warmLanes;var s=a&134217727;return s!==0?(a=s&~l,a!==0?i=Pa(a):(r&=s,r!==0?i=Pa(r):n||(n=s&~e,n!==0&&(i=Pa(n))))):(s=a&~l,s!==0?i=Pa(s):r!==0?i=Pa(r):n||(n=a&~e,n!==0&&(i=Pa(n)))),i===0?0:t!==0&&t!==i&&(t&l)===0&&(l=i&-i,n=t&-t,l>=n||l===32&&(n&4194048)!==0)?t:i}function Zr(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function xx(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Qy(){var e=ro;return ro<<=1,(ro&62914560)===0&&(ro=4194304),e}function cf(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function Kr(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function Ex(e,t,n,a,i,l){var r=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var s=e.entanglements,o=e.expirationTimes,u=e.hiddenUpdates;for(n=r&~n;0<n;){var c=31-Mt(n),f=1<<c;s[c]=0,o[c]=-1;var d=u[c];if(d!==null)for(u[c]=null,c=0;c<d.length;c++){var p=d[c];p!==null&&(p.lane&=-536870913)}n&=~f}a!==0&&Zy(e,a,0),l!==0&&i===0&&e.tag!==0&&(e.suspendedLanes|=l&~(r&~t))}function Zy(e,t,n){e.pendingLanes|=t,e.suspendedLanes&=~t;var a=31-Mt(t);e.entangledLanes|=t,e.entanglements[a]=e.entanglements[a]|1073741824|n&261930}function Ky(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var a=31-Mt(n),i=1<<a;i&t|e[a]&t&&(e[a]|=t),n&=~i}}function Fy(e,t){var n=t&-t;return n=(n&42)!==0?1:Hd(n),(n&(e.suspendedLanes|t))!==0?0:n}function Hd(e){switch(e){case 2:e=1;break;case 8:e=4;break;case 32:e=16;break;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:e=128;break;case 268435456:e=134217728;break;default:e=0}return e}function Bd(e){return e&=-e,2<e?8<e?(e&134217727)!==0?32:268435456:8:2}function Jy(){var e=oe.p;return e!==0?e:(e=window.event,e===void 0?32:vv(e.type))}function mg(e,t){var n=oe.p;try{return oe.p=e,t()}finally{oe.p=n}}var Ma=Math.random().toString(36).slice(2),We="__reactFiber$"+Ma,Et="__reactProps$"+Ma,Sl="__reactContainer$"+Ma,Zf="__reactEvents$"+Ma,Ax="__reactListeners$"+Ma,kx="__reactHandles$"+Ma,gg="__reactResources$"+Ma,Fr="__reactMarker$"+Ma;function jd(e){delete e[We],delete e[Et],delete e[Zf],delete e[Ax],delete e[kx]}function Qi(e){var t=e[We];if(t)return t;for(var n=e.parentNode;n;){if(t=n[Sl]||n[We]){if(n=t.alternate,t.child!==null||n!==null&&n.child!==null)for(e=Ay(e);e!==null;){if(n=e[We])return n;e=Ay(e)}return t}e=n,n=e.parentNode}return null}function Tl(e){if(e=e[We]||e[Sl]){var t=e.tag;if(t===5||t===6||t===13||t===31||t===26||t===27||t===3)return e}return null}function mr(e){var t=e.tag;if(t===5||t===26||t===27||t===6)return e.stateNode;throw Error(R(33))}function nl(e){var t=e[gg];return t||(t=e[gg]={hoistableStyles:new Map,hoistableScripts:new Map}),t}function Fe(e){e[Fr]=!0}var Iy=new Set,Py={};function fi(e,t){cl(e,t),cl(e+"Capture",t)}function cl(e,t){for(Py[e]=t,e=0;e<t.length;e++)Iy.add(t[e])}var Rx=RegExp("^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"),yg={},bg={};function Ox(e){return Qf.call(bg,e)?!0:Qf.call(yg,e)?!1:Rx.test(e)?bg[e]=!0:(yg[e]=!0,!1)}function xo(e,t,n){if(Ox(t))if(n===null)e.removeAttribute(t);else{switch(typeof n){case"undefined":case"function":case"symbol":e.removeAttribute(t);return;case"boolean":var a=t.toLowerCase().slice(0,5);if(a!=="data-"&&a!=="aria-"){e.removeAttribute(t);return}}e.setAttribute(t,""+n)}}function so(e,t,n){if(n===null)e.removeAttribute(t);else{switch(typeof n){case"undefined":case"function":case"symbol":case"boolean":e.removeAttribute(t);return}e.setAttribute(t,""+n)}}function Hn(e,t,n,a){if(a===null)e.removeAttribute(n);else{switch(typeof a){case"undefined":case"function":case"symbol":case"boolean":e.removeAttribute(n);return}e.setAttributeNS(t,n,""+a)}}function Gt(e){switch(typeof e){case"bigint":case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function Wy(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function wx(e,t,n){var a=Object.getOwnPropertyDescriptor(e.constructor.prototype,t);if(!e.hasOwnProperty(t)&&typeof a<"u"&&typeof a.get=="function"&&typeof a.set=="function"){var i=a.get,l=a.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return i.call(this)},set:function(r){n=""+r,l.call(this,r)}}),Object.defineProperty(e,t,{enumerable:a.enumerable}),{getValue:function(){return n},setValue:function(r){n=""+r},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function Kf(e){if(!e._valueTracker){var t=Wy(e)?"checked":"value";e._valueTracker=wx(e,t,""+e[t])}}function eb(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),a="";return e&&(a=Wy(e)?e.checked?"true":"false":e.value),e=a,e!==n?(t.setValue(e),!0):!1}function Yo(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch(t){return e.body}}var Nx=/[\n"\\]/g;function $t(e){return e.replace(Nx,function(t){return"\\"+t.charCodeAt(0).toString(16)+" "})}function Ff(e,t,n,a,i,l,r,s){e.name="",r!=null&&typeof r!="function"&&typeof r!="symbol"&&typeof r!="boolean"?e.type=r:e.removeAttribute("type"),t!=null?r==="number"?(t===0&&e.value===""||e.value!=t)&&(e.value=""+Gt(t)):e.value!==""+Gt(t)&&(e.value=""+Gt(t)):r!=="submit"&&r!=="reset"||e.removeAttribute("value"),t!=null?Jf(e,r,Gt(t)):n!=null?Jf(e,r,Gt(n)):a!=null&&e.removeAttribute("value"),i==null&&l!=null&&(e.defaultChecked=!!l),i!=null&&(e.checked=i&&typeof i!="function"&&typeof i!="symbol"),s!=null&&typeof s!="function"&&typeof s!="symbol"&&typeof s!="boolean"?e.name=""+Gt(s):e.removeAttribute("name")}function tb(e,t,n,a,i,l,r,s){if(l!=null&&typeof l!="function"&&typeof l!="symbol"&&typeof l!="boolean"&&(e.type=l),t!=null||n!=null){if(!(l!=="submit"&&l!=="reset"||t!=null)){Kf(e);return}n=n!=null?""+Gt(n):"",t=t!=null?""+Gt(t):n,s||t===e.value||(e.value=t),e.defaultValue=t}a=a!=null?a:i,a=typeof a!="function"&&typeof a!="symbol"&&!!a,e.checked=s?e.checked:!!a,e.defaultChecked=!!a,r!=null&&typeof r!="function"&&typeof r!="symbol"&&typeof r!="boolean"&&(e.name=r),Kf(e)}function Jf(e,t,n){t==="number"&&Yo(e.ownerDocument)===e||e.defaultValue===""+n||(e.defaultValue=""+n)}function al(e,t,n,a){if(e=e.options,t){t={};for(var i=0;i<n.length;i++)t["$"+n[i]]=!0;for(n=0;n<e.length;n++)i=t.hasOwnProperty("$"+e[n].value),e[n].selected!==i&&(e[n].selected=i),i&&a&&(e[n].defaultSelected=!0)}else{for(n=""+Gt(n),t=null,i=0;i<e.length;i++){if(e[i].value===n){e[i].selected=!0,a&&(e[i].defaultSelected=!0);return}t!==null||e[i].disabled||(t=e[i])}t!==null&&(t.selected=!0)}}function nb(e,t,n){if(t!=null&&(t=""+Gt(t),t!==e.value&&(e.value=t),n==null)){e.defaultValue!==t&&(e.defaultValue=t);return}e.defaultValue=n!=null?""+Gt(n):""}function ab(e,t,n,a){if(t==null){if(a!=null){if(n!=null)throw Error(R(92));if(pr(a)){if(1<a.length)throw Error(R(93));a=a[0]}n=a}n==null&&(n=""),t=n}n=Gt(t),e.defaultValue=n,a=e.textContent,a===n&&a!==""&&a!==null&&(e.value=a),Kf(e)}function fl(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var _x=new Set("animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split(" "));function vg(e,t,n){var a=t.indexOf("--")===0;n==null||typeof n=="boolean"||n===""?a?e.setProperty(t,""):t==="float"?e.cssFloat="":e[t]="":a?e.setProperty(t,n):typeof n!="number"||n===0||_x.has(t)?t==="float"?e.cssFloat=n:e[t]=(""+n).trim():e[t]=n+"px"}function ib(e,t,n){if(t!=null&&typeof t!="object")throw Error(R(62));if(e=e.style,n!=null){for(var a in n)!n.hasOwnProperty(a)||t!=null&&t.hasOwnProperty(a)||(a.indexOf("--")===0?e.setProperty(a,""):a==="float"?e.cssFloat="":e[a]="");for(var i in t)a=t[i],t.hasOwnProperty(i)&&n[i]!==a&&vg(e,i,a)}else for(var l in t)t.hasOwnProperty(l)&&vg(e,l,t[l])}function qd(e){if(e.indexOf("-")===-1)return!1;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var Cx=new Map([["acceptCharset","accept-charset"],["htmlFor","for"],["httpEquiv","http-equiv"],["crossOrigin","crossorigin"],["accentHeight","accent-height"],["alignmentBaseline","alignment-baseline"],["arabicForm","arabic-form"],["baselineShift","baseline-shift"],["capHeight","cap-height"],["clipPath","clip-path"],["clipRule","clip-rule"],["colorInterpolation","color-interpolation"],["colorInterpolationFilters","color-interpolation-filters"],["colorProfile","color-profile"],["colorRendering","color-rendering"],["dominantBaseline","dominant-baseline"],["enableBackground","enable-background"],["fillOpacity","fill-opacity"],["fillRule","fill-rule"],["floodColor","flood-color"],["floodOpacity","flood-opacity"],["fontFamily","font-family"],["fontSize","font-size"],["fontSizeAdjust","font-size-adjust"],["fontStretch","font-stretch"],["fontStyle","font-style"],["fontVariant","font-variant"],["fontWeight","font-weight"],["glyphName","glyph-name"],["glyphOrientationHorizontal","glyph-orientation-horizontal"],["glyphOrientationVertical","glyph-orientation-vertical"],["horizAdvX","horiz-adv-x"],["horizOriginX","horiz-origin-x"],["imageRendering","image-rendering"],["letterSpacing","letter-spacing"],["lightingColor","lighting-color"],["markerEnd","marker-end"],["markerMid","marker-mid"],["markerStart","marker-start"],["overlinePosition","overline-position"],["overlineThickness","overline-thickness"],["paintOrder","paint-order"],["panose-1","panose-1"],["pointerEvents","pointer-events"],["renderingIntent","rendering-intent"],["shapeRendering","shape-rendering"],["stopColor","stop-color"],["stopOpacity","stop-opacity"],["strikethroughPosition","strikethrough-position"],["strikethroughThickness","strikethrough-thickness"],["strokeDasharray","stroke-dasharray"],["strokeDashoffset","stroke-dashoffset"],["strokeLinecap","stroke-linecap"],["strokeLinejoin","stroke-linejoin"],["strokeMiterlimit","stroke-miterlimit"],["strokeOpacity","stroke-opacity"],["strokeWidth","stroke-width"],["textAnchor","text-anchor"],["textDecoration","text-decoration"],["textRendering","text-rendering"],["transformOrigin","transform-origin"],["underlinePosition","underline-position"],["underlineThickness","underline-thickness"],["unicodeBidi","unicode-bidi"],["unicodeRange","unicode-range"],["unitsPerEm","units-per-em"],["vAlphabetic","v-alphabetic"],["vHanging","v-hanging"],["vIdeographic","v-ideographic"],["vMathematical","v-mathematical"],["vectorEffect","vector-effect"],["vertAdvY","vert-adv-y"],["vertOriginX","vert-origin-x"],["vertOriginY","vert-origin-y"],["wordSpacing","word-spacing"],["writingMode","writing-mode"],["xmlnsXlink","xmlns:xlink"],["xHeight","x-height"]]),Dx=/^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i;function Eo(e){return Dx.test(""+e)?"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')":e}function $n(){}var If=null;function Yd(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Zi=null,il=null;function Sg(e){var t=Tl(e);if(t&&(e=t.stateNode)){var n=e[Et]||null;e:switch(e=t.stateNode,t.type){case"input":if(Ff(e,n.value,n.defaultValue,n.defaultValue,n.checked,n.defaultChecked,n.type,n.name),t=n.name,n.type==="radio"&&t!=null){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll('input[name="'+$t(""+t)+'"][type="radio"]'),t=0;t<n.length;t++){var a=n[t];if(a!==e&&a.form===e.form){var i=a[Et]||null;if(!i)throw Error(R(90));Ff(a,i.value,i.defaultValue,i.defaultValue,i.checked,i.defaultChecked,i.type,i.name)}}for(t=0;t<n.length;t++)a=n[t],a.form===e.form&&eb(a)}break e;case"textarea":nb(e,n.value,n.defaultValue);break e;case"select":t=n.value,t!=null&&al(e,!!n.multiple,t,!1)}}}var ff=!1;function lb(e,t,n){if(ff)return e(t,n);ff=!0;try{var a=e(t);return a}finally{if(ff=!1,(Zi!==null||il!==null)&&(Au(),Zi&&(t=Zi,e=il,il=Zi=null,Sg(t),e)))for(t=0;t<e.length;t++)Sg(e[t])}}function Dr(e,t){var n=e.stateNode;if(n===null)return null;var a=n[Et]||null;if(a===null)return null;n=a[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(a=!a.disabled)||(e=e.type,a=!(e==="button"||e==="input"||e==="select"||e==="textarea")),e=!a;break e;default:e=!1}if(e)return null;if(n&&typeof n!="function")throw Error(R(231,t,typeof n));return n}var Jn=!(typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Pf=!1;if(Jn)try{ji={},Object.defineProperty(ji,"passive",{get:function(){Pf=!0}}),window.addEventListener("test",ji,ji),window.removeEventListener("test",ji,ji)}catch(e){Pf=!1}var ji,ya=null,Gd=null,Ao=null;function rb(){if(Ao)return Ao;var e,t=Gd,n=t.length,a,i="value"in ya?ya.value:ya.textContent,l=i.length;for(e=0;e<n&&t[e]===i[e];e++);var r=n-e;for(a=1;a<=r&&t[n-a]===i[l-a];a++);return Ao=i.slice(e,1<a?1-a:void 0)}function ko(e){var t=e.keyCode;return"charCode"in e?(e=e.charCode,e===0&&t===13&&(e=13)):e=t,e===10&&(e=13),32<=e||e===13?e:0}function oo(){return!0}function Tg(){return!1}function At(e){function t(n,a,i,l,r){this._reactName=n,this._targetInst=i,this.type=a,this.nativeEvent=l,this.target=r,this.currentTarget=null;for(var s in e)e.hasOwnProperty(s)&&(n=e[s],this[s]=n?n(l):l[s]);return this.isDefaultPrevented=(l.defaultPrevented!=null?l.defaultPrevented:l.returnValue===!1)?oo:Tg,this.isPropagationStopped=Tg,this}return Oe(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var n=this.nativeEvent;n&&(n.preventDefault?n.preventDefault():typeof n.returnValue!="unknown"&&(n.returnValue=!1),this.isDefaultPrevented=oo)},stopPropagation:function(){var n=this.nativeEvent;n&&(n.stopPropagation?n.stopPropagation():typeof n.cancelBubble!="unknown"&&(n.cancelBubble=!0),this.isPropagationStopped=oo)},persist:function(){},isPersistent:oo}),t}var di={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},hu=At(di),Jr=Oe({},di,{view:0,detail:0}),zx=At(Jr),df,hf,sr,pu=Oe({},Jr,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Vd,button:0,buttons:0,relatedTarget:function(e){return e.relatedTarget===void 0?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==sr&&(sr&&e.type==="mousemove"?(df=e.screenX-sr.screenX,hf=e.screenY-sr.screenY):hf=df=0,sr=e),df)},movementY:function(e){return"movementY"in e?e.movementY:hf}}),xg=At(pu),Mx=Oe({},pu,{dataTransfer:0}),Lx=At(Mx),Ux=Oe({},Jr,{relatedTarget:0}),pf=At(Ux),Hx=Oe({},di,{animationName:0,elapsedTime:0,pseudoElement:0}),Bx=At(Hx),jx=Oe({},di,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),qx=At(jx),Yx=Oe({},di,{data:0}),Eg=At(Yx),Gx={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},Vx={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},Xx={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function $x(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):(e=Xx[e])?!!t[e]:!1}function Vd(){return $x}var Qx=Oe({},Jr,{key:function(e){if(e.key){var t=Gx[e.key]||e.key;if(t!=="Unidentified")return t}return e.type==="keypress"?(e=ko(e),e===13?"Enter":String.fromCharCode(e)):e.type==="keydown"||e.type==="keyup"?Vx[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Vd,charCode:function(e){return e.type==="keypress"?ko(e):0},keyCode:function(e){return e.type==="keydown"||e.type==="keyup"?e.keyCode:0},which:function(e){return e.type==="keypress"?ko(e):e.type==="keydown"||e.type==="keyup"?e.keyCode:0}}),Zx=At(Qx),Kx=Oe({},pu,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0}),Ag=At(Kx),Fx=Oe({},Jr,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Vd}),Jx=At(Fx),Ix=Oe({},di,{propertyName:0,elapsedTime:0,pseudoElement:0}),Px=At(Ix),Wx=Oe({},pu,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),eE=At(Wx),tE=Oe({},di,{newState:0,oldState:0}),nE=At(tE),aE=[9,13,27,32],Xd=Jn&&"CompositionEvent"in window,br=null;Jn&&"documentMode"in document&&(br=document.documentMode);var iE=Jn&&"TextEvent"in window&&!br,sb=Jn&&(!Xd||br&&8<br&&11>=br),kg=" ",Rg=!1;function ob(e,t){switch(e){case"keyup":return aE.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function ub(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Ki=!1;function lE(e,t){switch(e){case"compositionend":return ub(t);case"keypress":return t.which!==32?null:(Rg=!0,kg);case"textInput":return e=t.data,e===kg&&Rg?null:e;default:return null}}function rE(e,t){if(Ki)return e==="compositionend"||!Xd&&ob(e,t)?(e=rb(),Ao=Gd=ya=null,Ki=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return sb&&t.locale!=="ko"?null:t.data;default:return null}}var sE={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Og(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t==="input"?!!sE[e.type]:t==="textarea"}function cb(e,t,n,a){Zi?il?il.push(a):il=[a]:Zi=a,t=lu(t,"onChange"),0<t.length&&(n=new hu("onChange","change",null,n,a),e.push({event:n,listeners:t}))}var vr=null,zr=null;function oE(e){lv(e,0)}function mu(e){var t=mr(e);if(eb(t))return e}function wg(e,t){if(e==="change")return t}var fb=!1;Jn&&(Jn?(co="oninput"in document,co||(mf=document.createElement("div"),mf.setAttribute("oninput","return;"),co=typeof mf.oninput=="function"),uo=co):uo=!1,fb=uo&&(!document.documentMode||9<document.documentMode));var uo,co,mf;function Ng(){vr&&(vr.detachEvent("onpropertychange",db),zr=vr=null)}function db(e){if(e.propertyName==="value"&&mu(zr)){var t=[];cb(t,zr,e,Yd(e)),lb(oE,t)}}function uE(e,t,n){e==="focusin"?(Ng(),vr=t,zr=n,vr.attachEvent("onpropertychange",db)):e==="focusout"&&Ng()}function cE(e){if(e==="selectionchange"||e==="keyup"||e==="keydown")return mu(zr)}function fE(e,t){if(e==="click")return mu(t)}function dE(e,t){if(e==="input"||e==="change")return mu(t)}function hE(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var Ut=typeof Object.is=="function"?Object.is:hE;function Mr(e,t){if(Ut(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;var n=Object.keys(e),a=Object.keys(t);if(n.length!==a.length)return!1;for(a=0;a<n.length;a++){var i=n[a];if(!Qf.call(t,i)||!Ut(e[i],t[i]))return!1}return!0}function _g(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function Cg(e,t){var n=_g(e);e=0;for(var a;n;){if(n.nodeType===3){if(a=e+n.textContent.length,e<=t&&a>=t)return{node:n,offset:t-e};e=a}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=_g(n)}}function hb(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?hb(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function pb(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=Yo(e.document);t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch(a){n=!1}if(n)e=t.contentWindow;else break;t=Yo(e.document)}return t}function $d(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}var pE=Jn&&"documentMode"in document&&11>=document.documentMode,Fi=null,Wf=null,Sr=null,ed=!1;function Dg(e,t,n){var a=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;ed||Fi==null||Fi!==Yo(a)||(a=Fi,"selectionStart"in a&&$d(a)?a={start:a.selectionStart,end:a.selectionEnd}:(a=(a.ownerDocument&&a.ownerDocument.defaultView||window).getSelection(),a={anchorNode:a.anchorNode,anchorOffset:a.anchorOffset,focusNode:a.focusNode,focusOffset:a.focusOffset}),Sr&&Mr(Sr,a)||(Sr=a,a=lu(Wf,"onSelect"),0<a.length&&(t=new hu("onSelect","select",null,t,n),e.push({event:t,listeners:a}),t.target=Fi)))}function Ja(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var Ji={animationend:Ja("Animation","AnimationEnd"),animationiteration:Ja("Animation","AnimationIteration"),animationstart:Ja("Animation","AnimationStart"),transitionrun:Ja("Transition","TransitionRun"),transitionstart:Ja("Transition","TransitionStart"),transitioncancel:Ja("Transition","TransitionCancel"),transitionend:Ja("Transition","TransitionEnd")},gf={},mb={};Jn&&(mb=document.createElement("div").style,"AnimationEvent"in window||(delete Ji.animationend.animation,delete Ji.animationiteration.animation,delete Ji.animationstart.animation),"TransitionEvent"in window||delete Ji.transitionend.transition);function hi(e){if(gf[e])return gf[e];if(!Ji[e])return e;var t=Ji[e],n;for(n in t)if(t.hasOwnProperty(n)&&n in mb)return gf[e]=t[n];return e}var gb=hi("animationend"),yb=hi("animationiteration"),bb=hi("animationstart"),mE=hi("transitionrun"),gE=hi("transitionstart"),yE=hi("transitioncancel"),vb=hi("transitionend"),Sb=new Map,td="abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");td.push("scrollEnd");function un(e,t){Sb.set(e,t),fi(t,[e])}var Go=typeof reportError=="function"?reportError:function(e){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var t=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof e=="object"&&e!==null&&typeof e.message=="string"?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",e);return}console.error(e)},Yt=[],Ii=0,Qd=0;function gu(){for(var e=Ii,t=Qd=Ii=0;t<e;){var n=Yt[t];Yt[t++]=null;var a=Yt[t];Yt[t++]=null;var i=Yt[t];Yt[t++]=null;var l=Yt[t];if(Yt[t++]=null,a!==null&&i!==null){var r=a.pending;r===null?i.next=i:(i.next=r.next,r.next=i),a.pending=i}l!==0&&Tb(n,i,l)}}function yu(e,t,n,a){Yt[Ii++]=e,Yt[Ii++]=t,Yt[Ii++]=n,Yt[Ii++]=a,Qd|=a,e.lanes|=a,e=e.alternate,e!==null&&(e.lanes|=a)}function Zd(e,t,n,a){return yu(e,t,n,a),Vo(e)}function pi(e,t){return yu(e,null,null,t),Vo(e)}function Tb(e,t,n){e.lanes|=n;var a=e.alternate;a!==null&&(a.lanes|=n);for(var i=!1,l=e.return;l!==null;)l.childLanes|=n,a=l.alternate,a!==null&&(a.childLanes|=n),l.tag===22&&(e=l.stateNode,e===null||e._visibility&1||(i=!0)),e=l,l=l.return;return e.tag===3?(l=e.stateNode,i&&t!==null&&(i=31-Mt(n),e=l.hiddenUpdates,a=e[i],a===null?e[i]=[t]:a.push(t),t.lane=n|536870912),l):null}function Vo(e){if(50<Nr)throw Nr=0,xd=null,Error(R(185));for(var t=e.return;t!==null;)e=t,t=e.return;return e.tag===3?e.stateNode:null}var Pi={};function bE(e,t,n,a){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.refCleanup=this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=a,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function _t(e,t,n,a){return new bE(e,t,n,a)}function Kd(e){return e=e.prototype,!(!e||!e.isReactComponent)}function Zn(e,t){var n=e.alternate;return n===null?(n=_t(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&65011712,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n.refCleanup=e.refCleanup,n}function xb(e,t){e.flags&=65011714;var n=e.alternate;return n===null?(e.childLanes=0,e.lanes=t,e.child=null,e.subtreeFlags=0,e.memoizedProps=null,e.memoizedState=null,e.updateQueue=null,e.dependencies=null,e.stateNode=null):(e.childLanes=n.childLanes,e.lanes=n.lanes,e.child=n.child,e.subtreeFlags=0,e.deletions=null,e.memoizedProps=n.memoizedProps,e.memoizedState=n.memoizedState,e.updateQueue=n.updateQueue,e.type=n.type,t=n.dependencies,e.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext}),e}function Ro(e,t,n,a,i,l){var r=0;if(a=e,typeof e=="function")Kd(e)&&(r=1);else if(typeof e=="string")r=TA(e,n,En.current)?26:e==="html"||e==="head"||e==="body"?27:5;else e:switch(e){case Gf:return e=_t(31,n,t,i),e.elementType=Gf,e.lanes=l,e;case Xi:return ni(n.children,i,l,t);case Yy:r=8,i|=24;break;case jf:return e=_t(12,n,t,i|2),e.elementType=jf,e.lanes=l,e;case qf:return e=_t(13,n,t,i),e.elementType=qf,e.lanes=l,e;case Yf:return e=_t(19,n,t,i),e.elementType=Yf,e.lanes=l,e;default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case Xn:r=10;break e;case Gy:r=9;break e;case Md:r=11;break e;case Ld:r=14;break e;case ca:r=16,a=null;break e}r=29,n=Error(R(130,e===null?"null":typeof e,"")),a=null}return t=_t(r,n,t,i),t.elementType=e,t.type=a,t.lanes=l,t}function ni(e,t,n,a){return e=_t(7,e,a,t),e.lanes=n,e}function yf(e,t,n){return e=_t(6,e,null,t),e.lanes=n,e}function Eb(e){var t=_t(18,null,null,0);return t.stateNode=e,t}function bf(e,t,n){return t=_t(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}var zg=new WeakMap;function Qt(e,t){if(typeof e=="object"&&e!==null){var n=zg.get(e);return n!==void 0?n:(t={value:e,source:t,stack:pg(t)},zg.set(e,t),t)}return{value:e,source:t,stack:pg(t)}}var Wi=[],el=0,Xo=null,Lr=0,Vt=[],Xt=0,_a=null,Sn=1,Tn="";function Gn(e,t){Wi[el++]=Lr,Wi[el++]=Xo,Xo=e,Lr=t}function Ab(e,t,n){Vt[Xt++]=Sn,Vt[Xt++]=Tn,Vt[Xt++]=_a,_a=e;var a=Sn;e=Tn;var i=32-Mt(a)-1;a&=~(1<<i),n+=1;var l=32-Mt(t)+i;if(30<l){var r=i-i%5;l=(a&(1<<r)-1).toString(32),a>>=r,i-=r,Sn=1<<32-Mt(t)+i|n<<i|a,Tn=l+e}else Sn=1<<l|n<<i|a,Tn=e}function Fd(e){e.return!==null&&(Gn(e,1),Ab(e,1,0))}function Jd(e){for(;e===Xo;)Xo=Wi[--el],Wi[el]=null,Lr=Wi[--el],Wi[el]=null;for(;e===_a;)_a=Vt[--Xt],Vt[Xt]=null,Tn=Vt[--Xt],Vt[Xt]=null,Sn=Vt[--Xt],Vt[Xt]=null}function kb(e,t){Vt[Xt++]=Sn,Vt[Xt++]=Tn,Vt[Xt++]=_a,Sn=t.id,Tn=t.overflow,_a=e}var et=null,Re=null,ae=!1,xa=null,Zt=!1,nd=Error(R(519));function Ca(e){var t=Error(R(418,1<arguments.length&&arguments[1]!==void 0&&arguments[1]?"text":"HTML",""));throw Ur(Qt(t,e)),nd}function Mg(e){var t=e.stateNode,n=e.type,a=e.memoizedProps;switch(t[We]=e,t[Et]=a,n){case"dialog":W("cancel",t),W("close",t);break;case"iframe":case"object":case"embed":W("load",t);break;case"video":case"audio":for(n=0;n<qr.length;n++)W(qr[n],t);break;case"source":W("error",t);break;case"img":case"image":case"link":W("error",t),W("load",t);break;case"details":W("toggle",t);break;case"input":W("invalid",t),tb(t,a.value,a.defaultValue,a.checked,a.defaultChecked,a.type,a.name,!0);break;case"select":W("invalid",t);break;case"textarea":W("invalid",t),ab(t,a.value,a.defaultValue,a.children)}n=a.children,typeof n!="string"&&typeof n!="number"&&typeof n!="bigint"||t.textContent===""+n||a.suppressHydrationWarning===!0||sv(t.textContent,n)?(a.popover!=null&&(W("beforetoggle",t),W("toggle",t)),a.onScroll!=null&&W("scroll",t),a.onScrollEnd!=null&&W("scrollend",t),a.onClick!=null&&(t.onclick=$n),t=!0):t=!1,t||Ca(e,!0)}function Lg(e){for(et=e.return;et;)switch(et.tag){case 5:case 31:case 13:Zt=!1;return;case 27:case 3:Zt=!0;return;default:et=et.return}}function qi(e){if(e!==et)return!1;if(!ae)return Lg(e),ae=!0,!1;var t=e.tag,n;if((n=t!==3&&t!==27)&&((n=t===5)&&(n=e.type,n=!(n!=="form"&&n!=="button")||Od(e.type,e.memoizedProps)),n=!n),n&&Re&&Ca(e),Lg(e),t===13){if(e=e.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(R(317));Re=Ey(e)}else if(t===31){if(e=e.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(R(317));Re=Ey(e)}else t===27?(t=Re,La(e.type)?(e=Cd,Cd=null,Re=e):Re=t):Re=et?Ft(e.stateNode.nextSibling):null;return!0}function ri(){Re=et=null,ae=!1}function vf(){var e=xa;return e!==null&&(Tt===null?Tt=e:Tt.push.apply(Tt,e),xa=null),e}function Ur(e){xa===null?xa=[e]:xa.push(e)}var ad=An(null),mi=null,Qn=null;function da(e,t,n){Te(ad,t._currentValue),t._currentValue=n}function Kn(e){e._currentValue=ad.current,Je(ad)}function id(e,t,n){for(;e!==null;){var a=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,a!==null&&(a.childLanes|=t)):a!==null&&(a.childLanes&t)!==t&&(a.childLanes|=t),e===n)break;e=e.return}}function ld(e,t,n,a){var i=e.child;for(i!==null&&(i.return=e);i!==null;){var l=i.dependencies;if(l!==null){var r=i.child;l=l.firstContext;e:for(;l!==null;){var s=l;l=i;for(var o=0;o<t.length;o++)if(s.context===t[o]){l.lanes|=n,s=l.alternate,s!==null&&(s.lanes|=n),id(l.return,n,e),a||(r=null);break e}l=s.next}}else if(i.tag===18){if(r=i.return,r===null)throw Error(R(341));r.lanes|=n,l=r.alternate,l!==null&&(l.lanes|=n),id(r,n,e),r=null}else r=i.child;if(r!==null)r.return=i;else for(r=i;r!==null;){if(r===e){r=null;break}if(i=r.sibling,i!==null){i.return=r.return,r=i;break}r=r.return}i=r}}function xl(e,t,n,a){e=null;for(var i=t,l=!1;i!==null;){if(!l){if((i.flags&524288)!==0)l=!0;else if((i.flags&262144)!==0)break}if(i.tag===10){var r=i.alternate;if(r===null)throw Error(R(387));if(r=r.memoizedProps,r!==null){var s=i.type;Ut(i.pendingProps.value,r.value)||(e!==null?e.push(s):e=[s])}}else if(i===Ho.current){if(r=i.alternate,r===null)throw Error(R(387));r.memoizedState.memoizedState!==i.memoizedState.memoizedState&&(e!==null?e.push(Gr):e=[Gr])}i=i.return}e!==null&&ld(t,e,n,a),t.flags|=262144}function $o(e){for(e=e.firstContext;e!==null;){if(!Ut(e.context._currentValue,e.memoizedValue))return!0;e=e.next}return!1}function si(e){mi=e,Qn=null,e=e.dependencies,e!==null&&(e.firstContext=null)}function tt(e){return Rb(mi,e)}function fo(e,t){return mi===null&&si(e),Rb(e,t)}function Rb(e,t){var n=t._currentValue;if(t={context:t,memoizedValue:n,next:null},Qn===null){if(e===null)throw Error(R(308));Qn=t,e.dependencies={lanes:0,firstContext:t},e.flags|=524288}else Qn=Qn.next=t;return n}var vE=typeof AbortController<"u"?AbortController:function(){var e=[],t=this.signal={aborted:!1,addEventListener:function(n,a){e.push(a)}};this.abort=function(){t.aborted=!0,e.forEach(function(n){return n()})}},SE=Xe.unstable_scheduleCallback,TE=Xe.unstable_NormalPriority,qe={$$typeof:Xn,Consumer:null,Provider:null,_currentValue:null,_currentValue2:null,_threadCount:0};function Id(){return{controller:new vE,data:new Map,refCount:0}}function Ir(e){e.refCount--,e.refCount===0&&SE(TE,function(){e.controller.abort()})}var Tr=null,rd=0,dl=0,ll=null;function xE(e,t){if(Tr===null){var n=Tr=[];rd=0,dl=xh(),ll={status:"pending",value:void 0,then:function(a){n.push(a)}}}return rd++,t.then(Ug,Ug),t}function Ug(){if(--rd===0&&Tr!==null){ll!==null&&(ll.status="fulfilled");var e=Tr;Tr=null,dl=0,ll=null;for(var t=0;t<e.length;t++)(0,e[t])()}}function EE(e,t){var n=[],a={status:"pending",value:null,reason:null,then:function(i){n.push(i)}};return e.then(function(){a.status="fulfilled",a.value=t;for(var i=0;i<n.length;i++)(0,n[i])(t)},function(i){for(a.status="rejected",a.reason=i,i=0;i<n.length;i++)(0,n[i])(void 0)}),a}var Hg=$.S;$.S=function(e,t){q0=Dt(),typeof t=="object"&&t!==null&&typeof t.then=="function"&&xE(e,t),Hg!==null&&Hg(e,t)};var ai=An(null);function Pd(){var e=ai.current;return e!==null?e:be.pooledCache}function Oo(e,t){t===null?Te(ai,ai.current):Te(ai,t.pool)}function Ob(){var e=Pd();return e===null?null:{parent:qe._currentValue,pool:e}}var El=Error(R(460)),Wd=Error(R(474)),bu=Error(R(542)),Qo={then:function(){}};function Bg(e){return e=e.status,e==="fulfilled"||e==="rejected"}function wb(e,t,n){switch(n=e[n],n===void 0?e.push(t):n!==t&&(t.then($n,$n),t=n),t.status){case"fulfilled":return t.value;case"rejected":throw e=t.reason,qg(e),e;default:if(typeof t.status=="string")t.then($n,$n);else{if(e=be,e!==null&&100<e.shellSuspendCounter)throw Error(R(482));e=t,e.status="pending",e.then(function(a){if(t.status==="pending"){var i=t;i.status="fulfilled",i.value=a}},function(a){if(t.status==="pending"){var i=t;i.status="rejected",i.reason=a}})}switch(t.status){case"fulfilled":return t.value;case"rejected":throw e=t.reason,qg(e),e}throw ii=t,El}}function Wa(e){try{var t=e._init;return t(e._payload)}catch(n){throw n!==null&&typeof n=="object"&&typeof n.then=="function"?(ii=n,El):n}}var ii=null;function jg(){if(ii===null)throw Error(R(459));var e=ii;return ii=null,e}function qg(e){if(e===El||e===bu)throw Error(R(483))}var rl=null,Hr=0;function ho(e){var t=Hr;return Hr+=1,rl===null&&(rl=[]),wb(rl,e,t)}function or(e,t){t=t.props.ref,e.ref=t!==void 0?t:null}function po(e,t){throw t.$$typeof===ux?Error(R(525)):(e=Object.prototype.toString.call(t),Error(R(31,e==="[object Object]"?"object with keys {"+Object.keys(t).join(", ")+"}":e)))}function Nb(e){function t(h,m){if(e){var y=h.deletions;y===null?(h.deletions=[m],h.flags|=16):y.push(m)}}function n(h,m){if(!e)return null;for(;m!==null;)t(h,m),m=m.sibling;return null}function a(h){for(var m=new Map;h!==null;)h.key!==null?m.set(h.key,h):m.set(h.index,h),h=h.sibling;return m}function i(h,m){return h=Zn(h,m),h.index=0,h.sibling=null,h}function l(h,m,y){return h.index=y,e?(y=h.alternate,y!==null?(y=y.index,y<m?(h.flags|=67108866,m):y):(h.flags|=67108866,m)):(h.flags|=1048576,m)}function r(h){return e&&h.alternate===null&&(h.flags|=67108866),h}function s(h,m,y,b){return m===null||m.tag!==6?(m=yf(y,h.mode,b),m.return=h,m):(m=i(m,y),m.return=h,m)}function o(h,m,y,b){var k=y.type;return k===Xi?c(h,m,y.props.children,b,y.key):m!==null&&(m.elementType===k||typeof k=="object"&&k!==null&&k.$$typeof===ca&&Wa(k)===m.type)?(m=i(m,y.props),or(m,y),m.return=h,m):(m=Ro(y.type,y.key,y.props,null,h.mode,b),or(m,y),m.return=h,m)}function u(h,m,y,b){return m===null||m.tag!==4||m.stateNode.containerInfo!==y.containerInfo||m.stateNode.implementation!==y.implementation?(m=bf(y,h.mode,b),m.return=h,m):(m=i(m,y.children||[]),m.return=h,m)}function c(h,m,y,b,k){return m===null||m.tag!==7?(m=ni(y,h.mode,b,k),m.return=h,m):(m=i(m,y),m.return=h,m)}function f(h,m,y){if(typeof m=="string"&&m!==""||typeof m=="number"||typeof m=="bigint")return m=yf(""+m,h.mode,y),m.return=h,m;if(typeof m=="object"&&m!==null){switch(m.$$typeof){case ao:return y=Ro(m.type,m.key,m.props,null,h.mode,y),or(y,m),y.return=h,y;case hr:return m=bf(m,h.mode,y),m.return=h,m;case ca:return m=Wa(m),f(h,m,y)}if(pr(m)||rr(m))return m=ni(m,h.mode,y,null),m.return=h,m;if(typeof m.then=="function")return f(h,ho(m),y);if(m.$$typeof===Xn)return f(h,fo(h,m),y);po(h,m)}return null}function d(h,m,y,b){var k=m!==null?m.key:null;if(typeof y=="string"&&y!==""||typeof y=="number"||typeof y=="bigint")return k!==null?null:s(h,m,""+y,b);if(typeof y=="object"&&y!==null){switch(y.$$typeof){case ao:return y.key===k?o(h,m,y,b):null;case hr:return y.key===k?u(h,m,y,b):null;case ca:return y=Wa(y),d(h,m,y,b)}if(pr(y)||rr(y))return k!==null?null:c(h,m,y,b,null);if(typeof y.then=="function")return d(h,m,ho(y),b);if(y.$$typeof===Xn)return d(h,m,fo(h,y),b);po(h,y)}return null}function p(h,m,y,b,k){if(typeof b=="string"&&b!==""||typeof b=="number"||typeof b=="bigint")return h=h.get(y)||null,s(m,h,""+b,k);if(typeof b=="object"&&b!==null){switch(b.$$typeof){case ao:return h=h.get(b.key===null?y:b.key)||null,o(m,h,b,k);case hr:return h=h.get(b.key===null?y:b.key)||null,u(m,h,b,k);case ca:return b=Wa(b),p(h,m,y,b,k)}if(pr(b)||rr(b))return h=h.get(y)||null,c(m,h,b,k,null);if(typeof b.then=="function")return p(h,m,y,ho(b),k);if(b.$$typeof===Xn)return p(h,m,y,fo(m,b),k);po(m,b)}return null}function v(h,m,y,b){for(var k=null,_=null,w=m,B=m=0,U=null;w!==null&&B<y.length;B++){w.index>B?(U=w,w=null):U=w.sibling;var M=d(h,w,y[B],b);if(M===null){w===null&&(w=U);break}e&&w&&M.alternate===null&&t(h,w),m=l(M,m,B),_===null?k=M:_.sibling=M,_=M,w=U}if(B===y.length)return n(h,w),ae&&Gn(h,B),k;if(w===null){for(;B<y.length;B++)w=f(h,y[B],b),w!==null&&(m=l(w,m,B),_===null?k=w:_.sibling=w,_=w);return ae&&Gn(h,B),k}for(w=a(w);B<y.length;B++)U=p(w,h,B,y[B],b),U!==null&&(e&&U.alternate!==null&&w.delete(U.key===null?B:U.key),m=l(U,m,B),_===null?k=U:_.sibling=U,_=U);return e&&w.forEach(function(ve){return t(h,ve)}),ae&&Gn(h,B),k}function S(h,m,y,b){if(y==null)throw Error(R(151));for(var k=null,_=null,w=m,B=m=0,U=null,M=y.next();w!==null&&!M.done;B++,M=y.next()){w.index>B?(U=w,w=null):U=w.sibling;var ve=d(h,w,M.value,b);if(ve===null){w===null&&(w=U);break}e&&w&&ve.alternate===null&&t(h,w),m=l(ve,m,B),_===null?k=ve:_.sibling=ve,_=ve,w=U}if(M.done)return n(h,w),ae&&Gn(h,B),k;if(w===null){for(;!M.done;B++,M=y.next())M=f(h,M.value,b),M!==null&&(m=l(M,m,B),_===null?k=M:_.sibling=M,_=M);return ae&&Gn(h,B),k}for(w=a(w);!M.done;B++,M=y.next())M=p(w,h,B,M.value,b),M!==null&&(e&&M.alternate!==null&&w.delete(M.key===null?B:M.key),m=l(M,m,B),_===null?k=M:_.sibling=M,_=M);return e&&w.forEach(function(X){return t(h,X)}),ae&&Gn(h,B),k}function x(h,m,y,b){if(typeof y=="object"&&y!==null&&y.type===Xi&&y.key===null&&(y=y.props.children),typeof y=="object"&&y!==null){switch(y.$$typeof){case ao:e:{for(var k=y.key;m!==null;){if(m.key===k){if(k=y.type,k===Xi){if(m.tag===7){n(h,m.sibling),b=i(m,y.props.children),b.return=h,h=b;break e}}else if(m.elementType===k||typeof k=="object"&&k!==null&&k.$$typeof===ca&&Wa(k)===m.type){n(h,m.sibling),b=i(m,y.props),or(b,y),b.return=h,h=b;break e}n(h,m);break}else t(h,m);m=m.sibling}y.type===Xi?(b=ni(y.props.children,h.mode,b,y.key),b.return=h,h=b):(b=Ro(y.type,y.key,y.props,null,h.mode,b),or(b,y),b.return=h,h=b)}return r(h);case hr:e:{for(k=y.key;m!==null;){if(m.key===k)if(m.tag===4&&m.stateNode.containerInfo===y.containerInfo&&m.stateNode.implementation===y.implementation){n(h,m.sibling),b=i(m,y.children||[]),b.return=h,h=b;break e}else{n(h,m);break}else t(h,m);m=m.sibling}b=bf(y,h.mode,b),b.return=h,h=b}return r(h);case ca:return y=Wa(y),x(h,m,y,b)}if(pr(y))return v(h,m,y,b);if(rr(y)){if(k=rr(y),typeof k!="function")throw Error(R(150));return y=k.call(y),S(h,m,y,b)}if(typeof y.then=="function")return x(h,m,ho(y),b);if(y.$$typeof===Xn)return x(h,m,fo(h,y),b);po(h,y)}return typeof y=="string"&&y!==""||typeof y=="number"||typeof y=="bigint"?(y=""+y,m!==null&&m.tag===6?(n(h,m.sibling),b=i(m,y),b.return=h,h=b):(n(h,m),b=yf(y,h.mode,b),b.return=h,h=b),r(h)):n(h,m)}return function(h,m,y,b){try{Hr=0;var k=x(h,m,y,b);return rl=null,k}catch(w){if(w===El||w===bu)throw w;var _=_t(29,w,null,h.mode);return _.lanes=b,_.return=h,_}}}var oi=Nb(!0),_b=Nb(!1),fa=!1;function eh(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function sd(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function Ea(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function Aa(e,t,n){var a=e.updateQueue;if(a===null)return null;if(a=a.shared,(se&2)!==0){var i=a.pending;return i===null?t.next=t:(t.next=i.next,i.next=t),a.pending=t,t=Vo(e),Tb(e,null,n),t}return yu(e,a,t,n),Vo(e)}function xr(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194048)!==0)){var a=t.lanes;a&=e.pendingLanes,n|=a,t.lanes=n,Ky(e,n)}}function Sf(e,t){var n=e.updateQueue,a=e.alternate;if(a!==null&&(a=a.updateQueue,n===a)){var i=null,l=null;if(n=n.firstBaseUpdate,n!==null){do{var r={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};l===null?i=l=r:l=l.next=r,n=n.next}while(n!==null);l===null?i=l=t:l=l.next=t}else i=l=t;n={baseState:a.baseState,firstBaseUpdate:i,lastBaseUpdate:l,shared:a.shared,callbacks:a.callbacks},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}var od=!1;function Er(){if(od){var e=ll;if(e!==null)throw e}}function Ar(e,t,n,a){od=!1;var i=e.updateQueue;fa=!1;var l=i.firstBaseUpdate,r=i.lastBaseUpdate,s=i.shared.pending;if(s!==null){i.shared.pending=null;var o=s,u=o.next;o.next=null,r===null?l=u:r.next=u,r=o;var c=e.alternate;c!==null&&(c=c.updateQueue,s=c.lastBaseUpdate,s!==r&&(s===null?c.firstBaseUpdate=u:s.next=u,c.lastBaseUpdate=o))}if(l!==null){var f=i.baseState;r=0,c=u=o=null,s=l;do{var d=s.lane&-536870913,p=d!==s.lane;if(p?(ne&d)===d:(a&d)===d){d!==0&&d===dl&&(od=!0),c!==null&&(c=c.next={lane:0,tag:s.tag,payload:s.payload,callback:null,next:null});e:{var v=e,S=s;d=t;var x=n;switch(S.tag){case 1:if(v=S.payload,typeof v=="function"){f=v.call(x,f,d);break e}f=v;break e;case 3:v.flags=v.flags&-65537|128;case 0:if(v=S.payload,d=typeof v=="function"?v.call(x,f,d):v,d==null)break e;f=Oe({},f,d);break e;case 2:fa=!0}}d=s.callback,d!==null&&(e.flags|=64,p&&(e.flags|=8192),p=i.callbacks,p===null?i.callbacks=[d]:p.push(d))}else p={lane:d,tag:s.tag,payload:s.payload,callback:s.callback,next:null},c===null?(u=c=p,o=f):c=c.next=p,r|=d;if(s=s.next,s===null){if(s=i.shared.pending,s===null)break;p=s,s=p.next,p.next=null,i.lastBaseUpdate=p,i.shared.pending=null}}while(!0);c===null&&(o=f),i.baseState=o,i.firstBaseUpdate=u,i.lastBaseUpdate=c,l===null&&(i.shared.lanes=0),za|=r,e.lanes=r,e.memoizedState=f}}function Cb(e,t){if(typeof e!="function")throw Error(R(191,e));e.call(t)}function Db(e,t){var n=e.callbacks;if(n!==null)for(e.callbacks=null,e=0;e<n.length;e++)Cb(n[e],t)}var hl=An(null),Zo=An(0);function Yg(e,t){e=ea,Te(Zo,e),Te(hl,t),ea=e|t.baseLanes}function ud(){Te(Zo,ea),Te(hl,hl.current)}function th(){ea=Zo.current,Je(hl),Je(Zo)}var Ht=An(null),Kt=null;function ha(e){var t=e.alternate;Te(Me,Me.current&1),Te(Ht,e),Kt===null&&(t===null||hl.current!==null||t.memoizedState!==null)&&(Kt=e)}function cd(e){Te(Me,Me.current),Te(Ht,e),Kt===null&&(Kt=e)}function zb(e){e.tag===22?(Te(Me,Me.current),Te(Ht,e),Kt===null&&(Kt=e)):pa(e)}function pa(){Te(Me,Me.current),Te(Ht,Ht.current)}function Nt(e){Je(Ht),Kt===e&&(Kt=null),Je(Me)}var Me=An(0);function Ko(e){for(var t=e;t!==null;){if(t.tag===13){var n=t.memoizedState;if(n!==null&&(n=n.dehydrated,n===null||Nd(n)||_d(n)))return t}else if(t.tag===19&&(t.memoizedProps.revealOrder==="forwards"||t.memoizedProps.revealOrder==="backwards"||t.memoizedProps.revealOrder==="unstable_legacy-backwards"||t.memoizedProps.revealOrder==="together")){if((t.flags&128)!==0)return t}else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var In=0,J=null,me=null,Be=null,Fo=!1,sl=!1,ui=!1,Jo=0,Br=0,ol=null,AE=0;function _e(){throw Error(R(321))}function nh(e,t){if(t===null)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!Ut(e[n],t[n]))return!1;return!0}function ah(e,t,n,a,i,l){return In=l,J=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,$.H=e===null||e.memoizedState===null?c0:ph,ui=!1,l=n(a,i),ui=!1,sl&&(l=Lb(t,n,a,i)),Mb(e),l}function Mb(e){$.H=jr;var t=me!==null&&me.next!==null;if(In=0,Be=me=J=null,Fo=!1,Br=0,ol=null,t)throw Error(R(300));e===null||Ye||(e=e.dependencies,e!==null&&$o(e)&&(Ye=!0))}function Lb(e,t,n,a){J=e;var i=0;do{if(sl&&(ol=null),Br=0,sl=!1,25<=i)throw Error(R(301));if(i+=1,Be=me=null,e.updateQueue!=null){var l=e.updateQueue;l.lastEffect=null,l.events=null,l.stores=null,l.memoCache!=null&&(l.memoCache.index=0)}$.H=f0,l=t(n,a)}while(sl);return l}function kE(){var e=$.H,t=e.useState()[0];return t=typeof t.then=="function"?Pr(t):t,e=e.useState()[0],(me!==null?me.memoizedState:null)!==e&&(J.flags|=1024),t}function ih(){var e=Jo!==0;return Jo=0,e}function lh(e,t,n){t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~n}function rh(e){if(Fo){for(e=e.memoizedState;e!==null;){var t=e.queue;t!==null&&(t.pending=null),e=e.next}Fo=!1}In=0,Be=me=J=null,sl=!1,Br=Jo=0,ol=null}function ht(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return Be===null?J.memoizedState=Be=e:Be=Be.next=e,Be}function Le(){if(me===null){var e=J.alternate;e=e!==null?e.memoizedState:null}else e=me.next;var t=Be===null?J.memoizedState:Be.next;if(t!==null)Be=t,me=e;else{if(e===null)throw J.alternate===null?Error(R(467)):Error(R(310));me=e,e={memoizedState:me.memoizedState,baseState:me.baseState,baseQueue:me.baseQueue,queue:me.queue,next:null},Be===null?J.memoizedState=Be=e:Be=Be.next=e}return Be}function vu(){return{lastEffect:null,events:null,stores:null,memoCache:null}}function Pr(e){var t=Br;return Br+=1,ol===null&&(ol=[]),e=wb(ol,e,t),t=J,(Be===null?t.memoizedState:Be.next)===null&&(t=t.alternate,$.H=t===null||t.memoizedState===null?c0:ph),e}function Su(e){if(e!==null&&typeof e=="object"){if(typeof e.then=="function")return Pr(e);if(e.$$typeof===Xn)return tt(e)}throw Error(R(438,String(e)))}function sh(e){var t=null,n=J.updateQueue;if(n!==null&&(t=n.memoCache),t==null){var a=J.alternate;a!==null&&(a=a.updateQueue,a!==null&&(a=a.memoCache,a!=null&&(t={data:a.data.map(function(i){return i.slice()}),index:0})))}if(t==null&&(t={data:[],index:0}),n===null&&(n=vu(),J.updateQueue=n),n.memoCache=t,n=t.data[t.index],n===void 0)for(n=t.data[t.index]=Array(e),a=0;a<e;a++)n[a]=cx;return t.index++,n}function Pn(e,t){return typeof t=="function"?t(e):t}function wo(e){var t=Le();return oh(t,me,e)}function oh(e,t,n){var a=e.queue;if(a===null)throw Error(R(311));a.lastRenderedReducer=n;var i=e.baseQueue,l=a.pending;if(l!==null){if(i!==null){var r=i.next;i.next=l.next,l.next=r}t.baseQueue=i=l,a.pending=null}if(l=e.baseState,i===null)e.memoizedState=l;else{t=i.next;var s=r=null,o=null,u=t,c=!1;do{var f=u.lane&-536870913;if(f!==u.lane?(ne&f)===f:(In&f)===f){var d=u.revertLane;if(d===0)o!==null&&(o=o.next={lane:0,revertLane:0,gesture:null,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null}),f===dl&&(c=!0);else if((In&d)===d){u=u.next,d===dl&&(c=!0);continue}else f={lane:0,revertLane:u.revertLane,gesture:null,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null},o===null?(s=o=f,r=l):o=o.next=f,J.lanes|=d,za|=d;f=u.action,ui&&n(l,f),l=u.hasEagerState?u.eagerState:n(l,f)}else d={lane:f,revertLane:u.revertLane,gesture:u.gesture,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null},o===null?(s=o=d,r=l):o=o.next=d,J.lanes|=f,za|=f;u=u.next}while(u!==null&&u!==t);if(o===null?r=l:o.next=s,!Ut(l,e.memoizedState)&&(Ye=!0,c&&(n=ll,n!==null)))throw n;e.memoizedState=l,e.baseState=r,e.baseQueue=o,a.lastRenderedState=l}return i===null&&(a.lanes=0),[e.memoizedState,a.dispatch]}function Tf(e){var t=Le(),n=t.queue;if(n===null)throw Error(R(311));n.lastRenderedReducer=e;var a=n.dispatch,i=n.pending,l=t.memoizedState;if(i!==null){n.pending=null;var r=i=i.next;do l=e(l,r.action),r=r.next;while(r!==i);Ut(l,t.memoizedState)||(Ye=!0),t.memoizedState=l,t.baseQueue===null&&(t.baseState=l),n.lastRenderedState=l}return[l,a]}function Ub(e,t,n){var a=J,i=Le(),l=ae;if(l){if(n===void 0)throw Error(R(407));n=n()}else n=t();var r=!Ut((me||i).memoizedState,n);if(r&&(i.memoizedState=n,Ye=!0),i=i.queue,uh(jb.bind(null,a,i,e),[e]),i.getSnapshot!==t||r||Be!==null&&Be.memoizedState.tag&1){if(a.flags|=2048,pl(9,{destroy:void 0},Bb.bind(null,a,i,n,t),null),be===null)throw Error(R(349));l||(In&127)!==0||Hb(a,t,n)}return n}function Hb(e,t,n){e.flags|=16384,e={getSnapshot:t,value:n},t=J.updateQueue,t===null?(t=vu(),J.updateQueue=t,t.stores=[e]):(n=t.stores,n===null?t.stores=[e]:n.push(e))}function Bb(e,t,n,a){t.value=n,t.getSnapshot=a,qb(t)&&Yb(e)}function jb(e,t,n){return n(function(){qb(t)&&Yb(e)})}function qb(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!Ut(e,n)}catch(a){return!0}}function Yb(e){var t=pi(e,2);t!==null&&xt(t,e,2)}function fd(e){var t=ht();if(typeof e=="function"){var n=e;if(e=n(),ui){ga(!0);try{n()}finally{ga(!1)}}}return t.memoizedState=t.baseState=e,t.queue={pending:null,lanes:0,dispatch:null,lastRenderedReducer:Pn,lastRenderedState:e},t}function Gb(e,t,n,a){return e.baseState=n,oh(e,me,typeof a=="function"?a:Pn)}function RE(e,t,n,a,i){if(xu(e))throw Error(R(485));if(e=t.action,e!==null){var l={payload:i,action:e,next:null,isTransition:!0,status:"pending",value:null,reason:null,listeners:[],then:function(r){l.listeners.push(r)}};$.T!==null?n(!0):l.isTransition=!1,a(l),n=t.pending,n===null?(l.next=t.pending=l,Vb(t,l)):(l.next=n.next,t.pending=n.next=l)}}function Vb(e,t){var n=t.action,a=t.payload,i=e.state;if(t.isTransition){var l=$.T,r={};$.T=r;try{var s=n(i,a),o=$.S;o!==null&&o(r,s),Gg(e,t,s)}catch(u){dd(e,t,u)}finally{l!==null&&r.types!==null&&(l.types=r.types),$.T=l}}else try{l=n(i,a),Gg(e,t,l)}catch(u){dd(e,t,u)}}function Gg(e,t,n){n!==null&&typeof n=="object"&&typeof n.then=="function"?n.then(function(a){Vg(e,t,a)},function(a){return dd(e,t,a)}):Vg(e,t,n)}function Vg(e,t,n){t.status="fulfilled",t.value=n,Xb(t),e.state=n,t=e.pending,t!==null&&(n=t.next,n===t?e.pending=null:(n=n.next,t.next=n,Vb(e,n)))}function dd(e,t,n){var a=e.pending;if(e.pending=null,a!==null){a=a.next;do t.status="rejected",t.reason=n,Xb(t),t=t.next;while(t!==a)}e.action=null}function Xb(e){e=e.listeners;for(var t=0;t<e.length;t++)(0,e[t])()}function $b(e,t){return t}function Xg(e,t){if(ae){var n=be.formState;if(n!==null){e:{var a=J;if(ae){if(Re){t:{for(var i=Re,l=Zt;i.nodeType!==8;){if(!l){i=null;break t}if(i=Ft(i.nextSibling),i===null){i=null;break t}}l=i.data,i=l==="F!"||l==="F"?i:null}if(i){Re=Ft(i.nextSibling),a=i.data==="F!";break e}}Ca(a)}a=!1}a&&(t=n[0])}}return n=ht(),n.memoizedState=n.baseState=t,a={pending:null,lanes:0,dispatch:null,lastRenderedReducer:$b,lastRenderedState:t},n.queue=a,n=s0.bind(null,J,a),a.dispatch=n,a=fd(!1),l=hh.bind(null,J,!1,a.queue),a=ht(),i={state:t,dispatch:null,action:e,pending:null},a.queue=i,n=RE.bind(null,J,i,l,n),i.dispatch=n,a.memoizedState=e,[t,n,!1]}function $g(e){var t=Le();return Qb(t,me,e)}function Qb(e,t,n){if(t=oh(e,t,$b)[0],e=wo(Pn)[0],typeof t=="object"&&t!==null&&typeof t.then=="function")try{var a=Pr(t)}catch(r){throw r===El?bu:r}else a=t;t=Le();var i=t.queue,l=i.dispatch;return n!==t.memoizedState&&(J.flags|=2048,pl(9,{destroy:void 0},OE.bind(null,i,n),null)),[a,l,e]}function OE(e,t){e.action=t}function Qg(e){var t=Le(),n=me;if(n!==null)return Qb(t,n,e);Le(),t=t.memoizedState,n=Le();var a=n.queue.dispatch;return n.memoizedState=e,[t,a,!1]}function pl(e,t,n,a){return e={tag:e,create:n,deps:a,inst:t,next:null},t=J.updateQueue,t===null&&(t=vu(),J.updateQueue=t),n=t.lastEffect,n===null?t.lastEffect=e.next=e:(a=n.next,n.next=e,e.next=a,t.lastEffect=e),e}function Zb(){return Le().memoizedState}function No(e,t,n,a){var i=ht();J.flags|=e,i.memoizedState=pl(1|t,{destroy:void 0},n,a===void 0?null:a)}function Tu(e,t,n,a){var i=Le();a=a===void 0?null:a;var l=i.memoizedState.inst;me!==null&&a!==null&&nh(a,me.memoizedState.deps)?i.memoizedState=pl(t,l,n,a):(J.flags|=e,i.memoizedState=pl(1|t,l,n,a))}function Zg(e,t){No(8390656,8,e,t)}function uh(e,t){Tu(2048,8,e,t)}function wE(e){J.flags|=4;var t=J.updateQueue;if(t===null)t=vu(),J.updateQueue=t,t.events=[e];else{var n=t.events;n===null?t.events=[e]:n.push(e)}}function Kb(e){var t=Le().memoizedState;return wE({ref:t,nextImpl:e}),function(){if((se&2)!==0)throw Error(R(440));return t.impl.apply(void 0,arguments)}}function Fb(e,t){return Tu(4,2,e,t)}function Jb(e,t){return Tu(4,4,e,t)}function Ib(e,t){if(typeof t=="function"){e=e();var n=t(e);return function(){typeof n=="function"?n():t(null)}}if(t!=null)return e=e(),t.current=e,function(){t.current=null}}function Pb(e,t,n){n=n!=null?n.concat([e]):null,Tu(4,4,Ib.bind(null,t,e),n)}function ch(){}function Wb(e,t){var n=Le();t=t===void 0?null:t;var a=n.memoizedState;return t!==null&&nh(t,a[1])?a[0]:(n.memoizedState=[e,t],e)}function e0(e,t){var n=Le();t=t===void 0?null:t;var a=n.memoizedState;if(t!==null&&nh(t,a[1]))return a[0];if(a=e(),ui){ga(!0);try{e()}finally{ga(!1)}}return n.memoizedState=[a,t],a}function fh(e,t,n){return n===void 0||(In&1073741824)!==0&&(ne&261930)===0?e.memoizedState=t:(e.memoizedState=n,e=G0(),J.lanes|=e,za|=e,n)}function t0(e,t,n,a){return Ut(n,t)?n:hl.current!==null?(e=fh(e,n,a),Ut(e,t)||(Ye=!0),e):(In&42)===0||(In&1073741824)!==0&&(ne&261930)===0?(Ye=!0,e.memoizedState=n):(e=G0(),J.lanes|=e,za|=e,t)}function n0(e,t,n,a,i){var l=oe.p;oe.p=l!==0&&8>l?l:8;var r=$.T,s={};$.T=s,hh(e,!1,t,n);try{var o=i(),u=$.S;if(u!==null&&u(s,o),o!==null&&typeof o=="object"&&typeof o.then=="function"){var c=EE(o,a);kr(e,t,c,Lt(e))}else kr(e,t,a,Lt(e))}catch(f){kr(e,t,{then:function(){},status:"rejected",reason:f},Lt())}finally{oe.p=l,r!==null&&s.types!==null&&(r.types=s.types),$.T=r}}function NE(){}function hd(e,t,n,a){if(e.tag!==5)throw Error(R(476));var i=a0(e).queue;n0(e,i,t,ti,n===null?NE:function(){return i0(e),n(a)})}function a0(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:ti,baseState:ti,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Pn,lastRenderedState:ti},next:null};var n={};return t.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Pn,lastRenderedState:n},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function i0(e){var t=a0(e);t.next===null&&(t=e.alternate.memoizedState),kr(e,t.next.queue,{},Lt())}function dh(){return tt(Gr)}function l0(){return Le().memoizedState}function r0(){return Le().memoizedState}function _E(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var n=Lt();e=Ea(n);var a=Aa(t,e,n);a!==null&&(xt(a,t,n),xr(a,t,n)),t={cache:Id()},e.payload=t;return}t=t.return}}function CE(e,t,n){var a=Lt();n={lane:a,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},xu(e)?o0(t,n):(n=Zd(e,t,n,a),n!==null&&(xt(n,e,a),u0(n,t,a)))}function s0(e,t,n){var a=Lt();kr(e,t,n,a)}function kr(e,t,n,a){var i={lane:a,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null};if(xu(e))o0(t,i);else{var l=e.alternate;if(e.lanes===0&&(l===null||l.lanes===0)&&(l=t.lastRenderedReducer,l!==null))try{var r=t.lastRenderedState,s=l(r,n);if(i.hasEagerState=!0,i.eagerState=s,Ut(s,r))return yu(e,t,i,0),be===null&&gu(),!1}catch(o){}if(n=Zd(e,t,i,a),n!==null)return xt(n,e,a),u0(n,t,a),!0}return!1}function hh(e,t,n,a){if(a={lane:2,revertLane:xh(),gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null},xu(e)){if(t)throw Error(R(479))}else t=Zd(e,n,a,2),t!==null&&xt(t,e,2)}function xu(e){var t=e.alternate;return e===J||t!==null&&t===J}function o0(e,t){sl=Fo=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function u0(e,t,n){if((n&4194048)!==0){var a=t.lanes;a&=e.pendingLanes,n|=a,t.lanes=n,Ky(e,n)}}var jr={readContext:tt,use:Su,useCallback:_e,useContext:_e,useEffect:_e,useImperativeHandle:_e,useLayoutEffect:_e,useInsertionEffect:_e,useMemo:_e,useReducer:_e,useRef:_e,useState:_e,useDebugValue:_e,useDeferredValue:_e,useTransition:_e,useSyncExternalStore:_e,useId:_e,useHostTransitionStatus:_e,useFormState:_e,useActionState:_e,useOptimistic:_e,useMemoCache:_e,useCacheRefresh:_e};jr.useEffectEvent=_e;var c0={readContext:tt,use:Su,useCallback:function(e,t){return ht().memoizedState=[e,t===void 0?null:t],e},useContext:tt,useEffect:Zg,useImperativeHandle:function(e,t,n){n=n!=null?n.concat([e]):null,No(4194308,4,Ib.bind(null,t,e),n)},useLayoutEffect:function(e,t){return No(4194308,4,e,t)},useInsertionEffect:function(e,t){No(4,2,e,t)},useMemo:function(e,t){var n=ht();t=t===void 0?null:t;var a=e();if(ui){ga(!0);try{e()}finally{ga(!1)}}return n.memoizedState=[a,t],a},useReducer:function(e,t,n){var a=ht();if(n!==void 0){var i=n(t);if(ui){ga(!0);try{n(t)}finally{ga(!1)}}}else i=t;return a.memoizedState=a.baseState=i,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:i},a.queue=e,e=e.dispatch=CE.bind(null,J,e),[a.memoizedState,e]},useRef:function(e){var t=ht();return e={current:e},t.memoizedState=e},useState:function(e){e=fd(e);var t=e.queue,n=s0.bind(null,J,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:ch,useDeferredValue:function(e,t){var n=ht();return fh(n,e,t)},useTransition:function(){var e=fd(!1);return e=n0.bind(null,J,e.queue,!0,!1),ht().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var a=J,i=ht();if(ae){if(n===void 0)throw Error(R(407));n=n()}else{if(n=t(),be===null)throw Error(R(349));(ne&127)!==0||Hb(a,t,n)}i.memoizedState=n;var l={value:n,getSnapshot:t};return i.queue=l,Zg(jb.bind(null,a,l,e),[e]),a.flags|=2048,pl(9,{destroy:void 0},Bb.bind(null,a,l,n,t),null),n},useId:function(){var e=ht(),t=be.identifierPrefix;if(ae){var n=Tn,a=Sn;n=(a&~(1<<32-Mt(a)-1)).toString(32)+n,t="_"+t+"R_"+n,n=Jo++,0<n&&(t+="H"+n.toString(32)),t+="_"}else n=AE++,t="_"+t+"r_"+n.toString(32)+"_";return e.memoizedState=t},useHostTransitionStatus:dh,useFormState:Xg,useActionState:Xg,useOptimistic:function(e){var t=ht();t.memoizedState=t.baseState=e;var n={pending:null,lanes:0,dispatch:null,lastRenderedReducer:null,lastRenderedState:null};return t.queue=n,t=hh.bind(null,J,!0,n),n.dispatch=t,[e,t]},useMemoCache:sh,useCacheRefresh:function(){return ht().memoizedState=_E.bind(null,J)},useEffectEvent:function(e){var t=ht(),n={impl:e};return t.memoizedState=n,function(){if((se&2)!==0)throw Error(R(440));return n.impl.apply(void 0,arguments)}}},ph={readContext:tt,use:Su,useCallback:Wb,useContext:tt,useEffect:uh,useImperativeHandle:Pb,useInsertionEffect:Fb,useLayoutEffect:Jb,useMemo:e0,useReducer:wo,useRef:Zb,useState:function(){return wo(Pn)},useDebugValue:ch,useDeferredValue:function(e,t){var n=Le();return t0(n,me.memoizedState,e,t)},useTransition:function(){var e=wo(Pn)[0],t=Le().memoizedState;return[typeof e=="boolean"?e:Pr(e),t]},useSyncExternalStore:Ub,useId:l0,useHostTransitionStatus:dh,useFormState:$g,useActionState:$g,useOptimistic:function(e,t){var n=Le();return Gb(n,me,e,t)},useMemoCache:sh,useCacheRefresh:r0};ph.useEffectEvent=Kb;var f0={readContext:tt,use:Su,useCallback:Wb,useContext:tt,useEffect:uh,useImperativeHandle:Pb,useInsertionEffect:Fb,useLayoutEffect:Jb,useMemo:e0,useReducer:Tf,useRef:Zb,useState:function(){return Tf(Pn)},useDebugValue:ch,useDeferredValue:function(e,t){var n=Le();return me===null?fh(n,e,t):t0(n,me.memoizedState,e,t)},useTransition:function(){var e=Tf(Pn)[0],t=Le().memoizedState;return[typeof e=="boolean"?e:Pr(e),t]},useSyncExternalStore:Ub,useId:l0,useHostTransitionStatus:dh,useFormState:Qg,useActionState:Qg,useOptimistic:function(e,t){var n=Le();return me!==null?Gb(n,me,e,t):(n.baseState=e,[e,n.queue.dispatch])},useMemoCache:sh,useCacheRefresh:r0};f0.useEffectEvent=Kb;function xf(e,t,n,a){t=e.memoizedState,n=n(a,t),n=n==null?t:Oe({},t,n),e.memoizedState=n,e.lanes===0&&(e.updateQueue.baseState=n)}var pd={enqueueSetState:function(e,t,n){e=e._reactInternals;var a=Lt(),i=Ea(a);i.payload=t,n!=null&&(i.callback=n),t=Aa(e,i,a),t!==null&&(xt(t,e,a),xr(t,e,a))},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var a=Lt(),i=Ea(a);i.tag=1,i.payload=t,n!=null&&(i.callback=n),t=Aa(e,i,a),t!==null&&(xt(t,e,a),xr(t,e,a))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=Lt(),a=Ea(n);a.tag=2,t!=null&&(a.callback=t),t=Aa(e,a,n),t!==null&&(xt(t,e,n),xr(t,e,n))}};function Kg(e,t,n,a,i,l,r){return e=e.stateNode,typeof e.shouldComponentUpdate=="function"?e.shouldComponentUpdate(a,l,r):t.prototype&&t.prototype.isPureReactComponent?!Mr(n,a)||!Mr(i,l):!0}function Fg(e,t,n,a){e=t.state,typeof t.componentWillReceiveProps=="function"&&t.componentWillReceiveProps(n,a),typeof t.UNSAFE_componentWillReceiveProps=="function"&&t.UNSAFE_componentWillReceiveProps(n,a),t.state!==e&&pd.enqueueReplaceState(t,t.state,null)}function ci(e,t){var n=t;if("ref"in t){n={};for(var a in t)a!=="ref"&&(n[a]=t[a])}if(e=e.defaultProps){n===t&&(n=Oe({},n));for(var i in e)n[i]===void 0&&(n[i]=e[i])}return n}function d0(e){Go(e)}function h0(e){console.error(e)}function p0(e){Go(e)}function Io(e,t){try{var n=e.onUncaughtError;n(t.value,{componentStack:t.stack})}catch(a){setTimeout(function(){throw a})}}function Jg(e,t,n){try{var a=e.onCaughtError;a(n.value,{componentStack:n.stack,errorBoundary:t.tag===1?t.stateNode:null})}catch(i){setTimeout(function(){throw i})}}function md(e,t,n){return n=Ea(n),n.tag=3,n.payload={element:null},n.callback=function(){Io(e,t)},n}function m0(e){return e=Ea(e),e.tag=3,e}function g0(e,t,n,a){var i=n.type.getDerivedStateFromError;if(typeof i=="function"){var l=a.value;e.payload=function(){return i(l)},e.callback=function(){Jg(t,n,a)}}var r=n.stateNode;r!==null&&typeof r.componentDidCatch=="function"&&(e.callback=function(){Jg(t,n,a),typeof i!="function"&&(ka===null?ka=new Set([this]):ka.add(this));var s=a.stack;this.componentDidCatch(a.value,{componentStack:s!==null?s:""})})}function DE(e,t,n,a,i){if(n.flags|=32768,a!==null&&typeof a=="object"&&typeof a.then=="function"){if(t=n.alternate,t!==null&&xl(t,n,i,!0),n=Ht.current,n!==null){switch(n.tag){case 31:case 13:return Kt===null?nu():n.alternate===null&&Ce===0&&(Ce=3),n.flags&=-257,n.flags|=65536,n.lanes=i,a===Qo?n.flags|=16384:(t=n.updateQueue,t===null?n.updateQueue=new Set([a]):t.add(a),zf(e,a,i)),!1;case 22:return n.flags|=65536,a===Qo?n.flags|=16384:(t=n.updateQueue,t===null?(t={transitions:null,markerInstances:null,retryQueue:new Set([a])},n.updateQueue=t):(n=t.retryQueue,n===null?t.retryQueue=new Set([a]):n.add(a)),zf(e,a,i)),!1}throw Error(R(435,n.tag))}return zf(e,a,i),nu(),!1}if(ae)return t=Ht.current,t!==null?((t.flags&65536)===0&&(t.flags|=256),t.flags|=65536,t.lanes=i,a!==nd&&(e=Error(R(422),{cause:a}),Ur(Qt(e,n)))):(a!==nd&&(t=Error(R(423),{cause:a}),Ur(Qt(t,n))),e=e.current.alternate,e.flags|=65536,i&=-i,e.lanes|=i,a=Qt(a,n),i=md(e.stateNode,a,i),Sf(e,i),Ce!==4&&(Ce=2)),!1;var l=Error(R(520),{cause:a});if(l=Qt(l,n),wr===null?wr=[l]:wr.push(l),Ce!==4&&(Ce=2),t===null)return!0;a=Qt(a,n),n=t;do{switch(n.tag){case 3:return n.flags|=65536,e=i&-i,n.lanes|=e,e=md(n.stateNode,a,e),Sf(n,e),!1;case 1:if(t=n.type,l=n.stateNode,(n.flags&128)===0&&(typeof t.getDerivedStateFromError=="function"||l!==null&&typeof l.componentDidCatch=="function"&&(ka===null||!ka.has(l))))return n.flags|=65536,i&=-i,n.lanes|=i,i=m0(i),g0(i,e,n,a),Sf(n,i),!1}n=n.return}while(n!==null);return!1}var mh=Error(R(461)),Ye=!1;function Pe(e,t,n,a){t.child=e===null?_b(t,null,n,a):oi(t,e.child,n,a)}function Ig(e,t,n,a,i){n=n.render;var l=t.ref;if("ref"in a){var r={};for(var s in a)s!=="ref"&&(r[s]=a[s])}else r=a;return si(t),a=ah(e,t,n,r,l,i),s=ih(),e!==null&&!Ye?(lh(e,t,i),Wn(e,t,i)):(ae&&s&&Fd(t),t.flags|=1,Pe(e,t,a,i),t.child)}function Pg(e,t,n,a,i){if(e===null){var l=n.type;return typeof l=="function"&&!Kd(l)&&l.defaultProps===void 0&&n.compare===null?(t.tag=15,t.type=l,y0(e,t,l,a,i)):(e=Ro(n.type,null,a,t,t.mode,i),e.ref=t.ref,e.return=t,t.child=e)}if(l=e.child,!gh(e,i)){var r=l.memoizedProps;if(n=n.compare,n=n!==null?n:Mr,n(r,a)&&e.ref===t.ref)return Wn(e,t,i)}return t.flags|=1,e=Zn(l,a),e.ref=t.ref,e.return=t,t.child=e}function y0(e,t,n,a,i){if(e!==null){var l=e.memoizedProps;if(Mr(l,a)&&e.ref===t.ref)if(Ye=!1,t.pendingProps=a=l,gh(e,i))(e.flags&131072)!==0&&(Ye=!0);else return t.lanes=e.lanes,Wn(e,t,i)}return gd(e,t,n,a,i)}function b0(e,t,n,a){var i=a.children,l=e!==null?e.memoizedState:null;if(e===null&&t.stateNode===null&&(t.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null}),a.mode==="hidden"){if((t.flags&128)!==0){if(l=l!==null?l.baseLanes|n:n,e!==null){for(a=t.child=e.child,i=0;a!==null;)i=i|a.lanes|a.childLanes,a=a.sibling;a=i&~l}else a=0,t.child=null;return Wg(e,t,l,n,a)}if((n&536870912)!==0)t.memoizedState={baseLanes:0,cachePool:null},e!==null&&Oo(t,l!==null?l.cachePool:null),l!==null?Yg(t,l):ud(),zb(t);else return a=t.lanes=536870912,Wg(e,t,l!==null?l.baseLanes|n:n,n,a)}else l!==null?(Oo(t,l.cachePool),Yg(t,l),pa(t),t.memoizedState=null):(e!==null&&Oo(t,null),ud(),pa(t));return Pe(e,t,i,n),t.child}function gr(e,t){return e!==null&&e.tag===22||t.stateNode!==null||(t.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null}),t.sibling}function Wg(e,t,n,a,i){var l=Pd();return l=l===null?null:{parent:qe._currentValue,pool:l},t.memoizedState={baseLanes:n,cachePool:l},e!==null&&Oo(t,null),ud(),zb(t),e!==null&&xl(e,t,a,!0),t.childLanes=i,null}function _o(e,t){return t=Po({mode:t.mode,children:t.children},e.mode),t.ref=e.ref,e.child=t,t.return=e,t}function ey(e,t,n){return oi(t,e.child,null,n),e=_o(t,t.pendingProps),e.flags|=2,Nt(t),t.memoizedState=null,e}function zE(e,t,n){var a=t.pendingProps,i=(t.flags&128)!==0;if(t.flags&=-129,e===null){if(ae){if(a.mode==="hidden")return e=_o(t,a),t.lanes=536870912,gr(null,e);if(cd(t),(e=Re)?(e=cv(e,Zt),e=e!==null&&e.data==="&"?e:null,e!==null&&(t.memoizedState={dehydrated:e,treeContext:_a!==null?{id:Sn,overflow:Tn}:null,retryLane:536870912,hydrationErrors:null},n=Eb(e),n.return=t,t.child=n,et=t,Re=null)):e=null,e===null)throw Ca(t);return t.lanes=536870912,null}return _o(t,a)}var l=e.memoizedState;if(l!==null){var r=l.dehydrated;if(cd(t),i)if(t.flags&256)t.flags&=-257,t=ey(e,t,n);else if(t.memoizedState!==null)t.child=e.child,t.flags|=128,t=null;else throw Error(R(558));else if(Ye||xl(e,t,n,!1),i=(n&e.childLanes)!==0,Ye||i){if(a=be,a!==null&&(r=Fy(a,n),r!==0&&r!==l.retryLane))throw l.retryLane=r,pi(e,r),xt(a,e,r),mh;nu(),t=ey(e,t,n)}else e=l.treeContext,Re=Ft(r.nextSibling),et=t,ae=!0,xa=null,Zt=!1,e!==null&&kb(t,e),t=_o(t,a),t.flags|=4096;return t}return e=Zn(e.child,{mode:a.mode,children:a.children}),e.ref=t.ref,t.child=e,e.return=t,e}function Co(e,t){var n=t.ref;if(n===null)e!==null&&e.ref!==null&&(t.flags|=4194816);else{if(typeof n!="function"&&typeof n!="object")throw Error(R(284));(e===null||e.ref!==n)&&(t.flags|=4194816)}}function gd(e,t,n,a,i){return si(t),n=ah(e,t,n,a,void 0,i),a=ih(),e!==null&&!Ye?(lh(e,t,i),Wn(e,t,i)):(ae&&a&&Fd(t),t.flags|=1,Pe(e,t,n,i),t.child)}function ty(e,t,n,a,i,l){return si(t),t.updateQueue=null,n=Lb(t,a,n,i),Mb(e),a=ih(),e!==null&&!Ye?(lh(e,t,l),Wn(e,t,l)):(ae&&a&&Fd(t),t.flags|=1,Pe(e,t,n,l),t.child)}function ny(e,t,n,a,i){if(si(t),t.stateNode===null){var l=Pi,r=n.contextType;typeof r=="object"&&r!==null&&(l=tt(r)),l=new n(a,l),t.memoizedState=l.state!==null&&l.state!==void 0?l.state:null,l.updater=pd,t.stateNode=l,l._reactInternals=t,l=t.stateNode,l.props=a,l.state=t.memoizedState,l.refs={},eh(t),r=n.contextType,l.context=typeof r=="object"&&r!==null?tt(r):Pi,l.state=t.memoizedState,r=n.getDerivedStateFromProps,typeof r=="function"&&(xf(t,n,r,a),l.state=t.memoizedState),typeof n.getDerivedStateFromProps=="function"||typeof l.getSnapshotBeforeUpdate=="function"||typeof l.UNSAFE_componentWillMount!="function"&&typeof l.componentWillMount!="function"||(r=l.state,typeof l.componentWillMount=="function"&&l.componentWillMount(),typeof l.UNSAFE_componentWillMount=="function"&&l.UNSAFE_componentWillMount(),r!==l.state&&pd.enqueueReplaceState(l,l.state,null),Ar(t,a,l,i),Er(),l.state=t.memoizedState),typeof l.componentDidMount=="function"&&(t.flags|=4194308),a=!0}else if(e===null){l=t.stateNode;var s=t.memoizedProps,o=ci(n,s);l.props=o;var u=l.context,c=n.contextType;r=Pi,typeof c=="object"&&c!==null&&(r=tt(c));var f=n.getDerivedStateFromProps;c=typeof f=="function"||typeof l.getSnapshotBeforeUpdate=="function",s=t.pendingProps!==s,c||typeof l.UNSAFE_componentWillReceiveProps!="function"&&typeof l.componentWillReceiveProps!="function"||(s||u!==r)&&Fg(t,l,a,r),fa=!1;var d=t.memoizedState;l.state=d,Ar(t,a,l,i),Er(),u=t.memoizedState,s||d!==u||fa?(typeof f=="function"&&(xf(t,n,f,a),u=t.memoizedState),(o=fa||Kg(t,n,o,a,d,u,r))?(c||typeof l.UNSAFE_componentWillMount!="function"&&typeof l.componentWillMount!="function"||(typeof l.componentWillMount=="function"&&l.componentWillMount(),typeof l.UNSAFE_componentWillMount=="function"&&l.UNSAFE_componentWillMount()),typeof l.componentDidMount=="function"&&(t.flags|=4194308)):(typeof l.componentDidMount=="function"&&(t.flags|=4194308),t.memoizedProps=a,t.memoizedState=u),l.props=a,l.state=u,l.context=r,a=o):(typeof l.componentDidMount=="function"&&(t.flags|=4194308),a=!1)}else{l=t.stateNode,sd(e,t),r=t.memoizedProps,c=ci(n,r),l.props=c,f=t.pendingProps,d=l.context,u=n.contextType,o=Pi,typeof u=="object"&&u!==null&&(o=tt(u)),s=n.getDerivedStateFromProps,(u=typeof s=="function"||typeof l.getSnapshotBeforeUpdate=="function")||typeof l.UNSAFE_componentWillReceiveProps!="function"&&typeof l.componentWillReceiveProps!="function"||(r!==f||d!==o)&&Fg(t,l,a,o),fa=!1,d=t.memoizedState,l.state=d,Ar(t,a,l,i),Er();var p=t.memoizedState;r!==f||d!==p||fa||e!==null&&e.dependencies!==null&&$o(e.dependencies)?(typeof s=="function"&&(xf(t,n,s,a),p=t.memoizedState),(c=fa||Kg(t,n,c,a,d,p,o)||e!==null&&e.dependencies!==null&&$o(e.dependencies))?(u||typeof l.UNSAFE_componentWillUpdate!="function"&&typeof l.componentWillUpdate!="function"||(typeof l.componentWillUpdate=="function"&&l.componentWillUpdate(a,p,o),typeof l.UNSAFE_componentWillUpdate=="function"&&l.UNSAFE_componentWillUpdate(a,p,o)),typeof l.componentDidUpdate=="function"&&(t.flags|=4),typeof l.getSnapshotBeforeUpdate=="function"&&(t.flags|=1024)):(typeof l.componentDidUpdate!="function"||r===e.memoizedProps&&d===e.memoizedState||(t.flags|=4),typeof l.getSnapshotBeforeUpdate!="function"||r===e.memoizedProps&&d===e.memoizedState||(t.flags|=1024),t.memoizedProps=a,t.memoizedState=p),l.props=a,l.state=p,l.context=o,a=c):(typeof l.componentDidUpdate!="function"||r===e.memoizedProps&&d===e.memoizedState||(t.flags|=4),typeof l.getSnapshotBeforeUpdate!="function"||r===e.memoizedProps&&d===e.memoizedState||(t.flags|=1024),a=!1)}return l=a,Co(e,t),a=(t.flags&128)!==0,l||a?(l=t.stateNode,n=a&&typeof n.getDerivedStateFromError!="function"?null:l.render(),t.flags|=1,e!==null&&a?(t.child=oi(t,e.child,null,i),t.child=oi(t,null,n,i)):Pe(e,t,n,i),t.memoizedState=l.state,e=t.child):e=Wn(e,t,i),e}function ay(e,t,n,a){return ri(),t.flags|=256,Pe(e,t,n,a),t.child}var Ef={dehydrated:null,treeContext:null,retryLane:0,hydrationErrors:null};function Af(e){return{baseLanes:e,cachePool:Ob()}}function kf(e,t,n){return e=e!==null?e.childLanes&~n:0,t&&(e|=Ct),e}function v0(e,t,n){var a=t.pendingProps,i=!1,l=(t.flags&128)!==0,r;if((r=l)||(r=e!==null&&e.memoizedState===null?!1:(Me.current&2)!==0),r&&(i=!0,t.flags&=-129),r=(t.flags&32)!==0,t.flags&=-33,e===null){if(ae){if(i?ha(t):pa(t),(e=Re)?(e=cv(e,Zt),e=e!==null&&e.data!=="&"?e:null,e!==null&&(t.memoizedState={dehydrated:e,treeContext:_a!==null?{id:Sn,overflow:Tn}:null,retryLane:536870912,hydrationErrors:null},n=Eb(e),n.return=t,t.child=n,et=t,Re=null)):e=null,e===null)throw Ca(t);return _d(e)?t.lanes=32:t.lanes=536870912,null}var s=a.children;return a=a.fallback,i?(pa(t),i=t.mode,s=Po({mode:"hidden",children:s},i),a=ni(a,i,n,null),s.return=t,a.return=t,s.sibling=a,t.child=s,a=t.child,a.memoizedState=Af(n),a.childLanes=kf(e,r,n),t.memoizedState=Ef,gr(null,a)):(ha(t),yd(t,s))}var o=e.memoizedState;if(o!==null&&(s=o.dehydrated,s!==null)){if(l)t.flags&256?(ha(t),t.flags&=-257,t=Rf(e,t,n)):t.memoizedState!==null?(pa(t),t.child=e.child,t.flags|=128,t=null):(pa(t),s=a.fallback,i=t.mode,a=Po({mode:"visible",children:a.children},i),s=ni(s,i,n,null),s.flags|=2,a.return=t,s.return=t,a.sibling=s,t.child=a,oi(t,e.child,null,n),a=t.child,a.memoizedState=Af(n),a.childLanes=kf(e,r,n),t.memoizedState=Ef,t=gr(null,a));else if(ha(t),_d(s)){if(r=s.nextSibling&&s.nextSibling.dataset,r)var u=r.dgst;r=u,a=Error(R(419)),a.stack="",a.digest=r,Ur({value:a,source:null,stack:null}),t=Rf(e,t,n)}else if(Ye||xl(e,t,n,!1),r=(n&e.childLanes)!==0,Ye||r){if(r=be,r!==null&&(a=Fy(r,n),a!==0&&a!==o.retryLane))throw o.retryLane=a,pi(e,a),xt(r,e,a),mh;Nd(s)||nu(),t=Rf(e,t,n)}else Nd(s)?(t.flags|=192,t.child=e.child,t=null):(e=o.treeContext,Re=Ft(s.nextSibling),et=t,ae=!0,xa=null,Zt=!1,e!==null&&kb(t,e),t=yd(t,a.children),t.flags|=4096);return t}return i?(pa(t),s=a.fallback,i=t.mode,o=e.child,u=o.sibling,a=Zn(o,{mode:"hidden",children:a.children}),a.subtreeFlags=o.subtreeFlags&65011712,u!==null?s=Zn(u,s):(s=ni(s,i,n,null),s.flags|=2),s.return=t,a.return=t,a.sibling=s,t.child=a,gr(null,a),a=t.child,s=e.child.memoizedState,s===null?s=Af(n):(i=s.cachePool,i!==null?(o=qe._currentValue,i=i.parent!==o?{parent:o,pool:o}:i):i=Ob(),s={baseLanes:s.baseLanes|n,cachePool:i}),a.memoizedState=s,a.childLanes=kf(e,r,n),t.memoizedState=Ef,gr(e.child,a)):(ha(t),n=e.child,e=n.sibling,n=Zn(n,{mode:"visible",children:a.children}),n.return=t,n.sibling=null,e!==null&&(r=t.deletions,r===null?(t.deletions=[e],t.flags|=16):r.push(e)),t.child=n,t.memoizedState=null,n)}function yd(e,t){return t=Po({mode:"visible",children:t},e.mode),t.return=e,e.child=t}function Po(e,t){return e=_t(22,e,null,t),e.lanes=0,e}function Rf(e,t,n){return oi(t,e.child,null,n),e=yd(t,t.pendingProps.children),e.flags|=2,t.memoizedState=null,e}function iy(e,t,n){e.lanes|=t;var a=e.alternate;a!==null&&(a.lanes|=t),id(e.return,t,n)}function Of(e,t,n,a,i,l){var r=e.memoizedState;r===null?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:a,tail:n,tailMode:i,treeForkCount:l}:(r.isBackwards=t,r.rendering=null,r.renderingStartTime=0,r.last=a,r.tail=n,r.tailMode=i,r.treeForkCount=l)}function S0(e,t,n){var a=t.pendingProps,i=a.revealOrder,l=a.tail;a=a.children;var r=Me.current,s=(r&2)!==0;if(s?(r=r&1|2,t.flags|=128):r&=1,Te(Me,r),Pe(e,t,a,n),a=ae?Lr:0,!s&&e!==null&&(e.flags&128)!==0)e:for(e=t.child;e!==null;){if(e.tag===13)e.memoizedState!==null&&iy(e,n,t);else if(e.tag===19)iy(e,n,t);else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;e.sibling===null;){if(e.return===null||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}switch(i){case"forwards":for(n=t.child,i=null;n!==null;)e=n.alternate,e!==null&&Ko(e)===null&&(i=n),n=n.sibling;n=i,n===null?(i=t.child,t.child=null):(i=n.sibling,n.sibling=null),Of(t,!1,i,n,l,a);break;case"backwards":case"unstable_legacy-backwards":for(n=null,i=t.child,t.child=null;i!==null;){if(e=i.alternate,e!==null&&Ko(e)===null){t.child=i;break}e=i.sibling,i.sibling=n,n=i,i=e}Of(t,!0,n,null,l,a);break;case"together":Of(t,!1,null,null,void 0,a);break;default:t.memoizedState=null}return t.child}function Wn(e,t,n){if(e!==null&&(t.dependencies=e.dependencies),za|=t.lanes,(n&t.childLanes)===0)if(e!==null){if(xl(e,t,n,!1),(n&t.childLanes)===0)return null}else return null;if(e!==null&&t.child!==e.child)throw Error(R(153));if(t.child!==null){for(e=t.child,n=Zn(e,e.pendingProps),t.child=n,n.return=t;e.sibling!==null;)e=e.sibling,n=n.sibling=Zn(e,e.pendingProps),n.return=t;n.sibling=null}return t.child}function gh(e,t){return(e.lanes&t)!==0?!0:(e=e.dependencies,!!(e!==null&&$o(e)))}function ME(e,t,n){switch(t.tag){case 3:Bo(t,t.stateNode.containerInfo),da(t,qe,e.memoizedState.cache),ri();break;case 27:case 5:$f(t);break;case 4:Bo(t,t.stateNode.containerInfo);break;case 10:da(t,t.type,t.memoizedProps.value);break;case 31:if(t.memoizedState!==null)return t.flags|=128,cd(t),null;break;case 13:var a=t.memoizedState;if(a!==null)return a.dehydrated!==null?(ha(t),t.flags|=128,null):(n&t.child.childLanes)!==0?v0(e,t,n):(ha(t),e=Wn(e,t,n),e!==null?e.sibling:null);ha(t);break;case 19:var i=(e.flags&128)!==0;if(a=(n&t.childLanes)!==0,a||(xl(e,t,n,!1),a=(n&t.childLanes)!==0),i){if(a)return S0(e,t,n);t.flags|=128}if(i=t.memoizedState,i!==null&&(i.rendering=null,i.tail=null,i.lastEffect=null),Te(Me,Me.current),a)break;return null;case 22:return t.lanes=0,b0(e,t,n,t.pendingProps);case 24:da(t,qe,e.memoizedState.cache)}return Wn(e,t,n)}function T0(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps)Ye=!0;else{if(!gh(e,n)&&(t.flags&128)===0)return Ye=!1,ME(e,t,n);Ye=(e.flags&131072)!==0}else Ye=!1,ae&&(t.flags&1048576)!==0&&Ab(t,Lr,t.index);switch(t.lanes=0,t.tag){case 16:e:{var a=t.pendingProps;if(e=Wa(t.elementType),t.type=e,typeof e=="function")Kd(e)?(a=ci(e,a),t.tag=1,t=ny(null,t,e,a,n)):(t.tag=0,t=gd(null,t,e,a,n));else{if(e!=null){var i=e.$$typeof;if(i===Md){t.tag=11,t=Ig(null,t,e,a,n);break e}else if(i===Ld){t.tag=14,t=Pg(null,t,e,a,n);break e}}throw t=Vf(e)||e,Error(R(306,t,""))}}return t;case 0:return gd(e,t,t.type,t.pendingProps,n);case 1:return a=t.type,i=ci(a,t.pendingProps),ny(e,t,a,i,n);case 3:e:{if(Bo(t,t.stateNode.containerInfo),e===null)throw Error(R(387));a=t.pendingProps;var l=t.memoizedState;i=l.element,sd(e,t),Ar(t,a,null,n);var r=t.memoizedState;if(a=r.cache,da(t,qe,a),a!==l.cache&&ld(t,[qe],n,!0),Er(),a=r.element,l.isDehydrated)if(l={element:a,isDehydrated:!1,cache:r.cache},t.updateQueue.baseState=l,t.memoizedState=l,t.flags&256){t=ay(e,t,a,n);break e}else if(a!==i){i=Qt(Error(R(424)),t),Ur(i),t=ay(e,t,a,n);break e}else for(e=t.stateNode.containerInfo,e.nodeType===9?e=e.body:e=e.nodeName==="HTML"?e.ownerDocument.body:e,Re=Ft(e.firstChild),et=t,ae=!0,xa=null,Zt=!0,n=_b(t,null,a,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(ri(),a===i){t=Wn(e,t,n);break e}Pe(e,t,a,n)}t=t.child}return t;case 26:return Co(e,t),e===null?(n=Ry(t.type,null,t.pendingProps,null))?t.memoizedState=n:ae||(n=t.type,e=t.pendingProps,a=ru(Ta.current).createElement(n),a[We]=t,a[Et]=e,nt(a,n,e),Fe(a),t.stateNode=a):t.memoizedState=Ry(t.type,e.memoizedProps,t.pendingProps,e.memoizedState),null;case 27:return $f(t),e===null&&ae&&(a=t.stateNode=fv(t.type,t.pendingProps,Ta.current),et=t,Zt=!0,i=Re,La(t.type)?(Cd=i,Re=Ft(a.firstChild)):Re=i),Pe(e,t,t.pendingProps.children,n),Co(e,t),e===null&&(t.flags|=4194304),t.child;case 5:return e===null&&ae&&((i=a=Re)&&(a=oA(a,t.type,t.pendingProps,Zt),a!==null?(t.stateNode=a,et=t,Re=Ft(a.firstChild),Zt=!1,i=!0):i=!1),i||Ca(t)),$f(t),i=t.type,l=t.pendingProps,r=e!==null?e.memoizedProps:null,a=l.children,Od(i,l)?a=null:r!==null&&Od(i,r)&&(t.flags|=32),t.memoizedState!==null&&(i=ah(e,t,kE,null,null,n),Gr._currentValue=i),Co(e,t),Pe(e,t,a,n),t.child;case 6:return e===null&&ae&&((e=n=Re)&&(n=uA(n,t.pendingProps,Zt),n!==null?(t.stateNode=n,et=t,Re=null,e=!0):e=!1),e||Ca(t)),null;case 13:return v0(e,t,n);case 4:return Bo(t,t.stateNode.containerInfo),a=t.pendingProps,e===null?t.child=oi(t,null,a,n):Pe(e,t,a,n),t.child;case 11:return Ig(e,t,t.type,t.pendingProps,n);case 7:return Pe(e,t,t.pendingProps,n),t.child;case 8:return Pe(e,t,t.pendingProps.children,n),t.child;case 12:return Pe(e,t,t.pendingProps.children,n),t.child;case 10:return a=t.pendingProps,da(t,t.type,a.value),Pe(e,t,a.children,n),t.child;case 9:return i=t.type._context,a=t.pendingProps.children,si(t),i=tt(i),a=a(i),t.flags|=1,Pe(e,t,a,n),t.child;case 14:return Pg(e,t,t.type,t.pendingProps,n);case 15:return y0(e,t,t.type,t.pendingProps,n);case 19:return S0(e,t,n);case 31:return zE(e,t,n);case 22:return b0(e,t,n,t.pendingProps);case 24:return si(t),a=tt(qe),e===null?(i=Pd(),i===null&&(i=be,l=Id(),i.pooledCache=l,l.refCount++,l!==null&&(i.pooledCacheLanes|=n),i=l),t.memoizedState={parent:a,cache:i},eh(t),da(t,qe,i)):((e.lanes&n)!==0&&(sd(e,t),Ar(t,null,null,n),Er()),i=e.memoizedState,l=t.memoizedState,i.parent!==a?(i={parent:a,cache:a},t.memoizedState=i,t.lanes===0&&(t.memoizedState=t.updateQueue.baseState=i),da(t,qe,a)):(a=l.cache,da(t,qe,a),a!==i.cache&&ld(t,[qe],n,!0))),Pe(e,t,t.pendingProps.children,n),t.child;case 29:throw t.pendingProps}throw Error(R(156,t.tag))}function Bn(e){e.flags|=4}function wf(e,t,n,a,i){if((t=(e.mode&32)!==0)&&(t=!1),t){if(e.flags|=16777216,(i&335544128)===i)if(e.stateNode.complete)e.flags|=8192;else if($0())e.flags|=8192;else throw ii=Qo,Wd}else e.flags&=-16777217}function ly(e,t){if(t.type!=="stylesheet"||(t.state.loading&4)!==0)e.flags&=-16777217;else if(e.flags|=16777216,!pv(t))if($0())e.flags|=8192;else throw ii=Qo,Wd}function mo(e,t){t!==null&&(e.flags|=4),e.flags&16384&&(t=e.tag!==22?Qy():536870912,e.lanes|=t,ml|=t)}function ur(e,t){if(!ae)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;t!==null;)t.alternate!==null&&(n=t),t=t.sibling;n===null?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var a=null;n!==null;)n.alternate!==null&&(a=n),n=n.sibling;a===null?t||e.tail===null?e.tail=null:e.tail.sibling=null:a.sibling=null}}function ke(e){var t=e.alternate!==null&&e.alternate.child===e.child,n=0,a=0;if(t)for(var i=e.child;i!==null;)n|=i.lanes|i.childLanes,a|=i.subtreeFlags&65011712,a|=i.flags&65011712,i.return=e,i=i.sibling;else for(i=e.child;i!==null;)n|=i.lanes|i.childLanes,a|=i.subtreeFlags,a|=i.flags,i.return=e,i=i.sibling;return e.subtreeFlags|=a,e.childLanes=n,t}function LE(e,t,n){var a=t.pendingProps;switch(Jd(t),t.tag){case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return ke(t),null;case 1:return ke(t),null;case 3:return n=t.stateNode,a=null,e!==null&&(a=e.memoizedState.cache),t.memoizedState.cache!==a&&(t.flags|=2048),Kn(qe),ul(),n.pendingContext&&(n.context=n.pendingContext,n.pendingContext=null),(e===null||e.child===null)&&(qi(t)?Bn(t):e===null||e.memoizedState.isDehydrated&&(t.flags&256)===0||(t.flags|=1024,vf())),ke(t),null;case 26:var i=t.type,l=t.memoizedState;return e===null?(Bn(t),l!==null?(ke(t),ly(t,l)):(ke(t),wf(t,i,null,a,n))):l?l!==e.memoizedState?(Bn(t),ke(t),ly(t,l)):(ke(t),t.flags&=-16777217):(e=e.memoizedProps,e!==a&&Bn(t),ke(t),wf(t,i,e,a,n)),null;case 27:if(jo(t),n=Ta.current,i=t.type,e!==null&&t.stateNode!=null)e.memoizedProps!==a&&Bn(t);else{if(!a){if(t.stateNode===null)throw Error(R(166));return ke(t),null}e=En.current,qi(t)?Mg(t,e):(e=fv(i,a,n),t.stateNode=e,Bn(t))}return ke(t),null;case 5:if(jo(t),i=t.type,e!==null&&t.stateNode!=null)e.memoizedProps!==a&&Bn(t);else{if(!a){if(t.stateNode===null)throw Error(R(166));return ke(t),null}if(l=En.current,qi(t))Mg(t,l);else{var r=ru(Ta.current);switch(l){case 1:l=r.createElementNS("http://www.w3.org/2000/svg",i);break;case 2:l=r.createElementNS("http://www.w3.org/1998/Math/MathML",i);break;default:switch(i){case"svg":l=r.createElementNS("http://www.w3.org/2000/svg",i);break;case"math":l=r.createElementNS("http://www.w3.org/1998/Math/MathML",i);break;case"script":l=r.createElement("div"),l.innerHTML="<script><\/script>",l=l.removeChild(l.firstChild);break;case"select":l=typeof a.is=="string"?r.createElement("select",{is:a.is}):r.createElement("select"),a.multiple?l.multiple=!0:a.size&&(l.size=a.size);break;default:l=typeof a.is=="string"?r.createElement(i,{is:a.is}):r.createElement(i)}}l[We]=t,l[Et]=a;e:for(r=t.child;r!==null;){if(r.tag===5||r.tag===6)l.appendChild(r.stateNode);else if(r.tag!==4&&r.tag!==27&&r.child!==null){r.child.return=r,r=r.child;continue}if(r===t)break e;for(;r.sibling===null;){if(r.return===null||r.return===t)break e;r=r.return}r.sibling.return=r.return,r=r.sibling}t.stateNode=l;e:switch(nt(l,i,a),i){case"button":case"input":case"select":case"textarea":a=!!a.autoFocus;break e;case"img":a=!0;break e;default:a=!1}a&&Bn(t)}}return ke(t),wf(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,n),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==a&&Bn(t);else{if(typeof a!="string"&&t.stateNode===null)throw Error(R(166));if(e=Ta.current,qi(t)){if(e=t.stateNode,n=t.memoizedProps,a=null,i=et,i!==null)switch(i.tag){case 27:case 5:a=i.memoizedProps}e[We]=t,e=!!(e.nodeValue===n||a!==null&&a.suppressHydrationWarning===!0||sv(e.nodeValue,n)),e||Ca(t,!0)}else e=ru(e).createTextNode(a),e[We]=t,t.stateNode=e}return ke(t),null;case 31:if(n=t.memoizedState,e===null||e.memoizedState!==null){if(a=qi(t),n!==null){if(e===null){if(!a)throw Error(R(318));if(e=t.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(R(557));e[We]=t}else ri(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;ke(t),e=!1}else n=vf(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),e=!0;if(!e)return t.flags&256?(Nt(t),t):(Nt(t),null);if((t.flags&128)!==0)throw Error(R(558))}return ke(t),null;case 13:if(a=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(i=qi(t),a!==null&&a.dehydrated!==null){if(e===null){if(!i)throw Error(R(318));if(i=t.memoizedState,i=i!==null?i.dehydrated:null,!i)throw Error(R(317));i[We]=t}else ri(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;ke(t),i=!1}else i=vf(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=i),i=!0;if(!i)return t.flags&256?(Nt(t),t):(Nt(t),null)}return Nt(t),(t.flags&128)!==0?(t.lanes=n,t):(n=a!==null,e=e!==null&&e.memoizedState!==null,n&&(a=t.child,i=null,a.alternate!==null&&a.alternate.memoizedState!==null&&a.alternate.memoizedState.cachePool!==null&&(i=a.alternate.memoizedState.cachePool.pool),l=null,a.memoizedState!==null&&a.memoizedState.cachePool!==null&&(l=a.memoizedState.cachePool.pool),l!==i&&(a.flags|=2048)),n!==e&&n&&(t.child.flags|=8192),mo(t,t.updateQueue),ke(t),null);case 4:return ul(),e===null&&Eh(t.stateNode.containerInfo),ke(t),null;case 10:return Kn(t.type),ke(t),null;case 19:if(Je(Me),a=t.memoizedState,a===null)return ke(t),null;if(i=(t.flags&128)!==0,l=a.rendering,l===null)if(i)ur(a,!1);else{if(Ce!==0||e!==null&&(e.flags&128)!==0)for(e=t.child;e!==null;){if(l=Ko(e),l!==null){for(t.flags|=128,ur(a,!1),e=l.updateQueue,t.updateQueue=e,mo(t,e),t.subtreeFlags=0,e=n,n=t.child;n!==null;)xb(n,e),n=n.sibling;return Te(Me,Me.current&1|2),ae&&Gn(t,a.treeForkCount),t.child}e=e.sibling}a.tail!==null&&Dt()>eu&&(t.flags|=128,i=!0,ur(a,!1),t.lanes=4194304)}else{if(!i)if(e=Ko(l),e!==null){if(t.flags|=128,i=!0,e=e.updateQueue,t.updateQueue=e,mo(t,e),ur(a,!0),a.tail===null&&a.tailMode==="hidden"&&!l.alternate&&!ae)return ke(t),null}else 2*Dt()-a.renderingStartTime>eu&&n!==536870912&&(t.flags|=128,i=!0,ur(a,!1),t.lanes=4194304);a.isBackwards?(l.sibling=t.child,t.child=l):(e=a.last,e!==null?e.sibling=l:t.child=l,a.last=l)}return a.tail!==null?(e=a.tail,a.rendering=e,a.tail=e.sibling,a.renderingStartTime=Dt(),e.sibling=null,n=Me.current,Te(Me,i?n&1|2:n&1),ae&&Gn(t,a.treeForkCount),e):(ke(t),null);case 22:case 23:return Nt(t),th(),a=t.memoizedState!==null,e!==null?e.memoizedState!==null!==a&&(t.flags|=8192):a&&(t.flags|=8192),a?(n&536870912)!==0&&(t.flags&128)===0&&(ke(t),t.subtreeFlags&6&&(t.flags|=8192)):ke(t),n=t.updateQueue,n!==null&&mo(t,n.retryQueue),n=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),a=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(a=t.memoizedState.cachePool.pool),a!==n&&(t.flags|=2048),e!==null&&Je(ai),null;case 24:return n=null,e!==null&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),Kn(qe),ke(t),null;case 25:return null;case 30:return null}throw Error(R(156,t.tag))}function UE(e,t){switch(Jd(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Kn(qe),ul(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return jo(t),null;case 31:if(t.memoizedState!==null){if(Nt(t),t.alternate===null)throw Error(R(340));ri()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(Nt(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(R(340));ri()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return Je(Me),null;case 4:return ul(),null;case 10:return Kn(t.type),null;case 22:case 23:return Nt(t),th(),e!==null&&Je(ai),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return Kn(qe),null;case 25:return null;default:return null}}function x0(e,t){switch(Jd(t),t.tag){case 3:Kn(qe),ul();break;case 26:case 27:case 5:jo(t);break;case 4:ul();break;case 31:t.memoizedState!==null&&Nt(t);break;case 13:Nt(t);break;case 19:Je(Me);break;case 10:Kn(t.type);break;case 22:case 23:Nt(t),th(),e!==null&&Je(ai);break;case 24:Kn(qe)}}function Wr(e,t){try{var n=t.updateQueue,a=n!==null?n.lastEffect:null;if(a!==null){var i=a.next;n=i;do{if((n.tag&e)===e){a=void 0;var l=n.create,r=n.inst;a=l(),r.destroy=a}n=n.next}while(n!==i)}}catch(s){he(t,t.return,s)}}function Da(e,t,n){try{var a=t.updateQueue,i=a!==null?a.lastEffect:null;if(i!==null){var l=i.next;a=l;do{if((a.tag&e)===e){var r=a.inst,s=r.destroy;if(s!==void 0){r.destroy=void 0,i=t;var o=n,u=s;try{u()}catch(c){he(i,o,c)}}}a=a.next}while(a!==l)}}catch(c){he(t,t.return,c)}}function E0(e){var t=e.updateQueue;if(t!==null){var n=e.stateNode;try{Db(t,n)}catch(a){he(e,e.return,a)}}}function A0(e,t,n){n.props=ci(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(a){he(e,t,a)}}function Rr(e,t){try{var n=e.ref;if(n!==null){switch(e.tag){case 26:case 27:case 5:var a=e.stateNode;break;case 30:a=e.stateNode;break;default:a=e.stateNode}typeof n=="function"?e.refCleanup=n(a):n.current=a}}catch(i){he(e,t,i)}}function xn(e,t){var n=e.ref,a=e.refCleanup;if(n!==null)if(typeof a=="function")try{a()}catch(i){he(e,t,i)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof n=="function")try{n(null)}catch(i){he(e,t,i)}else n.current=null}function k0(e){var t=e.type,n=e.memoizedProps,a=e.stateNode;try{e:switch(t){case"button":case"input":case"select":case"textarea":n.autoFocus&&a.focus();break e;case"img":n.src?a.src=n.src:n.srcSet&&(a.srcset=n.srcSet)}}catch(i){he(e,e.return,i)}}function Nf(e,t,n){try{var a=e.stateNode;nA(a,e.type,n,t),a[Et]=t}catch(i){he(e,e.return,i)}}function R0(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&La(e.type)||e.tag===4}function _f(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||R0(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.tag===27&&La(e.type)||e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function bd(e,t,n){var a=e.tag;if(a===5||a===6)e=e.stateNode,t?(n.nodeType===9?n.body:n.nodeName==="HTML"?n.ownerDocument.body:n).insertBefore(e,t):(t=n.nodeType===9?n.body:n.nodeName==="HTML"?n.ownerDocument.body:n,t.appendChild(e),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=$n));else if(a!==4&&(a===27&&La(e.type)&&(n=e.stateNode,t=null),e=e.child,e!==null))for(bd(e,t,n),e=e.sibling;e!==null;)bd(e,t,n),e=e.sibling}function Wo(e,t,n){var a=e.tag;if(a===5||a===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(a!==4&&(a===27&&La(e.type)&&(n=e.stateNode),e=e.child,e!==null))for(Wo(e,t,n),e=e.sibling;e!==null;)Wo(e,t,n),e=e.sibling}function O0(e){var t=e.stateNode,n=e.memoizedProps;try{for(var a=e.type,i=t.attributes;i.length;)t.removeAttributeNode(i[0]);nt(t,a,n),t[We]=e,t[Et]=n}catch(l){he(e,e.return,l)}}var Vn=!1,je=!1,Cf=!1,ry=typeof WeakSet=="function"?WeakSet:Set,Ke=null;function HE(e,t){if(e=e.containerInfo,kd=cu,e=pb(e),$d(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var a=n.getSelection&&n.getSelection();if(a&&a.rangeCount!==0){n=a.anchorNode;var i=a.anchorOffset,l=a.focusNode;a=a.focusOffset;try{n.nodeType,l.nodeType}catch(S){n=null;break e}var r=0,s=-1,o=-1,u=0,c=0,f=e,d=null;t:for(;;){for(var p;f!==n||i!==0&&f.nodeType!==3||(s=r+i),f!==l||a!==0&&f.nodeType!==3||(o=r+a),f.nodeType===3&&(r+=f.nodeValue.length),(p=f.firstChild)!==null;)d=f,f=p;for(;;){if(f===e)break t;if(d===n&&++u===i&&(s=r),d===l&&++c===a&&(o=r),(p=f.nextSibling)!==null)break;f=d,d=f.parentNode}f=p}n=s===-1||o===-1?null:{start:s,end:o}}else n=null}n=n||{start:0,end:0}}else n=null;for(Rd={focusedElem:e,selectionRange:n},cu=!1,Ke=t;Ke!==null;)if(t=Ke,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,Ke=e;else for(;Ke!==null;){switch(t=Ke,l=t.alternate,e=t.flags,t.tag){case 0:if((e&4)!==0&&(e=t.updateQueue,e=e!==null?e.events:null,e!==null))for(n=0;n<e.length;n++)i=e[n],i.ref.impl=i.nextImpl;break;case 11:case 15:break;case 1:if((e&1024)!==0&&l!==null){e=void 0,n=t,i=l.memoizedProps,l=l.memoizedState,a=n.stateNode;try{var v=ci(n.type,i);e=a.getSnapshotBeforeUpdate(v,l),a.__reactInternalSnapshotBeforeUpdate=e}catch(S){he(n,n.return,S)}}break;case 3:if((e&1024)!==0){if(e=t.stateNode.containerInfo,n=e.nodeType,n===9)wd(e);else if(n===1)switch(e.nodeName){case"HEAD":case"HTML":case"BODY":wd(e);break;default:e.textContent=""}}break;case 5:case 26:case 27:case 6:case 4:case 17:break;default:if((e&1024)!==0)throw Error(R(163))}if(e=t.sibling,e!==null){e.return=t.return,Ke=e;break}Ke=t.return}}function w0(e,t,n){var a=n.flags;switch(n.tag){case 0:case 11:case 15:qn(e,n),a&4&&Wr(5,n);break;case 1:if(qn(e,n),a&4)if(e=n.stateNode,t===null)try{e.componentDidMount()}catch(r){he(n,n.return,r)}else{var i=ci(n.type,t.memoizedProps);t=t.memoizedState;try{e.componentDidUpdate(i,t,e.__reactInternalSnapshotBeforeUpdate)}catch(r){he(n,n.return,r)}}a&64&&E0(n),a&512&&Rr(n,n.return);break;case 3:if(qn(e,n),a&64&&(e=n.updateQueue,e!==null)){if(t=null,n.child!==null)switch(n.child.tag){case 27:case 5:t=n.child.stateNode;break;case 1:t=n.child.stateNode}try{Db(e,t)}catch(r){he(n,n.return,r)}}break;case 27:t===null&&a&4&&O0(n);case 26:case 5:qn(e,n),t===null&&a&4&&k0(n),a&512&&Rr(n,n.return);break;case 12:qn(e,n);break;case 31:qn(e,n),a&4&&C0(e,n);break;case 13:qn(e,n),a&4&&D0(e,n),a&64&&(e=n.memoizedState,e!==null&&(e=e.dehydrated,e!==null&&(n=QE.bind(null,n),cA(e,n))));break;case 22:if(a=n.memoizedState!==null||Vn,!a){t=t!==null&&t.memoizedState!==null||je,i=Vn;var l=je;Vn=a,(je=t)&&!l?Yn(e,n,(n.subtreeFlags&8772)!==0):qn(e,n),Vn=i,je=l}break;case 30:break;default:qn(e,n)}}function N0(e){var t=e.alternate;t!==null&&(e.alternate=null,N0(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&jd(t)),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}var Ne=null,St=!1;function jn(e,t,n){for(n=n.child;n!==null;)_0(e,t,n),n=n.sibling}function _0(e,t,n){if(zt&&typeof zt.onCommitFiberUnmount=="function")try{zt.onCommitFiberUnmount(Qr,n)}catch(l){}switch(n.tag){case 26:je||xn(n,t),jn(e,t,n),n.memoizedState?n.memoizedState.count--:n.stateNode&&(n=n.stateNode,n.parentNode.removeChild(n));break;case 27:je||xn(n,t);var a=Ne,i=St;La(n.type)&&(Ne=n.stateNode,St=!1),jn(e,t,n),_r(n.stateNode),Ne=a,St=i;break;case 5:je||xn(n,t);case 6:if(a=Ne,i=St,Ne=null,jn(e,t,n),Ne=a,St=i,Ne!==null)if(St)try{(Ne.nodeType===9?Ne.body:Ne.nodeName==="HTML"?Ne.ownerDocument.body:Ne).removeChild(n.stateNode)}catch(l){he(n,t,l)}else try{Ne.removeChild(n.stateNode)}catch(l){he(n,t,l)}break;case 18:Ne!==null&&(St?(e=Ne,Ty(e.nodeType===9?e.body:e.nodeName==="HTML"?e.ownerDocument.body:e,n.stateNode),vl(e)):Ty(Ne,n.stateNode));break;case 4:a=Ne,i=St,Ne=n.stateNode.containerInfo,St=!0,jn(e,t,n),Ne=a,St=i;break;case 0:case 11:case 14:case 15:Da(2,n,t),je||Da(4,n,t),jn(e,t,n);break;case 1:je||(xn(n,t),a=n.stateNode,typeof a.componentWillUnmount=="function"&&A0(n,t,a)),jn(e,t,n);break;case 21:jn(e,t,n);break;case 22:je=(a=je)||n.memoizedState!==null,jn(e,t,n),je=a;break;default:jn(e,t,n)}}function C0(e,t){if(t.memoizedState===null&&(e=t.alternate,e!==null&&(e=e.memoizedState,e!==null))){e=e.dehydrated;try{vl(e)}catch(n){he(t,t.return,n)}}}function D0(e,t){if(t.memoizedState===null&&(e=t.alternate,e!==null&&(e=e.memoizedState,e!==null&&(e=e.dehydrated,e!==null))))try{vl(e)}catch(n){he(t,t.return,n)}}function BE(e){switch(e.tag){case 31:case 13:case 19:var t=e.stateNode;return t===null&&(t=e.stateNode=new ry),t;case 22:return e=e.stateNode,t=e._retryCache,t===null&&(t=e._retryCache=new ry),t;default:throw Error(R(435,e.tag))}}function go(e,t){var n=BE(e);t.forEach(function(a){if(!n.has(a)){n.add(a);var i=ZE.bind(null,e,a);a.then(i,i)}})}function bt(e,t){var n=t.deletions;if(n!==null)for(var a=0;a<n.length;a++){var i=n[a],l=e,r=t,s=r;e:for(;s!==null;){switch(s.tag){case 27:if(La(s.type)){Ne=s.stateNode,St=!1;break e}break;case 5:Ne=s.stateNode,St=!1;break e;case 3:case 4:Ne=s.stateNode.containerInfo,St=!0;break e}s=s.return}if(Ne===null)throw Error(R(160));_0(l,r,i),Ne=null,St=!1,l=i.alternate,l!==null&&(l.return=null),i.return=null}if(t.subtreeFlags&13886)for(t=t.child;t!==null;)z0(t,e),t=t.sibling}var on=null;function z0(e,t){var n=e.alternate,a=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:bt(t,e),vt(e),a&4&&(Da(3,e,e.return),Wr(3,e),Da(5,e,e.return));break;case 1:bt(t,e),vt(e),a&512&&(je||n===null||xn(n,n.return)),a&64&&Vn&&(e=e.updateQueue,e!==null&&(a=e.callbacks,a!==null&&(n=e.shared.hiddenCallbacks,e.shared.hiddenCallbacks=n===null?a:n.concat(a))));break;case 26:var i=on;if(bt(t,e),vt(e),a&512&&(je||n===null||xn(n,n.return)),a&4){var l=n!==null?n.memoizedState:null;if(a=e.memoizedState,n===null)if(a===null)if(e.stateNode===null){e:{a=e.type,n=e.memoizedProps,i=i.ownerDocument||i;t:switch(a){case"title":l=i.getElementsByTagName("title")[0],(!l||l[Fr]||l[We]||l.namespaceURI==="http://www.w3.org/2000/svg"||l.hasAttribute("itemprop"))&&(l=i.createElement(a),i.head.insertBefore(l,i.querySelector("head > title"))),nt(l,a,n),l[We]=e,Fe(l),a=l;break e;case"link":var r=wy("link","href",i).get(a+(n.href||""));if(r){for(var s=0;s<r.length;s++)if(l=r[s],l.getAttribute("href")===(n.href==null||n.href===""?null:n.href)&&l.getAttribute("rel")===(n.rel==null?null:n.rel)&&l.getAttribute("title")===(n.title==null?null:n.title)&&l.getAttribute("crossorigin")===(n.crossOrigin==null?null:n.crossOrigin)){r.splice(s,1);break t}}l=i.createElement(a),nt(l,a,n),i.head.appendChild(l);break;case"meta":if(r=wy("meta","content",i).get(a+(n.content||""))){for(s=0;s<r.length;s++)if(l=r[s],l.getAttribute("content")===(n.content==null?null:""+n.content)&&l.getAttribute("name")===(n.name==null?null:n.name)&&l.getAttribute("property")===(n.property==null?null:n.property)&&l.getAttribute("http-equiv")===(n.httpEquiv==null?null:n.httpEquiv)&&l.getAttribute("charset")===(n.charSet==null?null:n.charSet)){r.splice(s,1);break t}}l=i.createElement(a),nt(l,a,n),i.head.appendChild(l);break;default:throw Error(R(468,a))}l[We]=e,Fe(l),a=l}e.stateNode=a}else Ny(i,e.type,e.stateNode);else e.stateNode=Oy(i,a,e.memoizedProps);else l!==a?(l===null?n.stateNode!==null&&(n=n.stateNode,n.parentNode.removeChild(n)):l.count--,a===null?Ny(i,e.type,e.stateNode):Oy(i,a,e.memoizedProps)):a===null&&e.stateNode!==null&&Nf(e,e.memoizedProps,n.memoizedProps)}break;case 27:bt(t,e),vt(e),a&512&&(je||n===null||xn(n,n.return)),n!==null&&a&4&&Nf(e,e.memoizedProps,n.memoizedProps);break;case 5:if(bt(t,e),vt(e),a&512&&(je||n===null||xn(n,n.return)),e.flags&32){i=e.stateNode;try{fl(i,"")}catch(v){he(e,e.return,v)}}a&4&&e.stateNode!=null&&(i=e.memoizedProps,Nf(e,i,n!==null?n.memoizedProps:i)),a&1024&&(Cf=!0);break;case 6:if(bt(t,e),vt(e),a&4){if(e.stateNode===null)throw Error(R(162));a=e.memoizedProps,n=e.stateNode;try{n.nodeValue=a}catch(v){he(e,e.return,v)}}break;case 3:if(Mo=null,i=on,on=su(t.containerInfo),bt(t,e),on=i,vt(e),a&4&&n!==null&&n.memoizedState.isDehydrated)try{vl(t.containerInfo)}catch(v){he(e,e.return,v)}Cf&&(Cf=!1,M0(e));break;case 4:a=on,on=su(e.stateNode.containerInfo),bt(t,e),vt(e),on=a;break;case 12:bt(t,e),vt(e);break;case 31:bt(t,e),vt(e),a&4&&(a=e.updateQueue,a!==null&&(e.updateQueue=null,go(e,a)));break;case 13:bt(t,e),vt(e),e.child.flags&8192&&e.memoizedState!==null!=(n!==null&&n.memoizedState!==null)&&(Eu=Dt()),a&4&&(a=e.updateQueue,a!==null&&(e.updateQueue=null,go(e,a)));break;case 22:i=e.memoizedState!==null;var o=n!==null&&n.memoizedState!==null,u=Vn,c=je;if(Vn=u||i,je=c||o,bt(t,e),je=c,Vn=u,vt(e),a&8192)e:for(t=e.stateNode,t._visibility=i?t._visibility&-2:t._visibility|1,i&&(n===null||o||Vn||je||ei(e)),n=null,t=e;;){if(t.tag===5||t.tag===26){if(n===null){o=n=t;try{if(l=o.stateNode,i)r=l.style,typeof r.setProperty=="function"?r.setProperty("display","none","important"):r.display="none";else{s=o.stateNode;var f=o.memoizedProps.style,d=f!=null&&f.hasOwnProperty("display")?f.display:null;s.style.display=d==null||typeof d=="boolean"?"":(""+d).trim()}}catch(v){he(o,o.return,v)}}}else if(t.tag===6){if(n===null){o=t;try{o.stateNode.nodeValue=i?"":o.memoizedProps}catch(v){he(o,o.return,v)}}}else if(t.tag===18){if(n===null){o=t;try{var p=o.stateNode;i?xy(p,!0):xy(o.stateNode,!1)}catch(v){he(o,o.return,v)}}}else if((t.tag!==22&&t.tag!==23||t.memoizedState===null||t===e)&&t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break e;for(;t.sibling===null;){if(t.return===null||t.return===e)break e;n===t&&(n=null),t=t.return}n===t&&(n=null),t.sibling.return=t.return,t=t.sibling}a&4&&(a=e.updateQueue,a!==null&&(n=a.retryQueue,n!==null&&(a.retryQueue=null,go(e,n))));break;case 19:bt(t,e),vt(e),a&4&&(a=e.updateQueue,a!==null&&(e.updateQueue=null,go(e,a)));break;case 30:break;case 21:break;default:bt(t,e),vt(e)}}function vt(e){var t=e.flags;if(t&2){try{for(var n,a=e.return;a!==null;){if(R0(a)){n=a;break}a=a.return}if(n==null)throw Error(R(160));switch(n.tag){case 27:var i=n.stateNode,l=_f(e);Wo(e,l,i);break;case 5:var r=n.stateNode;n.flags&32&&(fl(r,""),n.flags&=-33);var s=_f(e);Wo(e,s,r);break;case 3:case 4:var o=n.stateNode.containerInfo,u=_f(e);bd(e,u,o);break;default:throw Error(R(161))}}catch(c){he(e,e.return,c)}e.flags&=-3}t&4096&&(e.flags&=-4097)}function M0(e){if(e.subtreeFlags&1024)for(e=e.child;e!==null;){var t=e;M0(t),t.tag===5&&t.flags&1024&&t.stateNode.reset(),e=e.sibling}}function qn(e,t){if(t.subtreeFlags&8772)for(t=t.child;t!==null;)w0(e,t.alternate,t),t=t.sibling}function ei(e){for(e=e.child;e!==null;){var t=e;switch(t.tag){case 0:case 11:case 14:case 15:Da(4,t,t.return),ei(t);break;case 1:xn(t,t.return);var n=t.stateNode;typeof n.componentWillUnmount=="function"&&A0(t,t.return,n),ei(t);break;case 27:_r(t.stateNode);case 26:case 5:xn(t,t.return),ei(t);break;case 22:t.memoizedState===null&&ei(t);break;case 30:ei(t);break;default:ei(t)}e=e.sibling}}function Yn(e,t,n){for(n=n&&(t.subtreeFlags&8772)!==0,t=t.child;t!==null;){var a=t.alternate,i=e,l=t,r=l.flags;switch(l.tag){case 0:case 11:case 15:Yn(i,l,n),Wr(4,l);break;case 1:if(Yn(i,l,n),a=l,i=a.stateNode,typeof i.componentDidMount=="function")try{i.componentDidMount()}catch(u){he(a,a.return,u)}if(a=l,i=a.updateQueue,i!==null){var s=a.stateNode;try{var o=i.shared.hiddenCallbacks;if(o!==null)for(i.shared.hiddenCallbacks=null,i=0;i<o.length;i++)Cb(o[i],s)}catch(u){he(a,a.return,u)}}n&&r&64&&E0(l),Rr(l,l.return);break;case 27:O0(l);case 26:case 5:Yn(i,l,n),n&&a===null&&r&4&&k0(l),Rr(l,l.return);break;case 12:Yn(i,l,n);break;case 31:Yn(i,l,n),n&&r&4&&C0(i,l);break;case 13:Yn(i,l,n),n&&r&4&&D0(i,l);break;case 22:l.memoizedState===null&&Yn(i,l,n),Rr(l,l.return);break;case 30:break;default:Yn(i,l,n)}t=t.sibling}}function yh(e,t){var n=null;e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),e=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(e=t.memoizedState.cachePool.pool),e!==n&&(e!=null&&e.refCount++,n!=null&&Ir(n))}function bh(e,t){e=null,t.alternate!==null&&(e=t.alternate.memoizedState.cache),t=t.memoizedState.cache,t!==e&&(t.refCount++,e!=null&&Ir(e))}function sn(e,t,n,a){if(t.subtreeFlags&10256)for(t=t.child;t!==null;)L0(e,t,n,a),t=t.sibling}function L0(e,t,n,a){var i=t.flags;switch(t.tag){case 0:case 11:case 15:sn(e,t,n,a),i&2048&&Wr(9,t);break;case 1:sn(e,t,n,a);break;case 3:sn(e,t,n,a),i&2048&&(e=null,t.alternate!==null&&(e=t.alternate.memoizedState.cache),t=t.memoizedState.cache,t!==e&&(t.refCount++,e!=null&&Ir(e)));break;case 12:if(i&2048){sn(e,t,n,a),e=t.stateNode;try{var l=t.memoizedProps,r=l.id,s=l.onPostCommit;typeof s=="function"&&s(r,t.alternate===null?"mount":"update",e.passiveEffectDuration,-0)}catch(o){he(t,t.return,o)}}else sn(e,t,n,a);break;case 31:sn(e,t,n,a);break;case 13:sn(e,t,n,a);break;case 23:break;case 22:l=t.stateNode,r=t.alternate,t.memoizedState!==null?l._visibility&2?sn(e,t,n,a):Or(e,t):l._visibility&2?sn(e,t,n,a):(l._visibility|=2,Gi(e,t,n,a,(t.subtreeFlags&10256)!==0||!1)),i&2048&&yh(r,t);break;case 24:sn(e,t,n,a),i&2048&&bh(t.alternate,t);break;default:sn(e,t,n,a)}}function Gi(e,t,n,a,i){for(i=i&&((t.subtreeFlags&10256)!==0||!1),t=t.child;t!==null;){var l=e,r=t,s=n,o=a,u=r.flags;switch(r.tag){case 0:case 11:case 15:Gi(l,r,s,o,i),Wr(8,r);break;case 23:break;case 22:var c=r.stateNode;r.memoizedState!==null?c._visibility&2?Gi(l,r,s,o,i):Or(l,r):(c._visibility|=2,Gi(l,r,s,o,i)),i&&u&2048&&yh(r.alternate,r);break;case 24:Gi(l,r,s,o,i),i&&u&2048&&bh(r.alternate,r);break;default:Gi(l,r,s,o,i)}t=t.sibling}}function Or(e,t){if(t.subtreeFlags&10256)for(t=t.child;t!==null;){var n=e,a=t,i=a.flags;switch(a.tag){case 22:Or(n,a),i&2048&&yh(a.alternate,a);break;case 24:Or(n,a),i&2048&&bh(a.alternate,a);break;default:Or(n,a)}t=t.sibling}}var yr=8192;function Yi(e,t,n){if(e.subtreeFlags&yr)for(e=e.child;e!==null;)U0(e,t,n),e=e.sibling}function U0(e,t,n){switch(e.tag){case 26:Yi(e,t,n),e.flags&yr&&e.memoizedState!==null&&xA(n,on,e.memoizedState,e.memoizedProps);break;case 5:Yi(e,t,n);break;case 3:case 4:var a=on;on=su(e.stateNode.containerInfo),Yi(e,t,n),on=a;break;case 22:e.memoizedState===null&&(a=e.alternate,a!==null&&a.memoizedState!==null?(a=yr,yr=16777216,Yi(e,t,n),yr=a):Yi(e,t,n));break;default:Yi(e,t,n)}}function H0(e){var t=e.alternate;if(t!==null&&(e=t.child,e!==null)){t.child=null;do t=e.sibling,e.sibling=null,e=t;while(e!==null)}}function cr(e){var t=e.deletions;if((e.flags&16)!==0){if(t!==null)for(var n=0;n<t.length;n++){var a=t[n];Ke=a,j0(a,e)}H0(e)}if(e.subtreeFlags&10256)for(e=e.child;e!==null;)B0(e),e=e.sibling}function B0(e){switch(e.tag){case 0:case 11:case 15:cr(e),e.flags&2048&&Da(9,e,e.return);break;case 3:cr(e);break;case 12:cr(e);break;case 22:var t=e.stateNode;e.memoizedState!==null&&t._visibility&2&&(e.return===null||e.return.tag!==13)?(t._visibility&=-3,Do(e)):cr(e);break;default:cr(e)}}function Do(e){var t=e.deletions;if((e.flags&16)!==0){if(t!==null)for(var n=0;n<t.length;n++){var a=t[n];Ke=a,j0(a,e)}H0(e)}for(e=e.child;e!==null;){switch(t=e,t.tag){case 0:case 11:case 15:Da(8,t,t.return),Do(t);break;case 22:n=t.stateNode,n._visibility&2&&(n._visibility&=-3,Do(t));break;default:Do(t)}e=e.sibling}}function j0(e,t){for(;Ke!==null;){var n=Ke;switch(n.tag){case 0:case 11:case 15:Da(8,n,t);break;case 23:case 22:if(n.memoizedState!==null&&n.memoizedState.cachePool!==null){var a=n.memoizedState.cachePool.pool;a!=null&&a.refCount++}break;case 24:Ir(n.memoizedState.cache)}if(a=n.child,a!==null)a.return=n,Ke=a;else e:for(n=e;Ke!==null;){a=Ke;var i=a.sibling,l=a.return;if(N0(a),a===n){Ke=null;break e}if(i!==null){i.return=l,Ke=i;break e}Ke=l}}}var jE={getCacheForType:function(e){var t=tt(qe),n=t.data.get(e);return n===void 0&&(n=e(),t.data.set(e,n)),n},cacheSignal:function(){return tt(qe).controller.signal}},qE=typeof WeakMap=="function"?WeakMap:Map,se=0,be=null,ee=null,ne=0,de=0,wt=null,ba=!1,Al=!1,vh=!1,ea=0,Ce=0,za=0,li=0,Sh=0,Ct=0,ml=0,wr=null,Tt=null,vd=!1,Eu=0,q0=0,eu=1/0,tu=null,ka=null,Ve=0,Ra=null,gl=null,Fn=0,Sd=0,Td=null,Y0=null,Nr=0,xd=null;function Lt(){return(se&2)!==0&&ne!==0?ne&-ne:$.T!==null?xh():Jy()}function G0(){if(Ct===0)if((ne&536870912)===0||ae){var e=lo;lo<<=1,(lo&3932160)===0&&(lo=262144),Ct=e}else Ct=536870912;return e=Ht.current,e!==null&&(e.flags|=32),Ct}function xt(e,t,n){(e===be&&(de===2||de===9)||e.cancelPendingCommit!==null)&&(yl(e,0),va(e,ne,Ct,!1)),Kr(e,n),((se&2)===0||e!==be)&&(e===be&&((se&2)===0&&(li|=n),Ce===4&&va(e,ne,Ct,!1)),kn(e))}function V0(e,t,n){if((se&6)!==0)throw Error(R(327));var a=!n&&(t&127)===0&&(t&e.expiredLanes)===0||Zr(e,t),i=a?VE(e,t):Df(e,t,!0),l=a;do{if(i===0){Al&&!a&&va(e,t,0,!1);break}else{if(n=e.current.alternate,l&&!YE(n)){i=Df(e,t,!1),l=!1;continue}if(i===2){if(l=t,e.errorRecoveryDisabledLanes&l)var r=0;else r=e.pendingLanes&-536870913,r=r!==0?r:r&536870912?536870912:0;if(r!==0){t=r;e:{var s=e;i=wr;var o=s.current.memoizedState.isDehydrated;if(o&&(yl(s,r).flags|=256),r=Df(s,r,!1),r!==2){if(vh&&!o){s.errorRecoveryDisabledLanes|=l,li|=l,i=4;break e}l=Tt,Tt=i,l!==null&&(Tt===null?Tt=l:Tt.push.apply(Tt,l))}i=r}if(l=!1,i!==2)continue}}if(i===1){yl(e,0),va(e,t,0,!0);break}e:{switch(a=e,l=i,l){case 0:case 1:throw Error(R(345));case 4:if((t&4194048)!==t)break;case 6:va(a,t,Ct,!ba);break e;case 2:Tt=null;break;case 3:case 5:break;default:throw Error(R(329))}if((t&62914560)===t&&(i=Eu+300-Dt(),10<i)){if(va(a,t,Ct,!ba),du(a,0,!0)!==0)break e;Fn=t,a.timeoutHandle=uv(sy.bind(null,a,n,Tt,tu,vd,t,Ct,li,ml,ba,l,"Throttled",-0,0),i);break e}sy(a,n,Tt,tu,vd,t,Ct,li,ml,ba,l,null,-0,0)}}break}while(!0);kn(e)}function sy(e,t,n,a,i,l,r,s,o,u,c,f,d,p){if(e.timeoutHandle=-1,f=t.subtreeFlags,f&8192||(f&16785408)===16785408){f={stylesheets:null,count:0,imgCount:0,imgBytes:0,suspenseyImages:[],waitingForImages:!0,waitingForViewTransition:!1,unsuspend:$n},U0(t,l,f);var v=(l&62914560)===l?Eu-Dt():(l&4194048)===l?q0-Dt():0;if(v=EA(f,v),v!==null){Fn=l,e.cancelPendingCommit=v(uy.bind(null,e,t,l,n,a,i,r,s,o,c,f,null,d,p)),va(e,l,r,!u);return}}uy(e,t,l,n,a,i,r,s,o)}function YE(e){for(var t=e;;){var n=t.tag;if((n===0||n===11||n===15)&&t.flags&16384&&(n=t.updateQueue,n!==null&&(n=n.stores,n!==null)))for(var a=0;a<n.length;a++){var i=n[a],l=i.getSnapshot;i=i.value;try{if(!Ut(l(),i))return!1}catch(r){return!1}}if(n=t.child,t.subtreeFlags&16384&&n!==null)n.return=t,t=n;else{if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}function va(e,t,n,a){t&=~Sh,t&=~li,e.suspendedLanes|=t,e.pingedLanes&=~t,a&&(e.warmLanes|=t),a=e.expirationTimes;for(var i=t;0<i;){var l=31-Mt(i),r=1<<l;a[l]=-1,i&=~r}n!==0&&Zy(e,n,t)}function Au(){return(se&6)===0?(es(0,!1),!1):!0}function Th(){if(ee!==null){if(de===0)var e=ee.return;else e=ee,Qn=mi=null,rh(e),rl=null,Hr=0,e=ee;for(;e!==null;)x0(e.alternate,e),e=e.return;ee=null}}function yl(e,t){var n=e.timeoutHandle;n!==-1&&(e.timeoutHandle=-1,lA(n)),n=e.cancelPendingCommit,n!==null&&(e.cancelPendingCommit=null,n()),Fn=0,Th(),be=e,ee=n=Zn(e.current,null),ne=t,de=0,wt=null,ba=!1,Al=Zr(e,t),vh=!1,ml=Ct=Sh=li=za=Ce=0,Tt=wr=null,vd=!1,(t&8)!==0&&(t|=t&32);var a=e.entangledLanes;if(a!==0)for(e=e.entanglements,a&=t;0<a;){var i=31-Mt(a),l=1<<i;t|=e[i],a&=~l}return ea=t,gu(),n}function X0(e,t){J=null,$.H=jr,t===El||t===bu?(t=jg(),de=3):t===Wd?(t=jg(),de=4):de=t===mh?8:t!==null&&typeof t=="object"&&typeof t.then=="function"?6:1,wt=t,ee===null&&(Ce=1,Io(e,Qt(t,e.current)))}function $0(){var e=Ht.current;return e===null?!0:(ne&4194048)===ne?Kt===null:(ne&62914560)===ne||(ne&536870912)!==0?e===Kt:!1}function Q0(){var e=$.H;return $.H=jr,e===null?jr:e}function Z0(){var e=$.A;return $.A=jE,e}function nu(){Ce=4,ba||(ne&4194048)!==ne&&Ht.current!==null||(Al=!0),(za&134217727)===0&&(li&134217727)===0||be===null||va(be,ne,Ct,!1)}function Df(e,t,n){var a=se;se|=2;var i=Q0(),l=Z0();(be!==e||ne!==t)&&(tu=null,yl(e,t)),t=!1;var r=Ce;e:do try{if(de!==0&&ee!==null){var s=ee,o=wt;switch(de){case 8:Th(),r=6;break e;case 3:case 2:case 9:case 6:Ht.current===null&&(t=!0);var u=de;if(de=0,wt=null,tl(e,s,o,u),n&&Al){r=0;break e}break;default:u=de,de=0,wt=null,tl(e,s,o,u)}}GE(),r=Ce;break}catch(c){X0(e,c)}while(!0);return t&&e.shellSuspendCounter++,Qn=mi=null,se=a,$.H=i,$.A=l,ee===null&&(be=null,ne=0,gu()),r}function GE(){for(;ee!==null;)K0(ee)}function VE(e,t){var n=se;se|=2;var a=Q0(),i=Z0();be!==e||ne!==t?(tu=null,eu=Dt()+500,yl(e,t)):Al=Zr(e,t);e:do try{if(de!==0&&ee!==null){t=ee;var l=wt;t:switch(de){case 1:de=0,wt=null,tl(e,t,l,1);break;case 2:case 9:if(Bg(l)){de=0,wt=null,oy(t);break}t=function(){de!==2&&de!==9||be!==e||(de=7),kn(e)},l.then(t,t);break e;case 3:de=7;break e;case 4:de=5;break e;case 7:Bg(l)?(de=0,wt=null,oy(t)):(de=0,wt=null,tl(e,t,l,7));break;case 5:var r=null;switch(ee.tag){case 26:r=ee.memoizedState;case 5:case 27:var s=ee;if(r?pv(r):s.stateNode.complete){de=0,wt=null;var o=s.sibling;if(o!==null)ee=o;else{var u=s.return;u!==null?(ee=u,ku(u)):ee=null}break t}}de=0,wt=null,tl(e,t,l,5);break;case 6:de=0,wt=null,tl(e,t,l,6);break;case 8:Th(),Ce=6;break e;default:throw Error(R(462))}}XE();break}catch(c){X0(e,c)}while(!0);return Qn=mi=null,$.H=a,$.A=i,se=n,ee!==null?0:(be=null,ne=0,gu(),Ce)}function XE(){for(;ee!==null&&!hx();)K0(ee)}function K0(e){var t=T0(e.alternate,e,ea);e.memoizedProps=e.pendingProps,t===null?ku(e):ee=t}function oy(e){var t=e,n=t.alternate;switch(t.tag){case 15:case 0:t=ty(n,t,t.pendingProps,t.type,void 0,ne);break;case 11:t=ty(n,t,t.pendingProps,t.type.render,t.ref,ne);break;case 5:rh(t);default:x0(n,t),t=ee=xb(t,ea),t=T0(n,t,ea)}e.memoizedProps=e.pendingProps,t===null?ku(e):ee=t}function tl(e,t,n,a){Qn=mi=null,rh(t),rl=null,Hr=0;var i=t.return;try{if(DE(e,i,t,n,ne)){Ce=1,Io(e,Qt(n,e.current)),ee=null;return}}catch(l){if(i!==null)throw ee=i,l;Ce=1,Io(e,Qt(n,e.current)),ee=null;return}t.flags&32768?(ae||a===1?e=!0:Al||(ne&536870912)!==0?e=!1:(ba=e=!0,(a===2||a===9||a===3||a===6)&&(a=Ht.current,a!==null&&a.tag===13&&(a.flags|=16384))),F0(t,e)):ku(t)}function ku(e){var t=e;do{if((t.flags&32768)!==0){F0(t,ba);return}e=t.return;var n=LE(t.alternate,t,ea);if(n!==null){ee=n;return}if(t=t.sibling,t!==null){ee=t;return}ee=t=e}while(t!==null);Ce===0&&(Ce=5)}function F0(e,t){do{var n=UE(e.alternate,e);if(n!==null){n.flags&=32767,ee=n;return}if(n=e.return,n!==null&&(n.flags|=32768,n.subtreeFlags=0,n.deletions=null),!t&&(e=e.sibling,e!==null)){ee=e;return}ee=e=n}while(e!==null);Ce=6,ee=null}function uy(e,t,n,a,i,l,r,s,o){e.cancelPendingCommit=null;do Ru();while(Ve!==0);if((se&6)!==0)throw Error(R(327));if(t!==null){if(t===e.current)throw Error(R(177));if(l=t.lanes|t.childLanes,l|=Qd,Ex(e,n,l,r,s,o),e===be&&(ee=be=null,ne=0),gl=t,Ra=e,Fn=n,Sd=l,Td=i,Y0=a,(t.subtreeFlags&10256)!==0||(t.flags&10256)!==0?(e.callbackNode=null,e.callbackPriority=0,KE(qo,function(){return ev(),null})):(e.callbackNode=null,e.callbackPriority=0),a=(t.flags&13878)!==0,(t.subtreeFlags&13878)!==0||a){a=$.T,$.T=null,i=oe.p,oe.p=2,r=se,se|=4;try{HE(e,t,n)}finally{se=r,oe.p=i,$.T=a}}Ve=1,J0(),I0(),P0()}}function J0(){if(Ve===1){Ve=0;var e=Ra,t=gl,n=(t.flags&13878)!==0;if((t.subtreeFlags&13878)!==0||n){n=$.T,$.T=null;var a=oe.p;oe.p=2;var i=se;se|=4;try{z0(t,e);var l=Rd,r=pb(e.containerInfo),s=l.focusedElem,o=l.selectionRange;if(r!==s&&s&&s.ownerDocument&&hb(s.ownerDocument.documentElement,s)){if(o!==null&&$d(s)){var u=o.start,c=o.end;if(c===void 0&&(c=u),"selectionStart"in s)s.selectionStart=u,s.selectionEnd=Math.min(c,s.value.length);else{var f=s.ownerDocument||document,d=f&&f.defaultView||window;if(d.getSelection){var p=d.getSelection(),v=s.textContent.length,S=Math.min(o.start,v),x=o.end===void 0?S:Math.min(o.end,v);!p.extend&&S>x&&(r=x,x=S,S=r);var h=Cg(s,S),m=Cg(s,x);if(h&&m&&(p.rangeCount!==1||p.anchorNode!==h.node||p.anchorOffset!==h.offset||p.focusNode!==m.node||p.focusOffset!==m.offset)){var y=f.createRange();y.setStart(h.node,h.offset),p.removeAllRanges(),S>x?(p.addRange(y),p.extend(m.node,m.offset)):(y.setEnd(m.node,m.offset),p.addRange(y))}}}}for(f=[],p=s;p=p.parentNode;)p.nodeType===1&&f.push({element:p,left:p.scrollLeft,top:p.scrollTop});for(typeof s.focus=="function"&&s.focus(),s=0;s<f.length;s++){var b=f[s];b.element.scrollLeft=b.left,b.element.scrollTop=b.top}}cu=!!kd,Rd=kd=null}finally{se=i,oe.p=a,$.T=n}}e.current=t,Ve=2}}function I0(){if(Ve===2){Ve=0;var e=Ra,t=gl,n=(t.flags&8772)!==0;if((t.subtreeFlags&8772)!==0||n){n=$.T,$.T=null;var a=oe.p;oe.p=2;var i=se;se|=4;try{w0(e,t.alternate,t)}finally{se=i,oe.p=a,$.T=n}}Ve=3}}function P0(){if(Ve===4||Ve===3){Ve=0,px();var e=Ra,t=gl,n=Fn,a=Y0;(t.subtreeFlags&10256)!==0||(t.flags&10256)!==0?Ve=5:(Ve=0,gl=Ra=null,W0(e,e.pendingLanes));var i=e.pendingLanes;if(i===0&&(ka=null),Bd(n),t=t.stateNode,zt&&typeof zt.onCommitFiberRoot=="function")try{zt.onCommitFiberRoot(Qr,t,void 0,(t.current.flags&128)===128)}catch(o){}if(a!==null){t=$.T,i=oe.p,oe.p=2,$.T=null;try{for(var l=e.onRecoverableError,r=0;r<a.length;r++){var s=a[r];l(s.value,{componentStack:s.stack})}}finally{$.T=t,oe.p=i}}(Fn&3)!==0&&Ru(),kn(e),i=e.pendingLanes,(n&261930)!==0&&(i&42)!==0?e===xd?Nr++:(Nr=0,xd=e):Nr=0,es(0,!1)}}function W0(e,t){(e.pooledCacheLanes&=t)===0&&(t=e.pooledCache,t!=null&&(e.pooledCache=null,Ir(t)))}function Ru(){return J0(),I0(),P0(),ev()}function ev(){if(Ve!==5)return!1;var e=Ra,t=Sd;Sd=0;var n=Bd(Fn),a=$.T,i=oe.p;try{oe.p=32>n?32:n,$.T=null,n=Td,Td=null;var l=Ra,r=Fn;if(Ve=0,gl=Ra=null,Fn=0,(se&6)!==0)throw Error(R(331));var s=se;if(se|=4,B0(l.current),L0(l,l.current,r,n),se=s,es(0,!1),zt&&typeof zt.onPostCommitFiberRoot=="function")try{zt.onPostCommitFiberRoot(Qr,l)}catch(o){}return!0}finally{oe.p=i,$.T=a,W0(e,t)}}function cy(e,t,n){t=Qt(n,t),t=md(e.stateNode,t,2),e=Aa(e,t,2),e!==null&&(Kr(e,2),kn(e))}function he(e,t,n){if(e.tag===3)cy(e,e,n);else for(;t!==null;){if(t.tag===3){cy(t,e,n);break}else if(t.tag===1){var a=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof a.componentDidCatch=="function"&&(ka===null||!ka.has(a))){e=Qt(n,e),n=m0(2),a=Aa(t,n,2),a!==null&&(g0(n,a,t,e),Kr(a,2),kn(a));break}}t=t.return}}function zf(e,t,n){var a=e.pingCache;if(a===null){a=e.pingCache=new qE;var i=new Set;a.set(t,i)}else i=a.get(t),i===void 0&&(i=new Set,a.set(t,i));i.has(n)||(vh=!0,i.add(n),e=$E.bind(null,e,t,n),t.then(e,e))}function $E(e,t,n){var a=e.pingCache;a!==null&&a.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,be===e&&(ne&n)===n&&(Ce===4||Ce===3&&(ne&62914560)===ne&&300>Dt()-Eu?(se&2)===0&&yl(e,0):Sh|=n,ml===ne&&(ml=0)),kn(e)}function tv(e,t){t===0&&(t=Qy()),e=pi(e,t),e!==null&&(Kr(e,t),kn(e))}function QE(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),tv(e,n)}function ZE(e,t){var n=0;switch(e.tag){case 31:case 13:var a=e.stateNode,i=e.memoizedState;i!==null&&(n=i.retryLane);break;case 19:a=e.stateNode;break;case 22:a=e.stateNode._retryCache;break;default:throw Error(R(314))}a!==null&&a.delete(t),tv(e,n)}function KE(e,t){return Ud(e,t)}var au=null,Vi=null,Ed=!1,iu=!1,Mf=!1,Sa=0;function kn(e){e!==Vi&&e.next===null&&(Vi===null?au=Vi=e:Vi=Vi.next=e),iu=!0,Ed||(Ed=!0,JE())}function es(e,t){if(!Mf&&iu){Mf=!0;do for(var n=!1,a=au;a!==null;){if(!t)if(e!==0){var i=a.pendingLanes;if(i===0)var l=0;else{var r=a.suspendedLanes,s=a.pingedLanes;l=(1<<31-Mt(42|e)+1)-1,l&=i&~(r&~s),l=l&201326741?l&201326741|1:l?l|2:0}l!==0&&(n=!0,fy(a,l))}else l=ne,l=du(a,a===be?l:0,a.cancelPendingCommit!==null||a.timeoutHandle!==-1),(l&3)===0||Zr(a,l)||(n=!0,fy(a,l));a=a.next}while(n);Mf=!1}}function FE(){nv()}function nv(){iu=Ed=!1;var e=0;Sa!==0&&iA()&&(e=Sa);for(var t=Dt(),n=null,a=au;a!==null;){var i=a.next,l=av(a,t);l===0?(a.next=null,n===null?au=i:n.next=i,i===null&&(Vi=n)):(n=a,(e!==0||(l&3)!==0)&&(iu=!0)),a=i}Ve!==0&&Ve!==5||es(e,!1),Sa!==0&&(Sa=0)}function av(e,t){for(var n=e.suspendedLanes,a=e.pingedLanes,i=e.expirationTimes,l=e.pendingLanes&-62914561;0<l;){var r=31-Mt(l),s=1<<r,o=i[r];o===-1?((s&n)===0||(s&a)!==0)&&(i[r]=xx(s,t)):o<=t&&(e.expiredLanes|=s),l&=~s}if(t=be,n=ne,n=du(e,e===t?n:0,e.cancelPendingCommit!==null||e.timeoutHandle!==-1),a=e.callbackNode,n===0||e===t&&(de===2||de===9)||e.cancelPendingCommit!==null)return a!==null&&a!==null&&uf(a),e.callbackNode=null,e.callbackPriority=0;if((n&3)===0||Zr(e,n)){if(t=n&-n,t===e.callbackPriority)return t;switch(a!==null&&uf(a),Bd(n)){case 2:case 8:n=Xy;break;case 32:n=qo;break;case 268435456:n=$y;break;default:n=qo}return a=iv.bind(null,e),n=Ud(n,a),e.callbackPriority=t,e.callbackNode=n,t}return a!==null&&a!==null&&uf(a),e.callbackPriority=2,e.callbackNode=null,2}function iv(e,t){if(Ve!==0&&Ve!==5)return e.callbackNode=null,e.callbackPriority=0,null;var n=e.callbackNode;if(Ru()&&e.callbackNode!==n)return null;var a=ne;return a=du(e,e===be?a:0,e.cancelPendingCommit!==null||e.timeoutHandle!==-1),a===0?null:(V0(e,a,t),av(e,Dt()),e.callbackNode!=null&&e.callbackNode===n?iv.bind(null,e):null)}function fy(e,t){if(Ru())return null;V0(e,t,!0)}function JE(){rA(function(){(se&6)!==0?Ud(Vy,FE):nv()})}function xh(){if(Sa===0){var e=dl;e===0&&(e=io,io<<=1,(io&261888)===0&&(io=256)),Sa=e}return Sa}function dy(e){return e==null||typeof e=="symbol"||typeof e=="boolean"?null:typeof e=="function"?e:Eo(""+e)}function hy(e,t){var n=t.ownerDocument.createElement("input");return n.name=t.name,n.value=t.value,e.id&&n.setAttribute("form",e.id),t.parentNode.insertBefore(n,t),e=new FormData(e),n.parentNode.removeChild(n),e}function IE(e,t,n,a,i){if(t==="submit"&&n&&n.stateNode===i){var l=dy((i[Et]||null).action),r=a.submitter;r&&(t=(t=r[Et]||null)?dy(t.formAction):r.getAttribute("formAction"),t!==null&&(l=t,r=null));var s=new hu("action","action",null,a,i);e.push({event:s,listeners:[{instance:null,listener:function(){if(a.defaultPrevented){if(Sa!==0){var o=r?hy(i,r):new FormData(i);hd(n,{pending:!0,data:o,method:i.method,action:l},null,o)}}else typeof l=="function"&&(s.preventDefault(),o=r?hy(i,r):new FormData(i),hd(n,{pending:!0,data:o,method:i.method,action:l},l,o))},currentTarget:i}]})}}for(yo=0;yo<td.length;yo++)bo=td[yo],py=bo.toLowerCase(),my=bo[0].toUpperCase()+bo.slice(1),un(py,"on"+my);var bo,py,my,yo;un(gb,"onAnimationEnd");un(yb,"onAnimationIteration");un(bb,"onAnimationStart");un("dblclick","onDoubleClick");un("focusin","onFocus");un("focusout","onBlur");un(mE,"onTransitionRun");un(gE,"onTransitionStart");un(yE,"onTransitionCancel");un(vb,"onTransitionEnd");cl("onMouseEnter",["mouseout","mouseover"]);cl("onMouseLeave",["mouseout","mouseover"]);cl("onPointerEnter",["pointerout","pointerover"]);cl("onPointerLeave",["pointerout","pointerover"]);fi("onChange","change click focusin focusout input keydown keyup selectionchange".split(" "));fi("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" "));fi("onBeforeInput",["compositionend","keypress","textInput","paste"]);fi("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" "));fi("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" "));fi("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var qr="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),PE=new Set("beforetoggle cancel close invalid load scroll scrollend toggle".split(" ").concat(qr));function lv(e,t){t=(t&4)!==0;for(var n=0;n<e.length;n++){var a=e[n],i=a.event;a=a.listeners;e:{var l=void 0;if(t)for(var r=a.length-1;0<=r;r--){var s=a[r],o=s.instance,u=s.currentTarget;if(s=s.listener,o!==l&&i.isPropagationStopped())break e;l=s,i.currentTarget=u;try{l(i)}catch(c){Go(c)}i.currentTarget=null,l=o}else for(r=0;r<a.length;r++){if(s=a[r],o=s.instance,u=s.currentTarget,s=s.listener,o!==l&&i.isPropagationStopped())break e;l=s,i.currentTarget=u;try{l(i)}catch(c){Go(c)}i.currentTarget=null,l=o}}}}function W(e,t){var n=t[Zf];n===void 0&&(n=t[Zf]=new Set);var a=e+"__bubble";n.has(a)||(rv(t,e,2,!1),n.add(a))}function Lf(e,t,n){var a=0;t&&(a|=4),rv(n,e,a,t)}var vo="_reactListening"+Math.random().toString(36).slice(2);function Eh(e){if(!e[vo]){e[vo]=!0,Iy.forEach(function(n){n!=="selectionchange"&&(PE.has(n)||Lf(n,!1,e),Lf(n,!0,e))});var t=e.nodeType===9?e:e.ownerDocument;t===null||t[vo]||(t[vo]=!0,Lf("selectionchange",!1,t))}}function rv(e,t,n,a){switch(vv(t)){case 2:var i=RA;break;case 8:i=OA;break;default:i=Oh}n=i.bind(null,t,n,e),i=void 0,!Pf||t!=="touchstart"&&t!=="touchmove"&&t!=="wheel"||(i=!0),a?i!==void 0?e.addEventListener(t,n,{capture:!0,passive:i}):e.addEventListener(t,n,!0):i!==void 0?e.addEventListener(t,n,{passive:i}):e.addEventListener(t,n,!1)}function Uf(e,t,n,a,i){var l=a;if((t&1)===0&&(t&2)===0&&a!==null)e:for(;;){if(a===null)return;var r=a.tag;if(r===3||r===4){var s=a.stateNode.containerInfo;if(s===i)break;if(r===4)for(r=a.return;r!==null;){var o=r.tag;if((o===3||o===4)&&r.stateNode.containerInfo===i)return;r=r.return}for(;s!==null;){if(r=Qi(s),r===null)return;if(o=r.tag,o===5||o===6||o===26||o===27){a=l=r;continue e}s=s.parentNode}}a=a.return}lb(function(){var u=l,c=Yd(n),f=[];e:{var d=Sb.get(e);if(d!==void 0){var p=hu,v=e;switch(e){case"keypress":if(ko(n)===0)break e;case"keydown":case"keyup":p=Zx;break;case"focusin":v="focus",p=pf;break;case"focusout":v="blur",p=pf;break;case"beforeblur":case"afterblur":p=pf;break;case"click":if(n.button===2)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":p=xg;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":p=Lx;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":p=Jx;break;case gb:case yb:case bb:p=Bx;break;case vb:p=Px;break;case"scroll":case"scrollend":p=zx;break;case"wheel":p=eE;break;case"copy":case"cut":case"paste":p=qx;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":p=Ag;break;case"toggle":case"beforetoggle":p=nE}var S=(t&4)!==0,x=!S&&(e==="scroll"||e==="scrollend"),h=S?d!==null?d+"Capture":null:d;S=[];for(var m=u,y;m!==null;){var b=m;if(y=b.stateNode,b=b.tag,b!==5&&b!==26&&b!==27||y===null||h===null||(b=Dr(m,h),b!=null&&S.push(Yr(m,b,y))),x)break;m=m.return}0<S.length&&(d=new p(d,v,null,n,c),f.push({event:d,listeners:S}))}}if((t&7)===0){e:{if(d=e==="mouseover"||e==="pointerover",p=e==="mouseout"||e==="pointerout",d&&n!==If&&(v=n.relatedTarget||n.fromElement)&&(Qi(v)||v[Sl]))break e;if((p||d)&&(d=c.window===c?c:(d=c.ownerDocument)?d.defaultView||d.parentWindow:window,p?(v=n.relatedTarget||n.toElement,p=u,v=v?Qi(v):null,v!==null&&(x=$r(v),S=v.tag,v!==x||S!==5&&S!==27&&S!==6)&&(v=null)):(p=null,v=u),p!==v)){if(S=xg,b="onMouseLeave",h="onMouseEnter",m="mouse",(e==="pointerout"||e==="pointerover")&&(S=Ag,b="onPointerLeave",h="onPointerEnter",m="pointer"),x=p==null?d:mr(p),y=v==null?d:mr(v),d=new S(b,m+"leave",p,n,c),d.target=x,d.relatedTarget=y,b=null,Qi(c)===u&&(S=new S(h,m+"enter",v,n,c),S.target=y,S.relatedTarget=x,b=S),x=b,p&&v)t:{for(S=WE,h=p,m=v,y=0,b=h;b;b=S(b))y++;b=0;for(var k=m;k;k=S(k))b++;for(;0<y-b;)h=S(h),y--;for(;0<b-y;)m=S(m),b--;for(;y--;){if(h===m||m!==null&&h===m.alternate){S=h;break t}h=S(h),m=S(m)}S=null}else S=null;p!==null&&gy(f,d,p,S,!1),v!==null&&x!==null&&gy(f,x,v,S,!0)}}e:{if(d=u?mr(u):window,p=d.nodeName&&d.nodeName.toLowerCase(),p==="select"||p==="input"&&d.type==="file")var _=wg;else if(Og(d))if(fb)_=dE;else{_=cE;var w=uE}else p=d.nodeName,!p||p.toLowerCase()!=="input"||d.type!=="checkbox"&&d.type!=="radio"?u&&qd(u.elementType)&&(_=wg):_=fE;if(_&&(_=_(e,u))){cb(f,_,n,c);break e}w&&w(e,d,u),e==="focusout"&&u&&d.type==="number"&&u.memoizedProps.value!=null&&Jf(d,"number",d.value)}switch(w=u?mr(u):window,e){case"focusin":(Og(w)||w.contentEditable==="true")&&(Fi=w,Wf=u,Sr=null);break;case"focusout":Sr=Wf=Fi=null;break;case"mousedown":ed=!0;break;case"contextmenu":case"mouseup":case"dragend":ed=!1,Dg(f,n,c);break;case"selectionchange":if(pE)break;case"keydown":case"keyup":Dg(f,n,c)}var B;if(Xd)e:{switch(e){case"compositionstart":var U="onCompositionStart";break e;case"compositionend":U="onCompositionEnd";break e;case"compositionupdate":U="onCompositionUpdate";break e}U=void 0}else Ki?ob(e,n)&&(U="onCompositionEnd"):e==="keydown"&&n.keyCode===229&&(U="onCompositionStart");U&&(sb&&n.locale!=="ko"&&(Ki||U!=="onCompositionStart"?U==="onCompositionEnd"&&Ki&&(B=rb()):(ya=c,Gd="value"in ya?ya.value:ya.textContent,Ki=!0)),w=lu(u,U),0<w.length&&(U=new Eg(U,e,null,n,c),f.push({event:U,listeners:w}),B?U.data=B:(B=ub(n),B!==null&&(U.data=B)))),(B=iE?lE(e,n):rE(e,n))&&(U=lu(u,"onBeforeInput"),0<U.length&&(w=new Eg("onBeforeInput","beforeinput",null,n,c),f.push({event:w,listeners:U}),w.data=B)),IE(f,e,u,n,c)}lv(f,t)})}function Yr(e,t,n){return{instance:e,listener:t,currentTarget:n}}function lu(e,t){for(var n=t+"Capture",a=[];e!==null;){var i=e,l=i.stateNode;if(i=i.tag,i!==5&&i!==26&&i!==27||l===null||(i=Dr(e,n),i!=null&&a.unshift(Yr(e,i,l)),i=Dr(e,t),i!=null&&a.push(Yr(e,i,l))),e.tag===3)return a;e=e.return}return[]}function WE(e){if(e===null)return null;do e=e.return;while(e&&e.tag!==5&&e.tag!==27);return e||null}function gy(e,t,n,a,i){for(var l=t._reactName,r=[];n!==null&&n!==a;){var s=n,o=s.alternate,u=s.stateNode;if(s=s.tag,o!==null&&o===a)break;s!==5&&s!==26&&s!==27||u===null||(o=u,i?(u=Dr(n,l),u!=null&&r.unshift(Yr(n,u,o))):i||(u=Dr(n,l),u!=null&&r.push(Yr(n,u,o)))),n=n.return}r.length!==0&&e.push({event:t,listeners:r})}var eA=/\r\n?/g,tA=/\u0000|\uFFFD/g;function yy(e){return(typeof e=="string"?e:""+e).replace(eA,"\n").replace(tA,"")}function sv(e,t){return t=yy(t),yy(e)===t}function pe(e,t,n,a,i,l){switch(n){case"children":typeof a=="string"?t==="body"||t==="textarea"&&a===""||fl(e,a):(typeof a=="number"||typeof a=="bigint")&&t!=="body"&&fl(e,""+a);break;case"className":so(e,"class",a);break;case"tabIndex":so(e,"tabindex",a);break;case"dir":case"role":case"viewBox":case"width":case"height":so(e,n,a);break;case"style":ib(e,a,l);break;case"data":if(t!=="object"){so(e,"data",a);break}case"src":case"href":if(a===""&&(t!=="a"||n!=="href")){e.removeAttribute(n);break}if(a==null||typeof a=="function"||typeof a=="symbol"||typeof a=="boolean"){e.removeAttribute(n);break}a=Eo(""+a),e.setAttribute(n,a);break;case"action":case"formAction":if(typeof a=="function"){e.setAttribute(n,"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')");break}else typeof l=="function"&&(n==="formAction"?(t!=="input"&&pe(e,t,"name",i.name,i,null),pe(e,t,"formEncType",i.formEncType,i,null),pe(e,t,"formMethod",i.formMethod,i,null),pe(e,t,"formTarget",i.formTarget,i,null)):(pe(e,t,"encType",i.encType,i,null),pe(e,t,"method",i.method,i,null),pe(e,t,"target",i.target,i,null)));if(a==null||typeof a=="symbol"||typeof a=="boolean"){e.removeAttribute(n);break}a=Eo(""+a),e.setAttribute(n,a);break;case"onClick":a!=null&&(e.onclick=$n);break;case"onScroll":a!=null&&W("scroll",e);break;case"onScrollEnd":a!=null&&W("scrollend",e);break;case"dangerouslySetInnerHTML":if(a!=null){if(typeof a!="object"||!("__html"in a))throw Error(R(61));if(n=a.__html,n!=null){if(i.children!=null)throw Error(R(60));e.innerHTML=n}}break;case"multiple":e.multiple=a&&typeof a!="function"&&typeof a!="symbol";break;case"muted":e.muted=a&&typeof a!="function"&&typeof a!="symbol";break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"defaultValue":case"defaultChecked":case"innerHTML":case"ref":break;case"autoFocus":break;case"xlinkHref":if(a==null||typeof a=="function"||typeof a=="boolean"||typeof a=="symbol"){e.removeAttribute("xlink:href");break}n=Eo(""+a),e.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",n);break;case"contentEditable":case"spellCheck":case"draggable":case"value":case"autoReverse":case"externalResourcesRequired":case"focusable":case"preserveAlpha":a!=null&&typeof a!="function"&&typeof a!="symbol"?e.setAttribute(n,""+a):e.removeAttribute(n);break;case"inert":case"allowFullScreen":case"async":case"autoPlay":case"controls":case"default":case"defer":case"disabled":case"disablePictureInPicture":case"disableRemotePlayback":case"formNoValidate":case"hidden":case"loop":case"noModule":case"noValidate":case"open":case"playsInline":case"readOnly":case"required":case"reversed":case"scoped":case"seamless":case"itemScope":a&&typeof a!="function"&&typeof a!="symbol"?e.setAttribute(n,""):e.removeAttribute(n);break;case"capture":case"download":a===!0?e.setAttribute(n,""):a!==!1&&a!=null&&typeof a!="function"&&typeof a!="symbol"?e.setAttribute(n,a):e.removeAttribute(n);break;case"cols":case"rows":case"size":case"span":a!=null&&typeof a!="function"&&typeof a!="symbol"&&!isNaN(a)&&1<=a?e.setAttribute(n,a):e.removeAttribute(n);break;case"rowSpan":case"start":a==null||typeof a=="function"||typeof a=="symbol"||isNaN(a)?e.removeAttribute(n):e.setAttribute(n,a);break;case"popover":W("beforetoggle",e),W("toggle",e),xo(e,"popover",a);break;case"xlinkActuate":Hn(e,"http://www.w3.org/1999/xlink","xlink:actuate",a);break;case"xlinkArcrole":Hn(e,"http://www.w3.org/1999/xlink","xlink:arcrole",a);break;case"xlinkRole":Hn(e,"http://www.w3.org/1999/xlink","xlink:role",a);break;case"xlinkShow":Hn(e,"http://www.w3.org/1999/xlink","xlink:show",a);break;case"xlinkTitle":Hn(e,"http://www.w3.org/1999/xlink","xlink:title",a);break;case"xlinkType":Hn(e,"http://www.w3.org/1999/xlink","xlink:type",a);break;case"xmlBase":Hn(e,"http://www.w3.org/XML/1998/namespace","xml:base",a);break;case"xmlLang":Hn(e,"http://www.w3.org/XML/1998/namespace","xml:lang",a);break;case"xmlSpace":Hn(e,"http://www.w3.org/XML/1998/namespace","xml:space",a);break;case"is":xo(e,"is",a);break;case"innerText":case"textContent":break;default:(!(2<n.length)||n[0]!=="o"&&n[0]!=="O"||n[1]!=="n"&&n[1]!=="N")&&(n=Cx.get(n)||n,xo(e,n,a))}}function Ad(e,t,n,a,i,l){switch(n){case"style":ib(e,a,l);break;case"dangerouslySetInnerHTML":if(a!=null){if(typeof a!="object"||!("__html"in a))throw Error(R(61));if(n=a.__html,n!=null){if(i.children!=null)throw Error(R(60));e.innerHTML=n}}break;case"children":typeof a=="string"?fl(e,a):(typeof a=="number"||typeof a=="bigint")&&fl(e,""+a);break;case"onScroll":a!=null&&W("scroll",e);break;case"onScrollEnd":a!=null&&W("scrollend",e);break;case"onClick":a!=null&&(e.onclick=$n);break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"innerHTML":case"ref":break;case"innerText":case"textContent":break;default:if(!Py.hasOwnProperty(n))e:{if(n[0]==="o"&&n[1]==="n"&&(i=n.endsWith("Capture"),t=n.slice(2,i?n.length-7:void 0),l=e[Et]||null,l=l!=null?l[n]:null,typeof l=="function"&&e.removeEventListener(t,l,i),typeof a=="function")){typeof l!="function"&&l!==null&&(n in e?e[n]=null:e.hasAttribute(n)&&e.removeAttribute(n)),e.addEventListener(t,a,i);break e}n in e?e[n]=a:a===!0?e.setAttribute(n,""):xo(e,n,a)}}}function nt(e,t,n){switch(t){case"div":case"span":case"svg":case"path":case"a":case"g":case"p":case"li":break;case"img":W("error",e),W("load",e);var a=!1,i=!1,l;for(l in n)if(n.hasOwnProperty(l)){var r=n[l];if(r!=null)switch(l){case"src":a=!0;break;case"srcSet":i=!0;break;case"children":case"dangerouslySetInnerHTML":throw Error(R(137,t));default:pe(e,t,l,r,n,null)}}i&&pe(e,t,"srcSet",n.srcSet,n,null),a&&pe(e,t,"src",n.src,n,null);return;case"input":W("invalid",e);var s=l=r=i=null,o=null,u=null;for(a in n)if(n.hasOwnProperty(a)){var c=n[a];if(c!=null)switch(a){case"name":i=c;break;case"type":r=c;break;case"checked":o=c;break;case"defaultChecked":u=c;break;case"value":l=c;break;case"defaultValue":s=c;break;case"children":case"dangerouslySetInnerHTML":if(c!=null)throw Error(R(137,t));break;default:pe(e,t,a,c,n,null)}}tb(e,l,s,o,u,r,i,!1);return;case"select":W("invalid",e),a=r=l=null;for(i in n)if(n.hasOwnProperty(i)&&(s=n[i],s!=null))switch(i){case"value":l=s;break;case"defaultValue":r=s;break;case"multiple":a=s;default:pe(e,t,i,s,n,null)}t=l,n=r,e.multiple=!!a,t!=null?al(e,!!a,t,!1):n!=null&&al(e,!!a,n,!0);return;case"textarea":W("invalid",e),l=i=a=null;for(r in n)if(n.hasOwnProperty(r)&&(s=n[r],s!=null))switch(r){case"value":a=s;break;case"defaultValue":i=s;break;case"children":l=s;break;case"dangerouslySetInnerHTML":if(s!=null)throw Error(R(91));break;default:pe(e,t,r,s,n,null)}ab(e,a,i,l);return;case"option":for(o in n)n.hasOwnProperty(o)&&(a=n[o],a!=null)&&(o==="selected"?e.selected=a&&typeof a!="function"&&typeof a!="symbol":pe(e,t,o,a,n,null));return;case"dialog":W("beforetoggle",e),W("toggle",e),W("cancel",e),W("close",e);break;case"iframe":case"object":W("load",e);break;case"video":case"audio":for(a=0;a<qr.length;a++)W(qr[a],e);break;case"image":W("error",e),W("load",e);break;case"details":W("toggle",e);break;case"embed":case"source":case"link":W("error",e),W("load",e);case"area":case"base":case"br":case"col":case"hr":case"keygen":case"meta":case"param":case"track":case"wbr":case"menuitem":for(u in n)if(n.hasOwnProperty(u)&&(a=n[u],a!=null))switch(u){case"children":case"dangerouslySetInnerHTML":throw Error(R(137,t));default:pe(e,t,u,a,n,null)}return;default:if(qd(t)){for(c in n)n.hasOwnProperty(c)&&(a=n[c],a!==void 0&&Ad(e,t,c,a,n,void 0));return}}for(s in n)n.hasOwnProperty(s)&&(a=n[s],a!=null&&pe(e,t,s,a,n,null))}function nA(e,t,n,a){switch(t){case"div":case"span":case"svg":case"path":case"a":case"g":case"p":case"li":break;case"input":var i=null,l=null,r=null,s=null,o=null,u=null,c=null;for(p in n){var f=n[p];if(n.hasOwnProperty(p)&&f!=null)switch(p){case"checked":break;case"value":break;case"defaultValue":o=f;default:a.hasOwnProperty(p)||pe(e,t,p,null,a,f)}}for(var d in a){var p=a[d];if(f=n[d],a.hasOwnProperty(d)&&(p!=null||f!=null))switch(d){case"type":l=p;break;case"name":i=p;break;case"checked":u=p;break;case"defaultChecked":c=p;break;case"value":r=p;break;case"defaultValue":s=p;break;case"children":case"dangerouslySetInnerHTML":if(p!=null)throw Error(R(137,t));break;default:p!==f&&pe(e,t,d,p,a,f)}}Ff(e,r,s,o,u,c,l,i);return;case"select":p=r=s=d=null;for(l in n)if(o=n[l],n.hasOwnProperty(l)&&o!=null)switch(l){case"value":break;case"multiple":p=o;default:a.hasOwnProperty(l)||pe(e,t,l,null,a,o)}for(i in a)if(l=a[i],o=n[i],a.hasOwnProperty(i)&&(l!=null||o!=null))switch(i){case"value":d=l;break;case"defaultValue":s=l;break;case"multiple":r=l;default:l!==o&&pe(e,t,i,l,a,o)}t=s,n=r,a=p,d!=null?al(e,!!n,d,!1):!!a!=!!n&&(t!=null?al(e,!!n,t,!0):al(e,!!n,n?[]:"",!1));return;case"textarea":p=d=null;for(s in n)if(i=n[s],n.hasOwnProperty(s)&&i!=null&&!a.hasOwnProperty(s))switch(s){case"value":break;case"children":break;default:pe(e,t,s,null,a,i)}for(r in a)if(i=a[r],l=n[r],a.hasOwnProperty(r)&&(i!=null||l!=null))switch(r){case"value":d=i;break;case"defaultValue":p=i;break;case"children":break;case"dangerouslySetInnerHTML":if(i!=null)throw Error(R(91));break;default:i!==l&&pe(e,t,r,i,a,l)}nb(e,d,p);return;case"option":for(var v in n)d=n[v],n.hasOwnProperty(v)&&d!=null&&!a.hasOwnProperty(v)&&(v==="selected"?e.selected=!1:pe(e,t,v,null,a,d));for(o in a)d=a[o],p=n[o],a.hasOwnProperty(o)&&d!==p&&(d!=null||p!=null)&&(o==="selected"?e.selected=d&&typeof d!="function"&&typeof d!="symbol":pe(e,t,o,d,a,p));return;case"img":case"link":case"area":case"base":case"br":case"col":case"embed":case"hr":case"keygen":case"meta":case"param":case"source":case"track":case"wbr":case"menuitem":for(var S in n)d=n[S],n.hasOwnProperty(S)&&d!=null&&!a.hasOwnProperty(S)&&pe(e,t,S,null,a,d);for(u in a)if(d=a[u],p=n[u],a.hasOwnProperty(u)&&d!==p&&(d!=null||p!=null))switch(u){case"children":case"dangerouslySetInnerHTML":if(d!=null)throw Error(R(137,t));break;default:pe(e,t,u,d,a,p)}return;default:if(qd(t)){for(var x in n)d=n[x],n.hasOwnProperty(x)&&d!==void 0&&!a.hasOwnProperty(x)&&Ad(e,t,x,void 0,a,d);for(c in a)d=a[c],p=n[c],!a.hasOwnProperty(c)||d===p||d===void 0&&p===void 0||Ad(e,t,c,d,a,p);return}}for(var h in n)d=n[h],n.hasOwnProperty(h)&&d!=null&&!a.hasOwnProperty(h)&&pe(e,t,h,null,a,d);for(f in a)d=a[f],p=n[f],!a.hasOwnProperty(f)||d===p||d==null&&p==null||pe(e,t,f,d,a,p)}function by(e){switch(e){case"css":case"script":case"font":case"img":case"image":case"input":case"link":return!0;default:return!1}}function aA(){if(typeof performance.getEntriesByType=="function"){for(var e=0,t=0,n=performance.getEntriesByType("resource"),a=0;a<n.length;a++){var i=n[a],l=i.transferSize,r=i.initiatorType,s=i.duration;if(l&&s&&by(r)){for(r=0,s=i.responseEnd,a+=1;a<n.length;a++){var o=n[a],u=o.startTime;if(u>s)break;var c=o.transferSize,f=o.initiatorType;c&&by(f)&&(o=o.responseEnd,r+=c*(o<s?1:(s-u)/(o-u)))}if(--a,t+=8*(l+r)/(i.duration/1e3),e++,10<e)break}}if(0<e)return t/e/1e6}return navigator.connection&&(e=navigator.connection.downlink,typeof e=="number")?e:5}var kd=null,Rd=null;function ru(e){return e.nodeType===9?e:e.ownerDocument}function vy(e){switch(e){case"http://www.w3.org/2000/svg":return 1;case"http://www.w3.org/1998/Math/MathML":return 2;default:return 0}}function ov(e,t){if(e===0)switch(t){case"svg":return 1;case"math":return 2;default:return 0}return e===1&&t==="foreignObject"?0:e}function Od(e,t){return e==="textarea"||e==="noscript"||typeof t.children=="string"||typeof t.children=="number"||typeof t.children=="bigint"||typeof t.dangerouslySetInnerHTML=="object"&&t.dangerouslySetInnerHTML!==null&&t.dangerouslySetInnerHTML.__html!=null}var Hf=null;function iA(){var e=window.event;return e&&e.type==="popstate"?e===Hf?!1:(Hf=e,!0):(Hf=null,!1)}var uv=typeof setTimeout=="function"?setTimeout:void 0,lA=typeof clearTimeout=="function"?clearTimeout:void 0,Sy=typeof Promise=="function"?Promise:void 0,rA=typeof queueMicrotask=="function"?queueMicrotask:typeof Sy<"u"?function(e){return Sy.resolve(null).then(e).catch(sA)}:uv;function sA(e){setTimeout(function(){throw e})}function La(e){return e==="head"}function Ty(e,t){var n=t,a=0;do{var i=n.nextSibling;if(e.removeChild(n),i&&i.nodeType===8)if(n=i.data,n==="/$"||n==="/&"){if(a===0){e.removeChild(i),vl(t);return}a--}else if(n==="$"||n==="$?"||n==="$~"||n==="$!"||n==="&")a++;else if(n==="html")_r(e.ownerDocument.documentElement);else if(n==="head"){n=e.ownerDocument.head,_r(n);for(var l=n.firstChild;l;){var r=l.nextSibling,s=l.nodeName;l[Fr]||s==="SCRIPT"||s==="STYLE"||s==="LINK"&&l.rel.toLowerCase()==="stylesheet"||n.removeChild(l),l=r}}else n==="body"&&_r(e.ownerDocument.body);n=i}while(n);vl(t)}function xy(e,t){var n=e;e=0;do{var a=n.nextSibling;if(n.nodeType===1?t?(n._stashedDisplay=n.style.display,n.style.display="none"):(n.style.display=n._stashedDisplay||"",n.getAttribute("style")===""&&n.removeAttribute("style")):n.nodeType===3&&(t?(n._stashedText=n.nodeValue,n.nodeValue=""):n.nodeValue=n._stashedText||""),a&&a.nodeType===8)if(n=a.data,n==="/$"){if(e===0)break;e--}else n!=="$"&&n!=="$?"&&n!=="$~"&&n!=="$!"||e++;n=a}while(n)}function wd(e){var t=e.firstChild;for(t&&t.nodeType===10&&(t=t.nextSibling);t;){var n=t;switch(t=t.nextSibling,n.nodeName){case"HTML":case"HEAD":case"BODY":wd(n),jd(n);continue;case"SCRIPT":case"STYLE":continue;case"LINK":if(n.rel.toLowerCase()==="stylesheet")continue}e.removeChild(n)}}function oA(e,t,n,a){for(;e.nodeType===1;){var i=n;if(e.nodeName.toLowerCase()!==t.toLowerCase()){if(!a&&(e.nodeName!=="INPUT"||e.type!=="hidden"))break}else if(a){if(!e[Fr])switch(t){case"meta":if(!e.hasAttribute("itemprop"))break;return e;case"link":if(l=e.getAttribute("rel"),l==="stylesheet"&&e.hasAttribute("data-precedence"))break;if(l!==i.rel||e.getAttribute("href")!==(i.href==null||i.href===""?null:i.href)||e.getAttribute("crossorigin")!==(i.crossOrigin==null?null:i.crossOrigin)||e.getAttribute("title")!==(i.title==null?null:i.title))break;return e;case"style":if(e.hasAttribute("data-precedence"))break;return e;case"script":if(l=e.getAttribute("src"),(l!==(i.src==null?null:i.src)||e.getAttribute("type")!==(i.type==null?null:i.type)||e.getAttribute("crossorigin")!==(i.crossOrigin==null?null:i.crossOrigin))&&l&&e.hasAttribute("async")&&!e.hasAttribute("itemprop"))break;return e;default:return e}}else if(t==="input"&&e.type==="hidden"){var l=i.name==null?null:""+i.name;if(i.type==="hidden"&&e.getAttribute("name")===l)return e}else return e;if(e=Ft(e.nextSibling),e===null)break}return null}function uA(e,t,n){if(t==="")return null;for(;e.nodeType!==3;)if((e.nodeType!==1||e.nodeName!=="INPUT"||e.type!=="hidden")&&!n||(e=Ft(e.nextSibling),e===null))return null;return e}function cv(e,t){for(;e.nodeType!==8;)if((e.nodeType!==1||e.nodeName!=="INPUT"||e.type!=="hidden")&&!t||(e=Ft(e.nextSibling),e===null))return null;return e}function Nd(e){return e.data==="$?"||e.data==="$~"}function _d(e){return e.data==="$!"||e.data==="$?"&&e.ownerDocument.readyState!=="loading"}function cA(e,t){var n=e.ownerDocument;if(e.data==="$~")e._reactRetry=t;else if(e.data!=="$?"||n.readyState!=="loading")t();else{var a=function(){t(),n.removeEventListener("DOMContentLoaded",a)};n.addEventListener("DOMContentLoaded",a),e._reactRetry=a}}function Ft(e){for(;e!=null;e=e.nextSibling){var t=e.nodeType;if(t===1||t===3)break;if(t===8){if(t=e.data,t==="$"||t==="$!"||t==="$?"||t==="$~"||t==="&"||t==="F!"||t==="F")break;if(t==="/$"||t==="/&")return null}}return e}var Cd=null;function Ey(e){e=e.nextSibling;for(var t=0;e;){if(e.nodeType===8){var n=e.data;if(n==="/$"||n==="/&"){if(t===0)return Ft(e.nextSibling);t--}else n!=="$"&&n!=="$!"&&n!=="$?"&&n!=="$~"&&n!=="&"||t++}e=e.nextSibling}return null}function Ay(e){e=e.previousSibling;for(var t=0;e;){if(e.nodeType===8){var n=e.data;if(n==="$"||n==="$!"||n==="$?"||n==="$~"||n==="&"){if(t===0)return e;t--}else n!=="/$"&&n!=="/&"||t++}e=e.previousSibling}return null}function fv(e,t,n){switch(t=ru(n),e){case"html":if(e=t.documentElement,!e)throw Error(R(452));return e;case"head":if(e=t.head,!e)throw Error(R(453));return e;case"body":if(e=t.body,!e)throw Error(R(454));return e;default:throw Error(R(451))}}function _r(e){for(var t=e.attributes;t.length;)e.removeAttributeNode(t[0]);jd(e)}var Jt=new Map,ky=new Set;function su(e){return typeof e.getRootNode=="function"?e.getRootNode():e.nodeType===9?e:e.ownerDocument}var ta=oe.d;oe.d={f:fA,r:dA,D:hA,C:pA,L:mA,m:gA,X:bA,S:yA,M:vA};function fA(){var e=ta.f(),t=Au();return e||t}function dA(e){var t=Tl(e);t!==null&&t.tag===5&&t.type==="form"?i0(t):ta.r(e)}var kl=typeof document>"u"?null:document;function dv(e,t,n){var a=kl;if(a&&typeof t=="string"&&t){var i=$t(t);i='link[rel="'+e+'"][href="'+i+'"]',typeof n=="string"&&(i+='[crossorigin="'+n+'"]'),ky.has(i)||(ky.add(i),e={rel:e,crossOrigin:n,href:t},a.querySelector(i)===null&&(t=a.createElement("link"),nt(t,"link",e),Fe(t),a.head.appendChild(t)))}}function hA(e){ta.D(e),dv("dns-prefetch",e,null)}function pA(e,t){ta.C(e,t),dv("preconnect",e,t)}function mA(e,t,n){ta.L(e,t,n);var a=kl;if(a&&e&&t){var i='link[rel="preload"][as="'+$t(t)+'"]';t==="image"&&n&&n.imageSrcSet?(i+='[imagesrcset="'+$t(n.imageSrcSet)+'"]',typeof n.imageSizes=="string"&&(i+='[imagesizes="'+$t(n.imageSizes)+'"]')):i+='[href="'+$t(e)+'"]';var l=i;switch(t){case"style":l=bl(e);break;case"script":l=Rl(e)}Jt.has(l)||(e=Oe({rel:"preload",href:t==="image"&&n&&n.imageSrcSet?void 0:e,as:t},n),Jt.set(l,e),a.querySelector(i)!==null||t==="style"&&a.querySelector(ts(l))||t==="script"&&a.querySelector(ns(l))||(t=a.createElement("link"),nt(t,"link",e),Fe(t),a.head.appendChild(t)))}}function gA(e,t){ta.m(e,t);var n=kl;if(n&&e){var a=t&&typeof t.as=="string"?t.as:"script",i='link[rel="modulepreload"][as="'+$t(a)+'"][href="'+$t(e)+'"]',l=i;switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":l=Rl(e)}if(!Jt.has(l)&&(e=Oe({rel:"modulepreload",href:e},t),Jt.set(l,e),n.querySelector(i)===null)){switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(n.querySelector(ns(l)))return}a=n.createElement("link"),nt(a,"link",e),Fe(a),n.head.appendChild(a)}}}function yA(e,t,n){ta.S(e,t,n);var a=kl;if(a&&e){var i=nl(a).hoistableStyles,l=bl(e);t=t||"default";var r=i.get(l);if(!r){var s={loading:0,preload:null};if(r=a.querySelector(ts(l)))s.loading=5;else{e=Oe({rel:"stylesheet",href:e,"data-precedence":t},n),(n=Jt.get(l))&&Ah(e,n);var o=r=a.createElement("link");Fe(o),nt(o,"link",e),o._p=new Promise(function(u,c){o.onload=u,o.onerror=c}),o.addEventListener("load",function(){s.loading|=1}),o.addEventListener("error",function(){s.loading|=2}),s.loading|=4,zo(r,t,a)}r={type:"stylesheet",instance:r,count:1,state:s},i.set(l,r)}}}function bA(e,t){ta.X(e,t);var n=kl;if(n&&e){var a=nl(n).hoistableScripts,i=Rl(e),l=a.get(i);l||(l=n.querySelector(ns(i)),l||(e=Oe({src:e,async:!0},t),(t=Jt.get(i))&&kh(e,t),l=n.createElement("script"),Fe(l),nt(l,"link",e),n.head.appendChild(l)),l={type:"script",instance:l,count:1,state:null},a.set(i,l))}}function vA(e,t){ta.M(e,t);var n=kl;if(n&&e){var a=nl(n).hoistableScripts,i=Rl(e),l=a.get(i);l||(l=n.querySelector(ns(i)),l||(e=Oe({src:e,async:!0,type:"module"},t),(t=Jt.get(i))&&kh(e,t),l=n.createElement("script"),Fe(l),nt(l,"link",e),n.head.appendChild(l)),l={type:"script",instance:l,count:1,state:null},a.set(i,l))}}function Ry(e,t,n,a){var i=(i=Ta.current)?su(i):null;if(!i)throw Error(R(446));switch(e){case"meta":case"title":return null;case"style":return typeof n.precedence=="string"&&typeof n.href=="string"?(t=bl(n.href),n=nl(i).hoistableStyles,a=n.get(t),a||(a={type:"style",instance:null,count:0,state:null},n.set(t,a)),a):{type:"void",instance:null,count:0,state:null};case"link":if(n.rel==="stylesheet"&&typeof n.href=="string"&&typeof n.precedence=="string"){e=bl(n.href);var l=nl(i).hoistableStyles,r=l.get(e);if(r||(i=i.ownerDocument||i,r={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},l.set(e,r),(l=i.querySelector(ts(e)))&&!l._p&&(r.instance=l,r.state.loading=5),Jt.has(e)||(n={rel:"preload",as:"style",href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},Jt.set(e,n),l||SA(i,e,n,r.state))),t&&a===null)throw Error(R(528,""));return r}if(t&&a!==null)throw Error(R(529,""));return null;case"script":return t=n.async,n=n.src,typeof n=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(t=Rl(n),n=nl(i).hoistableScripts,a=n.get(t),a||(a={type:"script",instance:null,count:0,state:null},n.set(t,a)),a):{type:"void",instance:null,count:0,state:null};default:throw Error(R(444,e))}}function bl(e){return'href="'+$t(e)+'"'}function ts(e){return'link[rel="stylesheet"]['+e+"]"}function hv(e){return Oe({},e,{"data-precedence":e.precedence,precedence:null})}function SA(e,t,n,a){e.querySelector('link[rel="preload"][as="style"]['+t+"]")?a.loading=1:(t=e.createElement("link"),a.preload=t,t.addEventListener("load",function(){return a.loading|=1}),t.addEventListener("error",function(){return a.loading|=2}),nt(t,"link",n),Fe(t),e.head.appendChild(t))}function Rl(e){return'[src="'+$t(e)+'"]'}function ns(e){return"script[async]"+e}function Oy(e,t,n){if(t.count++,t.instance===null)switch(t.type){case"style":var a=e.querySelector('style[data-href~="'+$t(n.href)+'"]');if(a)return t.instance=a,Fe(a),a;var i=Oe({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return a=(e.ownerDocument||e).createElement("style"),Fe(a),nt(a,"style",i),zo(a,n.precedence,e),t.instance=a;case"stylesheet":i=bl(n.href);var l=e.querySelector(ts(i));if(l)return t.state.loading|=4,t.instance=l,Fe(l),l;a=hv(n),(i=Jt.get(i))&&Ah(a,i),l=(e.ownerDocument||e).createElement("link"),Fe(l);var r=l;return r._p=new Promise(function(s,o){r.onload=s,r.onerror=o}),nt(l,"link",a),t.state.loading|=4,zo(l,n.precedence,e),t.instance=l;case"script":return l=Rl(n.src),(i=e.querySelector(ns(l)))?(t.instance=i,Fe(i),i):(a=n,(i=Jt.get(l))&&(a=Oe({},n),kh(a,i)),e=e.ownerDocument||e,i=e.createElement("script"),Fe(i),nt(i,"link",a),e.head.appendChild(i),t.instance=i);case"void":return null;default:throw Error(R(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(a=t.instance,t.state.loading|=4,zo(a,n.precedence,e));return t.instance}function zo(e,t,n){for(var a=n.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),i=a.length?a[a.length-1]:null,l=i,r=0;r<a.length;r++){var s=a[r];if(s.dataset.precedence===t)l=s;else if(l!==i)break}l?l.parentNode.insertBefore(e,l.nextSibling):(t=n.nodeType===9?n.head:n,t.insertBefore(e,t.firstChild))}function Ah(e,t){e.crossOrigin==null&&(e.crossOrigin=t.crossOrigin),e.referrerPolicy==null&&(e.referrerPolicy=t.referrerPolicy),e.title==null&&(e.title=t.title)}function kh(e,t){e.crossOrigin==null&&(e.crossOrigin=t.crossOrigin),e.referrerPolicy==null&&(e.referrerPolicy=t.referrerPolicy),e.integrity==null&&(e.integrity=t.integrity)}var Mo=null;function wy(e,t,n){if(Mo===null){var a=new Map,i=Mo=new Map;i.set(n,a)}else i=Mo,a=i.get(n),a||(a=new Map,i.set(n,a));if(a.has(e))return a;for(a.set(e,null),n=n.getElementsByTagName(e),i=0;i<n.length;i++){var l=n[i];if(!(l[Fr]||l[We]||e==="link"&&l.getAttribute("rel")==="stylesheet")&&l.namespaceURI!=="http://www.w3.org/2000/svg"){var r=l.getAttribute(t)||"";r=e+r;var s=a.get(r);s?s.push(l):a.set(r,[l])}}return a}function Ny(e,t,n){e=e.ownerDocument||e,e.head.insertBefore(n,t==="title"?e.querySelector("head > title"):null)}function TA(e,t,n){if(n===1||t.itemProp!=null)return!1;switch(e){case"meta":case"title":return!0;case"style":if(typeof t.precedence!="string"||typeof t.href!="string"||t.href==="")break;return!0;case"link":if(typeof t.rel!="string"||typeof t.href!="string"||t.href===""||t.onLoad||t.onError)break;return t.rel==="stylesheet"?(e=t.disabled,typeof t.precedence=="string"&&e==null):!0;case"script":if(t.async&&typeof t.async!="function"&&typeof t.async!="symbol"&&!t.onLoad&&!t.onError&&t.src&&typeof t.src=="string")return!0}return!1}function pv(e){return!(e.type==="stylesheet"&&(e.state.loading&3)===0)}function xA(e,t,n,a){if(n.type==="stylesheet"&&(typeof a.media!="string"||matchMedia(a.media).matches!==!1)&&(n.state.loading&4)===0){if(n.instance===null){var i=bl(a.href),l=t.querySelector(ts(i));if(l){t=l._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(e.count++,e=ou.bind(e),t.then(e,e)),n.state.loading|=4,n.instance=l,Fe(l);return}l=t.ownerDocument||t,a=hv(a),(i=Jt.get(i))&&Ah(a,i),l=l.createElement("link"),Fe(l);var r=l;r._p=new Promise(function(s,o){r.onload=s,r.onerror=o}),nt(l,"link",a),n.instance=l}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(n,t),(t=n.state.preload)&&(n.state.loading&3)===0&&(e.count++,n=ou.bind(e),t.addEventListener("load",n),t.addEventListener("error",n))}}var Bf=0;function EA(e,t){return e.stylesheets&&e.count===0&&Lo(e,e.stylesheets),0<e.count||0<e.imgCount?function(n){var a=setTimeout(function(){if(e.stylesheets&&Lo(e,e.stylesheets),e.unsuspend){var l=e.unsuspend;e.unsuspend=null,l()}},6e4+t);0<e.imgBytes&&Bf===0&&(Bf=62500*aA());var i=setTimeout(function(){if(e.waitingForImages=!1,e.count===0&&(e.stylesheets&&Lo(e,e.stylesheets),e.unsuspend)){var l=e.unsuspend;e.unsuspend=null,l()}},(e.imgBytes>Bf?50:800)+t);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(a),clearTimeout(i)}}:null}function ou(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Lo(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var uu=null;function Lo(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,uu=new Map,t.forEach(AA,e),uu=null,ou.call(e))}function AA(e,t){if(!(t.state.loading&4)){var n=uu.get(e);if(n)var a=n.get(null);else{n=new Map,uu.set(e,n);for(var i=e.querySelectorAll("link[data-precedence],style[data-precedence]"),l=0;l<i.length;l++){var r=i[l];(r.nodeName==="LINK"||r.getAttribute("media")!=="not all")&&(n.set(r.dataset.precedence,r),a=r)}a&&n.set(null,a)}i=t.instance,r=i.getAttribute("data-precedence"),l=n.get(r)||a,l===a&&n.set(null,i),n.set(r,i),this.count++,a=ou.bind(this),i.addEventListener("load",a),i.addEventListener("error",a),l?l.parentNode.insertBefore(i,l.nextSibling):(e=e.nodeType===9?e.head:e,e.insertBefore(i,e.firstChild)),t.state.loading|=4}}var Gr={$$typeof:Xn,Provider:null,Consumer:null,_currentValue:ti,_currentValue2:ti,_threadCount:0};function kA(e,t,n,a,i,l,r,s,o){this.tag=1,this.containerInfo=e,this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.next=this.pendingContext=this.context=this.cancelPendingCommit=null,this.callbackPriority=0,this.expirationTimes=cf(-1),this.entangledLanes=this.shellSuspendCounter=this.errorRecoveryDisabledLanes=this.expiredLanes=this.warmLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=cf(0),this.hiddenUpdates=cf(null),this.identifierPrefix=a,this.onUncaughtError=i,this.onCaughtError=l,this.onRecoverableError=r,this.pooledCache=null,this.pooledCacheLanes=0,this.formState=o,this.incompleteTransitions=new Map}function mv(e,t,n,a,i,l,r,s,o,u,c,f){return e=new kA(e,t,n,r,o,u,c,f,s),t=1,l===!0&&(t|=24),l=_t(3,null,null,t),e.current=l,l.stateNode=e,t=Id(),t.refCount++,e.pooledCache=t,t.refCount++,l.memoizedState={element:a,isDehydrated:n,cache:t},eh(l),e}function gv(e){return e?(e=Pi,e):Pi}function yv(e,t,n,a,i,l){i=gv(i),a.context===null?a.context=i:a.pendingContext=i,a=Ea(t),a.payload={element:n},l=l===void 0?null:l,l!==null&&(a.callback=l),n=Aa(e,a,t),n!==null&&(xt(n,e,t),xr(n,e,t))}function _y(e,t){if(e=e.memoizedState,e!==null&&e.dehydrated!==null){var n=e.retryLane;e.retryLane=n!==0&&n<t?n:t}}function Rh(e,t){_y(e,t),(e=e.alternate)&&_y(e,t)}function bv(e){if(e.tag===13||e.tag===31){var t=pi(e,67108864);t!==null&&xt(t,e,67108864),Rh(e,67108864)}}function Cy(e){if(e.tag===13||e.tag===31){var t=Lt();t=Hd(t);var n=pi(e,t);n!==null&&xt(n,e,t),Rh(e,t)}}var cu=!0;function RA(e,t,n,a){var i=$.T;$.T=null;var l=oe.p;try{oe.p=2,Oh(e,t,n,a)}finally{oe.p=l,$.T=i}}function OA(e,t,n,a){var i=$.T;$.T=null;var l=oe.p;try{oe.p=8,Oh(e,t,n,a)}finally{oe.p=l,$.T=i}}function Oh(e,t,n,a){if(cu){var i=Dd(a);if(i===null)Uf(e,t,a,fu,n),Dy(e,a);else if(NA(i,e,t,n,a))a.stopPropagation();else if(Dy(e,a),t&4&&-1<wA.indexOf(e)){for(;i!==null;){var l=Tl(i);if(l!==null)switch(l.tag){case 3:if(l=l.stateNode,l.current.memoizedState.isDehydrated){var r=Pa(l.pendingLanes);if(r!==0){var s=l;for(s.pendingLanes|=2,s.entangledLanes|=2;r;){var o=1<<31-Mt(r);s.entanglements[1]|=o,r&=~o}kn(l),(se&6)===0&&(eu=Dt()+500,es(0,!1))}}break;case 31:case 13:s=pi(l,2),s!==null&&xt(s,l,2),Au(),Rh(l,2)}if(l=Dd(a),l===null&&Uf(e,t,a,fu,n),l===i)break;i=l}i!==null&&a.stopPropagation()}else Uf(e,t,a,null,n)}}function Dd(e){return e=Yd(e),wh(e)}var fu=null;function wh(e){if(fu=null,e=Qi(e),e!==null){var t=$r(e);if(t===null)e=null;else{var n=t.tag;if(n===13){if(e=By(t),e!==null)return e;e=null}else if(n===31){if(e=jy(t),e!==null)return e;e=null}else if(n===3){if(t.stateNode.current.memoizedState.isDehydrated)return t.tag===3?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null)}}return fu=e,null}function vv(e){switch(e){case"beforetoggle":case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"toggle":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 2;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 8;case"message":switch(mx()){case Vy:return 2;case Xy:return 8;case qo:case gx:return 32;case $y:return 268435456;default:return 32}default:return 32}}var zd=!1,Oa=null,wa=null,Na=null,Vr=new Map,Xr=new Map,ma=[],wA="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset".split(" ");function Dy(e,t){switch(e){case"focusin":case"focusout":Oa=null;break;case"dragenter":case"dragleave":wa=null;break;case"mouseover":case"mouseout":Na=null;break;case"pointerover":case"pointerout":Vr.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":Xr.delete(t.pointerId)}}function fr(e,t,n,a,i,l){return e===null||e.nativeEvent!==l?(e={blockedOn:t,domEventName:n,eventSystemFlags:a,nativeEvent:l,targetContainers:[i]},t!==null&&(t=Tl(t),t!==null&&bv(t)),e):(e.eventSystemFlags|=a,t=e.targetContainers,i!==null&&t.indexOf(i)===-1&&t.push(i),e)}function NA(e,t,n,a,i){switch(t){case"focusin":return Oa=fr(Oa,e,t,n,a,i),!0;case"dragenter":return wa=fr(wa,e,t,n,a,i),!0;case"mouseover":return Na=fr(Na,e,t,n,a,i),!0;case"pointerover":var l=i.pointerId;return Vr.set(l,fr(Vr.get(l)||null,e,t,n,a,i)),!0;case"gotpointercapture":return l=i.pointerId,Xr.set(l,fr(Xr.get(l)||null,e,t,n,a,i)),!0}return!1}function Sv(e){var t=Qi(e.target);if(t!==null){var n=$r(t);if(n!==null){if(t=n.tag,t===13){if(t=By(n),t!==null){e.blockedOn=t,mg(e.priority,function(){Cy(n)});return}}else if(t===31){if(t=jy(n),t!==null){e.blockedOn=t,mg(e.priority,function(){Cy(n)});return}}else if(t===3&&n.stateNode.current.memoizedState.isDehydrated){e.blockedOn=n.tag===3?n.stateNode.containerInfo:null;return}}}e.blockedOn=null}function Uo(e){if(e.blockedOn!==null)return!1;for(var t=e.targetContainers;0<t.length;){var n=Dd(e.nativeEvent);if(n===null){n=e.nativeEvent;var a=new n.constructor(n.type,n);If=a,n.target.dispatchEvent(a),If=null}else return t=Tl(n),t!==null&&bv(t),e.blockedOn=n,!1;t.shift()}return!0}function zy(e,t,n){Uo(e)&&n.delete(t)}function _A(){zd=!1,Oa!==null&&Uo(Oa)&&(Oa=null),wa!==null&&Uo(wa)&&(wa=null),Na!==null&&Uo(Na)&&(Na=null),Vr.forEach(zy),Xr.forEach(zy)}function So(e,t){e.blockedOn===t&&(e.blockedOn=null,zd||(zd=!0,Xe.unstable_scheduleCallback(Xe.unstable_NormalPriority,_A)))}var To=null;function My(e){To!==e&&(To=e,Xe.unstable_scheduleCallback(Xe.unstable_NormalPriority,function(){To===e&&(To=null);for(var t=0;t<e.length;t+=3){var n=e[t],a=e[t+1],i=e[t+2];if(typeof a!="function"){if(wh(a||n)===null)continue;break}var l=Tl(n);l!==null&&(e.splice(t,3),t-=3,hd(l,{pending:!0,data:i,method:n.method,action:a},a,i))}}))}function vl(e){function t(o){return So(o,e)}Oa!==null&&So(Oa,e),wa!==null&&So(wa,e),Na!==null&&So(Na,e),Vr.forEach(t),Xr.forEach(t);for(var n=0;n<ma.length;n++){var a=ma[n];a.blockedOn===e&&(a.blockedOn=null)}for(;0<ma.length&&(n=ma[0],n.blockedOn===null);)Sv(n),n.blockedOn===null&&ma.shift();if(n=(e.ownerDocument||e).$$reactFormReplay,n!=null)for(a=0;a<n.length;a+=3){var i=n[a],l=n[a+1],r=i[Et]||null;if(typeof l=="function")r||My(n);else if(r){var s=null;if(l&&l.hasAttribute("formAction")){if(i=l,r=l[Et]||null)s=r.formAction;else if(wh(i)!==null)continue}else s=r.action;typeof s=="function"?n[a+1]=s:(n.splice(a,3),a-=3),My(n)}}}function Tv(){function e(l){l.canIntercept&&l.info==="react-transition"&&l.intercept({handler:function(){return new Promise(function(r){return i=r})},focusReset:"manual",scroll:"manual"})}function t(){i!==null&&(i(),i=null),a||setTimeout(n,20)}function n(){if(!a&&!navigation.transition){var l=navigation.currentEntry;l&&l.url!=null&&navigation.navigate(l.url,{state:l.getState(),info:"react-transition",history:"replace"})}}if(typeof navigation=="object"){var a=!1,i=null;return navigation.addEventListener("navigate",e),navigation.addEventListener("navigatesuccess",t),navigation.addEventListener("navigateerror",t),setTimeout(n,100),function(){a=!0,navigation.removeEventListener("navigate",e),navigation.removeEventListener("navigatesuccess",t),navigation.removeEventListener("navigateerror",t),i!==null&&(i(),i=null)}}}function Nh(e){this._internalRoot=e}Ou.prototype.render=Nh.prototype.render=function(e){var t=this._internalRoot;if(t===null)throw Error(R(409));var n=t.current,a=Lt();yv(n,a,e,t,null,null)};Ou.prototype.unmount=Nh.prototype.unmount=function(){var e=this._internalRoot;if(e!==null){this._internalRoot=null;var t=e.containerInfo;yv(e.current,2,null,e,null,null),Au(),t[Sl]=null}};function Ou(e){this._internalRoot=e}Ou.prototype.unstable_scheduleHydration=function(e){if(e){var t=Jy();e={blockedOn:null,target:e,priority:t};for(var n=0;n<ma.length&&t!==0&&t<ma[n].priority;n++);ma.splice(n,0,e),n===0&&Sv(e)}};var Ly=Uy.version;if(Ly!=="19.2.6")throw Error(R(527,Ly,"19.2.6"));oe.findDOMNode=function(e){var t=e._reactInternals;if(t===void 0)throw typeof e.render=="function"?Error(R(188)):(e=Object.keys(e).join(","),Error(R(268,e)));return e=ox(t),e=e!==null?qy(e):null,e=e===null?null:e.stateNode,e};var CA={bundleType:0,version:"19.2.6",rendererPackageName:"react-dom",currentDispatcherRef:$,reconcilerVersion:"19.2.6"};if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&(dr=__REACT_DEVTOOLS_GLOBAL_HOOK__,!dr.isDisabled&&dr.supportsFiber))try{Qr=dr.inject(CA),zt=dr}catch(e){}var dr;wu.createRoot=function(e,t){if(!Hy(e))throw Error(R(299));var n=!1,a="",i=d0,l=h0,r=p0;return t!=null&&(t.unstable_strictMode===!0&&(n=!0),t.identifierPrefix!==void 0&&(a=t.identifierPrefix),t.onUncaughtError!==void 0&&(i=t.onUncaughtError),t.onCaughtError!==void 0&&(l=t.onCaughtError),t.onRecoverableError!==void 0&&(r=t.onRecoverableError)),t=mv(e,1,!1,null,null,n,a,null,i,l,r,Tv),e[Sl]=t.current,Eh(e),new Nh(t)};wu.hydrateRoot=function(e,t,n){if(!Hy(e))throw Error(R(299));var a=!1,i="",l=d0,r=h0,s=p0,o=null;return n!=null&&(n.unstable_strictMode===!0&&(a=!0),n.identifierPrefix!==void 0&&(i=n.identifierPrefix),n.onUncaughtError!==void 0&&(l=n.onUncaughtError),n.onCaughtError!==void 0&&(r=n.onCaughtError),n.onRecoverableError!==void 0&&(s=n.onRecoverableError),n.formState!==void 0&&(o=n.formState)),t=mv(e,1,!0,t,n!=null?n:null,a,i,o,l,r,s,Tv),t.context=gv(null),n=t.current,a=Lt(),a=Hd(a),i=Ea(a),i.callback=null,Aa(n,i,a),n=a,t.current.lanes=n,Kr(t,n),kn(t),e[Sl]=t.current,Eh(e),new Ou(t)};wu.version="19.2.6"});var kv=Ot((EN,Av)=>{"use strict";function Ev(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Ev)}catch(e){console.error(e)}}Ev(),Av.exports=xv()});var mS=Ot(Qu=>{"use strict";var ek=Symbol.for("react.transitional.element"),tk=Symbol.for("react.fragment");function pS(e,t,n){var a=null;if(n!==void 0&&(a=""+n),t.key!==void 0&&(a=""+t.key),"key"in t){n={};for(var i in t)i!=="key"&&(n[i]=t[i])}else n=t;return t=n.ref,{$$typeof:ek,type:e,key:a,ref:t!==void 0?t:null,props:n}}Qu.Fragment=tk;Qu.jsx=pS;Qu.jsxs=pS});var Ue=Ot((H2,gS)=>{"use strict";gS.exports=mS()});var Q=e=>typeof e=="string",Ql=()=>{let e,t,n=new Promise((a,i)=>{e=a,t=i});return n.resolve=e,n.reject=t,n},jp=e=>e==null?"":String(e),z1=(e,t,n)=>{e.forEach(a=>{t[a]&&(n[a]=t[a])})},M1=/###/g,qp=e=>e&&e.includes("###")?e.replace(M1,"."):e,Yp=e=>!e||Q(e),Zl=(e,t,n)=>{let a=Q(t)?t.split("."):t,i=0;for(;i<a.length-1;){if(Yp(e))return{};let l=qp(a[i]);!e[l]&&n&&(e[l]=new n),Object.prototype.hasOwnProperty.call(e,l)?e=e[l]:e={},++i}return Yp(e)?{}:{obj:e,k:qp(a[i])}},Gp=(e,t,n)=>{let{obj:a,k:i}=Zl(e,t,Object);if(a!==void 0||t.length===1){a[i]=n;return}let l=t[t.length-1],r=t.slice(0,t.length-1),s=Zl(e,r,Object);for(;s.obj===void 0&&r.length;)l="".concat(r[r.length-1],".").concat(l),r=r.slice(0,r.length-1),s=Zl(e,r,Object),s!=null&&s.obj&&typeof s.obj["".concat(s.k,".").concat(l)]<"u"&&(s.obj=void 0);s.obj["".concat(s.k,".").concat(l)]=n},L1=(e,t,n,a)=>{let{obj:i,k:l}=Zl(e,t,Object);i[l]=i[l]||[],i[l].push(n)},Ls=(e,t)=>{let{obj:n,k:a}=Zl(e,t);if(n&&Object.prototype.hasOwnProperty.call(n,a))return n[a]},U1=(e,t,n)=>{let a=Ls(e,n);return a!==void 0?a:Ls(t,n)},Kp=(e,t,n)=>{for(let a in t)a!=="__proto__"&&a!=="constructor"&&(a in e?Q(e[a])||e[a]instanceof String||Q(t[a])||t[a]instanceof String?n&&(e[a]=t[a]):Kp(e[a],t[a],n):e[a]=t[a]);return e},Ln=e=>e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&"),H1={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"},B1=e=>Q(e)?e.replace(/[&<>"'\/]/g,t=>H1[t]):e,Rc=class{constructor(t){this.capacity=t,this.regExpMap=new Map,this.regExpQueue=[]}getRegExp(t){let n=this.regExpMap.get(t);if(n!==void 0)return n;let a=new RegExp(t);return this.regExpQueue.length===this.capacity&&this.regExpMap.delete(this.regExpQueue.shift()),this.regExpMap.set(t,a),this.regExpQueue.push(t),a}},j1=[" ",",","?","!",";"],q1=new Rc(20),Y1=(e,t,n)=>{t=t||"",n=n||"";let a=j1.filter(r=>!t.includes(r)&&!n.includes(r));if(a.length===0)return!0;let i=q1.getRegExp("(".concat(a.map(r=>r==="?"?"\\?":r).join("|"),")")),l=!i.test(e);if(!l){let r=e.indexOf(n);r>0&&!i.test(e.substring(0,r))&&(l=!0)}return l},Oc=(e,t,n=".")=>{if(!e)return;if(e[t])return Object.prototype.hasOwnProperty.call(e,t)?e[t]:void 0;let a=t.split(n),i=e;for(let l=0;l<a.length;){if(!i||typeof i!="object")return;let r,s="";for(let o=l;o<a.length;++o)if(o!==l&&(s+=n),s+=a[o],r=i[s],r!==void 0){if(["string","number","boolean"].includes(typeof r)&&o<a.length-1)continue;l+=o-l+1;break}i=r}return i},Kl=e=>e==null?void 0:e.replace(/_/g,"-"),G1={type:"logger",log(e){this.output("log",e)},warn(e){this.output("warn",e)},error(e){this.output("error",e)},output(e,t){var n,a;(a=(n=console==null?void 0:console[e])==null?void 0:n.apply)==null||a.call(n,console,t)}},wc=class e{constructor(t,n={}){this.init(t,n)}init(t,n={}){this.prefix=n.prefix||"i18next:",this.logger=t||G1,this.options=n,this.debug=n.debug}log(...t){return this.forward(t,"log","",!0)}warn(...t){return this.forward(t,"warn","",!0)}error(...t){return this.forward(t,"error","")}deprecate(...t){return this.forward(t,"warn","WARNING DEPRECATED: ",!0)}forward(t,n,a,i){return i&&!this.debug?null:(t=t.map(l=>Q(l)?l.replace(/[\r\n\x00-\x1F\x7F]/g," "):l),Q(t[0])&&(t[0]="".concat(a).concat(this.prefix," ").concat(t[0])),this.logger[n](t))}create(t){return new e(this.logger,T({prefix:"".concat(this.prefix,":").concat(t,":")},this.options))}clone(t){return t=t||this.options,t.prefix=t.prefix||this.prefix,new e(this.logger,t)}},yn=new wc,Ni=class{constructor(){this.observers={}}on(t,n){return t.split(" ").forEach(a=>{this.observers[a]||(this.observers[a]=new Map);let i=this.observers[a].get(n)||0;this.observers[a].set(n,i+1)}),this}off(t,n){if(this.observers[t]){if(!n){delete this.observers[t];return}this.observers[t].delete(n)}}once(t,n){let a=(...i)=>{n(...i),this.off(t,a)};return this.on(t,a),this}emit(t,...n){this.observers[t]&&Array.from(this.observers[t].entries()).forEach(([i,l])=>{for(let r=0;r<l;r++)i(...n)}),this.observers["*"]&&Array.from(this.observers["*"].entries()).forEach(([i,l])=>{for(let r=0;r<l;r++)i(t,...n)})}},Us=class extends Ni{constructor(t,n={ns:["translation"],defaultNS:"translation"}){super(),this.data=t||{},this.options=n,this.options.keySeparator===void 0&&(this.options.keySeparator="."),this.options.ignoreJSONStructure===void 0&&(this.options.ignoreJSONStructure=!0)}addNamespaces(t){this.options.ns.includes(t)||this.options.ns.push(t)}removeNamespaces(t){let n=this.options.ns.indexOf(t);n>-1&&this.options.ns.splice(n,1)}getResource(t,n,a,i={}){var u,c;let l=i.keySeparator!==void 0?i.keySeparator:this.options.keySeparator,r=i.ignoreJSONStructure!==void 0?i.ignoreJSONStructure:this.options.ignoreJSONStructure,s;t.includes(".")?s=t.split("."):(s=[t,n],a&&(Array.isArray(a)?s.push(...a):Q(a)&&l?s.push(...a.split(l)):s.push(a)));let o=Ls(this.data,s);return!o&&!n&&!a&&t.includes(".")&&(t=s[0],n=s[1],a=s.slice(2).join(".")),o||!r||!Q(a)?o:Oc((c=(u=this.data)==null?void 0:u[t])==null?void 0:c[n],a,l)}addResource(t,n,a,i,l={silent:!1}){let r=l.keySeparator!==void 0?l.keySeparator:this.options.keySeparator,s=[t,n];a&&(s=s.concat(r?a.split(r):a)),t.includes(".")&&(s=t.split("."),i=n,n=s[1]),this.addNamespaces(n),Gp(this.data,s,i),l.silent||this.emit("added",t,n,a,i)}addResources(t,n,a,i={silent:!1}){for(let l in a)(Q(a[l])||Array.isArray(a[l]))&&this.addResource(t,n,l,a[l],{silent:!0});i.silent||this.emit("added",t,n,a)}addResourceBundle(t,n,a,i,l,r={silent:!1,skipCopy:!1}){let s=[t,n];t.includes(".")&&(s=t.split("."),i=a,a=n,n=s[1]),this.addNamespaces(n);let o=Ls(this.data,s)||{};r.skipCopy||(a=JSON.parse(JSON.stringify(a))),i?Kp(o,a,l):o=T(T({},o),a),Gp(this.data,s,o),r.silent||this.emit("added",t,n,a)}removeResourceBundle(t,n){this.hasResourceBundle(t,n)&&delete this.data[t][n],this.removeNamespaces(n),this.emit("removed",t,n)}hasResourceBundle(t,n){return this.getResource(t,n)!==void 0}getResourceBundle(t,n){return n||(n=this.options.defaultNS),this.getResource(t,n)}getDataByLanguage(t){return this.data[t]}hasLanguageSomeTranslations(t){let n=this.getDataByLanguage(t);return!!(n&&Object.keys(n)||[]).find(i=>n[i]&&Object.keys(n[i]).length>0)}toJSON(){return this.data}},Fp={processors:{},addPostProcessor(e){this.processors[e.name]=e},handle(e,t,n,a,i){return e.forEach(l=>{var r,s;t=(s=(r=this.processors[l])==null?void 0:r.process(t,n,a,i))!=null?s:t}),t}},Jp=Symbol("i18next/PATH_KEY");function V1(){let e=[],t=Object.create(null),n;return t.get=(a,i)=>{var l;return(l=n==null?void 0:n.revoke)==null||l.call(n),i===Jp?e:(e.push(i),n=Proxy.revocable(a,t),n.proxy)},Proxy.revocable(Object.create(null),t).proxy}function Qa(e,t){var r,s;let{[Jp]:n}=e(V1()),a=(r=t==null?void 0:t.keySeparator)!=null?r:".",i=(s=t==null?void 0:t.nsSeparator)!=null?s:":",l=(t==null?void 0:t.enableSelector)==="strict";if(n.length>1&&i){let o=t==null?void 0:t.ns,u=l?Array.isArray(o)?o:o?[o]:null:Array.isArray(o)?o:null;if(u&&(l?u:u.length>1?u.slice(1):[]).includes(n[0]))return"".concat(n[0]).concat(i).concat(n.slice(1).join(a))}return n.join(a)}var Ec=e=>!Q(e)&&typeof e!="boolean"&&typeof e!="number",Hs=class e extends Ni{constructor(t,n={}){super(),z1(["resourceStore","languageUtils","pluralResolver","interpolator","backendConnector","i18nFormat","utils"],t,this),this.options=n,this.options.keySeparator===void 0&&(this.options.keySeparator="."),this.logger=yn.create("translator"),this.checkedLoadedFor={}}changeLanguage(t){t&&(this.language=t)}exists(t,n={interpolation:{}}){let a=T({},n);if(t==null)return!1;let i=this.resolve(t,a);if((i==null?void 0:i.res)===void 0)return!1;let l=Ec(i.res);return!(a.returnObjects===!1&&l)}extractFromKey(t,n){let a=n.nsSeparator!==void 0?n.nsSeparator:this.options.nsSeparator;a===void 0&&(a=":");let i=n.keySeparator!==void 0?n.keySeparator:this.options.keySeparator,l=n.ns||this.options.defaultNS||[],r=a&&t.includes(a),s=!this.options.userDefinedKeySeparator&&!n.keySeparator&&!this.options.userDefinedNsSeparator&&!n.nsSeparator&&!Y1(t,a,i);if(r&&!s){let o=t.match(this.interpolator.nestingRegexp);if(o&&o.length>0)return{key:t,namespaces:Q(l)?[l]:l};let u=t.split(a);(a!==i||a===i&&this.options.ns.includes(u[0]))&&(l=u.shift()),t=u.join(i)}return{key:t,namespaces:Q(l)?[l]:l}}translate(t,n,a){let i=typeof n=="object"?T({},n):n;if(typeof i!="object"&&this.options.overloadTranslationOptionHandler&&(i=this.options.overloadTranslationOptionHandler(arguments)),typeof i=="object"&&(i=T({},i)),i||(i={}),t==null)return"";typeof t=="function"&&(t=Qa(t,T(T({},this.options),i))),Array.isArray(t)||(t=[String(t)]),t=t.map(D=>typeof D=="function"?Qa(D,T(T({},this.options),i)):String(D));let l=i.returnDetails!==void 0?i.returnDetails:this.options.returnDetails,r=i.keySeparator!==void 0?i.keySeparator:this.options.keySeparator,{key:s,namespaces:o}=this.extractFromKey(t[t.length-1],i),u=o[o.length-1],c=i.nsSeparator!==void 0?i.nsSeparator:this.options.nsSeparator;c===void 0&&(c=":");let f=i.lng||this.language,d=i.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if((f==null?void 0:f.toLowerCase())==="cimode")return d?l?{res:"".concat(u).concat(c).concat(s),usedKey:s,exactUsedKey:s,usedLng:f,usedNS:u,usedParams:this.getUsedParamsDetails(i)}:"".concat(u).concat(c).concat(s):l?{res:s,usedKey:s,exactUsedKey:s,usedLng:f,usedNS:u,usedParams:this.getUsedParamsDetails(i)}:s;let p=this.resolve(t,i),v=p==null?void 0:p.res,S=(p==null?void 0:p.usedKey)||s,x=(p==null?void 0:p.exactUsedKey)||s,h=["[object Number]","[object Function]","[object RegExp]"],m=i.joinArrays!==void 0?i.joinArrays:this.options.joinArrays,y=!this.i18nFormat||this.i18nFormat.handleAsObject,b=i.count!==void 0&&!Q(i.count),k=e.hasDefaultValue(i),_=b?this.pluralResolver.getSuffix(f,i.count,i):"",w=i.ordinal&&b?this.pluralResolver.getSuffix(f,i.count,{ordinal:!1}):"",B=b&&!i.ordinal&&i.count===0,U=B&&i["defaultValue".concat(this.options.pluralSeparator,"zero")]||i["defaultValue".concat(_)]||i["defaultValue".concat(w)]||i.defaultValue,M=v;y&&!v&&k&&(M=U);let ve=Ec(M),X=Object.prototype.toString.apply(M);if(y&&M&&ve&&!h.includes(X)&&!(Q(m)&&Array.isArray(M))){if(!i.returnObjects&&!this.options.returnObjects){this.options.returnedObjectHandler||this.logger.warn("accessing an object - but returnObjects options is not enabled!");let D=this.options.returnedObjectHandler?this.options.returnedObjectHandler(S,M,z(T({},i),{ns:o})):"key '".concat(s," (").concat(this.language,")' returned an object instead of string.");return l?(p.res=D,p.usedParams=this.getUsedParamsDetails(i),p):D}if(r){let D=Array.isArray(M),C=D?[]:{},P=D?x:S;for(let re in M)if(Object.prototype.hasOwnProperty.call(M,re)){let xe="".concat(P).concat(r).concat(re);k&&!v?C[re]=this.translate(xe,z(T({},i),{defaultValue:Ec(U)?U[re]:void 0,joinArrays:!1,ns:o})):C[re]=this.translate(xe,z(T({},i),{joinArrays:!1,ns:o})),C[re]===xe&&(C[re]=M[re])}v=C}}else if(y&&Q(m)&&Array.isArray(v))v=v.join(m),v&&(v=this.extendTranslation(v,t,i,a));else{let D=!1,C=!1;!this.isValidLookup(v)&&k&&(D=!0,v=U),this.isValidLookup(v)||(C=!0,v=s);let re=(i.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey)&&C?void 0:v,xe=k&&U!==v&&this.options.updateMissing;if(C||D||xe){if(this.logger.log(xe?"updateKey":"missingKey",f,u,b&&!xe?"".concat(s).concat(this.pluralResolver.getSuffix(f,i.count,i)):s,xe?U:v),r){let $e=this.resolve(s,z(T({},i),{keySeparator:!1}));$e&&$e.res&&this.logger.warn("Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.")}let gt=[],en=this.languageUtils.getFallbackCodes(this.options.fallbackLng,i.lng||this.language);if(this.options.saveMissingTo==="fallback"&&en&&en[0])for(let $e=0;$e<en.length;$e++)gt.push(en[$e]);else this.options.saveMissingTo==="all"?gt=this.languageUtils.toResolveHierarchy(i.lng||this.language):gt.push(i.lng||this.language);let Va=($e,tn,hn)=>{var Dn;let ge=k&&hn!==v?hn:re;this.options.missingKeyHandler?this.options.missingKeyHandler($e,u,tn,ge,xe,i):(Dn=this.backendConnector)!=null&&Dn.saveMissing&&this.backendConnector.saveMissing($e,u,tn,ge,xe,i),this.emit("missingKey",$e,u,tn,v)};this.options.saveMissing&&(this.options.saveMissingPlurals&&b?gt.forEach($e=>{let tn=this.pluralResolver.getSuffixes($e,i);B&&i["defaultValue".concat(this.options.pluralSeparator,"zero")]&&!tn.includes("".concat(this.options.pluralSeparator,"zero"))&&tn.push("".concat(this.options.pluralSeparator,"zero")),tn.forEach(hn=>{Va([$e],s+hn,i["defaultValue".concat(hn)]||U)})}):Va(gt,s,U))}v=this.extendTranslation(v,t,i,p,a),C&&v===s&&this.options.appendNamespaceToMissingKey&&(v="".concat(u).concat(c).concat(s)),(C||D)&&this.options.parseMissingKeyHandler&&(v=this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey?"".concat(u).concat(c).concat(s):s,D?v:void 0,i))}return l?(p.res=v,p.usedParams=this.getUsedParamsDetails(i),p):v}extendTranslation(t,n,a,i,l){var o,u;if((o=this.i18nFormat)!=null&&o.parse)t=this.i18nFormat.parse(t,T(T({},this.options.interpolation.defaultVariables),a),a.lng||this.language||i.usedLng,i.usedNS,i.usedKey,{resolved:i});else if(!a.skipInterpolation){a.interpolation&&this.interpolator.init(z(T({},a),{interpolation:T(T({},this.options.interpolation),a.interpolation)}));let c=Q(t)&&(((u=a==null?void 0:a.interpolation)==null?void 0:u.skipOnVariables)!==void 0?a.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables),f;if(c){let p=t.match(this.interpolator.nestingRegexp);f=p&&p.length}let d=a.replace&&!Q(a.replace)?a.replace:a;if(this.options.interpolation.defaultVariables&&(d=T(T({},this.options.interpolation.defaultVariables),d)),t=this.interpolator.interpolate(t,d,a.lng||this.language||i.usedLng,a),c){let p=t.match(this.interpolator.nestingRegexp),v=p&&p.length;f<v&&(a.nest=!1)}!a.lng&&i&&i.res&&(a.lng=this.language||i.usedLng),a.nest!==!1&&(t=this.interpolator.nest(t,(...p)=>(l==null?void 0:l[0])===p[0]&&!a.context?(this.logger.warn("It seems you are nesting recursively key: ".concat(p[0]," in key: ").concat(n[0])),null):this.translate(...p,n),a)),a.interpolation&&this.interpolator.reset()}let r=a.postProcess||this.options.postProcess,s=Q(r)?[r]:r;return t!=null&&(s!=null&&s.length)&&a.applyPostProcessor!==!1&&(t=Fp.handle(s,t,n,this.options&&this.options.postProcessPassResolved?T({i18nResolved:z(T({},i),{usedParams:this.getUsedParamsDetails(a)})},a):a,this)),t}resolve(t,n={}){let a,i,l,r,s;return Q(t)&&(t=[t]),Array.isArray(t)&&(t=t.map(o=>typeof o=="function"?Qa(o,T(T({},this.options),n)):o)),t.forEach(o=>{if(this.isValidLookup(a))return;let u=this.extractFromKey(o,n),c=u.key;i=c;let f=u.namespaces;this.options.fallbackNS&&(f=f.concat(this.options.fallbackNS));let d=n.count!==void 0&&!Q(n.count),p=d&&!n.ordinal&&n.count===0,v=n.context!==void 0&&(Q(n.context)||typeof n.context=="number")&&n.context!=="",S=n.lngs?n.lngs:this.languageUtils.toResolveHierarchy(n.lng||this.language,n.fallbackLng);f.forEach(x=>{var h,m;this.isValidLookup(a)||(s=x,!this.checkedLoadedFor["".concat(S[0],"-").concat(x)]&&((h=this.utils)!=null&&h.hasLoadedNamespace)&&!((m=this.utils)!=null&&m.hasLoadedNamespace(s))&&(this.checkedLoadedFor["".concat(S[0],"-").concat(x)]=!0,this.logger.warn('key "'.concat(i,'" for languages "').concat(S.join(", "),'" won\'t get resolved as namespace "').concat(s,'" was not yet loaded'),"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!")),S.forEach(y=>{var _;if(this.isValidLookup(a))return;r=y;let b=[c];if((_=this.i18nFormat)!=null&&_.addLookupKeys)this.i18nFormat.addLookupKeys(b,c,y,x,n);else{let w;d&&(w=this.pluralResolver.getSuffix(y,n.count,n));let B="".concat(this.options.pluralSeparator,"zero"),U="".concat(this.options.pluralSeparator,"ordinal").concat(this.options.pluralSeparator);if(d&&(n.ordinal&&w.startsWith(U)&&b.push(c+w.replace(U,this.options.pluralSeparator)),b.push(c+w),p&&b.push(c+B)),v){let M="".concat(c).concat(this.options.contextSeparator||"_").concat(n.context);b.push(M),d&&(n.ordinal&&w.startsWith(U)&&b.push(M+w.replace(U,this.options.pluralSeparator)),b.push(M+w),p&&b.push(M+B))}}let k;for(;k=b.pop();)this.isValidLookup(a)||(l=k,a=this.getResource(y,x,k,n))}))})}),{res:a,usedKey:i,exactUsedKey:l,usedLng:r,usedNS:s}}isValidLookup(t){return t!==void 0&&!(!this.options.returnNull&&t===null)&&!(!this.options.returnEmptyString&&t==="")}getResource(t,n,a,i={}){var l;return(l=this.i18nFormat)!=null&&l.getResource?this.i18nFormat.getResource(t,n,a,i):this.resourceStore.getResource(t,n,a,i)}getUsedParamsDetails(t={}){let n=["defaultValue","ordinal","context","replace","lng","lngs","fallbackLng","ns","keySeparator","nsSeparator","returnObjects","returnDetails","joinArrays","postProcess","interpolation"],a=t.replace&&!Q(t.replace),i=a?t.replace:t;if(a&&typeof t.count<"u"&&(i.count=t.count),this.options.interpolation.defaultVariables&&(i=T(T({},this.options.interpolation.defaultVariables),i)),!a){i=T({},i);for(let l of n)delete i[l]}return i}static hasDefaultValue(t){let n="defaultValue";for(let a in t)if(Object.prototype.hasOwnProperty.call(t,a)&&a.startsWith(n)&&t[a]!==void 0)return!0;return!1}},Bs=class{constructor(t){this.options=t,this.supportedLngs=this.options.supportedLngs||!1,this.logger=yn.create("languageUtils")}getScriptPartFromCode(t){if(t=Kl(t),!t||!t.includes("-"))return null;let n=t.split("-");return n.length===2||(n.pop(),n[n.length-1].toLowerCase()==="x")?null:this.formatLanguageCode(n.join("-"))}getLanguagePartFromCode(t){if(t=Kl(t),!t||!t.includes("-"))return t;let n=t.split("-");return this.formatLanguageCode(n[0])}formatLanguageCode(t){if(Q(t)&&t.includes("-")){let n;try{n=Intl.getCanonicalLocales(t)[0]}catch(a){}return n&&this.options.lowerCaseLng&&(n=n.toLowerCase()),n||(this.options.lowerCaseLng?t.toLowerCase():t)}return this.options.cleanCode||this.options.lowerCaseLng?t.toLowerCase():t}isSupportedCode(t){return(this.options.load==="languageOnly"||this.options.nonExplicitSupportedLngs)&&(t=this.getLanguagePartFromCode(t)),!this.supportedLngs||!this.supportedLngs.length||this.supportedLngs.includes(t)}getBestMatchFromCodes(t){if(!t)return null;let n;return t.forEach(a=>{if(n)return;let i=this.formatLanguageCode(a);(!this.options.supportedLngs||this.isSupportedCode(i))&&(n=i)}),!n&&this.options.supportedLngs&&t.forEach(a=>{if(n)return;let i=this.getScriptPartFromCode(a);if(this.isSupportedCode(i))return n=i;let l=this.getLanguagePartFromCode(a);if(this.isSupportedCode(l))return n=l;n=this.options.supportedLngs.find(r=>r===l?!0:!r.includes("-")&&!l.includes("-")?!1:!!(r.includes("-")&&!l.includes("-")&&r.slice(0,r.indexOf("-"))===l||r.startsWith(l)&&l.length>1))}),n||(n=this.getFallbackCodes(this.options.fallbackLng)[0]),n}getFallbackCodes(t,n){if(!t)return[];if(typeof t=="function"&&(t=t(n)),Q(t)&&(t=[t]),Array.isArray(t))return t;if(!n)return t.default||[];let a=t[n];return a||(a=t[this.getScriptPartFromCode(n)]),a||(a=t[this.formatLanguageCode(n)]),a||(a=t[this.getLanguagePartFromCode(n)]),a||(a=t.default),a||[]}toResolveHierarchy(t,n){let a=this.getFallbackCodes((n===!1?[]:n)||this.options.fallbackLng||[],t),i=[],l=r=>{r&&(this.isSupportedCode(r)?i.push(r):this.logger.warn("rejecting language code not found in supportedLngs: ".concat(r)))};return Q(t)&&(t.includes("-")||t.includes("_"))?(this.options.load!=="languageOnly"&&l(this.formatLanguageCode(t)),this.options.load!=="languageOnly"&&this.options.load!=="currentOnly"&&l(this.getScriptPartFromCode(t)),this.options.load!=="currentOnly"&&l(this.getLanguagePartFromCode(t))):Q(t)&&l(this.formatLanguageCode(t)),a.forEach(r=>{i.includes(r)||l(this.formatLanguageCode(r))}),i}},Vp={zero:0,one:1,two:2,few:3,many:4,other:5},Xp={select:e=>e===1?"one":"other",resolvedOptions:()=>({pluralCategories:["one","other"]})},Nc=class{constructor(t,n={}){this.languageUtils=t,this.options=n,this.logger=yn.create("pluralResolver"),this.pluralRulesCache={}}clearCache(){this.pluralRulesCache={}}getRule(t,n={}){let a=Kl(t==="dev"?"en":t),i=n.ordinal?"ordinal":"cardinal",l=JSON.stringify({cleanedCode:a,type:i});if(l in this.pluralRulesCache)return this.pluralRulesCache[l];let r;try{r=new Intl.PluralRules(a,{type:i})}catch(s){if(typeof Intl>"u")return this.logger.error("No Intl support, please use an Intl polyfill!"),Xp;if(!t.match(/-|_/))return Xp;let o=this.languageUtils.getLanguagePartFromCode(t);r=this.getRule(o,n)}return this.pluralRulesCache[l]=r,r}needsPlural(t,n={}){let a=this.getRule(t,n);return a||(a=this.getRule("dev",n)),(a==null?void 0:a.resolvedOptions().pluralCategories.length)>1}getPluralFormsOfKey(t,n,a={}){return this.getSuffixes(t,a).map(i=>"".concat(n).concat(i))}getSuffixes(t,n={}){let a=this.getRule(t,n);return a||(a=this.getRule("dev",n)),a?a.resolvedOptions().pluralCategories.sort((i,l)=>Vp[i]-Vp[l]).map(i=>"".concat(this.options.prepend).concat(n.ordinal?"ordinal".concat(this.options.prepend):"").concat(i)):[]}getSuffix(t,n,a={}){let i=this.getRule(t,a);return i?"".concat(this.options.prepend).concat(a.ordinal?"ordinal".concat(this.options.prepend):"").concat(i.select(n)):(this.logger.warn("no plural rule found for: ".concat(t)),this.getSuffix("dev",n,a))}},$p=(e,t,n,a=".",i=!0)=>{let l=U1(e,t,n);return!l&&i&&Q(n)&&(l=Oc(e,n,a),l===void 0&&(l=Oc(t,n,a))),l},Ac=e=>e.replace(/\$/g,"$$$$"),js=class{constructor(t={}){var n;this.logger=yn.create("interpolator"),this.options=t,this.format=((n=t==null?void 0:t.interpolation)==null?void 0:n.format)||(a=>a),this.init(t)}init(t={}){t.interpolation||(t.interpolation={escapeValue:!0});let{escape:n,escapeValue:a,useRawValueToEscape:i,prefix:l,prefixEscaped:r,suffix:s,suffixEscaped:o,formatSeparator:u,unescapeSuffix:c,unescapePrefix:f,nestingPrefix:d,nestingPrefixEscaped:p,nestingSuffix:v,nestingSuffixEscaped:S,nestingOptionsSeparator:x,maxReplaces:h,alwaysFormat:m}=t.interpolation;this.escape=n!==void 0?n:B1,this.escapeValue=a!==void 0?a:!0,this.useRawValueToEscape=i!==void 0?i:!1,this.prefix=l?Ln(l):r||"{{",this.suffix=s?Ln(s):o||"}}",this.formatSeparator=u||",",this.unescapePrefix=c?"":f?Ln(f):"-",this.unescapeSuffix=this.unescapePrefix?"":c?Ln(c):"",this.nestingPrefix=d?Ln(d):p||Ln("$t("),this.nestingSuffix=v?Ln(v):S||Ln(")"),this.nestingOptionsSeparator=x||",",this.maxReplaces=h||1e3,this.alwaysFormat=m!==void 0?m:!1,this.resetRegExp()}reset(){this.options&&this.init(this.options)}resetRegExp(){let t=(n,a)=>(n==null?void 0:n.source)===a?(n.lastIndex=0,n):new RegExp(a,"g");this.regexp=t(this.regexp,"".concat(this.prefix,"(.+?)").concat(this.suffix)),this.regexpUnescape=t(this.regexpUnescape,"".concat(this.prefix).concat(this.unescapePrefix,"(.+?)").concat(this.unescapeSuffix).concat(this.suffix)),this.nestingRegexp=t(this.nestingRegexp,"".concat(this.nestingPrefix,"((?:[^()\"']+|\"[^\"]*\"|'[^']*'|\\((?:[^()]|\"[^\"]*\"|'[^']*')*\\))*?)").concat(this.nestingSuffix))}interpolate(t,n,a,i){var p;let l,r,s,o=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{},u=v=>{if(!v.includes(this.formatSeparator)){let m=$p(n,o,v,this.options.keySeparator,this.options.ignoreJSONStructure);return this.alwaysFormat?this.format(m,void 0,a,z(T(T({},i),n),{interpolationkey:v})):m}let S=v.split(this.formatSeparator),x=S.shift().trim(),h=S.join(this.formatSeparator).trim();return this.format($p(n,o,x,this.options.keySeparator,this.options.ignoreJSONStructure),h,a,z(T(T({},i),n),{interpolationkey:x}))};this.resetRegExp(),!this.escapeValue&&typeof t=="string"&&/\$t\([^)]*\{[^}]*\{\{/.test(t)&&this.logger.warn("nesting options string contains interpolated variables with escapeValue: false \u2014 if any of those values are attacker-controlled they can inject additional nesting options (e.g. redirect lng/ns). Sanitise untrusted input before passing it to t(), or keep escapeValue: true.");let c=(i==null?void 0:i.missingInterpolationHandler)||this.options.missingInterpolationHandler,f=((p=i==null?void 0:i.interpolation)==null?void 0:p.skipOnVariables)!==void 0?i.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables;return[{regex:this.regexpUnescape,safeValue:v=>Ac(v)},{regex:this.regexp,safeValue:v=>this.escapeValue?Ac(this.escape(v)):Ac(v)}].forEach(v=>{for(s=0;l=v.regex.exec(t);){let S=l[1].trim();if(r=u(S),r===void 0)if(typeof c=="function"){let h=c(t,l,i);r=Q(h)?h:""}else if(i&&Object.prototype.hasOwnProperty.call(i,S))r="";else if(f){r=l[0];continue}else this.logger.warn("missed to pass in variable ".concat(S," for interpolating ").concat(t)),r="";else!Q(r)&&!this.useRawValueToEscape&&(r=jp(r));let x=v.safeValue(r);if(t=t.replace(l[0],x),f?(v.regex.lastIndex+=r.length,v.regex.lastIndex-=l[0].length):v.regex.lastIndex=0,s++,s>=this.maxReplaces)break}}),t}nest(t,n,a={}){let i,l,r,s=(o,u)=>{var S,x;let c=this.nestingOptionsSeparator;if(!o.includes(c))return o;let f=o.split(new RegExp("".concat(Ln(c),"[ ]*{"))),d="{".concat(f[1]);o=f[0],d=this.interpolate(d,r);let p=d.match(/'/g),v=d.match(/"/g);(((S=p==null?void 0:p.length)!=null?S:0)%2===0&&!v||((x=v==null?void 0:v.length)!=null?x:0)%2!==0)&&(d=d.replace(/'/g,'"'));try{r=JSON.parse(d),u&&(r=T(T({},u),r))}catch(h){return this.logger.warn("failed parsing options string in nesting for key ".concat(o),h),"".concat(o).concat(c).concat(d)}return r.defaultValue&&r.defaultValue.includes(this.prefix)&&delete r.defaultValue,o};for(;i=this.nestingRegexp.exec(t);){let o=[];r=T({},a),r=r.replace&&!Q(r.replace)?r.replace:r,r.applyPostProcessor=!1,delete r.defaultValue;let u=/{.*}/.test(i[1])?i[1].lastIndexOf("}")+1:i[1].indexOf(this.formatSeparator);if(u!==-1&&(o=i[1].slice(u).split(this.formatSeparator).map(c=>c.trim()).filter(Boolean),i[1]=i[1].slice(0,u)),l=n(s.call(this,i[1].trim(),r),r),l&&i[0]===t&&!Q(l))return l;Q(l)||(l=jp(l)),l||(this.logger.warn("missed to resolve ".concat(i[1]," for nesting ").concat(t)),l=""),o.length&&(l=o.reduce((c,f)=>this.format(c,f,a.lng,z(T({},a),{interpolationkey:i[1].trim()})),l.trim())),t=t.replace(i[0],l),this.regexp.lastIndex=0}return t}},X1=e=>{let t=e.toLowerCase().trim(),n={};if(e.includes("(")){let a=e.split("(");t=a[0].toLowerCase().trim();let i=a[1].slice(0,-1);t==="currency"&&!i.includes(":")?n.currency||(n.currency=i.trim()):t==="relativetime"&&!i.includes(":")?n.range||(n.range=i.trim()):i.split(";").forEach(r=>{if(r){let[s,...o]=r.split(":"),u=o.join(":").trim().replace(/^'+|'+$/g,""),c=s.trim();n[c]||(n[c]=u),u==="false"&&(n[c]=!1),u==="true"&&(n[c]=!0),isNaN(u)||(n[c]=parseInt(u,10))}})}return{formatName:t,formatOptions:n}},Qp=e=>{let t={};return(n,a,i)=>{let l=i;i&&i.interpolationkey&&i.formatParams&&i.formatParams[i.interpolationkey]&&i[i.interpolationkey]&&(l=z(T({},l),{[i.interpolationkey]:void 0}));let r=a+JSON.stringify(l),s=t[r];return s||(s=e(Kl(a),i),t[r]=s),s(n)}},$1=e=>(t,n,a)=>e(Kl(n),a)(t),_c=class{constructor(t={}){this.logger=yn.create("formatter"),this.options=t,this.init(t)}init(t,n={interpolation:{}}){this.formatSeparator=n.interpolation.formatSeparator||",";let a=n.cacheInBuiltFormats?Qp:$1;this.formats={number:a((i,l)=>{let r=new Intl.NumberFormat(i,T({},l));return s=>r.format(s)}),currency:a((i,l)=>{let r=new Intl.NumberFormat(i,z(T({},l),{style:"currency"}));return s=>r.format(s)}),datetime:a((i,l)=>{let r=new Intl.DateTimeFormat(i,T({},l));return s=>r.format(s)}),relativetime:a((i,l)=>{let r=new Intl.RelativeTimeFormat(i,T({},l));return s=>r.format(s,l.range||"day")}),list:a((i,l)=>{let r=new Intl.ListFormat(i,T({},l));return s=>r.format(s)})}}add(t,n){this.formats[t.toLowerCase().trim()]=n}addCached(t,n){this.formats[t.toLowerCase().trim()]=Qp(n)}format(t,n,a,i={}){if(!n||t==null)return t;let l=n.split(this.formatSeparator);if(l.length>1&&l[0].indexOf("(")>1&&!l[0].includes(")")&&l.find(s=>s.includes(")"))){let s=l.findIndex(o=>o.includes(")"));l[0]=[l[0],...l.splice(1,s)].join(this.formatSeparator)}return l.reduce((s,o)=>{var f;let{formatName:u,formatOptions:c}=X1(o);if(this.formats[u]){let d=s;try{let p=((f=i==null?void 0:i.formatParams)==null?void 0:f[i.interpolationkey])||{},v=p.locale||p.lng||i.locale||i.lng||a;d=this.formats[u](s,v,T(T(T({},c),i),p))}catch(p){this.logger.warn(p)}return d}else this.logger.warn("there was no format function for ".concat(u));return s},t)}},Q1=(e,t)=>{e.pending[t]!==void 0&&(delete e.pending[t],e.pendingCount--)},Cc=class extends Ni{constructor(t,n,a,i={}){var l,r;super(),this.backend=t,this.store=n,this.services=a,this.languageUtils=a.languageUtils,this.options=i,this.logger=yn.create("backendConnector"),this.waitingReads=[],this.maxParallelReads=i.maxParallelReads||10,this.readingCalls=0,this.maxRetries=i.maxRetries>=0?i.maxRetries:5,this.retryTimeout=i.retryTimeout>=1?i.retryTimeout:350,this.state={},this.queue=[],(r=(l=this.backend)==null?void 0:l.init)==null||r.call(l,a,i.backend,i)}queueLoad(t,n,a,i){let l={},r={},s={},o={};return t.forEach(u=>{let c=!0;n.forEach(f=>{let d="".concat(u,"|").concat(f);!a.reload&&this.store.hasResourceBundle(u,f)?this.state[d]=2:this.state[d]<0||(this.state[d]===1?r[d]===void 0&&(r[d]=!0):(this.state[d]=1,c=!1,r[d]===void 0&&(r[d]=!0),l[d]===void 0&&(l[d]=!0),o[f]===void 0&&(o[f]=!0)))}),c||(s[u]=!0)}),(Object.keys(l).length||Object.keys(r).length)&&this.queue.push({pending:r,pendingCount:Object.keys(r).length,loaded:{},errors:[],callback:i}),{toLoad:Object.keys(l),pending:Object.keys(r),toLoadLanguages:Object.keys(s),toLoadNamespaces:Object.keys(o)}}loaded(t,n,a){let i=t.split("|"),l=i[0],r=i[1];n&&this.emit("failedLoading",l,r,n),!n&&a&&this.store.addResourceBundle(l,r,a,void 0,void 0,{skipCopy:!0}),this.state[t]=n?-1:2,n&&a&&(this.state[t]=0);let s={};this.queue.forEach(o=>{L1(o.loaded,[l],r),Q1(o,t),n&&o.errors.push(n),o.pendingCount===0&&!o.done&&(Object.keys(o.loaded).forEach(u=>{s[u]||(s[u]={});let c=o.loaded[u];c.length&&c.forEach(f=>{s[u][f]===void 0&&(s[u][f]=!0)})}),o.done=!0,o.errors.length?o.callback(o.errors):o.callback())}),this.emit("loaded",s),this.queue=this.queue.filter(o=>!o.done)}read(t,n,a,i=0,l=this.retryTimeout,r){if(!t.length)return r(null,{});if(this.readingCalls>=this.maxParallelReads){this.waitingReads.push({lng:t,ns:n,fcName:a,tried:i,wait:l,callback:r});return}this.readingCalls++;let s=(u,c)=>{if(this.readingCalls--,this.waitingReads.length>0){let f=this.waitingReads.shift();this.read(f.lng,f.ns,f.fcName,f.tried,f.wait,f.callback)}if(u&&c&&i<this.maxRetries){setTimeout(()=>{this.read(t,n,a,i+1,l*2,r)},l);return}r(u,c)},o=this.backend[a].bind(this.backend);if(o.length===2){try{let u=o(t,n);u&&typeof u.then=="function"?u.then(c=>s(null,c)).catch(s):s(null,u)}catch(u){s(u)}return}return o(t,n,s)}prepareLoading(t,n,a={},i){if(!this.backend)return this.logger.warn("No backend was added via i18next.use. Will not load resources."),i&&i();Q(t)&&(t=this.languageUtils.toResolveHierarchy(t)),Q(n)&&(n=[n]);let l=this.queueLoad(t,n,a,i);if(!l.toLoad.length)return l.pending.length||i(),null;l.toLoad.forEach(r=>{this.loadOne(r)})}load(t,n,a){this.prepareLoading(t,n,{},a)}reload(t,n,a){this.prepareLoading(t,n,{reload:!0},a)}loadOne(t,n=""){let a=t.split("|"),i=a[0],l=a[1];this.read(i,l,"read",void 0,void 0,(r,s)=>{r&&this.logger.warn("".concat(n,"loading namespace ").concat(l," for language ").concat(i," failed"),r),!r&&s&&this.logger.log("".concat(n,"loaded namespace ").concat(l," for language ").concat(i),s),this.loaded(t,r,s)})}saveMissing(t,n,a,i,l,r={},s=()=>{}){var o,u,c,f,d;if((u=(o=this.services)==null?void 0:o.utils)!=null&&u.hasLoadedNamespace&&!((f=(c=this.services)==null?void 0:c.utils)!=null&&f.hasLoadedNamespace(n))){this.logger.warn('did not save key "'.concat(a,'" as the namespace "').concat(n,'" was not yet loaded'),"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!");return}if(!(a==null||a==="")){if((d=this.backend)!=null&&d.create){let p=z(T({},r),{isUpdate:l}),v=this.backend.create.bind(this.backend);if(v.length<6)try{let S;v.length===5?S=v(t,n,a,i,p):S=v(t,n,a,i),S&&typeof S.then=="function"?S.then(x=>s(null,x)).catch(s):s(null,S)}catch(S){s(S)}else v(t,n,a,i,s,p)}!t||!t[0]||this.store.addResource(t[0],n,a,i)}}},kc=()=>({debug:!1,initAsync:!0,ns:["translation"],defaultNS:["translation"],fallbackLng:["dev"],fallbackNS:!1,supportedLngs:!1,nonExplicitSupportedLngs:!1,load:"all",preload:!1,keySeparator:".",nsSeparator:":",pluralSeparator:"_",contextSeparator:"_",enableSelector:!1,partialBundledLanguages:!1,saveMissing:!1,updateMissing:!1,saveMissingTo:"fallback",saveMissingPlurals:!0,missingKeyHandler:!1,missingInterpolationHandler:!1,postProcess:!1,postProcessPassResolved:!1,returnNull:!1,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:!1,parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:e=>{let t={};if(typeof e[1]=="object"&&(t=e[1]),Q(e[1])&&(t.defaultValue=e[1]),Q(e[2])&&(t.tDescription=e[2]),typeof e[2]=="object"||typeof e[3]=="object"){let n=e[3]||e[2];Object.keys(n).forEach(a=>{t[a]=n[a]})}return t},interpolation:{escapeValue:!0,prefix:"{{",suffix:"}}",formatSeparator:",",unescapePrefix:"-",nestingPrefix:"$t(",nestingSuffix:")",nestingOptionsSeparator:",",maxReplaces:1e3,skipOnVariables:!0},cacheInBuiltFormats:!0}),Zp=e=>(Q(e.ns)&&(e.ns=[e.ns]),Q(e.fallbackLng)&&(e.fallbackLng=[e.fallbackLng]),Q(e.fallbackNS)&&(e.fallbackNS=[e.fallbackNS]),e.supportedLngs&&!e.supportedLngs.includes("cimode")&&(e.supportedLngs=e.supportedLngs.concat(["cimode"])),e),Ms=()=>{},Z1=e=>{Object.getOwnPropertyNames(Object.getPrototypeOf(e)).forEach(n=>{typeof e[n]=="function"&&(e[n]=e[n].bind(e))})},Dc=class e extends Ni{constructor(t={},n){if(super(),this.options=Zp(t),this.services={},this.logger=yn,this.modules={external:[]},Z1(this),n&&!this.isInitialized&&!t.isClone){if(!this.options.initAsync)return this.init(t,n),this;setTimeout(()=>{this.init(t,n)},0)}}init(t={},n){this.isInitializing=!0,typeof t=="function"&&(n=t,t={}),t.defaultNS==null&&t.ns&&(Q(t.ns)?t.defaultNS=t.ns:t.ns.includes("translation")||(t.defaultNS=t.ns[0]));let a=kc();this.options=T(T(T({},a),this.options),Zp(t)),this.options.interpolation=T(T({},a.interpolation),this.options.interpolation),t.keySeparator!==void 0&&(this.options.userDefinedKeySeparator=t.keySeparator),t.nsSeparator!==void 0&&(this.options.userDefinedNsSeparator=t.nsSeparator),typeof this.options.overloadTranslationOptionHandler!="function"&&(this.options.overloadTranslationOptionHandler=a.overloadTranslationOptionHandler);let i=u=>u?typeof u=="function"?new u:u:null;if(!this.options.isClone){this.modules.logger?yn.init(i(this.modules.logger),this.options):yn.init(null,this.options);let u;this.modules.formatter?u=this.modules.formatter:u=_c;let c=new Bs(this.options);this.store=new Us(this.options.resources,this.options);let f=this.services;f.logger=yn,f.resourceStore=this.store,f.languageUtils=c,f.pluralResolver=new Nc(c,{prepend:this.options.pluralSeparator}),u&&(f.formatter=i(u),f.formatter.init&&f.formatter.init(f,this.options),this.options.interpolation.format=f.formatter.format.bind(f.formatter)),f.interpolator=new js(this.options),f.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},f.backendConnector=new Cc(i(this.modules.backend),f.resourceStore,f,this.options),f.backendConnector.on("*",(d,...p)=>{this.emit(d,...p)}),this.modules.languageDetector&&(f.languageDetector=i(this.modules.languageDetector),f.languageDetector.init&&f.languageDetector.init(f,this.options.detection,this.options)),this.modules.i18nFormat&&(f.i18nFormat=i(this.modules.i18nFormat),f.i18nFormat.init&&f.i18nFormat.init(this)),this.translator=new Hs(this.services,this.options),this.translator.on("*",(d,...p)=>{this.emit(d,...p)}),this.modules.external.forEach(d=>{d.init&&d.init(this)})}if(this.format=this.options.interpolation.format,n||(n=Ms),this.options.fallbackLng&&!this.services.languageDetector&&!this.options.lng){let u=this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);u.length>0&&u[0]!=="dev"&&(this.options.lng=u[0])}!this.services.languageDetector&&!this.options.lng&&this.logger.warn("init: no languageDetector is used and no lng is defined"),["getResource","hasResourceBundle","getResourceBundle","getDataByLanguage"].forEach(u=>{this[u]=(...c)=>this.store[u](...c)}),["addResource","addResources","addResourceBundle","removeResourceBundle"].forEach(u=>{this[u]=(...c)=>(this.store[u](...c),this)});let s=Ql(),o=()=>{let u=(c,f)=>{this.isInitializing=!1,this.isInitialized&&!this.initializedStoreOnce&&this.logger.warn("init: i18next is already initialized. You should call init just once!"),this.isInitialized=!0,this.options.isClone||this.logger.log("initialized",this.options),this.emit("initialized",this.options),s.resolve(f),n(c,f)};if((this.languages||this.isLanguageChangingTo)&&!this.isInitialized)return u(null,this.t.bind(this));this.changeLanguage(this.options.lng,u)};return this.options.resources||!this.options.initAsync?o():setTimeout(o,0),s}loadResources(t,n=Ms){var l,r;let a=n,i=Q(t)?t:this.language;if(typeof t=="function"&&(a=t),!this.options.resources||this.options.partialBundledLanguages){if((i==null?void 0:i.toLowerCase())==="cimode"&&(!this.options.preload||this.options.preload.length===0))return a();let s=[],o=u=>{if(!u||u==="cimode")return;this.services.languageUtils.toResolveHierarchy(u).forEach(f=>{f!=="cimode"&&(s.includes(f)||s.push(f))})};i?o(i):this.services.languageUtils.getFallbackCodes(this.options.fallbackLng).forEach(c=>o(c)),(r=(l=this.options.preload)==null?void 0:l.forEach)==null||r.call(l,u=>o(u)),this.services.backendConnector.load(s,this.options.ns,u=>{!u&&!this.resolvedLanguage&&this.language&&this.setResolvedLanguage(this.language),a(u)})}else a(null)}reloadResources(t,n,a){let i=Ql();return typeof t=="function"&&(a=t,t=void 0),typeof n=="function"&&(a=n,n=void 0),t||(t=this.languages),n||(n=this.options.ns),a||(a=Ms),this.services.backendConnector.reload(t,n,l=>{i.resolve(),a(l)}),i}use(t){if(!t)throw new Error("You are passing an undefined module! Please check the object you are passing to i18next.use()");if(!t.type)throw new Error("You are passing a wrong module! Please check the object you are passing to i18next.use()");return t.type==="backend"&&(this.modules.backend=t),(t.type==="logger"||t.log&&t.warn&&t.error)&&(this.modules.logger=t),t.type==="languageDetector"&&(this.modules.languageDetector=t),t.type==="i18nFormat"&&(this.modules.i18nFormat=t),t.type==="postProcessor"&&Fp.addPostProcessor(t),t.type==="formatter"&&(this.modules.formatter=t),t.type==="3rdParty"&&this.modules.external.push(t),this}setResolvedLanguage(t){if(!(!t||!this.languages)&&!["cimode","dev"].includes(t)){for(let n=0;n<this.languages.length;n++){let a=this.languages[n];if(!["cimode","dev"].includes(a)&&this.store.hasLanguageSomeTranslations(a)){this.resolvedLanguage=a;break}}!this.resolvedLanguage&&!this.languages.includes(t)&&this.store.hasLanguageSomeTranslations(t)&&(this.resolvedLanguage=t,this.languages.unshift(t))}}changeLanguage(t,n){this.isLanguageChangingTo=t;let a=Ql();this.emit("languageChanging",t);let i=s=>{this.language=s,this.languages=this.services.languageUtils.toResolveHierarchy(s),this.resolvedLanguage=void 0,this.setResolvedLanguage(s)},l=(s,o)=>{o?this.isLanguageChangingTo===t&&(i(o),this.translator.changeLanguage(o),this.isLanguageChangingTo=void 0,this.emit("languageChanged",o),this.logger.log("languageChanged",o)):this.isLanguageChangingTo=void 0,a.resolve((...u)=>this.t(...u)),n&&n(s,(...u)=>this.t(...u))},r=s=>{var c,f;!t&&!s&&this.services.languageDetector&&(s=[]);let o=Q(s)?s:s&&s[0],u=this.store.hasLanguageSomeTranslations(o)?o:this.services.languageUtils.getBestMatchFromCodes(Q(s)?[s]:s);u&&(this.language||i(u),this.translator.language||this.translator.changeLanguage(u),(f=(c=this.services.languageDetector)==null?void 0:c.cacheUserLanguage)==null||f.call(c,u)),this.loadResources(u,d=>{l(d,u)})};return!t&&this.services.languageDetector&&!this.services.languageDetector.async?r(this.services.languageDetector.detect()):!t&&this.services.languageDetector&&this.services.languageDetector.async?this.services.languageDetector.detect.length===0?this.services.languageDetector.detect().then(r):this.services.languageDetector.detect(r):r(t),a}getFixedT(t,n,a,i){let l=i==null?void 0:i.scopeNs,r=(s,o,...u)=>{let c;typeof o!="object"?c=this.options.overloadTranslationOptionHandler([s,o].concat(u)):c=T({},o),c.lng=c.lng||r.lng,c.lngs=c.lngs||r.lngs;let f=c.ns!==void 0&&c.ns!==null;c.ns=c.ns||r.ns,c.keyPrefix!==""&&(c.keyPrefix=c.keyPrefix||a||r.keyPrefix);let d=T(T({},this.options),c);Array.isArray(l)&&!f&&(d.ns=l),typeof c.keyPrefix=="function"&&(c.keyPrefix=Qa(c.keyPrefix,d));let p=this.options.keySeparator||".",v;return c.keyPrefix&&Array.isArray(s)?v=s.map(S=>(typeof S=="function"&&(S=Qa(S,d)),"".concat(c.keyPrefix).concat(p).concat(S))):(typeof s=="function"&&(s=Qa(s,d)),v=c.keyPrefix?"".concat(c.keyPrefix).concat(p).concat(s):s),this.t(v,c)};return Q(t)?r.lng=t:r.lngs=t,r.ns=n,r.keyPrefix=a,r}t(...t){var n;return(n=this.translator)==null?void 0:n.translate(...t)}exists(...t){var n;return(n=this.translator)==null?void 0:n.exists(...t)}setDefaultNamespace(t){this.options.defaultNS=t}hasLoadedNamespace(t,n={}){if(!this.isInitialized)return this.logger.warn("hasLoadedNamespace: i18next was not initialized",this.languages),!1;if(!this.languages||!this.languages.length)return this.logger.warn("hasLoadedNamespace: i18n.languages were undefined or empty",this.languages),!1;let a=n.lng||this.resolvedLanguage||this.languages[0],i=this.options?this.options.fallbackLng:!1,l=this.languages[this.languages.length-1];if(a.toLowerCase()==="cimode")return!0;let r=(s,o)=>{let u=this.services.backendConnector.state["".concat(s,"|").concat(o)];return u===-1||u===0||u===2};if(n.precheck){let s=n.precheck(this,r);if(s!==void 0)return s}return!!(this.hasResourceBundle(a,t)||!this.services.backendConnector.backend||this.options.resources&&!this.options.partialBundledLanguages||r(a,t)&&(!i||r(l,t)))}loadNamespaces(t,n){let a=Ql();return this.options.ns?(Q(t)&&(t=[t]),t.forEach(i=>{this.options.ns.includes(i)||this.options.ns.push(i)}),this.loadResources(i=>{a.resolve(),n&&n(i)}),a):(n&&n(),Promise.resolve())}loadLanguages(t,n){let a=Ql();Q(t)&&(t=[t]);let i=this.options.preload||[],l=t.filter(r=>!i.includes(r)&&this.services.languageUtils.isSupportedCode(r));return l.length?(this.options.preload=i.concat(l),this.loadResources(r=>{a.resolve(),n&&n(r)}),a):(n&&n(),Promise.resolve())}dir(t){var i,l;if(t||(t=this.resolvedLanguage||(((i=this.languages)==null?void 0:i.length)>0?this.languages[0]:this.language)),!t)return"rtl";try{let r=new Intl.Locale(t);if(r&&r.getTextInfo){let s=r.getTextInfo();if(s&&s.direction)return s.direction}}catch(r){}let n=["ar","shu","sqr","ssh","xaa","yhd","yud","aao","abh","abv","acm","acq","acw","acx","acy","adf","ads","aeb","aec","afb","ajp","apc","apd","arb","arq","ars","ary","arz","auz","avl","ayh","ayl","ayn","ayp","bbz","pga","he","iw","ps","pbt","pbu","pst","prp","prd","ug","ur","ydd","yds","yih","ji","yi","hbo","men","xmn","fa","jpr","peo","pes","prs","dv","sam","ckb"],a=((l=this.services)==null?void 0:l.languageUtils)||new Bs(kc());return t.toLowerCase().indexOf("-latn")>1?"ltr":n.includes(a.getLanguagePartFromCode(t))||t.toLowerCase().indexOf("-arab")>1?"rtl":"ltr"}static createInstance(t={},n){let a=new e(t,n);return a.createInstance=e.createInstance,a}cloneInstance(t={},n=Ms){let a=t.forkResourceStore;a&&delete t.forkResourceStore;let i=z(T(T({},this.options),t),{isClone:!0}),l=new e(i);if((t.debug!==void 0||t.prefix!==void 0)&&(l.logger=l.logger.clone(t)),["store","services","language"].forEach(s=>{l[s]=this[s]}),l.services=T({},this.services),l.services.utils={hasLoadedNamespace:l.hasLoadedNamespace.bind(l)},a){let s=Object.keys(this.store.data).reduce((o,u)=>(o[u]=T({},this.store.data[u]),o[u]=Object.keys(o[u]).reduce((c,f)=>(c[f]=T({},o[u][f]),c),o[u]),o),{});l.store=new Us(s,i),l.services.resourceStore=l.store}if(t.interpolation){let s=kc(),o=T(T(T({},s.interpolation),this.options.interpolation),t.interpolation),u=z(T({},i),{interpolation:o});l.services.interpolator=new js(u)}return l.translator=new Hs(l.services,i),l.translator.on("*",(s,...o)=>{l.emit(s,...o)}),l.init(i,n),l.translator.options=i,l.translator.backendConnector.services.utils={hasLoadedNamespace:l.hasLoadedNamespace.bind(l)},l}toJSON(){return{options:this.options,store:this.store,language:this.language,languages:this.languages,resolvedLanguage:this.resolvedLanguage}}},lt=Dc.createInstance(),zR=lt.createInstance,MR=lt.dir,LR=lt.init,UR=lt.loadResources,HR=lt.reloadResources,BR=lt.use,jR=lt.changeLanguage,qR=lt.getFixedT,YR=lt.t,GR=lt.exists,VR=lt.setDefaultNamespace,XR=lt.hasLoadedNamespace,$R=lt.loadNamespaces,QR=lt.loadLanguages;function Fl(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Za(e){"@babel/helpers - typeof";return Za=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Za(e)}function Ip(e,t){if(Za(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var a=n.call(e,t||"default");if(Za(a)!="object")return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function qs(e){var t=Ip(e,"string");return Za(t)=="symbol"?t:t+""}function Pp(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,qs(a.key),a)}}function Jl(e,t,n){return t&&Pp(e.prototype,t),n&&Pp(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}var em=[],K1=em.forEach,F1=em.slice;function J1(e){return K1.call(F1.call(arguments,1),function(t){if(t)for(var n in t)e[n]===void 0&&(e[n]=t[n])}),e}function I1(e){return e?typeof e=="function"?new e:e:null}function P1(){return{handleEmptyResourcesAsFailed:!0,cacheHitMode:"none",retryOnFailure:!1}}function Wp(e,t,n,a){var i=e.read.bind(e);if(i.length===2){try{var l=i(t,n);l&&typeof l.then=="function"?l.then(function(r){return a(null,r)}).catch(a):a(null,l)}catch(r){a(r)}return}i(t,n,a)}var zc=(function(){function e(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Fl(this,e),this.backends=[],this.type="backend",this.allOptions=a,this.init(t,n)}return Jl(e,[{key:"init",value:function(n){var a=this,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},l=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};this.services=n,this.options=J1(i,this.options||{},P1()),this.allOptions=l,this.options.backends&&this.options.backends.length>1&&(this.allOptions.saveMissing||this.allOptions.updateMissing)&&this.services&&this.services.logger&&this.services.logger.warn("i18next-chained-backend: Using multiple backends in combination with saveMissing/updateMissing is not recommended, as it may trigger based on stale data."),this.options.backends&&this.options.backends.forEach(function(r,s){a.backends[s]=a.backends[s]||I1(r),a.backends[s].init(n,a.options.backendOptions&&a.options.backendOptions[s]||{},l)}),this.services&&this.options.reloadInterval&&setInterval(function(){return a.reload()},this.options.reloadInterval)}},{key:"read",value:function(n,a,i){var l=this,r=this.backends.length,s=function(c){if(c>=r)return i(new Error("non of the backend loaded data"),l.options.retryOnFailure);var f=c===r-1,d=l.options.handleEmptyResourcesAsFailed&&!f?0:-1,p=l.backends[c];p.read?Wp(p,n,a,function(v,S,x){if(!v&&S&&Object.keys(S).length>d){if(i(null,S,c),o(c-1,S),p.save&&l.options.cacheHitMode&&["refresh","refreshAndUpdateStore"].indexOf(l.options.cacheHitMode)>-1){if(x&&l.options.refreshExpirationTime&&x+l.options.refreshExpirationTime>Date.now())return;var h=l.backends[c+1];h&&h.read&&Wp(h,n,a,function(m,y){m||y&&(Object.keys(y).length<=d||(o(c,y),l.options.cacheHitMode==="refreshAndUpdateStore"&&l.services&&l.services.resourceStore&&l.services.resourceStore.addResourceBundle(n,a,y)))})}}else s(c+1)}):s(c+1)},o=function(c,f){if(!(c<0)){var d=l.backends[c];d.save&&d.save(n,a,f),o(c-1,f)}};s(0)}},{key:"create",value:function(n,a,i,l){var r=arguments.length>4&&arguments[4]!==void 0?arguments[4]:function(){},s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:{};this.backends.forEach(function(o){if(o.create){var u=o.create.bind(o);if(u.length<6){try{var c;u.length===5?c=u(n,a,i,l,s):c=u(n,a,i,l),c&&typeof c.then=="function"?c.then(function(f){return r(null,f)}).catch(r):r(null,c)}catch(f){r(f)}return}u(n,a,i,l,r,s)}})}},{key:"reload",value:function(){var n=this,a=this.services,i=a.backendConnector,l=a.languageUtils,r=a.logger,s=i.language;if(!(s&&s.toLowerCase()==="cimode")){var o=[],u=function(f){var d=l.toResolveHierarchy(f);d.forEach(function(p){o.indexOf(p)<0&&o.push(p)})};u(s),this.allOptions.preload&&this.allOptions.preload.forEach(function(c){return u(c)}),o.forEach(function(c){n.allOptions.ns.forEach(function(f){i.read(c,f,"read",null,null,function(d,p){d&&r.warn("loading namespace ".concat(f," for language ").concat(c," failed"),d),!d&&p&&r.log("loaded namespace ".concat(f," for language ").concat(c),p),i.loaded("".concat(c,"|").concat(f),d,p)})})})}}}])})();zc.type="backend";var im=[];im.forEach;im.slice;var lm=["__proto__","constructor","prototype"];function rm(e){return!(typeof e!="string"||e.length===0||e.length>128||lm.indexOf(e)>-1||e.indexOf("..")>-1||e.indexOf("\\")>-1||/[?#%\s@]/.test(e)||/[\x00-\x1F\x7F]/.test(e))}function sm(e){return!(!rm(e)||e.indexOf("/")>-1)}function W1(e){return rm(e)}var eT={lng:sm,ns:W1};function Ys(e){return typeof e!="string"?e:e.replace(/[\r\n\x00-\x1F\x7F]/g," ")}function tT(e){if(typeof e!="string"||e.length===0)return e;try{let t=new URL(e);return t.username||t.password?(t.username="",t.password="",t.toString()):e}catch(t){return e.replace(/(\/\/)[^/@\s]+@/g,"$1")}}function om(){return typeof XMLHttpRequest=="function"||typeof XMLHttpRequest=="object"}function nT(e){return!!e&&typeof e.then=="function"}function aT(e){return nT(e)?e:Promise.resolve(e)}var iT=/\{\{(.+?)\}\}/g;function tm(e,t){let n=!1,a=e.replace(iT,(i,l)=>{let r=l.trim();if(lm.indexOf(r)>-1)return i;let s=t[r];if(s==null)return i;let o=eT[r]||sm,u=String(s).split("+");for(let c of u)if(!o(c))return n=!0,i;return u.join("+")});return n?null:a}var Ka=typeof globalThis<"u"?globalThis:typeof global<"u"?global:typeof window<"u"?window:void 0,Gs;typeof fetch=="function"?Gs=fetch:Ka&&typeof Ka.fetch=="function"&&(Gs=Ka.fetch);var nm=om()&&Ka?Ka.XMLHttpRequest:void 0,lT=typeof ActiveXObject=="function"&&Ka?Ka.ActiveXObject:void 0,um=["__proto__","constructor","prototype"],Mc=(e,t)=>{if(t&&typeof t=="object"){let n="";for(let a of Object.keys(t))um.indexOf(a)>-1||(n+="&"+encodeURIComponent(a)+"="+encodeURIComponent(t[a]));if(!n)return e;e=e+(e.indexOf("?")!==-1?"&":"?")+n.slice(1)}return e},am=(e,t,n,a)=>{let i=l=>{if(!l.ok)return n(l.statusText||"Error",{status:l.status});l.text().then(r=>{n(null,{status:l.status,data:r})}).catch(n)};if(a){let l=a(e,t);if(l instanceof Promise){l.then(i).catch(n);return}}typeof fetch=="function"?fetch(e,t).then(i).catch(n):Gs(e,t).then(i).catch(n)},rT=(e,t,n,a)=>{e.queryStringParams&&(t=Mc(t,e.queryStringParams));let i=T({},typeof e.customHeaders=="function"?e.customHeaders():e.customHeaders);typeof window>"u"&&typeof global<"u"&&typeof global.process<"u"&&global.process.versions&&global.process.versions.node&&(i["User-Agent"]="i18next-http-backend (node/".concat(global.process.version,"; ").concat(global.process.platform," ").concat(global.process.arch,")")),n&&(i["Content-Type"]="application/json");let l=typeof e.requestOptions=="function"?e.requestOptions(n):e.requestOptions,r=T({method:n?"POST":"GET",body:n?e.stringify(n):void 0,headers:i},e._omitFetchOptions?{}:l),s=typeof e.alternateFetch=="function"&&e.alternateFetch.length>=1?e.alternateFetch:void 0;try{am(t,r,a,s)}catch(o){if(!l||Object.keys(l).length===0||!o.message||o.message.indexOf("not implemented")<0)return a(o);try{Object.keys(l).forEach(u=>{delete r[u]}),am(t,r,a,s),e._omitFetchOptions=!0}catch(u){a(u)}}},sT=(e,t,n,a)=>{n&&typeof n=="object"&&(n=Mc("",n).slice(1)),e.queryStringParams&&(t=Mc(t,e.queryStringParams));try{let i=nm?new nm:new lT("MSXML2.XMLHTTP.3.0");i.open(n?"POST":"GET",t,1),e.crossDomain||i.setRequestHeader("X-Requested-With","XMLHttpRequest"),i.withCredentials=!!e.withCredentials,n&&i.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),i.overrideMimeType&&i.overrideMimeType("application/json");let l=e.customHeaders;if(l=typeof l=="function"?l():l,l)for(let r of Object.keys(l))um.indexOf(r)>-1||i.setRequestHeader(r,l[r]);i.onreadystatechange=()=>{i.readyState>3&&a(i.status>=400?i.statusText:null,{status:i.status,data:i.responseText})},i.send(n)}catch(i){console&&console.log(i)}},oT=(e,t,n,a)=>{if(typeof n=="function"&&(a=n,n=void 0),a=a||(()=>{}),Gs&&t.indexOf("file:")!==0)return rT(e,t,n,a);if(om()||typeof ActiveXObject=="function")return sT(e,t,n,a);a(new Error("No fetch and no xhr implementation found!"))},uT=()=>({loadPath:"/locales/{{lng}}/{{ns}}.json",addPath:"/locales/add/{{lng}}/{{ns}}",parse:e=>JSON.parse(e),stringify:JSON.stringify,parsePayload:(e,t,n)=>({[t]:n||""}),parseLoadPayload:(e,t)=>{},request:oT,reloadInterval:typeof window<"u"?!1:3600*1e3,customHeaders:{},queryStringParams:{},crossDomain:!1,withCredentials:!1,overrideMimeType:!1,requestOptions:{mode:"cors",credentials:"same-origin",cache:"default"}}),Lc=class{constructor(e,t={},n={}){this.services=e,this.options=t,this.allOptions=n,this.type="backend",this.init(e,t,n)}init(e,t={},n={}){if(this.services=e,this.options=T(T(T({},uT()),this.options||{}),t),this.allOptions=n,this.services&&this.options.reloadInterval){let a=setInterval(()=>this.reload(),this.options.reloadInterval);typeof a=="object"&&typeof a.unref=="function"&&a.unref()}}readMulti(e,t,n){this._readAny(e,e,t,t,n)}read(e,t,n){this._readAny([e],e,[t],t,n)}_readAny(e,t,n,a,i){let l=this.options.loadPath;typeof this.options.loadPath=="function"&&(l=this.options.loadPath(e,n)),l=aT(l),l.then(r=>{if(!r)return i(null,{});let s=tm(r,{lng:e.join("+"),ns:n.join("+")});if(s==null){let o=e.map(Ys).join(", "),u=n.map(Ys).join(", ");return i(new Error("i18next-http-backend: unsafe lng/ns value \u2014 refusing to build request URL for languages=["+o+"] namespaces=["+u+"]"),!1)}this.loadUrl(s,i,t,a)})}loadUrl(e,t,n,a){let i=typeof n=="string"?[n]:n,l=typeof a=="string"?[a]:a,r=this.options.parseLoadPayload(i,l),s=Ys(tT(e));this.options.request(this.options,e,r,(o,u)=>{if(u&&(u.status>=500&&u.status<600||!u.status))return t("failed loading "+s+"; status code: "+u.status,!0);if(u&&u.status>=400&&u.status<500)return t("failed loading "+s+"; status code: "+u.status,!1);if(!u&&o&&o.message){let d=o.message.toLowerCase();if(["failed","fetch","network","load"].find(p=>d.indexOf(p)>-1))return t("failed loading "+s+": "+Ys(o.message),!0)}if(o)return t(o,!1);let c,f;try{typeof u.data=="string"?c=this.options.parse(u.data,n,a):c=u.data}catch(d){f="failed parsing "+s+" to json"}if(f)return t(f,!1);t(null,c)})}create(e,t,n,a,i){if(!this.options.addPath)return;typeof e=="string"&&(e=[e]);let l=this.options.parsePayload(t,n,a),r=0,s=[],o=[];e.forEach(u=>{let c=this.options.addPath;typeof this.options.addPath=="function"&&(c=this.options.addPath(u,t));let f=tm(c,{lng:u,ns:t});if(f==null){r+=1,i&&r===e.length&&i(s,o);return}this.options.request(this.options,f,l,(d,p)=>{r+=1,s.push(d),o.push(p),r===e.length&&typeof i=="function"&&i(s,o)})})}reload(){let{backendConnector:e,languageUtils:t,logger:n}=this.services,a=e.language;if(a&&a.toLowerCase()==="cimode")return;let i=[],l=r=>{t.toResolveHierarchy(r).forEach(s=>{i.indexOf(s)<0&&i.push(s)})};l(a),this.allOptions.preload&&this.allOptions.preload.forEach(r=>l(r)),i.forEach(r=>{this.allOptions.ns.forEach(s=>{e.read(r,s,"read",null,null,(o,u)=>{o&&n.warn("loading namespace ".concat(s," for language ").concat(r," failed"),o),!o&&u&&n.log("loaded namespace ".concat(s," for language ").concat(r),u),e.loaded("".concat(r,"|").concat(s),o,u)})})})}};Lc.type="backend";function cm(e,t,n){return(t=qs(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function fm(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),n.push.apply(n,a)}return n}function Uc(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?fm(Object(n),!0).forEach(function(a){cm(e,a,n[a])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):fm(Object(n)).forEach(function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(n,a))})}return e}var cT=(function(){function e(t){Fl(this,e),this.store=t.store}return Jl(e,[{key:"setItem",value:function(n,a){if(this.store)try{this.store.setItem(n,a)}catch(i){}}},{key:"getItem",value:function(n,a){if(this.store)try{return this.store.getItem(n,a)}catch(i){}}}])})();function fT(){var e=null;try{e=window.localStorage}catch(t){typeof window<"u"&&console.log("Failed to load local storage.",t)}return{prefix:"i18next_res_",expirationTime:10080*60*1e3,defaultVersion:void 0,getVersion:void 0,versions:{},store:e}}var Hc=(function(){function e(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};Fl(this,e),this.init(t,n),this.type="backend"}return Jl(e,[{key:"init",value:function(n){var a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.services=n,this.options=Uc(Uc(Uc({},fT()),this.options),a),this.storage=new cT(this.options)}},{key:"read",value:function(n,a,i){var l=Date.now();if(!this.storage.store)return i(null,null);var r=this.storage.getItem("".concat(this.options.prefix).concat(n,"-").concat(a));if(r){r=JSON.parse(r);var s=this.getVersion(n,a);if(r.i18nStamp&&r.i18nStamp+this.options.expirationTime>l&&s===r.i18nVersion){var o=r.i18nStamp;return delete r.i18nVersion,delete r.i18nStamp,i(null,r,o)}}return i(null,null)}},{key:"save",value:function(n,a,i){if(this.storage.store){i.i18nStamp=Date.now();var l=this.getVersion(n,a);l&&(i.i18nVersion=l),this.storage.setItem("".concat(this.options.prefix).concat(n,"-").concat(a),JSON.stringify(i))}}},{key:"getVersion",value:function(n,a){var i,l;return((i=(l=this.options).getVersion)===null||i===void 0?void 0:i.call(l,n,a))||this.options.versions[n]||this.options.defaultVersion}}])})();Hc.type="backend";var MT=Z(ye(),1);var Pl=Z(ye(),1);var wT=Z(km());var Xs=(e,t,n,a)=>{var l,r,s,o;let i=[n,T({code:t},a||{})];if((r=(l=e==null?void 0:e.services)==null?void 0:l.logger)!=null&&r.forward)return e.services.logger.forward(i,"warn","react-i18next::",!0);ln(i[0])&&(i[0]="react-i18next:: ".concat(i[0])),(o=(s=e==null?void 0:e.services)==null?void 0:s.logger)!=null&&o.warn?e.services.logger.warn(...i):console!=null&&console.warn&&console.warn(...i)},Rm={},la=(e,t,n,a)=>{ln(n)&&Rm[n]||(ln(n)&&(Rm[n]=new Date),Xs(e,t,n,a))},Om=(e,t)=>()=>{if(e.isInitialized)t();else{let n=()=>{setTimeout(()=>{e.off("initialized",n)},0),t()};e.on("initialized",n)}},$s=(e,t,n)=>{e.loadNamespaces(t,Om(e,n))},$c=(e,t,n,a)=>{if(ln(n)&&(n=[n]),e.options.preload&&e.options.preload.indexOf(t)>-1)return $s(e,n,a);n.forEach(i=>{e.options.ns.indexOf(i)<0&&e.options.ns.push(i)}),e.loadLanguages(t,Om(e,a))},wm=(e,t,n={})=>!t.languages||!t.languages.length?(la(t,"NO_LANGUAGES","i18n.languages were undefined or empty",{languages:t.languages}),!0):t.hasLoadedNamespace(e,{lng:n.lng,precheck:(a,i)=>{if(n.bindI18n&&n.bindI18n.indexOf("languageChanging")>-1&&a.services.backendConnector.backend&&a.isLanguageChangingTo&&!i(a.isLanguageChangingTo,e))return!1}});var ln=e=>typeof e=="string",Qc=e=>typeof e=="object"&&e!==null;var NT=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,_T={"&":"&","&":"&","<":"<","<":"<",">":">",">":">","'":"'","'":"'",""":'"',""":'"'," ":" "," ":" ","©":"\xA9","©":"\xA9","®":"\xAE","®":"\xAE","…":"\u2026","…":"\u2026","/":"/","/":"/"},CT=e=>_T[e],Zc=e=>e.replace(NT,CT);var Kc={bindI18n:"languageChanged",bindI18nStore:"",transEmptyNodeValue:"",transSupportBasicHtmlNodes:!0,transWrapTextNodes:"",transKeepBasicHtmlNodesFor:["br","strong","i","p"],useSuspense:!0,unescape:Zc,transDefaultProps:void 0},Qs=(e={})=>{Kc=T(T({},Kc),e)},Il=()=>Kc;var Nm,Zs=e=>{Nm=e},rn=()=>Nm;var _m=Z(ye(),1);var Ks={type:"3rdParty",init(e){Qs(e.options.react),Zs(e)}};var ra=(0,_m.createContext)(),Fs=class{constructor(){this.usedNamespaces={}}addUsedNamespaces(t){t.forEach(n=>{this.usedNamespaces[n]||(this.usedNamespaces[n]=!0)})}getUsedNamespaces(){return Object.keys(this.usedNamespaces)}};var Lm=Z(ye(),1);var Fa=Z(ye(),1);var Di=class e extends Error{constructor(t,n,a){super(t),this.name="TranslationParserError",this.position=n,this.translationString=a,Error.captureStackTrace&&Error.captureStackTrace(this,e)}};var Cm={" ":"\xA0","&":"&","<":"<",">":">",""":'"',"'":"'","©":"\xA9","®":"\xAE","™":"\u2122","…":"\u2026","–":"\u2013","—":"\u2014","‘":"\u2018","’":"\u2019","‚":"\u201A","“":"\u201C","”":"\u201D","„":"\u201E","†":"\u2020","‡":"\u2021","•":"\u2022","′":"\u2032","″":"\u2033","‹":"\u2039","›":"\u203A","§":"\xA7","¶":"\xB6","·":"\xB7"," ":"\u2002"," ":"\u2003"," ":"\u2009","€":"\u20AC","£":"\xA3","¥":"\xA5","¢":"\xA2","¤":"\xA4","×":"\xD7","÷":"\xF7","−":"\u2212","±":"\xB1","≠":"\u2260","≤":"\u2264","≥":"\u2265","≈":"\u2248","≡":"\u2261","∞":"\u221E","∫":"\u222B","∑":"\u2211","∏":"\u220F","√":"\u221A","∂":"\u2202","‰":"\u2030","°":"\xB0","µ":"\xB5","←":"\u2190","↑":"\u2191","→":"\u2192","↓":"\u2193","↔":"\u2194","↵":"\u21B5","⇐":"\u21D0","⇑":"\u21D1","⇒":"\u21D2","⇓":"\u21D3","⇔":"\u21D4","α":"\u03B1","β":"\u03B2","γ":"\u03B3","δ":"\u03B4","ε":"\u03B5","ζ":"\u03B6","η":"\u03B7","θ":"\u03B8","ι":"\u03B9","κ":"\u03BA","λ":"\u03BB","μ":"\u03BC","ν":"\u03BD","ξ":"\u03BE","ο":"\u03BF","π":"\u03C0","ρ":"\u03C1","σ":"\u03C3","τ":"\u03C4","υ":"\u03C5","φ":"\u03C6","χ":"\u03C7","ψ":"\u03C8","ω":"\u03C9","Α":"\u0391","Β":"\u0392","Γ":"\u0393","Δ":"\u0394","Ε":"\u0395","Ζ":"\u0396","Η":"\u0397","Θ":"\u0398","Ι":"\u0399","Κ":"\u039A","Λ":"\u039B","Μ":"\u039C","Ν":"\u039D","Ξ":"\u039E","Ο":"\u039F","Π":"\u03A0","Ρ":"\u03A1","Σ":"\u03A3","Τ":"\u03A4","Υ":"\u03A5","Φ":"\u03A6","Χ":"\u03A7","Ψ":"\u03A8","Ω":"\u03A9","À":"\xC0","Á":"\xC1","Â":"\xC2","Ã":"\xC3","Ä":"\xC4","Å":"\xC5","Æ":"\xC6","Ç":"\xC7","È":"\xC8","É":"\xC9","Ê":"\xCA","Ë":"\xCB","Ì":"\xCC","Í":"\xCD","Î":"\xCE","Ï":"\xCF","Ð":"\xD0","Ñ":"\xD1","Ò":"\xD2","Ó":"\xD3","Ô":"\xD4","Õ":"\xD5","Ö":"\xD6","Ø":"\xD8","Ù":"\xD9","Ú":"\xDA","Û":"\xDB","Ü":"\xDC","Ý":"\xDD","Þ":"\xDE","ß":"\xDF","à":"\xE0","á":"\xE1","â":"\xE2","ã":"\xE3","ä":"\xE4","å":"\xE5","æ":"\xE6","ç":"\xE7","è":"\xE8","é":"\xE9","ê":"\xEA","ë":"\xEB","ì":"\xEC","í":"\xED","î":"\xEE","ï":"\xEF","ð":"\xF0","ñ":"\xF1","ò":"\xF2","ó":"\xF3","ô":"\xF4","õ":"\xF5","ö":"\xF6","ø":"\xF8","ù":"\xF9","ú":"\xFA","û":"\xFB","ü":"\xFC","ý":"\xFD","þ":"\xFE","ÿ":"\xFF","¡":"\xA1","¿":"\xBF","ƒ":"\u0192","ˆ":"\u02C6","˜":"\u02DC","Œ":"\u0152","œ":"\u0153","Š":"\u0160","š":"\u0161","Ÿ":"\u0178","ª":"\xAA","º":"\xBA","¯":"\xAF","´":"\xB4","¸":"\xB8","¹":"\xB9","²":"\xB2","³":"\xB3","¼":"\xBC","½":"\xBD","¾":"\xBE","♠":"\u2660","♣":"\u2663","♥":"\u2665","♦":"\u2666","◊":"\u25CA","‾":"\u203E","⁄":"\u2044","℘":"\u2118","ℑ":"\u2111","ℜ":"\u211C","ℵ":"\u2135"},LT=new RegExp(Object.keys(Cm).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|"),"g"),Dm=e=>e.replace(LT,t=>Cm[t]).replace(/&#(\d+);/g,(t,n)=>String.fromCharCode(parseInt(n,10))).replace(/&#x([0-9a-fA-F]+);/g,(t,n)=>String.fromCharCode(parseInt(n,16)));var zm=e=>{let t=[],n=0,a="",i=()=>{a&&(t.push({type:"Text",value:a,position:n-a.length}),a="")};for(;n<e.length;){let l=e[n];if(l==="<"){let r=e.slice(n).match(/^<(\d+)>/);if(r)i(),t.push({type:"TagOpen",value:r[0],position:n,tagNumber:parseInt(r[1],10)}),n+=r[0].length;else{let s=e.slice(n).match(/^<\/(\d+)>/);s?(i(),t.push({type:"TagClose",value:s[0],position:n,tagNumber:parseInt(s[1],10)}),n+=s[0].length):(a+=l,n+=1)}}else a+=l,n+=1}return i(),t};var Wl=Z(ye(),1);var UT=(e,t,n)=>{let{type:a,props:i={}}=e;if(i.children&&Array.isArray(i.children)&&n){let l=i,{children:r}=l,s=Mn(l,["children"]);return Wl.default.createElement(a,s,...t)}return t.length===0?Wl.default.createElement(a,i):t.length===1?Wl.default.createElement(a,i,t[0]):Wl.default.createElement(a,i,...t)},Mm=(e,t=[])=>{if(!e)return[];let n=zm(e),a=[],i=[],l=new Set,r=()=>{var o;if(i.length===0)return t;let s=i[i.length-1];return(o=s.declaration.props)!=null&&o.children&&Array.isArray(s.declaration.props.children)?s.declaration.props.children:s.declarations};if(n.forEach(s=>{switch(s.type){case"Text":{let o=Dm(s.value);(i.length>0?i[i.length-1].children:a).push(o)}break;case"TagOpen":{let{tagNumber:o}=s,u=r(),c=u[o];if(!c){l.add(o);let f="<".concat(o,">");(i.length>0?i[i.length-1].children:a).push(f);break}i.push({tagNumber:o,children:[],position:s.position,declaration:c,declarations:u})}break;case"TagClose":{let{tagNumber:o}=s;if(l.has(o)){let d="</".concat(o,">");(i.length>0?i[i.length-1].children:a).push(d),l.delete(o);break}if(i.length===0)throw new Di("Unexpected closing tag </".concat(o,"> at position ").concat(s.position),s.position,e);let u=i.pop();if(u.tagNumber!==o)throw new Di("Mismatched tags: expected </".concat(u.tagNumber,"> but got </").concat(o,"> at position ").concat(s.position),s.position,e);let c=UT(u.declaration,u.children,u.declarations);(i.length>0?i[i.length-1].children:a).push(c)}break}}),i.length>0){let s=i[i.length-1];throw new Di("Unclosed tag <".concat(s.tagNumber,"> at position ").concat(s.position),s.position,e)}return a};function Js({i18nKey:e,defaultTranslation:t,content:n,ns:a,values:i={},i18n:l,t:r}){var d,p,v,S;let s=l||rn();if(!s)return la(s,"NO_I18NEXT_INSTANCE","IcuTrans: You need to pass in an i18next instance using i18nextReactModule",{i18nKey:e}),Fa.default.createElement(Fa.default.Fragment,{},t);let o=r||((d=s.t)==null?void 0:d.bind(s))||(x=>x),u=a||o.ns||((p=s.options)==null?void 0:p.defaultNS);u=ln(u)?[u]:u||["translation"];let c=i;(S=(v=s.options)==null?void 0:v.interpolation)!=null&&S.defaultVariables&&(c=i&&Object.keys(i).length>0?T(T({},i),s.options.interpolation.defaultVariables):T({},s.options.interpolation.defaultVariables));let f=o(e,z(T({defaultValue:t},c),{ns:u}));try{let x=Mm(f,n);return Fa.default.createElement(Fa.default.Fragment,{},...x)}catch(x){return Xs(s,"ICU_TRANS_RENDER_ERROR",'IcuTrans component error for key "'.concat(e,'": ').concat(x.message),{i18nKey:e,error:x}),Fa.default.createElement(Fa.default.Fragment,{},f)}}Js.displayName="IcuTransWithoutContext";function Um({i18nKey:e,defaultTranslation:t,content:n,ns:a,values:i={},i18n:l,t:r}){var f;let{i18n:s,defaultNS:o}=(0,Lm.useContext)(ra)||{},u=l||s||rn(),c=r||(u==null?void 0:u.t.bind(u));return Js({i18nKey:e,defaultTranslation:t,content:n,ns:a||(c==null?void 0:c.ns)||o||((f=u==null?void 0:u.options)==null?void 0:f.defaultNS),values:i,i18n:u,t:r})}Um.displayName="IcuTrans";var Ze=Z(ye(),1),Ym=Z(qm(),1);var QT=(e,t)=>{if(ln(t))return t;if(Qc(t)&&ln(t.defaultValue))return t.defaultValue;if(typeof e=="function")return"";if(Array.isArray(e)){let n=e[e.length-1];return typeof n=="function"?"":n}return e},ZT={t:QT,ready:!1},KT=()=>()=>{},ct=(e,t={})=>{var U,M,ve;let{i18n:n}=t,{i18n:a,defaultNS:i}=(0,Ze.useContext)(ra)||{},l=n||a||rn();l&&!l.reportNamespaces&&(l.reportNamespaces=new Fs),l||la(l,"NO_I18NEXT_INSTANCE","useTranslation: You will need to pass in an i18next instance by using initReactI18next");let r=(0,Ze.useMemo)(()=>{var X;return T(T(T({},Il()),(X=l==null?void 0:l.options)==null?void 0:X.react),t)},[l,t]),{useSuspense:s,keyPrefix:o}=r,u=e||i||((U=l==null?void 0:l.options)==null?void 0:U.defaultNS),c=ln(u)?[u]:u||["translation"],f=(0,Ze.useMemo)(()=>c,c);(ve=(M=l==null?void 0:l.reportNamespaces)==null?void 0:M.addUsedNamespaces)==null||ve.call(M,f);let d=(0,Ze.useRef)(0),p=(0,Ze.useCallback)(X=>{if(!l)return KT;let{bindI18n:D,bindI18nStore:C}=r,P=()=>{d.current+=1,X()};return D&&l.on(D,P),C&&l.store.on(C,P),()=>{D&&D.split(" ").forEach(re=>l.off(re,P)),C&&C.split(" ").forEach(re=>l.store.off(re,P))}},[l,r]),v=(0,Ze.useRef)(),S=(0,Ze.useCallback)(()=>{if(!l)return ZT;let X=!!(l.isInitialized||l.initializedStoreOnce)&&f.every(gt=>wm(gt,l,r)),D=t.lng||l.language,C=d.current,P=v.current;if(P&&P.ready===X&&P.lng===D&&P.keyPrefix===o&&P.revision===C)return P;let xe={t:l.getFixedT(D,r.nsMode==="fallback"?f:f[0],o,{scopeNs:f}),ready:X,lng:D,keyPrefix:o,revision:C};return v.current=xe,xe},[l,f,o,r,t.lng]),[x,h]=(0,Ze.useState)(0),{t:m,ready:y}=(0,Ym.useSyncExternalStore)(p,S,S);(0,Ze.useEffect)(()=>{if(l&&!y&&!s){let X=()=>h(D=>D+1);t.lng?$c(l,t.lng,f,X):$s(l,f,X)}},[l,t.lng,f,y,s,x]);let b=l||{},k=(0,Ze.useRef)(null),_=(0,Ze.useRef)(),w=X=>{let D=Object.getOwnPropertyDescriptors(X);D.__original&&delete D.__original;let C=Object.create(Object.getPrototypeOf(X),D);if(!Object.prototype.hasOwnProperty.call(C,"__original"))try{Object.defineProperty(C,"__original",{value:X,writable:!1,enumerable:!1,configurable:!1})}catch(P){}return C},B=(0,Ze.useMemo)(()=>{let X=b,D=X==null?void 0:X.language,C=X;X&&(k.current&&k.current.__original===X?_.current!==D?(C=w(X),k.current=C,_.current=D):C=k.current:(C=w(X),k.current=C,_.current=D));let P=!y&&!s?(...xe)=>(la(l,"USE_T_BEFORE_READY","useTranslation: t was called before ready. When using useSuspense: false, make sure to check the ready flag before using t."),m(...xe)):m,re=[P,C,y];return re.t=P,re.i18n=C,re.ready=y,re},[m,b,y,b.resolvedLanguage,b.language,b.languages]);if(l&&s&&!y)throw new Promise(X=>{let D=()=>X();t.lng?$c(l,t.lng,f,D):$s(l,f,D)});return B};var Gm=Z(ye(),1);var Vm=Z(ye(),1);var WT=Z(ye(),1);var JT=Z(ye(),1);var Xm={auth:{invalidUsernamePass:"Invalid username/password combination",incorrectOldPassword:"Incorrect Old Password",passwordTooShort:"Password must be at least 6 characters long",passUpdated:"Password updated",missingRequiredFields:"Missing Required Fields"},error:{notFound:"Not Found",internalError:"Internal Server Error",invalidArgs:"Invalid Arguments",badMethod:"Bad Method",notAuthenticated:"Not Authenticated",permissionDenied:"Permission Denied"},nav:{privateProfileEnabled:"private profile enabled",darkMode:"dark mode",lightMode:"light mode",addUrl:"add url",addNote:"add note",notes:"notes",settings:"settings",logout:"log out",login:"log in"},footer:{sourceCode:"Source Code"},login:{pageTitle:"Log In",username:"Username",password:"Password",submit:"Log In"},changePassword:{oldPassword:"Old Password",newPassword:"New Password",submit:"Save Changes"},settings:{serverDefault:"Server Default",bookmarklet:"add url bookmarklet",changePassword:"Change Password",accountTitle:"Account Settings",archiveDefault:"Archive new non-Private bookmarks by default",privateDefault:"Default new bookmarks to Private",suggestTags:"Enable tag suggestions",privacyLock:"Privacy Lock (Private Account)",archivingDisabled:"Archiving Disabled",language:"Language"},rss:"RSS",filter:{all:"all",private:"private",public:"public",unread:"unread",untagged:"untagged",starred:"starred"},pagination:{perPage:"per page:"},pager:{earlier:"\xAB earlier",later:"later \xBB"},notes:{youHave:"You have",found:"Found",label:"notes:"},search:{placeholder:"search",clearTitle:"clear search results",submitTitle:"submit search",syntaxTitle:"search syntax"},noTitle:"[no title]",edit:"edit",delete:"delete",cancel:"cancel",destroy:"destroy",save:"save",fetch:"fetch",archive:"archive",archiving:"archiving",bmark:{archiveLinkTitle:"archive link",markAsRead:"mark as read",viewInContext:"view in context",url:"url",title:"title",description:"description",tags:"tags",private:"private",toread:"to-read"},note:{killed:"you killed this note",titleLabel:"title:",descriptionLabel:"description:",useMarkdown:"use markdown?",publicLabel:"public?"},addForm:{previouslySaved:"previously saved",url:"URL",archive:"archive",archiveUnavailable:"archiving is unavailable for private bookmarks",readLater:"read later",update:"update bookmark",add:"add bookmark",killed:"you killed this bookmark"},tagCloud:{relatedTags:"Related Tags",topTags:"Top Tags",topTagsTitle:"show a cloud of your most-used tags",allTitle:"show all tags",min2Title:"show tags with at least 2 bookmarks",min5Title:"show tags with at least 5 bookmarks",min10Title:"show tags with at least 10 bookmarks",min20Title:"show tags with at least 20 bookmarks",hide:"hide",show:"show"},docs:{title:"Understanding the Search Syntax",pageFilters:"Page filters",pageFiltersDesc:"Searches are scoped to the currently selected page filter.",soGiven:"So, given the possible page filters",if:"If",isCurrentlySelectedIncludes:"is currently selected, the search includes",bookmarks:"bookmarks",isCurrentlySelectedOnly:"is currently selected, the search only includes",bookmarksEtc:"bookmarks, etc..",combineAnd:"Combine Searches (AND)",separateBySpace:"Separate terms by a space.",forExample:"For example,",combineOr:"Combine Searches (OR)",put:"Put",betweenQuery:"between each search query.",excludeWords:"Exclude words from your search",inFrontWord:"in front of a word you want to leave out.",exactMatch:"Search for an exact match",putInQuotes:"Put a word or phrase inside quotes.",specificField:"Search on a specific field",inFrontTerm:"in front of the term,",where:"where",isOneOfOptions:"is one of the options below",bookmarkSearch:"Bookmark Search",noteSearch:"Note Search",fieldHeader:"FIELD",exampleHeader:"EXAMPLE",complexExamples:"More Complex Examples",complexExample1Desc:'"youtube" in url, and title of "haskell" or title of "python" and after 12/31/2017',complexExample2Desc:'"hacker news" not in title, and "news", "cnn", "npr" anywhere, or "the guardian" in the description'}};function rt(){return globalThis.app}function Mi(e=navigator.language,t){let a=(t instanceof Date?t.getTime():new Date(t).getTime())-Date.now(),i=Math.abs(a),l=[["year",365*24*60*60*1e3],["month",720*60*60*1e3],["day",1440*60*1e3],["hour",3600*1e3],["minute",60*1e3],["second",1e3]],r=new Intl.RelativeTimeFormat(e,{numeric:"auto"});for(let[s,o]of l)if(i>=o||s==="second")return r.format(Math.round(a/o),s);return""}function sa(e,t){return new Date(t).toLocaleString(e,{dateStyle:"full",timeStyle:"long"})}function $m(e,t){return new Date(t).toLocaleDateString(e,{year:"numeric",month:"short",day:"numeric"})}function Li(e){e.close()}function Is(e){var t;(t=document.getElementById(e))==null||t.focus()}function tx(e){return decodeURIComponent(e)}function nx(e){var r;let t=e.slice(0,1),a=(t==="#"||t==="?"?e.slice(1):e).split("&").filter(s=>s!==""),i=s=>tx(s.replace(/\+/g," ")),l=[];for(let s of a){let[o,...u]=s.split("=");o&&(u.length===0?l.push([i(o),null]):u.length===1&&l.push([i(o),i((r=u[0])!=null?r:"")]))}return l}function er(){return nx(window.location.search)}function tr(e,t){for(let[n,a]of e)if(n===t)return a;return null}function Ui(e){return encodeURIComponent(e.replace(/\+/g,"%2B"))}function bn(e){return e!=null?e:""}function Ps(e){var t;return(t=e==null?void 0:e.replace(/,/g," ").replace(/\s+/g," ").trim())!=null?t:""}function Qm(e){let t=5381,n=e.length;for(;n;)t=t*33^e.charCodeAt(--n);return(t>>>0).toString(36)}var Zm="translation";var Jc=rt();lt.use(zc).use(Ks).init({lng:Jc.lang,fallbackLng:"en",defaultNS:Zm,ns:[Zm],partialBundledLanguages:!0,resources:{en:{translation:Xm}},backend:{backends:[Hc,Lc],backendOptions:[{prefix:"i18next_res_".concat(Qm(Jc.i18nR),"_"),expirationTime:10080*60*1e3},{loadPath:"".concat(Jc.i18nR,"/{{lng}}/{{ns}}.json")}]},interpolation:{escapeValue:!1},load:"currentOnly"});var y1=Z(ye()),mp=Z(kv());var Rn=class extends Error{constructor(){super(...arguments);G(this,"name","KyError")}get isKyError(){return!0}};var Ol=class extends Rn{constructor(n,a,i){var u;let l=n.status||n.status===0?n.status:"",r=(u=n.statusText)!=null?u:"",s="".concat(l," ").concat(r).trim(),o=s?"status code ".concat(s):"an unknown error";super("Request failed with ".concat(o,": ").concat(a.method," ").concat(a.url));G(this,"name","HTTPError");G(this,"response");G(this,"request");G(this,"options");G(this,"data");this.response=n,this.request=a,this.options=i}};var wl=class extends Rn{constructor(n,a){super("Request failed due to a network error: ".concat(n.method," ").concat(n.url),a);G(this,"name","NetworkError");G(this,"request");this.request=n}};var Nl=class extends Error{constructor(n){let a="Non-error value was thrown";try{typeof n=="string"?a=n:n&&typeof n=="object"&&"message"in n&&typeof n.message=="string"&&(a=n.message)}catch(i){}super(a);G(this,"name","NonError");G(this,"value");this.value=n}};var gi=class extends Rn{constructor(n){let a=n!=null&&n.cause?n.cause instanceof Error?n.cause:new Nl(n.cause):void 0;super(n!=null&&n.code?"Forced retry: ".concat(n.code):"Forced retry",a?{cause:a}:void 0);G(this,"name","ForceRetryError");G(this,"customDelay");G(this,"code");G(this,"customRequest");this.customDelay=n==null?void 0:n.delay,this.code=n==null?void 0:n.code,this.customRequest=n==null?void 0:n.request}};var Nu=class extends Error{constructor(n){super("Response schema validation failed");G(this,"name","SchemaValidationError");G(this,"issues");this.issues=n}};var It=class extends Rn{constructor(n){super("Request timed out: ".concat(n.method," ").concat(n.url));G(this,"name","TimeoutError");G(this,"request");this.request=n}};var _h=(()=>{let e=!1,t=!1,n=typeof globalThis.ReadableStream=="function",a=typeof globalThis.Request=="function";if(n&&a)try{t=new globalThis.Request("https://empty.invalid",{body:new globalThis.ReadableStream,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type")}catch(i){if(i instanceof Error&&i.message==="unsupported BodyInit type")return!1;throw i}return e&&!t})(),Rv=typeof globalThis.AbortController=="function",_u=typeof globalThis.AbortSignal=="function"&&typeof globalThis.AbortSignal.any=="function",Ov=typeof globalThis.ReadableStream=="function",wv=typeof globalThis.FormData=="function",Cu=["get","post","put","patch","head","delete"],DA=()=>{};DA();var Nv={json:"application/json",text:"text/*",formData:"multipart/form-data",arrayBuffer:"*/*",blob:"*/*",bytes:"*/*"},_l=2147483647,_v=40,Du=Symbol("stop"),as=class{constructor(t){G(this,"options");this.options=t}},Cv=e=>new as(e),Dv={json:!0,parseJson:!0,stringifyJson:!0,searchParams:!0,baseUrl:!0,prefix:!0,retry:!0,timeout:!0,totalTimeout:!0,hooks:!0,throwHttpErrors:!0,onDownloadProgress:!0,onUploadProgress:!0,fetch:!0,context:!0},zv={method:!0,headers:!0,body:!0,mode:!0,credentials:!0,cache:!0,redirect:!0,referrer:!0,referrerPolicy:!0,integrity:!0,keepalive:!0,signal:!0,window:!0,duplex:!0};var zu=new TextEncoder,zA=e=>{if(!e)return 0;if(e instanceof FormData){let t=0;for(let[n,a]of e)t+=_v,t+=zu.encode('Content-Disposition: form-data; name="'.concat(n,'"')).byteLength,t+=typeof a=="string"?zu.encode(a).byteLength:a.size;return t}return e instanceof Blob?e.size:e instanceof ArrayBuffer||ArrayBuffer.isView(e)?e.byteLength:typeof e=="string"?zu.encode(e).byteLength:e instanceof URLSearchParams?zu.encode(e.toString()).byteLength:0},Mv=(e,t,n)=>{let a,i=0;return e.pipeThrough(new TransformStream({transform(l,r){if(r.enqueue(l),a){i+=a.byteLength;let s=t===0?0:i/t;s>=1&&(s=1-Number.EPSILON),n==null||n({percent:s,totalBytes:Math.max(t,i),transferredBytes:i},a)}a=l},flush(){a&&(i+=a.byteLength,n==null||n({percent:1,totalBytes:Math.max(t,i),transferredBytes:i},a))}}))},Lv=(e,t)=>{if(!e.body)return e;let n={status:e.status,statusText:e.statusText,headers:e.headers};if(e.status===204)return new Response(null,n);let a=Math.max(0,Number(e.headers.get("content-length"))||0);return new Response(Mv(e.body,a,t),n)},Uv=(e,t,n)=>{if(!e.body)return e;let a=zA(n!=null?n:e.body);return new Request(e,{duplex:"half",body:Mv(e.body,a,t)})};var On=e=>e!==null&&typeof e=="object";var MA=Symbol("replaceOption"),Ch=e=>On(e)&&e[MA]===!0?{isReplace:!0,value:e.value}:{isReplace:!1,value:e};var ls=(...e)=>{for(let t of e)if((!On(t)||Array.isArray(t))&&t!==void 0)throw new TypeError("The `options` argument must be an object");return Mh({},...e)},zh=(e={},t={})=>{let n=new globalThis.Headers(e),a=t instanceof globalThis.Headers,i=new globalThis.Headers(t);for(let[l,r]of i.entries())a&&r==="undefined"||r===void 0?n.delete(l):n.set(l,r);return n},Dh=e=>{if(!On(e)||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null},Cl=e=>{if(e instanceof URLSearchParams){let t=new URLSearchParams(e),n=e[Ua];return n&&(t[Ua]=new Set(n)),t}return e instanceof globalThis.Headers?new globalThis.Headers(e):Array.isArray(e)?[...e]:Dh(e)?T({},e):e},LA=e=>Object.fromEntries(Object.entries(e).filter(t=>t[1]!==void 0)),UA=(e,t)=>Dh(e)&&Dh(t)?LA(T(T({},e),t)):zh(e,t);function is(e,t,n){var a,i;return Object.hasOwn(t,n)&&t[n]===void 0?[]:Mh((a=e[n])!=null?a:[],(i=t[n])!=null?i:[])}var Mu=(e={},t={})=>({init:is(e,t,"init"),beforeRequest:is(e,t,"beforeRequest"),beforeRetry:is(e,t,"beforeRetry"),beforeError:is(e,t,"beforeError"),afterResponse:is(e,t,"afterResponse")}),Ua=Symbol("deletedParameters"),HA=(e,t)=>{let n=new URLSearchParams,a=new Set;for(let i of[e,t])if(i!==void 0)if(i instanceof URLSearchParams){for(let[r,s]of i.entries())n.append(r,s),a.delete(r);let l=i[Ua];if(l)for(let r of l)n.delete(r),a.add(r)}else if(Array.isArray(i))for(let l of i){if(!Array.isArray(l)||l.length!==2)throw new TypeError("Array search parameters must be provided in [[key, value], ...] format");n.append(String(l[0]),String(l[1])),a.delete(String(l[0]))}else if(On(i))for(let[l,r]of Object.entries(i))r===void 0?(n.delete(l),a.add(l)):(n.append(l,String(r)),a.delete(l));else{let l=new URLSearchParams(i);for(let[r,s]of l.entries())n.append(r,s),a.delete(r)}return a.size>0&&(n[Ua]=a),n},Mh=(...e)=>{let t={},n={},a={},i,l=[];for(let r of e)if(Array.isArray(r))Array.isArray(t)||(t=[]),t=[...t,...r];else if(On(r)){for(let[s,o]of Object.entries(r)){if(s==="signal"&&o instanceof globalThis.AbortSignal){l.push(o);continue}let u=Ch(o),{isReplace:c}=u;if(o=u.value,s==="context"){if(o!=null&&(!On(o)||Array.isArray(o)))throw new TypeError("The `context` option must be an object");t=z(T({},t),{context:o==null?{}:T(c?{}:T({},t.context),o)});continue}if(s==="searchParams"){o==null?i=void 0:c?i=o:i=i===void 0?o:HA(i,o);continue}On(o)&&!c&&s in t&&(o=Mh(t[s],o)),t=z(T({},t),{[s]:o})}if(On(r.hooks)){let{value:s,isReplace:o}=Ch(r.hooks);a=Mu(o?{}:a,s),t.hooks=a}if(On(r.headers)){let{value:s,isReplace:o}=Ch(r.headers);n=o?Cl(s):UA(n,s),t.headers=n}}return i!==void 0&&(t.searchParams=i),l.length>0&&(l.length===1?t.signal=l[0]:_u?t.signal=AbortSignal.any(l):t.signal=l.at(-1)),t};var Bv=e=>Cu.includes(e)?e.toUpperCase():e,BA=["get","put","head","delete","options","trace"],jA=[408,413,429,500,502,503,504],qA=[413,429,503],Hv={limit:2,methods:BA,statusCodes:jA,afterStatusCodes:qA,maxRetryAfter:Number.POSITIVE_INFINITY,backoffLimit:Number.POSITIVE_INFINITY,delay:e=>.3*2**(e-1)*1e3,jitter:void 0,retryOnTimeout:!1},jv=(e={})=>{var n;if(typeof e=="number")return z(T({},Hv),{limit:e});if(e.methods&&!Array.isArray(e.methods))throw new Error("retry.methods must be an array");if(e.statusCodes&&!Array.isArray(e.statusCodes))throw new Error("retry.statusCodes must be an array");let t=Object.fromEntries(Object.entries(z(T({},e),{methods:(n=e.methods)==null?void 0:n.map(a=>a.toLowerCase())})).filter(([,a])=>a!==void 0));return T(T({},Hv),t)};async function Lh(e,t,n,a){return new Promise((i,l)=>{let r=setTimeout(()=>{n&&n.abort(),l(new It(e))},a.timeout);a.fetch(e,t).then(i).catch(l).then(()=>{clearTimeout(r)})})}async function Lu(e,{signal:t}){return new Promise((n,a)=>{t&&(t.throwIfAborted(),t.addEventListener("abort",i,{once:!0}));function i(){clearTimeout(l),a(t.reason)}let l=setTimeout(()=>{t==null||t.removeEventListener("abort",i),n()},e)})}var qv=e=>{let t={};for(let n in e)Object.hasOwn(e,n)&&!(n in zv)&&!(n in Dv)&&(t[n]=e[n]);return t},Yv=e=>{var t;return e===void 0?!1:Array.isArray(e)?e.length>0:e instanceof URLSearchParams?e.size>0||!!((t=e[Ua])!=null&&t.size):typeof e=="object"?Object.keys(e).length>0:typeof e=="string"?e.trim().length>0:!!e};var YA=Object.prototype.toString,GA=e=>YA.call(e)==="[object Error]",VA=new Set(["network error","NetworkError when attempting to fetch resource.","The Internet connection appears to be offline.","Network request failed","fetch failed","terminated"," A network error occurred.","Network connection lost"]);function Uh(e){if(!(e&&GA(e)&&e.name==="TypeError"&&typeof e.message=="string"))return!1;let{message:n,stack:a}=e;return n==="Load failed"?a===void 0||"__sentry_captured__"in e:n.startsWith("error sending request for url")||n==="Failed to fetch"||n.startsWith("Failed to fetch (")&&n.endsWith(")")?!0:VA.has(n)}var Hh=(e,t)=>e instanceof t||(e==null?void 0:e.name)===t.name;function Gv(e){return Hh(e,Ol)}function Vv(e){return Hh(e,wl)}function Xv(e){return Hh(e,It)}var XA=10*1024*1024,$A="The `prefixUrl` option has been renamed `prefix` in v2 and enhanced to allow slashes in input. See also the new `baseUrl` option for improved flexibility with standard URL resolution: https://github.com/sindresorhus/ky#baseurl",rs=Symbol("timedOutResponseData"),QA=e=>{var a;let t=/;\s*charset\s*=\s*(?:"([^"]+)"|([^;,\s]+))/i.exec(e),n=(a=t==null?void 0:t[1])!=null?a:t==null?void 0:t[2];if(n)try{return new TextDecoder(n)}catch(i){}return new TextDecoder},$v="The `schema` argument must follow the Standard Schema specification",ZA=e=>typeof e!="object"?e:T(T(T(T({},e),e.methods&&{methods:[...e.methods]}),e.statusCodes&&{statusCodes:[...e.statusCodes]}),e.afterStatusCodes&&{afterStatusCodes:[...e.afterStatusCodes]}),Kv=Object.prototype.toString,Qv=e=>e instanceof globalThis.Request||Kv.call(e)==="[object Request]",ss=e=>e instanceof globalThis.Response||Kv.call(e)==="[object Response]",KA=e=>Array.isArray(e)?e.map(t=>[...t]):Cl(e);function FA(e){let t=z(T({},e),{json:Cl(e.json),context:Cl(e.context),headers:Cl(e.headers),searchParams:KA(e.searchParams)});return e.retry!==void 0&&(t.retry=ZA(e.retry)),t}var Zv=async(e,t)=>{if(typeof t!="object"&&typeof t!="function"||t===null)throw new TypeError($v);let n=t["~standard"];if(typeof n!="object"||n===null||typeof n.validate!="function")throw new TypeError($v);let a=await n.validate(e);if(a.issues)throw new Nu(a.issues);return a.value},Gu,Fv,na,cn,Ie,N,ds,bi,hs,vi,Ml,Si,ps,O,yi,Jv,Bh,Iv,jh,Pv,Wv,eS,Uu,Ha,qh,os,tS,nS,Yh,Hu,Bu,ju,us,Gh,Dl,qu,zl,Yu,aS,cs=class cs{constructor(t,n={}){yt(this,O);G(this,"request");yt(this,na);yt(this,cn,0);yt(this,Ie);yt(this,N);yt(this,ds);yt(this,bi);yt(this,hs,new WeakSet);yt(this,vi);yt(this,Ml);yt(this,Si,!1);yt(this,ps,new WeakMap);var i,l,r,s,o,u,c,f,d,p,v,S,x,h;if(it(this,Ie,t),Object.hasOwn(n,"prefixUrl"))throw new Error($A);if(it(this,N,z(T({},n),{headers:zh(E(this,Ie).headers,n.headers),hooks:Mu({},n.hooks),method:Bv((l=(i=n.method)!=null?i:E(this,Ie).method)!=null?l:"GET"),prefix:String(n.prefix||""),retry:jv(n.retry),throwHttpErrors:(r=n.throwHttpErrors)!=null?r:!0,timeout:(s=n.timeout)!=null?s:1e4,totalTimeout:(o=n.totalTimeout)!=null?o:!1,fetch:(u=n.fetch)!=null?u:globalThis.fetch.bind(globalThis),context:(c=n.context)!=null?c:{}})),typeof E(this,Ie)!="string"&&!(E(this,Ie)instanceof URL||E(this,Ie)instanceof globalThis.Request))throw new TypeError("`input` must be a string, URL, or Request");if(typeof E(this,Ie)=="string"){if(E(this,N).prefix){let m=E(this,N).prefix.replace(/\/+$/,""),y=E(this,Ie).replace(/^\/+/,"");it(this,Ie,"".concat(m,"/").concat(y))}if(E(this,N).baseUrl){let m;try{m=new URL(E(this,Ie))}catch(y){}m||it(this,Ie,new URL(E(this,Ie),new Request(E(this,N).baseUrl).url))}}Rv&&_u&&(it(this,bi,(f=E(this,N).signal)!=null?f:E(this,Ie).signal),it(this,na,new globalThis.AbortController),E(this,N).signal=H(this,O,qh).call(this)),_h&&(E(this,N).duplex="half"),E(this,N).json!==void 0&&(E(this,N).body=(v=(p=(d=E(this,N)).stringifyJson)==null?void 0:p.call(d,E(this,N).json))!=null?v:JSON.stringify(E(this,N).json),E(this,N).headers.set("content-type",(S=E(this,N).headers.get("content-type"))!=null?S:"application/json"));let a=n.headers&&new globalThis.Headers(n.headers).has("content-type");if(E(this,Ie)instanceof globalThis.Request&&(wv&&E(this,N).body instanceof globalThis.FormData||E(this,N).body instanceof URLSearchParams)&&!a&&E(this,N).headers.delete("content-type"),this.request=new globalThis.Request(E(this,Ie),E(this,N)),Yv(E(this,N).searchParams)){let m=new URL(this.request.url),y=(x=E(this,N).searchParams)==null?void 0:x[Ua];if(y)for(let b of y)m.searchParams.delete(b);if(typeof E(this,N).searchParams=="string"){let b=E(this,N).searchParams.replace(/^\?/,"");b!==""&&(m.search=m.search?"".concat(m.search,"&").concat(b):"?".concat(b))}else{let b=new URLSearchParams(H(h=cs,Gu,Fv).call(h,E(this,N).searchParams));for(let[k,_]of b.entries())m.searchParams.append(k,_)}if(E(this,N).searchParams&&typeof E(this,N).searchParams=="object"&&!Array.isArray(E(this,N).searchParams)&&!(E(this,N).searchParams instanceof URLSearchParams))for(let[b,k]of Object.entries(E(this,N).searchParams))k===void 0&&m.searchParams.delete(b);this.request=new globalThis.Request(m,E(this,N))}if(E(this,N).onUploadProgress&&typeof E(this,N).onUploadProgress!="function")throw new TypeError("The `onUploadProgress` option must be a function");it(this,Ml,typeof E(this,N).totalTimeout=="number"?H(this,O,Gh).call(this):void 0)}static create(t,n){var o,u,c,f;let a=(u=(o=n.hooks)==null?void 0:o.init)!=null?u:[],i=a.length>0?FA(n):n;for(let d of a)d(i);let l=new cs(t,i),r=async()=>{var S,x,h,m,y,b,k,_,w,B,U,M,ve;if(typeof E(l,N).timeout=="number"&&E(l,N).timeout>_l)throw new RangeError("The `timeout` option cannot be greater than ".concat(_l));if(typeof E(l,N).totalTimeout=="number"&&E(l,N).totalTimeout>_l)throw new RangeError("The `totalTimeout` option cannot be greater than ".concat(_l));await Promise.resolve();let d=await H(S=l,O,tS).call(S),p=d!=null?d:await H(x=l,O,Yh).call(x,async()=>{var X;return H(X=l,O,ju).call(X)}),v=d!==void 0||H(h=l,O,Bu).call(h);for(;;){if(p===void 0)return p;if(ss(p))try{p=await H(m=l,O,nS).call(m,p)}catch(D){if(!(D instanceof gi))throw D;let C=await H(y=l,O,Hu).call(y,D,async()=>{var P;return H(P=l,O,ju).call(P)});if(C===void 0)return C;p=C,v=H(b=l,O,Bu).call(b);continue}let X=p;if(!X.ok&&X.type!=="opaque"&&(typeof E(l,N).throwHttpErrors=="function"?E(l,N).throwHttpErrors(X.status):E(l,N).throwHttpErrors)){let D=new Ol(X,H(k=l,O,zl).call(k,X),H(_=l,O,Dl).call(_)),C=D;if(D.data=await H(w=l,O,Iv).call(w,X),v)throw C;let P=await H(B=l,O,Hu).call(B,D,async()=>{var re;return H(re=l,O,ju).call(re)});if(P===void 0)return P;p=P,v=H(U=l,O,Bu).call(U);continue}break}if(!ss(p))return p;if(H(M=l,O,Bh).call(M,p),E(l,N).onDownloadProgress){if(typeof E(l,N).onDownloadProgress!="function")throw new TypeError("The `onDownloadProgress` option must be a function");if(!Ov)throw new Error("Streams are not supported in your environment. `ReadableStream` is missing.");let X=p.clone();return H(ve=l,O,Ha).call(ve,p),Lv(X,E(l,N).onDownloadProgress)}return p},s=(async()=>{var d,p,v,S,x;try{return await r()}catch(h){if(!(h instanceof Error)||E(l,hs).has(h))throw h;let m=h;for(let y of E(l,N).hooks.beforeError){let b=await y({request:l.request,options:H(d=l,O,Dl).call(d),error:m,retryCount:E(l,cn)});b instanceof Error&&(m=b)}throw m}finally{let h=E(l,ds);H(v=l,O,Uu).call(v,(p=h==null?void 0:h.body)!=null?p:void 0),l.request!==h&&H(x=l,O,Uu).call(x,(S=l.request.body)!=null?S:void 0)}})();for(let[d,p]of Object.entries(Nv))d==="bytes"&&typeof((f=(c=globalThis.Response)==null?void 0:c.prototype)==null?void 0:f.bytes)!="function"||(s[d]=async v=>{var m;l.request.headers.set("accept",l.request.headers.get("accept")||p);let S=await s;if(d!=="json")return S[d]();let x=await S.text();if(x==="")return v!==void 0?Zv(void 0,v):JSON.parse(x);let h=i.parseJson?await i.parseJson(x,{request:H(m=l,O,zl).call(m,S),response:S}):JSON.parse(x);return v===void 0?h:Zv(h,v)});return s}};Gu=new WeakSet,Fv=function(t){return t&&typeof t=="object"&&!Array.isArray(t)&&!(t instanceof URLSearchParams)?Object.fromEntries(Object.entries(t).filter(([,n])=>n!==void 0)):t},na=new WeakMap,cn=new WeakMap,Ie=new WeakMap,N=new WeakMap,ds=new WeakMap,bi=new WeakMap,hs=new WeakMap,vi=new WeakMap,Ml=new WeakMap,Si=new WeakMap,ps=new WeakMap,O=new WeakSet,yi=function(){let t=E(this,N).retry.delay(E(this,cn)+1),n=t;return E(this,N).retry.jitter===!0?n=Math.random()*t:typeof E(this,N).retry.jitter=="function"&&(n=E(this,N).retry.jitter(t),(!Number.isFinite(n)||n<0)&&(n=t)),Math.min(E(this,N).retry.backoffLimit,n)},Jv=async function(t){var a,i,l,r,s;if(E(this,cn)>=E(this,N).retry.limit)throw t;let n=t instanceof Error?t:new Nl(t);if(n instanceof gi)return(a=n.customDelay)!=null?a:H(this,O,yi).call(this);if(!E(this,N).retry.methods.includes(this.request.method.toLowerCase()))throw t;if(E(this,N).retry.shouldRetry!==void 0){let o=await E(this,N).retry.shouldRetry({error:n,retryCount:E(this,cn)+1});if(o===!1)throw t;if(o===!0)return H(this,O,yi).call(this)}if(Xv(t)){if(!E(this,N).retry.retryOnTimeout)throw t;return H(this,O,yi).call(this)}if(Gv(t)){if(!E(this,N).retry.statusCodes.includes(t.response.status))throw t;let o=(s=(r=(l=(i=t.response.headers.get("Retry-After"))!=null?i:t.response.headers.get("RateLimit-Reset"))!=null?l:t.response.headers.get("X-RateLimit-Retry-After"))!=null?r:t.response.headers.get("X-RateLimit-Reset"))!=null?s:t.response.headers.get("X-Rate-Limit-Reset");if(o&&E(this,N).retry.afterStatusCodes.includes(t.response.status)){let u=Number(o)*1e3;return Number.isNaN(u)?u=Date.parse(o)-Date.now():u>=Date.parse("2024-01-01")&&(u-=Date.now()),Number.isFinite(u)?(u=Math.max(0,u),Math.min(E(this,N).retry.maxRetryAfter,u)):Math.min(E(this,N).retry.maxRetryAfter,H(this,O,yi).call(this))}if(t.response.status===413)throw t;return H(this,O,yi).call(this)}if(!Vv(t))throw t;return H(this,O,yi).call(this)},Bh=function(t){let n=H(this,O,zl).call(this,t);return E(this,N).parseJson&&(t.json=async()=>{let a=await t.text();return a===""?JSON.parse(a):E(this,N).parseJson(a,{request:n,response:t})}),t},Iv=async function(t){var i;let n=await H(this,O,Wv).call(this,t,H(this,O,jh).call(this));if(n===rs){H(this,O,os).call(this);return}if(!n)return;if(!H(this,O,Pv).call(this,(i=t.headers.get("content-type"))!=null?i:""))return n;let a=await H(this,O,eS).call(this,n,t,H(this,O,jh).call(this),H(this,O,zl).call(this,t));if(a===rs){H(this,O,os).call(this);return}return a},jh=function(){let t=E(this,N).timeout===!1?1e4:E(this,N).timeout,n=H(this,O,us).call(this);if(n===void 0)return t;if(n<=0)throw new It(this.request);return Math.min(t,n)},Pv=function(t){var a;let n=((a=t.split(";",1)[0])!=null?a:"").trim().toLowerCase();return/\/(?:.*[.+-])?json$/.test(n)},Wv=async function(t,n){var f;let{body:a}=t;if(!a)try{return await t.text()}catch(d){return}let i;try{i=a.getReader()}catch(d){return}let l=QA((f=t.headers.get("content-type"))!=null?f:""),r=[],s=0,o=(async()=>{try{for(;;){let{done:d,value:p}=await i.read();if(d)break;if(s+=p.byteLength,s>XA){i.cancel().catch(()=>{});return}r.push(l.decode(p,{stream:!0}))}}catch(d){return}return r.push(l.decode()),r.join("")})(),u=new Promise(d=>{let p=setTimeout(()=>{d(rs)},n);o.finally(()=>{clearTimeout(p)})}),c=await Promise.race([o,u]);return c===rs&&i.cancel().catch(()=>{}),c},eS=async function(t,n,a,i){let l;try{return await Promise.race([Promise.resolve().then(()=>E(this,N).parseJson?E(this,N).parseJson(t,{request:i,response:n}):JSON.parse(t)),new Promise(r=>{l=setTimeout(()=>{r(rs)},a)})])}catch(r){return}finally{clearTimeout(l)}},Uu=function(t){t&&t.cancel().catch(()=>{})},Ha=function(t){var n;H(this,O,Uu).call(this,(n=t.body)!=null?n:void 0)},qh=function(){return E(this,bi)?AbortSignal.any([E(this,bi),E(this,na).signal]):E(this,na).signal},os=function(){let t=H(this,O,us).call(this);if(t!==void 0&&t<=0)throw new It(this.request)},tS=async function(){for(let t of E(this,N).hooks.beforeRequest){let n=await t({request:this.request,options:H(this,O,Dl).call(this),retryCount:0});if(Qv(n))H(this,O,qu).call(this,n);else if(ss(n))return n}},nS=async function(t){let n=H(this,O,zl).call(this,t);for(let a of E(this,N).hooks.afterResponse){let i=H(this,O,Yu).call(this,t.clone(),n);H(this,O,Bh).call(this,i);let l;try{l=await a({request:this.request,options:H(this,O,Dl).call(this),response:i,retryCount:E(this,cn)})}catch(s){throw i!==t&&H(this,O,Ha).call(this,i),H(this,O,Ha).call(this,t),s}if(l instanceof as)throw i!==t&&H(this,O,Ha).call(this,i),H(this,O,Ha).call(this,t),new gi(l.options);let r=ss(l)?H(this,O,Yu).call(this,l,n):t;i!==t&&i!==r&&i.body!==r.body&&H(this,O,Ha).call(this,i),t!==r&&t.body!==r.body&&H(this,O,Ha).call(this,t),t=r}return t},Yh=async function(t){try{return await t()}catch(n){return H(this,O,Hu).call(this,n,t)}},Hu=async function(t,n){it(this,Si,!1);let a=Math.min(await H(this,O,Jv).call(this,t),_l),i={signal:E(this,bi)},l=H(this,O,us).call(this);if(l!==void 0){if(l<=0)throw new It(this.request);if(a>=l)throw await Lu(l,i),new It(this.request)}if(await Lu(a,i),H(this,O,os).call(this),t instanceof gi&&t.customRequest){let r=new globalThis.Request(t.customRequest,E(this,N).signal?{signal:E(this,N).signal}:void 0);H(this,O,qu).call(this,r)}for(let r of E(this,N).hooks.beforeRetry){let s;try{s=await r({request:this.request,options:H(this,O,Dl).call(this),error:t,retryCount:E(this,cn)+1})}catch(o){throw o instanceof Error&&o!==t&&E(this,hs).add(o),o}if(Qv(s)){H(this,O,qu).call(this,s);break}if(ss(s))return it(this,Si,!0),xc(this,cn)._++,s;if(s===Du)return}return H(this,O,os).call(this),xc(this,cn)._++,H(this,O,Yh).call(this,n)},Bu=function(){let t=E(this,Si);return it(this,Si,!1),t},ju=async function(){var i,l;(i=E(this,na))!=null&&i.signal.aborted&&(it(this,na,new globalThis.AbortController),E(this,N).signal=H(this,O,qh).call(this),this.request=new globalThis.Request(this.request,{signal:E(this,N).signal}));let t=qv(E(this,N)),n=E(this,N).retry.limit>0?this.request.clone():void 0,a=H(this,O,aS).call(this,this.request,(l=E(this,N).body)!=null?l:void 0);it(this,ds,a),n&&(this.request=n);try{let r=H(this,O,us).call(this);if(r!==void 0&&r<=0)throw new It(this.request);let s=E(this,N).timeout===!1?r:r===void 0?E(this,N).timeout:Math.min(E(this,N).timeout,r),o=s===void 0?await E(this,N).fetch(a,t):await Lh(a,t,E(this,na),{timeout:s,fetch:E(this,N).fetch});return H(this,O,Yu).call(this,o,a)}catch(r){throw Uh(r)?new wl(this.request,{cause:r}):r}},us=function(){if(E(this,Ml)===void 0)return;let t=H(this,O,Gh).call(this)-E(this,Ml);return Math.max(0,E(this,N).totalTimeout-t)},Gh=function(){var t,n;return(n=(t=globalThis.performance)==null?void 0:t.now())!=null?n:Date.now()},Dl=function(){if(!E(this,vi)){let t=E(this,N),{hooks:n,json:a,parseJson:i,stringifyJson:l,searchParams:r,timeout:s,totalTimeout:o,throwHttpErrors:u,fetch:c}=t,f=Mn(t,["hooks","json","parseJson","stringifyJson","searchParams","timeout","totalTimeout","throwHttpErrors","fetch"]);it(this,vi,Object.freeze(f))}return E(this,vi)},qu=function(t){it(this,vi,void 0),this.request=t},zl=function(t){var n;return(n=E(this,ps).get(t))!=null?n:this.request},Yu=function(t,n){return E(this,ps).set(t,n),t},aS=function(t,n){var a;return!E(this,N).onUploadProgress||!t.body||!_h?t:Uv(t,E(this,N).onUploadProgress,(a=n!=null?n:E(this,N).body)!=null?a:void 0)},yt(cs,Gu);var fs=cs;var Vh=e=>{let t=(n,a)=>fs.create(n,ls(e,a));for(let n of Cu)t[n]=(a,i)=>fs.create(a,ls(e,i,{method:n}));return t.create=n=>Vh(ls(n)),t.extend=n=>(typeof n=="function"&&(n=n(e!=null?e:{})),Vh(ls(e,n))),t.stop=Du,t.retry=Cv,t},JA=Vh(),iS=JA;function IA(e){let t=rt(),n=new Headers(e);return n.set(t.csrfHeaderName,t.csrfToken),n}function PA(e){return"".concat(rt().homeR).concat(e)}function WA(e){try{let t=new URL(e,window.location.origin),n="".concat(t.pathname).concat(t.search).concat(t.hash);return n.startsWith("/")?n.slice(1):n}catch(t){return e.replace(/^\/+/,"")}}async function Bt(e,t,n={}){var i;return await iS(PA(t),{method:e,headers:IA(n.headers),body:(i=n.body)!=null?i:void 0,throwHttpErrors:!1})}async function lS(e,t){await Bt("POST","bm/".concat(e.toString(),"/").concat(t),{headers:{"content-type":"application/x-www-form-urlencoded"}})}async function Vu(e){await Bt("DELETE","bm/".concat(e.toString()),{headers:{"content-type":"application/x-www-form-urlencoded"}})}async function rS(e){await Bt("POST","bm/".concat(e.toString(),"/read"),{headers:{"content-type":"application/x-www-form-urlencoded"}})}async function sS(e){await Bt("POST","bm/".concat(e.toString(),"/archive"),{headers:{"content-type":"application/x-www-form-urlencoded"}})}async function Xu(e){let t=await Bt("POST","api/add",{headers:{"content-type":"application/json"},body:JSON.stringify(e)});return{ok:t.ok,status:t.status,bodyText:await t.text()}}async function oS(e){let t=await Bt("POST","api/note/add",{headers:{"content-type":"application/json"},body:JSON.stringify(e)});return{ok:t.ok,status:t.status,bodyText:await t.text()}}async function $u(e){let t=await Bt("POST","api/lookuptitle",{headers:{"content-type":"application/json"},body:JSON.stringify(e)});return t.status===200?await t.text():null}async function uS(e){let t=await Bt("POST","api/tagcloud",{headers:{"content-type":"application/json"},body:JSON.stringify(e)});if(!t.ok)return null;try{return await t.json()}catch(n){return null}}async function cS(e){await Bt("POST","api/tagcloudmode",{headers:{"content-type":"application/json"},body:JSON.stringify(e)})}async function fS(e){let t=await Bt("POST","api/tagSuggestions",{headers:{"content-type":"application/json"},body:JSON.stringify(e)});if(!t.ok)return null;try{return await t.json()}catch(n){return null}}async function dS(e){await Bt("DELETE","api/note/".concat(e.toString()),{headers:{"content-type":"application/x-www-form-urlencoded"}})}async function Xh(e){await Bt("POST","api/accountSettings",{headers:{"content-type":"application/json"},body:JSON.stringify(e)})}async function hS(){let e=rt();await Bt("POST",WA(e.authRlogoutR)),window.location.reload()}var yS=Z(ye());var ie=Z(Ue());function bS({initial:e}){var s;let{t}=ct(),[n,a]=yS.default.useState(e),i=!n.archiveBackendEnabled,l=i?t("settings.archivingDisabled"):void 0;async function r(o){a(o),await Xh(o)}return(0,ie.jsxs)("div",{className:"settings-form",children:[(0,ie.jsx)("div",{className:"fw7 mb2",children:t("settings.accountTitle")}),(0,ie.jsxs)("div",{className:"flex items-center mb2",children:[(0,ie.jsx)("label",{htmlFor:"language",className:"lh-copy mr2",children:t("settings.language")}),(0,ie.jsxs)("select",{id:"language",name:"language",className:"pointer",value:(s=n.language)!=null?s:"",onChange:o=>{let u=z(T({},n),{language:o.target.value===""?null:o.target.value});a(u),Xh(u).then(()=>{window.location.reload()})},children:[(0,ie.jsx)("option",{value:"",children:t("settings.serverDefault")}),(0,ie.jsx)("option",{value:"en",children:"English"}),(0,ie.jsx)("option",{value:"de",children:"Deutsch"}),(0,ie.jsx)("option",{value:"es",children:"Espa\xF1ol"}),(0,ie.jsx)("option",{value:"fr",children:"Fran\xE7ais"}),(0,ie.jsx)("option",{value:"it",children:"Italiano"}),(0,ie.jsx)("option",{value:"ja",children:"\u65E5\u672C\u8A9E"}),(0,ie.jsx)("option",{value:"ko",children:"\uD55C\uAD6D\uC5B4"}),(0,ie.jsx)("option",{value:"pl",children:"Polski"}),(0,ie.jsx)("option",{value:"pt-BR",children:"Portugu\xEAs (Brasil)"}),(0,ie.jsx)("option",{value:"ru",children:"\u0420\u0443\u0441\u0441\u043A\u0438\u0439"}),(0,ie.jsx)("option",{value:"tr",children:"T\xFCrk\xE7e"}),(0,ie.jsx)("option",{value:"uk",children:"\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430"}),(0,ie.jsx)("option",{value:"zh-Hans",children:"\u7B80\u4F53\u4E2D\u6587"}),(0,ie.jsx)("option",{value:"zh-Hant",children:"\u7E41\u9AD4\u4E2D\u6587"})]})]}),(0,ie.jsxs)("div",{className:"flex items-center mb2".concat(i?" o-50":""),title:l,children:[(0,ie.jsx)("input",{type:"checkbox",className:"mr2".concat(i?"":" pointer"),id:"archiveDefault",name:"archiveDefault",checked:n.archiveDefault,disabled:i,title:l,onChange:o=>{r(z(T({},n),{archiveDefault:o.target.checked}))}}),(0,ie.jsx)("label",{htmlFor:"archiveDefault",className:"lh-copy".concat(i?" thm-text-tertiary":""),title:l,children:t("settings.archiveDefault")})]}),(0,ie.jsxs)("div",{className:"flex items-center mb2",children:[(0,ie.jsx)("input",{type:"checkbox",className:"pointer mr2",id:"privateDefault",name:"privateDefault",checked:n.privateDefault,onChange:o=>{r(z(T({},n),{privateDefault:o.target.checked}))}}),(0,ie.jsx)("label",{htmlFor:"privateDefault",className:"lh-copy",children:t("settings.privateDefault")})]}),(0,ie.jsxs)("div",{className:"flex items-center mb2",children:[(0,ie.jsx)("input",{type:"checkbox",className:"pointer mr2",id:"suggestTags",name:"suggestTags",checked:n.suggestTags,onChange:o=>{r(z(T({},n),{suggestTags:o.target.checked}))}}),(0,ie.jsx)("label",{htmlFor:"suggestTags",className:"lh-copy",children:t("settings.suggestTags")})]}),(0,ie.jsxs)("div",{className:"flex items-center mb2",children:[(0,ie.jsx)("input",{type:"checkbox",className:"pointer mr2",id:"privacyLock",name:"privacyLock",checked:n.privacyLock,onChange:o=>{r(z(T({},n),{privacyLock:o.target.checked}))}}),(0,ie.jsx)("label",{htmlFor:"privacyLock",className:"lh-copy",children:t("settings.privacyLock")})]})]})}var Ba=Z(ye());var kt=Z(ye());var nk=180;function Zu({enabled:e,tags:t,onTagsUpdate:n,maxSuggestions:a=10}){let[i,l]=kt.default.useState(null),r=kt.default.useRef(0),s=kt.default.useRef(null),o=kt.default.useRef(null),u=kt.default.useCallback(()=>{s.current!=null&&(window.clearTimeout(s.current),s.current=null),r.current+=1},[]),c=kt.default.useCallback(()=>{u(),l(null)},[u]);kt.default.useEffect(()=>()=>{u()},[u]),kt.default.useEffect(()=>{e||c()},[e,c]);let f=kt.default.useCallback(x=>{let{value:h,selectionStart:m,selectionEnd:y}=x.target;if(n(h),!e){c();return}if(m==null||y==null||m!==y){c();return}if(lk(t,h)){c();return}let b=vS(h,m);if(b==null||b.token.length<2){c();return}let k=rk(h),_=b.token.toLowerCase(),B=k.filter(M=>M===_).length>1,U={query:b.token,currentTags:Array.from(new Set(k.filter(M=>B||M!==_)))};u(),s.current=window.setTimeout(()=>{let M=r.current+1;r.current=M,(async()=>{let ve=await fS(U);if(M!==r.current||ve==null||o.current==null)return;let X=ve.suggestions.slice(0,a);if(X.length===0){c();return}let D=ak(o.current,m);l({items:X,selectedIndex:0,tokenRange:b,anchorLeft:D.left,anchorTop:D.top})})()},nk)},[u,c,e,a,n]),d=kt.default.useCallback(x=>{let h=o.current;if(h==null||i==null)return;let m=ik(t,i.tokenRange,x);n(m.value),c(),requestAnimationFrame(()=>{h.focus(),h.setSelectionRange(m.caret,m.caret)})},[c,n,i,t]),p=kt.default.useCallback(x=>{if(x.key==="Escape"){i!=null&&(x.preventDefault(),c());return}if(x.key===" "){c();return}if(i!=null){if(x.key==="ArrowDown"){x.preventDefault(),l(h=>h==null?h:z(T({},h),{selectedIndex:(h.selectedIndex+1)%h.items.length}));return}if(x.key==="ArrowUp"){x.preventDefault(),l(h=>h==null?h:z(T({},h),{selectedIndex:(h.selectedIndex-1+h.items.length)%h.items.length}));return}if(x.key==="Enter"||x.key==="Tab"){x.preventDefault();let h=i.items[i.selectedIndex];d(h.term)}}},[d,c,i]),v=kt.default.useCallback(x=>{if(i==null)return;let h=x.currentTarget,{selectionStart:m,selectionEnd:y,value:b}=h;if(m==null||y==null||m!==y){c();return}let k=vS(b,m);if(k==null){c();return}k.start!==i.tokenRange.start&&c()},[c,i]),S=kt.default.useCallback(x=>{l(h=>h==null?h:z(T({},h),{selectedIndex:x}))},[]);return{tagInputRef:o,suggestionState:i,closeSuggestions:c,onTagsChange:f,onTagsKeyDown:p,onTagsSelect:v,onSuggestionHover:S,onSuggestionPick:d}}function vS(e,t){let n=Math.max(0,Math.min(t,e.length)),a=n;for(;a>0&&e[a-1]!==" ";)a-=1;let i=n;for(;i<e.length&&e[i]!==" ";)i+=1;let l=e.slice(a,i).trim();return l===""?null:{token:l,start:a,end:i}}function ak(e,t){let n=window.getComputedStyle(e),a=document.createElement("div");a.style.position="absolute",a.style.visibility="hidden",a.style.whiteSpace="pre",a.style.top="0",a.style.left="0",a.style.font=n.font,a.style.fontKerning=n.fontKerning,a.style.fontFeatureSettings=n.fontFeatureSettings,a.style.fontVariantLigatures=n.fontVariantLigatures,a.style.letterSpacing=n.letterSpacing,a.style.textTransform=n.textTransform,a.style.textIndent=n.textIndent,a.style.boxSizing=n.boxSizing,a.style.padding=n.padding,a.style.border=n.border,a.style.width="".concat(String(e.clientWidth),"px");let i=document.createElement("span");i.textContent=e.value.slice(0,t),a.appendChild(i);let l=document.createElement("span");l.textContent="\u200B",a.appendChild(l),document.body.appendChild(a);let r=l.offsetLeft-e.scrollLeft+1,s=l.offsetTop-e.scrollTop+e.offsetHeight+4;return document.body.removeChild(a),{left:r,top:s}}function ik(e,t,n){let a=e.slice(0,t.start),i=e.slice(t.end).replace(/^ /,""),l="".concat(n," ");return{value:"".concat(a).concat(l).concat(i),caret:a.length+l.length}}function lk(e,t){if(e===t)return!1;let n=0;for(;n<e.length&&n<t.length&&e[n]===t[n];)n+=1;let a=e.length,i=t.length;for(;a>n&&i>n&&e[a-1]===t[i-1];)a-=1,i-=1;let l=e.slice(n,a),r=t.slice(n,i);return l===""&&r===""?!1:SS(l)&&SS(r)}function SS(e){return e===""||/^ *$/.test(e)}function rk(e){return e.split(" ").map(t=>t.trim().toLowerCase()).filter(t=>t!=="")}var $2=Z(ye()),wn=Z(Ue()),TS=80;function Ku({suggestionState:e,onHover:t,onPick:n}){return(0,wn.jsx)("div",{className:"absolute z-5 thm-bg-secondary thm-text-primary ba thm-border-default br2 shadow-4 overflow-hidden f6",style:{left:e.anchorLeft,top:e.anchorTop,width:"max-content",maxWidth:"22rem"},children:e.items.map((a,i)=>{let l=i===e.selectedIndex,r=ok(a.term);return(0,wn.jsxs)("button",{type:"button",className:"flex items-center justify-between w-100 bn bg-transparent tl ph2 pv1 pointer nowrap thm-text-primary thm-hover-link-color ".concat(l?"thm-bg-selected thm-text-selected":""),onMouseEnter:()=>{t(i)},onMouseDown:s=>{s.preventDefault()},onClick:()=>{n(a.term)},title:a.term,children:[(0,wn.jsx)("span",{className:"mr2",children:sk(r,e.tokenRange.token)}),(0,wn.jsx)("span",{className:"thm-text-tertiary f6 tr",style:{minWidth:"3ch"},children:a.count})]},"".concat(a.term,"-").concat(a.count.toString()))})})}function sk(e,t){let n=e.toLocaleLowerCase(),a=t.toLocaleLowerCase(),i=n.indexOf(a);if(i<0)return e;let l=e.slice(0,i),r=e.slice(i,i+t.length),s=e.slice(i+t.length);return(0,wn.jsxs)(wn.Fragment,{children:[l,(0,wn.jsx)("strong",{children:r}),s]})}function ok(e){return e.length<=TS?e:"".concat(e.slice(0,TS),"...")}var q=Z(Ue());function xS({initial:e}){var X;let{t}=ct(),n=rt(),[a,i]=Ba.default.useState(e),[l,r]=Ba.default.useState(e),[s,o]=Ba.default.useState(!1),[u,c]=Ba.default.useState(!1),[f,d]=Ba.default.useState(!1),[p,v]=Ba.default.useState(null),S=n.dat.suggestTags===!0,x=Ba.default.useMemo(()=>Mi(n.lang,a.time),[n.lang,a.time]),{tagInputRef:h,suggestionState:m,closeSuggestions:y,onTagsChange:b,onTagsKeyDown:k,onTagsSelect:_,onSuggestionHover:w,onSuggestionPick:B}=Zu({enabled:S,tags:l.tags,maxSuggestions:4,onTagsUpdate:D=>{r(C=>z(T({},C),{tags:D}))}});async function U(){c(!0);try{let D=await $u(l);D!=null&&r(C=>z(T({},C),{title:D}))}finally{c(!1)}}async function M(){await Vu(a.bid),d(!0)}let ve=async D=>{D.preventDefault(),v(null);let C=z(T({},l),{tags:Ps(l.tags)}),P=await Xu(C);if(P.ok&&P.status>=200&&P.status<300){i(C);let re=er(),xe=tr(re,"next"),gt=document.referrer,en=window.location.origin;xe==="closeWindow"?Li(window):xe==="back"?gt.startsWith(en)?window.location.href=gt:window.location.href=en:Li(window)}else v(P.bodyText)};return f?(0,q.jsx)("p",{className:"thm-text-killed",children:t("addForm.killed")}):(0,q.jsx)("form",{onSubmit:D=>{ve(D)},children:(0,q.jsx)("table",{className:"w-100",children:(0,q.jsxs)("tbody",{children:[(0,q.jsxs)("tr",{children:[(0,q.jsx)("td",{className:"w1"}),(0,q.jsxs)("td",{children:[a.bid>0?(0,q.jsxs)("div",{className:"alert",children:[t("addForm.previouslySaved"),"\xA0",(0,q.jsx)("span",{className:"link f7 dib thm-text-tertiary thm-hover-link-color pr3","data-time":a.time,title:sa(n.lang,a.time),children:x}),(0,q.jsx)("div",{className:"edit_links dib ml1",children:(0,q.jsxs)("div",{className:"delete_link di",children:[(0,q.jsx)("button",{type:"button",onClick:()=>{o(!0)},className:"delete",hidden:s,children:t("delete")}),(0,q.jsxs)("span",{className:"confirm thm-text-error",hidden:!s,children:[(0,q.jsxs)("button",{type:"button",onClick:()=>{o(!1)},children:[t("cancel"),"\xA0/\xA0"]}),(0,q.jsx)("button",{type:"button",onClick:()=>{M()},className:"thm-text-error",children:t("destroy")})]})]})})]}):null,p?(0,q.jsx)("div",{className:"alert alert-err",children:p}):null]})]}),(0,q.jsxs)("tr",{children:[(0,q.jsx)("td",{children:(0,q.jsx)("label",{htmlFor:"url",children:t("addForm.url")})}),(0,q.jsx)("td",{children:(0,q.jsx)("input",{type:"url",id:"url",className:"w-100 mv1",required:!0,name:"url",autoFocus:a.url==="",value:l.url,onChange:D=>{r(C=>z(T({},C),{url:D.target.value}))}})})]}),(0,q.jsxs)("tr",{children:[(0,q.jsx)("td",{children:(0,q.jsx)("label",{htmlFor:"title",children:t("bmark.title")})}),(0,q.jsxs)("td",{className:"flex",children:[(0,q.jsx)("input",{type:"text",id:"title",className:"w-100 mv1 flex-auto",name:"title",value:l.title,onChange:D=>{r(C=>z(T({},C),{title:D.target.value}))}}),(0,q.jsx)("button",{disabled:u,type:"button",onClick:()=>{U()},className:"ml2 input-reset ba thm-border-primary pointer f6 di dim pa1 ma1 mr0".concat(u?" thm-bg-disabled":""),children:t("fetch")})]})]}),(0,q.jsxs)("tr",{children:[(0,q.jsx)("td",{children:(0,q.jsx)("label",{htmlFor:"description",children:t("bmark.description")})}),(0,q.jsx)("td",{children:(0,q.jsx)("textarea",{className:"w-100 mt1 thm-text-secondary",id:"description",name:"description",rows:4,value:l.description,onChange:D=>{r(C=>z(T({},C),{description:D.target.value}))}})})]}),(0,q.jsxs)("tr",{children:[(0,q.jsx)("td",{children:(0,q.jsx)("label",{htmlFor:"tags",children:t("bmark.tags")})}),(0,q.jsx)("td",{children:(0,q.jsxs)("div",{className:"relative",children:[(0,q.jsx)("input",{ref:h,type:"text",id:"tags",className:"w-100 mv1",name:"tags",autoComplete:"off",autoCapitalize:"off",autoFocus:a.url!=="",value:l.tags,onChange:b,onKeyDown:k,onClick:_,onSelect:_,onBlur:()=>{window.setTimeout(()=>{y()},0)}}),m!=null?(0,q.jsx)(Ku,{suggestionState:m,onHover:w,onPick:B}):null]})})]}),(0,q.jsxs)("tr",{children:[(0,q.jsx)("td",{children:(0,q.jsx)("label",{htmlFor:"private",children:t("bmark.private")})}),(0,q.jsxs)("td",{children:[(0,q.jsx)("div",{className:"mr4 dib",children:(0,q.jsx)("input",{type:"checkbox",id:"private",className:"private pointer",name:"private",checked:l.private,onChange:D=>{r(C=>T(z(T({},C),{private:D.target.checked}),n.dat.archiveBackendEnabled&&l.archiveRequested&&D.target.checked?{archiveRequested:!1}:{}))}})}),!(a.bid>0)&&n.dat.archiveBackendEnabled?(0,q.jsxs)("div",{className:"dib ".concat(l.private?"o-50":""),title:l.private?t("addForm.archiveUnavailable"):void 0,children:[(0,q.jsx)("label",{className:"mr2 di",htmlFor:"archiveRequested",children:t("archive")}),(0,q.jsx)("input",{type:"checkbox",id:"archiveRequested",className:"archive pointer ml2",name:"archiveRequested",disabled:l.private,checked:(X=l.archiveRequested)!=null?X:!1,onChange:D=>{r(C=>z(T({},C),{archiveRequested:D.target.checked}))}})]}):null]})]}),(0,q.jsxs)("tr",{children:[(0,q.jsx)("td",{children:(0,q.jsx)("label",{htmlFor:"toread",children:t("addForm.readLater")})}),(0,q.jsx)("td",{children:(0,q.jsx)("input",{type:"checkbox",id:"toread",className:"toread pointer",name:"toread",checked:l.toread,onChange:D=>{r(C=>z(T({},C),{toread:D.target.checked}))}})})]}),(0,q.jsxs)("tr",{children:[(0,q.jsx)("td",{}),(0,q.jsx)("td",{children:(0,q.jsx)("input",{type:"submit",className:"ph3 pv2 input-reset thm-text-strong ba thm-border-primary bg-transparent pointer f6 dib mt1 dim",value:a.bid>0?t("addForm.update"):t("addForm.add")})})]})]})})})}var cp=Z(ye());var ES=e=>{let t,n=new Set,a=(u,c)=>{let f=typeof u=="function"?u(t):u;if(!Object.is(f,t)){let d=t;t=(c!=null?c:typeof f!="object"||f===null)?f:Object.assign({},t,f),n.forEach(p=>p(t,d))}},i=()=>t,s={setState:a,getState:i,getInitialState:()=>o,subscribe:u=>(n.add(u),()=>n.delete(u))},o=t=e(a,i,s);return s},AS=(e=>e?ES(e):ES);var ms=Z(ye(),1);var uk=e=>e;function ck(e,t=uk){let n=ms.default.useSyncExternalStore(e.subscribe,ms.default.useCallback(()=>t(e.getState()),[e,t]),ms.default.useCallback(()=>t(e.getInitialState()),[e,t]));return ms.default.useDebugValue(n),n}var kS=e=>{let t=AS(e),n=a=>ck(t,a);return Object.assign(n,t),n},Fu=(e=>e?kS(e):kS);var gs=Fu(e=>({bmarks:[],setAll:t=>{e({bmarks:t})},removeById:t=>{e(n=>({bmarks:n.bmarks.filter(a=>a.bid!==t)}))},upsert:t=>{e(n=>({bmarks:n.bmarks.map(a=>a.bid===t.bid?t:a)}))}}));var qa=Z(ye());function RS(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}function fk(e){if(Array.isArray(e))return e}function dk(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var a,i,l,r,s=[],o=!0,u=!1;try{if(l=(n=n.call(e)).next,t!==0)for(;!(o=(a=l.call(n)).done)&&(s.push(a.value),s.length!==t);o=!0);}catch(c){u=!0,i=c}finally{try{if(!o&&n.return!=null&&(r=n.return(),Object(r)!==r))return}finally{if(u)throw i}}return s}}function hk(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function pk(e,t){return fk(e)||dk(e,t)||mk(e,t)||hk()}function mk(e,t){if(e){if(typeof e=="string")return RS(e,t);var n={}.toString.call(e).slice(8,-1);return n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set"?Array.from(e):n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?RS(e,t):void 0}}var jS=Object.entries,OS=Object.setPrototypeOf,gk=Object.isFrozen,yk=Object.getPrototypeOf,bk=Object.getOwnPropertyDescriptor,mt=Object.freeze,Pt=Object.seal,Bl=Object.create,qS=typeof Reflect<"u"&&Reflect,Jh=qS.apply,Ih=qS.construct;mt||(mt=function(t){return t});Pt||(Pt=function(t){return t});Jh||(Jh=function(t,n){for(var a=arguments.length,i=new Array(a>2?a-2:0),l=2;l<a;l++)i[l-2]=arguments[l];return t.apply(n,i)});Ih||(Ih=function(t){for(var n=arguments.length,a=new Array(n>1?n-1:0),i=1;i<n;i++)a[i-1]=arguments[i];return new t(...a)});var Ll=Ge(Array.prototype.forEach),vk=Ge(Array.prototype.lastIndexOf),wS=Ge(Array.prototype.pop),Ul=Ge(Array.prototype.push),Sk=Ge(Array.prototype.splice),pt=Array.isArray,vs=Ge(String.prototype.toLowerCase),$h=Ge(String.prototype.toString),NS=Ge(String.prototype.match),Hl=Ge(String.prototype.replace),_S=Ge(String.prototype.indexOf),Tk=Ge(String.prototype.trim),xk=Ge(Number.prototype.toString),Ek=Ge(Boolean.prototype.toString),CS=typeof BigInt>"u"?null:Ge(BigInt.prototype.toString),DS=typeof Symbol>"u"?null:Ge(Symbol.prototype.toString),De=Ge(Object.prototype.hasOwnProperty),ys=Ge(Object.prototype.toString),at=Ge(RegExp.prototype.test),bs=Ak(TypeError);function Ge(e){return function(t){t instanceof RegExp&&(t.lastIndex=0);for(var n=arguments.length,a=new Array(n>1?n-1:0),i=1;i<n;i++)a[i-1]=arguments[i];return Jh(e,t,a)}}function Ak(e){return function(){for(var t=arguments.length,n=new Array(t),a=0;a<t;a++)n[a]=arguments[a];return Ih(e,n)}}function I(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:vs;if(OS&&OS(e,null),!pt(t))return e;let a=t.length;for(;a--;){let i=t[a];if(typeof i=="string"){let l=n(i);l!==i&&(gk(t)||(t[a]=l),i=l)}e[i]=!0}return e}function kk(e){for(let t=0;t<e.length;t++)De(e,t)||(e[t]=null);return e}function ot(e){let t=Bl(null);for(let a of jS(e)){var n=pk(a,2);let i=n[0],l=n[1];De(e,i)&&(pt(l)?t[i]=kk(l):l&&typeof l=="object"&&l.constructor===Object?t[i]=ot(l):t[i]=l)}return t}function Rk(e){switch(typeof e){case"string":return e;case"number":return xk(e);case"boolean":return Ek(e);case"bigint":return CS?CS(e):"0";case"symbol":return DS?DS(e):"Symbol()";case"undefined":return ys(e);case"function":case"object":{if(e===null)return ys(e);let t=e,n=_n(t,"toString");if(typeof n=="function"){let a=n(t);return typeof a=="string"?a:ys(a)}return ys(e)}default:return ys(e)}}function _n(e,t){for(;e!==null;){let a=bk(e,t);if(a){if(a.get)return Ge(a.get);if(typeof a.value=="function")return Ge(a.value)}e=yk(e)}function n(){return null}return n}function Ok(e){try{return at(e,""),!0}catch(t){return!1}}var zS=mt(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","search","section","select","shadow","slot","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),Qh=mt(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","enterkeyhint","exportparts","filter","font","g","glyph","glyphref","hkern","image","inputmode","line","lineargradient","marker","mask","metadata","mpath","part","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),Zh=mt(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),wk=mt(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),Kh=mt(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),Nk=mt(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),MS=mt(["#text"]),LS=mt(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","command","commandfor","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","exportparts","face","for","headers","height","hidden","high","href","hreflang","id","inert","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","part","pattern","placeholder","playsinline","popover","popovertarget","popovertargetaction","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","slot","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","wrap","xmlns"]),Fh=mt(["accent-height","accumulate","additive","alignment-baseline","amplitude","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","exponent","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","intercept","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","mask-type","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","slope","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","tablevalues","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),US=mt(["accent","accentunder","align","bevelled","close","columnalign","columnlines","columnspacing","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lquote","lspace","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),Ju=mt(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),_k=Pt(/{{[\w\W]*|^[\w\W]*}}/g),Ck=Pt(/<%[\w\W]*|^[\w\W]*%>/g),Dk=Pt(/\${[\w\W]*/g),zk=Pt(/^data-[\-\w.\u00B7-\uFFFF]+$/),Mk=Pt(/^aria-[\-\w]+$/),HS=Pt(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),Lk=Pt(/^(?:\w+script|data):/i),Uk=Pt(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Hk=Pt(/^html$/i),Bk=Pt(/^[a-z][.\w]*(-[.\w]+)+$/i),Nn={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,progressingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},jk=function(){return typeof window>"u"?null:window},qk=function(t,n){if(typeof t!="object"||typeof t.createPolicy!="function")return null;let a=null,i="data-tt-policy-suffix";n&&n.hasAttribute(i)&&(a=n.getAttribute(i));let l="dompurify"+(a?"#"+a:"");try{return t.createPolicy(l,{createHTML(r){return r},createScriptURL(r){return r}})}catch(r){return console.warn("TrustedTypes policy "+l+" could not be created."),null}},BS=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}};function YS(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:jk(),t=j=>YS(j);if(t.version="3.4.7",t.removed=[],!e||!e.document||e.document.nodeType!==Nn.document||!e.Element)return t.isSupported=!1,t;let n=e.document,a=n,i=a.currentScript;e.DocumentFragment;let l=e.HTMLTemplateElement,r=e.Node,s=e.Element,o=e.NodeFilter,u=e.NamedNodeMap;u===void 0&&(e.NamedNodeMap||e.MozNamedAttrMap),e.HTMLFormElement;let c=e.DOMParser,f=e.trustedTypes,d=s.prototype,p=_n(d,"cloneNode"),v=_n(d,"remove"),S=_n(d,"nextSibling"),x=_n(d,"childNodes"),h=_n(d,"parentNode"),m=_n(d,"shadowRoot"),y=_n(d,"attributes"),b=r&&r.prototype?_n(r.prototype,"nodeType"):null,k=r&&r.prototype?_n(r.prototype,"nodeName"):null;if(typeof l=="function"){let j=n.createElement("template");j.content&&j.content.ownerDocument&&(n=j.content.ownerDocument)}let _,w="",B=n,U=B.implementation,M=B.createNodeIterator,ve=B.createDocumentFragment,X=B.getElementsByTagName,D=a.importNode,C=BS();t.isSupported=typeof jS=="function"&&typeof h=="function"&&U&&U.createHTMLDocument!==void 0;let P=_k,re=Ck,xe=Dk,gt=zk,en=Mk,Va=Lk,$e=Uk,tn=Bk,hn=HS,ge=null,Dn=I({},[...zS,...Qh,...Zh,...Kh,...MS]),Y=null,Se=I({},[...LS,...Fh,...US,...Ju]),fe=Object.seal(Bl(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),Yl=null,ks=null,aa=Object.seal(Bl(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}})),gp=!0,rc=!0,yp=!1,bp=!0,ia=!1,Gl=!0,Xa=!1,sc=!1,oc=!1,Ai=!1,Rs=!1,Os=!1,vp=!0,Sp=!1,Tp="user-content-",uc=!0,Vl=!1,ki={},pn=null,cc=I({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),xp=null,Ep=I({},["audio","video","img","source","image","track"]),fc=null,Ap=I({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),ws="http://www.w3.org/1998/Math/MathML",Ns="http://www.w3.org/2000/svg",mn="http://www.w3.org/1999/xhtml",Ri=mn,dc=!1,hc=null,v1=I({},[ws,Ns,mn],$h),pc=I({},["mi","mo","mn","ms","mtext"]),mc=I({},["annotation-xml"]),S1=I({},["title","style","font","a","script"]),Xl=null,T1=["application/xhtml+xml","text/html"],x1="text/html",ze=null,Oi=null,E1=n.createElement("form"),kp=function(g){return g instanceof RegExp||g instanceof Function},gc=function(){let g=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(Oi&&Oi===g)return;(!g||typeof g!="object")&&(g={}),g=ot(g),Xl=T1.indexOf(g.PARSER_MEDIA_TYPE)===-1?x1:g.PARSER_MEDIA_TYPE,ze=Xl==="application/xhtml+xml"?$h:vs,ge=De(g,"ALLOWED_TAGS")&&pt(g.ALLOWED_TAGS)?I({},g.ALLOWED_TAGS,ze):Dn,Y=De(g,"ALLOWED_ATTR")&&pt(g.ALLOWED_ATTR)?I({},g.ALLOWED_ATTR,ze):Se,hc=De(g,"ALLOWED_NAMESPACES")&&pt(g.ALLOWED_NAMESPACES)?I({},g.ALLOWED_NAMESPACES,$h):v1,fc=De(g,"ADD_URI_SAFE_ATTR")&&pt(g.ADD_URI_SAFE_ATTR)?I(ot(Ap),g.ADD_URI_SAFE_ATTR,ze):Ap,xp=De(g,"ADD_DATA_URI_TAGS")&&pt(g.ADD_DATA_URI_TAGS)?I(ot(Ep),g.ADD_DATA_URI_TAGS,ze):Ep,pn=De(g,"FORBID_CONTENTS")&&pt(g.FORBID_CONTENTS)?I({},g.FORBID_CONTENTS,ze):cc,Yl=De(g,"FORBID_TAGS")&&pt(g.FORBID_TAGS)?I({},g.FORBID_TAGS,ze):ot({}),ks=De(g,"FORBID_ATTR")&&pt(g.FORBID_ATTR)?I({},g.FORBID_ATTR,ze):ot({}),ki=De(g,"USE_PROFILES")?g.USE_PROFILES&&typeof g.USE_PROFILES=="object"?ot(g.USE_PROFILES):g.USE_PROFILES:!1,gp=g.ALLOW_ARIA_ATTR!==!1,rc=g.ALLOW_DATA_ATTR!==!1,yp=g.ALLOW_UNKNOWN_PROTOCOLS||!1,bp=g.ALLOW_SELF_CLOSE_IN_ATTR!==!1,ia=g.SAFE_FOR_TEMPLATES||!1,Gl=g.SAFE_FOR_XML!==!1,Xa=g.WHOLE_DOCUMENT||!1,Ai=g.RETURN_DOM||!1,Rs=g.RETURN_DOM_FRAGMENT||!1,Os=g.RETURN_TRUSTED_TYPE||!1,oc=g.FORCE_BODY||!1,vp=g.SANITIZE_DOM!==!1,Sp=g.SANITIZE_NAMED_PROPS||!1,uc=g.KEEP_CONTENT!==!1,Vl=g.IN_PLACE||!1,hn=Ok(g.ALLOWED_URI_REGEXP)?g.ALLOWED_URI_REGEXP:HS,Ri=typeof g.NAMESPACE=="string"?g.NAMESPACE:mn,pc=De(g,"MATHML_TEXT_INTEGRATION_POINTS")&&g.MATHML_TEXT_INTEGRATION_POINTS&&typeof g.MATHML_TEXT_INTEGRATION_POINTS=="object"?ot(g.MATHML_TEXT_INTEGRATION_POINTS):I({},["mi","mo","mn","ms","mtext"]),mc=De(g,"HTML_INTEGRATION_POINTS")&&g.HTML_INTEGRATION_POINTS&&typeof g.HTML_INTEGRATION_POINTS=="object"?ot(g.HTML_INTEGRATION_POINTS):I({},["annotation-xml"]);let A=De(g,"CUSTOM_ELEMENT_HANDLING")&&g.CUSTOM_ELEMENT_HANDLING&&typeof g.CUSTOM_ELEMENT_HANDLING=="object"?ot(g.CUSTOM_ELEMENT_HANDLING):Bl(null);if(fe=Bl(null),De(A,"tagNameCheck")&&kp(A.tagNameCheck)&&(fe.tagNameCheck=A.tagNameCheck),De(A,"attributeNameCheck")&&kp(A.attributeNameCheck)&&(fe.attributeNameCheck=A.attributeNameCheck),De(A,"allowCustomizedBuiltInElements")&&typeof A.allowCustomizedBuiltInElements=="boolean"&&(fe.allowCustomizedBuiltInElements=A.allowCustomizedBuiltInElements),ia&&(rc=!1),Rs&&(Ai=!0),ki&&(ge=I({},MS),Y=Bl(null),ki.html===!0&&(I(ge,zS),I(Y,LS)),ki.svg===!0&&(I(ge,Qh),I(Y,Fh),I(Y,Ju)),ki.svgFilters===!0&&(I(ge,Zh),I(Y,Fh),I(Y,Ju)),ki.mathMl===!0&&(I(ge,Kh),I(Y,US),I(Y,Ju))),aa.tagCheck=null,aa.attributeCheck=null,De(g,"ADD_TAGS")&&(typeof g.ADD_TAGS=="function"?aa.tagCheck=g.ADD_TAGS:pt(g.ADD_TAGS)&&(ge===Dn&&(ge=ot(ge)),I(ge,g.ADD_TAGS,ze))),De(g,"ADD_ATTR")&&(typeof g.ADD_ATTR=="function"?aa.attributeCheck=g.ADD_ATTR:pt(g.ADD_ATTR)&&(Y===Se&&(Y=ot(Y)),I(Y,g.ADD_ATTR,ze))),De(g,"ADD_URI_SAFE_ATTR")&&pt(g.ADD_URI_SAFE_ATTR)&&I(fc,g.ADD_URI_SAFE_ATTR,ze),De(g,"FORBID_CONTENTS")&&pt(g.FORBID_CONTENTS)&&(pn===cc&&(pn=ot(pn)),I(pn,g.FORBID_CONTENTS,ze)),De(g,"ADD_FORBID_CONTENTS")&&pt(g.ADD_FORBID_CONTENTS)&&(pn===cc&&(pn=ot(pn)),I(pn,g.ADD_FORBID_CONTENTS,ze)),uc&&(ge["#text"]=!0),Xa&&I(ge,["html","head","body"]),ge.table&&(I(ge,["tbody"]),delete Yl.tbody),g.TRUSTED_TYPES_POLICY){if(typeof g.TRUSTED_TYPES_POLICY.createHTML!="function")throw bs('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof g.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw bs('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');_=g.TRUSTED_TYPES_POLICY,w=_.createHTML("")}else _===void 0&&(_=qk(f,i)),_!==null&&typeof w=="string"&&(w=_.createHTML(""));(C.uponSanitizeElement.length>0||C.uponSanitizeAttribute.length>0)&&ge===Dn&&(ge=ot(ge)),C.uponSanitizeAttribute.length>0&&Y===Se&&(Y=ot(Y)),mt&&mt(g),Oi=g},Rp=I({},[...Qh,...Zh,...wk]),Op=I({},[...Kh,...Nk]),A1=function(g){let A=h(g);(!A||!A.tagName)&&(A={namespaceURI:Ri,tagName:"template"});let L=vs(g.tagName),ce=vs(A.tagName);return hc[g.namespaceURI]?g.namespaceURI===Ns?A.namespaceURI===mn?L==="svg":A.namespaceURI===ws?L==="svg"&&(ce==="annotation-xml"||pc[ce]):!!Rp[L]:g.namespaceURI===ws?A.namespaceURI===mn?L==="math":A.namespaceURI===Ns?L==="math"&&mc[ce]:!!Op[L]:g.namespaceURI===mn?A.namespaceURI===Ns&&!mc[ce]||A.namespaceURI===ws&&!pc[ce]?!1:!Op[L]&&(S1[L]||!Rp[L]):!!(Xl==="application/xhtml+xml"&&hc[g.namespaceURI]):!1},nn=function(g){Ul(t.removed,{element:g});try{h(g).removeChild(g)}catch(A){v(g)}},$a=function(g,A){try{Ul(t.removed,{attribute:A.getAttributeNode(g),from:A})}catch(L){Ul(t.removed,{attribute:null,from:A})}if(A.removeAttribute(g),g==="is")if(Ai||Rs)try{nn(A)}catch(L){}else try{A.setAttribute(g,"")}catch(L){}},wp=function(g){let A=null,L=null;if(oc)g="<remove></remove>"+g;else{let Ee=NS(g,/^[\r\n\t ]+/);L=Ee&&Ee[0]}Xl==="application/xhtml+xml"&&Ri===mn&&(g='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+g+"</body></html>");let ce=_?_.createHTML(g):g;if(Ri===mn)try{A=new c().parseFromString(ce,Xl)}catch(Ee){}if(!A||!A.documentElement){A=U.createDocument(Ri,"template",null);try{A.documentElement.innerHTML=dc?w:ce}catch(Ee){}}let te=A.body||A.documentElement;return g&&L&&te.insertBefore(n.createTextNode(L),te.childNodes[0]||null),Ri===mn?X.call(A,Xa?"html":"body")[0]:Xa?A.documentElement:te},Np=function(g){return M.call(g.ownerDocument||g,g,o.SHOW_ELEMENT|o.SHOW_COMMENT|o.SHOW_TEXT|o.SHOW_PROCESSING_INSTRUCTION|o.SHOW_CDATA_SECTION,null)},_p=function(g){g.normalize();let A=M.call(g.ownerDocument||g,g,o.SHOW_TEXT|o.SHOW_COMMENT|o.SHOW_CDATA_SECTION|o.SHOW_PROCESSING_INSTRUCTION,null),L=A.nextNode();for(;L;){let ce=L.data;Ll([P,re,xe],te=>{ce=Hl(ce,te," ")}),L.data=ce,L=A.nextNode()}},_s=function(g){let A=k?k(g):null;return typeof A!="string"||ze(A)!=="form"?!1:typeof g.nodeName!="string"||typeof g.textContent!="string"||typeof g.removeChild!="function"||g.attributes!==y(g)||typeof g.removeAttribute!="function"||typeof g.setAttribute!="function"||typeof g.namespaceURI!="string"||typeof g.insertBefore!="function"||typeof g.hasChildNodes!="function"||g.nodeType!==b(g)||g.childNodes!==x(g)},$l=function(g){if(!b||typeof g!="object"||g===null)return!1;try{return b(g)===Nn.documentFragment}catch(A){return!1}},Cs=function(g){if(!b||typeof g!="object"||g===null)return!1;try{return typeof b(g)=="number"}catch(A){return!1}};function zn(j,g,A){Ll(j,L=>{L.call(t,g,A,Oi)})}let Cp=function(g){let A=null;if(zn(C.beforeSanitizeElements,g,null),_s(g))return nn(g),!0;let L=ze(g.nodeName);if(zn(C.uponSanitizeElement,g,{tagName:L,allowedTags:ge}),Gl&&g.hasChildNodes()&&!Cs(g.firstElementChild)&&at(/<[/\w!]/g,g.innerHTML)&&at(/<[/\w!]/g,g.textContent)||Gl&&g.namespaceURI===mn&&L==="style"&&Cs(g.firstElementChild)||g.nodeType===Nn.progressingInstruction||Gl&&g.nodeType===Nn.comment&&at(/<[/\w]/g,g.data))return nn(g),!0;if(Yl[L]||!(aa.tagCheck instanceof Function&&aa.tagCheck(L))&&!ge[L]){if(!Yl[L]&&zp(L)&&(fe.tagNameCheck instanceof RegExp&&at(fe.tagNameCheck,L)||fe.tagNameCheck instanceof Function&&fe.tagNameCheck(L)))return!1;if(uc&&!pn[L]){let te=h(g),Ee=x(g);if(Ee&&te){let jt=Ee.length;for(let gn=jt-1;gn>=0;--gn){let an=p(Ee[gn],!0);te.insertBefore(an,S(g))}}}return nn(g),!0}return(b?b(g):g.nodeType)===Nn.element&&!A1(g)||(L==="noscript"||L==="noembed"||L==="noframes")&&at(/<\/no(script|embed|frames)/i,g.innerHTML)?(nn(g),!0):(ia&&g.nodeType===Nn.text&&(A=g.textContent,Ll([P,re,xe],te=>{A=Hl(A,te," ")}),g.textContent!==A&&(Ul(t.removed,{element:g.cloneNode()}),g.textContent=A)),zn(C.afterSanitizeElements,g,null),!1)},Dp=function(g,A,L){if(ks[A]||vp&&(A==="id"||A==="name")&&(L in n||L in E1))return!1;let ce=Y[A]||aa.attributeCheck instanceof Function&&aa.attributeCheck(A,g);if(!(rc&&!ks[A]&&at(gt,A))){if(!(gp&&at(en,A))){if(!ce||ks[A]){if(!(zp(g)&&(fe.tagNameCheck instanceof RegExp&&at(fe.tagNameCheck,g)||fe.tagNameCheck instanceof Function&&fe.tagNameCheck(g))&&(fe.attributeNameCheck instanceof RegExp&&at(fe.attributeNameCheck,A)||fe.attributeNameCheck instanceof Function&&fe.attributeNameCheck(A,g))||A==="is"&&fe.allowCustomizedBuiltInElements&&(fe.tagNameCheck instanceof RegExp&&at(fe.tagNameCheck,L)||fe.tagNameCheck instanceof Function&&fe.tagNameCheck(L))))return!1}else if(!fc[A]){if(!at(hn,Hl(L,$e,""))){if(!((A==="src"||A==="xlink:href"||A==="href")&&g!=="script"&&_S(L,"data:")===0&&xp[g])){if(!(yp&&!at(Va,Hl(L,$e,"")))){if(L)return!1}}}}}}return!0},k1=I({},["annotation-xml","color-profile","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","missing-glyph"]),zp=function(g){return!k1[vs(g)]&&at(tn,g)},Mp=function(g){zn(C.beforeSanitizeAttributes,g,null);let A=g.attributes;if(!A||_s(g))return;let L={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Y,forceKeepAttr:void 0},ce=A.length;for(;ce--;){let te=A[ce],Ee=te.name,jt=te.namespaceURI,gn=te.value,an=ze(Ee),yc=gn,Qe=Ee==="value"?yc:Tk(yc);if(L.attrName=an,L.attrValue=Qe,L.keepAttr=!0,L.forceKeepAttr=void 0,zn(C.uponSanitizeAttribute,g,L),Qe=L.attrValue,Sp&&(an==="id"||an==="name")&&_S(Qe,Tp)!==0&&($a(Ee,g),Qe=Tp+Qe),Gl&&at(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,Qe)){$a(Ee,g);continue}if(an==="attributename"&&NS(Qe,"href")){$a(Ee,g);continue}if(L.forceKeepAttr)continue;if(!L.keepAttr){$a(Ee,g);continue}if(!bp&&at(/\/>/i,Qe)){$a(Ee,g);continue}ia&&Ll([P,re,xe],Up=>{Qe=Hl(Qe,Up," ")});let Lp=ze(g.nodeName);if(!Dp(Lp,an,Qe)){$a(Ee,g);continue}if(_&&typeof f=="object"&&typeof f.getAttributeType=="function"&&!jt)switch(f.getAttributeType(Lp,an)){case"TrustedHTML":{Qe=_.createHTML(Qe);break}case"TrustedScriptURL":{Qe=_.createScriptURL(Qe);break}}if(Qe!==yc)try{jt?g.setAttributeNS(jt,Ee,Qe):g.setAttribute(Ee,Qe),_s(g)?nn(g):wS(t.removed)}catch(Up){$a(Ee,g)}}zn(C.afterSanitizeAttributes,g,null)},Ds=function(g){let A=null,L=Np(g);for(zn(C.beforeSanitizeShadowDOM,g,null);A=L.nextNode();)if(zn(C.uponSanitizeShadowNode,A,null),Cp(A),Mp(A),$l(A.content)&&Ds(A.content),(b?b(A):A.nodeType)===Nn.element){let te=m?m(A):A.shadowRoot;$l(te)&&(wi(te),Ds(te))}zn(C.afterSanitizeShadowDOM,g,null)},wi=function(g){let A=b?b(g):g.nodeType;if(A===Nn.element){let te=m?m(g):g.shadowRoot;$l(te)&&(wi(te),Ds(te))}let L=x?x(g):g.childNodes;if(!L)return;let ce=[];Ll(L,te=>{Ul(ce,te)});for(let te of ce)wi(te);if(A===Nn.element){let te=k?k(g):null;if(typeof te=="string"&&ze(te)==="template"){let Ee=g.content;$l(Ee)&&wi(Ee)}}};return t.sanitize=function(j){let g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},A=null,L=null,ce=null,te=null;if(dc=!j,dc&&(j="<!-->"),typeof j!="string"&&!Cs(j)&&(j=Rk(j),typeof j!="string"))throw bs("dirty is not a string, aborting");if(!t.isSupported)return j;if(sc||gc(g),t.removed=[],typeof j=="string"&&(Vl=!1),Vl){let gn=k?k(j):j.nodeName;if(typeof gn=="string"){let an=ze(gn);if(!ge[an]||Yl[an])throw bs("root node is forbidden and cannot be sanitized in-place")}if(_s(j))throw bs("root node is clobbered and cannot be sanitized in-place");wi(j)}else if(Cs(j))A=wp("<!---->"),L=A.ownerDocument.importNode(j,!0),L.nodeType===Nn.element&&L.nodeName==="BODY"||L.nodeName==="HTML"?A=L:A.appendChild(L),wi(L);else{if(!Ai&&!ia&&!Xa&&j.indexOf("<")===-1)return _&&Os?_.createHTML(j):j;if(A=wp(j),!A)return Ai?null:Os?w:""}A&&oc&&nn(A.firstChild);let Ee=Np(Vl?j:A);for(;ce=Ee.nextNode();)Cp(ce),Mp(ce),$l(ce.content)&&Ds(ce.content);if(Vl)return ia&&_p(j),j;if(Ai){if(ia&&_p(A),Rs)for(te=ve.call(A.ownerDocument);A.firstChild;)te.appendChild(A.firstChild);else te=A;return(Y.shadowroot||Y.shadowrootmode)&&(te=D.call(a,te,!0)),te}let jt=Xa?A.outerHTML:A.innerHTML;return Xa&&ge["!doctype"]&&A.ownerDocument&&A.ownerDocument.doctype&&A.ownerDocument.doctype.name&&at(Hk,A.ownerDocument.doctype.name)&&(jt="<!DOCTYPE "+A.ownerDocument.doctype.name+">\n"+jt),ia&&Ll([P,re,xe],gn=>{jt=Hl(jt,gn," ")}),_&&Os?_.createHTML(jt):jt},t.setConfig=function(){let j=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};gc(j),sc=!0},t.clearConfig=function(){Oi=null,sc=!1},t.isValidAttribute=function(j,g,A){Oi||gc({});let L=ze(j),ce=ze(g);return Dp(L,ce,A)},t.addHook=function(j,g){typeof g=="function"&&Ul(C[j],g)},t.removeHook=function(j,g){if(g!==void 0){let A=vk(C[j],g);return A===-1?void 0:Sk(C[j],A,1)[0]}return wS(C[j])},t.removeHooks=function(j){C[j]=[]},t.removeAllHooks=function(){C=BS()},t}var GS=YS();function tp(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var Ei=tp();function JS(e){Ei=e}var Ti={exec:()=>null};function jl(e){let t=[];return n=>{let a=Math.max(0,Math.min(3,n-1)),i=t[a];return i||(i=e(a),t[a]=i),i}}function le(e,t=""){let n=typeof e=="string"?e:e.source,a={replace:(i,l)=>{let r=typeof l=="string"?l:l.source;return r=r.replace(ut.caret,"$1"),n=n.replace(i,r),a},getRegex:()=>new RegExp(n,t)};return a}var Yk=((e="")=>{try{return!!new RegExp("(?<=1)(?<!1)"+e)}catch(t){return!1}})(),ut={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] +\S/,listReplaceTask:/^\[[ xX]\] +/,listTaskCheckbox:/\[[ xX]\]/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:e=>new RegExp("^( {0,3}".concat(e,")((?:[ ][^\\n]*)?(?:\\n|$))")),nextBulletRegex:jl(e=>new RegExp("^ {0,".concat(e,"}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))"))),hrRegex:jl(e=>new RegExp("^ {0,".concat(e,"}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)"))),fencesBeginRegex:jl(e=>new RegExp("^ {0,".concat(e,"}(?:```|~~~)"))),headingBeginRegex:jl(e=>new RegExp("^ {0,".concat(e,"}#"))),htmlBeginRegex:jl(e=>new RegExp("^ {0,".concat(e,"}<(?:[a-z].*>|!--)"),"i")),blockquoteBeginRegex:jl(e=>new RegExp("^ {0,".concat(e,"}>")))},Gk=/^(?:[ \t]*(?:\n|$))+/,Vk=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,Xk=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,xs=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,$k=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,np=/ {0,3}(?:[*+-]|\d{1,9}[.)])/,IS=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,PS=le(IS).replace(/bull/g,np).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),Qk=le(IS).replace(/bull/g,np).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),ap=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,Zk=/^[^\n]+/,ip=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,Kk=le(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",ip).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),Fk=le(/^(bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,np).getRegex(),nc="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",lp=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,Jk=le("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",lp).replace("tag",nc).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),WS=le(ap).replace("hr",xs).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",nc).getRegex(),Ik=le(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",WS).getRegex(),rp={blockquote:Ik,code:Vk,def:Kk,fences:Xk,heading:$k,hr:xs,html:Jk,lheading:PS,list:Fk,newline:Gk,paragraph:WS,table:Ti,text:Zk},VS=le("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",xs).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",nc).getRegex(),Pk=z(T({},rp),{lheading:Qk,table:VS,paragraph:le(ap).replace("hr",xs).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",VS).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",nc).getRegex()}),Wk=z(T({},rp),{html:le("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",lp).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:Ti,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:le(ap).replace("hr",xs).replace("heading"," *#{1,6} *[^\n]").replace("lheading",PS).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()}),eR=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,tR=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,e1=/^( {2,}|\\)\n(?!\s*$)/,nR=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,ql=/[\p{P}\p{S}]/u,ac=/[\s\p{P}\p{S}]/u,sp=/[^\s\p{P}\p{S}]/u,aR=le(/^((?![*_])punctSpace)/,"u").replace(/punctSpace/g,ac).getRegex(),t1=/(?!~)[\p{P}\p{S}]/u,iR=/(?!~)[\s\p{P}\p{S}]/u,lR=/(?:[^\s\p{P}\p{S}]|~)/u,rR=le(/link|precode-code|html/,"g").replace("link",new RegExp("\\[(?:[^\\[\\]`]|(?<a>`+)[^`]+\\k<a>(?!`))*?\\]\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)]|\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)])*\\))*\\)")).replace("precode-",Yk?"(?<!`)()":"(^^|[^`])").replace("code",new RegExp("(?<b>`+)[^`]+\\k<b>(?!`)")).replace("html",/<(?! )[^<>]*?>/).getRegex(),n1=/^(?:\*+(?:((?!\*)punct)|([^\s*]))?)|^_+(?:((?!_)punct)|([^\s_]))?/,sR=le(n1,"u").replace(/punct/g,ql).getRegex(),oR=le(n1,"u").replace(/punct/g,t1).getRegex(),a1="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",uR=le(a1,"gu").replace(/notPunctSpace/g,sp).replace(/punctSpace/g,ac).replace(/punct/g,ql).getRegex(),cR=le(a1,"gu").replace(/notPunctSpace/g,lR).replace(/punctSpace/g,iR).replace(/punct/g,t1).getRegex(),fR=le("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,sp).replace(/punctSpace/g,ac).replace(/punct/g,ql).getRegex(),dR=le(/^~~?(?:((?!~)punct)|[^\s~])/,"u").replace(/punct/g,ql).getRegex(),hR="^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)",pR=le(hR,"gu").replace(/notPunctSpace/g,sp).replace(/punctSpace/g,ac).replace(/punct/g,ql).getRegex(),mR=le(/\\(punct)/,"gu").replace(/punct/g,ql).getRegex(),gR=le(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),yR=le(lp).replace("(?:-->|$)","-->").getRegex(),bR=le("^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>").replace("comment",yR).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),Wu=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\])|[^\[\]\\`])*?/,vR=le(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?\s*\)/).replace("label",Wu).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),i1=le(/^!?\[(label)\]\[(ref)\]/).replace("label",Wu).replace("ref",ip).getRegex(),l1=le(/^!?\[(ref)\](?:\[\])?/).replace("ref",ip).getRegex(),SR=le("reflink|nolink(?!\\()","g").replace("reflink",i1).replace("nolink",l1).getRegex(),XS=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,op={_backpedal:Ti,anyPunctuation:mR,autolink:gR,blockSkip:rR,br:e1,code:tR,del:Ti,delLDelim:Ti,delRDelim:Ti,emStrongLDelim:sR,emStrongRDelimAst:uR,emStrongRDelimUnd:fR,escape:eR,link:vR,nolink:l1,punctuation:aR,reflink:i1,reflinkSearch:SR,tag:bR,text:nR,url:Ti},TR=z(T({},op),{link:le(/^!?\[(label)\]\((.*?)\)/).replace("label",Wu).getRegex(),reflink:le(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",Wu).getRegex()}),Ph=z(T({},op),{emStrongRDelimAst:cR,emStrongLDelim:oR,delLDelim:dR,delRDelim:pR,url:le(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol",XS).replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:le(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/).replace("protocol",XS).getRegex()}),xR=z(T({},Ph),{br:le(e1).replace("{2,}","*").getRegex(),text:le(Ph.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()}),Iu={normal:rp,gfm:Pk,pedantic:Wk},Ss={normal:op,gfm:Ph,breaks:xR,pedantic:TR},ER={"&":"&","<":"<",">":">",'"':""","'":"'"},$S=e=>ER[e];function Cn(e,t){if(t){if(ut.escapeTest.test(e))return e.replace(ut.escapeReplace,$S)}else if(ut.escapeTestNoEncode.test(e))return e.replace(ut.escapeReplaceNoEncode,$S);return e}function QS(e){try{e=encodeURI(e).replace(ut.percentDecode,"%")}catch(t){return null}return e}function ZS(e,t){var l;let n=e.replace(ut.findPipe,(r,s,o)=>{let u=!1,c=s;for(;--c>=0&&o[c]==="\\";)u=!u;return u?"|":" |"}),a=n.split(ut.splitPipe),i=0;if(a[0].trim()||a.shift(),a.length>0&&!((l=a.at(-1))!=null&&l.trim())&&a.pop(),t)if(a.length>t)a.splice(t);else for(;a.length<t;)a.push("");for(;i<a.length;i++)a[i]=a[i].trim().replace(ut.slashPipe,"|");return a}function ja(e,t,n){let a=e.length;if(a===0)return"";let i=0;for(;i<a;){let l=e.charAt(a-i-1);if(l===t&&!n)i++;else if(l!==t&&n)i++;else break}return e.slice(0,a-i)}function KS(e){let t=e.split("\n"),n=t.length-1;for(;n>=0&&ut.blankLine.test(t[n]);)n--;return t.length-n<=2?e:t.slice(0,n+1).join("\n")}function AR(e,t){if(e.indexOf(t[1])===-1)return-1;let n=0;for(let a=0;a<e.length;a++)if(e[a]==="\\")a++;else if(e[a]===t[0])n++;else if(e[a]===t[1]&&(n--,n<0))return a;return n>0?-2:-1}function kR(e,t=0){let n=t,a="";for(let i of e)if(i===" "){let l=4-n%4;a+=" ".repeat(l),n+=l}else a+=i,n++;return a}function FS(e,t,n,a,i){let l=t.href,r=t.title||null,s=e[1].replace(i.other.outputLinkReplace,"$1");a.state.inLink=!0;let o={type:e[0].charAt(0)==="!"?"image":"link",raw:n,href:l,title:r,text:s,tokens:a.inlineTokens(s)};return a.state.inLink=!1,o}function RR(e,t,n){let a=e.match(n.other.indentCodeCompensation);if(a===null)return t;let i=a[1];return t.split("\n").map(l=>{let r=l.match(n.other.beginningSpace);if(r===null)return l;let[s]=r;return s.length>=i.length?l.slice(i.length):l}).join("\n")}var ec=class{constructor(e){G(this,"options");G(this,"rules");G(this,"lexer");this.options=e||Ei}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:"space",raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let n=this.options.pedantic?t[0]:KS(t[0]),a=n.replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:n,codeBlockStyle:"indented",text:a}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let n=t[0],a=RR(n,t[3]||"",this.rules);return{type:"code",raw:n,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):t[2],text:a}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let n=t[2].trim();if(this.rules.other.endingHash.test(n)){let a=ja(n,"#");(this.options.pedantic||!a||this.rules.other.endingSpaceChar.test(a))&&(n=a.trim())}return{type:"heading",raw:ja(t[0],"\n"),depth:t[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:ja(t[0],"\n")}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let n=ja(t[0],"\n").split("\n"),a="",i="",l=[];for(;n.length>0;){let r=!1,s=[],o;for(o=0;o<n.length;o++)if(this.rules.other.blockquoteStart.test(n[o]))s.push(n[o]),r=!0;else if(!r)s.push(n[o]);else break;n=n.slice(o);let u=s.join("\n"),c=u.replace(this.rules.other.blockquoteSetextReplace,"\n $1").replace(this.rules.other.blockquoteSetextReplace2,"");a=a?"".concat(a,"\n").concat(u):u,i=i?"".concat(i,"\n").concat(c):c;let f=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(c,l,!0),this.lexer.state.top=f,n.length===0)break;let d=l.at(-1);if((d==null?void 0:d.type)==="code")break;if((d==null?void 0:d.type)==="blockquote"){let p=d,v=p.raw+"\n"+n.join("\n"),S=this.blockquote(v);l[l.length-1]=S,a=a.substring(0,a.length-p.raw.length)+S.raw,i=i.substring(0,i.length-p.text.length)+S.text;break}else if((d==null?void 0:d.type)==="list"){let p=d,v=p.raw+"\n"+n.join("\n"),S=this.list(v);l[l.length-1]=S,a=a.substring(0,a.length-d.raw.length)+S.raw,i=i.substring(0,i.length-p.raw.length)+S.raw,n=v.substring(l.at(-1).raw.length).split("\n");continue}}return{type:"blockquote",raw:a,tokens:l,text:i}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim(),a=n.length>1,i={type:"list",raw:"",ordered:a,start:a?+n.slice(0,-1):"",loose:!1,items:[]};n=a?"\\d{1,9}\\".concat(n.slice(-1)):"\\".concat(n),this.options.pedantic&&(n=a?n:"[*+-]");let l=this.rules.other.listItemRegex(n),r=!1;for(;e;){let o=!1,u="",c="";if(!(t=l.exec(e))||this.rules.block.hr.test(e))break;u=t[0],e=e.substring(u.length);let f=kR(t[2].split("\n",1)[0],t[1].length),d=e.split("\n",1)[0],p=!f.trim(),v=0;if(this.options.pedantic?(v=2,c=f.trimStart()):p?v=t[1].length+1:(v=f.search(this.rules.other.nonSpaceChar),v=v>4?1:v,c=f.slice(v),v+=t[1].length),p&&this.rules.other.blankLine.test(d)&&(u+=d+"\n",e=e.substring(d.length+1),o=!0),!o){let S=this.rules.other.nextBulletRegex(v),x=this.rules.other.hrRegex(v),h=this.rules.other.fencesBeginRegex(v),m=this.rules.other.headingBeginRegex(v),y=this.rules.other.htmlBeginRegex(v),b=this.rules.other.blockquoteBeginRegex(v);for(;e;){let k=e.split("\n",1)[0],_;if(d=k,this.options.pedantic?(d=d.replace(this.rules.other.listReplaceNesting," "),_=d):_=d.replace(this.rules.other.tabCharGlobal," "),h.test(d)||m.test(d)||y.test(d)||b.test(d)||S.test(d)||x.test(d))break;if(_.search(this.rules.other.nonSpaceChar)>=v||!d.trim())c+="\n"+_.slice(v);else{if(p||f.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||h.test(f)||m.test(f)||x.test(f))break;c+="\n"+d}p=!d.trim(),u+=k+"\n",e=e.substring(k.length+1),f=_.slice(v)}}i.loose||(r?i.loose=!0:this.rules.other.doubleBlankLine.test(u)&&(r=!0)),i.items.push({type:"list_item",raw:u,task:!!this.options.gfm&&this.rules.other.listIsTask.test(c),loose:!1,text:c,tokens:[]}),i.raw+=u}let s=i.items.at(-1);if(s)s.raw=s.raw.trimEnd(),s.text=s.text.trimEnd();else return;i.raw=i.raw.trimEnd();for(let o of i.items){this.lexer.state.top=!1,o.tokens=this.lexer.blockTokens(o.text,[]);let u=o.tokens[0];if(o.task&&((u==null?void 0:u.type)==="text"||(u==null?void 0:u.type)==="paragraph")){o.text=o.text.replace(this.rules.other.listReplaceTask,""),u.raw=u.raw.replace(this.rules.other.listReplaceTask,""),u.text=u.text.replace(this.rules.other.listReplaceTask,"");for(let f=this.lexer.inlineQueue.length-1;f>=0;f--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[f].src)){this.lexer.inlineQueue[f].src=this.lexer.inlineQueue[f].src.replace(this.rules.other.listReplaceTask,"");break}let c=this.rules.other.listTaskCheckbox.exec(o.raw);if(c){let f={type:"checkbox",raw:c[0]+" ",checked:c[0]!=="[ ]"};o.checked=f.checked,i.loose?o.tokens[0]&&["paragraph","text"].includes(o.tokens[0].type)&&"tokens"in o.tokens[0]&&o.tokens[0].tokens?(o.tokens[0].raw=f.raw+o.tokens[0].raw,o.tokens[0].text=f.raw+o.tokens[0].text,o.tokens[0].tokens.unshift(f)):o.tokens.unshift({type:"paragraph",raw:f.raw,text:f.raw,tokens:[f]}):o.tokens.unshift(f)}}else o.task&&(o.task=!1);if(!i.loose){let c=o.tokens.filter(d=>d.type==="space"),f=c.length>0&&c.some(d=>this.rules.other.anyLine.test(d.raw));i.loose=f}}if(i.loose)for(let o of i.items){o.loose=!0;for(let u of o.tokens)u.type==="text"&&(u.type="paragraph")}return i}}html(e){let t=this.rules.block.html.exec(e);if(t){let n=KS(t[0]);return{type:"html",block:!0,raw:n,pre:t[1]==="pre"||t[1]==="script"||t[1]==="style",text:n}}}def(e){let t=this.rules.block.def.exec(e);if(t){let n=t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal," "),a=t[2]?t[2].replace(this.rules.other.hrefBrackets,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",i=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):t[3];return{type:"def",tag:n,raw:ja(t[0],"\n"),href:a,title:i}}}table(e){var r;let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let n=ZS(t[1]),a=t[2].replace(this.rules.other.tableAlignChars,"").split("|"),i=(r=t[3])!=null&&r.trim()?t[3].replace(this.rules.other.tableRowBlankLine,"").split("\n"):[],l={type:"table",raw:ja(t[0],"\n"),header:[],align:[],rows:[]};if(n.length===a.length){for(let s of a)this.rules.other.tableAlignRight.test(s)?l.align.push("right"):this.rules.other.tableAlignCenter.test(s)?l.align.push("center"):this.rules.other.tableAlignLeft.test(s)?l.align.push("left"):l.align.push(null);for(let s=0;s<n.length;s++)l.header.push({text:n[s],tokens:this.lexer.inline(n[s]),header:!0,align:l.align[s]});for(let s of i)l.rows.push(ZS(s,l.header.length).map((o,u)=>({text:o,tokens:this.lexer.inline(o),header:!1,align:l.align[u]})));return l}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t){let n=t[1].trim();return{type:"heading",raw:ja(t[0],"\n"),depth:t[2].charAt(0)==="="?1:2,text:n,tokens:this.lexer.inline(n)}}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let n=t[1].charAt(t[1].length-1)==="\n"?t[1].slice(0,-1):t[1];return{type:"paragraph",raw:t[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let n=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let l=ja(n.slice(0,-1),"\\");if((n.length-l.length)%2===0)return}else{let l=AR(t[2],"()");if(l===-2)return;if(l>-1){let r=(t[0].indexOf("!")===0?5:4)+t[1].length+l;t[2]=t[2].substring(0,l),t[0]=t[0].substring(0,r).trim(),t[3]=""}}let a=t[2],i="";if(this.options.pedantic){let l=this.rules.other.pedanticHrefTitle.exec(a);l&&(a=l[1],i=l[3])}else i=t[3]?t[3].slice(1,-1):"";return a=a.trim(),this.rules.other.startAngleBracket.test(a)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?a=a.slice(1):a=a.slice(1,-1)),FS(t,{href:a&&a.replace(this.rules.inline.anyPunctuation,"$1"),title:i&&i.replace(this.rules.inline.anyPunctuation,"$1")},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let a=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal," "),i=t[a.toLowerCase()];if(!i){let l=n[0].charAt(0);return{type:"text",raw:l,text:l}}return FS(n,i,n[0],this.lexer,this.rules)}}emStrong(e,t,n=""){let a=this.rules.inline.emStrongLDelim.exec(e);if(!(!a||!a[1]&&!a[2]&&!a[3]&&!a[4]||a[4]&&n.match(this.rules.other.unicodeAlphaNumeric))&&(!(a[1]||a[3])||!n||this.rules.inline.punctuation.exec(n))){let i=[...a[0]].length-1,l,r,s=i,o=0,u=a[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(u.lastIndex=0,t=t.slice(-1*e.length+i);(a=u.exec(t))!==null;){if(l=a[1]||a[2]||a[3]||a[4]||a[5]||a[6],!l)continue;if(r=[...l].length,a[3]||a[4]){s+=r;continue}else if((a[5]||a[6])&&i%3&&!((i+r)%3)){o+=r;continue}if(s-=r,s>0)continue;r=Math.min(r,r+s+o);let c=[...a[0]][0].length,f=e.slice(0,i+a.index+c+r);if(Math.min(i,r)%2){let p=f.slice(1,-1);return{type:"em",raw:f,text:p,tokens:this.lexer.inlineTokens(p)}}let d=f.slice(2,-2);return{type:"strong",raw:f,text:d,tokens:this.lexer.inlineTokens(d)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let n=t[2].replace(this.rules.other.newLineCharGlobal," "),a=this.rules.other.nonSpaceChar.test(n),i=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return a&&i&&(n=n.substring(1,n.length-1)),{type:"codespan",raw:t[0],text:n}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e,t,n=""){let a=this.rules.inline.delLDelim.exec(e);if(a&&(!a[1]||!n||this.rules.inline.punctuation.exec(n))){let i=[...a[0]].length-1,l,r,s=i,o=this.rules.inline.delRDelim;for(o.lastIndex=0,t=t.slice(-1*e.length+i);(a=o.exec(t))!==null;){if(l=a[1]||a[2]||a[3]||a[4]||a[5]||a[6],!l||(r=[...l].length,r!==i))continue;if(a[3]||a[4]){s+=r;continue}if(s-=r,s>0)continue;r=Math.min(r,r+s);let u=[...a[0]][0].length,c=e.slice(0,i+a.index+u+r),f=c.slice(i,-i);return{type:"del",raw:c,text:f,tokens:this.lexer.inlineTokens(f)}}}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let n,a;return t[2]==="@"?(n=t[1],a="mailto:"+n):(n=t[1],a=n),{type:"link",raw:t[0],text:n,href:a,tokens:[{type:"text",raw:n,text:n}]}}}url(e){var n,a;let t;if(t=this.rules.inline.url.exec(e)){let i,l;if(t[2]==="@")i=t[0],l="mailto:"+i;else{let r;do r=t[0],t[0]=(a=(n=this.rules.inline._backpedal.exec(t[0]))==null?void 0:n[0])!=null?a:"";while(r!==t[0]);i=t[0],t[1]==="www."?l="http://"+t[0]:l=t[0]}return{type:"link",raw:t[0],text:i,href:l,tokens:[{type:"text",raw:i,text:i}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let n=this.lexer.state.inRawBlock;return{type:"text",raw:t[0],text:t[0],escaped:n}}}},fn=class Wh{constructor(t){G(this,"tokens");G(this,"options");G(this,"state");G(this,"inlineQueue");G(this,"tokenizer");this.tokens=[],this.tokens.links=Object.create(null),this.options=t||Ei,this.options.tokenizer=this.options.tokenizer||new ec,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let n={other:ut,block:Iu.normal,inline:Ss.normal};this.options.pedantic?(n.block=Iu.pedantic,n.inline=Ss.pedantic):this.options.gfm&&(n.block=Iu.gfm,this.options.breaks?n.inline=Ss.breaks:n.inline=Ss.gfm),this.tokenizer.rules=n}static get rules(){return{block:Iu,inline:Ss}}static lex(t,n){return new Wh(n).lex(t)}static lexInline(t,n){return new Wh(n).inlineTokens(t)}lex(t){t=t.replace(ut.carriageReturn,"\n"),this.blockTokens(t,this.tokens);for(let n=0;n<this.inlineQueue.length;n++){let a=this.inlineQueue[n];this.inlineTokens(a.src,a.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(t,n=[],a=!1){var l,r,s;this.tokenizer.lexer=this,this.options.pedantic&&(t=t.replace(ut.tabCharGlobal," ").replace(ut.spaceLine,""));let i=1/0;for(;t;){if(t.length<i)i=t.length;else{this.infiniteLoopError(t.charCodeAt(0));break}let o;if((r=(l=this.options.extensions)==null?void 0:l.block)!=null&&r.some(c=>(o=c.call({lexer:this},t,n))?(t=t.substring(o.raw.length),n.push(o),!0):!1))continue;if(o=this.tokenizer.space(t)){t=t.substring(o.raw.length);let c=n.at(-1);o.raw.length===1&&c!==void 0?c.raw+="\n":n.push(o);continue}if(o=this.tokenizer.code(t)){t=t.substring(o.raw.length);let c=n.at(-1);(c==null?void 0:c.type)==="paragraph"||(c==null?void 0:c.type)==="text"?(c.raw+=(c.raw.endsWith("\n")?"":"\n")+o.raw,c.text+="\n"+o.text,this.inlineQueue.at(-1).src=c.text):n.push(o);continue}if(o=this.tokenizer.fences(t)){t=t.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.heading(t)){t=t.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.hr(t)){t=t.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.blockquote(t)){t=t.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.list(t)){t=t.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.html(t)){t=t.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.def(t)){t=t.substring(o.raw.length);let c=n.at(-1);(c==null?void 0:c.type)==="paragraph"||(c==null?void 0:c.type)==="text"?(c.raw+=(c.raw.endsWith("\n")?"":"\n")+o.raw,c.text+="\n"+o.raw,this.inlineQueue.at(-1).src=c.text):this.tokens.links[o.tag]||(this.tokens.links[o.tag]={href:o.href,title:o.title},n.push(o));continue}if(o=this.tokenizer.table(t)){t=t.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.lheading(t)){t=t.substring(o.raw.length),n.push(o);continue}let u=t;if((s=this.options.extensions)!=null&&s.startBlock){let c=1/0,f=t.slice(1),d;this.options.extensions.startBlock.forEach(p=>{d=p.call({lexer:this},f),typeof d=="number"&&d>=0&&(c=Math.min(c,d))}),c<1/0&&c>=0&&(u=t.substring(0,c+1))}if(this.state.top&&(o=this.tokenizer.paragraph(u))){let c=n.at(-1);a&&(c==null?void 0:c.type)==="paragraph"?(c.raw+=(c.raw.endsWith("\n")?"":"\n")+o.raw,c.text+="\n"+o.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=c.text):n.push(o),a=u.length!==t.length,t=t.substring(o.raw.length);continue}if(o=this.tokenizer.text(t)){t=t.substring(o.raw.length);let c=n.at(-1);(c==null?void 0:c.type)==="text"?(c.raw+=(c.raw.endsWith("\n")?"":"\n")+o.raw,c.text+="\n"+o.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=c.text):n.push(o);continue}if(t){this.infiniteLoopError(t.charCodeAt(0));break}}return this.state.top=!0,n}inline(t,n=[]){return this.inlineQueue.push({src:t,tokens:n}),n}inlineTokens(t,n=[]){var u,c,f,d,p,v;this.tokenizer.lexer=this;let a=t,i=null;if(this.tokens.links){let S=Object.keys(this.tokens.links);if(S.length>0)for(;(i=this.tokenizer.rules.inline.reflinkSearch.exec(a))!==null;)S.includes(i[0].slice(i[0].lastIndexOf("[")+1,-1))&&(a=a.slice(0,i.index)+"["+"a".repeat(i[0].length-2)+"]"+a.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(i=this.tokenizer.rules.inline.anyPunctuation.exec(a))!==null;)a=a.slice(0,i.index)+"++"+a.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let l;for(;(i=this.tokenizer.rules.inline.blockSkip.exec(a))!==null;)l=i[2]?i[2].length:0,a=a.slice(0,i.index+l)+"["+"a".repeat(i[0].length-l-2)+"]"+a.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);a=(f=(c=(u=this.options.hooks)==null?void 0:u.emStrongMask)==null?void 0:c.call({lexer:this},a))!=null?f:a;let r=!1,s="",o=1/0;for(;t;){if(t.length<o)o=t.length;else{this.infiniteLoopError(t.charCodeAt(0));break}r||(s=""),r=!1;let S;if((p=(d=this.options.extensions)==null?void 0:d.inline)!=null&&p.some(h=>(S=h.call({lexer:this},t,n))?(t=t.substring(S.raw.length),n.push(S),!0):!1))continue;if(S=this.tokenizer.escape(t)){t=t.substring(S.raw.length),n.push(S);continue}if(S=this.tokenizer.tag(t)){t=t.substring(S.raw.length),n.push(S);continue}if(S=this.tokenizer.link(t)){t=t.substring(S.raw.length),n.push(S);continue}if(S=this.tokenizer.reflink(t,this.tokens.links)){t=t.substring(S.raw.length);let h=n.at(-1);S.type==="text"&&(h==null?void 0:h.type)==="text"?(h.raw+=S.raw,h.text+=S.text):n.push(S);continue}if(S=this.tokenizer.emStrong(t,a,s)){t=t.substring(S.raw.length),n.push(S);continue}if(S=this.tokenizer.codespan(t)){t=t.substring(S.raw.length),n.push(S);continue}if(S=this.tokenizer.br(t)){t=t.substring(S.raw.length),n.push(S);continue}if(S=this.tokenizer.del(t,a,s)){t=t.substring(S.raw.length),n.push(S);continue}if(S=this.tokenizer.autolink(t)){t=t.substring(S.raw.length),n.push(S);continue}if(!this.state.inLink&&(S=this.tokenizer.url(t))){t=t.substring(S.raw.length),n.push(S);continue}let x=t;if((v=this.options.extensions)!=null&&v.startInline){let h=1/0,m=t.slice(1),y;this.options.extensions.startInline.forEach(b=>{y=b.call({lexer:this},m),typeof y=="number"&&y>=0&&(h=Math.min(h,y))}),h<1/0&&h>=0&&(x=t.substring(0,h+1))}if(S=this.tokenizer.inlineText(x)){t=t.substring(S.raw.length),S.raw.slice(-1)!=="_"&&(s=S.raw.slice(-1)),r=!0;let h=n.at(-1);(h==null?void 0:h.type)==="text"?(h.raw+=S.raw,h.text+=S.text):n.push(S);continue}if(t){this.infiniteLoopError(t.charCodeAt(0));break}}return n}infiniteLoopError(t){let n="Infinite loop on byte: "+t;if(this.options.silent)console.error(n);else throw new Error(n)}},tc=class{constructor(e){G(this,"options");G(this,"parser");this.options=e||Ei}space(e){return""}code({text:e,lang:t,escaped:n}){var l;let a=(l=(t||"").match(ut.notSpaceStart))==null?void 0:l[0],i=e.replace(ut.endingNewline,"")+"\n";return a?'<pre><code class="language-'+Cn(a)+'">'+(n?i:Cn(i,!0))+"</code></pre>\n":"<pre><code>"+(n?i:Cn(i,!0))+"</code></pre>\n"}blockquote({tokens:e}){return"<blockquote>\n".concat(this.parser.parse(e),"</blockquote>\n")}html({text:e}){return e}def(e){return""}heading({tokens:e,depth:t}){return"<h".concat(t,">").concat(this.parser.parseInline(e),"</h").concat(t,">\n")}hr(e){return"<hr>\n"}list(e){let t=e.ordered,n=e.start,a="";for(let r=0;r<e.items.length;r++){let s=e.items[r];a+=this.listitem(s)}let i=t?"ol":"ul",l=t&&n!==1?' start="'+n+'"':"";return"<"+i+l+">\n"+a+"</"+i+">\n"}listitem(e){return"<li>".concat(this.parser.parse(e.tokens),"</li>\n")}checkbox({checked:e}){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox"> '}paragraph({tokens:e}){return"<p>".concat(this.parser.parseInline(e),"</p>\n")}table(e){let t="",n="";for(let i=0;i<e.header.length;i++)n+=this.tablecell(e.header[i]);t+=this.tablerow({text:n});let a="";for(let i=0;i<e.rows.length;i++){let l=e.rows[i];n="";for(let r=0;r<l.length;r++)n+=this.tablecell(l[r]);a+=this.tablerow({text:n})}return a&&(a="<tbody>".concat(a,"</tbody>")),"<table>\n<thead>\n"+t+"</thead>\n"+a+"</table>\n"}tablerow({text:e}){return"<tr>\n".concat(e,"</tr>\n")}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?"th":"td";return(e.align?"<".concat(n,' align="').concat(e.align,'">'):"<".concat(n,">"))+t+"</".concat(n,">\n")}strong({tokens:e}){return"<strong>".concat(this.parser.parseInline(e),"</strong>")}em({tokens:e}){return"<em>".concat(this.parser.parseInline(e),"</em>")}codespan({text:e}){return"<code>".concat(Cn(e,!0),"</code>")}br(e){return"<br>"}del({tokens:e}){return"<del>".concat(this.parser.parseInline(e),"</del>")}link({href:e,title:t,tokens:n}){let a=this.parser.parseInline(n),i=QS(e);if(i===null)return a;e=i;let l='<a href="'+e+'"';return t&&(l+=' title="'+Cn(t)+'"'),l+=">"+a+"</a>",l}image({href:e,title:t,text:n,tokens:a}){a&&(n=this.parser.parseInline(a,this.parser.textRenderer));let i=QS(e);if(i===null)return Cn(n);e=i;let l='<img src="'.concat(e,'" alt="').concat(Cn(n),'"');return t&&(l+=' title="'.concat(Cn(t),'"')),l+=">",l}text(e){return"tokens"in e&&e.tokens?this.parser.parseInline(e.tokens):"escaped"in e&&e.escaped?e.text:Cn(e.text)}},up=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return""+e}image({text:e}){return""+e}br(){return""}checkbox({raw:e}){return e}},dn=class ep{constructor(t){G(this,"options");G(this,"renderer");G(this,"textRenderer");this.options=t||Ei,this.options.renderer=this.options.renderer||new tc,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new up}static parse(t,n){return new ep(n).parse(t)}static parseInline(t,n){return new ep(n).parseInline(t)}parse(t){var a,i;this.renderer.parser=this;let n="";for(let l=0;l<t.length;l++){let r=t[l];if((i=(a=this.options.extensions)==null?void 0:a.renderers)!=null&&i[r.type]){let o=r,u=this.options.extensions.renderers[o.type].call({parser:this},o);if(u!==!1||!["space","hr","heading","code","table","blockquote","list","html","def","paragraph","text"].includes(o.type)){n+=u||"";continue}}let s=r;switch(s.type){case"space":{n+=this.renderer.space(s);break}case"hr":{n+=this.renderer.hr(s);break}case"heading":{n+=this.renderer.heading(s);break}case"code":{n+=this.renderer.code(s);break}case"table":{n+=this.renderer.table(s);break}case"blockquote":{n+=this.renderer.blockquote(s);break}case"list":{n+=this.renderer.list(s);break}case"checkbox":{n+=this.renderer.checkbox(s);break}case"html":{n+=this.renderer.html(s);break}case"def":{n+=this.renderer.def(s);break}case"paragraph":{n+=this.renderer.paragraph(s);break}case"text":{n+=this.renderer.text(s);break}default:{let o='Token with "'+s.type+'" type was not found.';if(this.options.silent)return console.error(o),"";throw new Error(o)}}}return n}parseInline(t,n=this.renderer){var i,l;this.renderer.parser=this;let a="";for(let r=0;r<t.length;r++){let s=t[r];if((l=(i=this.options.extensions)==null?void 0:i.renderers)!=null&&l[s.type]){let u=this.options.extensions.renderers[s.type].call({parser:this},s);if(u!==!1||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(s.type)){a+=u||"";continue}}let o=s;switch(o.type){case"escape":{a+=n.text(o);break}case"html":{a+=n.html(o);break}case"link":{a+=n.link(o);break}case"image":{a+=n.image(o);break}case"checkbox":{a+=n.checkbox(o);break}case"strong":{a+=n.strong(o);break}case"em":{a+=n.em(o);break}case"codespan":{a+=n.codespan(o);break}case"br":{a+=n.br(o);break}case"del":{a+=n.del(o);break}case"text":{a+=n.text(o);break}default:{let u='Token with "'+o.type+'" type was not found.';if(this.options.silent)return console.error(u),"";throw new Error(u)}}}return a}},Pu,Ts=(Pu=class{constructor(e){G(this,"options");G(this,"block");this.options=e||Ei}preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(e=this.block){return e?fn.lex:fn.lexInline}provideParser(e=this.block){return e?dn.parse:dn.parseInline}},G(Pu,"passThroughHooks",new Set(["preprocess","postprocess","processAllTokens","emStrongMask"])),G(Pu,"passThroughHooksRespectAsync",new Set(["preprocess","postprocess","processAllTokens"])),Pu),OR=class{constructor(...e){G(this,"defaults",tp());G(this,"options",this.setOptions);G(this,"parse",this.parseMarkdown(!0));G(this,"parseInline",this.parseMarkdown(!1));G(this,"Parser",dn);G(this,"Renderer",tc);G(this,"TextRenderer",up);G(this,"Lexer",fn);G(this,"Tokenizer",ec);G(this,"Hooks",Ts);this.use(...e)}walkTokens(e,t){var a,i;let n=[];for(let l of e)switch(n=n.concat(t.call(this,l)),l.type){case"table":{let r=l;for(let s of r.header)n=n.concat(this.walkTokens(s.tokens,t));for(let s of r.rows)for(let o of s)n=n.concat(this.walkTokens(o.tokens,t));break}case"list":{let r=l;n=n.concat(this.walkTokens(r.items,t));break}default:{let r=l;(i=(a=this.defaults.extensions)==null?void 0:a.childTokens)!=null&&i[r.type]?this.defaults.extensions.childTokens[r.type].forEach(s=>{let o=r[s].flat(1/0);n=n.concat(this.walkTokens(o,t))}):r.tokens&&(n=n.concat(this.walkTokens(r.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let a=T({},n);if(a.async=this.defaults.async||a.async||!1,n.extensions&&(n.extensions.forEach(i=>{if(!i.name)throw new Error("extension name required");if("renderer"in i){let l=t.renderers[i.name];l?t.renderers[i.name]=function(...r){let s=i.renderer.apply(this,r);return s===!1&&(s=l.apply(this,r)),s}:t.renderers[i.name]=i.renderer}if("tokenizer"in i){if(!i.level||i.level!=="block"&&i.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let l=t[i.level];l?l.unshift(i.tokenizer):t[i.level]=[i.tokenizer],i.start&&(i.level==="block"?t.startBlock?t.startBlock.push(i.start):t.startBlock=[i.start]:i.level==="inline"&&(t.startInline?t.startInline.push(i.start):t.startInline=[i.start]))}"childTokens"in i&&i.childTokens&&(t.childTokens[i.name]=i.childTokens)}),a.extensions=t),n.renderer){let i=this.defaults.renderer||new tc(this.defaults);for(let l in n.renderer){if(!(l in i))throw new Error("renderer '".concat(l,"' does not exist"));if(["options","parser"].includes(l))continue;let r=l,s=n.renderer[r],o=i[r];i[r]=(...u)=>{let c=s.apply(i,u);return c===!1&&(c=o.apply(i,u)),c||""}}a.renderer=i}if(n.tokenizer){let i=this.defaults.tokenizer||new ec(this.defaults);for(let l in n.tokenizer){if(!(l in i))throw new Error("tokenizer '".concat(l,"' does not exist"));if(["options","rules","lexer"].includes(l))continue;let r=l,s=n.tokenizer[r],o=i[r];i[r]=(...u)=>{let c=s.apply(i,u);return c===!1&&(c=o.apply(i,u)),c}}a.tokenizer=i}if(n.hooks){let i=this.defaults.hooks||new Ts;for(let l in n.hooks){if(!(l in i))throw new Error("hook '".concat(l,"' does not exist"));if(["options","block"].includes(l))continue;let r=l,s=n.hooks[r],o=i[r];Ts.passThroughHooks.has(l)?i[r]=u=>{if(this.defaults.async&&Ts.passThroughHooksRespectAsync.has(l))return(async()=>{let f=await s.call(i,u);return o.call(i,f)})();let c=s.call(i,u);return o.call(i,c)}:i[r]=(...u)=>{if(this.defaults.async)return(async()=>{let f=await s.apply(i,u);return f===!1&&(f=await o.apply(i,u)),f})();let c=s.apply(i,u);return c===!1&&(c=o.apply(i,u)),c}}a.hooks=i}if(n.walkTokens){let i=this.defaults.walkTokens,l=n.walkTokens;a.walkTokens=function(r){let s=[];return s.push(l.call(this,r)),i&&(s=s.concat(i.call(this,r))),s}}this.defaults=T(T({},this.defaults),a)}),this}setOptions(e){return this.defaults=T(T({},this.defaults),e),this}lexer(e,t){return fn.lex(e,t!=null?t:this.defaults)}parser(e,t){return dn.parse(e,t!=null?t:this.defaults)}parseMarkdown(e){return(t,n)=>{let a=T({},n),i=T(T({},this.defaults),a),l=this.onError(!!i.silent,!!i.async);if(this.defaults.async===!0&&a.async===!1)return l(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof t>"u"||t===null)return l(new Error("marked(): input parameter is undefined or null"));if(typeof t!="string")return l(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(t)+", string expected"));if(i.hooks&&(i.hooks.options=i,i.hooks.block=e),i.async)return(async()=>{let r=i.hooks?await i.hooks.preprocess(t):t,s=await(i.hooks?await i.hooks.provideLexer(e):e?fn.lex:fn.lexInline)(r,i),o=i.hooks?await i.hooks.processAllTokens(s):s;i.walkTokens&&await Promise.all(this.walkTokens(o,i.walkTokens));let u=await(i.hooks?await i.hooks.provideParser(e):e?dn.parse:dn.parseInline)(o,i);return i.hooks?await i.hooks.postprocess(u):u})().catch(l);try{i.hooks&&(t=i.hooks.preprocess(t));let r=(i.hooks?i.hooks.provideLexer(e):e?fn.lex:fn.lexInline)(t,i);i.hooks&&(r=i.hooks.processAllTokens(r)),i.walkTokens&&this.walkTokens(r,i.walkTokens);let s=(i.hooks?i.hooks.provideParser(e):e?dn.parse:dn.parseInline)(r,i);return i.hooks&&(s=i.hooks.postprocess(s)),s}catch(r){return l(r)}}}onError(e,t){return n=>{if(n.message+="\nPlease report this to https://github.com/markedjs/marked.",e){let a="<p>An error occurred:</p><pre>"+Cn(n.message+"",!0)+"</pre>";return t?Promise.resolve(a):a}if(t)return Promise.reject(n);throw n}}},xi=new OR;function ue(e,t){return xi.parse(e,t)}ue.options=ue.setOptions=function(e){return xi.setOptions(e),ue.defaults=xi.defaults,JS(ue.defaults),ue};ue.getDefaults=tp;ue.defaults=Ei;ue.use=function(...e){return xi.use(...e),ue.defaults=xi.defaults,JS(ue.defaults),ue};ue.walkTokens=function(e,t){return xi.walkTokens(e,t)};ue.parseInline=xi.parseInline;ue.Parser=dn;ue.parser=dn.parse;ue.Renderer=tc;ue.TextRenderer=up;ue.Lexer=fn;ue.lexer=fn.lex;ue.Tokenizer=ec;ue.Hooks=Ts;ue.parse=ue;var o_=ue.options,u_=ue.setOptions,c_=ue.use,f_=ue.walkTokens,d_=ue.parseInline;var h_=dn.parse,p_=fn.lex;var r1=Z(ye()),s1=Z(Ue());ue.setOptions({pedantic:!1,gfm:!0});function ic({text:e,className:t}){let n=r1.default.useMemo(()=>{if(!e)return"";let a=ue.parse(e,{async:!1});return GS.sanitize(typeof a=="string"?a:"")},[e]);return(0,s1.jsx)("div",{className:t,dangerouslySetInnerHTML:{__html:n}})}var V=Z(Ue());function o1({initial:e,onNotifyRemove:t,onUpdated:n}){var Dn;let{t:a}=ct(),i=rt(),[l,r]=qa.default.useState(e),[s,o]=qa.default.useState(e),[u,c]=qa.default.useState(!1),[f,d]=qa.default.useState(!1),[p,v]=qa.default.useState(!1),[S,x]=qa.default.useState(!1),[h,m]=qa.default.useState(null),y="".concat(l.bid.toString(),"_tags"),b="".concat(bn(i.userR),"/b:").concat(l.slug),k=Y=>"".concat(bn(i.userR),"/t:").concat(Ui(Y)),_=Y=>{let Se=new Date(Y);return new Date(Se.getTime()+2).toISOString()},w="".concat(bn(i.userR),"?before=").concat(encodeURIComponent(_(new Date(l.time)))),B=i.dat.suggestTags===!0,{tagInputRef:U,suggestionState:M,closeSuggestions:ve,onTagsChange:X,onTagsKeyDown:D,onTagsSelect:C,onSuggestionHover:P,onSuggestionPick:re}=Zu({enabled:B,tags:s.tags,onTagsUpdate:Y=>{o(Se=>z(T({},Se),{tags:Y}))}});async function xe(Y){await lS(l.bid,Y?"star":"unstar");let Se=z(T({},l),{selected:Y});r(Se),o(fe=>z(T({},fe),{selected:Y})),n(Se)}async function gt(){await Vu(l.bid),t()}async function en(){await rS(l.bid);let Y=z(T({},l),{toread:!1});r(Y),n(Y)}function Va(Y){o(l),d(Y),m(null),x(!1),ve(),Y&&Is(y)}async function $e(){v(!0);try{let Y=await $u(s);Y!=null&&o(Se=>z(T({},Se),{title:Y}))}finally{v(!1)}}async function tn(){x(!0),await sS(l.bid)}let hn=async Y=>{Y.preventDefault(),m(null);let Se=z(T({},s),{tags:Ps(s.tags)}),fe=await Xu(Se);fe.ok&&fe.status>=200&&fe.status<300?(r(Se),d(!1),n(Se)):m(fe.bodyText)},ge=S||s.private||l.url!==s.url;return(0,V.jsxs)("div",{id:String(l.bid),className:"bookmark w-100 mw7 pa1 mb3".concat(l.private?" private":""),children:[i.dat.isowner?(0,V.jsx)("div",{className:"star fl pointer".concat(l.selected?" selected":""),children:(0,V.jsx)("button",{className:"thm-text-border",onClick:()=>{xe(!l.selected)},type:"button",children:"\u272D"})}):null,f?(0,V.jsxs)("div",{className:"edit_bookmark_form pa2 pt0 thm-bg-surface",children:[h?(0,V.jsx)("div",{className:"alert alert-err",children:h}):null,(0,V.jsxs)("form",{onSubmit:Y=>{hn(Y)},children:[(0,V.jsx)("div",{children:a("bmark.url")}),(0,V.jsx)("input",{type:"url",className:"url w-100 mb2 pt1 edit_form_input",required:!0,name:"url",value:s.url,onChange:Y=>{o(Se=>z(T({},Se),{url:Y.target.value}))}}),(0,V.jsx)("div",{children:a("bmark.title")}),(0,V.jsxs)("div",{className:"flex",children:[(0,V.jsx)("input",{type:"text",className:"title w-100 mb2 pt1 edit_form_input",name:"title",value:s.title,onChange:Y=>{o(Se=>z(T({},Se),{title:Y.target.value}))}}),(0,V.jsx)("button",{disabled:p,type:"button",onClick:()=>{$e()},className:"ml1 pa1 mb2 thm-text-primary ba thm-border-default thm-bg-secondary pointer rdim f7".concat(p?" thm-bg-disabled":""),children:a("fetch")})]}),(0,V.jsx)("div",{children:a("bmark.description")}),(0,V.jsx)("textarea",{className:"description w-100 mb1 pt1 edit_form_input",name:"description",rows:5,value:s.description,onChange:Y=>{o(Se=>z(T({},Se),{description:Y.target.value}))}}),(0,V.jsxs)("div",{id:"tags_input_box",children:[(0,V.jsx)("div",{children:a("bmark.tags")}),(0,V.jsxs)("div",{className:"relative",children:[(0,V.jsx)("input",{id:y,ref:U,type:"text",className:"tags w-100 mb1 pt1 edit_form_input",name:"tags",autoComplete:"off",autoCapitalize:"off",value:s.tags,onChange:X,onKeyDown:D,onClick:C,onSelect:C,onBlur:()=>{window.setTimeout(()=>{ve()},0)}}),M!=null?(0,V.jsx)(Ku,{suggestionState:M,onHover:P,onPick:re}):null]})]}),(0,V.jsxs)("div",{className:"edit_form_checkboxes mv3",children:[(0,V.jsx)("input",{type:"checkbox",className:"private pointer",id:"edit_private",name:"private",checked:s.private,onChange:Y=>{o(Se=>z(T({},Se),{private:Y.target.checked}))}})," ",(0,V.jsx)("label",{htmlFor:"edit_private",className:"mr2",children:a("bmark.private")})," ",(0,V.jsx)("input",{type:"checkbox",className:"toread pointer",id:"edit_toread",name:"toread",checked:s.toread,onChange:Y=>{o(Se=>z(T({},Se),{toread:Y.target.checked}))}})," ",(0,V.jsx)("label",{htmlFor:"edit_toread",children:a("bmark.toread")})]}),(0,V.jsxs)("div",{className:"flex justify-between items-center",children:[(0,V.jsxs)("div",{children:[(0,V.jsx)("input",{type:"submit",className:"mr1 pv1 ph2 thm-text-primary ba thm-border-default thm-bg-secondary pointer rdim",value:a("save")})," ",(0,V.jsx)("input",{type:"reset",className:"pv1 ph2 thm-text-primary ba thm-border-default thm-bg-secondary pointer rdim",value:a("cancel"),onClick:()=>{Va(!1)}})]}),i.dat.archiveBackendEnabled?(0,V.jsx)("button",{type:"button",disabled:ge,onClick:()=>{tn()},className:"pv1 ph2 thm-text-primary ba thm-border-default thm-bg-secondary".concat(S?" thm-bg-disabled":"").concat(ge?" not-allowed o-20":""),children:a(S?"archiving":"archive")}):null]})]})]}):(0,V.jsxs)("div",{className:"display",children:[(0,V.jsx)("a",{href:l.url,target:"_blank",rel:"noreferrer",className:"link f5 lh-title".concat(l.toread?" unread":""),children:l.title===""?a("noTitle"):l.title}),(0,V.jsx)("br",{}),(0,V.jsx)("a",{href:l.url,className:"link f7 thm-text-tertiary thm-hover-link-color",children:l.url}),l.archiveUrl?(0,V.jsx)("a",{href:l.archiveUrl,className:"link f7 thm-text-tertiary thm-hover-link-color ml2 thm-text-success",target:"_blank",rel:"noreferrer",title:a("bmark.archiveLinkTitle"),children:"\u2611"}):null,(0,V.jsx)("br",{}),(0,V.jsx)("div",{className:"description mt1 thm-text-secondary",children:(0,V.jsx)(ic,{text:l.description})}),(0,V.jsx)("div",{className:"tags",children:l.tags!==""?l.tags.split(" ").map(Y=>(0,V.jsx)("a",{className:"link tag mr1".concat(Y.slice(0,1)==="."?" private":""),href:k(Y),children:Y},Y)):null}),(0,V.jsxs)("div",{children:[(0,V.jsx)("a",{className:"link f7 di mr5 thm-text-tertiary",href:b,"data-time":l.time,title:sa(i.lang,l.time),children:$m(i.lang,l.time)}),i.dat.isowner?(0,V.jsxs)("div",{className:"edit_links di",children:[(0,V.jsxs)("button",{type:"button",onClick:()=>{Va(!0)},className:"edit thm-text-muted thm-hover-link-color",children:[a("edit"),"\xA0\xA0"]}),(0,V.jsxs)("div",{className:"delete_link di",children:[(0,V.jsx)("button",{type:"button",onClick:()=>{c(!0)},className:"delete thm-text-muted thm-hover-link-color".concat(u?" dn":""),children:a("delete")}),(0,V.jsxs)("span",{className:"confirm thm-text-error".concat(u?"":" dn"),children:[(0,V.jsxs)("button",{type:"button",onClick:()=>{c(!1)},children:[a("cancel"),"\xA0/\xA0"]}),(0,V.jsx)("button",{type:"button",onClick:()=>{gt()},className:"thm-text-error",children:a("destroy")})]})]})]}):null,i.dat.isowner&&l.toread?(0,V.jsxs)("div",{className:"read di",children:["\xA0\xA0",(0,V.jsx)("button",{onClick:()=>{en()},className:"mark_read",type:"button",children:a("bmark.markAsRead")})]}):null]}),((Dn=i.dat.filter)==null?void 0:Dn.tag)=="FilterSingle"?(0,V.jsx)("div",{className:"mt2",children:(0,V.jsx)("a",{className:"link f7 di mr5",href:w,children:a("bmark.viewInContext")})}):null]})]})}var fp=Z(Ue());function u1({initial:e}){let[t,n]=cp.default.useState(!1),a=gs(o=>o.bmarks),i=gs(o=>o.setAll),l=gs(o=>o.removeById),r=gs(o=>o.upsert);return cp.default.useLayoutEffect(()=>{i(e),n(!0)},[e,i]),(0,fp.jsx)("div",{children:(t?a:e).map(o=>(0,fp.jsx)(o1,{initial:o,onNotifyRemove:()=>{l(o.bid)},onUpdated:u=>{r(u)}},o.bid))})}var dp=Z(ye());var Rt=Z(Ue());function wR(e){let t=e.split("\n");return(0,Rt.jsxs)(Rt.Fragment,{children:[t[0],t.slice(1).map((n,a)=>(0,Rt.jsxs)(dp.default.Fragment,{children:[(0,Rt.jsx)("br",{}),n]},a))]})}function c1({initial:e}){let{t}=ct(),n=rt(),a=i=>"".concat(bn(n.userR),"/notes/").concat(i);return(0,Rt.jsx)("div",{children:e.map(i=>{let l=dp.default.useMemo(()=>Mi(n.lang,i.created),[n.lang,i.created]);return(0,Rt.jsx)("div",{id:String(i.id),className:"note w-100 mw7 pa1 mb2".concat(i.shared?"":" private"),children:(0,Rt.jsxs)("div",{className:"display",children:[(0,Rt.jsx)("a",{href:a(i.slug),className:"link f5 lh-title",children:i.title===""?t("noTitle"):i.title}),(0,Rt.jsx)("br",{}),(0,Rt.jsx)("div",{className:"description mt1 thm-text-secondary",children:wR(i.text.slice(0,200))}),(0,Rt.jsx)("a",{className:"link f7 dib thm-text-tertiary w4","data-created":i.created,title:sa(n.lang,i.created),href:a(i.slug),children:l})]})},i.id)})})}var Ya=Z(ye());var K=Z(Ue());function NR(e){let t=e.split("\n");return(0,K.jsxs)(K.Fragment,{children:[t[0],t.slice(1).map((n,a)=>(0,K.jsxs)(Ya.default.Fragment,{children:[(0,K.jsx)("br",{}),n]},a))]})}function f1({initial:e}){let{t}=ct(),n=rt(),[a,i]=Ya.default.useState(e),[l,r]=Ya.default.useState(e),[s,o]=Ya.default.useState(!1),[u,c]=Ya.default.useState(e.id<=0),[f,d]=Ya.default.useState(!1),[p,v]=Ya.default.useState(null),S=Mi(n.lang,a.created),x="".concat(a.id.toString(),"_text");function h(b){r(a),c(b);let k=er(),_=tr(k,"next");!b&&_==="closeWindow"?Li(window):b&&Is(x)}async function m(){await dS(a.id),d(!0)}let y=async b=>{b.preventDefault(),v(null);let k=await oS(l);if(k.ok&&k.status>=200&&k.status<300){let _=er(),w=tr(_,"next"),B=document.referrer,U=window.location.origin;w==="closeWindow"?Li(window):w==="back"?B.startsWith(U)?window.location.href=B:window.location.href=U:l.id===0?window.location.href=bn(n.noteR):(i(l),c(!1))}else v(k.bodyText),console.log(k.bodyText)};return f?(0,K.jsx)("p",{className:"thm-text-error",children:t("note.killed")}):(0,K.jsx)("div",{id:String(a.id),className:"note w-100 mw7 pa1 mb2",children:u?(0,K.jsxs)("form",{onSubmit:b=>{y(b)},children:[p?(0,K.jsx)("div",{className:"alert alert-err",children:p}):null,(0,K.jsx)("p",{className:"mt2 mb1",children:t("note.titleLabel")}),(0,K.jsx)("input",{type:"text",className:"title w-100 mb1 pt1 edit_form_input",name:"title",value:l.title,onChange:b=>{r(k=>z(T({},k),{title:b.target.value}))},autoFocus:l.title===""}),(0,K.jsx)("br",{}),(0,K.jsx)("p",{className:"mt2 mb1",children:t("note.descriptionLabel")}),(0,K.jsx)("textarea",{id:x,className:"description w-100 mb1 pt1 edit_form_input",name:"text",rows:25,value:l.text,onChange:b=>{r(k=>z(T({},k),{text:b.target.value}))}}),(0,K.jsxs)("div",{className:"edit_form_checkboxes mb3",children:[(0,K.jsx)("input",{type:"checkbox",className:"is-markdown pointer",id:"edit_ismarkdown",name:"ismarkdown",checked:l.isMarkdown,onChange:b=>{r(k=>z(T({},k),{isMarkdown:b.target.checked}))}})," ",(0,K.jsx)("label",{htmlFor:"edit_ismarkdown",className:"mr2",children:t("note.useMarkdown")}),(0,K.jsx)("br",{})]}),(0,K.jsxs)("div",{className:"edit_form_checkboxes mb3",children:[(0,K.jsx)("input",{type:"checkbox",className:"is-markdown pointer",id:"edit_shared",name:"shared",checked:l.shared,onChange:b=>{r(k=>z(T({},k),{shared:b.target.checked}))}})," ",(0,K.jsx)("label",{htmlFor:"edit_shared",className:"mr2",children:t("note.publicLabel")}),(0,K.jsx)("br",{})]}),(0,K.jsx)("input",{type:"submit",className:"mr1 pv1 ph2 thm-text-primary ba thm-border-default thm-bg-secondary pointer rdim",value:t("save")})," ",(0,K.jsx)("input",{type:"reset",className:"pv1 ph2 thm-text-primary ba thm-border-default thm-bg-secondary pointer rdim",value:t("cancel"),onClick:()=>{h(!1)}})]}):(0,K.jsxs)(K.Fragment,{children:[(0,K.jsxs)("div",{className:"display",children:[(0,K.jsx)("div",{className:"link f5 lh-title",children:a.title===""?t("noTitle"):a.title}),(0,K.jsx)("br",{}),a.isMarkdown?(0,K.jsx)("div",{className:"description mt1",children:(0,K.jsx)(ic,{text:a.text})}):(0,K.jsx)("div",{className:"description mt1 thm-text-secondary",children:NR(a.text)}),(0,K.jsxs)("div",{className:"link f7 mt2 dib thm-text-tertiary w4",children:[(0,K.jsx)("span",{"data-created":a.created,title:sa(n.lang,a.created),children:S})," - ",(0,K.jsx)("span",{className:"thm-text-tertiary",children:a.shared?t("filter.public"):t("filter.private")})]})]}),n.dat.isowner?(0,K.jsxs)("div",{className:"edit_links db mt3",children:[(0,K.jsxs)("button",{type:"button",onClick:()=>{h(!0)},className:"edit thm-text-muted thm-hover-link-color",children:[t("edit"),"\xA0\xA0"]}),(0,K.jsxs)("div",{className:"delete_link di",children:[(0,K.jsx)("button",{type:"button",onClick:()=>{o(!0)},className:"delete thm-text-muted thm-hover-link-color".concat(s?" dn":""),children:t("delete")}),(0,K.jsxs)("span",{className:"confirm thm-text-error".concat(s?"":" dn"),children:[(0,K.jsxs)("button",{type:"button",onClick:()=>{o(!1)},children:[t("cancel"),"\xA0/\xA0"]}),(0,K.jsx)("button",{type:"button",onClick:()=>{m()},className:"thm-text-error",children:t("destroy")})]})]})]}):null]})})}var lc=Z(ye());var Es=Fu(e=>({mode:{kind:"none"},tagcloud:{},setMode:t=>{e({mode:t})},setTagCloud:t=>{e({tagcloud:t})}}));function d1(e){switch(e.mode){case"top":{let t=typeof e.value=="number"?e.value:Number(e.value);return Number.isFinite(t)?{kind:"top",expanded:e.expanded,value:t}:{kind:"none"}}case"lowerBound":{let t=typeof e.value=="number"?e.value:Number(e.value);return Number.isFinite(t)?{kind:"lowerBound",expanded:e.expanded,value:t}:{kind:"none"}}case"related":{let t=typeof e.value=="string"?e.value:"",n=t?t.split(" "):[];return{kind:"related",expanded:e.expanded,value:n}}default:return{kind:"none"}}}function hp(e){switch(e.kind){case"top":return{mode:"top",value:e.value,expanded:e.expanded};case"lowerBound":return{mode:"lowerBound",value:e.value,expanded:e.expanded};case"related":return{mode:"related",value:e.value.join(" "),expanded:e.expanded};case"none":return{mode:"none",value:"",expanded:!1}}}function Wt(e){return e.kind==="none"?!1:e.expanded}function h1(e){return e.kind==="related"}function pp(e,t){return e.kind==="none"?e:z(T({},e),{expanded:t})}var He=Z(Ue());function g1({initialMode:e}){let{t}=ct(),n=Es(h=>h.mode),a=Es(h=>h.tagcloud),i=Es(h=>h.setMode),l=Es(h=>h.setTagCloud);if(lc.default.useEffect(()=>{i(e)},[e]),lc.default.useEffect(()=>{async function h(m){if(m.kind==="none")return;let y=await uS(hp(m));l(y!=null?y:{})}h(n)},[n,l]),n.kind==="none")return(0,He.jsx)("div",{className:"tag_cloud"});let r={kind:"top",expanded:Wt(n),value:200},s={kind:"lowerBound",expanded:Wt(n),value:1},o={kind:"lowerBound",expanded:Wt(n),value:2},u={kind:"lowerBound",expanded:Wt(n),value:5},c={kind:"lowerBound",expanded:Wt(n),value:10},f={kind:"lowerBound",expanded:Wt(n),value:20},d=Object.values(a),p=d.length?Math.min(...d):1,v=d.length?Math.max(...d):1;async function S(h){let m=pp(n,h);i(m),await cS(hp(m))}async function x(h){JSON.stringify(n)===JSON.stringify(h)?await S(!Wt(n)):i(pp(h,!0))}return(0,He.jsxs)("div",{className:"tag_cloud mv3",children:[(0,He.jsxs)("div",{className:"tag_cloud_header mb2",children:[h1(n)?(0,He.jsx)("button",{type:"button",className:"pa1 f7 link thm-hover-link-color mr1 b",onClick:()=>{S(!Wt(n))},children:t("tagCloud.relatedTags")}):(0,He.jsxs)(He.Fragment,{children:[(0,He.jsx)("button",{type:"button",className:"pa1 f7 link thm-hover-link-color mr1".concat(JSON.stringify(n)===JSON.stringify(r)?" b":""),title:t("tagCloud.topTagsTitle"),onClick:()=>{x(r)},children:t("tagCloud.topTags")}),(0,He.jsx)("button",{type:"button",className:"pa1 f7 link thm-hover-link-color ml2 ".concat(JSON.stringify(n)===JSON.stringify(s)?" b":""),title:t("tagCloud.allTitle"),onClick:()=>{x(s)},children:t("filter.all")}),"\u2027",(0,He.jsx)("button",{type:"button",className:"pa1 f7 link thm-hover-link-color".concat(JSON.stringify(n)===JSON.stringify(o)?" b":""),title:t("tagCloud.min2Title"),onClick:()=>{x(o)},children:"2"}),"\u2027",(0,He.jsx)("button",{type:"button",className:"pa1 f7 link thm-hover-link-color".concat(JSON.stringify(n)===JSON.stringify(u)?" b":""),title:t("tagCloud.min5Title"),onClick:()=>{x(u)},children:"5"}),"\u2027",(0,He.jsx)("button",{type:"button",className:"pa1 f7 link thm-hover-link-color".concat(JSON.stringify(n)===JSON.stringify(c)?" b":""),title:t("tagCloud.min10Title"),onClick:()=>{x(c)},children:"10"}),"\u2027",(0,He.jsx)("button",{type:"button",className:"pa1 f7 link thm-hover-link-color".concat(JSON.stringify(n)===JSON.stringify(f)?" b":""),title:t("tagCloud.min20Title"),onClick:()=>{x(f)},children:"20"})]}),(0,He.jsx)("button",{type:"button",className:"pa1 ml2 f7 link thm-text-faded thm-hover-link-color",onClick:()=>{S(!Wt(n))},children:Wt(n)?t("tagCloud.hide"):t("tagCloud.show")})]}),Wt(n)?(0,He.jsx)("div",{className:"tag_cloud_body",children:n.kind==="related"?p1(n.value,p,v,a):p1([],p,v,a)}):null]})}function p1(e,t,n,a){let i=rt(),l=e.map(u=>u.toLowerCase()),r=Object.entries(a).sort((u,c)=>u[0].toLowerCase().localeCompare(c[0].toLowerCase())),s=u=>"".concat(bn(i.userR)).concat(u===""?"":"/t:".concat(u)),o=[];for(let[u,c]of r){let f=u.toLowerCase(),d=m1(x=>x,c,t,n,100,150),p=m1(x=>Math.log(1+x),c,t,n,.6,1),v={fontSize:"".concat(d.toString(),"%"),opacity:p},S=l.length===0?null:l.includes(f)?(0,He.jsx)("a",{href:s(l.filter(x=>x!==f).map(Ui).join("+")),className:"link mr2 tag-exclude",children:"\u2296"}):(0,He.jsx)("a",{href:s(l.concat([f]).map(Ui).join("+")),className:"link mr2 tag-include",children:"\u2295"});o.push((0,He.jsx)("a",{href:s(Ui(u)),className:"link tag mr1",style:v,children:u},"".concat(u,"-tag"))),S&&o.push((0,He.jsx)(lc.default.Fragment,{children:S},"".concat(u,"-ie")))}return o}function m1(e,t,n,a,i,l){let r=e(a-n);return(a-n<.01||r===0?1:e(t-n)/r)*(l-i)+i}var Ga=Z(Ue());function b1(e){return document.querySelector(e)}function _R(){let e=document.querySelector("#content");e&&e.setAttribute("view-rendered","")}function CR({children:e}){return(0,y1.useLayoutEffect)(()=>{_R()},[]),e}function As(e,t){let n=b1(e);n&&(0,mp.createRoot)(n).render((0,Ga.jsx)(CR,{children:t}))}var pC=e=>()=>{e.preventDefault(),hS()},mC=e=>t=>()=>{As(e,(0,Ga.jsx)(u1,{initial:t}))},gC=e=>t=>()=>{let n=b1(e);n&&(0,mp.createRoot)(n).render((0,Ga.jsx)(g1,{initialMode:d1(t)}))},yC=e=>t=>()=>{As(e,(0,Ga.jsx)(xS,{initial:t}))},bC=e=>t=>()=>{As(e,(0,Ga.jsx)(c1,{initial:t}))},vC=e=>t=>()=>{As(e,(0,Ga.jsx)(f1,{initial:t}))},SC=e=>t=>()=>{As(e,(0,Ga.jsx)(bS,{initial:t}))};function TC(){function e(r){return r==="light"||r==="dark"}function t(){let r=document.documentElement.dataset.colorScheme;return r==="light"||r==="dark"?r:window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}function n(r){document.documentElement.dataset.colorScheme=r}let a="espial-color-scheme",i=window.localStorage.getItem(a);e(i)&&n(i);let l=document.querySelector("#color-scheme-toggle");l&&l.addEventListener("click",r=>{r.preventDefault();let s=t()==="dark"?"light":"dark";n(s),window.localStorage.setItem(a,s)})}export{TC as initColorSchemeToggle,pC as logoutE,SC as renderAccountSettings,yC as renderAddForm,mC as renderBookmarks,vC as renderNote,bC as renderNotes,gC as renderTagCloud};-/*! Bundled license information:--react/cjs/react.production.js:- (**- * @license React- * react.production.js- *- * Copyright (c) Meta Platforms, Inc. and affiliates.- *- * This source code is licensed under the MIT license found in the- * LICENSE file in the root directory of this source tree.- *)--use-sync-external-store/cjs/use-sync-external-store-shim.production.js:- (**- * @license React- * use-sync-external-store-shim.production.js- *- * Copyright (c) Meta Platforms, Inc. and affiliates.- *- * This source code is licensed under the MIT license found in the- * LICENSE file in the root directory of this source tree.- *)--scheduler/cjs/scheduler.production.js:- (**- * @license React- * scheduler.production.js- *- * Copyright (c) Meta Platforms, Inc. and affiliates.- *- * This source code is licensed under the MIT license found in the- * LICENSE file in the root directory of this source tree.- *)--react-dom/cjs/react-dom.production.js:- (**- * @license React- * react-dom.production.js- *- * Copyright (c) Meta Platforms, Inc. and affiliates.- *- * This source code is licensed under the MIT license found in the- * LICENSE file in the root directory of this source tree.- *)--react-dom/cjs/react-dom-client.production.js:- (**- * @license React- * react-dom-client.production.js- *- * Copyright (c) Meta Platforms, Inc. and affiliates.- *- * This source code is licensed under the MIT license found in the- * LICENSE file in the root directory of this source tree.- *)--react/cjs/react-jsx-runtime.production.js:- (**- * @license React- * react-jsx-runtime.production.js- *- * Copyright (c) Meta Platforms, Inc. and affiliates.- *- * This source code is licensed under the MIT license found in the- * LICENSE file in the root directory of this source tree.- *)--ky/distribution/index.js:- (*! MIT License © Sindre Sorhus *)--dompurify/dist/purify.es.mjs:- (*! @license DOMPurify 3.4.7 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.4.7/LICENSE *)-*/-//# sourceMappingURL=app-MD5JJQMB.min.js.map
− static/js/app-MD5JJQMB.min.js.gz
binary file changed (127000 → absent bytes)
− static/js/app-MD5JJQMB.min.js.map
@@ -1,7 +0,0 @@-{- "version": 3,- "sources": ["../node_modules/react/cjs/react.production.js", "../node_modules/react/index.js", "../node_modules/void-elements/index.js", "../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js", "../node_modules/use-sync-external-store/shim/index.js", "../node_modules/scheduler/cjs/scheduler.production.js", "../node_modules/scheduler/index.js", "../node_modules/react-dom/cjs/react-dom.production.js", "../node_modules/react-dom/index.js", "../node_modules/react-dom/cjs/react-dom-client.production.js", "../node_modules/react-dom/client.js", "../node_modules/react/cjs/react-jsx-runtime.production.js", "../node_modules/react/jsx-runtime.js", "../node_modules/i18next/dist/esm/i18next.js", "../node_modules/@babel/runtime/helpers/esm/classCallCheck.js", "../node_modules/@babel/runtime/helpers/esm/typeof.js", "../node_modules/@babel/runtime/helpers/esm/toPrimitive.js", "../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js", "../node_modules/@babel/runtime/helpers/esm/createClass.js", "../node_modules/i18next-chained-backend/dist/esm/index.js", "../node_modules/i18next-http-backend/esm/index.js", "../node_modules/@babel/runtime/helpers/esm/defineProperty.js", "../node_modules/i18next-localstorage-backend/dist/esm/i18nextLocalStorageBackend.js", "../node_modules/react-i18next/dist/es/Trans.js", "../node_modules/react-i18next/dist/es/TransWithoutContext.js", "../node_modules/react-i18next/dist/es/utils.js", "../node_modules/react-i18next/dist/es/unescape.js", "../node_modules/react-i18next/dist/es/defaults.js", "../node_modules/react-i18next/dist/es/i18nInstance.js", "../node_modules/react-i18next/dist/es/context.js", "../node_modules/react-i18next/dist/es/initReactI18next.js", "../node_modules/react-i18next/dist/es/IcuTrans.js", "../node_modules/react-i18next/dist/es/IcuTransWithoutContext.js", "../node_modules/react-i18next/dist/es/IcuTransUtils/TranslationParserError.js", "../node_modules/react-i18next/dist/es/IcuTransUtils/htmlEntityDecoder.js", "../node_modules/react-i18next/dist/es/IcuTransUtils/tokenizer.js", "../node_modules/react-i18next/dist/es/IcuTransUtils/renderTranslation.js", "../node_modules/react-i18next/dist/es/useTranslation.js", "../node_modules/react-i18next/dist/es/withTranslation.js", "../node_modules/react-i18next/dist/es/I18nextProvider.js", "../node_modules/react-i18next/dist/es/withSSR.js", "../node_modules/react-i18next/dist/es/useSSR.js", "../../static/locales/en/translation.json", "../src/globals.ts", "../src/util.ts", "../src/i18n.ts", "../src/index.tsx", "../node_modules/ky/source/errors/KyError.ts", "../node_modules/ky/source/errors/HTTPError.ts", "../node_modules/ky/source/errors/NetworkError.ts", "../node_modules/ky/source/errors/NonError.ts", "../node_modules/ky/source/errors/ForceRetryError.ts", "../node_modules/ky/source/errors/SchemaValidationError.ts", "../node_modules/ky/source/errors/TimeoutError.ts", "../node_modules/ky/source/core/constants.ts", "../node_modules/ky/source/utils/body.ts", "../node_modules/ky/source/utils/is.ts", "../node_modules/ky/source/utils/merge.ts", "../node_modules/ky/source/utils/normalize.ts", "../node_modules/ky/source/utils/timeout.ts", "../node_modules/ky/source/utils/delay.ts", "../node_modules/ky/source/utils/options.ts", "../node_modules/ky/source/utils/is-network-error.ts", "../node_modules/ky/source/utils/type-guards.ts", "../node_modules/ky/source/core/Ky.ts", "../node_modules/ky/source/index.ts", "../src/api.ts", "../src/components/AccountSettings.tsx", "../src/components/AddForm.tsx", "../src/hooks/useTagSuggestions.ts", "../src/components/TagSuggestionsDropdown.tsx", "../src/components/BList.tsx", "../node_modules/zustand/esm/vanilla.mjs", "../node_modules/zustand/esm/react.mjs", "../src/stores/bookmarksStore.ts", "../src/components/BMark.tsx", "../node_modules/dompurify/src/utils.ts", "../node_modules/dompurify/src/tags.ts", "../node_modules/dompurify/src/attrs.ts", "../node_modules/dompurify/src/regexp.ts", "../node_modules/dompurify/src/purify.ts", "../node_modules/marked/src/defaults.ts", "../node_modules/marked/src/rules.ts", "../node_modules/marked/src/helpers.ts", "../node_modules/marked/src/Tokenizer.ts", "../node_modules/marked/src/Lexer.ts", "../node_modules/marked/src/Renderer.ts", "../node_modules/marked/src/TextRenderer.ts", "../node_modules/marked/src/Parser.ts", "../node_modules/marked/src/Hooks.ts", "../node_modules/marked/src/Instance.ts", "../node_modules/marked/src/marked.ts", "../src/components/Markdown.tsx", "../src/components/NList.tsx", "../src/components/NNote.tsx", "../src/components/TagCloud.tsx", "../src/stores/tagCloudStore.ts", "../src/types.ts"],- "sourcesContent": ["/**\n * @license React\n * react.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n maybeIterable =\n (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n maybeIterable[\"@@iterator\"];\n return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar ReactNoopUpdateQueue = {\n isMounted: function () {\n return !1;\n },\n enqueueForceUpdate: function () {},\n enqueueReplaceState: function () {},\n enqueueSetState: function () {}\n },\n assign = Object.assign,\n emptyObject = {};\nfunction Component(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n}\nComponent.prototype.isReactComponent = {};\nComponent.prototype.setState = function (partialState, callback) {\n if (\n \"object\" !== typeof partialState &&\n \"function\" !== typeof partialState &&\n null != partialState\n )\n throw Error(\n \"takes an object of state variables to update or a function which returns an object of state variables.\"\n );\n this.updater.enqueueSetState(this, partialState, callback, \"setState\");\n};\nComponent.prototype.forceUpdate = function (callback) {\n this.updater.enqueueForceUpdate(this, callback, \"forceUpdate\");\n};\nfunction ComponentDummy() {}\nComponentDummy.prototype = Component.prototype;\nfunction PureComponent(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n}\nvar pureComponentPrototype = (PureComponent.prototype = new ComponentDummy());\npureComponentPrototype.constructor = PureComponent;\nassign(pureComponentPrototype, Component.prototype);\npureComponentPrototype.isPureReactComponent = !0;\nvar isArrayImpl = Array.isArray;\nfunction noop() {}\nvar ReactSharedInternals = { H: null, A: null, T: null, S: null },\n hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction ReactElement(type, key, props) {\n var refProp = props.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== refProp ? refProp : null,\n props: props\n };\n}\nfunction cloneAndReplaceKey(oldElement, newKey) {\n return ReactElement(oldElement.type, newKey, oldElement.props);\n}\nfunction isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n}\nfunction escape(key) {\n var escaperLookup = { \"=\": \"=0\", \":\": \"=2\" };\n return (\n \"$\" +\n key.replace(/[=:]/g, function (match) {\n return escaperLookup[match];\n })\n );\n}\nvar userProvidedKeyEscapeRegex = /\\/+/g;\nfunction getElementKey(element, index) {\n return \"object\" === typeof element && null !== element && null != element.key\n ? escape(\"\" + element.key)\n : index.toString(36);\n}\nfunction resolveThenable(thenable) {\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n default:\n switch (\n (\"string\" === typeof thenable.status\n ? thenable.then(noop, noop)\n : ((thenable.status = \"pending\"),\n thenable.then(\n function (fulfilledValue) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"fulfilled\"),\n (thenable.value = fulfilledValue));\n },\n function (error) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"rejected\"), (thenable.reason = error));\n }\n )),\n thenable.status)\n ) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n }\n }\n throw thenable;\n}\nfunction mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {\n var type = typeof children;\n if (\"undefined\" === type || \"boolean\" === type) children = null;\n var invokeCallback = !1;\n if (null === children) invokeCallback = !0;\n else\n switch (type) {\n case \"bigint\":\n case \"string\":\n case \"number\":\n invokeCallback = !0;\n break;\n case \"object\":\n switch (children.$$typeof) {\n case REACT_ELEMENT_TYPE:\n case REACT_PORTAL_TYPE:\n invokeCallback = !0;\n break;\n case REACT_LAZY_TYPE:\n return (\n (invokeCallback = children._init),\n mapIntoArray(\n invokeCallback(children._payload),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n )\n );\n }\n }\n if (invokeCallback)\n return (\n (callback = callback(children)),\n (invokeCallback =\n \"\" === nameSoFar ? \".\" + getElementKey(children, 0) : nameSoFar),\n isArrayImpl(callback)\n ? ((escapedPrefix = \"\"),\n null != invokeCallback &&\n (escapedPrefix =\n invokeCallback.replace(userProvidedKeyEscapeRegex, \"$&/\") + \"/\"),\n mapIntoArray(callback, array, escapedPrefix, \"\", function (c) {\n return c;\n }))\n : null != callback &&\n (isValidElement(callback) &&\n (callback = cloneAndReplaceKey(\n callback,\n escapedPrefix +\n (null == callback.key ||\n (children && children.key === callback.key)\n ? \"\"\n : (\"\" + callback.key).replace(\n userProvidedKeyEscapeRegex,\n \"$&/\"\n ) + \"/\") +\n invokeCallback\n )),\n array.push(callback)),\n 1\n );\n invokeCallback = 0;\n var nextNamePrefix = \"\" === nameSoFar ? \".\" : nameSoFar + \":\";\n if (isArrayImpl(children))\n for (var i = 0; i < children.length; i++)\n (nameSoFar = children[i]),\n (type = nextNamePrefix + getElementKey(nameSoFar, i)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (((i = getIteratorFn(children)), \"function\" === typeof i))\n for (\n children = i.call(children), i = 0;\n !(nameSoFar = children.next()).done;\n\n )\n (nameSoFar = nameSoFar.value),\n (type = nextNamePrefix + getElementKey(nameSoFar, i++)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (\"object\" === type) {\n if (\"function\" === typeof children.then)\n return mapIntoArray(\n resolveThenable(children),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n );\n array = String(children);\n throw Error(\n \"Objects are not valid as a React child (found: \" +\n (\"[object Object]\" === array\n ? \"object with keys {\" + Object.keys(children).join(\", \") + \"}\"\n : array) +\n \"). If you meant to render a collection of children, use an array instead.\"\n );\n }\n return invokeCallback;\n}\nfunction mapChildren(children, func, context) {\n if (null == children) return children;\n var result = [],\n count = 0;\n mapIntoArray(children, result, \"\", \"\", function (child) {\n return func.call(context, child, count++);\n });\n return result;\n}\nfunction lazyInitializer(payload) {\n if (-1 === payload._status) {\n var ctor = payload._result;\n ctor = ctor();\n ctor.then(\n function (moduleObject) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 1), (payload._result = moduleObject);\n },\n function (error) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 2), (payload._result = error);\n }\n );\n -1 === payload._status && ((payload._status = 0), (payload._result = ctor));\n }\n if (1 === payload._status) return payload._result.default;\n throw payload._result;\n}\nvar reportGlobalError =\n \"function\" === typeof reportError\n ? reportError\n : function (error) {\n if (\n \"object\" === typeof window &&\n \"function\" === typeof window.ErrorEvent\n ) {\n var event = new window.ErrorEvent(\"error\", {\n bubbles: !0,\n cancelable: !0,\n message:\n \"object\" === typeof error &&\n null !== error &&\n \"string\" === typeof error.message\n ? String(error.message)\n : String(error),\n error: error\n });\n if (!window.dispatchEvent(event)) return;\n } else if (\n \"object\" === typeof process &&\n \"function\" === typeof process.emit\n ) {\n process.emit(\"uncaughtException\", error);\n return;\n }\n console.error(error);\n },\n Children = {\n map: mapChildren,\n forEach: function (children, forEachFunc, forEachContext) {\n mapChildren(\n children,\n function () {\n forEachFunc.apply(this, arguments);\n },\n forEachContext\n );\n },\n count: function (children) {\n var n = 0;\n mapChildren(children, function () {\n n++;\n });\n return n;\n },\n toArray: function (children) {\n return (\n mapChildren(children, function (child) {\n return child;\n }) || []\n );\n },\n only: function (children) {\n if (!isValidElement(children))\n throw Error(\n \"React.Children.only expected to receive a single React element child.\"\n );\n return children;\n }\n };\nexports.Activity = REACT_ACTIVITY_TYPE;\nexports.Children = Children;\nexports.Component = Component;\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.Profiler = REACT_PROFILER_TYPE;\nexports.PureComponent = PureComponent;\nexports.StrictMode = REACT_STRICT_MODE_TYPE;\nexports.Suspense = REACT_SUSPENSE_TYPE;\nexports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n ReactSharedInternals;\nexports.__COMPILER_RUNTIME = {\n __proto__: null,\n c: function (size) {\n return ReactSharedInternals.H.useMemoCache(size);\n }\n};\nexports.cache = function (fn) {\n return function () {\n return fn.apply(null, arguments);\n };\n};\nexports.cacheSignal = function () {\n return null;\n};\nexports.cloneElement = function (element, config, children) {\n if (null === element || void 0 === element)\n throw Error(\n \"The argument must be a React element, but you passed \" + element + \".\"\n );\n var props = assign({}, element.props),\n key = element.key;\n if (null != config)\n for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n !hasOwnProperty.call(config, propName) ||\n \"key\" === propName ||\n \"__self\" === propName ||\n \"__source\" === propName ||\n (\"ref\" === propName && void 0 === config.ref) ||\n (props[propName] = config[propName]);\n var propName = arguments.length - 2;\n if (1 === propName) props.children = children;\n else if (1 < propName) {\n for (var childArray = Array(propName), i = 0; i < propName; i++)\n childArray[i] = arguments[i + 2];\n props.children = childArray;\n }\n return ReactElement(element.type, key, props);\n};\nexports.createContext = function (defaultValue) {\n defaultValue = {\n $$typeof: REACT_CONTEXT_TYPE,\n _currentValue: defaultValue,\n _currentValue2: defaultValue,\n _threadCount: 0,\n Provider: null,\n Consumer: null\n };\n defaultValue.Provider = defaultValue;\n defaultValue.Consumer = {\n $$typeof: REACT_CONSUMER_TYPE,\n _context: defaultValue\n };\n return defaultValue;\n};\nexports.createElement = function (type, config, children) {\n var propName,\n props = {},\n key = null;\n if (null != config)\n for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n hasOwnProperty.call(config, propName) &&\n \"key\" !== propName &&\n \"__self\" !== propName &&\n \"__source\" !== propName &&\n (props[propName] = config[propName]);\n var childrenLength = arguments.length - 2;\n if (1 === childrenLength) props.children = children;\n else if (1 < childrenLength) {\n for (var childArray = Array(childrenLength), i = 0; i < childrenLength; i++)\n childArray[i] = arguments[i + 2];\n props.children = childArray;\n }\n if (type && type.defaultProps)\n for (propName in ((childrenLength = type.defaultProps), childrenLength))\n void 0 === props[propName] &&\n (props[propName] = childrenLength[propName]);\n return ReactElement(type, key, props);\n};\nexports.createRef = function () {\n return { current: null };\n};\nexports.forwardRef = function (render) {\n return { $$typeof: REACT_FORWARD_REF_TYPE, render: render };\n};\nexports.isValidElement = isValidElement;\nexports.lazy = function (ctor) {\n return {\n $$typeof: REACT_LAZY_TYPE,\n _payload: { _status: -1, _result: ctor },\n _init: lazyInitializer\n };\n};\nexports.memo = function (type, compare) {\n return {\n $$typeof: REACT_MEMO_TYPE,\n type: type,\n compare: void 0 === compare ? null : compare\n };\n};\nexports.startTransition = function (scope) {\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n ReactSharedInternals.T = currentTransition;\n try {\n var returnValue = scope(),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n \"object\" === typeof returnValue &&\n null !== returnValue &&\n \"function\" === typeof returnValue.then &&\n returnValue.then(noop, reportGlobalError);\n } catch (error) {\n reportGlobalError(error);\n } finally {\n null !== prevTransition &&\n null !== currentTransition.types &&\n (prevTransition.types = currentTransition.types),\n (ReactSharedInternals.T = prevTransition);\n }\n};\nexports.unstable_useCacheRefresh = function () {\n return ReactSharedInternals.H.useCacheRefresh();\n};\nexports.use = function (usable) {\n return ReactSharedInternals.H.use(usable);\n};\nexports.useActionState = function (action, initialState, permalink) {\n return ReactSharedInternals.H.useActionState(action, initialState, permalink);\n};\nexports.useCallback = function (callback, deps) {\n return ReactSharedInternals.H.useCallback(callback, deps);\n};\nexports.useContext = function (Context) {\n return ReactSharedInternals.H.useContext(Context);\n};\nexports.useDebugValue = function () {};\nexports.useDeferredValue = function (value, initialValue) {\n return ReactSharedInternals.H.useDeferredValue(value, initialValue);\n};\nexports.useEffect = function (create, deps) {\n return ReactSharedInternals.H.useEffect(create, deps);\n};\nexports.useEffectEvent = function (callback) {\n return ReactSharedInternals.H.useEffectEvent(callback);\n};\nexports.useId = function () {\n return ReactSharedInternals.H.useId();\n};\nexports.useImperativeHandle = function (ref, create, deps) {\n return ReactSharedInternals.H.useImperativeHandle(ref, create, deps);\n};\nexports.useInsertionEffect = function (create, deps) {\n return ReactSharedInternals.H.useInsertionEffect(create, deps);\n};\nexports.useLayoutEffect = function (create, deps) {\n return ReactSharedInternals.H.useLayoutEffect(create, deps);\n};\nexports.useMemo = function (create, deps) {\n return ReactSharedInternals.H.useMemo(create, deps);\n};\nexports.useOptimistic = function (passthrough, reducer) {\n return ReactSharedInternals.H.useOptimistic(passthrough, reducer);\n};\nexports.useReducer = function (reducer, initialArg, init) {\n return ReactSharedInternals.H.useReducer(reducer, initialArg, init);\n};\nexports.useRef = function (initialValue) {\n return ReactSharedInternals.H.useRef(initialValue);\n};\nexports.useState = function (initialState) {\n return ReactSharedInternals.H.useState(initialState);\n};\nexports.useSyncExternalStore = function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n) {\n return ReactSharedInternals.H.useSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n};\nexports.useTransition = function () {\n return ReactSharedInternals.H.useTransition();\n};\nexports.version = \"19.2.6\";\n", "'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n", "/**\n * This file automatically generated from `pre-publish.js`.\n * Do not manually edit.\n */\n\nmodule.exports = {\n \"area\": true,\n \"base\": true,\n \"br\": true,\n \"col\": true,\n \"embed\": true,\n \"hr\": true,\n \"img\": true,\n \"input\": true,\n \"link\": true,\n \"meta\": true,\n \"param\": true,\n \"source\": true,\n \"track\": true,\n \"wbr\": true\n};\n", "/**\n * @license React\n * use-sync-external-store-shim.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue;\nfunction useSyncExternalStore$2(subscribe, getSnapshot) {\n var value = getSnapshot(),\n _useState = useState({ inst: { value: value, getSnapshot: getSnapshot } }),\n inst = _useState[0].inst,\n forceUpdate = _useState[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n}\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n}\nfunction useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n}\nvar shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\nexports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n", "'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n", "/**\n * @license React\n * scheduler.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nfunction push(heap, node) {\n var index = heap.length;\n heap.push(node);\n a: for (; 0 < index; ) {\n var parentIndex = (index - 1) >>> 1,\n parent = heap[parentIndex];\n if (0 < compare(parent, node))\n (heap[parentIndex] = node), (heap[index] = parent), (index = parentIndex);\n else break a;\n }\n}\nfunction peek(heap) {\n return 0 === heap.length ? null : heap[0];\n}\nfunction pop(heap) {\n if (0 === heap.length) return null;\n var first = heap[0],\n last = heap.pop();\n if (last !== first) {\n heap[0] = last;\n a: for (\n var index = 0, length = heap.length, halfLength = length >>> 1;\n index < halfLength;\n\n ) {\n var leftIndex = 2 * (index + 1) - 1,\n left = heap[leftIndex],\n rightIndex = leftIndex + 1,\n right = heap[rightIndex];\n if (0 > compare(left, last))\n rightIndex < length && 0 > compare(right, left)\n ? ((heap[index] = right),\n (heap[rightIndex] = last),\n (index = rightIndex))\n : ((heap[index] = left),\n (heap[leftIndex] = last),\n (index = leftIndex));\n else if (rightIndex < length && 0 > compare(right, last))\n (heap[index] = right), (heap[rightIndex] = last), (index = rightIndex);\n else break a;\n }\n }\n return first;\n}\nfunction compare(a, b) {\n var diff = a.sortIndex - b.sortIndex;\n return 0 !== diff ? diff : a.id - b.id;\n}\nexports.unstable_now = void 0;\nif (\"object\" === typeof performance && \"function\" === typeof performance.now) {\n var localPerformance = performance;\n exports.unstable_now = function () {\n return localPerformance.now();\n };\n} else {\n var localDate = Date,\n initialTime = localDate.now();\n exports.unstable_now = function () {\n return localDate.now() - initialTime;\n };\n}\nvar taskQueue = [],\n timerQueue = [],\n taskIdCounter = 1,\n currentTask = null,\n currentPriorityLevel = 3,\n isPerformingWork = !1,\n isHostCallbackScheduled = !1,\n isHostTimeoutScheduled = !1,\n needsPaint = !1,\n localSetTimeout = \"function\" === typeof setTimeout ? setTimeout : null,\n localClearTimeout = \"function\" === typeof clearTimeout ? clearTimeout : null,\n localSetImmediate = \"undefined\" !== typeof setImmediate ? setImmediate : null;\nfunction advanceTimers(currentTime) {\n for (var timer = peek(timerQueue); null !== timer; ) {\n if (null === timer.callback) pop(timerQueue);\n else if (timer.startTime <= currentTime)\n pop(timerQueue),\n (timer.sortIndex = timer.expirationTime),\n push(taskQueue, timer);\n else break;\n timer = peek(timerQueue);\n }\n}\nfunction handleTimeout(currentTime) {\n isHostTimeoutScheduled = !1;\n advanceTimers(currentTime);\n if (!isHostCallbackScheduled)\n if (null !== peek(taskQueue))\n (isHostCallbackScheduled = !0),\n isMessageLoopRunning ||\n ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline());\n else {\n var firstTimer = peek(timerQueue);\n null !== firstTimer &&\n requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);\n }\n}\nvar isMessageLoopRunning = !1,\n taskTimeoutID = -1,\n frameInterval = 5,\n startTime = -1;\nfunction shouldYieldToHost() {\n return needsPaint\n ? !0\n : exports.unstable_now() - startTime < frameInterval\n ? !1\n : !0;\n}\nfunction performWorkUntilDeadline() {\n needsPaint = !1;\n if (isMessageLoopRunning) {\n var currentTime = exports.unstable_now();\n startTime = currentTime;\n var hasMoreWork = !0;\n try {\n a: {\n isHostCallbackScheduled = !1;\n isHostTimeoutScheduled &&\n ((isHostTimeoutScheduled = !1),\n localClearTimeout(taskTimeoutID),\n (taskTimeoutID = -1));\n isPerformingWork = !0;\n var previousPriorityLevel = currentPriorityLevel;\n try {\n b: {\n advanceTimers(currentTime);\n for (\n currentTask = peek(taskQueue);\n null !== currentTask &&\n !(\n currentTask.expirationTime > currentTime && shouldYieldToHost()\n );\n\n ) {\n var callback = currentTask.callback;\n if (\"function\" === typeof callback) {\n currentTask.callback = null;\n currentPriorityLevel = currentTask.priorityLevel;\n var continuationCallback = callback(\n currentTask.expirationTime <= currentTime\n );\n currentTime = exports.unstable_now();\n if (\"function\" === typeof continuationCallback) {\n currentTask.callback = continuationCallback;\n advanceTimers(currentTime);\n hasMoreWork = !0;\n break b;\n }\n currentTask === peek(taskQueue) && pop(taskQueue);\n advanceTimers(currentTime);\n } else pop(taskQueue);\n currentTask = peek(taskQueue);\n }\n if (null !== currentTask) hasMoreWork = !0;\n else {\n var firstTimer = peek(timerQueue);\n null !== firstTimer &&\n requestHostTimeout(\n handleTimeout,\n firstTimer.startTime - currentTime\n );\n hasMoreWork = !1;\n }\n }\n break a;\n } finally {\n (currentTask = null),\n (currentPriorityLevel = previousPriorityLevel),\n (isPerformingWork = !1);\n }\n hasMoreWork = void 0;\n }\n } finally {\n hasMoreWork\n ? schedulePerformWorkUntilDeadline()\n : (isMessageLoopRunning = !1);\n }\n }\n}\nvar schedulePerformWorkUntilDeadline;\nif (\"function\" === typeof localSetImmediate)\n schedulePerformWorkUntilDeadline = function () {\n localSetImmediate(performWorkUntilDeadline);\n };\nelse if (\"undefined\" !== typeof MessageChannel) {\n var channel = new MessageChannel(),\n port = channel.port2;\n channel.port1.onmessage = performWorkUntilDeadline;\n schedulePerformWorkUntilDeadline = function () {\n port.postMessage(null);\n };\n} else\n schedulePerformWorkUntilDeadline = function () {\n localSetTimeout(performWorkUntilDeadline, 0);\n };\nfunction requestHostTimeout(callback, ms) {\n taskTimeoutID = localSetTimeout(function () {\n callback(exports.unstable_now());\n }, ms);\n}\nexports.unstable_IdlePriority = 5;\nexports.unstable_ImmediatePriority = 1;\nexports.unstable_LowPriority = 4;\nexports.unstable_NormalPriority = 3;\nexports.unstable_Profiling = null;\nexports.unstable_UserBlockingPriority = 2;\nexports.unstable_cancelCallback = function (task) {\n task.callback = null;\n};\nexports.unstable_forceFrameRate = function (fps) {\n 0 > fps || 125 < fps\n ? console.error(\n \"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"\n )\n : (frameInterval = 0 < fps ? Math.floor(1e3 / fps) : 5);\n};\nexports.unstable_getCurrentPriorityLevel = function () {\n return currentPriorityLevel;\n};\nexports.unstable_next = function (eventHandler) {\n switch (currentPriorityLevel) {\n case 1:\n case 2:\n case 3:\n var priorityLevel = 3;\n break;\n default:\n priorityLevel = currentPriorityLevel;\n }\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = priorityLevel;\n try {\n return eventHandler();\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n};\nexports.unstable_requestPaint = function () {\n needsPaint = !0;\n};\nexports.unstable_runWithPriority = function (priorityLevel, eventHandler) {\n switch (priorityLevel) {\n case 1:\n case 2:\n case 3:\n case 4:\n case 5:\n break;\n default:\n priorityLevel = 3;\n }\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = priorityLevel;\n try {\n return eventHandler();\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n};\nexports.unstable_scheduleCallback = function (\n priorityLevel,\n callback,\n options\n) {\n var currentTime = exports.unstable_now();\n \"object\" === typeof options && null !== options\n ? ((options = options.delay),\n (options =\n \"number\" === typeof options && 0 < options\n ? currentTime + options\n : currentTime))\n : (options = currentTime);\n switch (priorityLevel) {\n case 1:\n var timeout = -1;\n break;\n case 2:\n timeout = 250;\n break;\n case 5:\n timeout = 1073741823;\n break;\n case 4:\n timeout = 1e4;\n break;\n default:\n timeout = 5e3;\n }\n timeout = options + timeout;\n priorityLevel = {\n id: taskIdCounter++,\n callback: callback,\n priorityLevel: priorityLevel,\n startTime: options,\n expirationTime: timeout,\n sortIndex: -1\n };\n options > currentTime\n ? ((priorityLevel.sortIndex = options),\n push(timerQueue, priorityLevel),\n null === peek(taskQueue) &&\n priorityLevel === peek(timerQueue) &&\n (isHostTimeoutScheduled\n ? (localClearTimeout(taskTimeoutID), (taskTimeoutID = -1))\n : (isHostTimeoutScheduled = !0),\n requestHostTimeout(handleTimeout, options - currentTime)))\n : ((priorityLevel.sortIndex = timeout),\n push(taskQueue, priorityLevel),\n isHostCallbackScheduled ||\n isPerformingWork ||\n ((isHostCallbackScheduled = !0),\n isMessageLoopRunning ||\n ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline())));\n return priorityLevel;\n};\nexports.unstable_shouldYield = shouldYieldToHost;\nexports.unstable_wrapCallback = function (callback) {\n var parentPriorityLevel = currentPriorityLevel;\n return function () {\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = parentPriorityLevel;\n try {\n return callback.apply(this, arguments);\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n };\n};\n", "'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n", "/**\n * @license React\n * react-dom.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction formatProdErrorMessage(code) {\n var url = \"https://react.dev/errors/\" + code;\n if (1 < arguments.length) {\n url += \"?args[]=\" + encodeURIComponent(arguments[1]);\n for (var i = 2; i < arguments.length; i++)\n url += \"&args[]=\" + encodeURIComponent(arguments[i]);\n }\n return (\n \"Minified React error #\" +\n code +\n \"; visit \" +\n url +\n \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"\n );\n}\nfunction noop() {}\nvar Internals = {\n d: {\n f: noop,\n r: function () {\n throw Error(formatProdErrorMessage(522));\n },\n D: noop,\n C: noop,\n L: noop,\n m: noop,\n X: noop,\n S: noop,\n M: noop\n },\n p: 0,\n findDOMNode: null\n },\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\");\nfunction createPortal$1(children, containerInfo, implementation) {\n var key =\n 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null;\n return {\n $$typeof: REACT_PORTAL_TYPE,\n key: null == key ? null : \"\" + key,\n children: children,\n containerInfo: containerInfo,\n implementation: implementation\n };\n}\nvar ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;\nfunction getCrossOriginStringAs(as, input) {\n if (\"font\" === as) return \"\";\n if (\"string\" === typeof input)\n return \"use-credentials\" === input ? input : \"\";\n}\nexports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n Internals;\nexports.createPortal = function (children, container) {\n var key =\n 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null;\n if (\n !container ||\n (1 !== container.nodeType &&\n 9 !== container.nodeType &&\n 11 !== container.nodeType)\n )\n throw Error(formatProdErrorMessage(299));\n return createPortal$1(children, container, null, key);\n};\nexports.flushSync = function (fn) {\n var previousTransition = ReactSharedInternals.T,\n previousUpdatePriority = Internals.p;\n try {\n if (((ReactSharedInternals.T = null), (Internals.p = 2), fn)) return fn();\n } finally {\n (ReactSharedInternals.T = previousTransition),\n (Internals.p = previousUpdatePriority),\n Internals.d.f();\n }\n};\nexports.preconnect = function (href, options) {\n \"string\" === typeof href &&\n (options\n ? ((options = options.crossOrigin),\n (options =\n \"string\" === typeof options\n ? \"use-credentials\" === options\n ? options\n : \"\"\n : void 0))\n : (options = null),\n Internals.d.C(href, options));\n};\nexports.prefetchDNS = function (href) {\n \"string\" === typeof href && Internals.d.D(href);\n};\nexports.preinit = function (href, options) {\n if (\"string\" === typeof href && options && \"string\" === typeof options.as) {\n var as = options.as,\n crossOrigin = getCrossOriginStringAs(as, options.crossOrigin),\n integrity =\n \"string\" === typeof options.integrity ? options.integrity : void 0,\n fetchPriority =\n \"string\" === typeof options.fetchPriority\n ? options.fetchPriority\n : void 0;\n \"style\" === as\n ? Internals.d.S(\n href,\n \"string\" === typeof options.precedence ? options.precedence : void 0,\n {\n crossOrigin: crossOrigin,\n integrity: integrity,\n fetchPriority: fetchPriority\n }\n )\n : \"script\" === as &&\n Internals.d.X(href, {\n crossOrigin: crossOrigin,\n integrity: integrity,\n fetchPriority: fetchPriority,\n nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n });\n }\n};\nexports.preinitModule = function (href, options) {\n if (\"string\" === typeof href)\n if (\"object\" === typeof options && null !== options) {\n if (null == options.as || \"script\" === options.as) {\n var crossOrigin = getCrossOriginStringAs(\n options.as,\n options.crossOrigin\n );\n Internals.d.M(href, {\n crossOrigin: crossOrigin,\n integrity:\n \"string\" === typeof options.integrity ? options.integrity : void 0,\n nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n });\n }\n } else null == options && Internals.d.M(href);\n};\nexports.preload = function (href, options) {\n if (\n \"string\" === typeof href &&\n \"object\" === typeof options &&\n null !== options &&\n \"string\" === typeof options.as\n ) {\n var as = options.as,\n crossOrigin = getCrossOriginStringAs(as, options.crossOrigin);\n Internals.d.L(href, as, {\n crossOrigin: crossOrigin,\n integrity:\n \"string\" === typeof options.integrity ? options.integrity : void 0,\n nonce: \"string\" === typeof options.nonce ? options.nonce : void 0,\n type: \"string\" === typeof options.type ? options.type : void 0,\n fetchPriority:\n \"string\" === typeof options.fetchPriority\n ? options.fetchPriority\n : void 0,\n referrerPolicy:\n \"string\" === typeof options.referrerPolicy\n ? options.referrerPolicy\n : void 0,\n imageSrcSet:\n \"string\" === typeof options.imageSrcSet ? options.imageSrcSet : void 0,\n imageSizes:\n \"string\" === typeof options.imageSizes ? options.imageSizes : void 0,\n media: \"string\" === typeof options.media ? options.media : void 0\n });\n }\n};\nexports.preloadModule = function (href, options) {\n if (\"string\" === typeof href)\n if (options) {\n var crossOrigin = getCrossOriginStringAs(options.as, options.crossOrigin);\n Internals.d.m(href, {\n as:\n \"string\" === typeof options.as && \"script\" !== options.as\n ? options.as\n : void 0,\n crossOrigin: crossOrigin,\n integrity:\n \"string\" === typeof options.integrity ? options.integrity : void 0\n });\n } else Internals.d.m(href);\n};\nexports.requestFormReset = function (form) {\n Internals.d.r(form);\n};\nexports.unstable_batchedUpdates = function (fn, a) {\n return fn(a);\n};\nexports.useFormState = function (action, initialState, permalink) {\n return ReactSharedInternals.H.useFormState(action, initialState, permalink);\n};\nexports.useFormStatus = function () {\n return ReactSharedInternals.H.useHostTransitionStatus();\n};\nexports.version = \"19.2.6\";\n", "'use strict';\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (process.env.NODE_ENV === 'production') {\n // DCE check should happen before ReactDOM bundle executes so that\n // DevTools can report bad minification during injection.\n checkDCE();\n module.exports = require('./cjs/react-dom.production.js');\n} else {\n module.exports = require('./cjs/react-dom.development.js');\n}\n", "/**\n * @license React\n * react-dom-client.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n\"use strict\";\nvar Scheduler = require(\"scheduler\"),\n React = require(\"react\"),\n ReactDOM = require(\"react-dom\");\nfunction formatProdErrorMessage(code) {\n var url = \"https://react.dev/errors/\" + code;\n if (1 < arguments.length) {\n url += \"?args[]=\" + encodeURIComponent(arguments[1]);\n for (var i = 2; i < arguments.length; i++)\n url += \"&args[]=\" + encodeURIComponent(arguments[i]);\n }\n return (\n \"Minified React error #\" +\n code +\n \"; visit \" +\n url +\n \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"\n );\n}\nfunction isValidContainer(node) {\n return !(\n !node ||\n (1 !== node.nodeType && 9 !== node.nodeType && 11 !== node.nodeType)\n );\n}\nfunction getNearestMountedFiber(fiber) {\n var node = fiber,\n nearestMounted = fiber;\n if (fiber.alternate) for (; node.return; ) node = node.return;\n else {\n fiber = node;\n do\n (node = fiber),\n 0 !== (node.flags & 4098) && (nearestMounted = node.return),\n (fiber = node.return);\n while (fiber);\n }\n return 3 === node.tag ? nearestMounted : null;\n}\nfunction getSuspenseInstanceFromFiber(fiber) {\n if (13 === fiber.tag) {\n var suspenseState = fiber.memoizedState;\n null === suspenseState &&\n ((fiber = fiber.alternate),\n null !== fiber && (suspenseState = fiber.memoizedState));\n if (null !== suspenseState) return suspenseState.dehydrated;\n }\n return null;\n}\nfunction getActivityInstanceFromFiber(fiber) {\n if (31 === fiber.tag) {\n var activityState = fiber.memoizedState;\n null === activityState &&\n ((fiber = fiber.alternate),\n null !== fiber && (activityState = fiber.memoizedState));\n if (null !== activityState) return activityState.dehydrated;\n }\n return null;\n}\nfunction assertIsMounted(fiber) {\n if (getNearestMountedFiber(fiber) !== fiber)\n throw Error(formatProdErrorMessage(188));\n}\nfunction findCurrentFiberUsingSlowPath(fiber) {\n var alternate = fiber.alternate;\n if (!alternate) {\n alternate = getNearestMountedFiber(fiber);\n if (null === alternate) throw Error(formatProdErrorMessage(188));\n return alternate !== fiber ? null : fiber;\n }\n for (var a = fiber, b = alternate; ; ) {\n var parentA = a.return;\n if (null === parentA) break;\n var parentB = parentA.alternate;\n if (null === parentB) {\n b = parentA.return;\n if (null !== b) {\n a = b;\n continue;\n }\n break;\n }\n if (parentA.child === parentB.child) {\n for (parentB = parentA.child; parentB; ) {\n if (parentB === a) return assertIsMounted(parentA), fiber;\n if (parentB === b) return assertIsMounted(parentA), alternate;\n parentB = parentB.sibling;\n }\n throw Error(formatProdErrorMessage(188));\n }\n if (a.return !== b.return) (a = parentA), (b = parentB);\n else {\n for (var didFindChild = !1, child$0 = parentA.child; child$0; ) {\n if (child$0 === a) {\n didFindChild = !0;\n a = parentA;\n b = parentB;\n break;\n }\n if (child$0 === b) {\n didFindChild = !0;\n b = parentA;\n a = parentB;\n break;\n }\n child$0 = child$0.sibling;\n }\n if (!didFindChild) {\n for (child$0 = parentB.child; child$0; ) {\n if (child$0 === a) {\n didFindChild = !0;\n a = parentB;\n b = parentA;\n break;\n }\n if (child$0 === b) {\n didFindChild = !0;\n b = parentB;\n a = parentA;\n break;\n }\n child$0 = child$0.sibling;\n }\n if (!didFindChild) throw Error(formatProdErrorMessage(189));\n }\n }\n if (a.alternate !== b) throw Error(formatProdErrorMessage(190));\n }\n if (3 !== a.tag) throw Error(formatProdErrorMessage(188));\n return a.stateNode.current === a ? fiber : alternate;\n}\nfunction findCurrentHostFiberImpl(node) {\n var tag = node.tag;\n if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return node;\n for (node = node.child; null !== node; ) {\n tag = findCurrentHostFiberImpl(node);\n if (null !== tag) return tag;\n node = node.sibling;\n }\n return null;\n}\nvar assign = Object.assign,\n REACT_LEGACY_ELEMENT_TYPE = Symbol.for(\"react.element\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\nSymbol.for(\"react.scope\");\nvar REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\");\nSymbol.for(\"react.legacy_hidden\");\nSymbol.for(\"react.tracing_marker\");\nvar REACT_MEMO_CACHE_SENTINEL = Symbol.for(\"react.memo_cache_sentinel\");\nSymbol.for(\"react.view_transition\");\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n maybeIterable =\n (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n maybeIterable[\"@@iterator\"];\n return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\");\nfunction getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (type.$$typeof) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return type.displayName || \"Context\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n}\nvar isArrayImpl = Array.isArray,\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n ReactDOMSharedInternals =\n ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n sharedNotPendingObject = {\n pending: !1,\n data: null,\n method: null,\n action: null\n },\n valueStack = [],\n index = -1;\nfunction createCursor(defaultValue) {\n return { current: defaultValue };\n}\nfunction pop(cursor) {\n 0 > index ||\n ((cursor.current = valueStack[index]), (valueStack[index] = null), index--);\n}\nfunction push(cursor, value) {\n index++;\n valueStack[index] = cursor.current;\n cursor.current = value;\n}\nvar contextStackCursor = createCursor(null),\n contextFiberStackCursor = createCursor(null),\n rootInstanceStackCursor = createCursor(null),\n hostTransitionProviderCursor = createCursor(null);\nfunction pushHostContainer(fiber, nextRootInstance) {\n push(rootInstanceStackCursor, nextRootInstance);\n push(contextFiberStackCursor, fiber);\n push(contextStackCursor, null);\n switch (nextRootInstance.nodeType) {\n case 9:\n case 11:\n fiber = (fiber = nextRootInstance.documentElement)\n ? (fiber = fiber.namespaceURI)\n ? getOwnHostContext(fiber)\n : 0\n : 0;\n break;\n default:\n if (\n ((fiber = nextRootInstance.tagName),\n (nextRootInstance = nextRootInstance.namespaceURI))\n )\n (nextRootInstance = getOwnHostContext(nextRootInstance)),\n (fiber = getChildHostContextProd(nextRootInstance, fiber));\n else\n switch (fiber) {\n case \"svg\":\n fiber = 1;\n break;\n case \"math\":\n fiber = 2;\n break;\n default:\n fiber = 0;\n }\n }\n pop(contextStackCursor);\n push(contextStackCursor, fiber);\n}\nfunction popHostContainer() {\n pop(contextStackCursor);\n pop(contextFiberStackCursor);\n pop(rootInstanceStackCursor);\n}\nfunction pushHostContext(fiber) {\n null !== fiber.memoizedState && push(hostTransitionProviderCursor, fiber);\n var context = contextStackCursor.current;\n var JSCompiler_inline_result = getChildHostContextProd(context, fiber.type);\n context !== JSCompiler_inline_result &&\n (push(contextFiberStackCursor, fiber),\n push(contextStackCursor, JSCompiler_inline_result));\n}\nfunction popHostContext(fiber) {\n contextFiberStackCursor.current === fiber &&\n (pop(contextStackCursor), pop(contextFiberStackCursor));\n hostTransitionProviderCursor.current === fiber &&\n (pop(hostTransitionProviderCursor),\n (HostTransitionContext._currentValue = sharedNotPendingObject));\n}\nvar prefix, suffix;\nfunction describeBuiltInComponentFrame(name) {\n if (void 0 === prefix)\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = (match && match[1]) || \"\";\n suffix =\n -1 < x.stack.indexOf(\"\\n at\")\n ? \" (<anonymous>)\"\n : -1 < x.stack.indexOf(\"@\")\n ? \"@unknown:0:0\"\n : \"\";\n }\n return \"\\n\" + prefix + name + suffix;\n}\nvar reentry = !1;\nfunction describeNativeComponentFrame(fn, construct) {\n if (!fn || reentry) return \"\";\n reentry = !0;\n var previousPrepareStackTrace = Error.prepareStackTrace;\n Error.prepareStackTrace = void 0;\n try {\n var RunInRootFrame = {\n DetermineComponentFrameRoot: function () {\n try {\n if (construct) {\n var Fake = function () {\n throw Error();\n };\n Object.defineProperty(Fake.prototype, \"props\", {\n set: function () {\n throw Error();\n }\n });\n if (\"object\" === typeof Reflect && Reflect.construct) {\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n var control = x;\n }\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x$1) {\n control = x$1;\n }\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x$2) {\n control = x$2;\n }\n (Fake = fn()) &&\n \"function\" === typeof Fake.catch &&\n Fake.catch(function () {});\n }\n } catch (sample) {\n if (sample && control && \"string\" === typeof sample.stack)\n return [sample.stack, control.stack];\n }\n return [null, null];\n }\n };\n RunInRootFrame.DetermineComponentFrameRoot.displayName =\n \"DetermineComponentFrameRoot\";\n var namePropDescriptor = Object.getOwnPropertyDescriptor(\n RunInRootFrame.DetermineComponentFrameRoot,\n \"name\"\n );\n namePropDescriptor &&\n namePropDescriptor.configurable &&\n Object.defineProperty(\n RunInRootFrame.DetermineComponentFrameRoot,\n \"name\",\n { value: \"DetermineComponentFrameRoot\" }\n );\n var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),\n sampleStack = _RunInRootFrame$Deter[0],\n controlStack = _RunInRootFrame$Deter[1];\n if (sampleStack && controlStack) {\n var sampleLines = sampleStack.split(\"\\n\"),\n controlLines = controlStack.split(\"\\n\");\n for (\n namePropDescriptor = RunInRootFrame = 0;\n RunInRootFrame < sampleLines.length &&\n !sampleLines[RunInRootFrame].includes(\"DetermineComponentFrameRoot\");\n\n )\n RunInRootFrame++;\n for (\n ;\n namePropDescriptor < controlLines.length &&\n !controlLines[namePropDescriptor].includes(\n \"DetermineComponentFrameRoot\"\n );\n\n )\n namePropDescriptor++;\n if (\n RunInRootFrame === sampleLines.length ||\n namePropDescriptor === controlLines.length\n )\n for (\n RunInRootFrame = sampleLines.length - 1,\n namePropDescriptor = controlLines.length - 1;\n 1 <= RunInRootFrame &&\n 0 <= namePropDescriptor &&\n sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor];\n\n )\n namePropDescriptor--;\n for (\n ;\n 1 <= RunInRootFrame && 0 <= namePropDescriptor;\n RunInRootFrame--, namePropDescriptor--\n )\n if (sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor]) {\n if (1 !== RunInRootFrame || 1 !== namePropDescriptor) {\n do\n if (\n (RunInRootFrame--,\n namePropDescriptor--,\n 0 > namePropDescriptor ||\n sampleLines[RunInRootFrame] !==\n controlLines[namePropDescriptor])\n ) {\n var frame =\n \"\\n\" +\n sampleLines[RunInRootFrame].replace(\" at new \", \" at \");\n fn.displayName &&\n frame.includes(\"<anonymous>\") &&\n (frame = frame.replace(\"<anonymous>\", fn.displayName));\n return frame;\n }\n while (1 <= RunInRootFrame && 0 <= namePropDescriptor);\n }\n break;\n }\n }\n } finally {\n (reentry = !1), (Error.prepareStackTrace = previousPrepareStackTrace);\n }\n return (previousPrepareStackTrace = fn ? fn.displayName || fn.name : \"\")\n ? describeBuiltInComponentFrame(previousPrepareStackTrace)\n : \"\";\n}\nfunction describeFiber(fiber, childFiber) {\n switch (fiber.tag) {\n case 26:\n case 27:\n case 5:\n return describeBuiltInComponentFrame(fiber.type);\n case 16:\n return describeBuiltInComponentFrame(\"Lazy\");\n case 13:\n return fiber.child !== childFiber && null !== childFiber\n ? describeBuiltInComponentFrame(\"Suspense Fallback\")\n : describeBuiltInComponentFrame(\"Suspense\");\n case 19:\n return describeBuiltInComponentFrame(\"SuspenseList\");\n case 0:\n case 15:\n return describeNativeComponentFrame(fiber.type, !1);\n case 11:\n return describeNativeComponentFrame(fiber.type.render, !1);\n case 1:\n return describeNativeComponentFrame(fiber.type, !0);\n case 31:\n return describeBuiltInComponentFrame(\"Activity\");\n default:\n return \"\";\n }\n}\nfunction getStackByFiberInDevAndProd(workInProgress) {\n try {\n var info = \"\",\n previous = null;\n do\n (info += describeFiber(workInProgress, previous)),\n (previous = workInProgress),\n (workInProgress = workInProgress.return);\n while (workInProgress);\n return info;\n } catch (x) {\n return \"\\nError generating stack: \" + x.message + \"\\n\" + x.stack;\n }\n}\nvar hasOwnProperty = Object.prototype.hasOwnProperty,\n scheduleCallback$3 = Scheduler.unstable_scheduleCallback,\n cancelCallback$1 = Scheduler.unstable_cancelCallback,\n shouldYield = Scheduler.unstable_shouldYield,\n requestPaint = Scheduler.unstable_requestPaint,\n now = Scheduler.unstable_now,\n getCurrentPriorityLevel = Scheduler.unstable_getCurrentPriorityLevel,\n ImmediatePriority = Scheduler.unstable_ImmediatePriority,\n UserBlockingPriority = Scheduler.unstable_UserBlockingPriority,\n NormalPriority$1 = Scheduler.unstable_NormalPriority,\n LowPriority = Scheduler.unstable_LowPriority,\n IdlePriority = Scheduler.unstable_IdlePriority,\n log$1 = Scheduler.log,\n unstable_setDisableYieldValue = Scheduler.unstable_setDisableYieldValue,\n rendererID = null,\n injectedHook = null;\nfunction setIsStrictModeForDevtools(newIsStrictMode) {\n \"function\" === typeof log$1 && unstable_setDisableYieldValue(newIsStrictMode);\n if (injectedHook && \"function\" === typeof injectedHook.setStrictMode)\n try {\n injectedHook.setStrictMode(rendererID, newIsStrictMode);\n } catch (err) {}\n}\nvar clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,\n log = Math.log,\n LN2 = Math.LN2;\nfunction clz32Fallback(x) {\n x >>>= 0;\n return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0;\n}\nvar nextTransitionUpdateLane = 256,\n nextTransitionDeferredLane = 262144,\n nextRetryLane = 4194304;\nfunction getHighestPriorityLanes(lanes) {\n var pendingSyncLanes = lanes & 42;\n if (0 !== pendingSyncLanes) return pendingSyncLanes;\n switch (lanes & -lanes) {\n case 1:\n return 1;\n case 2:\n return 2;\n case 4:\n return 4;\n case 8:\n return 8;\n case 16:\n return 16;\n case 32:\n return 32;\n case 64:\n return 64;\n case 128:\n return 128;\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n return lanes & 261888;\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n return lanes & 3932160;\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n return lanes & 62914560;\n case 67108864:\n return 67108864;\n case 134217728:\n return 134217728;\n case 268435456:\n return 268435456;\n case 536870912:\n return 536870912;\n case 1073741824:\n return 0;\n default:\n return lanes;\n }\n}\nfunction getNextLanes(root, wipLanes, rootHasPendingCommit) {\n var pendingLanes = root.pendingLanes;\n if (0 === pendingLanes) return 0;\n var nextLanes = 0,\n suspendedLanes = root.suspendedLanes,\n pingedLanes = root.pingedLanes;\n root = root.warmLanes;\n var nonIdlePendingLanes = pendingLanes & 134217727;\n 0 !== nonIdlePendingLanes\n ? ((pendingLanes = nonIdlePendingLanes & ~suspendedLanes),\n 0 !== pendingLanes\n ? (nextLanes = getHighestPriorityLanes(pendingLanes))\n : ((pingedLanes &= nonIdlePendingLanes),\n 0 !== pingedLanes\n ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n : rootHasPendingCommit ||\n ((rootHasPendingCommit = nonIdlePendingLanes & ~root),\n 0 !== rootHasPendingCommit &&\n (nextLanes = getHighestPriorityLanes(rootHasPendingCommit)))))\n : ((nonIdlePendingLanes = pendingLanes & ~suspendedLanes),\n 0 !== nonIdlePendingLanes\n ? (nextLanes = getHighestPriorityLanes(nonIdlePendingLanes))\n : 0 !== pingedLanes\n ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n : rootHasPendingCommit ||\n ((rootHasPendingCommit = pendingLanes & ~root),\n 0 !== rootHasPendingCommit &&\n (nextLanes = getHighestPriorityLanes(rootHasPendingCommit))));\n return 0 === nextLanes\n ? 0\n : 0 !== wipLanes &&\n wipLanes !== nextLanes &&\n 0 === (wipLanes & suspendedLanes) &&\n ((suspendedLanes = nextLanes & -nextLanes),\n (rootHasPendingCommit = wipLanes & -wipLanes),\n suspendedLanes >= rootHasPendingCommit ||\n (32 === suspendedLanes && 0 !== (rootHasPendingCommit & 4194048)))\n ? wipLanes\n : nextLanes;\n}\nfunction checkIfRootIsPrerendering(root, renderLanes) {\n return (\n 0 ===\n (root.pendingLanes &\n ~(root.suspendedLanes & ~root.pingedLanes) &\n renderLanes)\n );\n}\nfunction computeExpirationTime(lane, currentTime) {\n switch (lane) {\n case 1:\n case 2:\n case 4:\n case 8:\n case 64:\n return currentTime + 250;\n case 16:\n case 32:\n case 128:\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n return currentTime + 5e3;\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n return -1;\n case 67108864:\n case 134217728:\n case 268435456:\n case 536870912:\n case 1073741824:\n return -1;\n default:\n return -1;\n }\n}\nfunction claimNextRetryLane() {\n var lane = nextRetryLane;\n nextRetryLane <<= 1;\n 0 === (nextRetryLane & 62914560) && (nextRetryLane = 4194304);\n return lane;\n}\nfunction createLaneMap(initial) {\n for (var laneMap = [], i = 0; 31 > i; i++) laneMap.push(initial);\n return laneMap;\n}\nfunction markRootUpdated$1(root, updateLane) {\n root.pendingLanes |= updateLane;\n 268435456 !== updateLane &&\n ((root.suspendedLanes = 0), (root.pingedLanes = 0), (root.warmLanes = 0));\n}\nfunction markRootFinished(\n root,\n finishedLanes,\n remainingLanes,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes\n) {\n var previouslyPendingLanes = root.pendingLanes;\n root.pendingLanes = remainingLanes;\n root.suspendedLanes = 0;\n root.pingedLanes = 0;\n root.warmLanes = 0;\n root.expiredLanes &= remainingLanes;\n root.entangledLanes &= remainingLanes;\n root.errorRecoveryDisabledLanes &= remainingLanes;\n root.shellSuspendCounter = 0;\n var entanglements = root.entanglements,\n expirationTimes = root.expirationTimes,\n hiddenUpdates = root.hiddenUpdates;\n for (\n remainingLanes = previouslyPendingLanes & ~remainingLanes;\n 0 < remainingLanes;\n\n ) {\n var index$7 = 31 - clz32(remainingLanes),\n lane = 1 << index$7;\n entanglements[index$7] = 0;\n expirationTimes[index$7] = -1;\n var hiddenUpdatesForLane = hiddenUpdates[index$7];\n if (null !== hiddenUpdatesForLane)\n for (\n hiddenUpdates[index$7] = null, index$7 = 0;\n index$7 < hiddenUpdatesForLane.length;\n index$7++\n ) {\n var update = hiddenUpdatesForLane[index$7];\n null !== update && (update.lane &= -536870913);\n }\n remainingLanes &= ~lane;\n }\n 0 !== spawnedLane && markSpawnedDeferredLane(root, spawnedLane, 0);\n 0 !== suspendedRetryLanes &&\n 0 === updatedLanes &&\n 0 !== root.tag &&\n (root.suspendedLanes |=\n suspendedRetryLanes & ~(previouslyPendingLanes & ~finishedLanes));\n}\nfunction markSpawnedDeferredLane(root, spawnedLane, entangledLanes) {\n root.pendingLanes |= spawnedLane;\n root.suspendedLanes &= ~spawnedLane;\n var spawnedLaneIndex = 31 - clz32(spawnedLane);\n root.entangledLanes |= spawnedLane;\n root.entanglements[spawnedLaneIndex] =\n root.entanglements[spawnedLaneIndex] |\n 1073741824 |\n (entangledLanes & 261930);\n}\nfunction markRootEntangled(root, entangledLanes) {\n var rootEntangledLanes = (root.entangledLanes |= entangledLanes);\n for (root = root.entanglements; rootEntangledLanes; ) {\n var index$8 = 31 - clz32(rootEntangledLanes),\n lane = 1 << index$8;\n (lane & entangledLanes) | (root[index$8] & entangledLanes) &&\n (root[index$8] |= entangledLanes);\n rootEntangledLanes &= ~lane;\n }\n}\nfunction getBumpedLaneForHydration(root, renderLanes) {\n var renderLane = renderLanes & -renderLanes;\n renderLane =\n 0 !== (renderLane & 42) ? 1 : getBumpedLaneForHydrationByLane(renderLane);\n return 0 !== (renderLane & (root.suspendedLanes | renderLanes))\n ? 0\n : renderLane;\n}\nfunction getBumpedLaneForHydrationByLane(lane) {\n switch (lane) {\n case 2:\n lane = 1;\n break;\n case 8:\n lane = 4;\n break;\n case 32:\n lane = 16;\n break;\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n lane = 128;\n break;\n case 268435456:\n lane = 134217728;\n break;\n default:\n lane = 0;\n }\n return lane;\n}\nfunction lanesToEventPriority(lanes) {\n lanes &= -lanes;\n return 2 < lanes\n ? 8 < lanes\n ? 0 !== (lanes & 134217727)\n ? 32\n : 268435456\n : 8\n : 2;\n}\nfunction resolveUpdatePriority() {\n var updatePriority = ReactDOMSharedInternals.p;\n if (0 !== updatePriority) return updatePriority;\n updatePriority = window.event;\n return void 0 === updatePriority ? 32 : getEventPriority(updatePriority.type);\n}\nfunction runWithPriority(priority, fn) {\n var previousPriority = ReactDOMSharedInternals.p;\n try {\n return (ReactDOMSharedInternals.p = priority), fn();\n } finally {\n ReactDOMSharedInternals.p = previousPriority;\n }\n}\nvar randomKey = Math.random().toString(36).slice(2),\n internalInstanceKey = \"__reactFiber$\" + randomKey,\n internalPropsKey = \"__reactProps$\" + randomKey,\n internalContainerInstanceKey = \"__reactContainer$\" + randomKey,\n internalEventHandlersKey = \"__reactEvents$\" + randomKey,\n internalEventHandlerListenersKey = \"__reactListeners$\" + randomKey,\n internalEventHandlesSetKey = \"__reactHandles$\" + randomKey,\n internalRootNodeResourcesKey = \"__reactResources$\" + randomKey,\n internalHoistableMarker = \"__reactMarker$\" + randomKey;\nfunction detachDeletedInstance(node) {\n delete node[internalInstanceKey];\n delete node[internalPropsKey];\n delete node[internalEventHandlersKey];\n delete node[internalEventHandlerListenersKey];\n delete node[internalEventHandlesSetKey];\n}\nfunction getClosestInstanceFromNode(targetNode) {\n var targetInst = targetNode[internalInstanceKey];\n if (targetInst) return targetInst;\n for (var parentNode = targetNode.parentNode; parentNode; ) {\n if (\n (targetInst =\n parentNode[internalContainerInstanceKey] ||\n parentNode[internalInstanceKey])\n ) {\n parentNode = targetInst.alternate;\n if (\n null !== targetInst.child ||\n (null !== parentNode && null !== parentNode.child)\n )\n for (\n targetNode = getParentHydrationBoundary(targetNode);\n null !== targetNode;\n\n ) {\n if ((parentNode = targetNode[internalInstanceKey])) return parentNode;\n targetNode = getParentHydrationBoundary(targetNode);\n }\n return targetInst;\n }\n targetNode = parentNode;\n parentNode = targetNode.parentNode;\n }\n return null;\n}\nfunction getInstanceFromNode(node) {\n if (\n (node = node[internalInstanceKey] || node[internalContainerInstanceKey])\n ) {\n var tag = node.tag;\n if (\n 5 === tag ||\n 6 === tag ||\n 13 === tag ||\n 31 === tag ||\n 26 === tag ||\n 27 === tag ||\n 3 === tag\n )\n return node;\n }\n return null;\n}\nfunction getNodeFromInstance(inst) {\n var tag = inst.tag;\n if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return inst.stateNode;\n throw Error(formatProdErrorMessage(33));\n}\nfunction getResourcesFromRoot(root) {\n var resources = root[internalRootNodeResourcesKey];\n resources ||\n (resources = root[internalRootNodeResourcesKey] =\n { hoistableStyles: new Map(), hoistableScripts: new Map() });\n return resources;\n}\nfunction markNodeAsHoistable(node) {\n node[internalHoistableMarker] = !0;\n}\nvar allNativeEvents = new Set(),\n registrationNameDependencies = {};\nfunction registerTwoPhaseEvent(registrationName, dependencies) {\n registerDirectEvent(registrationName, dependencies);\n registerDirectEvent(registrationName + \"Capture\", dependencies);\n}\nfunction registerDirectEvent(registrationName, dependencies) {\n registrationNameDependencies[registrationName] = dependencies;\n for (\n registrationName = 0;\n registrationName < dependencies.length;\n registrationName++\n )\n allNativeEvents.add(dependencies[registrationName]);\n}\nvar VALID_ATTRIBUTE_NAME_REGEX = RegExp(\n \"^[:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD][:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"\n ),\n illegalAttributeNameCache = {},\n validatedAttributeNameCache = {};\nfunction isAttributeNameSafe(attributeName) {\n if (hasOwnProperty.call(validatedAttributeNameCache, attributeName))\n return !0;\n if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) return !1;\n if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName))\n return (validatedAttributeNameCache[attributeName] = !0);\n illegalAttributeNameCache[attributeName] = !0;\n return !1;\n}\nfunction setValueForAttribute(node, name, value) {\n if (isAttributeNameSafe(name))\n if (null === value) node.removeAttribute(name);\n else {\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n node.removeAttribute(name);\n return;\n case \"boolean\":\n var prefix$10 = name.toLowerCase().slice(0, 5);\n if (\"data-\" !== prefix$10 && \"aria-\" !== prefix$10) {\n node.removeAttribute(name);\n return;\n }\n }\n node.setAttribute(name, \"\" + value);\n }\n}\nfunction setValueForKnownAttribute(node, name, value) {\n if (null === value) node.removeAttribute(name);\n else {\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n node.removeAttribute(name);\n return;\n }\n node.setAttribute(name, \"\" + value);\n }\n}\nfunction setValueForNamespacedAttribute(node, namespace, name, value) {\n if (null === value) node.removeAttribute(name);\n else {\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n node.removeAttribute(name);\n return;\n }\n node.setAttributeNS(namespace, name, \"\" + value);\n }\n}\nfunction getToStringValue(value) {\n switch (typeof value) {\n case \"bigint\":\n case \"boolean\":\n case \"number\":\n case \"string\":\n case \"undefined\":\n return value;\n case \"object\":\n return value;\n default:\n return \"\";\n }\n}\nfunction isCheckable(elem) {\n var type = elem.type;\n return (\n (elem = elem.nodeName) &&\n \"input\" === elem.toLowerCase() &&\n (\"checkbox\" === type || \"radio\" === type)\n );\n}\nfunction trackValueOnNode(node, valueField, currentValue) {\n var descriptor = Object.getOwnPropertyDescriptor(\n node.constructor.prototype,\n valueField\n );\n if (\n !node.hasOwnProperty(valueField) &&\n \"undefined\" !== typeof descriptor &&\n \"function\" === typeof descriptor.get &&\n \"function\" === typeof descriptor.set\n ) {\n var get = descriptor.get,\n set = descriptor.set;\n Object.defineProperty(node, valueField, {\n configurable: !0,\n get: function () {\n return get.call(this);\n },\n set: function (value) {\n currentValue = \"\" + value;\n set.call(this, value);\n }\n });\n Object.defineProperty(node, valueField, {\n enumerable: descriptor.enumerable\n });\n return {\n getValue: function () {\n return currentValue;\n },\n setValue: function (value) {\n currentValue = \"\" + value;\n },\n stopTracking: function () {\n node._valueTracker = null;\n delete node[valueField];\n }\n };\n }\n}\nfunction track(node) {\n if (!node._valueTracker) {\n var valueField = isCheckable(node) ? \"checked\" : \"value\";\n node._valueTracker = trackValueOnNode(\n node,\n valueField,\n \"\" + node[valueField]\n );\n }\n}\nfunction updateValueIfChanged(node) {\n if (!node) return !1;\n var tracker = node._valueTracker;\n if (!tracker) return !0;\n var lastValue = tracker.getValue();\n var value = \"\";\n node &&\n (value = isCheckable(node)\n ? node.checked\n ? \"true\"\n : \"false\"\n : node.value);\n node = value;\n return node !== lastValue ? (tracker.setValue(node), !0) : !1;\n}\nfunction getActiveElement(doc) {\n doc = doc || (\"undefined\" !== typeof document ? document : void 0);\n if (\"undefined\" === typeof doc) return null;\n try {\n return doc.activeElement || doc.body;\n } catch (e) {\n return doc.body;\n }\n}\nvar escapeSelectorAttributeValueInsideDoubleQuotesRegex = /[\\n\"\\\\]/g;\nfunction escapeSelectorAttributeValueInsideDoubleQuotes(value) {\n return value.replace(\n escapeSelectorAttributeValueInsideDoubleQuotesRegex,\n function (ch) {\n return \"\\\\\" + ch.charCodeAt(0).toString(16) + \" \";\n }\n );\n}\nfunction updateInput(\n element,\n value,\n defaultValue,\n lastDefaultValue,\n checked,\n defaultChecked,\n type,\n name\n) {\n element.name = \"\";\n null != type &&\n \"function\" !== typeof type &&\n \"symbol\" !== typeof type &&\n \"boolean\" !== typeof type\n ? (element.type = type)\n : element.removeAttribute(\"type\");\n if (null != value)\n if (\"number\" === type) {\n if ((0 === value && \"\" === element.value) || element.value != value)\n element.value = \"\" + getToStringValue(value);\n } else\n element.value !== \"\" + getToStringValue(value) &&\n (element.value = \"\" + getToStringValue(value));\n else\n (\"submit\" !== type && \"reset\" !== type) || element.removeAttribute(\"value\");\n null != value\n ? setDefaultValue(element, type, getToStringValue(value))\n : null != defaultValue\n ? setDefaultValue(element, type, getToStringValue(defaultValue))\n : null != lastDefaultValue && element.removeAttribute(\"value\");\n null == checked &&\n null != defaultChecked &&\n (element.defaultChecked = !!defaultChecked);\n null != checked &&\n (element.checked =\n checked && \"function\" !== typeof checked && \"symbol\" !== typeof checked);\n null != name &&\n \"function\" !== typeof name &&\n \"symbol\" !== typeof name &&\n \"boolean\" !== typeof name\n ? (element.name = \"\" + getToStringValue(name))\n : element.removeAttribute(\"name\");\n}\nfunction initInput(\n element,\n value,\n defaultValue,\n checked,\n defaultChecked,\n type,\n name,\n isHydrating\n) {\n null != type &&\n \"function\" !== typeof type &&\n \"symbol\" !== typeof type &&\n \"boolean\" !== typeof type &&\n (element.type = type);\n if (null != value || null != defaultValue) {\n if (\n !(\n (\"submit\" !== type && \"reset\" !== type) ||\n (void 0 !== value && null !== value)\n )\n ) {\n track(element);\n return;\n }\n defaultValue =\n null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n value = null != value ? \"\" + getToStringValue(value) : defaultValue;\n isHydrating || value === element.value || (element.value = value);\n element.defaultValue = value;\n }\n checked = null != checked ? checked : defaultChecked;\n checked =\n \"function\" !== typeof checked && \"symbol\" !== typeof checked && !!checked;\n element.checked = isHydrating ? element.checked : !!checked;\n element.defaultChecked = !!checked;\n null != name &&\n \"function\" !== typeof name &&\n \"symbol\" !== typeof name &&\n \"boolean\" !== typeof name &&\n (element.name = name);\n track(element);\n}\nfunction setDefaultValue(node, type, value) {\n (\"number\" === type && getActiveElement(node.ownerDocument) === node) ||\n node.defaultValue === \"\" + value ||\n (node.defaultValue = \"\" + value);\n}\nfunction updateOptions(node, multiple, propValue, setDefaultSelected) {\n node = node.options;\n if (multiple) {\n multiple = {};\n for (var i = 0; i < propValue.length; i++)\n multiple[\"$\" + propValue[i]] = !0;\n for (propValue = 0; propValue < node.length; propValue++)\n (i = multiple.hasOwnProperty(\"$\" + node[propValue].value)),\n node[propValue].selected !== i && (node[propValue].selected = i),\n i && setDefaultSelected && (node[propValue].defaultSelected = !0);\n } else {\n propValue = \"\" + getToStringValue(propValue);\n multiple = null;\n for (i = 0; i < node.length; i++) {\n if (node[i].value === propValue) {\n node[i].selected = !0;\n setDefaultSelected && (node[i].defaultSelected = !0);\n return;\n }\n null !== multiple || node[i].disabled || (multiple = node[i]);\n }\n null !== multiple && (multiple.selected = !0);\n }\n}\nfunction updateTextarea(element, value, defaultValue) {\n if (\n null != value &&\n ((value = \"\" + getToStringValue(value)),\n value !== element.value && (element.value = value),\n null == defaultValue)\n ) {\n element.defaultValue !== value && (element.defaultValue = value);\n return;\n }\n element.defaultValue =\n null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n}\nfunction initTextarea(element, value, defaultValue, children) {\n if (null == value) {\n if (null != children) {\n if (null != defaultValue) throw Error(formatProdErrorMessage(92));\n if (isArrayImpl(children)) {\n if (1 < children.length) throw Error(formatProdErrorMessage(93));\n children = children[0];\n }\n defaultValue = children;\n }\n null == defaultValue && (defaultValue = \"\");\n value = defaultValue;\n }\n defaultValue = getToStringValue(value);\n element.defaultValue = defaultValue;\n children = element.textContent;\n children === defaultValue &&\n \"\" !== children &&\n null !== children &&\n (element.value = children);\n track(element);\n}\nfunction setTextContent(node, text) {\n if (text) {\n var firstChild = node.firstChild;\n if (\n firstChild &&\n firstChild === node.lastChild &&\n 3 === firstChild.nodeType\n ) {\n firstChild.nodeValue = text;\n return;\n }\n }\n node.textContent = text;\n}\nvar unitlessNumbers = new Set(\n \"animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp\".split(\n \" \"\n )\n);\nfunction setValueForStyle(style, styleName, value) {\n var isCustomProperty = 0 === styleName.indexOf(\"--\");\n null == value || \"boolean\" === typeof value || \"\" === value\n ? isCustomProperty\n ? style.setProperty(styleName, \"\")\n : \"float\" === styleName\n ? (style.cssFloat = \"\")\n : (style[styleName] = \"\")\n : isCustomProperty\n ? style.setProperty(styleName, value)\n : \"number\" !== typeof value ||\n 0 === value ||\n unitlessNumbers.has(styleName)\n ? \"float\" === styleName\n ? (style.cssFloat = value)\n : (style[styleName] = (\"\" + value).trim())\n : (style[styleName] = value + \"px\");\n}\nfunction setValueForStyles(node, styles, prevStyles) {\n if (null != styles && \"object\" !== typeof styles)\n throw Error(formatProdErrorMessage(62));\n node = node.style;\n if (null != prevStyles) {\n for (var styleName in prevStyles)\n !prevStyles.hasOwnProperty(styleName) ||\n (null != styles && styles.hasOwnProperty(styleName)) ||\n (0 === styleName.indexOf(\"--\")\n ? node.setProperty(styleName, \"\")\n : \"float\" === styleName\n ? (node.cssFloat = \"\")\n : (node[styleName] = \"\"));\n for (var styleName$16 in styles)\n (styleName = styles[styleName$16]),\n styles.hasOwnProperty(styleName$16) &&\n prevStyles[styleName$16] !== styleName &&\n setValueForStyle(node, styleName$16, styleName);\n } else\n for (var styleName$17 in styles)\n styles.hasOwnProperty(styleName$17) &&\n setValueForStyle(node, styleName$17, styles[styleName$17]);\n}\nfunction isCustomElement(tagName) {\n if (-1 === tagName.indexOf(\"-\")) return !1;\n switch (tagName) {\n case \"annotation-xml\":\n case \"color-profile\":\n case \"font-face\":\n case \"font-face-src\":\n case \"font-face-uri\":\n case \"font-face-format\":\n case \"font-face-name\":\n case \"missing-glyph\":\n return !1;\n default:\n return !0;\n }\n}\nvar aliases = new Map([\n [\"acceptCharset\", \"accept-charset\"],\n [\"htmlFor\", \"for\"],\n [\"httpEquiv\", \"http-equiv\"],\n [\"crossOrigin\", \"crossorigin\"],\n [\"accentHeight\", \"accent-height\"],\n [\"alignmentBaseline\", \"alignment-baseline\"],\n [\"arabicForm\", \"arabic-form\"],\n [\"baselineShift\", \"baseline-shift\"],\n [\"capHeight\", \"cap-height\"],\n [\"clipPath\", \"clip-path\"],\n [\"clipRule\", \"clip-rule\"],\n [\"colorInterpolation\", \"color-interpolation\"],\n [\"colorInterpolationFilters\", \"color-interpolation-filters\"],\n [\"colorProfile\", \"color-profile\"],\n [\"colorRendering\", \"color-rendering\"],\n [\"dominantBaseline\", \"dominant-baseline\"],\n [\"enableBackground\", \"enable-background\"],\n [\"fillOpacity\", \"fill-opacity\"],\n [\"fillRule\", \"fill-rule\"],\n [\"floodColor\", \"flood-color\"],\n [\"floodOpacity\", \"flood-opacity\"],\n [\"fontFamily\", \"font-family\"],\n [\"fontSize\", \"font-size\"],\n [\"fontSizeAdjust\", \"font-size-adjust\"],\n [\"fontStretch\", \"font-stretch\"],\n [\"fontStyle\", \"font-style\"],\n [\"fontVariant\", \"font-variant\"],\n [\"fontWeight\", \"font-weight\"],\n [\"glyphName\", \"glyph-name\"],\n [\"glyphOrientationHorizontal\", \"glyph-orientation-horizontal\"],\n [\"glyphOrientationVertical\", \"glyph-orientation-vertical\"],\n [\"horizAdvX\", \"horiz-adv-x\"],\n [\"horizOriginX\", \"horiz-origin-x\"],\n [\"imageRendering\", \"image-rendering\"],\n [\"letterSpacing\", \"letter-spacing\"],\n [\"lightingColor\", \"lighting-color\"],\n [\"markerEnd\", \"marker-end\"],\n [\"markerMid\", \"marker-mid\"],\n [\"markerStart\", \"marker-start\"],\n [\"overlinePosition\", \"overline-position\"],\n [\"overlineThickness\", \"overline-thickness\"],\n [\"paintOrder\", \"paint-order\"],\n [\"panose-1\", \"panose-1\"],\n [\"pointerEvents\", \"pointer-events\"],\n [\"renderingIntent\", \"rendering-intent\"],\n [\"shapeRendering\", \"shape-rendering\"],\n [\"stopColor\", \"stop-color\"],\n [\"stopOpacity\", \"stop-opacity\"],\n [\"strikethroughPosition\", \"strikethrough-position\"],\n [\"strikethroughThickness\", \"strikethrough-thickness\"],\n [\"strokeDasharray\", \"stroke-dasharray\"],\n [\"strokeDashoffset\", \"stroke-dashoffset\"],\n [\"strokeLinecap\", \"stroke-linecap\"],\n [\"strokeLinejoin\", \"stroke-linejoin\"],\n [\"strokeMiterlimit\", \"stroke-miterlimit\"],\n [\"strokeOpacity\", \"stroke-opacity\"],\n [\"strokeWidth\", \"stroke-width\"],\n [\"textAnchor\", \"text-anchor\"],\n [\"textDecoration\", \"text-decoration\"],\n [\"textRendering\", \"text-rendering\"],\n [\"transformOrigin\", \"transform-origin\"],\n [\"underlinePosition\", \"underline-position\"],\n [\"underlineThickness\", \"underline-thickness\"],\n [\"unicodeBidi\", \"unicode-bidi\"],\n [\"unicodeRange\", \"unicode-range\"],\n [\"unitsPerEm\", \"units-per-em\"],\n [\"vAlphabetic\", \"v-alphabetic\"],\n [\"vHanging\", \"v-hanging\"],\n [\"vIdeographic\", \"v-ideographic\"],\n [\"vMathematical\", \"v-mathematical\"],\n [\"vectorEffect\", \"vector-effect\"],\n [\"vertAdvY\", \"vert-adv-y\"],\n [\"vertOriginX\", \"vert-origin-x\"],\n [\"vertOriginY\", \"vert-origin-y\"],\n [\"wordSpacing\", \"word-spacing\"],\n [\"writingMode\", \"writing-mode\"],\n [\"xmlnsXlink\", \"xmlns:xlink\"],\n [\"xHeight\", \"x-height\"]\n ]),\n isJavaScriptProtocol =\n /^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*:/i;\nfunction sanitizeURL(url) {\n return isJavaScriptProtocol.test(\"\" + url)\n ? \"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')\"\n : url;\n}\nfunction noop$1() {}\nvar currentReplayingEvent = null;\nfunction getEventTarget(nativeEvent) {\n nativeEvent = nativeEvent.target || nativeEvent.srcElement || window;\n nativeEvent.correspondingUseElement &&\n (nativeEvent = nativeEvent.correspondingUseElement);\n return 3 === nativeEvent.nodeType ? nativeEvent.parentNode : nativeEvent;\n}\nvar restoreTarget = null,\n restoreQueue = null;\nfunction restoreStateOfTarget(target) {\n var internalInstance = getInstanceFromNode(target);\n if (internalInstance && (target = internalInstance.stateNode)) {\n var props = target[internalPropsKey] || null;\n a: switch (((target = internalInstance.stateNode), internalInstance.type)) {\n case \"input\":\n updateInput(\n target,\n props.value,\n props.defaultValue,\n props.defaultValue,\n props.checked,\n props.defaultChecked,\n props.type,\n props.name\n );\n internalInstance = props.name;\n if (\"radio\" === props.type && null != internalInstance) {\n for (props = target; props.parentNode; ) props = props.parentNode;\n props = props.querySelectorAll(\n 'input[name=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(\n \"\" + internalInstance\n ) +\n '\"][type=\"radio\"]'\n );\n for (\n internalInstance = 0;\n internalInstance < props.length;\n internalInstance++\n ) {\n var otherNode = props[internalInstance];\n if (otherNode !== target && otherNode.form === target.form) {\n var otherProps = otherNode[internalPropsKey] || null;\n if (!otherProps) throw Error(formatProdErrorMessage(90));\n updateInput(\n otherNode,\n otherProps.value,\n otherProps.defaultValue,\n otherProps.defaultValue,\n otherProps.checked,\n otherProps.defaultChecked,\n otherProps.type,\n otherProps.name\n );\n }\n }\n for (\n internalInstance = 0;\n internalInstance < props.length;\n internalInstance++\n )\n (otherNode = props[internalInstance]),\n otherNode.form === target.form && updateValueIfChanged(otherNode);\n }\n break a;\n case \"textarea\":\n updateTextarea(target, props.value, props.defaultValue);\n break a;\n case \"select\":\n (internalInstance = props.value),\n null != internalInstance &&\n updateOptions(target, !!props.multiple, internalInstance, !1);\n }\n }\n}\nvar isInsideEventHandler = !1;\nfunction batchedUpdates$1(fn, a, b) {\n if (isInsideEventHandler) return fn(a, b);\n isInsideEventHandler = !0;\n try {\n var JSCompiler_inline_result = fn(a);\n return JSCompiler_inline_result;\n } finally {\n if (\n ((isInsideEventHandler = !1),\n null !== restoreTarget || null !== restoreQueue)\n )\n if (\n (flushSyncWork$1(),\n restoreTarget &&\n ((a = restoreTarget),\n (fn = restoreQueue),\n (restoreQueue = restoreTarget = null),\n restoreStateOfTarget(a),\n fn))\n )\n for (a = 0; a < fn.length; a++) restoreStateOfTarget(fn[a]);\n }\n}\nfunction getListener(inst, registrationName) {\n var stateNode = inst.stateNode;\n if (null === stateNode) return null;\n var props = stateNode[internalPropsKey] || null;\n if (null === props) return null;\n stateNode = props[registrationName];\n a: switch (registrationName) {\n case \"onClick\":\n case \"onClickCapture\":\n case \"onDoubleClick\":\n case \"onDoubleClickCapture\":\n case \"onMouseDown\":\n case \"onMouseDownCapture\":\n case \"onMouseMove\":\n case \"onMouseMoveCapture\":\n case \"onMouseUp\":\n case \"onMouseUpCapture\":\n case \"onMouseEnter\":\n (props = !props.disabled) ||\n ((inst = inst.type),\n (props = !(\n \"button\" === inst ||\n \"input\" === inst ||\n \"select\" === inst ||\n \"textarea\" === inst\n )));\n inst = !props;\n break a;\n default:\n inst = !1;\n }\n if (inst) return null;\n if (stateNode && \"function\" !== typeof stateNode)\n throw Error(\n formatProdErrorMessage(231, registrationName, typeof stateNode)\n );\n return stateNode;\n}\nvar canUseDOM = !(\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ),\n passiveBrowserEventsSupported = !1;\nif (canUseDOM)\n try {\n var options = {};\n Object.defineProperty(options, \"passive\", {\n get: function () {\n passiveBrowserEventsSupported = !0;\n }\n });\n window.addEventListener(\"test\", options, options);\n window.removeEventListener(\"test\", options, options);\n } catch (e) {\n passiveBrowserEventsSupported = !1;\n }\nvar root = null,\n startText = null,\n fallbackText = null;\nfunction getData() {\n if (fallbackText) return fallbackText;\n var start,\n startValue = startText,\n startLength = startValue.length,\n end,\n endValue = \"value\" in root ? root.value : root.textContent,\n endLength = endValue.length;\n for (\n start = 0;\n start < startLength && startValue[start] === endValue[start];\n start++\n );\n var minEnd = startLength - start;\n for (\n end = 1;\n end <= minEnd &&\n startValue[startLength - end] === endValue[endLength - end];\n end++\n );\n return (fallbackText = endValue.slice(start, 1 < end ? 1 - end : void 0));\n}\nfunction getEventCharCode(nativeEvent) {\n var keyCode = nativeEvent.keyCode;\n \"charCode\" in nativeEvent\n ? ((nativeEvent = nativeEvent.charCode),\n 0 === nativeEvent && 13 === keyCode && (nativeEvent = 13))\n : (nativeEvent = keyCode);\n 10 === nativeEvent && (nativeEvent = 13);\n return 32 <= nativeEvent || 13 === nativeEvent ? nativeEvent : 0;\n}\nfunction functionThatReturnsTrue() {\n return !0;\n}\nfunction functionThatReturnsFalse() {\n return !1;\n}\nfunction createSyntheticEvent(Interface) {\n function SyntheticBaseEvent(\n reactName,\n reactEventType,\n targetInst,\n nativeEvent,\n nativeEventTarget\n ) {\n this._reactName = reactName;\n this._targetInst = targetInst;\n this.type = reactEventType;\n this.nativeEvent = nativeEvent;\n this.target = nativeEventTarget;\n this.currentTarget = null;\n for (var propName in Interface)\n Interface.hasOwnProperty(propName) &&\n ((reactName = Interface[propName]),\n (this[propName] = reactName\n ? reactName(nativeEvent)\n : nativeEvent[propName]));\n this.isDefaultPrevented = (\n null != nativeEvent.defaultPrevented\n ? nativeEvent.defaultPrevented\n : !1 === nativeEvent.returnValue\n )\n ? functionThatReturnsTrue\n : functionThatReturnsFalse;\n this.isPropagationStopped = functionThatReturnsFalse;\n return this;\n }\n assign(SyntheticBaseEvent.prototype, {\n preventDefault: function () {\n this.defaultPrevented = !0;\n var event = this.nativeEvent;\n event &&\n (event.preventDefault\n ? event.preventDefault()\n : \"unknown\" !== typeof event.returnValue && (event.returnValue = !1),\n (this.isDefaultPrevented = functionThatReturnsTrue));\n },\n stopPropagation: function () {\n var event = this.nativeEvent;\n event &&\n (event.stopPropagation\n ? event.stopPropagation()\n : \"unknown\" !== typeof event.cancelBubble &&\n (event.cancelBubble = !0),\n (this.isPropagationStopped = functionThatReturnsTrue));\n },\n persist: function () {},\n isPersistent: functionThatReturnsTrue\n });\n return SyntheticBaseEvent;\n}\nvar EventInterface = {\n eventPhase: 0,\n bubbles: 0,\n cancelable: 0,\n timeStamp: function (event) {\n return event.timeStamp || Date.now();\n },\n defaultPrevented: 0,\n isTrusted: 0\n },\n SyntheticEvent = createSyntheticEvent(EventInterface),\n UIEventInterface = assign({}, EventInterface, { view: 0, detail: 0 }),\n SyntheticUIEvent = createSyntheticEvent(UIEventInterface),\n lastMovementX,\n lastMovementY,\n lastMouseEvent,\n MouseEventInterface = assign({}, UIEventInterface, {\n screenX: 0,\n screenY: 0,\n clientX: 0,\n clientY: 0,\n pageX: 0,\n pageY: 0,\n ctrlKey: 0,\n shiftKey: 0,\n altKey: 0,\n metaKey: 0,\n getModifierState: getEventModifierState,\n button: 0,\n buttons: 0,\n relatedTarget: function (event) {\n return void 0 === event.relatedTarget\n ? event.fromElement === event.srcElement\n ? event.toElement\n : event.fromElement\n : event.relatedTarget;\n },\n movementX: function (event) {\n if (\"movementX\" in event) return event.movementX;\n event !== lastMouseEvent &&\n (lastMouseEvent && \"mousemove\" === event.type\n ? ((lastMovementX = event.screenX - lastMouseEvent.screenX),\n (lastMovementY = event.screenY - lastMouseEvent.screenY))\n : (lastMovementY = lastMovementX = 0),\n (lastMouseEvent = event));\n return lastMovementX;\n },\n movementY: function (event) {\n return \"movementY\" in event ? event.movementY : lastMovementY;\n }\n }),\n SyntheticMouseEvent = createSyntheticEvent(MouseEventInterface),\n DragEventInterface = assign({}, MouseEventInterface, { dataTransfer: 0 }),\n SyntheticDragEvent = createSyntheticEvent(DragEventInterface),\n FocusEventInterface = assign({}, UIEventInterface, { relatedTarget: 0 }),\n SyntheticFocusEvent = createSyntheticEvent(FocusEventInterface),\n AnimationEventInterface = assign({}, EventInterface, {\n animationName: 0,\n elapsedTime: 0,\n pseudoElement: 0\n }),\n SyntheticAnimationEvent = createSyntheticEvent(AnimationEventInterface),\n ClipboardEventInterface = assign({}, EventInterface, {\n clipboardData: function (event) {\n return \"clipboardData\" in event\n ? event.clipboardData\n : window.clipboardData;\n }\n }),\n SyntheticClipboardEvent = createSyntheticEvent(ClipboardEventInterface),\n CompositionEventInterface = assign({}, EventInterface, { data: 0 }),\n SyntheticCompositionEvent = createSyntheticEvent(CompositionEventInterface),\n normalizeKey = {\n Esc: \"Escape\",\n Spacebar: \" \",\n Left: \"ArrowLeft\",\n Up: \"ArrowUp\",\n Right: \"ArrowRight\",\n Down: \"ArrowDown\",\n Del: \"Delete\",\n Win: \"OS\",\n Menu: \"ContextMenu\",\n Apps: \"ContextMenu\",\n Scroll: \"ScrollLock\",\n MozPrintableKey: \"Unidentified\"\n },\n translateToKey = {\n 8: \"Backspace\",\n 9: \"Tab\",\n 12: \"Clear\",\n 13: \"Enter\",\n 16: \"Shift\",\n 17: \"Control\",\n 18: \"Alt\",\n 19: \"Pause\",\n 20: \"CapsLock\",\n 27: \"Escape\",\n 32: \" \",\n 33: \"PageUp\",\n 34: \"PageDown\",\n 35: \"End\",\n 36: \"Home\",\n 37: \"ArrowLeft\",\n 38: \"ArrowUp\",\n 39: \"ArrowRight\",\n 40: \"ArrowDown\",\n 45: \"Insert\",\n 46: \"Delete\",\n 112: \"F1\",\n 113: \"F2\",\n 114: \"F3\",\n 115: \"F4\",\n 116: \"F5\",\n 117: \"F6\",\n 118: \"F7\",\n 119: \"F8\",\n 120: \"F9\",\n 121: \"F10\",\n 122: \"F11\",\n 123: \"F12\",\n 144: \"NumLock\",\n 145: \"ScrollLock\",\n 224: \"Meta\"\n },\n modifierKeyToProp = {\n Alt: \"altKey\",\n Control: \"ctrlKey\",\n Meta: \"metaKey\",\n Shift: \"shiftKey\"\n };\nfunction modifierStateGetter(keyArg) {\n var nativeEvent = this.nativeEvent;\n return nativeEvent.getModifierState\n ? nativeEvent.getModifierState(keyArg)\n : (keyArg = modifierKeyToProp[keyArg])\n ? !!nativeEvent[keyArg]\n : !1;\n}\nfunction getEventModifierState() {\n return modifierStateGetter;\n}\nvar KeyboardEventInterface = assign({}, UIEventInterface, {\n key: function (nativeEvent) {\n if (nativeEvent.key) {\n var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\n if (\"Unidentified\" !== key) return key;\n }\n return \"keypress\" === nativeEvent.type\n ? ((nativeEvent = getEventCharCode(nativeEvent)),\n 13 === nativeEvent ? \"Enter\" : String.fromCharCode(nativeEvent))\n : \"keydown\" === nativeEvent.type || \"keyup\" === nativeEvent.type\n ? translateToKey[nativeEvent.keyCode] || \"Unidentified\"\n : \"\";\n },\n code: 0,\n location: 0,\n ctrlKey: 0,\n shiftKey: 0,\n altKey: 0,\n metaKey: 0,\n repeat: 0,\n locale: 0,\n getModifierState: getEventModifierState,\n charCode: function (event) {\n return \"keypress\" === event.type ? getEventCharCode(event) : 0;\n },\n keyCode: function (event) {\n return \"keydown\" === event.type || \"keyup\" === event.type\n ? event.keyCode\n : 0;\n },\n which: function (event) {\n return \"keypress\" === event.type\n ? getEventCharCode(event)\n : \"keydown\" === event.type || \"keyup\" === event.type\n ? event.keyCode\n : 0;\n }\n }),\n SyntheticKeyboardEvent = createSyntheticEvent(KeyboardEventInterface),\n PointerEventInterface = assign({}, MouseEventInterface, {\n pointerId: 0,\n width: 0,\n height: 0,\n pressure: 0,\n tangentialPressure: 0,\n tiltX: 0,\n tiltY: 0,\n twist: 0,\n pointerType: 0,\n isPrimary: 0\n }),\n SyntheticPointerEvent = createSyntheticEvent(PointerEventInterface),\n TouchEventInterface = assign({}, UIEventInterface, {\n touches: 0,\n targetTouches: 0,\n changedTouches: 0,\n altKey: 0,\n metaKey: 0,\n ctrlKey: 0,\n shiftKey: 0,\n getModifierState: getEventModifierState\n }),\n SyntheticTouchEvent = createSyntheticEvent(TouchEventInterface),\n TransitionEventInterface = assign({}, EventInterface, {\n propertyName: 0,\n elapsedTime: 0,\n pseudoElement: 0\n }),\n SyntheticTransitionEvent = createSyntheticEvent(TransitionEventInterface),\n WheelEventInterface = assign({}, MouseEventInterface, {\n deltaX: function (event) {\n return \"deltaX\" in event\n ? event.deltaX\n : \"wheelDeltaX\" in event\n ? -event.wheelDeltaX\n : 0;\n },\n deltaY: function (event) {\n return \"deltaY\" in event\n ? event.deltaY\n : \"wheelDeltaY\" in event\n ? -event.wheelDeltaY\n : \"wheelDelta\" in event\n ? -event.wheelDelta\n : 0;\n },\n deltaZ: 0,\n deltaMode: 0\n }),\n SyntheticWheelEvent = createSyntheticEvent(WheelEventInterface),\n ToggleEventInterface = assign({}, EventInterface, {\n newState: 0,\n oldState: 0\n }),\n SyntheticToggleEvent = createSyntheticEvent(ToggleEventInterface),\n END_KEYCODES = [9, 13, 27, 32],\n canUseCompositionEvent = canUseDOM && \"CompositionEvent\" in window,\n documentMode = null;\ncanUseDOM &&\n \"documentMode\" in document &&\n (documentMode = document.documentMode);\nvar canUseTextInputEvent = canUseDOM && \"TextEvent\" in window && !documentMode,\n useFallbackCompositionData =\n canUseDOM &&\n (!canUseCompositionEvent ||\n (documentMode && 8 < documentMode && 11 >= documentMode)),\n SPACEBAR_CHAR = String.fromCharCode(32),\n hasSpaceKeypress = !1;\nfunction isFallbackCompositionEnd(domEventName, nativeEvent) {\n switch (domEventName) {\n case \"keyup\":\n return -1 !== END_KEYCODES.indexOf(nativeEvent.keyCode);\n case \"keydown\":\n return 229 !== nativeEvent.keyCode;\n case \"keypress\":\n case \"mousedown\":\n case \"focusout\":\n return !0;\n default:\n return !1;\n }\n}\nfunction getDataFromCustomEvent(nativeEvent) {\n nativeEvent = nativeEvent.detail;\n return \"object\" === typeof nativeEvent && \"data\" in nativeEvent\n ? nativeEvent.data\n : null;\n}\nvar isComposing = !1;\nfunction getNativeBeforeInputChars(domEventName, nativeEvent) {\n switch (domEventName) {\n case \"compositionend\":\n return getDataFromCustomEvent(nativeEvent);\n case \"keypress\":\n if (32 !== nativeEvent.which) return null;\n hasSpaceKeypress = !0;\n return SPACEBAR_CHAR;\n case \"textInput\":\n return (\n (domEventName = nativeEvent.data),\n domEventName === SPACEBAR_CHAR && hasSpaceKeypress ? null : domEventName\n );\n default:\n return null;\n }\n}\nfunction getFallbackBeforeInputChars(domEventName, nativeEvent) {\n if (isComposing)\n return \"compositionend\" === domEventName ||\n (!canUseCompositionEvent &&\n isFallbackCompositionEnd(domEventName, nativeEvent))\n ? ((domEventName = getData()),\n (fallbackText = startText = root = null),\n (isComposing = !1),\n domEventName)\n : null;\n switch (domEventName) {\n case \"paste\":\n return null;\n case \"keypress\":\n if (\n !(nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) ||\n (nativeEvent.ctrlKey && nativeEvent.altKey)\n ) {\n if (nativeEvent.char && 1 < nativeEvent.char.length)\n return nativeEvent.char;\n if (nativeEvent.which) return String.fromCharCode(nativeEvent.which);\n }\n return null;\n case \"compositionend\":\n return useFallbackCompositionData && \"ko\" !== nativeEvent.locale\n ? null\n : nativeEvent.data;\n default:\n return null;\n }\n}\nvar supportedInputTypes = {\n color: !0,\n date: !0,\n datetime: !0,\n \"datetime-local\": !0,\n email: !0,\n month: !0,\n number: !0,\n password: !0,\n range: !0,\n search: !0,\n tel: !0,\n text: !0,\n time: !0,\n url: !0,\n week: !0\n};\nfunction isTextInputElement(elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n return \"input\" === nodeName\n ? !!supportedInputTypes[elem.type]\n : \"textarea\" === nodeName\n ? !0\n : !1;\n}\nfunction createAndAccumulateChangeEvent(\n dispatchQueue,\n inst,\n nativeEvent,\n target\n) {\n restoreTarget\n ? restoreQueue\n ? restoreQueue.push(target)\n : (restoreQueue = [target])\n : (restoreTarget = target);\n inst = accumulateTwoPhaseListeners(inst, \"onChange\");\n 0 < inst.length &&\n ((nativeEvent = new SyntheticEvent(\n \"onChange\",\n \"change\",\n null,\n nativeEvent,\n target\n )),\n dispatchQueue.push({ event: nativeEvent, listeners: inst }));\n}\nvar activeElement$1 = null,\n activeElementInst$1 = null;\nfunction runEventInBatch(dispatchQueue) {\n processDispatchQueue(dispatchQueue, 0);\n}\nfunction getInstIfValueChanged(targetInst) {\n var targetNode = getNodeFromInstance(targetInst);\n if (updateValueIfChanged(targetNode)) return targetInst;\n}\nfunction getTargetInstForChangeEvent(domEventName, targetInst) {\n if (\"change\" === domEventName) return targetInst;\n}\nvar isInputEventSupported = !1;\nif (canUseDOM) {\n var JSCompiler_inline_result$jscomp$286;\n if (canUseDOM) {\n var isSupported$jscomp$inline_427 = \"oninput\" in document;\n if (!isSupported$jscomp$inline_427) {\n var element$jscomp$inline_428 = document.createElement(\"div\");\n element$jscomp$inline_428.setAttribute(\"oninput\", \"return;\");\n isSupported$jscomp$inline_427 =\n \"function\" === typeof element$jscomp$inline_428.oninput;\n }\n JSCompiler_inline_result$jscomp$286 = isSupported$jscomp$inline_427;\n } else JSCompiler_inline_result$jscomp$286 = !1;\n isInputEventSupported =\n JSCompiler_inline_result$jscomp$286 &&\n (!document.documentMode || 9 < document.documentMode);\n}\nfunction stopWatchingForValueChange() {\n activeElement$1 &&\n (activeElement$1.detachEvent(\"onpropertychange\", handlePropertyChange),\n (activeElementInst$1 = activeElement$1 = null));\n}\nfunction handlePropertyChange(nativeEvent) {\n if (\n \"value\" === nativeEvent.propertyName &&\n getInstIfValueChanged(activeElementInst$1)\n ) {\n var dispatchQueue = [];\n createAndAccumulateChangeEvent(\n dispatchQueue,\n activeElementInst$1,\n nativeEvent,\n getEventTarget(nativeEvent)\n );\n batchedUpdates$1(runEventInBatch, dispatchQueue);\n }\n}\nfunction handleEventsForInputEventPolyfill(domEventName, target, targetInst) {\n \"focusin\" === domEventName\n ? (stopWatchingForValueChange(),\n (activeElement$1 = target),\n (activeElementInst$1 = targetInst),\n activeElement$1.attachEvent(\"onpropertychange\", handlePropertyChange))\n : \"focusout\" === domEventName && stopWatchingForValueChange();\n}\nfunction getTargetInstForInputEventPolyfill(domEventName) {\n if (\n \"selectionchange\" === domEventName ||\n \"keyup\" === domEventName ||\n \"keydown\" === domEventName\n )\n return getInstIfValueChanged(activeElementInst$1);\n}\nfunction getTargetInstForClickEvent(domEventName, targetInst) {\n if (\"click\" === domEventName) return getInstIfValueChanged(targetInst);\n}\nfunction getTargetInstForInputOrChangeEvent(domEventName, targetInst) {\n if (\"input\" === domEventName || \"change\" === domEventName)\n return getInstIfValueChanged(targetInst);\n}\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is;\nfunction shallowEqual(objA, objB) {\n if (objectIs(objA, objB)) return !0;\n if (\n \"object\" !== typeof objA ||\n null === objA ||\n \"object\" !== typeof objB ||\n null === objB\n )\n return !1;\n var keysA = Object.keys(objA),\n keysB = Object.keys(objB);\n if (keysA.length !== keysB.length) return !1;\n for (keysB = 0; keysB < keysA.length; keysB++) {\n var currentKey = keysA[keysB];\n if (\n !hasOwnProperty.call(objB, currentKey) ||\n !objectIs(objA[currentKey], objB[currentKey])\n )\n return !1;\n }\n return !0;\n}\nfunction getLeafNode(node) {\n for (; node && node.firstChild; ) node = node.firstChild;\n return node;\n}\nfunction getNodeForCharacterOffset(root, offset) {\n var node = getLeafNode(root);\n root = 0;\n for (var nodeEnd; node; ) {\n if (3 === node.nodeType) {\n nodeEnd = root + node.textContent.length;\n if (root <= offset && nodeEnd >= offset)\n return { node: node, offset: offset - root };\n root = nodeEnd;\n }\n a: {\n for (; node; ) {\n if (node.nextSibling) {\n node = node.nextSibling;\n break a;\n }\n node = node.parentNode;\n }\n node = void 0;\n }\n node = getLeafNode(node);\n }\n}\nfunction containsNode(outerNode, innerNode) {\n return outerNode && innerNode\n ? outerNode === innerNode\n ? !0\n : outerNode && 3 === outerNode.nodeType\n ? !1\n : innerNode && 3 === innerNode.nodeType\n ? containsNode(outerNode, innerNode.parentNode)\n : \"contains\" in outerNode\n ? outerNode.contains(innerNode)\n : outerNode.compareDocumentPosition\n ? !!(outerNode.compareDocumentPosition(innerNode) & 16)\n : !1\n : !1;\n}\nfunction getActiveElementDeep(containerInfo) {\n containerInfo =\n null != containerInfo &&\n null != containerInfo.ownerDocument &&\n null != containerInfo.ownerDocument.defaultView\n ? containerInfo.ownerDocument.defaultView\n : window;\n for (\n var element = getActiveElement(containerInfo.document);\n element instanceof containerInfo.HTMLIFrameElement;\n\n ) {\n try {\n var JSCompiler_inline_result =\n \"string\" === typeof element.contentWindow.location.href;\n } catch (err) {\n JSCompiler_inline_result = !1;\n }\n if (JSCompiler_inline_result) containerInfo = element.contentWindow;\n else break;\n element = getActiveElement(containerInfo.document);\n }\n return element;\n}\nfunction hasSelectionCapabilities(elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n return (\n nodeName &&\n ((\"input\" === nodeName &&\n (\"text\" === elem.type ||\n \"search\" === elem.type ||\n \"tel\" === elem.type ||\n \"url\" === elem.type ||\n \"password\" === elem.type)) ||\n \"textarea\" === nodeName ||\n \"true\" === elem.contentEditable)\n );\n}\nvar skipSelectionChangeEvent =\n canUseDOM && \"documentMode\" in document && 11 >= document.documentMode,\n activeElement = null,\n activeElementInst = null,\n lastSelection = null,\n mouseDown = !1;\nfunction constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget) {\n var doc =\n nativeEventTarget.window === nativeEventTarget\n ? nativeEventTarget.document\n : 9 === nativeEventTarget.nodeType\n ? nativeEventTarget\n : nativeEventTarget.ownerDocument;\n mouseDown ||\n null == activeElement ||\n activeElement !== getActiveElement(doc) ||\n ((doc = activeElement),\n \"selectionStart\" in doc && hasSelectionCapabilities(doc)\n ? (doc = { start: doc.selectionStart, end: doc.selectionEnd })\n : ((doc = (\n (doc.ownerDocument && doc.ownerDocument.defaultView) ||\n window\n ).getSelection()),\n (doc = {\n anchorNode: doc.anchorNode,\n anchorOffset: doc.anchorOffset,\n focusNode: doc.focusNode,\n focusOffset: doc.focusOffset\n })),\n (lastSelection && shallowEqual(lastSelection, doc)) ||\n ((lastSelection = doc),\n (doc = accumulateTwoPhaseListeners(activeElementInst, \"onSelect\")),\n 0 < doc.length &&\n ((nativeEvent = new SyntheticEvent(\n \"onSelect\",\n \"select\",\n null,\n nativeEvent,\n nativeEventTarget\n )),\n dispatchQueue.push({ event: nativeEvent, listeners: doc }),\n (nativeEvent.target = activeElement))));\n}\nfunction makePrefixMap(styleProp, eventName) {\n var prefixes = {};\n prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n prefixes[\"Webkit\" + styleProp] = \"webkit\" + eventName;\n prefixes[\"Moz\" + styleProp] = \"moz\" + eventName;\n return prefixes;\n}\nvar vendorPrefixes = {\n animationend: makePrefixMap(\"Animation\", \"AnimationEnd\"),\n animationiteration: makePrefixMap(\"Animation\", \"AnimationIteration\"),\n animationstart: makePrefixMap(\"Animation\", \"AnimationStart\"),\n transitionrun: makePrefixMap(\"Transition\", \"TransitionRun\"),\n transitionstart: makePrefixMap(\"Transition\", \"TransitionStart\"),\n transitioncancel: makePrefixMap(\"Transition\", \"TransitionCancel\"),\n transitionend: makePrefixMap(\"Transition\", \"TransitionEnd\")\n },\n prefixedEventNames = {},\n style = {};\ncanUseDOM &&\n ((style = document.createElement(\"div\").style),\n \"AnimationEvent\" in window ||\n (delete vendorPrefixes.animationend.animation,\n delete vendorPrefixes.animationiteration.animation,\n delete vendorPrefixes.animationstart.animation),\n \"TransitionEvent\" in window ||\n delete vendorPrefixes.transitionend.transition);\nfunction getVendorPrefixedEventName(eventName) {\n if (prefixedEventNames[eventName]) return prefixedEventNames[eventName];\n if (!vendorPrefixes[eventName]) return eventName;\n var prefixMap = vendorPrefixes[eventName],\n styleProp;\n for (styleProp in prefixMap)\n if (prefixMap.hasOwnProperty(styleProp) && styleProp in style)\n return (prefixedEventNames[eventName] = prefixMap[styleProp]);\n return eventName;\n}\nvar ANIMATION_END = getVendorPrefixedEventName(\"animationend\"),\n ANIMATION_ITERATION = getVendorPrefixedEventName(\"animationiteration\"),\n ANIMATION_START = getVendorPrefixedEventName(\"animationstart\"),\n TRANSITION_RUN = getVendorPrefixedEventName(\"transitionrun\"),\n TRANSITION_START = getVendorPrefixedEventName(\"transitionstart\"),\n TRANSITION_CANCEL = getVendorPrefixedEventName(\"transitioncancel\"),\n TRANSITION_END = getVendorPrefixedEventName(\"transitionend\"),\n topLevelEventsToReactNames = new Map(),\n simpleEventPluginEvents =\n \"abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel\".split(\n \" \"\n );\nsimpleEventPluginEvents.push(\"scrollEnd\");\nfunction registerSimpleEvent(domEventName, reactName) {\n topLevelEventsToReactNames.set(domEventName, reactName);\n registerTwoPhaseEvent(reactName, [domEventName]);\n}\nvar reportGlobalError =\n \"function\" === typeof reportError\n ? reportError\n : function (error) {\n if (\n \"object\" === typeof window &&\n \"function\" === typeof window.ErrorEvent\n ) {\n var event = new window.ErrorEvent(\"error\", {\n bubbles: !0,\n cancelable: !0,\n message:\n \"object\" === typeof error &&\n null !== error &&\n \"string\" === typeof error.message\n ? String(error.message)\n : String(error),\n error: error\n });\n if (!window.dispatchEvent(event)) return;\n } else if (\n \"object\" === typeof process &&\n \"function\" === typeof process.emit\n ) {\n process.emit(\"uncaughtException\", error);\n return;\n }\n console.error(error);\n },\n concurrentQueues = [],\n concurrentQueuesIndex = 0,\n concurrentlyUpdatedLanes = 0;\nfunction finishQueueingConcurrentUpdates() {\n for (\n var endIndex = concurrentQueuesIndex,\n i = (concurrentlyUpdatedLanes = concurrentQueuesIndex = 0);\n i < endIndex;\n\n ) {\n var fiber = concurrentQueues[i];\n concurrentQueues[i++] = null;\n var queue = concurrentQueues[i];\n concurrentQueues[i++] = null;\n var update = concurrentQueues[i];\n concurrentQueues[i++] = null;\n var lane = concurrentQueues[i];\n concurrentQueues[i++] = null;\n if (null !== queue && null !== update) {\n var pending = queue.pending;\n null === pending\n ? (update.next = update)\n : ((update.next = pending.next), (pending.next = update));\n queue.pending = update;\n }\n 0 !== lane && markUpdateLaneFromFiberToRoot(fiber, update, lane);\n }\n}\nfunction enqueueUpdate$1(fiber, queue, update, lane) {\n concurrentQueues[concurrentQueuesIndex++] = fiber;\n concurrentQueues[concurrentQueuesIndex++] = queue;\n concurrentQueues[concurrentQueuesIndex++] = update;\n concurrentQueues[concurrentQueuesIndex++] = lane;\n concurrentlyUpdatedLanes |= lane;\n fiber.lanes |= lane;\n fiber = fiber.alternate;\n null !== fiber && (fiber.lanes |= lane);\n}\nfunction enqueueConcurrentHookUpdate(fiber, queue, update, lane) {\n enqueueUpdate$1(fiber, queue, update, lane);\n return getRootForUpdatedFiber(fiber);\n}\nfunction enqueueConcurrentRenderForLane(fiber, lane) {\n enqueueUpdate$1(fiber, null, null, lane);\n return getRootForUpdatedFiber(fiber);\n}\nfunction markUpdateLaneFromFiberToRoot(sourceFiber, update, lane) {\n sourceFiber.lanes |= lane;\n var alternate = sourceFiber.alternate;\n null !== alternate && (alternate.lanes |= lane);\n for (var isHidden = !1, parent = sourceFiber.return; null !== parent; )\n (parent.childLanes |= lane),\n (alternate = parent.alternate),\n null !== alternate && (alternate.childLanes |= lane),\n 22 === parent.tag &&\n ((sourceFiber = parent.stateNode),\n null === sourceFiber || sourceFiber._visibility & 1 || (isHidden = !0)),\n (sourceFiber = parent),\n (parent = parent.return);\n return 3 === sourceFiber.tag\n ? ((parent = sourceFiber.stateNode),\n isHidden &&\n null !== update &&\n ((isHidden = 31 - clz32(lane)),\n (sourceFiber = parent.hiddenUpdates),\n (alternate = sourceFiber[isHidden]),\n null === alternate\n ? (sourceFiber[isHidden] = [update])\n : alternate.push(update),\n (update.lane = lane | 536870912)),\n parent)\n : null;\n}\nfunction getRootForUpdatedFiber(sourceFiber) {\n if (50 < nestedUpdateCount)\n throw (\n ((nestedUpdateCount = 0),\n (rootWithNestedUpdates = null),\n Error(formatProdErrorMessage(185)))\n );\n for (var parent = sourceFiber.return; null !== parent; )\n (sourceFiber = parent), (parent = sourceFiber.return);\n return 3 === sourceFiber.tag ? sourceFiber.stateNode : null;\n}\nvar emptyContextObject = {};\nfunction FiberNode(tag, pendingProps, key, mode) {\n this.tag = tag;\n this.key = key;\n this.sibling =\n this.child =\n this.return =\n this.stateNode =\n this.type =\n this.elementType =\n null;\n this.index = 0;\n this.refCleanup = this.ref = null;\n this.pendingProps = pendingProps;\n this.dependencies =\n this.memoizedState =\n this.updateQueue =\n this.memoizedProps =\n null;\n this.mode = mode;\n this.subtreeFlags = this.flags = 0;\n this.deletions = null;\n this.childLanes = this.lanes = 0;\n this.alternate = null;\n}\nfunction createFiberImplClass(tag, pendingProps, key, mode) {\n return new FiberNode(tag, pendingProps, key, mode);\n}\nfunction shouldConstruct(Component) {\n Component = Component.prototype;\n return !(!Component || !Component.isReactComponent);\n}\nfunction createWorkInProgress(current, pendingProps) {\n var workInProgress = current.alternate;\n null === workInProgress\n ? ((workInProgress = createFiberImplClass(\n current.tag,\n pendingProps,\n current.key,\n current.mode\n )),\n (workInProgress.elementType = current.elementType),\n (workInProgress.type = current.type),\n (workInProgress.stateNode = current.stateNode),\n (workInProgress.alternate = current),\n (current.alternate = workInProgress))\n : ((workInProgress.pendingProps = pendingProps),\n (workInProgress.type = current.type),\n (workInProgress.flags = 0),\n (workInProgress.subtreeFlags = 0),\n (workInProgress.deletions = null));\n workInProgress.flags = current.flags & 65011712;\n workInProgress.childLanes = current.childLanes;\n workInProgress.lanes = current.lanes;\n workInProgress.child = current.child;\n workInProgress.memoizedProps = current.memoizedProps;\n workInProgress.memoizedState = current.memoizedState;\n workInProgress.updateQueue = current.updateQueue;\n pendingProps = current.dependencies;\n workInProgress.dependencies =\n null === pendingProps\n ? null\n : { lanes: pendingProps.lanes, firstContext: pendingProps.firstContext };\n workInProgress.sibling = current.sibling;\n workInProgress.index = current.index;\n workInProgress.ref = current.ref;\n workInProgress.refCleanup = current.refCleanup;\n return workInProgress;\n}\nfunction resetWorkInProgress(workInProgress, renderLanes) {\n workInProgress.flags &= 65011714;\n var current = workInProgress.alternate;\n null === current\n ? ((workInProgress.childLanes = 0),\n (workInProgress.lanes = renderLanes),\n (workInProgress.child = null),\n (workInProgress.subtreeFlags = 0),\n (workInProgress.memoizedProps = null),\n (workInProgress.memoizedState = null),\n (workInProgress.updateQueue = null),\n (workInProgress.dependencies = null),\n (workInProgress.stateNode = null))\n : ((workInProgress.childLanes = current.childLanes),\n (workInProgress.lanes = current.lanes),\n (workInProgress.child = current.child),\n (workInProgress.subtreeFlags = 0),\n (workInProgress.deletions = null),\n (workInProgress.memoizedProps = current.memoizedProps),\n (workInProgress.memoizedState = current.memoizedState),\n (workInProgress.updateQueue = current.updateQueue),\n (workInProgress.type = current.type),\n (renderLanes = current.dependencies),\n (workInProgress.dependencies =\n null === renderLanes\n ? null\n : {\n lanes: renderLanes.lanes,\n firstContext: renderLanes.firstContext\n }));\n return workInProgress;\n}\nfunction createFiberFromTypeAndProps(\n type,\n key,\n pendingProps,\n owner,\n mode,\n lanes\n) {\n var fiberTag = 0;\n owner = type;\n if (\"function\" === typeof type) shouldConstruct(type) && (fiberTag = 1);\n else if (\"string\" === typeof type)\n fiberTag = isHostHoistableType(\n type,\n pendingProps,\n contextStackCursor.current\n )\n ? 26\n : \"html\" === type || \"head\" === type || \"body\" === type\n ? 27\n : 5;\n else\n a: switch (type) {\n case REACT_ACTIVITY_TYPE:\n return (\n (type = createFiberImplClass(31, pendingProps, key, mode)),\n (type.elementType = REACT_ACTIVITY_TYPE),\n (type.lanes = lanes),\n type\n );\n case REACT_FRAGMENT_TYPE:\n return createFiberFromFragment(pendingProps.children, mode, lanes, key);\n case REACT_STRICT_MODE_TYPE:\n fiberTag = 8;\n mode |= 24;\n break;\n case REACT_PROFILER_TYPE:\n return (\n (type = createFiberImplClass(12, pendingProps, key, mode | 2)),\n (type.elementType = REACT_PROFILER_TYPE),\n (type.lanes = lanes),\n type\n );\n case REACT_SUSPENSE_TYPE:\n return (\n (type = createFiberImplClass(13, pendingProps, key, mode)),\n (type.elementType = REACT_SUSPENSE_TYPE),\n (type.lanes = lanes),\n type\n );\n case REACT_SUSPENSE_LIST_TYPE:\n return (\n (type = createFiberImplClass(19, pendingProps, key, mode)),\n (type.elementType = REACT_SUSPENSE_LIST_TYPE),\n (type.lanes = lanes),\n type\n );\n default:\n if (\"object\" === typeof type && null !== type)\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n fiberTag = 10;\n break a;\n case REACT_CONSUMER_TYPE:\n fiberTag = 9;\n break a;\n case REACT_FORWARD_REF_TYPE:\n fiberTag = 11;\n break a;\n case REACT_MEMO_TYPE:\n fiberTag = 14;\n break a;\n case REACT_LAZY_TYPE:\n fiberTag = 16;\n owner = null;\n break a;\n }\n fiberTag = 29;\n pendingProps = Error(\n formatProdErrorMessage(130, null === type ? \"null\" : typeof type, \"\")\n );\n owner = null;\n }\n key = createFiberImplClass(fiberTag, pendingProps, key, mode);\n key.elementType = type;\n key.type = owner;\n key.lanes = lanes;\n return key;\n}\nfunction createFiberFromFragment(elements, mode, lanes, key) {\n elements = createFiberImplClass(7, elements, key, mode);\n elements.lanes = lanes;\n return elements;\n}\nfunction createFiberFromText(content, mode, lanes) {\n content = createFiberImplClass(6, content, null, mode);\n content.lanes = lanes;\n return content;\n}\nfunction createFiberFromDehydratedFragment(dehydratedNode) {\n var fiber = createFiberImplClass(18, null, null, 0);\n fiber.stateNode = dehydratedNode;\n return fiber;\n}\nfunction createFiberFromPortal(portal, mode, lanes) {\n mode = createFiberImplClass(\n 4,\n null !== portal.children ? portal.children : [],\n portal.key,\n mode\n );\n mode.lanes = lanes;\n mode.stateNode = {\n containerInfo: portal.containerInfo,\n pendingChildren: null,\n implementation: portal.implementation\n };\n return mode;\n}\nvar CapturedStacks = new WeakMap();\nfunction createCapturedValueAtFiber(value, source) {\n if (\"object\" === typeof value && null !== value) {\n var existing = CapturedStacks.get(value);\n if (void 0 !== existing) return existing;\n source = {\n value: value,\n source: source,\n stack: getStackByFiberInDevAndProd(source)\n };\n CapturedStacks.set(value, source);\n return source;\n }\n return {\n value: value,\n source: source,\n stack: getStackByFiberInDevAndProd(source)\n };\n}\nvar forkStack = [],\n forkStackIndex = 0,\n treeForkProvider = null,\n treeForkCount = 0,\n idStack = [],\n idStackIndex = 0,\n treeContextProvider = null,\n treeContextId = 1,\n treeContextOverflow = \"\";\nfunction pushTreeFork(workInProgress, totalChildren) {\n forkStack[forkStackIndex++] = treeForkCount;\n forkStack[forkStackIndex++] = treeForkProvider;\n treeForkProvider = workInProgress;\n treeForkCount = totalChildren;\n}\nfunction pushTreeId(workInProgress, totalChildren, index) {\n idStack[idStackIndex++] = treeContextId;\n idStack[idStackIndex++] = treeContextOverflow;\n idStack[idStackIndex++] = treeContextProvider;\n treeContextProvider = workInProgress;\n var baseIdWithLeadingBit = treeContextId;\n workInProgress = treeContextOverflow;\n var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1;\n baseIdWithLeadingBit &= ~(1 << baseLength);\n index += 1;\n var length = 32 - clz32(totalChildren) + baseLength;\n if (30 < length) {\n var numberOfOverflowBits = baseLength - (baseLength % 5);\n length = (\n baseIdWithLeadingBit &\n ((1 << numberOfOverflowBits) - 1)\n ).toString(32);\n baseIdWithLeadingBit >>= numberOfOverflowBits;\n baseLength -= numberOfOverflowBits;\n treeContextId =\n (1 << (32 - clz32(totalChildren) + baseLength)) |\n (index << baseLength) |\n baseIdWithLeadingBit;\n treeContextOverflow = length + workInProgress;\n } else\n (treeContextId =\n (1 << length) | (index << baseLength) | baseIdWithLeadingBit),\n (treeContextOverflow = workInProgress);\n}\nfunction pushMaterializedTreeId(workInProgress) {\n null !== workInProgress.return &&\n (pushTreeFork(workInProgress, 1), pushTreeId(workInProgress, 1, 0));\n}\nfunction popTreeContext(workInProgress) {\n for (; workInProgress === treeForkProvider; )\n (treeForkProvider = forkStack[--forkStackIndex]),\n (forkStack[forkStackIndex] = null),\n (treeForkCount = forkStack[--forkStackIndex]),\n (forkStack[forkStackIndex] = null);\n for (; workInProgress === treeContextProvider; )\n (treeContextProvider = idStack[--idStackIndex]),\n (idStack[idStackIndex] = null),\n (treeContextOverflow = idStack[--idStackIndex]),\n (idStack[idStackIndex] = null),\n (treeContextId = idStack[--idStackIndex]),\n (idStack[idStackIndex] = null);\n}\nfunction restoreSuspendedTreeContext(workInProgress, suspendedContext) {\n idStack[idStackIndex++] = treeContextId;\n idStack[idStackIndex++] = treeContextOverflow;\n idStack[idStackIndex++] = treeContextProvider;\n treeContextId = suspendedContext.id;\n treeContextOverflow = suspendedContext.overflow;\n treeContextProvider = workInProgress;\n}\nvar hydrationParentFiber = null,\n nextHydratableInstance = null,\n isHydrating = !1,\n hydrationErrors = null,\n rootOrSingletonContext = !1,\n HydrationMismatchException = Error(formatProdErrorMessage(519));\nfunction throwOnHydrationMismatch(fiber) {\n var error = Error(\n formatProdErrorMessage(\n 418,\n 1 < arguments.length && void 0 !== arguments[1] && arguments[1]\n ? \"text\"\n : \"HTML\",\n \"\"\n )\n );\n queueHydrationError(createCapturedValueAtFiber(error, fiber));\n throw HydrationMismatchException;\n}\nfunction prepareToHydrateHostInstance(fiber) {\n var instance = fiber.stateNode,\n type = fiber.type,\n props = fiber.memoizedProps;\n instance[internalInstanceKey] = fiber;\n instance[internalPropsKey] = props;\n switch (type) {\n case \"dialog\":\n listenToNonDelegatedEvent(\"cancel\", instance);\n listenToNonDelegatedEvent(\"close\", instance);\n break;\n case \"iframe\":\n case \"object\":\n case \"embed\":\n listenToNonDelegatedEvent(\"load\", instance);\n break;\n case \"video\":\n case \"audio\":\n for (type = 0; type < mediaEventTypes.length; type++)\n listenToNonDelegatedEvent(mediaEventTypes[type], instance);\n break;\n case \"source\":\n listenToNonDelegatedEvent(\"error\", instance);\n break;\n case \"img\":\n case \"image\":\n case \"link\":\n listenToNonDelegatedEvent(\"error\", instance);\n listenToNonDelegatedEvent(\"load\", instance);\n break;\n case \"details\":\n listenToNonDelegatedEvent(\"toggle\", instance);\n break;\n case \"input\":\n listenToNonDelegatedEvent(\"invalid\", instance);\n initInput(\n instance,\n props.value,\n props.defaultValue,\n props.checked,\n props.defaultChecked,\n props.type,\n props.name,\n !0\n );\n break;\n case \"select\":\n listenToNonDelegatedEvent(\"invalid\", instance);\n break;\n case \"textarea\":\n listenToNonDelegatedEvent(\"invalid\", instance),\n initTextarea(instance, props.value, props.defaultValue, props.children);\n }\n type = props.children;\n (\"string\" !== typeof type &&\n \"number\" !== typeof type &&\n \"bigint\" !== typeof type) ||\n instance.textContent === \"\" + type ||\n !0 === props.suppressHydrationWarning ||\n checkForUnmatchedText(instance.textContent, type)\n ? (null != props.popover &&\n (listenToNonDelegatedEvent(\"beforetoggle\", instance),\n listenToNonDelegatedEvent(\"toggle\", instance)),\n null != props.onScroll && listenToNonDelegatedEvent(\"scroll\", instance),\n null != props.onScrollEnd &&\n listenToNonDelegatedEvent(\"scrollend\", instance),\n null != props.onClick && (instance.onclick = noop$1),\n (instance = !0))\n : (instance = !1);\n instance || throwOnHydrationMismatch(fiber, !0);\n}\nfunction popToNextHostParent(fiber) {\n for (hydrationParentFiber = fiber.return; hydrationParentFiber; )\n switch (hydrationParentFiber.tag) {\n case 5:\n case 31:\n case 13:\n rootOrSingletonContext = !1;\n return;\n case 27:\n case 3:\n rootOrSingletonContext = !0;\n return;\n default:\n hydrationParentFiber = hydrationParentFiber.return;\n }\n}\nfunction popHydrationState(fiber) {\n if (fiber !== hydrationParentFiber) return !1;\n if (!isHydrating) return popToNextHostParent(fiber), (isHydrating = !0), !1;\n var tag = fiber.tag,\n JSCompiler_temp;\n if ((JSCompiler_temp = 3 !== tag && 27 !== tag)) {\n if ((JSCompiler_temp = 5 === tag))\n (JSCompiler_temp = fiber.type),\n (JSCompiler_temp =\n !(\"form\" !== JSCompiler_temp && \"button\" !== JSCompiler_temp) ||\n shouldSetTextContent(fiber.type, fiber.memoizedProps));\n JSCompiler_temp = !JSCompiler_temp;\n }\n JSCompiler_temp && nextHydratableInstance && throwOnHydrationMismatch(fiber);\n popToNextHostParent(fiber);\n if (13 === tag) {\n fiber = fiber.memoizedState;\n fiber = null !== fiber ? fiber.dehydrated : null;\n if (!fiber) throw Error(formatProdErrorMessage(317));\n nextHydratableInstance =\n getNextHydratableInstanceAfterHydrationBoundary(fiber);\n } else if (31 === tag) {\n fiber = fiber.memoizedState;\n fiber = null !== fiber ? fiber.dehydrated : null;\n if (!fiber) throw Error(formatProdErrorMessage(317));\n nextHydratableInstance =\n getNextHydratableInstanceAfterHydrationBoundary(fiber);\n } else\n 27 === tag\n ? ((tag = nextHydratableInstance),\n isSingletonScope(fiber.type)\n ? ((fiber = previousHydratableOnEnteringScopedSingleton),\n (previousHydratableOnEnteringScopedSingleton = null),\n (nextHydratableInstance = fiber))\n : (nextHydratableInstance = tag))\n : (nextHydratableInstance = hydrationParentFiber\n ? getNextHydratable(fiber.stateNode.nextSibling)\n : null);\n return !0;\n}\nfunction resetHydrationState() {\n nextHydratableInstance = hydrationParentFiber = null;\n isHydrating = !1;\n}\nfunction upgradeHydrationErrorsToRecoverable() {\n var queuedErrors = hydrationErrors;\n null !== queuedErrors &&\n (null === workInProgressRootRecoverableErrors\n ? (workInProgressRootRecoverableErrors = queuedErrors)\n : workInProgressRootRecoverableErrors.push.apply(\n workInProgressRootRecoverableErrors,\n queuedErrors\n ),\n (hydrationErrors = null));\n return queuedErrors;\n}\nfunction queueHydrationError(error) {\n null === hydrationErrors\n ? (hydrationErrors = [error])\n : hydrationErrors.push(error);\n}\nvar valueCursor = createCursor(null),\n currentlyRenderingFiber$1 = null,\n lastContextDependency = null;\nfunction pushProvider(providerFiber, context, nextValue) {\n push(valueCursor, context._currentValue);\n context._currentValue = nextValue;\n}\nfunction popProvider(context) {\n context._currentValue = valueCursor.current;\n pop(valueCursor);\n}\nfunction scheduleContextWorkOnParentPath(parent, renderLanes, propagationRoot) {\n for (; null !== parent; ) {\n var alternate = parent.alternate;\n (parent.childLanes & renderLanes) !== renderLanes\n ? ((parent.childLanes |= renderLanes),\n null !== alternate && (alternate.childLanes |= renderLanes))\n : null !== alternate &&\n (alternate.childLanes & renderLanes) !== renderLanes &&\n (alternate.childLanes |= renderLanes);\n if (parent === propagationRoot) break;\n parent = parent.return;\n }\n}\nfunction propagateContextChanges(\n workInProgress,\n contexts,\n renderLanes,\n forcePropagateEntireTree\n) {\n var fiber = workInProgress.child;\n null !== fiber && (fiber.return = workInProgress);\n for (; null !== fiber; ) {\n var list = fiber.dependencies;\n if (null !== list) {\n var nextFiber = fiber.child;\n list = list.firstContext;\n a: for (; null !== list; ) {\n var dependency = list;\n list = fiber;\n for (var i = 0; i < contexts.length; i++)\n if (dependency.context === contexts[i]) {\n list.lanes |= renderLanes;\n dependency = list.alternate;\n null !== dependency && (dependency.lanes |= renderLanes);\n scheduleContextWorkOnParentPath(\n list.return,\n renderLanes,\n workInProgress\n );\n forcePropagateEntireTree || (nextFiber = null);\n break a;\n }\n list = dependency.next;\n }\n } else if (18 === fiber.tag) {\n nextFiber = fiber.return;\n if (null === nextFiber) throw Error(formatProdErrorMessage(341));\n nextFiber.lanes |= renderLanes;\n list = nextFiber.alternate;\n null !== list && (list.lanes |= renderLanes);\n scheduleContextWorkOnParentPath(nextFiber, renderLanes, workInProgress);\n nextFiber = null;\n } else nextFiber = fiber.child;\n if (null !== nextFiber) nextFiber.return = fiber;\n else\n for (nextFiber = fiber; null !== nextFiber; ) {\n if (nextFiber === workInProgress) {\n nextFiber = null;\n break;\n }\n fiber = nextFiber.sibling;\n if (null !== fiber) {\n fiber.return = nextFiber.return;\n nextFiber = fiber;\n break;\n }\n nextFiber = nextFiber.return;\n }\n fiber = nextFiber;\n }\n}\nfunction propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n forcePropagateEntireTree\n) {\n current = null;\n for (\n var parent = workInProgress, isInsidePropagationBailout = !1;\n null !== parent;\n\n ) {\n if (!isInsidePropagationBailout)\n if (0 !== (parent.flags & 524288)) isInsidePropagationBailout = !0;\n else if (0 !== (parent.flags & 262144)) break;\n if (10 === parent.tag) {\n var currentParent = parent.alternate;\n if (null === currentParent) throw Error(formatProdErrorMessage(387));\n currentParent = currentParent.memoizedProps;\n if (null !== currentParent) {\n var context = parent.type;\n objectIs(parent.pendingProps.value, currentParent.value) ||\n (null !== current ? current.push(context) : (current = [context]));\n }\n } else if (parent === hostTransitionProviderCursor.current) {\n currentParent = parent.alternate;\n if (null === currentParent) throw Error(formatProdErrorMessage(387));\n currentParent.memoizedState.memoizedState !==\n parent.memoizedState.memoizedState &&\n (null !== current\n ? current.push(HostTransitionContext)\n : (current = [HostTransitionContext]));\n }\n parent = parent.return;\n }\n null !== current &&\n propagateContextChanges(\n workInProgress,\n current,\n renderLanes,\n forcePropagateEntireTree\n );\n workInProgress.flags |= 262144;\n}\nfunction checkIfContextChanged(currentDependencies) {\n for (\n currentDependencies = currentDependencies.firstContext;\n null !== currentDependencies;\n\n ) {\n if (\n !objectIs(\n currentDependencies.context._currentValue,\n currentDependencies.memoizedValue\n )\n )\n return !0;\n currentDependencies = currentDependencies.next;\n }\n return !1;\n}\nfunction prepareToReadContext(workInProgress) {\n currentlyRenderingFiber$1 = workInProgress;\n lastContextDependency = null;\n workInProgress = workInProgress.dependencies;\n null !== workInProgress && (workInProgress.firstContext = null);\n}\nfunction readContext(context) {\n return readContextForConsumer(currentlyRenderingFiber$1, context);\n}\nfunction readContextDuringReconciliation(consumer, context) {\n null === currentlyRenderingFiber$1 && prepareToReadContext(consumer);\n return readContextForConsumer(consumer, context);\n}\nfunction readContextForConsumer(consumer, context) {\n var value = context._currentValue;\n context = { context: context, memoizedValue: value, next: null };\n if (null === lastContextDependency) {\n if (null === consumer) throw Error(formatProdErrorMessage(308));\n lastContextDependency = context;\n consumer.dependencies = { lanes: 0, firstContext: context };\n consumer.flags |= 524288;\n } else lastContextDependency = lastContextDependency.next = context;\n return value;\n}\nvar AbortControllerLocal =\n \"undefined\" !== typeof AbortController\n ? AbortController\n : function () {\n var listeners = [],\n signal = (this.signal = {\n aborted: !1,\n addEventListener: function (type, listener) {\n listeners.push(listener);\n }\n });\n this.abort = function () {\n signal.aborted = !0;\n listeners.forEach(function (listener) {\n return listener();\n });\n };\n },\n scheduleCallback$2 = Scheduler.unstable_scheduleCallback,\n NormalPriority = Scheduler.unstable_NormalPriority,\n CacheContext = {\n $$typeof: REACT_CONTEXT_TYPE,\n Consumer: null,\n Provider: null,\n _currentValue: null,\n _currentValue2: null,\n _threadCount: 0\n };\nfunction createCache() {\n return {\n controller: new AbortControllerLocal(),\n data: new Map(),\n refCount: 0\n };\n}\nfunction releaseCache(cache) {\n cache.refCount--;\n 0 === cache.refCount &&\n scheduleCallback$2(NormalPriority, function () {\n cache.controller.abort();\n });\n}\nvar currentEntangledListeners = null,\n currentEntangledPendingCount = 0,\n currentEntangledLane = 0,\n currentEntangledActionThenable = null;\nfunction entangleAsyncAction(transition, thenable) {\n if (null === currentEntangledListeners) {\n var entangledListeners = (currentEntangledListeners = []);\n currentEntangledPendingCount = 0;\n currentEntangledLane = requestTransitionLane();\n currentEntangledActionThenable = {\n status: \"pending\",\n value: void 0,\n then: function (resolve) {\n entangledListeners.push(resolve);\n }\n };\n }\n currentEntangledPendingCount++;\n thenable.then(pingEngtangledActionScope, pingEngtangledActionScope);\n return thenable;\n}\nfunction pingEngtangledActionScope() {\n if (\n 0 === --currentEntangledPendingCount &&\n null !== currentEntangledListeners\n ) {\n null !== currentEntangledActionThenable &&\n (currentEntangledActionThenable.status = \"fulfilled\");\n var listeners = currentEntangledListeners;\n currentEntangledListeners = null;\n currentEntangledLane = 0;\n currentEntangledActionThenable = null;\n for (var i = 0; i < listeners.length; i++) (0, listeners[i])();\n }\n}\nfunction chainThenableValue(thenable, result) {\n var listeners = [],\n thenableWithOverride = {\n status: \"pending\",\n value: null,\n reason: null,\n then: function (resolve) {\n listeners.push(resolve);\n }\n };\n thenable.then(\n function () {\n thenableWithOverride.status = \"fulfilled\";\n thenableWithOverride.value = result;\n for (var i = 0; i < listeners.length; i++) (0, listeners[i])(result);\n },\n function (error) {\n thenableWithOverride.status = \"rejected\";\n thenableWithOverride.reason = error;\n for (error = 0; error < listeners.length; error++)\n (0, listeners[error])(void 0);\n }\n );\n return thenableWithOverride;\n}\nvar prevOnStartTransitionFinish = ReactSharedInternals.S;\nReactSharedInternals.S = function (transition, returnValue) {\n globalMostRecentTransitionTime = now();\n \"object\" === typeof returnValue &&\n null !== returnValue &&\n \"function\" === typeof returnValue.then &&\n entangleAsyncAction(transition, returnValue);\n null !== prevOnStartTransitionFinish &&\n prevOnStartTransitionFinish(transition, returnValue);\n};\nvar resumedCache = createCursor(null);\nfunction peekCacheFromPool() {\n var cacheResumedFromPreviousRender = resumedCache.current;\n return null !== cacheResumedFromPreviousRender\n ? cacheResumedFromPreviousRender\n : workInProgressRoot.pooledCache;\n}\nfunction pushTransition(offscreenWorkInProgress, prevCachePool) {\n null === prevCachePool\n ? push(resumedCache, resumedCache.current)\n : push(resumedCache, prevCachePool.pool);\n}\nfunction getSuspendedCache() {\n var cacheFromPool = peekCacheFromPool();\n return null === cacheFromPool\n ? null\n : { parent: CacheContext._currentValue, pool: cacheFromPool };\n}\nvar SuspenseException = Error(formatProdErrorMessage(460)),\n SuspenseyCommitException = Error(formatProdErrorMessage(474)),\n SuspenseActionException = Error(formatProdErrorMessage(542)),\n noopSuspenseyCommitThenable = { then: function () {} };\nfunction isThenableResolved(thenable) {\n thenable = thenable.status;\n return \"fulfilled\" === thenable || \"rejected\" === thenable;\n}\nfunction trackUsedThenable(thenableState, thenable, index) {\n index = thenableState[index];\n void 0 === index\n ? thenableState.push(thenable)\n : index !== thenable && (thenable.then(noop$1, noop$1), (thenable = index));\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw (\n ((thenableState = thenable.reason),\n checkIfUseWrappedInAsyncCatch(thenableState),\n thenableState)\n );\n default:\n if (\"string\" === typeof thenable.status) thenable.then(noop$1, noop$1);\n else {\n thenableState = workInProgressRoot;\n if (null !== thenableState && 100 < thenableState.shellSuspendCounter)\n throw Error(formatProdErrorMessage(482));\n thenableState = thenable;\n thenableState.status = \"pending\";\n thenableState.then(\n function (fulfilledValue) {\n if (\"pending\" === thenable.status) {\n var fulfilledThenable = thenable;\n fulfilledThenable.status = \"fulfilled\";\n fulfilledThenable.value = fulfilledValue;\n }\n },\n function (error) {\n if (\"pending\" === thenable.status) {\n var rejectedThenable = thenable;\n rejectedThenable.status = \"rejected\";\n rejectedThenable.reason = error;\n }\n }\n );\n }\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw (\n ((thenableState = thenable.reason),\n checkIfUseWrappedInAsyncCatch(thenableState),\n thenableState)\n );\n }\n suspendedThenable = thenable;\n throw SuspenseException;\n }\n}\nfunction resolveLazy(lazyType) {\n try {\n var init = lazyType._init;\n return init(lazyType._payload);\n } catch (x) {\n if (null !== x && \"object\" === typeof x && \"function\" === typeof x.then)\n throw ((suspendedThenable = x), SuspenseException);\n throw x;\n }\n}\nvar suspendedThenable = null;\nfunction getSuspendedThenable() {\n if (null === suspendedThenable) throw Error(formatProdErrorMessage(459));\n var thenable = suspendedThenable;\n suspendedThenable = null;\n return thenable;\n}\nfunction checkIfUseWrappedInAsyncCatch(rejectedReason) {\n if (\n rejectedReason === SuspenseException ||\n rejectedReason === SuspenseActionException\n )\n throw Error(formatProdErrorMessage(483));\n}\nvar thenableState$1 = null,\n thenableIndexCounter$1 = 0;\nfunction unwrapThenable(thenable) {\n var index = thenableIndexCounter$1;\n thenableIndexCounter$1 += 1;\n null === thenableState$1 && (thenableState$1 = []);\n return trackUsedThenable(thenableState$1, thenable, index);\n}\nfunction coerceRef(workInProgress, element) {\n element = element.props.ref;\n workInProgress.ref = void 0 !== element ? element : null;\n}\nfunction throwOnInvalidObjectTypeImpl(returnFiber, newChild) {\n if (newChild.$$typeof === REACT_LEGACY_ELEMENT_TYPE)\n throw Error(formatProdErrorMessage(525));\n returnFiber = Object.prototype.toString.call(newChild);\n throw Error(\n formatProdErrorMessage(\n 31,\n \"[object Object]\" === returnFiber\n ? \"object with keys {\" + Object.keys(newChild).join(\", \") + \"}\"\n : returnFiber\n )\n );\n}\nfunction createChildReconciler(shouldTrackSideEffects) {\n function deleteChild(returnFiber, childToDelete) {\n if (shouldTrackSideEffects) {\n var deletions = returnFiber.deletions;\n null === deletions\n ? ((returnFiber.deletions = [childToDelete]), (returnFiber.flags |= 16))\n : deletions.push(childToDelete);\n }\n }\n function deleteRemainingChildren(returnFiber, currentFirstChild) {\n if (!shouldTrackSideEffects) return null;\n for (; null !== currentFirstChild; )\n deleteChild(returnFiber, currentFirstChild),\n (currentFirstChild = currentFirstChild.sibling);\n return null;\n }\n function mapRemainingChildren(currentFirstChild) {\n for (var existingChildren = new Map(); null !== currentFirstChild; )\n null !== currentFirstChild.key\n ? existingChildren.set(currentFirstChild.key, currentFirstChild)\n : existingChildren.set(currentFirstChild.index, currentFirstChild),\n (currentFirstChild = currentFirstChild.sibling);\n return existingChildren;\n }\n function useFiber(fiber, pendingProps) {\n fiber = createWorkInProgress(fiber, pendingProps);\n fiber.index = 0;\n fiber.sibling = null;\n return fiber;\n }\n function placeChild(newFiber, lastPlacedIndex, newIndex) {\n newFiber.index = newIndex;\n if (!shouldTrackSideEffects)\n return (newFiber.flags |= 1048576), lastPlacedIndex;\n newIndex = newFiber.alternate;\n if (null !== newIndex)\n return (\n (newIndex = newIndex.index),\n newIndex < lastPlacedIndex\n ? ((newFiber.flags |= 67108866), lastPlacedIndex)\n : newIndex\n );\n newFiber.flags |= 67108866;\n return lastPlacedIndex;\n }\n function placeSingleChild(newFiber) {\n shouldTrackSideEffects &&\n null === newFiber.alternate &&\n (newFiber.flags |= 67108866);\n return newFiber;\n }\n function updateTextNode(returnFiber, current, textContent, lanes) {\n if (null === current || 6 !== current.tag)\n return (\n (current = createFiberFromText(textContent, returnFiber.mode, lanes)),\n (current.return = returnFiber),\n current\n );\n current = useFiber(current, textContent);\n current.return = returnFiber;\n return current;\n }\n function updateElement(returnFiber, current, element, lanes) {\n var elementType = element.type;\n if (elementType === REACT_FRAGMENT_TYPE)\n return updateFragment(\n returnFiber,\n current,\n element.props.children,\n lanes,\n element.key\n );\n if (\n null !== current &&\n (current.elementType === elementType ||\n (\"object\" === typeof elementType &&\n null !== elementType &&\n elementType.$$typeof === REACT_LAZY_TYPE &&\n resolveLazy(elementType) === current.type))\n )\n return (\n (current = useFiber(current, element.props)),\n coerceRef(current, element),\n (current.return = returnFiber),\n current\n );\n current = createFiberFromTypeAndProps(\n element.type,\n element.key,\n element.props,\n null,\n returnFiber.mode,\n lanes\n );\n coerceRef(current, element);\n current.return = returnFiber;\n return current;\n }\n function updatePortal(returnFiber, current, portal, lanes) {\n if (\n null === current ||\n 4 !== current.tag ||\n current.stateNode.containerInfo !== portal.containerInfo ||\n current.stateNode.implementation !== portal.implementation\n )\n return (\n (current = createFiberFromPortal(portal, returnFiber.mode, lanes)),\n (current.return = returnFiber),\n current\n );\n current = useFiber(current, portal.children || []);\n current.return = returnFiber;\n return current;\n }\n function updateFragment(returnFiber, current, fragment, lanes, key) {\n if (null === current || 7 !== current.tag)\n return (\n (current = createFiberFromFragment(\n fragment,\n returnFiber.mode,\n lanes,\n key\n )),\n (current.return = returnFiber),\n current\n );\n current = useFiber(current, fragment);\n current.return = returnFiber;\n return current;\n }\n function createChild(returnFiber, newChild, lanes) {\n if (\n (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n )\n return (\n (newChild = createFiberFromText(\n \"\" + newChild,\n returnFiber.mode,\n lanes\n )),\n (newChild.return = returnFiber),\n newChild\n );\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return (\n (lanes = createFiberFromTypeAndProps(\n newChild.type,\n newChild.key,\n newChild.props,\n null,\n returnFiber.mode,\n lanes\n )),\n coerceRef(lanes, newChild),\n (lanes.return = returnFiber),\n lanes\n );\n case REACT_PORTAL_TYPE:\n return (\n (newChild = createFiberFromPortal(\n newChild,\n returnFiber.mode,\n lanes\n )),\n (newChild.return = returnFiber),\n newChild\n );\n case REACT_LAZY_TYPE:\n return (\n (newChild = resolveLazy(newChild)),\n createChild(returnFiber, newChild, lanes)\n );\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild))\n return (\n (newChild = createFiberFromFragment(\n newChild,\n returnFiber.mode,\n lanes,\n null\n )),\n (newChild.return = returnFiber),\n newChild\n );\n if (\"function\" === typeof newChild.then)\n return createChild(returnFiber, unwrapThenable(newChild), lanes);\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return createChild(\n returnFiber,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n }\n return null;\n }\n function updateSlot(returnFiber, oldFiber, newChild, lanes) {\n var key = null !== oldFiber ? oldFiber.key : null;\n if (\n (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n )\n return null !== key\n ? null\n : updateTextNode(returnFiber, oldFiber, \"\" + newChild, lanes);\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return newChild.key === key\n ? updateElement(returnFiber, oldFiber, newChild, lanes)\n : null;\n case REACT_PORTAL_TYPE:\n return newChild.key === key\n ? updatePortal(returnFiber, oldFiber, newChild, lanes)\n : null;\n case REACT_LAZY_TYPE:\n return (\n (newChild = resolveLazy(newChild)),\n updateSlot(returnFiber, oldFiber, newChild, lanes)\n );\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild))\n return null !== key\n ? null\n : updateFragment(returnFiber, oldFiber, newChild, lanes, null);\n if (\"function\" === typeof newChild.then)\n return updateSlot(\n returnFiber,\n oldFiber,\n unwrapThenable(newChild),\n lanes\n );\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return updateSlot(\n returnFiber,\n oldFiber,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n }\n return null;\n }\n function updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n newChild,\n lanes\n ) {\n if (\n (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n )\n return (\n (existingChildren = existingChildren.get(newIdx) || null),\n updateTextNode(returnFiber, existingChildren, \"\" + newChild, lanes)\n );\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return (\n (existingChildren =\n existingChildren.get(\n null === newChild.key ? newIdx : newChild.key\n ) || null),\n updateElement(returnFiber, existingChildren, newChild, lanes)\n );\n case REACT_PORTAL_TYPE:\n return (\n (existingChildren =\n existingChildren.get(\n null === newChild.key ? newIdx : newChild.key\n ) || null),\n updatePortal(returnFiber, existingChildren, newChild, lanes)\n );\n case REACT_LAZY_TYPE:\n return (\n (newChild = resolveLazy(newChild)),\n updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n newChild,\n lanes\n )\n );\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild))\n return (\n (existingChildren = existingChildren.get(newIdx) || null),\n updateFragment(returnFiber, existingChildren, newChild, lanes, null)\n );\n if (\"function\" === typeof newChild.then)\n return updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n unwrapThenable(newChild),\n lanes\n );\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n }\n return null;\n }\n function reconcileChildrenArray(\n returnFiber,\n currentFirstChild,\n newChildren,\n lanes\n ) {\n for (\n var resultingFirstChild = null,\n previousNewFiber = null,\n oldFiber = currentFirstChild,\n newIdx = (currentFirstChild = 0),\n nextOldFiber = null;\n null !== oldFiber && newIdx < newChildren.length;\n newIdx++\n ) {\n oldFiber.index > newIdx\n ? ((nextOldFiber = oldFiber), (oldFiber = null))\n : (nextOldFiber = oldFiber.sibling);\n var newFiber = updateSlot(\n returnFiber,\n oldFiber,\n newChildren[newIdx],\n lanes\n );\n if (null === newFiber) {\n null === oldFiber && (oldFiber = nextOldFiber);\n break;\n }\n shouldTrackSideEffects &&\n oldFiber &&\n null === newFiber.alternate &&\n deleteChild(returnFiber, oldFiber);\n currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n null === previousNewFiber\n ? (resultingFirstChild = newFiber)\n : (previousNewFiber.sibling = newFiber);\n previousNewFiber = newFiber;\n oldFiber = nextOldFiber;\n }\n if (newIdx === newChildren.length)\n return (\n deleteRemainingChildren(returnFiber, oldFiber),\n isHydrating && pushTreeFork(returnFiber, newIdx),\n resultingFirstChild\n );\n if (null === oldFiber) {\n for (; newIdx < newChildren.length; newIdx++)\n (oldFiber = createChild(returnFiber, newChildren[newIdx], lanes)),\n null !== oldFiber &&\n ((currentFirstChild = placeChild(\n oldFiber,\n currentFirstChild,\n newIdx\n )),\n null === previousNewFiber\n ? (resultingFirstChild = oldFiber)\n : (previousNewFiber.sibling = oldFiber),\n (previousNewFiber = oldFiber));\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n for (\n oldFiber = mapRemainingChildren(oldFiber);\n newIdx < newChildren.length;\n newIdx++\n )\n (nextOldFiber = updateFromMap(\n oldFiber,\n returnFiber,\n newIdx,\n newChildren[newIdx],\n lanes\n )),\n null !== nextOldFiber &&\n (shouldTrackSideEffects &&\n null !== nextOldFiber.alternate &&\n oldFiber.delete(\n null === nextOldFiber.key ? newIdx : nextOldFiber.key\n ),\n (currentFirstChild = placeChild(\n nextOldFiber,\n currentFirstChild,\n newIdx\n )),\n null === previousNewFiber\n ? (resultingFirstChild = nextOldFiber)\n : (previousNewFiber.sibling = nextOldFiber),\n (previousNewFiber = nextOldFiber));\n shouldTrackSideEffects &&\n oldFiber.forEach(function (child) {\n return deleteChild(returnFiber, child);\n });\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n function reconcileChildrenIterator(\n returnFiber,\n currentFirstChild,\n newChildren,\n lanes\n ) {\n if (null == newChildren) throw Error(formatProdErrorMessage(151));\n for (\n var resultingFirstChild = null,\n previousNewFiber = null,\n oldFiber = currentFirstChild,\n newIdx = (currentFirstChild = 0),\n nextOldFiber = null,\n step = newChildren.next();\n null !== oldFiber && !step.done;\n newIdx++, step = newChildren.next()\n ) {\n oldFiber.index > newIdx\n ? ((nextOldFiber = oldFiber), (oldFiber = null))\n : (nextOldFiber = oldFiber.sibling);\n var newFiber = updateSlot(returnFiber, oldFiber, step.value, lanes);\n if (null === newFiber) {\n null === oldFiber && (oldFiber = nextOldFiber);\n break;\n }\n shouldTrackSideEffects &&\n oldFiber &&\n null === newFiber.alternate &&\n deleteChild(returnFiber, oldFiber);\n currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n null === previousNewFiber\n ? (resultingFirstChild = newFiber)\n : (previousNewFiber.sibling = newFiber);\n previousNewFiber = newFiber;\n oldFiber = nextOldFiber;\n }\n if (step.done)\n return (\n deleteRemainingChildren(returnFiber, oldFiber),\n isHydrating && pushTreeFork(returnFiber, newIdx),\n resultingFirstChild\n );\n if (null === oldFiber) {\n for (; !step.done; newIdx++, step = newChildren.next())\n (step = createChild(returnFiber, step.value, lanes)),\n null !== step &&\n ((currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n null === previousNewFiber\n ? (resultingFirstChild = step)\n : (previousNewFiber.sibling = step),\n (previousNewFiber = step));\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n for (\n oldFiber = mapRemainingChildren(oldFiber);\n !step.done;\n newIdx++, step = newChildren.next()\n )\n (step = updateFromMap(oldFiber, returnFiber, newIdx, step.value, lanes)),\n null !== step &&\n (shouldTrackSideEffects &&\n null !== step.alternate &&\n oldFiber.delete(null === step.key ? newIdx : step.key),\n (currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n null === previousNewFiber\n ? (resultingFirstChild = step)\n : (previousNewFiber.sibling = step),\n (previousNewFiber = step));\n shouldTrackSideEffects &&\n oldFiber.forEach(function (child) {\n return deleteChild(returnFiber, child);\n });\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n function reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n ) {\n \"object\" === typeof newChild &&\n null !== newChild &&\n newChild.type === REACT_FRAGMENT_TYPE &&\n null === newChild.key &&\n (newChild = newChild.props.children);\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n a: {\n for (var key = newChild.key; null !== currentFirstChild; ) {\n if (currentFirstChild.key === key) {\n key = newChild.type;\n if (key === REACT_FRAGMENT_TYPE) {\n if (7 === currentFirstChild.tag) {\n deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n );\n lanes = useFiber(\n currentFirstChild,\n newChild.props.children\n );\n lanes.return = returnFiber;\n returnFiber = lanes;\n break a;\n }\n } else if (\n currentFirstChild.elementType === key ||\n (\"object\" === typeof key &&\n null !== key &&\n key.$$typeof === REACT_LAZY_TYPE &&\n resolveLazy(key) === currentFirstChild.type)\n ) {\n deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n );\n lanes = useFiber(currentFirstChild, newChild.props);\n coerceRef(lanes, newChild);\n lanes.return = returnFiber;\n returnFiber = lanes;\n break a;\n }\n deleteRemainingChildren(returnFiber, currentFirstChild);\n break;\n } else deleteChild(returnFiber, currentFirstChild);\n currentFirstChild = currentFirstChild.sibling;\n }\n newChild.type === REACT_FRAGMENT_TYPE\n ? ((lanes = createFiberFromFragment(\n newChild.props.children,\n returnFiber.mode,\n lanes,\n newChild.key\n )),\n (lanes.return = returnFiber),\n (returnFiber = lanes))\n : ((lanes = createFiberFromTypeAndProps(\n newChild.type,\n newChild.key,\n newChild.props,\n null,\n returnFiber.mode,\n lanes\n )),\n coerceRef(lanes, newChild),\n (lanes.return = returnFiber),\n (returnFiber = lanes));\n }\n return placeSingleChild(returnFiber);\n case REACT_PORTAL_TYPE:\n a: {\n for (key = newChild.key; null !== currentFirstChild; ) {\n if (currentFirstChild.key === key)\n if (\n 4 === currentFirstChild.tag &&\n currentFirstChild.stateNode.containerInfo ===\n newChild.containerInfo &&\n currentFirstChild.stateNode.implementation ===\n newChild.implementation\n ) {\n deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n );\n lanes = useFiber(currentFirstChild, newChild.children || []);\n lanes.return = returnFiber;\n returnFiber = lanes;\n break a;\n } else {\n deleteRemainingChildren(returnFiber, currentFirstChild);\n break;\n }\n else deleteChild(returnFiber, currentFirstChild);\n currentFirstChild = currentFirstChild.sibling;\n }\n lanes = createFiberFromPortal(newChild, returnFiber.mode, lanes);\n lanes.return = returnFiber;\n returnFiber = lanes;\n }\n return placeSingleChild(returnFiber);\n case REACT_LAZY_TYPE:\n return (\n (newChild = resolveLazy(newChild)),\n reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n )\n );\n }\n if (isArrayImpl(newChild))\n return reconcileChildrenArray(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n );\n if (getIteratorFn(newChild)) {\n key = getIteratorFn(newChild);\n if (\"function\" !== typeof key) throw Error(formatProdErrorMessage(150));\n newChild = key.call(newChild);\n return reconcileChildrenIterator(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n );\n }\n if (\"function\" === typeof newChild.then)\n return reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n unwrapThenable(newChild),\n lanes\n );\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n }\n return (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n ? ((newChild = \"\" + newChild),\n null !== currentFirstChild && 6 === currentFirstChild.tag\n ? (deleteRemainingChildren(returnFiber, currentFirstChild.sibling),\n (lanes = useFiber(currentFirstChild, newChild)),\n (lanes.return = returnFiber),\n (returnFiber = lanes))\n : (deleteRemainingChildren(returnFiber, currentFirstChild),\n (lanes = createFiberFromText(newChild, returnFiber.mode, lanes)),\n (lanes.return = returnFiber),\n (returnFiber = lanes)),\n placeSingleChild(returnFiber))\n : deleteRemainingChildren(returnFiber, currentFirstChild);\n }\n return function (returnFiber, currentFirstChild, newChild, lanes) {\n try {\n thenableIndexCounter$1 = 0;\n var firstChildFiber = reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n );\n thenableState$1 = null;\n return firstChildFiber;\n } catch (x) {\n if (x === SuspenseException || x === SuspenseActionException) throw x;\n var fiber = createFiberImplClass(29, x, null, returnFiber.mode);\n fiber.lanes = lanes;\n fiber.return = returnFiber;\n return fiber;\n } finally {\n }\n };\n}\nvar reconcileChildFibers = createChildReconciler(!0),\n mountChildFibers = createChildReconciler(!1),\n hasForceUpdate = !1;\nfunction initializeUpdateQueue(fiber) {\n fiber.updateQueue = {\n baseState: fiber.memoizedState,\n firstBaseUpdate: null,\n lastBaseUpdate: null,\n shared: { pending: null, lanes: 0, hiddenCallbacks: null },\n callbacks: null\n };\n}\nfunction cloneUpdateQueue(current, workInProgress) {\n current = current.updateQueue;\n workInProgress.updateQueue === current &&\n (workInProgress.updateQueue = {\n baseState: current.baseState,\n firstBaseUpdate: current.firstBaseUpdate,\n lastBaseUpdate: current.lastBaseUpdate,\n shared: current.shared,\n callbacks: null\n });\n}\nfunction createUpdate(lane) {\n return { lane: lane, tag: 0, payload: null, callback: null, next: null };\n}\nfunction enqueueUpdate(fiber, update, lane) {\n var updateQueue = fiber.updateQueue;\n if (null === updateQueue) return null;\n updateQueue = updateQueue.shared;\n if (0 !== (executionContext & 2)) {\n var pending = updateQueue.pending;\n null === pending\n ? (update.next = update)\n : ((update.next = pending.next), (pending.next = update));\n updateQueue.pending = update;\n update = getRootForUpdatedFiber(fiber);\n markUpdateLaneFromFiberToRoot(fiber, null, lane);\n return update;\n }\n enqueueUpdate$1(fiber, updateQueue, update, lane);\n return getRootForUpdatedFiber(fiber);\n}\nfunction entangleTransitions(root, fiber, lane) {\n fiber = fiber.updateQueue;\n if (null !== fiber && ((fiber = fiber.shared), 0 !== (lane & 4194048))) {\n var queueLanes = fiber.lanes;\n queueLanes &= root.pendingLanes;\n lane |= queueLanes;\n fiber.lanes = lane;\n markRootEntangled(root, lane);\n }\n}\nfunction enqueueCapturedUpdate(workInProgress, capturedUpdate) {\n var queue = workInProgress.updateQueue,\n current = workInProgress.alternate;\n if (\n null !== current &&\n ((current = current.updateQueue), queue === current)\n ) {\n var newFirst = null,\n newLast = null;\n queue = queue.firstBaseUpdate;\n if (null !== queue) {\n do {\n var clone = {\n lane: queue.lane,\n tag: queue.tag,\n payload: queue.payload,\n callback: null,\n next: null\n };\n null === newLast\n ? (newFirst = newLast = clone)\n : (newLast = newLast.next = clone);\n queue = queue.next;\n } while (null !== queue);\n null === newLast\n ? (newFirst = newLast = capturedUpdate)\n : (newLast = newLast.next = capturedUpdate);\n } else newFirst = newLast = capturedUpdate;\n queue = {\n baseState: current.baseState,\n firstBaseUpdate: newFirst,\n lastBaseUpdate: newLast,\n shared: current.shared,\n callbacks: current.callbacks\n };\n workInProgress.updateQueue = queue;\n return;\n }\n workInProgress = queue.lastBaseUpdate;\n null === workInProgress\n ? (queue.firstBaseUpdate = capturedUpdate)\n : (workInProgress.next = capturedUpdate);\n queue.lastBaseUpdate = capturedUpdate;\n}\nvar didReadFromEntangledAsyncAction = !1;\nfunction suspendIfUpdateReadFromEntangledAsyncAction() {\n if (didReadFromEntangledAsyncAction) {\n var entangledActionThenable = currentEntangledActionThenable;\n if (null !== entangledActionThenable) throw entangledActionThenable;\n }\n}\nfunction processUpdateQueue(\n workInProgress$jscomp$0,\n props,\n instance$jscomp$0,\n renderLanes\n) {\n didReadFromEntangledAsyncAction = !1;\n var queue = workInProgress$jscomp$0.updateQueue;\n hasForceUpdate = !1;\n var firstBaseUpdate = queue.firstBaseUpdate,\n lastBaseUpdate = queue.lastBaseUpdate,\n pendingQueue = queue.shared.pending;\n if (null !== pendingQueue) {\n queue.shared.pending = null;\n var lastPendingUpdate = pendingQueue,\n firstPendingUpdate = lastPendingUpdate.next;\n lastPendingUpdate.next = null;\n null === lastBaseUpdate\n ? (firstBaseUpdate = firstPendingUpdate)\n : (lastBaseUpdate.next = firstPendingUpdate);\n lastBaseUpdate = lastPendingUpdate;\n var current = workInProgress$jscomp$0.alternate;\n null !== current &&\n ((current = current.updateQueue),\n (pendingQueue = current.lastBaseUpdate),\n pendingQueue !== lastBaseUpdate &&\n (null === pendingQueue\n ? (current.firstBaseUpdate = firstPendingUpdate)\n : (pendingQueue.next = firstPendingUpdate),\n (current.lastBaseUpdate = lastPendingUpdate)));\n }\n if (null !== firstBaseUpdate) {\n var newState = queue.baseState;\n lastBaseUpdate = 0;\n current = firstPendingUpdate = lastPendingUpdate = null;\n pendingQueue = firstBaseUpdate;\n do {\n var updateLane = pendingQueue.lane & -536870913,\n isHiddenUpdate = updateLane !== pendingQueue.lane;\n if (\n isHiddenUpdate\n ? (workInProgressRootRenderLanes & updateLane) === updateLane\n : (renderLanes & updateLane) === updateLane\n ) {\n 0 !== updateLane &&\n updateLane === currentEntangledLane &&\n (didReadFromEntangledAsyncAction = !0);\n null !== current &&\n (current = current.next =\n {\n lane: 0,\n tag: pendingQueue.tag,\n payload: pendingQueue.payload,\n callback: null,\n next: null\n });\n a: {\n var workInProgress = workInProgress$jscomp$0,\n update = pendingQueue;\n updateLane = props;\n var instance = instance$jscomp$0;\n switch (update.tag) {\n case 1:\n workInProgress = update.payload;\n if (\"function\" === typeof workInProgress) {\n newState = workInProgress.call(instance, newState, updateLane);\n break a;\n }\n newState = workInProgress;\n break a;\n case 3:\n workInProgress.flags = (workInProgress.flags & -65537) | 128;\n case 0:\n workInProgress = update.payload;\n updateLane =\n \"function\" === typeof workInProgress\n ? workInProgress.call(instance, newState, updateLane)\n : workInProgress;\n if (null === updateLane || void 0 === updateLane) break a;\n newState = assign({}, newState, updateLane);\n break a;\n case 2:\n hasForceUpdate = !0;\n }\n }\n updateLane = pendingQueue.callback;\n null !== updateLane &&\n ((workInProgress$jscomp$0.flags |= 64),\n isHiddenUpdate && (workInProgress$jscomp$0.flags |= 8192),\n (isHiddenUpdate = queue.callbacks),\n null === isHiddenUpdate\n ? (queue.callbacks = [updateLane])\n : isHiddenUpdate.push(updateLane));\n } else\n (isHiddenUpdate = {\n lane: updateLane,\n tag: pendingQueue.tag,\n payload: pendingQueue.payload,\n callback: pendingQueue.callback,\n next: null\n }),\n null === current\n ? ((firstPendingUpdate = current = isHiddenUpdate),\n (lastPendingUpdate = newState))\n : (current = current.next = isHiddenUpdate),\n (lastBaseUpdate |= updateLane);\n pendingQueue = pendingQueue.next;\n if (null === pendingQueue)\n if (((pendingQueue = queue.shared.pending), null === pendingQueue))\n break;\n else\n (isHiddenUpdate = pendingQueue),\n (pendingQueue = isHiddenUpdate.next),\n (isHiddenUpdate.next = null),\n (queue.lastBaseUpdate = isHiddenUpdate),\n (queue.shared.pending = null);\n } while (1);\n null === current && (lastPendingUpdate = newState);\n queue.baseState = lastPendingUpdate;\n queue.firstBaseUpdate = firstPendingUpdate;\n queue.lastBaseUpdate = current;\n null === firstBaseUpdate && (queue.shared.lanes = 0);\n workInProgressRootSkippedLanes |= lastBaseUpdate;\n workInProgress$jscomp$0.lanes = lastBaseUpdate;\n workInProgress$jscomp$0.memoizedState = newState;\n }\n}\nfunction callCallback(callback, context) {\n if (\"function\" !== typeof callback)\n throw Error(formatProdErrorMessage(191, callback));\n callback.call(context);\n}\nfunction commitCallbacks(updateQueue, context) {\n var callbacks = updateQueue.callbacks;\n if (null !== callbacks)\n for (\n updateQueue.callbacks = null, updateQueue = 0;\n updateQueue < callbacks.length;\n updateQueue++\n )\n callCallback(callbacks[updateQueue], context);\n}\nvar currentTreeHiddenStackCursor = createCursor(null),\n prevEntangledRenderLanesCursor = createCursor(0);\nfunction pushHiddenContext(fiber, context) {\n fiber = entangledRenderLanes;\n push(prevEntangledRenderLanesCursor, fiber);\n push(currentTreeHiddenStackCursor, context);\n entangledRenderLanes = fiber | context.baseLanes;\n}\nfunction reuseHiddenContextOnStack() {\n push(prevEntangledRenderLanesCursor, entangledRenderLanes);\n push(currentTreeHiddenStackCursor, currentTreeHiddenStackCursor.current);\n}\nfunction popHiddenContext() {\n entangledRenderLanes = prevEntangledRenderLanesCursor.current;\n pop(currentTreeHiddenStackCursor);\n pop(prevEntangledRenderLanesCursor);\n}\nvar suspenseHandlerStackCursor = createCursor(null),\n shellBoundary = null;\nfunction pushPrimaryTreeSuspenseHandler(handler) {\n var current = handler.alternate;\n push(suspenseStackCursor, suspenseStackCursor.current & 1);\n push(suspenseHandlerStackCursor, handler);\n null === shellBoundary &&\n (null === current || null !== currentTreeHiddenStackCursor.current\n ? (shellBoundary = handler)\n : null !== current.memoizedState && (shellBoundary = handler));\n}\nfunction pushDehydratedActivitySuspenseHandler(fiber) {\n push(suspenseStackCursor, suspenseStackCursor.current);\n push(suspenseHandlerStackCursor, fiber);\n null === shellBoundary && (shellBoundary = fiber);\n}\nfunction pushOffscreenSuspenseHandler(fiber) {\n 22 === fiber.tag\n ? (push(suspenseStackCursor, suspenseStackCursor.current),\n push(suspenseHandlerStackCursor, fiber),\n null === shellBoundary && (shellBoundary = fiber))\n : reuseSuspenseHandlerOnStack(fiber);\n}\nfunction reuseSuspenseHandlerOnStack() {\n push(suspenseStackCursor, suspenseStackCursor.current);\n push(suspenseHandlerStackCursor, suspenseHandlerStackCursor.current);\n}\nfunction popSuspenseHandler(fiber) {\n pop(suspenseHandlerStackCursor);\n shellBoundary === fiber && (shellBoundary = null);\n pop(suspenseStackCursor);\n}\nvar suspenseStackCursor = createCursor(0);\nfunction findFirstSuspended(row) {\n for (var node = row; null !== node; ) {\n if (13 === node.tag) {\n var state = node.memoizedState;\n if (\n null !== state &&\n ((state = state.dehydrated),\n null === state ||\n isSuspenseInstancePending(state) ||\n isSuspenseInstanceFallback(state))\n )\n return node;\n } else if (\n 19 === node.tag &&\n (\"forwards\" === node.memoizedProps.revealOrder ||\n \"backwards\" === node.memoizedProps.revealOrder ||\n \"unstable_legacy-backwards\" === node.memoizedProps.revealOrder ||\n \"together\" === node.memoizedProps.revealOrder)\n ) {\n if (0 !== (node.flags & 128)) return node;\n } else if (null !== node.child) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n if (node === row) break;\n for (; null === node.sibling; ) {\n if (null === node.return || node.return === row) return null;\n node = node.return;\n }\n node.sibling.return = node.return;\n node = node.sibling;\n }\n return null;\n}\nvar renderLanes = 0,\n currentlyRenderingFiber = null,\n currentHook = null,\n workInProgressHook = null,\n didScheduleRenderPhaseUpdate = !1,\n didScheduleRenderPhaseUpdateDuringThisPass = !1,\n shouldDoubleInvokeUserFnsInHooksDEV = !1,\n localIdCounter = 0,\n thenableIndexCounter = 0,\n thenableState = null,\n globalClientIdCounter = 0;\nfunction throwInvalidHookError() {\n throw Error(formatProdErrorMessage(321));\n}\nfunction areHookInputsEqual(nextDeps, prevDeps) {\n if (null === prevDeps) return !1;\n for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++)\n if (!objectIs(nextDeps[i], prevDeps[i])) return !1;\n return !0;\n}\nfunction renderWithHooks(\n current,\n workInProgress,\n Component,\n props,\n secondArg,\n nextRenderLanes\n) {\n renderLanes = nextRenderLanes;\n currentlyRenderingFiber = workInProgress;\n workInProgress.memoizedState = null;\n workInProgress.updateQueue = null;\n workInProgress.lanes = 0;\n ReactSharedInternals.H =\n null === current || null === current.memoizedState\n ? HooksDispatcherOnMount\n : HooksDispatcherOnUpdate;\n shouldDoubleInvokeUserFnsInHooksDEV = !1;\n nextRenderLanes = Component(props, secondArg);\n shouldDoubleInvokeUserFnsInHooksDEV = !1;\n didScheduleRenderPhaseUpdateDuringThisPass &&\n (nextRenderLanes = renderWithHooksAgain(\n workInProgress,\n Component,\n props,\n secondArg\n ));\n finishRenderingHooks(current);\n return nextRenderLanes;\n}\nfunction finishRenderingHooks(current) {\n ReactSharedInternals.H = ContextOnlyDispatcher;\n var didRenderTooFewHooks = null !== currentHook && null !== currentHook.next;\n renderLanes = 0;\n workInProgressHook = currentHook = currentlyRenderingFiber = null;\n didScheduleRenderPhaseUpdate = !1;\n thenableIndexCounter = 0;\n thenableState = null;\n if (didRenderTooFewHooks) throw Error(formatProdErrorMessage(300));\n null === current ||\n didReceiveUpdate ||\n ((current = current.dependencies),\n null !== current &&\n checkIfContextChanged(current) &&\n (didReceiveUpdate = !0));\n}\nfunction renderWithHooksAgain(workInProgress, Component, props, secondArg) {\n currentlyRenderingFiber = workInProgress;\n var numberOfReRenders = 0;\n do {\n didScheduleRenderPhaseUpdateDuringThisPass && (thenableState = null);\n thenableIndexCounter = 0;\n didScheduleRenderPhaseUpdateDuringThisPass = !1;\n if (25 <= numberOfReRenders) throw Error(formatProdErrorMessage(301));\n numberOfReRenders += 1;\n workInProgressHook = currentHook = null;\n if (null != workInProgress.updateQueue) {\n var children = workInProgress.updateQueue;\n children.lastEffect = null;\n children.events = null;\n children.stores = null;\n null != children.memoCache && (children.memoCache.index = 0);\n }\n ReactSharedInternals.H = HooksDispatcherOnRerender;\n children = Component(props, secondArg);\n } while (didScheduleRenderPhaseUpdateDuringThisPass);\n return children;\n}\nfunction TransitionAwareHostComponent() {\n var dispatcher = ReactSharedInternals.H,\n maybeThenable = dispatcher.useState()[0];\n maybeThenable =\n \"function\" === typeof maybeThenable.then\n ? useThenable(maybeThenable)\n : maybeThenable;\n dispatcher = dispatcher.useState()[0];\n (null !== currentHook ? currentHook.memoizedState : null) !== dispatcher &&\n (currentlyRenderingFiber.flags |= 1024);\n return maybeThenable;\n}\nfunction checkDidRenderIdHook() {\n var didRenderIdHook = 0 !== localIdCounter;\n localIdCounter = 0;\n return didRenderIdHook;\n}\nfunction bailoutHooks(current, workInProgress, lanes) {\n workInProgress.updateQueue = current.updateQueue;\n workInProgress.flags &= -2053;\n current.lanes &= ~lanes;\n}\nfunction resetHooksOnUnwind(workInProgress) {\n if (didScheduleRenderPhaseUpdate) {\n for (\n workInProgress = workInProgress.memoizedState;\n null !== workInProgress;\n\n ) {\n var queue = workInProgress.queue;\n null !== queue && (queue.pending = null);\n workInProgress = workInProgress.next;\n }\n didScheduleRenderPhaseUpdate = !1;\n }\n renderLanes = 0;\n workInProgressHook = currentHook = currentlyRenderingFiber = null;\n didScheduleRenderPhaseUpdateDuringThisPass = !1;\n thenableIndexCounter = localIdCounter = 0;\n thenableState = null;\n}\nfunction mountWorkInProgressHook() {\n var hook = {\n memoizedState: null,\n baseState: null,\n baseQueue: null,\n queue: null,\n next: null\n };\n null === workInProgressHook\n ? (currentlyRenderingFiber.memoizedState = workInProgressHook = hook)\n : (workInProgressHook = workInProgressHook.next = hook);\n return workInProgressHook;\n}\nfunction updateWorkInProgressHook() {\n if (null === currentHook) {\n var nextCurrentHook = currentlyRenderingFiber.alternate;\n nextCurrentHook =\n null !== nextCurrentHook ? nextCurrentHook.memoizedState : null;\n } else nextCurrentHook = currentHook.next;\n var nextWorkInProgressHook =\n null === workInProgressHook\n ? currentlyRenderingFiber.memoizedState\n : workInProgressHook.next;\n if (null !== nextWorkInProgressHook)\n (workInProgressHook = nextWorkInProgressHook),\n (currentHook = nextCurrentHook);\n else {\n if (null === nextCurrentHook) {\n if (null === currentlyRenderingFiber.alternate)\n throw Error(formatProdErrorMessage(467));\n throw Error(formatProdErrorMessage(310));\n }\n currentHook = nextCurrentHook;\n nextCurrentHook = {\n memoizedState: currentHook.memoizedState,\n baseState: currentHook.baseState,\n baseQueue: currentHook.baseQueue,\n queue: currentHook.queue,\n next: null\n };\n null === workInProgressHook\n ? (currentlyRenderingFiber.memoizedState = workInProgressHook =\n nextCurrentHook)\n : (workInProgressHook = workInProgressHook.next = nextCurrentHook);\n }\n return workInProgressHook;\n}\nfunction createFunctionComponentUpdateQueue() {\n return { lastEffect: null, events: null, stores: null, memoCache: null };\n}\nfunction useThenable(thenable) {\n var index = thenableIndexCounter;\n thenableIndexCounter += 1;\n null === thenableState && (thenableState = []);\n thenable = trackUsedThenable(thenableState, thenable, index);\n index = currentlyRenderingFiber;\n null ===\n (null === workInProgressHook\n ? index.memoizedState\n : workInProgressHook.next) &&\n ((index = index.alternate),\n (ReactSharedInternals.H =\n null === index || null === index.memoizedState\n ? HooksDispatcherOnMount\n : HooksDispatcherOnUpdate));\n return thenable;\n}\nfunction use(usable) {\n if (null !== usable && \"object\" === typeof usable) {\n if (\"function\" === typeof usable.then) return useThenable(usable);\n if (usable.$$typeof === REACT_CONTEXT_TYPE) return readContext(usable);\n }\n throw Error(formatProdErrorMessage(438, String(usable)));\n}\nfunction useMemoCache(size) {\n var memoCache = null,\n updateQueue = currentlyRenderingFiber.updateQueue;\n null !== updateQueue && (memoCache = updateQueue.memoCache);\n if (null == memoCache) {\n var current = currentlyRenderingFiber.alternate;\n null !== current &&\n ((current = current.updateQueue),\n null !== current &&\n ((current = current.memoCache),\n null != current &&\n (memoCache = {\n data: current.data.map(function (array) {\n return array.slice();\n }),\n index: 0\n })));\n }\n null == memoCache && (memoCache = { data: [], index: 0 });\n null === updateQueue &&\n ((updateQueue = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = updateQueue));\n updateQueue.memoCache = memoCache;\n updateQueue = memoCache.data[memoCache.index];\n if (void 0 === updateQueue)\n for (\n updateQueue = memoCache.data[memoCache.index] = Array(size), current = 0;\n current < size;\n current++\n )\n updateQueue[current] = REACT_MEMO_CACHE_SENTINEL;\n memoCache.index++;\n return updateQueue;\n}\nfunction basicStateReducer(state, action) {\n return \"function\" === typeof action ? action(state) : action;\n}\nfunction updateReducer(reducer) {\n var hook = updateWorkInProgressHook();\n return updateReducerImpl(hook, currentHook, reducer);\n}\nfunction updateReducerImpl(hook, current, reducer) {\n var queue = hook.queue;\n if (null === queue) throw Error(formatProdErrorMessage(311));\n queue.lastRenderedReducer = reducer;\n var baseQueue = hook.baseQueue,\n pendingQueue = queue.pending;\n if (null !== pendingQueue) {\n if (null !== baseQueue) {\n var baseFirst = baseQueue.next;\n baseQueue.next = pendingQueue.next;\n pendingQueue.next = baseFirst;\n }\n current.baseQueue = baseQueue = pendingQueue;\n queue.pending = null;\n }\n pendingQueue = hook.baseState;\n if (null === baseQueue) hook.memoizedState = pendingQueue;\n else {\n current = baseQueue.next;\n var newBaseQueueFirst = (baseFirst = null),\n newBaseQueueLast = null,\n update = current,\n didReadFromEntangledAsyncAction$60 = !1;\n do {\n var updateLane = update.lane & -536870913;\n if (\n updateLane !== update.lane\n ? (workInProgressRootRenderLanes & updateLane) === updateLane\n : (renderLanes & updateLane) === updateLane\n ) {\n var revertLane = update.revertLane;\n if (0 === revertLane)\n null !== newBaseQueueLast &&\n (newBaseQueueLast = newBaseQueueLast.next =\n {\n lane: 0,\n revertLane: 0,\n gesture: null,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n }),\n updateLane === currentEntangledLane &&\n (didReadFromEntangledAsyncAction$60 = !0);\n else if ((renderLanes & revertLane) === revertLane) {\n update = update.next;\n revertLane === currentEntangledLane &&\n (didReadFromEntangledAsyncAction$60 = !0);\n continue;\n } else\n (updateLane = {\n lane: 0,\n revertLane: update.revertLane,\n gesture: null,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n }),\n null === newBaseQueueLast\n ? ((newBaseQueueFirst = newBaseQueueLast = updateLane),\n (baseFirst = pendingQueue))\n : (newBaseQueueLast = newBaseQueueLast.next = updateLane),\n (currentlyRenderingFiber.lanes |= revertLane),\n (workInProgressRootSkippedLanes |= revertLane);\n updateLane = update.action;\n shouldDoubleInvokeUserFnsInHooksDEV &&\n reducer(pendingQueue, updateLane);\n pendingQueue = update.hasEagerState\n ? update.eagerState\n : reducer(pendingQueue, updateLane);\n } else\n (revertLane = {\n lane: updateLane,\n revertLane: update.revertLane,\n gesture: update.gesture,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n }),\n null === newBaseQueueLast\n ? ((newBaseQueueFirst = newBaseQueueLast = revertLane),\n (baseFirst = pendingQueue))\n : (newBaseQueueLast = newBaseQueueLast.next = revertLane),\n (currentlyRenderingFiber.lanes |= updateLane),\n (workInProgressRootSkippedLanes |= updateLane);\n update = update.next;\n } while (null !== update && update !== current);\n null === newBaseQueueLast\n ? (baseFirst = pendingQueue)\n : (newBaseQueueLast.next = newBaseQueueFirst);\n if (\n !objectIs(pendingQueue, hook.memoizedState) &&\n ((didReceiveUpdate = !0),\n didReadFromEntangledAsyncAction$60 &&\n ((reducer = currentEntangledActionThenable), null !== reducer))\n )\n throw reducer;\n hook.memoizedState = pendingQueue;\n hook.baseState = baseFirst;\n hook.baseQueue = newBaseQueueLast;\n queue.lastRenderedState = pendingQueue;\n }\n null === baseQueue && (queue.lanes = 0);\n return [hook.memoizedState, queue.dispatch];\n}\nfunction rerenderReducer(reducer) {\n var hook = updateWorkInProgressHook(),\n queue = hook.queue;\n if (null === queue) throw Error(formatProdErrorMessage(311));\n queue.lastRenderedReducer = reducer;\n var dispatch = queue.dispatch,\n lastRenderPhaseUpdate = queue.pending,\n newState = hook.memoizedState;\n if (null !== lastRenderPhaseUpdate) {\n queue.pending = null;\n var update = (lastRenderPhaseUpdate = lastRenderPhaseUpdate.next);\n do (newState = reducer(newState, update.action)), (update = update.next);\n while (update !== lastRenderPhaseUpdate);\n objectIs(newState, hook.memoizedState) || (didReceiveUpdate = !0);\n hook.memoizedState = newState;\n null === hook.baseQueue && (hook.baseState = newState);\n queue.lastRenderedState = newState;\n }\n return [newState, dispatch];\n}\nfunction updateSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {\n var fiber = currentlyRenderingFiber,\n hook = updateWorkInProgressHook(),\n isHydrating$jscomp$0 = isHydrating;\n if (isHydrating$jscomp$0) {\n if (void 0 === getServerSnapshot) throw Error(formatProdErrorMessage(407));\n getServerSnapshot = getServerSnapshot();\n } else getServerSnapshot = getSnapshot();\n var snapshotChanged = !objectIs(\n (currentHook || hook).memoizedState,\n getServerSnapshot\n );\n snapshotChanged &&\n ((hook.memoizedState = getServerSnapshot), (didReceiveUpdate = !0));\n hook = hook.queue;\n updateEffect(subscribeToStore.bind(null, fiber, hook, subscribe), [\n subscribe\n ]);\n if (\n hook.getSnapshot !== getSnapshot ||\n snapshotChanged ||\n (null !== workInProgressHook && workInProgressHook.memoizedState.tag & 1)\n ) {\n fiber.flags |= 2048;\n pushSimpleEffect(\n 9,\n { destroy: void 0 },\n updateStoreInstance.bind(\n null,\n fiber,\n hook,\n getServerSnapshot,\n getSnapshot\n ),\n null\n );\n if (null === workInProgressRoot) throw Error(formatProdErrorMessage(349));\n isHydrating$jscomp$0 ||\n 0 !== (renderLanes & 127) ||\n pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n }\n return getServerSnapshot;\n}\nfunction pushStoreConsistencyCheck(fiber, getSnapshot, renderedSnapshot) {\n fiber.flags |= 16384;\n fiber = { getSnapshot: getSnapshot, value: renderedSnapshot };\n getSnapshot = currentlyRenderingFiber.updateQueue;\n null === getSnapshot\n ? ((getSnapshot = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = getSnapshot),\n (getSnapshot.stores = [fiber]))\n : ((renderedSnapshot = getSnapshot.stores),\n null === renderedSnapshot\n ? (getSnapshot.stores = [fiber])\n : renderedSnapshot.push(fiber));\n}\nfunction updateStoreInstance(fiber, inst, nextSnapshot, getSnapshot) {\n inst.value = nextSnapshot;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n}\nfunction subscribeToStore(fiber, inst, subscribe) {\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n });\n}\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n}\nfunction forceStoreRerender(fiber) {\n var root = enqueueConcurrentRenderForLane(fiber, 2);\n null !== root && scheduleUpdateOnFiber(root, fiber, 2);\n}\nfunction mountStateImpl(initialState) {\n var hook = mountWorkInProgressHook();\n if (\"function\" === typeof initialState) {\n var initialStateInitializer = initialState;\n initialState = initialStateInitializer();\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n initialStateInitializer();\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n }\n hook.memoizedState = hook.baseState = initialState;\n hook.queue = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: initialState\n };\n return hook;\n}\nfunction updateOptimisticImpl(hook, current, passthrough, reducer) {\n hook.baseState = passthrough;\n return updateReducerImpl(\n hook,\n currentHook,\n \"function\" === typeof reducer ? reducer : basicStateReducer\n );\n}\nfunction dispatchActionState(\n fiber,\n actionQueue,\n setPendingState,\n setState,\n payload\n) {\n if (isRenderPhaseUpdate(fiber)) throw Error(formatProdErrorMessage(485));\n fiber = actionQueue.action;\n if (null !== fiber) {\n var actionNode = {\n payload: payload,\n action: fiber,\n next: null,\n isTransition: !0,\n status: \"pending\",\n value: null,\n reason: null,\n listeners: [],\n then: function (listener) {\n actionNode.listeners.push(listener);\n }\n };\n null !== ReactSharedInternals.T\n ? setPendingState(!0)\n : (actionNode.isTransition = !1);\n setState(actionNode);\n setPendingState = actionQueue.pending;\n null === setPendingState\n ? ((actionNode.next = actionQueue.pending = actionNode),\n runActionStateAction(actionQueue, actionNode))\n : ((actionNode.next = setPendingState.next),\n (actionQueue.pending = setPendingState.next = actionNode));\n }\n}\nfunction runActionStateAction(actionQueue, node) {\n var action = node.action,\n payload = node.payload,\n prevState = actionQueue.state;\n if (node.isTransition) {\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n ReactSharedInternals.T = currentTransition;\n try {\n var returnValue = action(prevState, payload),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n handleActionReturnValue(actionQueue, node, returnValue);\n } catch (error) {\n onActionError(actionQueue, node, error);\n } finally {\n null !== prevTransition &&\n null !== currentTransition.types &&\n (prevTransition.types = currentTransition.types),\n (ReactSharedInternals.T = prevTransition);\n }\n } else\n try {\n (prevTransition = action(prevState, payload)),\n handleActionReturnValue(actionQueue, node, prevTransition);\n } catch (error$66) {\n onActionError(actionQueue, node, error$66);\n }\n}\nfunction handleActionReturnValue(actionQueue, node, returnValue) {\n null !== returnValue &&\n \"object\" === typeof returnValue &&\n \"function\" === typeof returnValue.then\n ? returnValue.then(\n function (nextState) {\n onActionSuccess(actionQueue, node, nextState);\n },\n function (error) {\n return onActionError(actionQueue, node, error);\n }\n )\n : onActionSuccess(actionQueue, node, returnValue);\n}\nfunction onActionSuccess(actionQueue, actionNode, nextState) {\n actionNode.status = \"fulfilled\";\n actionNode.value = nextState;\n notifyActionListeners(actionNode);\n actionQueue.state = nextState;\n actionNode = actionQueue.pending;\n null !== actionNode &&\n ((nextState = actionNode.next),\n nextState === actionNode\n ? (actionQueue.pending = null)\n : ((nextState = nextState.next),\n (actionNode.next = nextState),\n runActionStateAction(actionQueue, nextState)));\n}\nfunction onActionError(actionQueue, actionNode, error) {\n var last = actionQueue.pending;\n actionQueue.pending = null;\n if (null !== last) {\n last = last.next;\n do\n (actionNode.status = \"rejected\"),\n (actionNode.reason = error),\n notifyActionListeners(actionNode),\n (actionNode = actionNode.next);\n while (actionNode !== last);\n }\n actionQueue.action = null;\n}\nfunction notifyActionListeners(actionNode) {\n actionNode = actionNode.listeners;\n for (var i = 0; i < actionNode.length; i++) (0, actionNode[i])();\n}\nfunction actionStateReducer(oldState, newState) {\n return newState;\n}\nfunction mountActionState(action, initialStateProp) {\n if (isHydrating) {\n var ssrFormState = workInProgressRoot.formState;\n if (null !== ssrFormState) {\n a: {\n var JSCompiler_inline_result = currentlyRenderingFiber;\n if (isHydrating) {\n if (nextHydratableInstance) {\n b: {\n var JSCompiler_inline_result$jscomp$0 = nextHydratableInstance;\n for (\n var inRootOrSingleton = rootOrSingletonContext;\n 8 !== JSCompiler_inline_result$jscomp$0.nodeType;\n\n ) {\n if (!inRootOrSingleton) {\n JSCompiler_inline_result$jscomp$0 = null;\n break b;\n }\n JSCompiler_inline_result$jscomp$0 = getNextHydratable(\n JSCompiler_inline_result$jscomp$0.nextSibling\n );\n if (null === JSCompiler_inline_result$jscomp$0) {\n JSCompiler_inline_result$jscomp$0 = null;\n break b;\n }\n }\n inRootOrSingleton = JSCompiler_inline_result$jscomp$0.data;\n JSCompiler_inline_result$jscomp$0 =\n \"F!\" === inRootOrSingleton || \"F\" === inRootOrSingleton\n ? JSCompiler_inline_result$jscomp$0\n : null;\n }\n if (JSCompiler_inline_result$jscomp$0) {\n nextHydratableInstance = getNextHydratable(\n JSCompiler_inline_result$jscomp$0.nextSibling\n );\n JSCompiler_inline_result =\n \"F!\" === JSCompiler_inline_result$jscomp$0.data;\n break a;\n }\n }\n throwOnHydrationMismatch(JSCompiler_inline_result);\n }\n JSCompiler_inline_result = !1;\n }\n JSCompiler_inline_result && (initialStateProp = ssrFormState[0]);\n }\n }\n ssrFormState = mountWorkInProgressHook();\n ssrFormState.memoizedState = ssrFormState.baseState = initialStateProp;\n JSCompiler_inline_result = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: actionStateReducer,\n lastRenderedState: initialStateProp\n };\n ssrFormState.queue = JSCompiler_inline_result;\n ssrFormState = dispatchSetState.bind(\n null,\n currentlyRenderingFiber,\n JSCompiler_inline_result\n );\n JSCompiler_inline_result.dispatch = ssrFormState;\n JSCompiler_inline_result = mountStateImpl(!1);\n inRootOrSingleton = dispatchOptimisticSetState.bind(\n null,\n currentlyRenderingFiber,\n !1,\n JSCompiler_inline_result.queue\n );\n JSCompiler_inline_result = mountWorkInProgressHook();\n JSCompiler_inline_result$jscomp$0 = {\n state: initialStateProp,\n dispatch: null,\n action: action,\n pending: null\n };\n JSCompiler_inline_result.queue = JSCompiler_inline_result$jscomp$0;\n ssrFormState = dispatchActionState.bind(\n null,\n currentlyRenderingFiber,\n JSCompiler_inline_result$jscomp$0,\n inRootOrSingleton,\n ssrFormState\n );\n JSCompiler_inline_result$jscomp$0.dispatch = ssrFormState;\n JSCompiler_inline_result.memoizedState = action;\n return [initialStateProp, ssrFormState, !1];\n}\nfunction updateActionState(action) {\n var stateHook = updateWorkInProgressHook();\n return updateActionStateImpl(stateHook, currentHook, action);\n}\nfunction updateActionStateImpl(stateHook, currentStateHook, action) {\n currentStateHook = updateReducerImpl(\n stateHook,\n currentStateHook,\n actionStateReducer\n )[0];\n stateHook = updateReducer(basicStateReducer)[0];\n if (\n \"object\" === typeof currentStateHook &&\n null !== currentStateHook &&\n \"function\" === typeof currentStateHook.then\n )\n try {\n var state = useThenable(currentStateHook);\n } catch (x) {\n if (x === SuspenseException) throw SuspenseActionException;\n throw x;\n }\n else state = currentStateHook;\n currentStateHook = updateWorkInProgressHook();\n var actionQueue = currentStateHook.queue,\n dispatch = actionQueue.dispatch;\n action !== currentStateHook.memoizedState &&\n ((currentlyRenderingFiber.flags |= 2048),\n pushSimpleEffect(\n 9,\n { destroy: void 0 },\n actionStateActionEffect.bind(null, actionQueue, action),\n null\n ));\n return [state, dispatch, stateHook];\n}\nfunction actionStateActionEffect(actionQueue, action) {\n actionQueue.action = action;\n}\nfunction rerenderActionState(action) {\n var stateHook = updateWorkInProgressHook(),\n currentStateHook = currentHook;\n if (null !== currentStateHook)\n return updateActionStateImpl(stateHook, currentStateHook, action);\n updateWorkInProgressHook();\n stateHook = stateHook.memoizedState;\n currentStateHook = updateWorkInProgressHook();\n var dispatch = currentStateHook.queue.dispatch;\n currentStateHook.memoizedState = action;\n return [stateHook, dispatch, !1];\n}\nfunction pushSimpleEffect(tag, inst, create, deps) {\n tag = { tag: tag, create: create, deps: deps, inst: inst, next: null };\n inst = currentlyRenderingFiber.updateQueue;\n null === inst &&\n ((inst = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = inst));\n create = inst.lastEffect;\n null === create\n ? (inst.lastEffect = tag.next = tag)\n : ((deps = create.next),\n (create.next = tag),\n (tag.next = deps),\n (inst.lastEffect = tag));\n return tag;\n}\nfunction updateRef() {\n return updateWorkInProgressHook().memoizedState;\n}\nfunction mountEffectImpl(fiberFlags, hookFlags, create, deps) {\n var hook = mountWorkInProgressHook();\n currentlyRenderingFiber.flags |= fiberFlags;\n hook.memoizedState = pushSimpleEffect(\n 1 | hookFlags,\n { destroy: void 0 },\n create,\n void 0 === deps ? null : deps\n );\n}\nfunction updateEffectImpl(fiberFlags, hookFlags, create, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var inst = hook.memoizedState.inst;\n null !== currentHook &&\n null !== deps &&\n areHookInputsEqual(deps, currentHook.memoizedState.deps)\n ? (hook.memoizedState = pushSimpleEffect(hookFlags, inst, create, deps))\n : ((currentlyRenderingFiber.flags |= fiberFlags),\n (hook.memoizedState = pushSimpleEffect(\n 1 | hookFlags,\n inst,\n create,\n deps\n )));\n}\nfunction mountEffect(create, deps) {\n mountEffectImpl(8390656, 8, create, deps);\n}\nfunction updateEffect(create, deps) {\n updateEffectImpl(2048, 8, create, deps);\n}\nfunction useEffectEventImpl(payload) {\n currentlyRenderingFiber.flags |= 4;\n var componentUpdateQueue = currentlyRenderingFiber.updateQueue;\n if (null === componentUpdateQueue)\n (componentUpdateQueue = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = componentUpdateQueue),\n (componentUpdateQueue.events = [payload]);\n else {\n var events = componentUpdateQueue.events;\n null === events\n ? (componentUpdateQueue.events = [payload])\n : events.push(payload);\n }\n}\nfunction updateEvent(callback) {\n var ref = updateWorkInProgressHook().memoizedState;\n useEffectEventImpl({ ref: ref, nextImpl: callback });\n return function () {\n if (0 !== (executionContext & 2)) throw Error(formatProdErrorMessage(440));\n return ref.impl.apply(void 0, arguments);\n };\n}\nfunction updateInsertionEffect(create, deps) {\n return updateEffectImpl(4, 2, create, deps);\n}\nfunction updateLayoutEffect(create, deps) {\n return updateEffectImpl(4, 4, create, deps);\n}\nfunction imperativeHandleEffect(create, ref) {\n if (\"function\" === typeof ref) {\n create = create();\n var refCleanup = ref(create);\n return function () {\n \"function\" === typeof refCleanup ? refCleanup() : ref(null);\n };\n }\n if (null !== ref && void 0 !== ref)\n return (\n (create = create()),\n (ref.current = create),\n function () {\n ref.current = null;\n }\n );\n}\nfunction updateImperativeHandle(ref, create, deps) {\n deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n updateEffectImpl(4, 4, imperativeHandleEffect.bind(null, create, ref), deps);\n}\nfunction mountDebugValue() {}\nfunction updateCallback(callback, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var prevState = hook.memoizedState;\n if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n return prevState[0];\n hook.memoizedState = [callback, deps];\n return callback;\n}\nfunction updateMemo(nextCreate, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var prevState = hook.memoizedState;\n if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n return prevState[0];\n prevState = nextCreate();\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n nextCreate();\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n hook.memoizedState = [prevState, deps];\n return prevState;\n}\nfunction mountDeferredValueImpl(hook, value, initialValue) {\n if (\n void 0 === initialValue ||\n (0 !== (renderLanes & 1073741824) &&\n 0 === (workInProgressRootRenderLanes & 261930))\n )\n return (hook.memoizedState = value);\n hook.memoizedState = initialValue;\n hook = requestDeferredLane();\n currentlyRenderingFiber.lanes |= hook;\n workInProgressRootSkippedLanes |= hook;\n return initialValue;\n}\nfunction updateDeferredValueImpl(hook, prevValue, value, initialValue) {\n if (objectIs(value, prevValue)) return value;\n if (null !== currentTreeHiddenStackCursor.current)\n return (\n (hook = mountDeferredValueImpl(hook, value, initialValue)),\n objectIs(hook, prevValue) || (didReceiveUpdate = !0),\n hook\n );\n if (\n 0 === (renderLanes & 42) ||\n (0 !== (renderLanes & 1073741824) &&\n 0 === (workInProgressRootRenderLanes & 261930))\n )\n return (didReceiveUpdate = !0), (hook.memoizedState = value);\n hook = requestDeferredLane();\n currentlyRenderingFiber.lanes |= hook;\n workInProgressRootSkippedLanes |= hook;\n return prevValue;\n}\nfunction startTransition(fiber, queue, pendingState, finishedState, callback) {\n var previousPriority = ReactDOMSharedInternals.p;\n ReactDOMSharedInternals.p =\n 0 !== previousPriority && 8 > previousPriority ? previousPriority : 8;\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n ReactSharedInternals.T = currentTransition;\n dispatchOptimisticSetState(fiber, !1, queue, pendingState);\n try {\n var returnValue = callback(),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n if (\n null !== returnValue &&\n \"object\" === typeof returnValue &&\n \"function\" === typeof returnValue.then\n ) {\n var thenableForFinishedState = chainThenableValue(\n returnValue,\n finishedState\n );\n dispatchSetStateInternal(\n fiber,\n queue,\n thenableForFinishedState,\n requestUpdateLane(fiber)\n );\n } else\n dispatchSetStateInternal(\n fiber,\n queue,\n finishedState,\n requestUpdateLane(fiber)\n );\n } catch (error) {\n dispatchSetStateInternal(\n fiber,\n queue,\n { then: function () {}, status: \"rejected\", reason: error },\n requestUpdateLane()\n );\n } finally {\n (ReactDOMSharedInternals.p = previousPriority),\n null !== prevTransition &&\n null !== currentTransition.types &&\n (prevTransition.types = currentTransition.types),\n (ReactSharedInternals.T = prevTransition);\n }\n}\nfunction noop() {}\nfunction startHostTransition(formFiber, pendingState, action, formData) {\n if (5 !== formFiber.tag) throw Error(formatProdErrorMessage(476));\n var queue = ensureFormComponentIsStateful(formFiber).queue;\n startTransition(\n formFiber,\n queue,\n pendingState,\n sharedNotPendingObject,\n null === action\n ? noop\n : function () {\n requestFormReset$1(formFiber);\n return action(formData);\n }\n );\n}\nfunction ensureFormComponentIsStateful(formFiber) {\n var existingStateHook = formFiber.memoizedState;\n if (null !== existingStateHook) return existingStateHook;\n existingStateHook = {\n memoizedState: sharedNotPendingObject,\n baseState: sharedNotPendingObject,\n baseQueue: null,\n queue: {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: sharedNotPendingObject\n },\n next: null\n };\n var initialResetState = {};\n existingStateHook.next = {\n memoizedState: initialResetState,\n baseState: initialResetState,\n baseQueue: null,\n queue: {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: initialResetState\n },\n next: null\n };\n formFiber.memoizedState = existingStateHook;\n formFiber = formFiber.alternate;\n null !== formFiber && (formFiber.memoizedState = existingStateHook);\n return existingStateHook;\n}\nfunction requestFormReset$1(formFiber) {\n var stateHook = ensureFormComponentIsStateful(formFiber);\n null === stateHook.next && (stateHook = formFiber.alternate.memoizedState);\n dispatchSetStateInternal(\n formFiber,\n stateHook.next.queue,\n {},\n requestUpdateLane()\n );\n}\nfunction useHostTransitionStatus() {\n return readContext(HostTransitionContext);\n}\nfunction updateId() {\n return updateWorkInProgressHook().memoizedState;\n}\nfunction updateRefresh() {\n return updateWorkInProgressHook().memoizedState;\n}\nfunction refreshCache(fiber) {\n for (var provider = fiber.return; null !== provider; ) {\n switch (provider.tag) {\n case 24:\n case 3:\n var lane = requestUpdateLane();\n fiber = createUpdate(lane);\n var root$69 = enqueueUpdate(provider, fiber, lane);\n null !== root$69 &&\n (scheduleUpdateOnFiber(root$69, provider, lane),\n entangleTransitions(root$69, provider, lane));\n provider = { cache: createCache() };\n fiber.payload = provider;\n return;\n }\n provider = provider.return;\n }\n}\nfunction dispatchReducerAction(fiber, queue, action) {\n var lane = requestUpdateLane();\n action = {\n lane: lane,\n revertLane: 0,\n gesture: null,\n action: action,\n hasEagerState: !1,\n eagerState: null,\n next: null\n };\n isRenderPhaseUpdate(fiber)\n ? enqueueRenderPhaseUpdate(queue, action)\n : ((action = enqueueConcurrentHookUpdate(fiber, queue, action, lane)),\n null !== action &&\n (scheduleUpdateOnFiber(action, fiber, lane),\n entangleTransitionUpdate(action, queue, lane)));\n}\nfunction dispatchSetState(fiber, queue, action) {\n var lane = requestUpdateLane();\n dispatchSetStateInternal(fiber, queue, action, lane);\n}\nfunction dispatchSetStateInternal(fiber, queue, action, lane) {\n var update = {\n lane: lane,\n revertLane: 0,\n gesture: null,\n action: action,\n hasEagerState: !1,\n eagerState: null,\n next: null\n };\n if (isRenderPhaseUpdate(fiber)) enqueueRenderPhaseUpdate(queue, update);\n else {\n var alternate = fiber.alternate;\n if (\n 0 === fiber.lanes &&\n (null === alternate || 0 === alternate.lanes) &&\n ((alternate = queue.lastRenderedReducer), null !== alternate)\n )\n try {\n var currentState = queue.lastRenderedState,\n eagerState = alternate(currentState, action);\n update.hasEagerState = !0;\n update.eagerState = eagerState;\n if (objectIs(eagerState, currentState))\n return (\n enqueueUpdate$1(fiber, queue, update, 0),\n null === workInProgressRoot && finishQueueingConcurrentUpdates(),\n !1\n );\n } catch (error) {\n } finally {\n }\n action = enqueueConcurrentHookUpdate(fiber, queue, update, lane);\n if (null !== action)\n return (\n scheduleUpdateOnFiber(action, fiber, lane),\n entangleTransitionUpdate(action, queue, lane),\n !0\n );\n }\n return !1;\n}\nfunction dispatchOptimisticSetState(fiber, throwIfDuringRender, queue, action) {\n action = {\n lane: 2,\n revertLane: requestTransitionLane(),\n gesture: null,\n action: action,\n hasEagerState: !1,\n eagerState: null,\n next: null\n };\n if (isRenderPhaseUpdate(fiber)) {\n if (throwIfDuringRender) throw Error(formatProdErrorMessage(479));\n } else\n (throwIfDuringRender = enqueueConcurrentHookUpdate(\n fiber,\n queue,\n action,\n 2\n )),\n null !== throwIfDuringRender &&\n scheduleUpdateOnFiber(throwIfDuringRender, fiber, 2);\n}\nfunction isRenderPhaseUpdate(fiber) {\n var alternate = fiber.alternate;\n return (\n fiber === currentlyRenderingFiber ||\n (null !== alternate && alternate === currentlyRenderingFiber)\n );\n}\nfunction enqueueRenderPhaseUpdate(queue, update) {\n didScheduleRenderPhaseUpdateDuringThisPass = didScheduleRenderPhaseUpdate =\n !0;\n var pending = queue.pending;\n null === pending\n ? (update.next = update)\n : ((update.next = pending.next), (pending.next = update));\n queue.pending = update;\n}\nfunction entangleTransitionUpdate(root, queue, lane) {\n if (0 !== (lane & 4194048)) {\n var queueLanes = queue.lanes;\n queueLanes &= root.pendingLanes;\n lane |= queueLanes;\n queue.lanes = lane;\n markRootEntangled(root, lane);\n }\n}\nvar ContextOnlyDispatcher = {\n readContext: readContext,\n use: use,\n useCallback: throwInvalidHookError,\n useContext: throwInvalidHookError,\n useEffect: throwInvalidHookError,\n useImperativeHandle: throwInvalidHookError,\n useLayoutEffect: throwInvalidHookError,\n useInsertionEffect: throwInvalidHookError,\n useMemo: throwInvalidHookError,\n useReducer: throwInvalidHookError,\n useRef: throwInvalidHookError,\n useState: throwInvalidHookError,\n useDebugValue: throwInvalidHookError,\n useDeferredValue: throwInvalidHookError,\n useTransition: throwInvalidHookError,\n useSyncExternalStore: throwInvalidHookError,\n useId: throwInvalidHookError,\n useHostTransitionStatus: throwInvalidHookError,\n useFormState: throwInvalidHookError,\n useActionState: throwInvalidHookError,\n useOptimistic: throwInvalidHookError,\n useMemoCache: throwInvalidHookError,\n useCacheRefresh: throwInvalidHookError\n};\nContextOnlyDispatcher.useEffectEvent = throwInvalidHookError;\nvar HooksDispatcherOnMount = {\n readContext: readContext,\n use: use,\n useCallback: function (callback, deps) {\n mountWorkInProgressHook().memoizedState = [\n callback,\n void 0 === deps ? null : deps\n ];\n return callback;\n },\n useContext: readContext,\n useEffect: mountEffect,\n useImperativeHandle: function (ref, create, deps) {\n deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n mountEffectImpl(\n 4194308,\n 4,\n imperativeHandleEffect.bind(null, create, ref),\n deps\n );\n },\n useLayoutEffect: function (create, deps) {\n return mountEffectImpl(4194308, 4, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n mountEffectImpl(4, 2, create, deps);\n },\n useMemo: function (nextCreate, deps) {\n var hook = mountWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var nextValue = nextCreate();\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n nextCreate();\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n hook.memoizedState = [nextValue, deps];\n return nextValue;\n },\n useReducer: function (reducer, initialArg, init) {\n var hook = mountWorkInProgressHook();\n if (void 0 !== init) {\n var initialState = init(initialArg);\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n init(initialArg);\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n } else initialState = initialArg;\n hook.memoizedState = hook.baseState = initialState;\n reducer = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: reducer,\n lastRenderedState: initialState\n };\n hook.queue = reducer;\n reducer = reducer.dispatch = dispatchReducerAction.bind(\n null,\n currentlyRenderingFiber,\n reducer\n );\n return [hook.memoizedState, reducer];\n },\n useRef: function (initialValue) {\n var hook = mountWorkInProgressHook();\n initialValue = { current: initialValue };\n return (hook.memoizedState = initialValue);\n },\n useState: function (initialState) {\n initialState = mountStateImpl(initialState);\n var queue = initialState.queue,\n dispatch = dispatchSetState.bind(null, currentlyRenderingFiber, queue);\n queue.dispatch = dispatch;\n return [initialState.memoizedState, dispatch];\n },\n useDebugValue: mountDebugValue,\n useDeferredValue: function (value, initialValue) {\n var hook = mountWorkInProgressHook();\n return mountDeferredValueImpl(hook, value, initialValue);\n },\n useTransition: function () {\n var stateHook = mountStateImpl(!1);\n stateHook = startTransition.bind(\n null,\n currentlyRenderingFiber,\n stateHook.queue,\n !0,\n !1\n );\n mountWorkInProgressHook().memoizedState = stateHook;\n return [!1, stateHook];\n },\n useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {\n var fiber = currentlyRenderingFiber,\n hook = mountWorkInProgressHook();\n if (isHydrating) {\n if (void 0 === getServerSnapshot)\n throw Error(formatProdErrorMessage(407));\n getServerSnapshot = getServerSnapshot();\n } else {\n getServerSnapshot = getSnapshot();\n if (null === workInProgressRoot)\n throw Error(formatProdErrorMessage(349));\n 0 !== (workInProgressRootRenderLanes & 127) ||\n pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n }\n hook.memoizedState = getServerSnapshot;\n var inst = { value: getServerSnapshot, getSnapshot: getSnapshot };\n hook.queue = inst;\n mountEffect(subscribeToStore.bind(null, fiber, inst, subscribe), [\n subscribe\n ]);\n fiber.flags |= 2048;\n pushSimpleEffect(\n 9,\n { destroy: void 0 },\n updateStoreInstance.bind(\n null,\n fiber,\n inst,\n getServerSnapshot,\n getSnapshot\n ),\n null\n );\n return getServerSnapshot;\n },\n useId: function () {\n var hook = mountWorkInProgressHook(),\n identifierPrefix = workInProgressRoot.identifierPrefix;\n if (isHydrating) {\n var JSCompiler_inline_result = treeContextOverflow;\n var idWithLeadingBit = treeContextId;\n JSCompiler_inline_result =\n (\n idWithLeadingBit & ~(1 << (32 - clz32(idWithLeadingBit) - 1))\n ).toString(32) + JSCompiler_inline_result;\n identifierPrefix =\n \"_\" + identifierPrefix + \"R_\" + JSCompiler_inline_result;\n JSCompiler_inline_result = localIdCounter++;\n 0 < JSCompiler_inline_result &&\n (identifierPrefix += \"H\" + JSCompiler_inline_result.toString(32));\n identifierPrefix += \"_\";\n } else\n (JSCompiler_inline_result = globalClientIdCounter++),\n (identifierPrefix =\n \"_\" +\n identifierPrefix +\n \"r_\" +\n JSCompiler_inline_result.toString(32) +\n \"_\");\n return (hook.memoizedState = identifierPrefix);\n },\n useHostTransitionStatus: useHostTransitionStatus,\n useFormState: mountActionState,\n useActionState: mountActionState,\n useOptimistic: function (passthrough) {\n var hook = mountWorkInProgressHook();\n hook.memoizedState = hook.baseState = passthrough;\n var queue = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: null,\n lastRenderedState: null\n };\n hook.queue = queue;\n hook = dispatchOptimisticSetState.bind(\n null,\n currentlyRenderingFiber,\n !0,\n queue\n );\n queue.dispatch = hook;\n return [passthrough, hook];\n },\n useMemoCache: useMemoCache,\n useCacheRefresh: function () {\n return (mountWorkInProgressHook().memoizedState = refreshCache.bind(\n null,\n currentlyRenderingFiber\n ));\n },\n useEffectEvent: function (callback) {\n var hook = mountWorkInProgressHook(),\n ref = { impl: callback };\n hook.memoizedState = ref;\n return function () {\n if (0 !== (executionContext & 2))\n throw Error(formatProdErrorMessage(440));\n return ref.impl.apply(void 0, arguments);\n };\n }\n },\n HooksDispatcherOnUpdate = {\n readContext: readContext,\n use: use,\n useCallback: updateCallback,\n useContext: readContext,\n useEffect: updateEffect,\n useImperativeHandle: updateImperativeHandle,\n useInsertionEffect: updateInsertionEffect,\n useLayoutEffect: updateLayoutEffect,\n useMemo: updateMemo,\n useReducer: updateReducer,\n useRef: updateRef,\n useState: function () {\n return updateReducer(basicStateReducer);\n },\n useDebugValue: mountDebugValue,\n useDeferredValue: function (value, initialValue) {\n var hook = updateWorkInProgressHook();\n return updateDeferredValueImpl(\n hook,\n currentHook.memoizedState,\n value,\n initialValue\n );\n },\n useTransition: function () {\n var booleanOrThenable = updateReducer(basicStateReducer)[0],\n start = updateWorkInProgressHook().memoizedState;\n return [\n \"boolean\" === typeof booleanOrThenable\n ? booleanOrThenable\n : useThenable(booleanOrThenable),\n start\n ];\n },\n useSyncExternalStore: updateSyncExternalStore,\n useId: updateId,\n useHostTransitionStatus: useHostTransitionStatus,\n useFormState: updateActionState,\n useActionState: updateActionState,\n useOptimistic: function (passthrough, reducer) {\n var hook = updateWorkInProgressHook();\n return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n },\n useMemoCache: useMemoCache,\n useCacheRefresh: updateRefresh\n };\nHooksDispatcherOnUpdate.useEffectEvent = updateEvent;\nvar HooksDispatcherOnRerender = {\n readContext: readContext,\n use: use,\n useCallback: updateCallback,\n useContext: readContext,\n useEffect: updateEffect,\n useImperativeHandle: updateImperativeHandle,\n useInsertionEffect: updateInsertionEffect,\n useLayoutEffect: updateLayoutEffect,\n useMemo: updateMemo,\n useReducer: rerenderReducer,\n useRef: updateRef,\n useState: function () {\n return rerenderReducer(basicStateReducer);\n },\n useDebugValue: mountDebugValue,\n useDeferredValue: function (value, initialValue) {\n var hook = updateWorkInProgressHook();\n return null === currentHook\n ? mountDeferredValueImpl(hook, value, initialValue)\n : updateDeferredValueImpl(\n hook,\n currentHook.memoizedState,\n value,\n initialValue\n );\n },\n useTransition: function () {\n var booleanOrThenable = rerenderReducer(basicStateReducer)[0],\n start = updateWorkInProgressHook().memoizedState;\n return [\n \"boolean\" === typeof booleanOrThenable\n ? booleanOrThenable\n : useThenable(booleanOrThenable),\n start\n ];\n },\n useSyncExternalStore: updateSyncExternalStore,\n useId: updateId,\n useHostTransitionStatus: useHostTransitionStatus,\n useFormState: rerenderActionState,\n useActionState: rerenderActionState,\n useOptimistic: function (passthrough, reducer) {\n var hook = updateWorkInProgressHook();\n if (null !== currentHook)\n return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n hook.baseState = passthrough;\n return [passthrough, hook.queue.dispatch];\n },\n useMemoCache: useMemoCache,\n useCacheRefresh: updateRefresh\n};\nHooksDispatcherOnRerender.useEffectEvent = updateEvent;\nfunction applyDerivedStateFromProps(\n workInProgress,\n ctor,\n getDerivedStateFromProps,\n nextProps\n) {\n ctor = workInProgress.memoizedState;\n getDerivedStateFromProps = getDerivedStateFromProps(nextProps, ctor);\n getDerivedStateFromProps =\n null === getDerivedStateFromProps || void 0 === getDerivedStateFromProps\n ? ctor\n : assign({}, ctor, getDerivedStateFromProps);\n workInProgress.memoizedState = getDerivedStateFromProps;\n 0 === workInProgress.lanes &&\n (workInProgress.updateQueue.baseState = getDerivedStateFromProps);\n}\nvar classComponentUpdater = {\n enqueueSetState: function (inst, payload, callback) {\n inst = inst._reactInternals;\n var lane = requestUpdateLane(),\n update = createUpdate(lane);\n update.payload = payload;\n void 0 !== callback && null !== callback && (update.callback = callback);\n payload = enqueueUpdate(inst, update, lane);\n null !== payload &&\n (scheduleUpdateOnFiber(payload, inst, lane),\n entangleTransitions(payload, inst, lane));\n },\n enqueueReplaceState: function (inst, payload, callback) {\n inst = inst._reactInternals;\n var lane = requestUpdateLane(),\n update = createUpdate(lane);\n update.tag = 1;\n update.payload = payload;\n void 0 !== callback && null !== callback && (update.callback = callback);\n payload = enqueueUpdate(inst, update, lane);\n null !== payload &&\n (scheduleUpdateOnFiber(payload, inst, lane),\n entangleTransitions(payload, inst, lane));\n },\n enqueueForceUpdate: function (inst, callback) {\n inst = inst._reactInternals;\n var lane = requestUpdateLane(),\n update = createUpdate(lane);\n update.tag = 2;\n void 0 !== callback && null !== callback && (update.callback = callback);\n callback = enqueueUpdate(inst, update, lane);\n null !== callback &&\n (scheduleUpdateOnFiber(callback, inst, lane),\n entangleTransitions(callback, inst, lane));\n }\n};\nfunction checkShouldComponentUpdate(\n workInProgress,\n ctor,\n oldProps,\n newProps,\n oldState,\n newState,\n nextContext\n) {\n workInProgress = workInProgress.stateNode;\n return \"function\" === typeof workInProgress.shouldComponentUpdate\n ? workInProgress.shouldComponentUpdate(newProps, newState, nextContext)\n : ctor.prototype && ctor.prototype.isPureReactComponent\n ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState)\n : !0;\n}\nfunction callComponentWillReceiveProps(\n workInProgress,\n instance,\n newProps,\n nextContext\n) {\n workInProgress = instance.state;\n \"function\" === typeof instance.componentWillReceiveProps &&\n instance.componentWillReceiveProps(newProps, nextContext);\n \"function\" === typeof instance.UNSAFE_componentWillReceiveProps &&\n instance.UNSAFE_componentWillReceiveProps(newProps, nextContext);\n instance.state !== workInProgress &&\n classComponentUpdater.enqueueReplaceState(instance, instance.state, null);\n}\nfunction resolveClassComponentProps(Component, baseProps) {\n var newProps = baseProps;\n if (\"ref\" in baseProps) {\n newProps = {};\n for (var propName in baseProps)\n \"ref\" !== propName && (newProps[propName] = baseProps[propName]);\n }\n if ((Component = Component.defaultProps)) {\n newProps === baseProps && (newProps = assign({}, newProps));\n for (var propName$73 in Component)\n void 0 === newProps[propName$73] &&\n (newProps[propName$73] = Component[propName$73]);\n }\n return newProps;\n}\nfunction defaultOnUncaughtError(error) {\n reportGlobalError(error);\n}\nfunction defaultOnCaughtError(error) {\n console.error(error);\n}\nfunction defaultOnRecoverableError(error) {\n reportGlobalError(error);\n}\nfunction logUncaughtError(root, errorInfo) {\n try {\n var onUncaughtError = root.onUncaughtError;\n onUncaughtError(errorInfo.value, { componentStack: errorInfo.stack });\n } catch (e$74) {\n setTimeout(function () {\n throw e$74;\n });\n }\n}\nfunction logCaughtError(root, boundary, errorInfo) {\n try {\n var onCaughtError = root.onCaughtError;\n onCaughtError(errorInfo.value, {\n componentStack: errorInfo.stack,\n errorBoundary: 1 === boundary.tag ? boundary.stateNode : null\n });\n } catch (e$75) {\n setTimeout(function () {\n throw e$75;\n });\n }\n}\nfunction createRootErrorUpdate(root, errorInfo, lane) {\n lane = createUpdate(lane);\n lane.tag = 3;\n lane.payload = { element: null };\n lane.callback = function () {\n logUncaughtError(root, errorInfo);\n };\n return lane;\n}\nfunction createClassErrorUpdate(lane) {\n lane = createUpdate(lane);\n lane.tag = 3;\n return lane;\n}\nfunction initializeClassErrorUpdate(update, root, fiber, errorInfo) {\n var getDerivedStateFromError = fiber.type.getDerivedStateFromError;\n if (\"function\" === typeof getDerivedStateFromError) {\n var error = errorInfo.value;\n update.payload = function () {\n return getDerivedStateFromError(error);\n };\n update.callback = function () {\n logCaughtError(root, fiber, errorInfo);\n };\n }\n var inst = fiber.stateNode;\n null !== inst &&\n \"function\" === typeof inst.componentDidCatch &&\n (update.callback = function () {\n logCaughtError(root, fiber, errorInfo);\n \"function\" !== typeof getDerivedStateFromError &&\n (null === legacyErrorBoundariesThatAlreadyFailed\n ? (legacyErrorBoundariesThatAlreadyFailed = new Set([this]))\n : legacyErrorBoundariesThatAlreadyFailed.add(this));\n var stack = errorInfo.stack;\n this.componentDidCatch(errorInfo.value, {\n componentStack: null !== stack ? stack : \"\"\n });\n });\n}\nfunction throwException(\n root,\n returnFiber,\n sourceFiber,\n value,\n rootRenderLanes\n) {\n sourceFiber.flags |= 32768;\n if (\n null !== value &&\n \"object\" === typeof value &&\n \"function\" === typeof value.then\n ) {\n returnFiber = sourceFiber.alternate;\n null !== returnFiber &&\n propagateParentContextChanges(\n returnFiber,\n sourceFiber,\n rootRenderLanes,\n !0\n );\n sourceFiber = suspenseHandlerStackCursor.current;\n if (null !== sourceFiber) {\n switch (sourceFiber.tag) {\n case 31:\n case 13:\n return (\n null === shellBoundary\n ? renderDidSuspendDelayIfPossible()\n : null === sourceFiber.alternate &&\n 0 === workInProgressRootExitStatus &&\n (workInProgressRootExitStatus = 3),\n (sourceFiber.flags &= -257),\n (sourceFiber.flags |= 65536),\n (sourceFiber.lanes = rootRenderLanes),\n value === noopSuspenseyCommitThenable\n ? (sourceFiber.flags |= 16384)\n : ((returnFiber = sourceFiber.updateQueue),\n null === returnFiber\n ? (sourceFiber.updateQueue = new Set([value]))\n : returnFiber.add(value),\n attachPingListener(root, value, rootRenderLanes)),\n !1\n );\n case 22:\n return (\n (sourceFiber.flags |= 65536),\n value === noopSuspenseyCommitThenable\n ? (sourceFiber.flags |= 16384)\n : ((returnFiber = sourceFiber.updateQueue),\n null === returnFiber\n ? ((returnFiber = {\n transitions: null,\n markerInstances: null,\n retryQueue: new Set([value])\n }),\n (sourceFiber.updateQueue = returnFiber))\n : ((sourceFiber = returnFiber.retryQueue),\n null === sourceFiber\n ? (returnFiber.retryQueue = new Set([value]))\n : sourceFiber.add(value)),\n attachPingListener(root, value, rootRenderLanes)),\n !1\n );\n }\n throw Error(formatProdErrorMessage(435, sourceFiber.tag));\n }\n attachPingListener(root, value, rootRenderLanes);\n renderDidSuspendDelayIfPossible();\n return !1;\n }\n if (isHydrating)\n return (\n (returnFiber = suspenseHandlerStackCursor.current),\n null !== returnFiber\n ? (0 === (returnFiber.flags & 65536) && (returnFiber.flags |= 256),\n (returnFiber.flags |= 65536),\n (returnFiber.lanes = rootRenderLanes),\n value !== HydrationMismatchException &&\n ((root = Error(formatProdErrorMessage(422), { cause: value })),\n queueHydrationError(createCapturedValueAtFiber(root, sourceFiber))))\n : (value !== HydrationMismatchException &&\n ((returnFiber = Error(formatProdErrorMessage(423), {\n cause: value\n })),\n queueHydrationError(\n createCapturedValueAtFiber(returnFiber, sourceFiber)\n )),\n (root = root.current.alternate),\n (root.flags |= 65536),\n (rootRenderLanes &= -rootRenderLanes),\n (root.lanes |= rootRenderLanes),\n (value = createCapturedValueAtFiber(value, sourceFiber)),\n (rootRenderLanes = createRootErrorUpdate(\n root.stateNode,\n value,\n rootRenderLanes\n )),\n enqueueCapturedUpdate(root, rootRenderLanes),\n 4 !== workInProgressRootExitStatus &&\n (workInProgressRootExitStatus = 2)),\n !1\n );\n var wrapperError = Error(formatProdErrorMessage(520), { cause: value });\n wrapperError = createCapturedValueAtFiber(wrapperError, sourceFiber);\n null === workInProgressRootConcurrentErrors\n ? (workInProgressRootConcurrentErrors = [wrapperError])\n : workInProgressRootConcurrentErrors.push(wrapperError);\n 4 !== workInProgressRootExitStatus && (workInProgressRootExitStatus = 2);\n if (null === returnFiber) return !0;\n value = createCapturedValueAtFiber(value, sourceFiber);\n sourceFiber = returnFiber;\n do {\n switch (sourceFiber.tag) {\n case 3:\n return (\n (sourceFiber.flags |= 65536),\n (root = rootRenderLanes & -rootRenderLanes),\n (sourceFiber.lanes |= root),\n (root = createRootErrorUpdate(sourceFiber.stateNode, value, root)),\n enqueueCapturedUpdate(sourceFiber, root),\n !1\n );\n case 1:\n if (\n ((returnFiber = sourceFiber.type),\n (wrapperError = sourceFiber.stateNode),\n 0 === (sourceFiber.flags & 128) &&\n (\"function\" === typeof returnFiber.getDerivedStateFromError ||\n (null !== wrapperError &&\n \"function\" === typeof wrapperError.componentDidCatch &&\n (null === legacyErrorBoundariesThatAlreadyFailed ||\n !legacyErrorBoundariesThatAlreadyFailed.has(wrapperError)))))\n )\n return (\n (sourceFiber.flags |= 65536),\n (rootRenderLanes &= -rootRenderLanes),\n (sourceFiber.lanes |= rootRenderLanes),\n (rootRenderLanes = createClassErrorUpdate(rootRenderLanes)),\n initializeClassErrorUpdate(\n rootRenderLanes,\n root,\n sourceFiber,\n value\n ),\n enqueueCapturedUpdate(sourceFiber, rootRenderLanes),\n !1\n );\n }\n sourceFiber = sourceFiber.return;\n } while (null !== sourceFiber);\n return !1;\n}\nvar SelectiveHydrationException = Error(formatProdErrorMessage(461)),\n didReceiveUpdate = !1;\nfunction reconcileChildren(current, workInProgress, nextChildren, renderLanes) {\n workInProgress.child =\n null === current\n ? mountChildFibers(workInProgress, null, nextChildren, renderLanes)\n : reconcileChildFibers(\n workInProgress,\n current.child,\n nextChildren,\n renderLanes\n );\n}\nfunction updateForwardRef(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n Component = Component.render;\n var ref = workInProgress.ref;\n if (\"ref\" in nextProps) {\n var propsWithoutRef = {};\n for (var key in nextProps)\n \"ref\" !== key && (propsWithoutRef[key] = nextProps[key]);\n } else propsWithoutRef = nextProps;\n prepareToReadContext(workInProgress);\n nextProps = renderWithHooks(\n current,\n workInProgress,\n Component,\n propsWithoutRef,\n ref,\n renderLanes\n );\n key = checkDidRenderIdHook();\n if (null !== current && !didReceiveUpdate)\n return (\n bailoutHooks(current, workInProgress, renderLanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n isHydrating && key && pushMaterializedTreeId(workInProgress);\n workInProgress.flags |= 1;\n reconcileChildren(current, workInProgress, nextProps, renderLanes);\n return workInProgress.child;\n}\nfunction updateMemoComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n if (null === current) {\n var type = Component.type;\n if (\n \"function\" === typeof type &&\n !shouldConstruct(type) &&\n void 0 === type.defaultProps &&\n null === Component.compare\n )\n return (\n (workInProgress.tag = 15),\n (workInProgress.type = type),\n updateSimpleMemoComponent(\n current,\n workInProgress,\n type,\n nextProps,\n renderLanes\n )\n );\n current = createFiberFromTypeAndProps(\n Component.type,\n null,\n nextProps,\n workInProgress,\n workInProgress.mode,\n renderLanes\n );\n current.ref = workInProgress.ref;\n current.return = workInProgress;\n return (workInProgress.child = current);\n }\n type = current.child;\n if (!checkScheduledUpdateOrContext(current, renderLanes)) {\n var prevProps = type.memoizedProps;\n Component = Component.compare;\n Component = null !== Component ? Component : shallowEqual;\n if (Component(prevProps, nextProps) && current.ref === workInProgress.ref)\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n }\n workInProgress.flags |= 1;\n current = createWorkInProgress(type, nextProps);\n current.ref = workInProgress.ref;\n current.return = workInProgress;\n return (workInProgress.child = current);\n}\nfunction updateSimpleMemoComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n if (null !== current) {\n var prevProps = current.memoizedProps;\n if (\n shallowEqual(prevProps, nextProps) &&\n current.ref === workInProgress.ref\n )\n if (\n ((didReceiveUpdate = !1),\n (workInProgress.pendingProps = nextProps = prevProps),\n checkScheduledUpdateOrContext(current, renderLanes))\n )\n 0 !== (current.flags & 131072) && (didReceiveUpdate = !0);\n else\n return (\n (workInProgress.lanes = current.lanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n }\n return updateFunctionComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n );\n}\nfunction updateOffscreenComponent(\n current,\n workInProgress,\n renderLanes,\n nextProps\n) {\n var nextChildren = nextProps.children,\n prevState = null !== current ? current.memoizedState : null;\n null === current &&\n null === workInProgress.stateNode &&\n (workInProgress.stateNode = {\n _visibility: 1,\n _pendingMarkers: null,\n _retryCache: null,\n _transitions: null\n });\n if (\"hidden\" === nextProps.mode) {\n if (0 !== (workInProgress.flags & 128)) {\n prevState =\n null !== prevState ? prevState.baseLanes | renderLanes : renderLanes;\n if (null !== current) {\n nextProps = workInProgress.child = current.child;\n for (nextChildren = 0; null !== nextProps; )\n (nextChildren =\n nextChildren | nextProps.lanes | nextProps.childLanes),\n (nextProps = nextProps.sibling);\n nextProps = nextChildren & ~prevState;\n } else (nextProps = 0), (workInProgress.child = null);\n return deferHiddenOffscreenComponent(\n current,\n workInProgress,\n prevState,\n renderLanes,\n nextProps\n );\n }\n if (0 !== (renderLanes & 536870912))\n (workInProgress.memoizedState = { baseLanes: 0, cachePool: null }),\n null !== current &&\n pushTransition(\n workInProgress,\n null !== prevState ? prevState.cachePool : null\n ),\n null !== prevState\n ? pushHiddenContext(workInProgress, prevState)\n : reuseHiddenContextOnStack(),\n pushOffscreenSuspenseHandler(workInProgress);\n else\n return (\n (nextProps = workInProgress.lanes = 536870912),\n deferHiddenOffscreenComponent(\n current,\n workInProgress,\n null !== prevState ? prevState.baseLanes | renderLanes : renderLanes,\n renderLanes,\n nextProps\n )\n );\n } else\n null !== prevState\n ? (pushTransition(workInProgress, prevState.cachePool),\n pushHiddenContext(workInProgress, prevState),\n reuseSuspenseHandlerOnStack(workInProgress),\n (workInProgress.memoizedState = null))\n : (null !== current && pushTransition(workInProgress, null),\n reuseHiddenContextOnStack(),\n reuseSuspenseHandlerOnStack(workInProgress));\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n}\nfunction bailoutOffscreenComponent(current, workInProgress) {\n (null !== current && 22 === current.tag) ||\n null !== workInProgress.stateNode ||\n (workInProgress.stateNode = {\n _visibility: 1,\n _pendingMarkers: null,\n _retryCache: null,\n _transitions: null\n });\n return workInProgress.sibling;\n}\nfunction deferHiddenOffscreenComponent(\n current,\n workInProgress,\n nextBaseLanes,\n renderLanes,\n remainingChildLanes\n) {\n var JSCompiler_inline_result = peekCacheFromPool();\n JSCompiler_inline_result =\n null === JSCompiler_inline_result\n ? null\n : { parent: CacheContext._currentValue, pool: JSCompiler_inline_result };\n workInProgress.memoizedState = {\n baseLanes: nextBaseLanes,\n cachePool: JSCompiler_inline_result\n };\n null !== current && pushTransition(workInProgress, null);\n reuseHiddenContextOnStack();\n pushOffscreenSuspenseHandler(workInProgress);\n null !== current &&\n propagateParentContextChanges(current, workInProgress, renderLanes, !0);\n workInProgress.childLanes = remainingChildLanes;\n return null;\n}\nfunction mountActivityChildren(workInProgress, nextProps) {\n nextProps = mountWorkInProgressOffscreenFiber(\n { mode: nextProps.mode, children: nextProps.children },\n workInProgress.mode\n );\n nextProps.ref = workInProgress.ref;\n workInProgress.child = nextProps;\n nextProps.return = workInProgress;\n return nextProps;\n}\nfunction retryActivityComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n) {\n reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n current = mountActivityChildren(workInProgress, workInProgress.pendingProps);\n current.flags |= 2;\n popSuspenseHandler(workInProgress);\n workInProgress.memoizedState = null;\n return current;\n}\nfunction updateActivityComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps,\n didSuspend = 0 !== (workInProgress.flags & 128);\n workInProgress.flags &= -129;\n if (null === current) {\n if (isHydrating) {\n if (\"hidden\" === nextProps.mode)\n return (\n (current = mountActivityChildren(workInProgress, nextProps)),\n (workInProgress.lanes = 536870912),\n bailoutOffscreenComponent(null, current)\n );\n pushDehydratedActivitySuspenseHandler(workInProgress);\n (current = nextHydratableInstance)\n ? ((current = canHydrateHydrationBoundary(\n current,\n rootOrSingletonContext\n )),\n (current = null !== current && \"&\" === current.data ? current : null),\n null !== current &&\n ((workInProgress.memoizedState = {\n dehydrated: current,\n treeContext:\n null !== treeContextProvider\n ? { id: treeContextId, overflow: treeContextOverflow }\n : null,\n retryLane: 536870912,\n hydrationErrors: null\n }),\n (renderLanes = createFiberFromDehydratedFragment(current)),\n (renderLanes.return = workInProgress),\n (workInProgress.child = renderLanes),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = null)))\n : (current = null);\n if (null === current) throw throwOnHydrationMismatch(workInProgress);\n workInProgress.lanes = 536870912;\n return null;\n }\n return mountActivityChildren(workInProgress, nextProps);\n }\n var prevState = current.memoizedState;\n if (null !== prevState) {\n var dehydrated = prevState.dehydrated;\n pushDehydratedActivitySuspenseHandler(workInProgress);\n if (didSuspend)\n if (workInProgress.flags & 256)\n (workInProgress.flags &= -257),\n (workInProgress = retryActivityComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n ));\n else if (null !== workInProgress.memoizedState)\n (workInProgress.child = current.child),\n (workInProgress.flags |= 128),\n (workInProgress = null);\n else throw Error(formatProdErrorMessage(558));\n else if (\n (didReceiveUpdate ||\n propagateParentContextChanges(current, workInProgress, renderLanes, !1),\n (didSuspend = 0 !== (renderLanes & current.childLanes)),\n didReceiveUpdate || didSuspend)\n ) {\n nextProps = workInProgressRoot;\n if (\n null !== nextProps &&\n ((dehydrated = getBumpedLaneForHydration(nextProps, renderLanes)),\n 0 !== dehydrated && dehydrated !== prevState.retryLane)\n )\n throw (\n ((prevState.retryLane = dehydrated),\n enqueueConcurrentRenderForLane(current, dehydrated),\n scheduleUpdateOnFiber(nextProps, current, dehydrated),\n SelectiveHydrationException)\n );\n renderDidSuspendDelayIfPossible();\n workInProgress = retryActivityComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n );\n } else\n (current = prevState.treeContext),\n (nextHydratableInstance = getNextHydratable(dehydrated.nextSibling)),\n (hydrationParentFiber = workInProgress),\n (isHydrating = !0),\n (hydrationErrors = null),\n (rootOrSingletonContext = !1),\n null !== current &&\n restoreSuspendedTreeContext(workInProgress, current),\n (workInProgress = mountActivityChildren(workInProgress, nextProps)),\n (workInProgress.flags |= 4096);\n return workInProgress;\n }\n current = createWorkInProgress(current.child, {\n mode: nextProps.mode,\n children: nextProps.children\n });\n current.ref = workInProgress.ref;\n workInProgress.child = current;\n current.return = workInProgress;\n return current;\n}\nfunction markRef(current, workInProgress) {\n var ref = workInProgress.ref;\n if (null === ref)\n null !== current &&\n null !== current.ref &&\n (workInProgress.flags |= 4194816);\n else {\n if (\"function\" !== typeof ref && \"object\" !== typeof ref)\n throw Error(formatProdErrorMessage(284));\n if (null === current || current.ref !== ref)\n workInProgress.flags |= 4194816;\n }\n}\nfunction updateFunctionComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n prepareToReadContext(workInProgress);\n Component = renderWithHooks(\n current,\n workInProgress,\n Component,\n nextProps,\n void 0,\n renderLanes\n );\n nextProps = checkDidRenderIdHook();\n if (null !== current && !didReceiveUpdate)\n return (\n bailoutHooks(current, workInProgress, renderLanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n isHydrating && nextProps && pushMaterializedTreeId(workInProgress);\n workInProgress.flags |= 1;\n reconcileChildren(current, workInProgress, Component, renderLanes);\n return workInProgress.child;\n}\nfunction replayFunctionComponent(\n current,\n workInProgress,\n nextProps,\n Component,\n secondArg,\n renderLanes\n) {\n prepareToReadContext(workInProgress);\n workInProgress.updateQueue = null;\n nextProps = renderWithHooksAgain(\n workInProgress,\n Component,\n nextProps,\n secondArg\n );\n finishRenderingHooks(current);\n Component = checkDidRenderIdHook();\n if (null !== current && !didReceiveUpdate)\n return (\n bailoutHooks(current, workInProgress, renderLanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n isHydrating && Component && pushMaterializedTreeId(workInProgress);\n workInProgress.flags |= 1;\n reconcileChildren(current, workInProgress, nextProps, renderLanes);\n return workInProgress.child;\n}\nfunction updateClassComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n prepareToReadContext(workInProgress);\n if (null === workInProgress.stateNode) {\n var context = emptyContextObject,\n contextType = Component.contextType;\n \"object\" === typeof contextType &&\n null !== contextType &&\n (context = readContext(contextType));\n context = new Component(nextProps, context);\n workInProgress.memoizedState =\n null !== context.state && void 0 !== context.state ? context.state : null;\n context.updater = classComponentUpdater;\n workInProgress.stateNode = context;\n context._reactInternals = workInProgress;\n context = workInProgress.stateNode;\n context.props = nextProps;\n context.state = workInProgress.memoizedState;\n context.refs = {};\n initializeUpdateQueue(workInProgress);\n contextType = Component.contextType;\n context.context =\n \"object\" === typeof contextType && null !== contextType\n ? readContext(contextType)\n : emptyContextObject;\n context.state = workInProgress.memoizedState;\n contextType = Component.getDerivedStateFromProps;\n \"function\" === typeof contextType &&\n (applyDerivedStateFromProps(\n workInProgress,\n Component,\n contextType,\n nextProps\n ),\n (context.state = workInProgress.memoizedState));\n \"function\" === typeof Component.getDerivedStateFromProps ||\n \"function\" === typeof context.getSnapshotBeforeUpdate ||\n (\"function\" !== typeof context.UNSAFE_componentWillMount &&\n \"function\" !== typeof context.componentWillMount) ||\n ((contextType = context.state),\n \"function\" === typeof context.componentWillMount &&\n context.componentWillMount(),\n \"function\" === typeof context.UNSAFE_componentWillMount &&\n context.UNSAFE_componentWillMount(),\n contextType !== context.state &&\n classComponentUpdater.enqueueReplaceState(context, context.state, null),\n processUpdateQueue(workInProgress, nextProps, context, renderLanes),\n suspendIfUpdateReadFromEntangledAsyncAction(),\n (context.state = workInProgress.memoizedState));\n \"function\" === typeof context.componentDidMount &&\n (workInProgress.flags |= 4194308);\n nextProps = !0;\n } else if (null === current) {\n context = workInProgress.stateNode;\n var unresolvedOldProps = workInProgress.memoizedProps,\n oldProps = resolveClassComponentProps(Component, unresolvedOldProps);\n context.props = oldProps;\n var oldContext = context.context,\n contextType$jscomp$0 = Component.contextType;\n contextType = emptyContextObject;\n \"object\" === typeof contextType$jscomp$0 &&\n null !== contextType$jscomp$0 &&\n (contextType = readContext(contextType$jscomp$0));\n var getDerivedStateFromProps = Component.getDerivedStateFromProps;\n contextType$jscomp$0 =\n \"function\" === typeof getDerivedStateFromProps ||\n \"function\" === typeof context.getSnapshotBeforeUpdate;\n unresolvedOldProps = workInProgress.pendingProps !== unresolvedOldProps;\n contextType$jscomp$0 ||\n (\"function\" !== typeof context.UNSAFE_componentWillReceiveProps &&\n \"function\" !== typeof context.componentWillReceiveProps) ||\n ((unresolvedOldProps || oldContext !== contextType) &&\n callComponentWillReceiveProps(\n workInProgress,\n context,\n nextProps,\n contextType\n ));\n hasForceUpdate = !1;\n var oldState = workInProgress.memoizedState;\n context.state = oldState;\n processUpdateQueue(workInProgress, nextProps, context, renderLanes);\n suspendIfUpdateReadFromEntangledAsyncAction();\n oldContext = workInProgress.memoizedState;\n unresolvedOldProps || oldState !== oldContext || hasForceUpdate\n ? (\"function\" === typeof getDerivedStateFromProps &&\n (applyDerivedStateFromProps(\n workInProgress,\n Component,\n getDerivedStateFromProps,\n nextProps\n ),\n (oldContext = workInProgress.memoizedState)),\n (oldProps =\n hasForceUpdate ||\n checkShouldComponentUpdate(\n workInProgress,\n Component,\n oldProps,\n nextProps,\n oldState,\n oldContext,\n contextType\n ))\n ? (contextType$jscomp$0 ||\n (\"function\" !== typeof context.UNSAFE_componentWillMount &&\n \"function\" !== typeof context.componentWillMount) ||\n (\"function\" === typeof context.componentWillMount &&\n context.componentWillMount(),\n \"function\" === typeof context.UNSAFE_componentWillMount &&\n context.UNSAFE_componentWillMount()),\n \"function\" === typeof context.componentDidMount &&\n (workInProgress.flags |= 4194308))\n : (\"function\" === typeof context.componentDidMount &&\n (workInProgress.flags |= 4194308),\n (workInProgress.memoizedProps = nextProps),\n (workInProgress.memoizedState = oldContext)),\n (context.props = nextProps),\n (context.state = oldContext),\n (context.context = contextType),\n (nextProps = oldProps))\n : (\"function\" === typeof context.componentDidMount &&\n (workInProgress.flags |= 4194308),\n (nextProps = !1));\n } else {\n context = workInProgress.stateNode;\n cloneUpdateQueue(current, workInProgress);\n contextType = workInProgress.memoizedProps;\n contextType$jscomp$0 = resolveClassComponentProps(Component, contextType);\n context.props = contextType$jscomp$0;\n getDerivedStateFromProps = workInProgress.pendingProps;\n oldState = context.context;\n oldContext = Component.contextType;\n oldProps = emptyContextObject;\n \"object\" === typeof oldContext &&\n null !== oldContext &&\n (oldProps = readContext(oldContext));\n unresolvedOldProps = Component.getDerivedStateFromProps;\n (oldContext =\n \"function\" === typeof unresolvedOldProps ||\n \"function\" === typeof context.getSnapshotBeforeUpdate) ||\n (\"function\" !== typeof context.UNSAFE_componentWillReceiveProps &&\n \"function\" !== typeof context.componentWillReceiveProps) ||\n ((contextType !== getDerivedStateFromProps || oldState !== oldProps) &&\n callComponentWillReceiveProps(\n workInProgress,\n context,\n nextProps,\n oldProps\n ));\n hasForceUpdate = !1;\n oldState = workInProgress.memoizedState;\n context.state = oldState;\n processUpdateQueue(workInProgress, nextProps, context, renderLanes);\n suspendIfUpdateReadFromEntangledAsyncAction();\n var newState = workInProgress.memoizedState;\n contextType !== getDerivedStateFromProps ||\n oldState !== newState ||\n hasForceUpdate ||\n (null !== current &&\n null !== current.dependencies &&\n checkIfContextChanged(current.dependencies))\n ? (\"function\" === typeof unresolvedOldProps &&\n (applyDerivedStateFromProps(\n workInProgress,\n Component,\n unresolvedOldProps,\n nextProps\n ),\n (newState = workInProgress.memoizedState)),\n (contextType$jscomp$0 =\n hasForceUpdate ||\n checkShouldComponentUpdate(\n workInProgress,\n Component,\n contextType$jscomp$0,\n nextProps,\n oldState,\n newState,\n oldProps\n ) ||\n (null !== current &&\n null !== current.dependencies &&\n checkIfContextChanged(current.dependencies)))\n ? (oldContext ||\n (\"function\" !== typeof context.UNSAFE_componentWillUpdate &&\n \"function\" !== typeof context.componentWillUpdate) ||\n (\"function\" === typeof context.componentWillUpdate &&\n context.componentWillUpdate(nextProps, newState, oldProps),\n \"function\" === typeof context.UNSAFE_componentWillUpdate &&\n context.UNSAFE_componentWillUpdate(\n nextProps,\n newState,\n oldProps\n )),\n \"function\" === typeof context.componentDidUpdate &&\n (workInProgress.flags |= 4),\n \"function\" === typeof context.getSnapshotBeforeUpdate &&\n (workInProgress.flags |= 1024))\n : (\"function\" !== typeof context.componentDidUpdate ||\n (contextType === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 4),\n \"function\" !== typeof context.getSnapshotBeforeUpdate ||\n (contextType === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 1024),\n (workInProgress.memoizedProps = nextProps),\n (workInProgress.memoizedState = newState)),\n (context.props = nextProps),\n (context.state = newState),\n (context.context = oldProps),\n (nextProps = contextType$jscomp$0))\n : (\"function\" !== typeof context.componentDidUpdate ||\n (contextType === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 4),\n \"function\" !== typeof context.getSnapshotBeforeUpdate ||\n (contextType === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 1024),\n (nextProps = !1));\n }\n context = nextProps;\n markRef(current, workInProgress);\n nextProps = 0 !== (workInProgress.flags & 128);\n context || nextProps\n ? ((context = workInProgress.stateNode),\n (Component =\n nextProps && \"function\" !== typeof Component.getDerivedStateFromError\n ? null\n : context.render()),\n (workInProgress.flags |= 1),\n null !== current && nextProps\n ? ((workInProgress.child = reconcileChildFibers(\n workInProgress,\n current.child,\n null,\n renderLanes\n )),\n (workInProgress.child = reconcileChildFibers(\n workInProgress,\n null,\n Component,\n renderLanes\n )))\n : reconcileChildren(current, workInProgress, Component, renderLanes),\n (workInProgress.memoizedState = context.state),\n (current = workInProgress.child))\n : (current = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n ));\n return current;\n}\nfunction mountHostRootWithoutHydrating(\n current,\n workInProgress,\n nextChildren,\n renderLanes\n) {\n resetHydrationState();\n workInProgress.flags |= 256;\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n}\nvar SUSPENDED_MARKER = {\n dehydrated: null,\n treeContext: null,\n retryLane: 0,\n hydrationErrors: null\n};\nfunction mountSuspenseOffscreenState(renderLanes) {\n return { baseLanes: renderLanes, cachePool: getSuspendedCache() };\n}\nfunction getRemainingWorkInPrimaryTree(\n current,\n primaryTreeDidDefer,\n renderLanes\n) {\n current = null !== current ? current.childLanes & ~renderLanes : 0;\n primaryTreeDidDefer && (current |= workInProgressDeferredLane);\n return current;\n}\nfunction updateSuspenseComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps,\n showFallback = !1,\n didSuspend = 0 !== (workInProgress.flags & 128),\n JSCompiler_temp;\n (JSCompiler_temp = didSuspend) ||\n (JSCompiler_temp =\n null !== current && null === current.memoizedState\n ? !1\n : 0 !== (suspenseStackCursor.current & 2));\n JSCompiler_temp && ((showFallback = !0), (workInProgress.flags &= -129));\n JSCompiler_temp = 0 !== (workInProgress.flags & 32);\n workInProgress.flags &= -33;\n if (null === current) {\n if (isHydrating) {\n showFallback\n ? pushPrimaryTreeSuspenseHandler(workInProgress)\n : reuseSuspenseHandlerOnStack(workInProgress);\n (current = nextHydratableInstance)\n ? ((current = canHydrateHydrationBoundary(\n current,\n rootOrSingletonContext\n )),\n (current = null !== current && \"&\" !== current.data ? current : null),\n null !== current &&\n ((workInProgress.memoizedState = {\n dehydrated: current,\n treeContext:\n null !== treeContextProvider\n ? { id: treeContextId, overflow: treeContextOverflow }\n : null,\n retryLane: 536870912,\n hydrationErrors: null\n }),\n (renderLanes = createFiberFromDehydratedFragment(current)),\n (renderLanes.return = workInProgress),\n (workInProgress.child = renderLanes),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = null)))\n : (current = null);\n if (null === current) throw throwOnHydrationMismatch(workInProgress);\n isSuspenseInstanceFallback(current)\n ? (workInProgress.lanes = 32)\n : (workInProgress.lanes = 536870912);\n return null;\n }\n var nextPrimaryChildren = nextProps.children;\n nextProps = nextProps.fallback;\n if (showFallback)\n return (\n reuseSuspenseHandlerOnStack(workInProgress),\n (showFallback = workInProgress.mode),\n (nextPrimaryChildren = mountWorkInProgressOffscreenFiber(\n { mode: \"hidden\", children: nextPrimaryChildren },\n showFallback\n )),\n (nextProps = createFiberFromFragment(\n nextProps,\n showFallback,\n renderLanes,\n null\n )),\n (nextPrimaryChildren.return = workInProgress),\n (nextProps.return = workInProgress),\n (nextPrimaryChildren.sibling = nextProps),\n (workInProgress.child = nextPrimaryChildren),\n (nextProps = workInProgress.child),\n (nextProps.memoizedState = mountSuspenseOffscreenState(renderLanes)),\n (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n current,\n JSCompiler_temp,\n renderLanes\n )),\n (workInProgress.memoizedState = SUSPENDED_MARKER),\n bailoutOffscreenComponent(null, nextProps)\n );\n pushPrimaryTreeSuspenseHandler(workInProgress);\n return mountSuspensePrimaryChildren(workInProgress, nextPrimaryChildren);\n }\n var prevState = current.memoizedState;\n if (\n null !== prevState &&\n ((nextPrimaryChildren = prevState.dehydrated), null !== nextPrimaryChildren)\n ) {\n if (didSuspend)\n workInProgress.flags & 256\n ? (pushPrimaryTreeSuspenseHandler(workInProgress),\n (workInProgress.flags &= -257),\n (workInProgress = retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n )))\n : null !== workInProgress.memoizedState\n ? (reuseSuspenseHandlerOnStack(workInProgress),\n (workInProgress.child = current.child),\n (workInProgress.flags |= 128),\n (workInProgress = null))\n : (reuseSuspenseHandlerOnStack(workInProgress),\n (nextPrimaryChildren = nextProps.fallback),\n (showFallback = workInProgress.mode),\n (nextProps = mountWorkInProgressOffscreenFiber(\n { mode: \"visible\", children: nextProps.children },\n showFallback\n )),\n (nextPrimaryChildren = createFiberFromFragment(\n nextPrimaryChildren,\n showFallback,\n renderLanes,\n null\n )),\n (nextPrimaryChildren.flags |= 2),\n (nextProps.return = workInProgress),\n (nextPrimaryChildren.return = workInProgress),\n (nextProps.sibling = nextPrimaryChildren),\n (workInProgress.child = nextProps),\n reconcileChildFibers(\n workInProgress,\n current.child,\n null,\n renderLanes\n ),\n (nextProps = workInProgress.child),\n (nextProps.memoizedState =\n mountSuspenseOffscreenState(renderLanes)),\n (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n current,\n JSCompiler_temp,\n renderLanes\n )),\n (workInProgress.memoizedState = SUSPENDED_MARKER),\n (workInProgress = bailoutOffscreenComponent(null, nextProps)));\n else if (\n (pushPrimaryTreeSuspenseHandler(workInProgress),\n isSuspenseInstanceFallback(nextPrimaryChildren))\n ) {\n JSCompiler_temp =\n nextPrimaryChildren.nextSibling &&\n nextPrimaryChildren.nextSibling.dataset;\n if (JSCompiler_temp) var digest = JSCompiler_temp.dgst;\n JSCompiler_temp = digest;\n nextProps = Error(formatProdErrorMessage(419));\n nextProps.stack = \"\";\n nextProps.digest = JSCompiler_temp;\n queueHydrationError({ value: nextProps, source: null, stack: null });\n workInProgress = retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n );\n } else if (\n (didReceiveUpdate ||\n propagateParentContextChanges(current, workInProgress, renderLanes, !1),\n (JSCompiler_temp = 0 !== (renderLanes & current.childLanes)),\n didReceiveUpdate || JSCompiler_temp)\n ) {\n JSCompiler_temp = workInProgressRoot;\n if (\n null !== JSCompiler_temp &&\n ((nextProps = getBumpedLaneForHydration(JSCompiler_temp, renderLanes)),\n 0 !== nextProps && nextProps !== prevState.retryLane)\n )\n throw (\n ((prevState.retryLane = nextProps),\n enqueueConcurrentRenderForLane(current, nextProps),\n scheduleUpdateOnFiber(JSCompiler_temp, current, nextProps),\n SelectiveHydrationException)\n );\n isSuspenseInstancePending(nextPrimaryChildren) ||\n renderDidSuspendDelayIfPossible();\n workInProgress = retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n );\n } else\n isSuspenseInstancePending(nextPrimaryChildren)\n ? ((workInProgress.flags |= 192),\n (workInProgress.child = current.child),\n (workInProgress = null))\n : ((current = prevState.treeContext),\n (nextHydratableInstance = getNextHydratable(\n nextPrimaryChildren.nextSibling\n )),\n (hydrationParentFiber = workInProgress),\n (isHydrating = !0),\n (hydrationErrors = null),\n (rootOrSingletonContext = !1),\n null !== current &&\n restoreSuspendedTreeContext(workInProgress, current),\n (workInProgress = mountSuspensePrimaryChildren(\n workInProgress,\n nextProps.children\n )),\n (workInProgress.flags |= 4096));\n return workInProgress;\n }\n if (showFallback)\n return (\n reuseSuspenseHandlerOnStack(workInProgress),\n (nextPrimaryChildren = nextProps.fallback),\n (showFallback = workInProgress.mode),\n (prevState = current.child),\n (digest = prevState.sibling),\n (nextProps = createWorkInProgress(prevState, {\n mode: \"hidden\",\n children: nextProps.children\n })),\n (nextProps.subtreeFlags = prevState.subtreeFlags & 65011712),\n null !== digest\n ? (nextPrimaryChildren = createWorkInProgress(\n digest,\n nextPrimaryChildren\n ))\n : ((nextPrimaryChildren = createFiberFromFragment(\n nextPrimaryChildren,\n showFallback,\n renderLanes,\n null\n )),\n (nextPrimaryChildren.flags |= 2)),\n (nextPrimaryChildren.return = workInProgress),\n (nextProps.return = workInProgress),\n (nextProps.sibling = nextPrimaryChildren),\n (workInProgress.child = nextProps),\n bailoutOffscreenComponent(null, nextProps),\n (nextProps = workInProgress.child),\n (nextPrimaryChildren = current.child.memoizedState),\n null === nextPrimaryChildren\n ? (nextPrimaryChildren = mountSuspenseOffscreenState(renderLanes))\n : ((showFallback = nextPrimaryChildren.cachePool),\n null !== showFallback\n ? ((prevState = CacheContext._currentValue),\n (showFallback =\n showFallback.parent !== prevState\n ? { parent: prevState, pool: prevState }\n : showFallback))\n : (showFallback = getSuspendedCache()),\n (nextPrimaryChildren = {\n baseLanes: nextPrimaryChildren.baseLanes | renderLanes,\n cachePool: showFallback\n })),\n (nextProps.memoizedState = nextPrimaryChildren),\n (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n current,\n JSCompiler_temp,\n renderLanes\n )),\n (workInProgress.memoizedState = SUSPENDED_MARKER),\n bailoutOffscreenComponent(current.child, nextProps)\n );\n pushPrimaryTreeSuspenseHandler(workInProgress);\n renderLanes = current.child;\n current = renderLanes.sibling;\n renderLanes = createWorkInProgress(renderLanes, {\n mode: \"visible\",\n children: nextProps.children\n });\n renderLanes.return = workInProgress;\n renderLanes.sibling = null;\n null !== current &&\n ((JSCompiler_temp = workInProgress.deletions),\n null === JSCompiler_temp\n ? ((workInProgress.deletions = [current]), (workInProgress.flags |= 16))\n : JSCompiler_temp.push(current));\n workInProgress.child = renderLanes;\n workInProgress.memoizedState = null;\n return renderLanes;\n}\nfunction mountSuspensePrimaryChildren(workInProgress, primaryChildren) {\n primaryChildren = mountWorkInProgressOffscreenFiber(\n { mode: \"visible\", children: primaryChildren },\n workInProgress.mode\n );\n primaryChildren.return = workInProgress;\n return (workInProgress.child = primaryChildren);\n}\nfunction mountWorkInProgressOffscreenFiber(offscreenProps, mode) {\n offscreenProps = createFiberImplClass(22, offscreenProps, null, mode);\n offscreenProps.lanes = 0;\n return offscreenProps;\n}\nfunction retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n) {\n reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n current = mountSuspensePrimaryChildren(\n workInProgress,\n workInProgress.pendingProps.children\n );\n current.flags |= 2;\n workInProgress.memoizedState = null;\n return current;\n}\nfunction scheduleSuspenseWorkOnFiber(fiber, renderLanes, propagationRoot) {\n fiber.lanes |= renderLanes;\n var alternate = fiber.alternate;\n null !== alternate && (alternate.lanes |= renderLanes);\n scheduleContextWorkOnParentPath(fiber.return, renderLanes, propagationRoot);\n}\nfunction initSuspenseListRenderState(\n workInProgress,\n isBackwards,\n tail,\n lastContentRow,\n tailMode,\n treeForkCount\n) {\n var renderState = workInProgress.memoizedState;\n null === renderState\n ? (workInProgress.memoizedState = {\n isBackwards: isBackwards,\n rendering: null,\n renderingStartTime: 0,\n last: lastContentRow,\n tail: tail,\n tailMode: tailMode,\n treeForkCount: treeForkCount\n })\n : ((renderState.isBackwards = isBackwards),\n (renderState.rendering = null),\n (renderState.renderingStartTime = 0),\n (renderState.last = lastContentRow),\n (renderState.tail = tail),\n (renderState.tailMode = tailMode),\n (renderState.treeForkCount = treeForkCount));\n}\nfunction updateSuspenseListComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps,\n revealOrder = nextProps.revealOrder,\n tailMode = nextProps.tail;\n nextProps = nextProps.children;\n var suspenseContext = suspenseStackCursor.current,\n shouldForceFallback = 0 !== (suspenseContext & 2);\n shouldForceFallback\n ? ((suspenseContext = (suspenseContext & 1) | 2),\n (workInProgress.flags |= 128))\n : (suspenseContext &= 1);\n push(suspenseStackCursor, suspenseContext);\n reconcileChildren(current, workInProgress, nextProps, renderLanes);\n nextProps = isHydrating ? treeForkCount : 0;\n if (!shouldForceFallback && null !== current && 0 !== (current.flags & 128))\n a: for (current = workInProgress.child; null !== current; ) {\n if (13 === current.tag)\n null !== current.memoizedState &&\n scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n else if (19 === current.tag)\n scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n else if (null !== current.child) {\n current.child.return = current;\n current = current.child;\n continue;\n }\n if (current === workInProgress) break a;\n for (; null === current.sibling; ) {\n if (null === current.return || current.return === workInProgress)\n break a;\n current = current.return;\n }\n current.sibling.return = current.return;\n current = current.sibling;\n }\n switch (revealOrder) {\n case \"forwards\":\n renderLanes = workInProgress.child;\n for (revealOrder = null; null !== renderLanes; )\n (current = renderLanes.alternate),\n null !== current &&\n null === findFirstSuspended(current) &&\n (revealOrder = renderLanes),\n (renderLanes = renderLanes.sibling);\n renderLanes = revealOrder;\n null === renderLanes\n ? ((revealOrder = workInProgress.child), (workInProgress.child = null))\n : ((revealOrder = renderLanes.sibling), (renderLanes.sibling = null));\n initSuspenseListRenderState(\n workInProgress,\n !1,\n revealOrder,\n renderLanes,\n tailMode,\n nextProps\n );\n break;\n case \"backwards\":\n case \"unstable_legacy-backwards\":\n renderLanes = null;\n revealOrder = workInProgress.child;\n for (workInProgress.child = null; null !== revealOrder; ) {\n current = revealOrder.alternate;\n if (null !== current && null === findFirstSuspended(current)) {\n workInProgress.child = revealOrder;\n break;\n }\n current = revealOrder.sibling;\n revealOrder.sibling = renderLanes;\n renderLanes = revealOrder;\n revealOrder = current;\n }\n initSuspenseListRenderState(\n workInProgress,\n !0,\n renderLanes,\n null,\n tailMode,\n nextProps\n );\n break;\n case \"together\":\n initSuspenseListRenderState(\n workInProgress,\n !1,\n null,\n null,\n void 0,\n nextProps\n );\n break;\n default:\n workInProgress.memoizedState = null;\n }\n return workInProgress.child;\n}\nfunction bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes) {\n null !== current && (workInProgress.dependencies = current.dependencies);\n workInProgressRootSkippedLanes |= workInProgress.lanes;\n if (0 === (renderLanes & workInProgress.childLanes))\n if (null !== current) {\n if (\n (propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n !1\n ),\n 0 === (renderLanes & workInProgress.childLanes))\n )\n return null;\n } else return null;\n if (null !== current && workInProgress.child !== current.child)\n throw Error(formatProdErrorMessage(153));\n if (null !== workInProgress.child) {\n current = workInProgress.child;\n renderLanes = createWorkInProgress(current, current.pendingProps);\n workInProgress.child = renderLanes;\n for (renderLanes.return = workInProgress; null !== current.sibling; )\n (current = current.sibling),\n (renderLanes = renderLanes.sibling =\n createWorkInProgress(current, current.pendingProps)),\n (renderLanes.return = workInProgress);\n renderLanes.sibling = null;\n }\n return workInProgress.child;\n}\nfunction checkScheduledUpdateOrContext(current, renderLanes) {\n if (0 !== (current.lanes & renderLanes)) return !0;\n current = current.dependencies;\n return null !== current && checkIfContextChanged(current) ? !0 : !1;\n}\nfunction attemptEarlyBailoutIfNoScheduledUpdate(\n current,\n workInProgress,\n renderLanes\n) {\n switch (workInProgress.tag) {\n case 3:\n pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n pushProvider(workInProgress, CacheContext, current.memoizedState.cache);\n resetHydrationState();\n break;\n case 27:\n case 5:\n pushHostContext(workInProgress);\n break;\n case 4:\n pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n break;\n case 10:\n pushProvider(\n workInProgress,\n workInProgress.type,\n workInProgress.memoizedProps.value\n );\n break;\n case 31:\n if (null !== workInProgress.memoizedState)\n return (\n (workInProgress.flags |= 128),\n pushDehydratedActivitySuspenseHandler(workInProgress),\n null\n );\n break;\n case 13:\n var state$102 = workInProgress.memoizedState;\n if (null !== state$102) {\n if (null !== state$102.dehydrated)\n return (\n pushPrimaryTreeSuspenseHandler(workInProgress),\n (workInProgress.flags |= 128),\n null\n );\n if (0 !== (renderLanes & workInProgress.child.childLanes))\n return updateSuspenseComponent(current, workInProgress, renderLanes);\n pushPrimaryTreeSuspenseHandler(workInProgress);\n current = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n );\n return null !== current ? current.sibling : null;\n }\n pushPrimaryTreeSuspenseHandler(workInProgress);\n break;\n case 19:\n var didSuspendBefore = 0 !== (current.flags & 128);\n state$102 = 0 !== (renderLanes & workInProgress.childLanes);\n state$102 ||\n (propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n !1\n ),\n (state$102 = 0 !== (renderLanes & workInProgress.childLanes)));\n if (didSuspendBefore) {\n if (state$102)\n return updateSuspenseListComponent(\n current,\n workInProgress,\n renderLanes\n );\n workInProgress.flags |= 128;\n }\n didSuspendBefore = workInProgress.memoizedState;\n null !== didSuspendBefore &&\n ((didSuspendBefore.rendering = null),\n (didSuspendBefore.tail = null),\n (didSuspendBefore.lastEffect = null));\n push(suspenseStackCursor, suspenseStackCursor.current);\n if (state$102) break;\n else return null;\n case 22:\n return (\n (workInProgress.lanes = 0),\n updateOffscreenComponent(\n current,\n workInProgress,\n renderLanes,\n workInProgress.pendingProps\n )\n );\n case 24:\n pushProvider(workInProgress, CacheContext, current.memoizedState.cache);\n }\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n}\nfunction beginWork(current, workInProgress, renderLanes) {\n if (null !== current)\n if (current.memoizedProps !== workInProgress.pendingProps)\n didReceiveUpdate = !0;\n else {\n if (\n !checkScheduledUpdateOrContext(current, renderLanes) &&\n 0 === (workInProgress.flags & 128)\n )\n return (\n (didReceiveUpdate = !1),\n attemptEarlyBailoutIfNoScheduledUpdate(\n current,\n workInProgress,\n renderLanes\n )\n );\n didReceiveUpdate = 0 !== (current.flags & 131072) ? !0 : !1;\n }\n else\n (didReceiveUpdate = !1),\n isHydrating &&\n 0 !== (workInProgress.flags & 1048576) &&\n pushTreeId(workInProgress, treeForkCount, workInProgress.index);\n workInProgress.lanes = 0;\n switch (workInProgress.tag) {\n case 16:\n a: {\n var props = workInProgress.pendingProps;\n current = resolveLazy(workInProgress.elementType);\n workInProgress.type = current;\n if (\"function\" === typeof current)\n shouldConstruct(current)\n ? ((props = resolveClassComponentProps(current, props)),\n (workInProgress.tag = 1),\n (workInProgress = updateClassComponent(\n null,\n workInProgress,\n current,\n props,\n renderLanes\n )))\n : ((workInProgress.tag = 0),\n (workInProgress = updateFunctionComponent(\n null,\n workInProgress,\n current,\n props,\n renderLanes\n )));\n else {\n if (void 0 !== current && null !== current) {\n var $$typeof = current.$$typeof;\n if ($$typeof === REACT_FORWARD_REF_TYPE) {\n workInProgress.tag = 11;\n workInProgress = updateForwardRef(\n null,\n workInProgress,\n current,\n props,\n renderLanes\n );\n break a;\n } else if ($$typeof === REACT_MEMO_TYPE) {\n workInProgress.tag = 14;\n workInProgress = updateMemoComponent(\n null,\n workInProgress,\n current,\n props,\n renderLanes\n );\n break a;\n }\n }\n workInProgress = getComponentNameFromType(current) || current;\n throw Error(formatProdErrorMessage(306, workInProgress, \"\"));\n }\n }\n return workInProgress;\n case 0:\n return updateFunctionComponent(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 1:\n return (\n (props = workInProgress.type),\n ($$typeof = resolveClassComponentProps(\n props,\n workInProgress.pendingProps\n )),\n updateClassComponent(\n current,\n workInProgress,\n props,\n $$typeof,\n renderLanes\n )\n );\n case 3:\n a: {\n pushHostContainer(\n workInProgress,\n workInProgress.stateNode.containerInfo\n );\n if (null === current) throw Error(formatProdErrorMessage(387));\n props = workInProgress.pendingProps;\n var prevState = workInProgress.memoizedState;\n $$typeof = prevState.element;\n cloneUpdateQueue(current, workInProgress);\n processUpdateQueue(workInProgress, props, null, renderLanes);\n var nextState = workInProgress.memoizedState;\n props = nextState.cache;\n pushProvider(workInProgress, CacheContext, props);\n props !== prevState.cache &&\n propagateContextChanges(\n workInProgress,\n [CacheContext],\n renderLanes,\n !0\n );\n suspendIfUpdateReadFromEntangledAsyncAction();\n props = nextState.element;\n if (prevState.isDehydrated)\n if (\n ((prevState = {\n element: props,\n isDehydrated: !1,\n cache: nextState.cache\n }),\n (workInProgress.updateQueue.baseState = prevState),\n (workInProgress.memoizedState = prevState),\n workInProgress.flags & 256)\n ) {\n workInProgress = mountHostRootWithoutHydrating(\n current,\n workInProgress,\n props,\n renderLanes\n );\n break a;\n } else if (props !== $$typeof) {\n $$typeof = createCapturedValueAtFiber(\n Error(formatProdErrorMessage(424)),\n workInProgress\n );\n queueHydrationError($$typeof);\n workInProgress = mountHostRootWithoutHydrating(\n current,\n workInProgress,\n props,\n renderLanes\n );\n break a;\n } else {\n current = workInProgress.stateNode.containerInfo;\n switch (current.nodeType) {\n case 9:\n current = current.body;\n break;\n default:\n current =\n \"HTML\" === current.nodeName\n ? current.ownerDocument.body\n : current;\n }\n nextHydratableInstance = getNextHydratable(current.firstChild);\n hydrationParentFiber = workInProgress;\n isHydrating = !0;\n hydrationErrors = null;\n rootOrSingletonContext = !0;\n renderLanes = mountChildFibers(\n workInProgress,\n null,\n props,\n renderLanes\n );\n for (workInProgress.child = renderLanes; renderLanes; )\n (renderLanes.flags = (renderLanes.flags & -3) | 4096),\n (renderLanes = renderLanes.sibling);\n }\n else {\n resetHydrationState();\n if (props === $$typeof) {\n workInProgress = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n );\n break a;\n }\n reconcileChildren(current, workInProgress, props, renderLanes);\n }\n workInProgress = workInProgress.child;\n }\n return workInProgress;\n case 26:\n return (\n markRef(current, workInProgress),\n null === current\n ? (renderLanes = getResource(\n workInProgress.type,\n null,\n workInProgress.pendingProps,\n null\n ))\n ? (workInProgress.memoizedState = renderLanes)\n : isHydrating ||\n ((renderLanes = workInProgress.type),\n (current = workInProgress.pendingProps),\n (props = getOwnerDocumentFromRootContainer(\n rootInstanceStackCursor.current\n ).createElement(renderLanes)),\n (props[internalInstanceKey] = workInProgress),\n (props[internalPropsKey] = current),\n setInitialProperties(props, renderLanes, current),\n markNodeAsHoistable(props),\n (workInProgress.stateNode = props))\n : (workInProgress.memoizedState = getResource(\n workInProgress.type,\n current.memoizedProps,\n workInProgress.pendingProps,\n current.memoizedState\n )),\n null\n );\n case 27:\n return (\n pushHostContext(workInProgress),\n null === current &&\n isHydrating &&\n ((props = workInProgress.stateNode =\n resolveSingletonInstance(\n workInProgress.type,\n workInProgress.pendingProps,\n rootInstanceStackCursor.current\n )),\n (hydrationParentFiber = workInProgress),\n (rootOrSingletonContext = !0),\n ($$typeof = nextHydratableInstance),\n isSingletonScope(workInProgress.type)\n ? ((previousHydratableOnEnteringScopedSingleton = $$typeof),\n (nextHydratableInstance = getNextHydratable(props.firstChild)))\n : (nextHydratableInstance = $$typeof)),\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n markRef(current, workInProgress),\n null === current && (workInProgress.flags |= 4194304),\n workInProgress.child\n );\n case 5:\n if (null === current && isHydrating) {\n if (($$typeof = props = nextHydratableInstance))\n (props = canHydrateInstance(\n props,\n workInProgress.type,\n workInProgress.pendingProps,\n rootOrSingletonContext\n )),\n null !== props\n ? ((workInProgress.stateNode = props),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = getNextHydratable(props.firstChild)),\n (rootOrSingletonContext = !1),\n ($$typeof = !0))\n : ($$typeof = !1);\n $$typeof || throwOnHydrationMismatch(workInProgress);\n }\n pushHostContext(workInProgress);\n $$typeof = workInProgress.type;\n prevState = workInProgress.pendingProps;\n nextState = null !== current ? current.memoizedProps : null;\n props = prevState.children;\n shouldSetTextContent($$typeof, prevState)\n ? (props = null)\n : null !== nextState &&\n shouldSetTextContent($$typeof, nextState) &&\n (workInProgress.flags |= 32);\n null !== workInProgress.memoizedState &&\n (($$typeof = renderWithHooks(\n current,\n workInProgress,\n TransitionAwareHostComponent,\n null,\n null,\n renderLanes\n )),\n (HostTransitionContext._currentValue = $$typeof));\n markRef(current, workInProgress);\n reconcileChildren(current, workInProgress, props, renderLanes);\n return workInProgress.child;\n case 6:\n if (null === current && isHydrating) {\n if ((current = renderLanes = nextHydratableInstance))\n (renderLanes = canHydrateTextInstance(\n renderLanes,\n workInProgress.pendingProps,\n rootOrSingletonContext\n )),\n null !== renderLanes\n ? ((workInProgress.stateNode = renderLanes),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = null),\n (current = !0))\n : (current = !1);\n current || throwOnHydrationMismatch(workInProgress);\n }\n return null;\n case 13:\n return updateSuspenseComponent(current, workInProgress, renderLanes);\n case 4:\n return (\n pushHostContainer(\n workInProgress,\n workInProgress.stateNode.containerInfo\n ),\n (props = workInProgress.pendingProps),\n null === current\n ? (workInProgress.child = reconcileChildFibers(\n workInProgress,\n null,\n props,\n renderLanes\n ))\n : reconcileChildren(current, workInProgress, props, renderLanes),\n workInProgress.child\n );\n case 11:\n return updateForwardRef(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 7:\n return (\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps,\n renderLanes\n ),\n workInProgress.child\n );\n case 8:\n return (\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 12:\n return (\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 10:\n return (\n (props = workInProgress.pendingProps),\n pushProvider(workInProgress, workInProgress.type, props.value),\n reconcileChildren(current, workInProgress, props.children, renderLanes),\n workInProgress.child\n );\n case 9:\n return (\n ($$typeof = workInProgress.type._context),\n (props = workInProgress.pendingProps.children),\n prepareToReadContext(workInProgress),\n ($$typeof = readContext($$typeof)),\n (props = props($$typeof)),\n (workInProgress.flags |= 1),\n reconcileChildren(current, workInProgress, props, renderLanes),\n workInProgress.child\n );\n case 14:\n return updateMemoComponent(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 15:\n return updateSimpleMemoComponent(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 19:\n return updateSuspenseListComponent(current, workInProgress, renderLanes);\n case 31:\n return updateActivityComponent(current, workInProgress, renderLanes);\n case 22:\n return updateOffscreenComponent(\n current,\n workInProgress,\n renderLanes,\n workInProgress.pendingProps\n );\n case 24:\n return (\n prepareToReadContext(workInProgress),\n (props = readContext(CacheContext)),\n null === current\n ? (($$typeof = peekCacheFromPool()),\n null === $$typeof &&\n (($$typeof = workInProgressRoot),\n (prevState = createCache()),\n ($$typeof.pooledCache = prevState),\n prevState.refCount++,\n null !== prevState && ($$typeof.pooledCacheLanes |= renderLanes),\n ($$typeof = prevState)),\n (workInProgress.memoizedState = { parent: props, cache: $$typeof }),\n initializeUpdateQueue(workInProgress),\n pushProvider(workInProgress, CacheContext, $$typeof))\n : (0 !== (current.lanes & renderLanes) &&\n (cloneUpdateQueue(current, workInProgress),\n processUpdateQueue(workInProgress, null, null, renderLanes),\n suspendIfUpdateReadFromEntangledAsyncAction()),\n ($$typeof = current.memoizedState),\n (prevState = workInProgress.memoizedState),\n $$typeof.parent !== props\n ? (($$typeof = { parent: props, cache: props }),\n (workInProgress.memoizedState = $$typeof),\n 0 === workInProgress.lanes &&\n (workInProgress.memoizedState =\n workInProgress.updateQueue.baseState =\n $$typeof),\n pushProvider(workInProgress, CacheContext, props))\n : ((props = prevState.cache),\n pushProvider(workInProgress, CacheContext, props),\n props !== $$typeof.cache &&\n propagateContextChanges(\n workInProgress,\n [CacheContext],\n renderLanes,\n !0\n ))),\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 29:\n throw workInProgress.pendingProps;\n }\n throw Error(formatProdErrorMessage(156, workInProgress.tag));\n}\nfunction markUpdate(workInProgress) {\n workInProgress.flags |= 4;\n}\nfunction preloadInstanceAndSuspendIfNeeded(\n workInProgress,\n type,\n oldProps,\n newProps,\n renderLanes\n) {\n if ((type = 0 !== (workInProgress.mode & 32))) type = !1;\n if (type) {\n if (\n ((workInProgress.flags |= 16777216),\n (renderLanes & 335544128) === renderLanes)\n )\n if (workInProgress.stateNode.complete) workInProgress.flags |= 8192;\n else if (shouldRemainOnPreviousScreen()) workInProgress.flags |= 8192;\n else\n throw (\n ((suspendedThenable = noopSuspenseyCommitThenable),\n SuspenseyCommitException)\n );\n } else workInProgress.flags &= -16777217;\n}\nfunction preloadResourceAndSuspendIfNeeded(workInProgress, resource) {\n if (\"stylesheet\" !== resource.type || 0 !== (resource.state.loading & 4))\n workInProgress.flags &= -16777217;\n else if (((workInProgress.flags |= 16777216), !preloadResource(resource)))\n if (shouldRemainOnPreviousScreen()) workInProgress.flags |= 8192;\n else\n throw (\n ((suspendedThenable = noopSuspenseyCommitThenable),\n SuspenseyCommitException)\n );\n}\nfunction scheduleRetryEffect(workInProgress, retryQueue) {\n null !== retryQueue && (workInProgress.flags |= 4);\n workInProgress.flags & 16384 &&\n ((retryQueue =\n 22 !== workInProgress.tag ? claimNextRetryLane() : 536870912),\n (workInProgress.lanes |= retryQueue),\n (workInProgressSuspendedRetryLanes |= retryQueue));\n}\nfunction cutOffTailIfNeeded(renderState, hasRenderedATailFallback) {\n if (!isHydrating)\n switch (renderState.tailMode) {\n case \"hidden\":\n hasRenderedATailFallback = renderState.tail;\n for (var lastTailNode = null; null !== hasRenderedATailFallback; )\n null !== hasRenderedATailFallback.alternate &&\n (lastTailNode = hasRenderedATailFallback),\n (hasRenderedATailFallback = hasRenderedATailFallback.sibling);\n null === lastTailNode\n ? (renderState.tail = null)\n : (lastTailNode.sibling = null);\n break;\n case \"collapsed\":\n lastTailNode = renderState.tail;\n for (var lastTailNode$106 = null; null !== lastTailNode; )\n null !== lastTailNode.alternate && (lastTailNode$106 = lastTailNode),\n (lastTailNode = lastTailNode.sibling);\n null === lastTailNode$106\n ? hasRenderedATailFallback || null === renderState.tail\n ? (renderState.tail = null)\n : (renderState.tail.sibling = null)\n : (lastTailNode$106.sibling = null);\n }\n}\nfunction bubbleProperties(completedWork) {\n var didBailout =\n null !== completedWork.alternate &&\n completedWork.alternate.child === completedWork.child,\n newChildLanes = 0,\n subtreeFlags = 0;\n if (didBailout)\n for (var child$107 = completedWork.child; null !== child$107; )\n (newChildLanes |= child$107.lanes | child$107.childLanes),\n (subtreeFlags |= child$107.subtreeFlags & 65011712),\n (subtreeFlags |= child$107.flags & 65011712),\n (child$107.return = completedWork),\n (child$107 = child$107.sibling);\n else\n for (child$107 = completedWork.child; null !== child$107; )\n (newChildLanes |= child$107.lanes | child$107.childLanes),\n (subtreeFlags |= child$107.subtreeFlags),\n (subtreeFlags |= child$107.flags),\n (child$107.return = completedWork),\n (child$107 = child$107.sibling);\n completedWork.subtreeFlags |= subtreeFlags;\n completedWork.childLanes = newChildLanes;\n return didBailout;\n}\nfunction completeWork(current, workInProgress, renderLanes) {\n var newProps = workInProgress.pendingProps;\n popTreeContext(workInProgress);\n switch (workInProgress.tag) {\n case 16:\n case 15:\n case 0:\n case 11:\n case 7:\n case 8:\n case 12:\n case 9:\n case 14:\n return bubbleProperties(workInProgress), null;\n case 1:\n return bubbleProperties(workInProgress), null;\n case 3:\n renderLanes = workInProgress.stateNode;\n newProps = null;\n null !== current && (newProps = current.memoizedState.cache);\n workInProgress.memoizedState.cache !== newProps &&\n (workInProgress.flags |= 2048);\n popProvider(CacheContext);\n popHostContainer();\n renderLanes.pendingContext &&\n ((renderLanes.context = renderLanes.pendingContext),\n (renderLanes.pendingContext = null));\n if (null === current || null === current.child)\n popHydrationState(workInProgress)\n ? markUpdate(workInProgress)\n : null === current ||\n (current.memoizedState.isDehydrated &&\n 0 === (workInProgress.flags & 256)) ||\n ((workInProgress.flags |= 1024),\n upgradeHydrationErrorsToRecoverable());\n bubbleProperties(workInProgress);\n return null;\n case 26:\n var type = workInProgress.type,\n nextResource = workInProgress.memoizedState;\n null === current\n ? (markUpdate(workInProgress),\n null !== nextResource\n ? (bubbleProperties(workInProgress),\n preloadResourceAndSuspendIfNeeded(workInProgress, nextResource))\n : (bubbleProperties(workInProgress),\n preloadInstanceAndSuspendIfNeeded(\n workInProgress,\n type,\n null,\n newProps,\n renderLanes\n )))\n : nextResource\n ? nextResource !== current.memoizedState\n ? (markUpdate(workInProgress),\n bubbleProperties(workInProgress),\n preloadResourceAndSuspendIfNeeded(workInProgress, nextResource))\n : (bubbleProperties(workInProgress),\n (workInProgress.flags &= -16777217))\n : ((current = current.memoizedProps),\n current !== newProps && markUpdate(workInProgress),\n bubbleProperties(workInProgress),\n preloadInstanceAndSuspendIfNeeded(\n workInProgress,\n type,\n current,\n newProps,\n renderLanes\n ));\n return null;\n case 27:\n popHostContext(workInProgress);\n renderLanes = rootInstanceStackCursor.current;\n type = workInProgress.type;\n if (null !== current && null != workInProgress.stateNode)\n current.memoizedProps !== newProps && markUpdate(workInProgress);\n else {\n if (!newProps) {\n if (null === workInProgress.stateNode)\n throw Error(formatProdErrorMessage(166));\n bubbleProperties(workInProgress);\n return null;\n }\n current = contextStackCursor.current;\n popHydrationState(workInProgress)\n ? prepareToHydrateHostInstance(workInProgress, current)\n : ((current = resolveSingletonInstance(type, newProps, renderLanes)),\n (workInProgress.stateNode = current),\n markUpdate(workInProgress));\n }\n bubbleProperties(workInProgress);\n return null;\n case 5:\n popHostContext(workInProgress);\n type = workInProgress.type;\n if (null !== current && null != workInProgress.stateNode)\n current.memoizedProps !== newProps && markUpdate(workInProgress);\n else {\n if (!newProps) {\n if (null === workInProgress.stateNode)\n throw Error(formatProdErrorMessage(166));\n bubbleProperties(workInProgress);\n return null;\n }\n nextResource = contextStackCursor.current;\n if (popHydrationState(workInProgress))\n prepareToHydrateHostInstance(workInProgress, nextResource);\n else {\n var ownerDocument = getOwnerDocumentFromRootContainer(\n rootInstanceStackCursor.current\n );\n switch (nextResource) {\n case 1:\n nextResource = ownerDocument.createElementNS(\n \"http://www.w3.org/2000/svg\",\n type\n );\n break;\n case 2:\n nextResource = ownerDocument.createElementNS(\n \"http://www.w3.org/1998/Math/MathML\",\n type\n );\n break;\n default:\n switch (type) {\n case \"svg\":\n nextResource = ownerDocument.createElementNS(\n \"http://www.w3.org/2000/svg\",\n type\n );\n break;\n case \"math\":\n nextResource = ownerDocument.createElementNS(\n \"http://www.w3.org/1998/Math/MathML\",\n type\n );\n break;\n case \"script\":\n nextResource = ownerDocument.createElement(\"div\");\n nextResource.innerHTML = \"<script>\\x3c/script>\";\n nextResource = nextResource.removeChild(\n nextResource.firstChild\n );\n break;\n case \"select\":\n nextResource =\n \"string\" === typeof newProps.is\n ? ownerDocument.createElement(\"select\", {\n is: newProps.is\n })\n : ownerDocument.createElement(\"select\");\n newProps.multiple\n ? (nextResource.multiple = !0)\n : newProps.size && (nextResource.size = newProps.size);\n break;\n default:\n nextResource =\n \"string\" === typeof newProps.is\n ? ownerDocument.createElement(type, { is: newProps.is })\n : ownerDocument.createElement(type);\n }\n }\n nextResource[internalInstanceKey] = workInProgress;\n nextResource[internalPropsKey] = newProps;\n a: for (\n ownerDocument = workInProgress.child;\n null !== ownerDocument;\n\n ) {\n if (5 === ownerDocument.tag || 6 === ownerDocument.tag)\n nextResource.appendChild(ownerDocument.stateNode);\n else if (\n 4 !== ownerDocument.tag &&\n 27 !== ownerDocument.tag &&\n null !== ownerDocument.child\n ) {\n ownerDocument.child.return = ownerDocument;\n ownerDocument = ownerDocument.child;\n continue;\n }\n if (ownerDocument === workInProgress) break a;\n for (; null === ownerDocument.sibling; ) {\n if (\n null === ownerDocument.return ||\n ownerDocument.return === workInProgress\n )\n break a;\n ownerDocument = ownerDocument.return;\n }\n ownerDocument.sibling.return = ownerDocument.return;\n ownerDocument = ownerDocument.sibling;\n }\n workInProgress.stateNode = nextResource;\n a: switch (\n (setInitialProperties(nextResource, type, newProps), type)\n ) {\n case \"button\":\n case \"input\":\n case \"select\":\n case \"textarea\":\n newProps = !!newProps.autoFocus;\n break a;\n case \"img\":\n newProps = !0;\n break a;\n default:\n newProps = !1;\n }\n newProps && markUpdate(workInProgress);\n }\n }\n bubbleProperties(workInProgress);\n preloadInstanceAndSuspendIfNeeded(\n workInProgress,\n workInProgress.type,\n null === current ? null : current.memoizedProps,\n workInProgress.pendingProps,\n renderLanes\n );\n return null;\n case 6:\n if (current && null != workInProgress.stateNode)\n current.memoizedProps !== newProps && markUpdate(workInProgress);\n else {\n if (\"string\" !== typeof newProps && null === workInProgress.stateNode)\n throw Error(formatProdErrorMessage(166));\n current = rootInstanceStackCursor.current;\n if (popHydrationState(workInProgress)) {\n current = workInProgress.stateNode;\n renderLanes = workInProgress.memoizedProps;\n newProps = null;\n type = hydrationParentFiber;\n if (null !== type)\n switch (type.tag) {\n case 27:\n case 5:\n newProps = type.memoizedProps;\n }\n current[internalInstanceKey] = workInProgress;\n current =\n current.nodeValue === renderLanes ||\n (null !== newProps && !0 === newProps.suppressHydrationWarning) ||\n checkForUnmatchedText(current.nodeValue, renderLanes)\n ? !0\n : !1;\n current || throwOnHydrationMismatch(workInProgress, !0);\n } else\n (current =\n getOwnerDocumentFromRootContainer(current).createTextNode(\n newProps\n )),\n (current[internalInstanceKey] = workInProgress),\n (workInProgress.stateNode = current);\n }\n bubbleProperties(workInProgress);\n return null;\n case 31:\n renderLanes = workInProgress.memoizedState;\n if (null === current || null !== current.memoizedState) {\n newProps = popHydrationState(workInProgress);\n if (null !== renderLanes) {\n if (null === current) {\n if (!newProps) throw Error(formatProdErrorMessage(318));\n current = workInProgress.memoizedState;\n current = null !== current ? current.dehydrated : null;\n if (!current) throw Error(formatProdErrorMessage(557));\n current[internalInstanceKey] = workInProgress;\n } else\n resetHydrationState(),\n 0 === (workInProgress.flags & 128) &&\n (workInProgress.memoizedState = null),\n (workInProgress.flags |= 4);\n bubbleProperties(workInProgress);\n current = !1;\n } else\n (renderLanes = upgradeHydrationErrorsToRecoverable()),\n null !== current &&\n null !== current.memoizedState &&\n (current.memoizedState.hydrationErrors = renderLanes),\n (current = !0);\n if (!current) {\n if (workInProgress.flags & 256)\n return popSuspenseHandler(workInProgress), workInProgress;\n popSuspenseHandler(workInProgress);\n return null;\n }\n if (0 !== (workInProgress.flags & 128))\n throw Error(formatProdErrorMessage(558));\n }\n bubbleProperties(workInProgress);\n return null;\n case 13:\n newProps = workInProgress.memoizedState;\n if (\n null === current ||\n (null !== current.memoizedState &&\n null !== current.memoizedState.dehydrated)\n ) {\n type = popHydrationState(workInProgress);\n if (null !== newProps && null !== newProps.dehydrated) {\n if (null === current) {\n if (!type) throw Error(formatProdErrorMessage(318));\n type = workInProgress.memoizedState;\n type = null !== type ? type.dehydrated : null;\n if (!type) throw Error(formatProdErrorMessage(317));\n type[internalInstanceKey] = workInProgress;\n } else\n resetHydrationState(),\n 0 === (workInProgress.flags & 128) &&\n (workInProgress.memoizedState = null),\n (workInProgress.flags |= 4);\n bubbleProperties(workInProgress);\n type = !1;\n } else\n (type = upgradeHydrationErrorsToRecoverable()),\n null !== current &&\n null !== current.memoizedState &&\n (current.memoizedState.hydrationErrors = type),\n (type = !0);\n if (!type) {\n if (workInProgress.flags & 256)\n return popSuspenseHandler(workInProgress), workInProgress;\n popSuspenseHandler(workInProgress);\n return null;\n }\n }\n popSuspenseHandler(workInProgress);\n if (0 !== (workInProgress.flags & 128))\n return (workInProgress.lanes = renderLanes), workInProgress;\n renderLanes = null !== newProps;\n current = null !== current && null !== current.memoizedState;\n renderLanes &&\n ((newProps = workInProgress.child),\n (type = null),\n null !== newProps.alternate &&\n null !== newProps.alternate.memoizedState &&\n null !== newProps.alternate.memoizedState.cachePool &&\n (type = newProps.alternate.memoizedState.cachePool.pool),\n (nextResource = null),\n null !== newProps.memoizedState &&\n null !== newProps.memoizedState.cachePool &&\n (nextResource = newProps.memoizedState.cachePool.pool),\n nextResource !== type && (newProps.flags |= 2048));\n renderLanes !== current &&\n renderLanes &&\n (workInProgress.child.flags |= 8192);\n scheduleRetryEffect(workInProgress, workInProgress.updateQueue);\n bubbleProperties(workInProgress);\n return null;\n case 4:\n return (\n popHostContainer(),\n null === current &&\n listenToAllSupportedEvents(workInProgress.stateNode.containerInfo),\n bubbleProperties(workInProgress),\n null\n );\n case 10:\n return (\n popProvider(workInProgress.type), bubbleProperties(workInProgress), null\n );\n case 19:\n pop(suspenseStackCursor);\n newProps = workInProgress.memoizedState;\n if (null === newProps) return bubbleProperties(workInProgress), null;\n type = 0 !== (workInProgress.flags & 128);\n nextResource = newProps.rendering;\n if (null === nextResource)\n if (type) cutOffTailIfNeeded(newProps, !1);\n else {\n if (\n 0 !== workInProgressRootExitStatus ||\n (null !== current && 0 !== (current.flags & 128))\n )\n for (current = workInProgress.child; null !== current; ) {\n nextResource = findFirstSuspended(current);\n if (null !== nextResource) {\n workInProgress.flags |= 128;\n cutOffTailIfNeeded(newProps, !1);\n current = nextResource.updateQueue;\n workInProgress.updateQueue = current;\n scheduleRetryEffect(workInProgress, current);\n workInProgress.subtreeFlags = 0;\n current = renderLanes;\n for (renderLanes = workInProgress.child; null !== renderLanes; )\n resetWorkInProgress(renderLanes, current),\n (renderLanes = renderLanes.sibling);\n push(\n suspenseStackCursor,\n (suspenseStackCursor.current & 1) | 2\n );\n isHydrating &&\n pushTreeFork(workInProgress, newProps.treeForkCount);\n return workInProgress.child;\n }\n current = current.sibling;\n }\n null !== newProps.tail &&\n now() > workInProgressRootRenderTargetTime &&\n ((workInProgress.flags |= 128),\n (type = !0),\n cutOffTailIfNeeded(newProps, !1),\n (workInProgress.lanes = 4194304));\n }\n else {\n if (!type)\n if (\n ((current = findFirstSuspended(nextResource)), null !== current)\n ) {\n if (\n ((workInProgress.flags |= 128),\n (type = !0),\n (current = current.updateQueue),\n (workInProgress.updateQueue = current),\n scheduleRetryEffect(workInProgress, current),\n cutOffTailIfNeeded(newProps, !0),\n null === newProps.tail &&\n \"hidden\" === newProps.tailMode &&\n !nextResource.alternate &&\n !isHydrating)\n )\n return bubbleProperties(workInProgress), null;\n } else\n 2 * now() - newProps.renderingStartTime >\n workInProgressRootRenderTargetTime &&\n 536870912 !== renderLanes &&\n ((workInProgress.flags |= 128),\n (type = !0),\n cutOffTailIfNeeded(newProps, !1),\n (workInProgress.lanes = 4194304));\n newProps.isBackwards\n ? ((nextResource.sibling = workInProgress.child),\n (workInProgress.child = nextResource))\n : ((current = newProps.last),\n null !== current\n ? (current.sibling = nextResource)\n : (workInProgress.child = nextResource),\n (newProps.last = nextResource));\n }\n if (null !== newProps.tail)\n return (\n (current = newProps.tail),\n (newProps.rendering = current),\n (newProps.tail = current.sibling),\n (newProps.renderingStartTime = now()),\n (current.sibling = null),\n (renderLanes = suspenseStackCursor.current),\n push(\n suspenseStackCursor,\n type ? (renderLanes & 1) | 2 : renderLanes & 1\n ),\n isHydrating && pushTreeFork(workInProgress, newProps.treeForkCount),\n current\n );\n bubbleProperties(workInProgress);\n return null;\n case 22:\n case 23:\n return (\n popSuspenseHandler(workInProgress),\n popHiddenContext(),\n (newProps = null !== workInProgress.memoizedState),\n null !== current\n ? (null !== current.memoizedState) !== newProps &&\n (workInProgress.flags |= 8192)\n : newProps && (workInProgress.flags |= 8192),\n newProps\n ? 0 !== (renderLanes & 536870912) &&\n 0 === (workInProgress.flags & 128) &&\n (bubbleProperties(workInProgress),\n workInProgress.subtreeFlags & 6 && (workInProgress.flags |= 8192))\n : bubbleProperties(workInProgress),\n (renderLanes = workInProgress.updateQueue),\n null !== renderLanes &&\n scheduleRetryEffect(workInProgress, renderLanes.retryQueue),\n (renderLanes = null),\n null !== current &&\n null !== current.memoizedState &&\n null !== current.memoizedState.cachePool &&\n (renderLanes = current.memoizedState.cachePool.pool),\n (newProps = null),\n null !== workInProgress.memoizedState &&\n null !== workInProgress.memoizedState.cachePool &&\n (newProps = workInProgress.memoizedState.cachePool.pool),\n newProps !== renderLanes && (workInProgress.flags |= 2048),\n null !== current && pop(resumedCache),\n null\n );\n case 24:\n return (\n (renderLanes = null),\n null !== current && (renderLanes = current.memoizedState.cache),\n workInProgress.memoizedState.cache !== renderLanes &&\n (workInProgress.flags |= 2048),\n popProvider(CacheContext),\n bubbleProperties(workInProgress),\n null\n );\n case 25:\n return null;\n case 30:\n return null;\n }\n throw Error(formatProdErrorMessage(156, workInProgress.tag));\n}\nfunction unwindWork(current, workInProgress) {\n popTreeContext(workInProgress);\n switch (workInProgress.tag) {\n case 1:\n return (\n (current = workInProgress.flags),\n current & 65536\n ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n : null\n );\n case 3:\n return (\n popProvider(CacheContext),\n popHostContainer(),\n (current = workInProgress.flags),\n 0 !== (current & 65536) && 0 === (current & 128)\n ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n : null\n );\n case 26:\n case 27:\n case 5:\n return popHostContext(workInProgress), null;\n case 31:\n if (null !== workInProgress.memoizedState) {\n popSuspenseHandler(workInProgress);\n if (null === workInProgress.alternate)\n throw Error(formatProdErrorMessage(340));\n resetHydrationState();\n }\n current = workInProgress.flags;\n return current & 65536\n ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n : null;\n case 13:\n popSuspenseHandler(workInProgress);\n current = workInProgress.memoizedState;\n if (null !== current && null !== current.dehydrated) {\n if (null === workInProgress.alternate)\n throw Error(formatProdErrorMessage(340));\n resetHydrationState();\n }\n current = workInProgress.flags;\n return current & 65536\n ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n : null;\n case 19:\n return pop(suspenseStackCursor), null;\n case 4:\n return popHostContainer(), null;\n case 10:\n return popProvider(workInProgress.type), null;\n case 22:\n case 23:\n return (\n popSuspenseHandler(workInProgress),\n popHiddenContext(),\n null !== current && pop(resumedCache),\n (current = workInProgress.flags),\n current & 65536\n ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n : null\n );\n case 24:\n return popProvider(CacheContext), null;\n case 25:\n return null;\n default:\n return null;\n }\n}\nfunction unwindInterruptedWork(current, interruptedWork) {\n popTreeContext(interruptedWork);\n switch (interruptedWork.tag) {\n case 3:\n popProvider(CacheContext);\n popHostContainer();\n break;\n case 26:\n case 27:\n case 5:\n popHostContext(interruptedWork);\n break;\n case 4:\n popHostContainer();\n break;\n case 31:\n null !== interruptedWork.memoizedState &&\n popSuspenseHandler(interruptedWork);\n break;\n case 13:\n popSuspenseHandler(interruptedWork);\n break;\n case 19:\n pop(suspenseStackCursor);\n break;\n case 10:\n popProvider(interruptedWork.type);\n break;\n case 22:\n case 23:\n popSuspenseHandler(interruptedWork);\n popHiddenContext();\n null !== current && pop(resumedCache);\n break;\n case 24:\n popProvider(CacheContext);\n }\n}\nfunction commitHookEffectListMount(flags, finishedWork) {\n try {\n var updateQueue = finishedWork.updateQueue,\n lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;\n if (null !== lastEffect) {\n var firstEffect = lastEffect.next;\n updateQueue = firstEffect;\n do {\n if ((updateQueue.tag & flags) === flags) {\n lastEffect = void 0;\n var create = updateQueue.create,\n inst = updateQueue.inst;\n lastEffect = create();\n inst.destroy = lastEffect;\n }\n updateQueue = updateQueue.next;\n } while (updateQueue !== firstEffect);\n }\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n}\nfunction commitHookEffectListUnmount(\n flags,\n finishedWork,\n nearestMountedAncestor$jscomp$0\n) {\n try {\n var updateQueue = finishedWork.updateQueue,\n lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;\n if (null !== lastEffect) {\n var firstEffect = lastEffect.next;\n updateQueue = firstEffect;\n do {\n if ((updateQueue.tag & flags) === flags) {\n var inst = updateQueue.inst,\n destroy = inst.destroy;\n if (void 0 !== destroy) {\n inst.destroy = void 0;\n lastEffect = finishedWork;\n var nearestMountedAncestor = nearestMountedAncestor$jscomp$0,\n destroy_ = destroy;\n try {\n destroy_();\n } catch (error) {\n captureCommitPhaseError(\n lastEffect,\n nearestMountedAncestor,\n error\n );\n }\n }\n }\n updateQueue = updateQueue.next;\n } while (updateQueue !== firstEffect);\n }\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n}\nfunction commitClassCallbacks(finishedWork) {\n var updateQueue = finishedWork.updateQueue;\n if (null !== updateQueue) {\n var instance = finishedWork.stateNode;\n try {\n commitCallbacks(updateQueue, instance);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n}\nfunction safelyCallComponentWillUnmount(\n current,\n nearestMountedAncestor,\n instance\n) {\n instance.props = resolveClassComponentProps(\n current.type,\n current.memoizedProps\n );\n instance.state = current.memoizedState;\n try {\n instance.componentWillUnmount();\n } catch (error) {\n captureCommitPhaseError(current, nearestMountedAncestor, error);\n }\n}\nfunction safelyAttachRef(current, nearestMountedAncestor) {\n try {\n var ref = current.ref;\n if (null !== ref) {\n switch (current.tag) {\n case 26:\n case 27:\n case 5:\n var instanceToUse = current.stateNode;\n break;\n case 30:\n instanceToUse = current.stateNode;\n break;\n default:\n instanceToUse = current.stateNode;\n }\n \"function\" === typeof ref\n ? (current.refCleanup = ref(instanceToUse))\n : (ref.current = instanceToUse);\n }\n } catch (error) {\n captureCommitPhaseError(current, nearestMountedAncestor, error);\n }\n}\nfunction safelyDetachRef(current, nearestMountedAncestor) {\n var ref = current.ref,\n refCleanup = current.refCleanup;\n if (null !== ref)\n if (\"function\" === typeof refCleanup)\n try {\n refCleanup();\n } catch (error) {\n captureCommitPhaseError(current, nearestMountedAncestor, error);\n } finally {\n (current.refCleanup = null),\n (current = current.alternate),\n null != current && (current.refCleanup = null);\n }\n else if (\"function\" === typeof ref)\n try {\n ref(null);\n } catch (error$140) {\n captureCommitPhaseError(current, nearestMountedAncestor, error$140);\n }\n else ref.current = null;\n}\nfunction commitHostMount(finishedWork) {\n var type = finishedWork.type,\n props = finishedWork.memoizedProps,\n instance = finishedWork.stateNode;\n try {\n a: switch (type) {\n case \"button\":\n case \"input\":\n case \"select\":\n case \"textarea\":\n props.autoFocus && instance.focus();\n break a;\n case \"img\":\n props.src\n ? (instance.src = props.src)\n : props.srcSet && (instance.srcset = props.srcSet);\n }\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n}\nfunction commitHostUpdate(finishedWork, newProps, oldProps) {\n try {\n var domElement = finishedWork.stateNode;\n updateProperties(domElement, finishedWork.type, oldProps, newProps);\n domElement[internalPropsKey] = newProps;\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n}\nfunction isHostParent(fiber) {\n return (\n 5 === fiber.tag ||\n 3 === fiber.tag ||\n 26 === fiber.tag ||\n (27 === fiber.tag && isSingletonScope(fiber.type)) ||\n 4 === fiber.tag\n );\n}\nfunction getHostSibling(fiber) {\n a: for (;;) {\n for (; null === fiber.sibling; ) {\n if (null === fiber.return || isHostParent(fiber.return)) return null;\n fiber = fiber.return;\n }\n fiber.sibling.return = fiber.return;\n for (\n fiber = fiber.sibling;\n 5 !== fiber.tag && 6 !== fiber.tag && 18 !== fiber.tag;\n\n ) {\n if (27 === fiber.tag && isSingletonScope(fiber.type)) continue a;\n if (fiber.flags & 2) continue a;\n if (null === fiber.child || 4 === fiber.tag) continue a;\n else (fiber.child.return = fiber), (fiber = fiber.child);\n }\n if (!(fiber.flags & 2)) return fiber.stateNode;\n }\n}\nfunction insertOrAppendPlacementNodeIntoContainer(node, before, parent) {\n var tag = node.tag;\n if (5 === tag || 6 === tag)\n (node = node.stateNode),\n before\n ? (9 === parent.nodeType\n ? parent.body\n : \"HTML\" === parent.nodeName\n ? parent.ownerDocument.body\n : parent\n ).insertBefore(node, before)\n : ((before =\n 9 === parent.nodeType\n ? parent.body\n : \"HTML\" === parent.nodeName\n ? parent.ownerDocument.body\n : parent),\n before.appendChild(node),\n (parent = parent._reactRootContainer),\n (null !== parent && void 0 !== parent) ||\n null !== before.onclick ||\n (before.onclick = noop$1));\n else if (\n 4 !== tag &&\n (27 === tag &&\n isSingletonScope(node.type) &&\n ((parent = node.stateNode), (before = null)),\n (node = node.child),\n null !== node)\n )\n for (\n insertOrAppendPlacementNodeIntoContainer(node, before, parent),\n node = node.sibling;\n null !== node;\n\n )\n insertOrAppendPlacementNodeIntoContainer(node, before, parent),\n (node = node.sibling);\n}\nfunction insertOrAppendPlacementNode(node, before, parent) {\n var tag = node.tag;\n if (5 === tag || 6 === tag)\n (node = node.stateNode),\n before ? parent.insertBefore(node, before) : parent.appendChild(node);\n else if (\n 4 !== tag &&\n (27 === tag && isSingletonScope(node.type) && (parent = node.stateNode),\n (node = node.child),\n null !== node)\n )\n for (\n insertOrAppendPlacementNode(node, before, parent), node = node.sibling;\n null !== node;\n\n )\n insertOrAppendPlacementNode(node, before, parent), (node = node.sibling);\n}\nfunction commitHostSingletonAcquisition(finishedWork) {\n var singleton = finishedWork.stateNode,\n props = finishedWork.memoizedProps;\n try {\n for (\n var type = finishedWork.type, attributes = singleton.attributes;\n attributes.length;\n\n )\n singleton.removeAttributeNode(attributes[0]);\n setInitialProperties(singleton, type, props);\n singleton[internalInstanceKey] = finishedWork;\n singleton[internalPropsKey] = props;\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n}\nvar offscreenSubtreeIsHidden = !1,\n offscreenSubtreeWasHidden = !1,\n needsFormReset = !1,\n PossiblyWeakSet = \"function\" === typeof WeakSet ? WeakSet : Set,\n nextEffect = null;\nfunction commitBeforeMutationEffects(root, firstChild) {\n root = root.containerInfo;\n eventsEnabled = _enabled;\n root = getActiveElementDeep(root);\n if (hasSelectionCapabilities(root)) {\n if (\"selectionStart\" in root)\n var JSCompiler_temp = {\n start: root.selectionStart,\n end: root.selectionEnd\n };\n else\n a: {\n JSCompiler_temp =\n ((JSCompiler_temp = root.ownerDocument) &&\n JSCompiler_temp.defaultView) ||\n window;\n var selection =\n JSCompiler_temp.getSelection && JSCompiler_temp.getSelection();\n if (selection && 0 !== selection.rangeCount) {\n JSCompiler_temp = selection.anchorNode;\n var anchorOffset = selection.anchorOffset,\n focusNode = selection.focusNode;\n selection = selection.focusOffset;\n try {\n JSCompiler_temp.nodeType, focusNode.nodeType;\n } catch (e$20) {\n JSCompiler_temp = null;\n break a;\n }\n var length = 0,\n start = -1,\n end = -1,\n indexWithinAnchor = 0,\n indexWithinFocus = 0,\n node = root,\n parentNode = null;\n b: for (;;) {\n for (var next; ; ) {\n node !== JSCompiler_temp ||\n (0 !== anchorOffset && 3 !== node.nodeType) ||\n (start = length + anchorOffset);\n node !== focusNode ||\n (0 !== selection && 3 !== node.nodeType) ||\n (end = length + selection);\n 3 === node.nodeType && (length += node.nodeValue.length);\n if (null === (next = node.firstChild)) break;\n parentNode = node;\n node = next;\n }\n for (;;) {\n if (node === root) break b;\n parentNode === JSCompiler_temp &&\n ++indexWithinAnchor === anchorOffset &&\n (start = length);\n parentNode === focusNode &&\n ++indexWithinFocus === selection &&\n (end = length);\n if (null !== (next = node.nextSibling)) break;\n node = parentNode;\n parentNode = node.parentNode;\n }\n node = next;\n }\n JSCompiler_temp =\n -1 === start || -1 === end ? null : { start: start, end: end };\n } else JSCompiler_temp = null;\n }\n JSCompiler_temp = JSCompiler_temp || { start: 0, end: 0 };\n } else JSCompiler_temp = null;\n selectionInformation = { focusedElem: root, selectionRange: JSCompiler_temp };\n _enabled = !1;\n for (nextEffect = firstChild; null !== nextEffect; )\n if (\n ((firstChild = nextEffect),\n (root = firstChild.child),\n 0 !== (firstChild.subtreeFlags & 1028) && null !== root)\n )\n (root.return = firstChild), (nextEffect = root);\n else\n for (; null !== nextEffect; ) {\n firstChild = nextEffect;\n focusNode = firstChild.alternate;\n root = firstChild.flags;\n switch (firstChild.tag) {\n case 0:\n if (\n 0 !== (root & 4) &&\n ((root = firstChild.updateQueue),\n (root = null !== root ? root.events : null),\n null !== root)\n )\n for (\n JSCompiler_temp = 0;\n JSCompiler_temp < root.length;\n JSCompiler_temp++\n )\n (anchorOffset = root[JSCompiler_temp]),\n (anchorOffset.ref.impl = anchorOffset.nextImpl);\n break;\n case 11:\n case 15:\n break;\n case 1:\n if (0 !== (root & 1024) && null !== focusNode) {\n root = void 0;\n JSCompiler_temp = firstChild;\n anchorOffset = focusNode.memoizedProps;\n focusNode = focusNode.memoizedState;\n selection = JSCompiler_temp.stateNode;\n try {\n var resolvedPrevProps = resolveClassComponentProps(\n JSCompiler_temp.type,\n anchorOffset\n );\n root = selection.getSnapshotBeforeUpdate(\n resolvedPrevProps,\n focusNode\n );\n selection.__reactInternalSnapshotBeforeUpdate = root;\n } catch (error) {\n captureCommitPhaseError(\n JSCompiler_temp,\n JSCompiler_temp.return,\n error\n );\n }\n }\n break;\n case 3:\n if (0 !== (root & 1024))\n if (\n ((root = firstChild.stateNode.containerInfo),\n (JSCompiler_temp = root.nodeType),\n 9 === JSCompiler_temp)\n )\n clearContainerSparingly(root);\n else if (1 === JSCompiler_temp)\n switch (root.nodeName) {\n case \"HEAD\":\n case \"HTML\":\n case \"BODY\":\n clearContainerSparingly(root);\n break;\n default:\n root.textContent = \"\";\n }\n break;\n case 5:\n case 26:\n case 27:\n case 6:\n case 4:\n case 17:\n break;\n default:\n if (0 !== (root & 1024)) throw Error(formatProdErrorMessage(163));\n }\n root = firstChild.sibling;\n if (null !== root) {\n root.return = firstChild.return;\n nextEffect = root;\n break;\n }\n nextEffect = firstChild.return;\n }\n}\nfunction commitLayoutEffectOnFiber(finishedRoot, current, finishedWork) {\n var flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n flags & 4 && commitHookEffectListMount(5, finishedWork);\n break;\n case 1:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n if (flags & 4)\n if (((finishedRoot = finishedWork.stateNode), null === current))\n try {\n finishedRoot.componentDidMount();\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n else {\n var prevProps = resolveClassComponentProps(\n finishedWork.type,\n current.memoizedProps\n );\n current = current.memoizedState;\n try {\n finishedRoot.componentDidUpdate(\n prevProps,\n current,\n finishedRoot.__reactInternalSnapshotBeforeUpdate\n );\n } catch (error$139) {\n captureCommitPhaseError(\n finishedWork,\n finishedWork.return,\n error$139\n );\n }\n }\n flags & 64 && commitClassCallbacks(finishedWork);\n flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n break;\n case 3:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n if (\n flags & 64 &&\n ((finishedRoot = finishedWork.updateQueue), null !== finishedRoot)\n ) {\n current = null;\n if (null !== finishedWork.child)\n switch (finishedWork.child.tag) {\n case 27:\n case 5:\n current = finishedWork.child.stateNode;\n break;\n case 1:\n current = finishedWork.child.stateNode;\n }\n try {\n commitCallbacks(finishedRoot, current);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n break;\n case 27:\n null === current &&\n flags & 4 &&\n commitHostSingletonAcquisition(finishedWork);\n case 26:\n case 5:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n null === current && flags & 4 && commitHostMount(finishedWork);\n flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n break;\n case 12:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n break;\n case 31:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n flags & 4 && commitActivityHydrationCallbacks(finishedRoot, finishedWork);\n break;\n case 13:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n flags & 4 && commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n flags & 64 &&\n ((finishedRoot = finishedWork.memoizedState),\n null !== finishedRoot &&\n ((finishedRoot = finishedRoot.dehydrated),\n null !== finishedRoot &&\n ((finishedWork = retryDehydratedSuspenseBoundary.bind(\n null,\n finishedWork\n )),\n registerSuspenseInstanceRetry(finishedRoot, finishedWork))));\n break;\n case 22:\n flags = null !== finishedWork.memoizedState || offscreenSubtreeIsHidden;\n if (!flags) {\n current =\n (null !== current && null !== current.memoizedState) ||\n offscreenSubtreeWasHidden;\n prevProps = offscreenSubtreeIsHidden;\n var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n offscreenSubtreeIsHidden = flags;\n (offscreenSubtreeWasHidden = current) && !prevOffscreenSubtreeWasHidden\n ? recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n 0 !== (finishedWork.subtreeFlags & 8772)\n )\n : recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n offscreenSubtreeIsHidden = prevProps;\n offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n }\n break;\n case 30:\n break;\n default:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n }\n}\nfunction detachFiberAfterEffects(fiber) {\n var alternate = fiber.alternate;\n null !== alternate &&\n ((fiber.alternate = null), detachFiberAfterEffects(alternate));\n fiber.child = null;\n fiber.deletions = null;\n fiber.sibling = null;\n 5 === fiber.tag &&\n ((alternate = fiber.stateNode),\n null !== alternate && detachDeletedInstance(alternate));\n fiber.stateNode = null;\n fiber.return = null;\n fiber.dependencies = null;\n fiber.memoizedProps = null;\n fiber.memoizedState = null;\n fiber.pendingProps = null;\n fiber.stateNode = null;\n fiber.updateQueue = null;\n}\nvar hostParent = null,\n hostParentIsContainer = !1;\nfunction recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n parent\n) {\n for (parent = parent.child; null !== parent; )\n commitDeletionEffectsOnFiber(finishedRoot, nearestMountedAncestor, parent),\n (parent = parent.sibling);\n}\nfunction commitDeletionEffectsOnFiber(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n) {\n if (injectedHook && \"function\" === typeof injectedHook.onCommitFiberUnmount)\n try {\n injectedHook.onCommitFiberUnmount(rendererID, deletedFiber);\n } catch (err) {}\n switch (deletedFiber.tag) {\n case 26:\n offscreenSubtreeWasHidden ||\n safelyDetachRef(deletedFiber, nearestMountedAncestor);\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n deletedFiber.memoizedState\n ? deletedFiber.memoizedState.count--\n : deletedFiber.stateNode &&\n ((deletedFiber = deletedFiber.stateNode),\n deletedFiber.parentNode.removeChild(deletedFiber));\n break;\n case 27:\n offscreenSubtreeWasHidden ||\n safelyDetachRef(deletedFiber, nearestMountedAncestor);\n var prevHostParent = hostParent,\n prevHostParentIsContainer = hostParentIsContainer;\n isSingletonScope(deletedFiber.type) &&\n ((hostParent = deletedFiber.stateNode), (hostParentIsContainer = !1));\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n releaseSingletonInstance(deletedFiber.stateNode);\n hostParent = prevHostParent;\n hostParentIsContainer = prevHostParentIsContainer;\n break;\n case 5:\n offscreenSubtreeWasHidden ||\n safelyDetachRef(deletedFiber, nearestMountedAncestor);\n case 6:\n prevHostParent = hostParent;\n prevHostParentIsContainer = hostParentIsContainer;\n hostParent = null;\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n hostParent = prevHostParent;\n hostParentIsContainer = prevHostParentIsContainer;\n if (null !== hostParent)\n if (hostParentIsContainer)\n try {\n (9 === hostParent.nodeType\n ? hostParent.body\n : \"HTML\" === hostParent.nodeName\n ? hostParent.ownerDocument.body\n : hostParent\n ).removeChild(deletedFiber.stateNode);\n } catch (error) {\n captureCommitPhaseError(\n deletedFiber,\n nearestMountedAncestor,\n error\n );\n }\n else\n try {\n hostParent.removeChild(deletedFiber.stateNode);\n } catch (error) {\n captureCommitPhaseError(\n deletedFiber,\n nearestMountedAncestor,\n error\n );\n }\n break;\n case 18:\n null !== hostParent &&\n (hostParentIsContainer\n ? ((finishedRoot = hostParent),\n clearHydrationBoundary(\n 9 === finishedRoot.nodeType\n ? finishedRoot.body\n : \"HTML\" === finishedRoot.nodeName\n ? finishedRoot.ownerDocument.body\n : finishedRoot,\n deletedFiber.stateNode\n ),\n retryIfBlockedOn(finishedRoot))\n : clearHydrationBoundary(hostParent, deletedFiber.stateNode));\n break;\n case 4:\n prevHostParent = hostParent;\n prevHostParentIsContainer = hostParentIsContainer;\n hostParent = deletedFiber.stateNode.containerInfo;\n hostParentIsContainer = !0;\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n hostParent = prevHostParent;\n hostParentIsContainer = prevHostParentIsContainer;\n break;\n case 0:\n case 11:\n case 14:\n case 15:\n commitHookEffectListUnmount(2, deletedFiber, nearestMountedAncestor);\n offscreenSubtreeWasHidden ||\n commitHookEffectListUnmount(4, deletedFiber, nearestMountedAncestor);\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n break;\n case 1:\n offscreenSubtreeWasHidden ||\n (safelyDetachRef(deletedFiber, nearestMountedAncestor),\n (prevHostParent = deletedFiber.stateNode),\n \"function\" === typeof prevHostParent.componentWillUnmount &&\n safelyCallComponentWillUnmount(\n deletedFiber,\n nearestMountedAncestor,\n prevHostParent\n ));\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n break;\n case 21:\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n break;\n case 22:\n offscreenSubtreeWasHidden =\n (prevHostParent = offscreenSubtreeWasHidden) ||\n null !== deletedFiber.memoizedState;\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n offscreenSubtreeWasHidden = prevHostParent;\n break;\n default:\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n }\n}\nfunction commitActivityHydrationCallbacks(finishedRoot, finishedWork) {\n if (\n null === finishedWork.memoizedState &&\n ((finishedRoot = finishedWork.alternate),\n null !== finishedRoot &&\n ((finishedRoot = finishedRoot.memoizedState), null !== finishedRoot))\n ) {\n finishedRoot = finishedRoot.dehydrated;\n try {\n retryIfBlockedOn(finishedRoot);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n}\nfunction commitSuspenseHydrationCallbacks(finishedRoot, finishedWork) {\n if (\n null === finishedWork.memoizedState &&\n ((finishedRoot = finishedWork.alternate),\n null !== finishedRoot &&\n ((finishedRoot = finishedRoot.memoizedState),\n null !== finishedRoot &&\n ((finishedRoot = finishedRoot.dehydrated), null !== finishedRoot)))\n )\n try {\n retryIfBlockedOn(finishedRoot);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n}\nfunction getRetryCache(finishedWork) {\n switch (finishedWork.tag) {\n case 31:\n case 13:\n case 19:\n var retryCache = finishedWork.stateNode;\n null === retryCache &&\n (retryCache = finishedWork.stateNode = new PossiblyWeakSet());\n return retryCache;\n case 22:\n return (\n (finishedWork = finishedWork.stateNode),\n (retryCache = finishedWork._retryCache),\n null === retryCache &&\n (retryCache = finishedWork._retryCache = new PossiblyWeakSet()),\n retryCache\n );\n default:\n throw Error(formatProdErrorMessage(435, finishedWork.tag));\n }\n}\nfunction attachSuspenseRetryListeners(finishedWork, wakeables) {\n var retryCache = getRetryCache(finishedWork);\n wakeables.forEach(function (wakeable) {\n if (!retryCache.has(wakeable)) {\n retryCache.add(wakeable);\n var retry = resolveRetryWakeable.bind(null, finishedWork, wakeable);\n wakeable.then(retry, retry);\n }\n });\n}\nfunction recursivelyTraverseMutationEffects(root$jscomp$0, parentFiber) {\n var deletions = parentFiber.deletions;\n if (null !== deletions)\n for (var i = 0; i < deletions.length; i++) {\n var childToDelete = deletions[i],\n root = root$jscomp$0,\n returnFiber = parentFiber,\n parent = returnFiber;\n a: for (; null !== parent; ) {\n switch (parent.tag) {\n case 27:\n if (isSingletonScope(parent.type)) {\n hostParent = parent.stateNode;\n hostParentIsContainer = !1;\n break a;\n }\n break;\n case 5:\n hostParent = parent.stateNode;\n hostParentIsContainer = !1;\n break a;\n case 3:\n case 4:\n hostParent = parent.stateNode.containerInfo;\n hostParentIsContainer = !0;\n break a;\n }\n parent = parent.return;\n }\n if (null === hostParent) throw Error(formatProdErrorMessage(160));\n commitDeletionEffectsOnFiber(root, returnFiber, childToDelete);\n hostParent = null;\n hostParentIsContainer = !1;\n root = childToDelete.alternate;\n null !== root && (root.return = null);\n childToDelete.return = null;\n }\n if (parentFiber.subtreeFlags & 13886)\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n commitMutationEffectsOnFiber(parentFiber, root$jscomp$0),\n (parentFiber = parentFiber.sibling);\n}\nvar currentHoistableRoot = null;\nfunction commitMutationEffectsOnFiber(finishedWork, root) {\n var current = finishedWork.alternate,\n flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 14:\n case 15:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 4 &&\n (commitHookEffectListUnmount(3, finishedWork, finishedWork.return),\n commitHookEffectListMount(3, finishedWork),\n commitHookEffectListUnmount(5, finishedWork, finishedWork.return));\n break;\n case 1:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 512 &&\n (offscreenSubtreeWasHidden ||\n null === current ||\n safelyDetachRef(current, current.return));\n flags & 64 &&\n offscreenSubtreeIsHidden &&\n ((finishedWork = finishedWork.updateQueue),\n null !== finishedWork &&\n ((flags = finishedWork.callbacks),\n null !== flags &&\n ((current = finishedWork.shared.hiddenCallbacks),\n (finishedWork.shared.hiddenCallbacks =\n null === current ? flags : current.concat(flags)))));\n break;\n case 26:\n var hoistableRoot = currentHoistableRoot;\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 512 &&\n (offscreenSubtreeWasHidden ||\n null === current ||\n safelyDetachRef(current, current.return));\n if (flags & 4) {\n var currentResource = null !== current ? current.memoizedState : null;\n flags = finishedWork.memoizedState;\n if (null === current)\n if (null === flags)\n if (null === finishedWork.stateNode) {\n a: {\n flags = finishedWork.type;\n current = finishedWork.memoizedProps;\n hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n b: switch (flags) {\n case \"title\":\n currentResource =\n hoistableRoot.getElementsByTagName(\"title\")[0];\n if (\n !currentResource ||\n currentResource[internalHoistableMarker] ||\n currentResource[internalInstanceKey] ||\n \"http://www.w3.org/2000/svg\" ===\n currentResource.namespaceURI ||\n currentResource.hasAttribute(\"itemprop\")\n )\n (currentResource = hoistableRoot.createElement(flags)),\n hoistableRoot.head.insertBefore(\n currentResource,\n hoistableRoot.querySelector(\"head > title\")\n );\n setInitialProperties(currentResource, flags, current);\n currentResource[internalInstanceKey] = finishedWork;\n markNodeAsHoistable(currentResource);\n flags = currentResource;\n break a;\n case \"link\":\n var maybeNodes = getHydratableHoistableCache(\n \"link\",\n \"href\",\n hoistableRoot\n ).get(flags + (current.href || \"\"));\n if (maybeNodes)\n for (var i = 0; i < maybeNodes.length; i++)\n if (\n ((currentResource = maybeNodes[i]),\n currentResource.getAttribute(\"href\") ===\n (null == current.href || \"\" === current.href\n ? null\n : current.href) &&\n currentResource.getAttribute(\"rel\") ===\n (null == current.rel ? null : current.rel) &&\n currentResource.getAttribute(\"title\") ===\n (null == current.title ? null : current.title) &&\n currentResource.getAttribute(\"crossorigin\") ===\n (null == current.crossOrigin\n ? null\n : current.crossOrigin))\n ) {\n maybeNodes.splice(i, 1);\n break b;\n }\n currentResource = hoistableRoot.createElement(flags);\n setInitialProperties(currentResource, flags, current);\n hoistableRoot.head.appendChild(currentResource);\n break;\n case \"meta\":\n if (\n (maybeNodes = getHydratableHoistableCache(\n \"meta\",\n \"content\",\n hoistableRoot\n ).get(flags + (current.content || \"\")))\n )\n for (i = 0; i < maybeNodes.length; i++)\n if (\n ((currentResource = maybeNodes[i]),\n currentResource.getAttribute(\"content\") ===\n (null == current.content\n ? null\n : \"\" + current.content) &&\n currentResource.getAttribute(\"name\") ===\n (null == current.name ? null : current.name) &&\n currentResource.getAttribute(\"property\") ===\n (null == current.property\n ? null\n : current.property) &&\n currentResource.getAttribute(\"http-equiv\") ===\n (null == current.httpEquiv\n ? null\n : current.httpEquiv) &&\n currentResource.getAttribute(\"charset\") ===\n (null == current.charSet\n ? null\n : current.charSet))\n ) {\n maybeNodes.splice(i, 1);\n break b;\n }\n currentResource = hoistableRoot.createElement(flags);\n setInitialProperties(currentResource, flags, current);\n hoistableRoot.head.appendChild(currentResource);\n break;\n default:\n throw Error(formatProdErrorMessage(468, flags));\n }\n currentResource[internalInstanceKey] = finishedWork;\n markNodeAsHoistable(currentResource);\n flags = currentResource;\n }\n finishedWork.stateNode = flags;\n } else\n mountHoistable(\n hoistableRoot,\n finishedWork.type,\n finishedWork.stateNode\n );\n else\n finishedWork.stateNode = acquireResource(\n hoistableRoot,\n flags,\n finishedWork.memoizedProps\n );\n else\n currentResource !== flags\n ? (null === currentResource\n ? null !== current.stateNode &&\n ((current = current.stateNode),\n current.parentNode.removeChild(current))\n : currentResource.count--,\n null === flags\n ? mountHoistable(\n hoistableRoot,\n finishedWork.type,\n finishedWork.stateNode\n )\n : acquireResource(\n hoistableRoot,\n flags,\n finishedWork.memoizedProps\n ))\n : null === flags &&\n null !== finishedWork.stateNode &&\n commitHostUpdate(\n finishedWork,\n finishedWork.memoizedProps,\n current.memoizedProps\n );\n }\n break;\n case 27:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 512 &&\n (offscreenSubtreeWasHidden ||\n null === current ||\n safelyDetachRef(current, current.return));\n null !== current &&\n flags & 4 &&\n commitHostUpdate(\n finishedWork,\n finishedWork.memoizedProps,\n current.memoizedProps\n );\n break;\n case 5:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 512 &&\n (offscreenSubtreeWasHidden ||\n null === current ||\n safelyDetachRef(current, current.return));\n if (finishedWork.flags & 32) {\n hoistableRoot = finishedWork.stateNode;\n try {\n setTextContent(hoistableRoot, \"\");\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n flags & 4 &&\n null != finishedWork.stateNode &&\n ((hoistableRoot = finishedWork.memoizedProps),\n commitHostUpdate(\n finishedWork,\n hoistableRoot,\n null !== current ? current.memoizedProps : hoistableRoot\n ));\n flags & 1024 && (needsFormReset = !0);\n break;\n case 6:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n if (flags & 4) {\n if (null === finishedWork.stateNode)\n throw Error(formatProdErrorMessage(162));\n flags = finishedWork.memoizedProps;\n current = finishedWork.stateNode;\n try {\n current.nodeValue = flags;\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n break;\n case 3:\n tagCaches = null;\n hoistableRoot = currentHoistableRoot;\n currentHoistableRoot = getHoistableRoot(root.containerInfo);\n recursivelyTraverseMutationEffects(root, finishedWork);\n currentHoistableRoot = hoistableRoot;\n commitReconciliationEffects(finishedWork);\n if (flags & 4 && null !== current && current.memoizedState.isDehydrated)\n try {\n retryIfBlockedOn(root.containerInfo);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n needsFormReset &&\n ((needsFormReset = !1), recursivelyResetForms(finishedWork));\n break;\n case 4:\n flags = currentHoistableRoot;\n currentHoistableRoot = getHoistableRoot(\n finishedWork.stateNode.containerInfo\n );\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n currentHoistableRoot = flags;\n break;\n case 12:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n break;\n case 31:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 4 &&\n ((flags = finishedWork.updateQueue),\n null !== flags &&\n ((finishedWork.updateQueue = null),\n attachSuspenseRetryListeners(finishedWork, flags)));\n break;\n case 13:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n finishedWork.child.flags & 8192 &&\n (null !== finishedWork.memoizedState) !==\n (null !== current && null !== current.memoizedState) &&\n (globalMostRecentFallbackTime = now());\n flags & 4 &&\n ((flags = finishedWork.updateQueue),\n null !== flags &&\n ((finishedWork.updateQueue = null),\n attachSuspenseRetryListeners(finishedWork, flags)));\n break;\n case 22:\n hoistableRoot = null !== finishedWork.memoizedState;\n var wasHidden = null !== current && null !== current.memoizedState,\n prevOffscreenSubtreeIsHidden = offscreenSubtreeIsHidden,\n prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden || hoistableRoot;\n offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden || wasHidden;\n recursivelyTraverseMutationEffects(root, finishedWork);\n offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden;\n commitReconciliationEffects(finishedWork);\n if (flags & 8192)\n a: for (\n root = finishedWork.stateNode,\n root._visibility = hoistableRoot\n ? root._visibility & -2\n : root._visibility | 1,\n hoistableRoot &&\n (null === current ||\n wasHidden ||\n offscreenSubtreeIsHidden ||\n offscreenSubtreeWasHidden ||\n recursivelyTraverseDisappearLayoutEffects(finishedWork)),\n current = null,\n root = finishedWork;\n ;\n\n ) {\n if (5 === root.tag || 26 === root.tag) {\n if (null === current) {\n wasHidden = current = root;\n try {\n if (((currentResource = wasHidden.stateNode), hoistableRoot))\n (maybeNodes = currentResource.style),\n \"function\" === typeof maybeNodes.setProperty\n ? maybeNodes.setProperty(\"display\", \"none\", \"important\")\n : (maybeNodes.display = \"none\");\n else {\n i = wasHidden.stateNode;\n var styleProp = wasHidden.memoizedProps.style,\n display =\n void 0 !== styleProp &&\n null !== styleProp &&\n styleProp.hasOwnProperty(\"display\")\n ? styleProp.display\n : null;\n i.style.display =\n null == display || \"boolean\" === typeof display\n ? \"\"\n : (\"\" + display).trim();\n }\n } catch (error) {\n captureCommitPhaseError(wasHidden, wasHidden.return, error);\n }\n }\n } else if (6 === root.tag) {\n if (null === current) {\n wasHidden = root;\n try {\n wasHidden.stateNode.nodeValue = hoistableRoot\n ? \"\"\n : wasHidden.memoizedProps;\n } catch (error) {\n captureCommitPhaseError(wasHidden, wasHidden.return, error);\n }\n }\n } else if (18 === root.tag) {\n if (null === current) {\n wasHidden = root;\n try {\n var instance = wasHidden.stateNode;\n hoistableRoot\n ? hideOrUnhideDehydratedBoundary(instance, !0)\n : hideOrUnhideDehydratedBoundary(wasHidden.stateNode, !1);\n } catch (error) {\n captureCommitPhaseError(wasHidden, wasHidden.return, error);\n }\n }\n } else if (\n ((22 !== root.tag && 23 !== root.tag) ||\n null === root.memoizedState ||\n root === finishedWork) &&\n null !== root.child\n ) {\n root.child.return = root;\n root = root.child;\n continue;\n }\n if (root === finishedWork) break a;\n for (; null === root.sibling; ) {\n if (null === root.return || root.return === finishedWork) break a;\n current === root && (current = null);\n root = root.return;\n }\n current === root && (current = null);\n root.sibling.return = root.return;\n root = root.sibling;\n }\n flags & 4 &&\n ((flags = finishedWork.updateQueue),\n null !== flags &&\n ((current = flags.retryQueue),\n null !== current &&\n ((flags.retryQueue = null),\n attachSuspenseRetryListeners(finishedWork, current))));\n break;\n case 19:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 4 &&\n ((flags = finishedWork.updateQueue),\n null !== flags &&\n ((finishedWork.updateQueue = null),\n attachSuspenseRetryListeners(finishedWork, flags)));\n break;\n case 30:\n break;\n case 21:\n break;\n default:\n recursivelyTraverseMutationEffects(root, finishedWork),\n commitReconciliationEffects(finishedWork);\n }\n}\nfunction commitReconciliationEffects(finishedWork) {\n var flags = finishedWork.flags;\n if (flags & 2) {\n try {\n for (\n var hostParentFiber, parentFiber = finishedWork.return;\n null !== parentFiber;\n\n ) {\n if (isHostParent(parentFiber)) {\n hostParentFiber = parentFiber;\n break;\n }\n parentFiber = parentFiber.return;\n }\n if (null == hostParentFiber) throw Error(formatProdErrorMessage(160));\n switch (hostParentFiber.tag) {\n case 27:\n var parent = hostParentFiber.stateNode,\n before = getHostSibling(finishedWork);\n insertOrAppendPlacementNode(finishedWork, before, parent);\n break;\n case 5:\n var parent$141 = hostParentFiber.stateNode;\n hostParentFiber.flags & 32 &&\n (setTextContent(parent$141, \"\"), (hostParentFiber.flags &= -33));\n var before$142 = getHostSibling(finishedWork);\n insertOrAppendPlacementNode(finishedWork, before$142, parent$141);\n break;\n case 3:\n case 4:\n var parent$143 = hostParentFiber.stateNode.containerInfo,\n before$144 = getHostSibling(finishedWork);\n insertOrAppendPlacementNodeIntoContainer(\n finishedWork,\n before$144,\n parent$143\n );\n break;\n default:\n throw Error(formatProdErrorMessage(161));\n }\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n finishedWork.flags &= -3;\n }\n flags & 4096 && (finishedWork.flags &= -4097);\n}\nfunction recursivelyResetForms(parentFiber) {\n if (parentFiber.subtreeFlags & 1024)\n for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n var fiber = parentFiber;\n recursivelyResetForms(fiber);\n 5 === fiber.tag && fiber.flags & 1024 && fiber.stateNode.reset();\n parentFiber = parentFiber.sibling;\n }\n}\nfunction recursivelyTraverseLayoutEffects(root, parentFiber) {\n if (parentFiber.subtreeFlags & 8772)\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n commitLayoutEffectOnFiber(root, parentFiber.alternate, parentFiber),\n (parentFiber = parentFiber.sibling);\n}\nfunction recursivelyTraverseDisappearLayoutEffects(parentFiber) {\n for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n var finishedWork = parentFiber;\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 14:\n case 15:\n commitHookEffectListUnmount(4, finishedWork, finishedWork.return);\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n break;\n case 1:\n safelyDetachRef(finishedWork, finishedWork.return);\n var instance = finishedWork.stateNode;\n \"function\" === typeof instance.componentWillUnmount &&\n safelyCallComponentWillUnmount(\n finishedWork,\n finishedWork.return,\n instance\n );\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n break;\n case 27:\n releaseSingletonInstance(finishedWork.stateNode);\n case 26:\n case 5:\n safelyDetachRef(finishedWork, finishedWork.return);\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n break;\n case 22:\n null === finishedWork.memoizedState &&\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n break;\n case 30:\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n break;\n default:\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n }\n parentFiber = parentFiber.sibling;\n }\n}\nfunction recursivelyTraverseReappearLayoutEffects(\n finishedRoot$jscomp$0,\n parentFiber,\n includeWorkInProgressEffects\n) {\n includeWorkInProgressEffects =\n includeWorkInProgressEffects && 0 !== (parentFiber.subtreeFlags & 8772);\n for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n var current = parentFiber.alternate,\n finishedRoot = finishedRoot$jscomp$0,\n finishedWork = parentFiber,\n flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n commitHookEffectListMount(4, finishedWork);\n break;\n case 1:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n current = finishedWork;\n finishedRoot = current.stateNode;\n if (\"function\" === typeof finishedRoot.componentDidMount)\n try {\n finishedRoot.componentDidMount();\n } catch (error) {\n captureCommitPhaseError(current, current.return, error);\n }\n current = finishedWork;\n finishedRoot = current.updateQueue;\n if (null !== finishedRoot) {\n var instance = current.stateNode;\n try {\n var hiddenCallbacks = finishedRoot.shared.hiddenCallbacks;\n if (null !== hiddenCallbacks)\n for (\n finishedRoot.shared.hiddenCallbacks = null, finishedRoot = 0;\n finishedRoot < hiddenCallbacks.length;\n finishedRoot++\n )\n callCallback(hiddenCallbacks[finishedRoot], instance);\n } catch (error) {\n captureCommitPhaseError(current, current.return, error);\n }\n }\n includeWorkInProgressEffects &&\n flags & 64 &&\n commitClassCallbacks(finishedWork);\n safelyAttachRef(finishedWork, finishedWork.return);\n break;\n case 27:\n commitHostSingletonAcquisition(finishedWork);\n case 26:\n case 5:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n includeWorkInProgressEffects &&\n null === current &&\n flags & 4 &&\n commitHostMount(finishedWork);\n safelyAttachRef(finishedWork, finishedWork.return);\n break;\n case 12:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n break;\n case 31:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n includeWorkInProgressEffects &&\n flags & 4 &&\n commitActivityHydrationCallbacks(finishedRoot, finishedWork);\n break;\n case 13:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n includeWorkInProgressEffects &&\n flags & 4 &&\n commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n break;\n case 22:\n null === finishedWork.memoizedState &&\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n safelyAttachRef(finishedWork, finishedWork.return);\n break;\n case 30:\n break;\n default:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n }\n parentFiber = parentFiber.sibling;\n }\n}\nfunction commitOffscreenPassiveMountEffects(current, finishedWork) {\n var previousCache = null;\n null !== current &&\n null !== current.memoizedState &&\n null !== current.memoizedState.cachePool &&\n (previousCache = current.memoizedState.cachePool.pool);\n current = null;\n null !== finishedWork.memoizedState &&\n null !== finishedWork.memoizedState.cachePool &&\n (current = finishedWork.memoizedState.cachePool.pool);\n current !== previousCache &&\n (null != current && current.refCount++,\n null != previousCache && releaseCache(previousCache));\n}\nfunction commitCachePassiveMountEffect(current, finishedWork) {\n current = null;\n null !== finishedWork.alternate &&\n (current = finishedWork.alternate.memoizedState.cache);\n finishedWork = finishedWork.memoizedState.cache;\n finishedWork !== current &&\n (finishedWork.refCount++, null != current && releaseCache(current));\n}\nfunction recursivelyTraversePassiveMountEffects(\n root,\n parentFiber,\n committedLanes,\n committedTransitions\n) {\n if (parentFiber.subtreeFlags & 10256)\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n commitPassiveMountOnFiber(\n root,\n parentFiber,\n committedLanes,\n committedTransitions\n ),\n (parentFiber = parentFiber.sibling);\n}\nfunction commitPassiveMountOnFiber(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n) {\n var flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n flags & 2048 && commitHookEffectListMount(9, finishedWork);\n break;\n case 1:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n break;\n case 3:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n flags & 2048 &&\n ((finishedRoot = null),\n null !== finishedWork.alternate &&\n (finishedRoot = finishedWork.alternate.memoizedState.cache),\n (finishedWork = finishedWork.memoizedState.cache),\n finishedWork !== finishedRoot &&\n (finishedWork.refCount++,\n null != finishedRoot && releaseCache(finishedRoot)));\n break;\n case 12:\n if (flags & 2048) {\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n finishedRoot = finishedWork.stateNode;\n try {\n var _finishedWork$memoize2 = finishedWork.memoizedProps,\n id = _finishedWork$memoize2.id,\n onPostCommit = _finishedWork$memoize2.onPostCommit;\n \"function\" === typeof onPostCommit &&\n onPostCommit(\n id,\n null === finishedWork.alternate ? \"mount\" : \"update\",\n finishedRoot.passiveEffectDuration,\n -0\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n } else\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n break;\n case 31:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n break;\n case 13:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n break;\n case 23:\n break;\n case 22:\n _finishedWork$memoize2 = finishedWork.stateNode;\n id = finishedWork.alternate;\n null !== finishedWork.memoizedState\n ? _finishedWork$memoize2._visibility & 2\n ? recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n )\n : recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork)\n : _finishedWork$memoize2._visibility & 2\n ? recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n )\n : ((_finishedWork$memoize2._visibility |= 2),\n recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n 0 !== (finishedWork.subtreeFlags & 10256) || !1\n ));\n flags & 2048 && commitOffscreenPassiveMountEffects(id, finishedWork);\n break;\n case 24:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n flags & 2048 &&\n commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n break;\n default:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n }\n}\nfunction recursivelyTraverseReconnectPassiveEffects(\n finishedRoot$jscomp$0,\n parentFiber,\n committedLanes$jscomp$0,\n committedTransitions$jscomp$0,\n includeWorkInProgressEffects\n) {\n includeWorkInProgressEffects =\n includeWorkInProgressEffects &&\n (0 !== (parentFiber.subtreeFlags & 10256) || !1);\n for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n var finishedRoot = finishedRoot$jscomp$0,\n finishedWork = parentFiber,\n committedLanes = committedLanes$jscomp$0,\n committedTransitions = committedTransitions$jscomp$0,\n flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n );\n commitHookEffectListMount(8, finishedWork);\n break;\n case 23:\n break;\n case 22:\n var instance = finishedWork.stateNode;\n null !== finishedWork.memoizedState\n ? instance._visibility & 2\n ? recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n )\n : recursivelyTraverseAtomicPassiveEffects(\n finishedRoot,\n finishedWork\n )\n : ((instance._visibility |= 2),\n recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n ));\n includeWorkInProgressEffects &&\n flags & 2048 &&\n commitOffscreenPassiveMountEffects(\n finishedWork.alternate,\n finishedWork\n );\n break;\n case 24:\n recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n );\n includeWorkInProgressEffects &&\n flags & 2048 &&\n commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n break;\n default:\n recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n );\n }\n parentFiber = parentFiber.sibling;\n }\n}\nfunction recursivelyTraverseAtomicPassiveEffects(\n finishedRoot$jscomp$0,\n parentFiber\n) {\n if (parentFiber.subtreeFlags & 10256)\n for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n var finishedRoot = finishedRoot$jscomp$0,\n finishedWork = parentFiber,\n flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 22:\n recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n flags & 2048 &&\n commitOffscreenPassiveMountEffects(\n finishedWork.alternate,\n finishedWork\n );\n break;\n case 24:\n recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n flags & 2048 &&\n commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n break;\n default:\n recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n }\n parentFiber = parentFiber.sibling;\n }\n}\nvar suspenseyCommitFlag = 8192;\nfunction recursivelyAccumulateSuspenseyCommit(\n parentFiber,\n committedLanes,\n suspendedState\n) {\n if (parentFiber.subtreeFlags & suspenseyCommitFlag)\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n accumulateSuspenseyCommitOnFiber(\n parentFiber,\n committedLanes,\n suspendedState\n ),\n (parentFiber = parentFiber.sibling);\n}\nfunction accumulateSuspenseyCommitOnFiber(\n fiber,\n committedLanes,\n suspendedState\n) {\n switch (fiber.tag) {\n case 26:\n recursivelyAccumulateSuspenseyCommit(\n fiber,\n committedLanes,\n suspendedState\n );\n fiber.flags & suspenseyCommitFlag &&\n null !== fiber.memoizedState &&\n suspendResource(\n suspendedState,\n currentHoistableRoot,\n fiber.memoizedState,\n fiber.memoizedProps\n );\n break;\n case 5:\n recursivelyAccumulateSuspenseyCommit(\n fiber,\n committedLanes,\n suspendedState\n );\n break;\n case 3:\n case 4:\n var previousHoistableRoot = currentHoistableRoot;\n currentHoistableRoot = getHoistableRoot(fiber.stateNode.containerInfo);\n recursivelyAccumulateSuspenseyCommit(\n fiber,\n committedLanes,\n suspendedState\n );\n currentHoistableRoot = previousHoistableRoot;\n break;\n case 22:\n null === fiber.memoizedState &&\n ((previousHoistableRoot = fiber.alternate),\n null !== previousHoistableRoot &&\n null !== previousHoistableRoot.memoizedState\n ? ((previousHoistableRoot = suspenseyCommitFlag),\n (suspenseyCommitFlag = 16777216),\n recursivelyAccumulateSuspenseyCommit(\n fiber,\n committedLanes,\n suspendedState\n ),\n (suspenseyCommitFlag = previousHoistableRoot))\n : recursivelyAccumulateSuspenseyCommit(\n fiber,\n committedLanes,\n suspendedState\n ));\n break;\n default:\n recursivelyAccumulateSuspenseyCommit(\n fiber,\n committedLanes,\n suspendedState\n );\n }\n}\nfunction detachAlternateSiblings(parentFiber) {\n var previousFiber = parentFiber.alternate;\n if (\n null !== previousFiber &&\n ((parentFiber = previousFiber.child), null !== parentFiber)\n ) {\n previousFiber.child = null;\n do\n (previousFiber = parentFiber.sibling),\n (parentFiber.sibling = null),\n (parentFiber = previousFiber);\n while (null !== parentFiber);\n }\n}\nfunction recursivelyTraversePassiveUnmountEffects(parentFiber) {\n var deletions = parentFiber.deletions;\n if (0 !== (parentFiber.flags & 16)) {\n if (null !== deletions)\n for (var i = 0; i < deletions.length; i++) {\n var childToDelete = deletions[i];\n nextEffect = childToDelete;\n commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n childToDelete,\n parentFiber\n );\n }\n detachAlternateSiblings(parentFiber);\n }\n if (parentFiber.subtreeFlags & 10256)\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n commitPassiveUnmountOnFiber(parentFiber),\n (parentFiber = parentFiber.sibling);\n}\nfunction commitPassiveUnmountOnFiber(finishedWork) {\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n recursivelyTraversePassiveUnmountEffects(finishedWork);\n finishedWork.flags & 2048 &&\n commitHookEffectListUnmount(9, finishedWork, finishedWork.return);\n break;\n case 3:\n recursivelyTraversePassiveUnmountEffects(finishedWork);\n break;\n case 12:\n recursivelyTraversePassiveUnmountEffects(finishedWork);\n break;\n case 22:\n var instance = finishedWork.stateNode;\n null !== finishedWork.memoizedState &&\n instance._visibility & 2 &&\n (null === finishedWork.return || 13 !== finishedWork.return.tag)\n ? ((instance._visibility &= -3),\n recursivelyTraverseDisconnectPassiveEffects(finishedWork))\n : recursivelyTraversePassiveUnmountEffects(finishedWork);\n break;\n default:\n recursivelyTraversePassiveUnmountEffects(finishedWork);\n }\n}\nfunction recursivelyTraverseDisconnectPassiveEffects(parentFiber) {\n var deletions = parentFiber.deletions;\n if (0 !== (parentFiber.flags & 16)) {\n if (null !== deletions)\n for (var i = 0; i < deletions.length; i++) {\n var childToDelete = deletions[i];\n nextEffect = childToDelete;\n commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n childToDelete,\n parentFiber\n );\n }\n detachAlternateSiblings(parentFiber);\n }\n for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n deletions = parentFiber;\n switch (deletions.tag) {\n case 0:\n case 11:\n case 15:\n commitHookEffectListUnmount(8, deletions, deletions.return);\n recursivelyTraverseDisconnectPassiveEffects(deletions);\n break;\n case 22:\n i = deletions.stateNode;\n i._visibility & 2 &&\n ((i._visibility &= -3),\n recursivelyTraverseDisconnectPassiveEffects(deletions));\n break;\n default:\n recursivelyTraverseDisconnectPassiveEffects(deletions);\n }\n parentFiber = parentFiber.sibling;\n }\n}\nfunction commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n deletedSubtreeRoot,\n nearestMountedAncestor\n) {\n for (; null !== nextEffect; ) {\n var fiber = nextEffect;\n switch (fiber.tag) {\n case 0:\n case 11:\n case 15:\n commitHookEffectListUnmount(8, fiber, nearestMountedAncestor);\n break;\n case 23:\n case 22:\n if (\n null !== fiber.memoizedState &&\n null !== fiber.memoizedState.cachePool\n ) {\n var cache = fiber.memoizedState.cachePool.pool;\n null != cache && cache.refCount++;\n }\n break;\n case 24:\n releaseCache(fiber.memoizedState.cache);\n }\n cache = fiber.child;\n if (null !== cache) (cache.return = fiber), (nextEffect = cache);\n else\n a: for (fiber = deletedSubtreeRoot; null !== nextEffect; ) {\n cache = nextEffect;\n var sibling = cache.sibling,\n returnFiber = cache.return;\n detachFiberAfterEffects(cache);\n if (cache === fiber) {\n nextEffect = null;\n break a;\n }\n if (null !== sibling) {\n sibling.return = returnFiber;\n nextEffect = sibling;\n break a;\n }\n nextEffect = returnFiber;\n }\n }\n}\nvar DefaultAsyncDispatcher = {\n getCacheForType: function (resourceType) {\n var cache = readContext(CacheContext),\n cacheForType = cache.data.get(resourceType);\n void 0 === cacheForType &&\n ((cacheForType = resourceType()),\n cache.data.set(resourceType, cacheForType));\n return cacheForType;\n },\n cacheSignal: function () {\n return readContext(CacheContext).controller.signal;\n }\n },\n PossiblyWeakMap = \"function\" === typeof WeakMap ? WeakMap : Map,\n executionContext = 0,\n workInProgressRoot = null,\n workInProgress = null,\n workInProgressRootRenderLanes = 0,\n workInProgressSuspendedReason = 0,\n workInProgressThrownValue = null,\n workInProgressRootDidSkipSuspendedSiblings = !1,\n workInProgressRootIsPrerendering = !1,\n workInProgressRootDidAttachPingListener = !1,\n entangledRenderLanes = 0,\n workInProgressRootExitStatus = 0,\n workInProgressRootSkippedLanes = 0,\n workInProgressRootInterleavedUpdatedLanes = 0,\n workInProgressRootPingedLanes = 0,\n workInProgressDeferredLane = 0,\n workInProgressSuspendedRetryLanes = 0,\n workInProgressRootConcurrentErrors = null,\n workInProgressRootRecoverableErrors = null,\n workInProgressRootDidIncludeRecursiveRenderUpdate = !1,\n globalMostRecentFallbackTime = 0,\n globalMostRecentTransitionTime = 0,\n workInProgressRootRenderTargetTime = Infinity,\n workInProgressTransitions = null,\n legacyErrorBoundariesThatAlreadyFailed = null,\n pendingEffectsStatus = 0,\n pendingEffectsRoot = null,\n pendingFinishedWork = null,\n pendingEffectsLanes = 0,\n pendingEffectsRemainingLanes = 0,\n pendingPassiveTransitions = null,\n pendingRecoverableErrors = null,\n nestedUpdateCount = 0,\n rootWithNestedUpdates = null;\nfunction requestUpdateLane() {\n return 0 !== (executionContext & 2) && 0 !== workInProgressRootRenderLanes\n ? workInProgressRootRenderLanes & -workInProgressRootRenderLanes\n : null !== ReactSharedInternals.T\n ? requestTransitionLane()\n : resolveUpdatePriority();\n}\nfunction requestDeferredLane() {\n if (0 === workInProgressDeferredLane)\n if (0 === (workInProgressRootRenderLanes & 536870912) || isHydrating) {\n var lane = nextTransitionDeferredLane;\n nextTransitionDeferredLane <<= 1;\n 0 === (nextTransitionDeferredLane & 3932160) &&\n (nextTransitionDeferredLane = 262144);\n workInProgressDeferredLane = lane;\n } else workInProgressDeferredLane = 536870912;\n lane = suspenseHandlerStackCursor.current;\n null !== lane && (lane.flags |= 32);\n return workInProgressDeferredLane;\n}\nfunction scheduleUpdateOnFiber(root, fiber, lane) {\n if (\n (root === workInProgressRoot &&\n (2 === workInProgressSuspendedReason ||\n 9 === workInProgressSuspendedReason)) ||\n null !== root.cancelPendingCommit\n )\n prepareFreshStack(root, 0),\n markRootSuspended(\n root,\n workInProgressRootRenderLanes,\n workInProgressDeferredLane,\n !1\n );\n markRootUpdated$1(root, lane);\n if (0 === (executionContext & 2) || root !== workInProgressRoot)\n root === workInProgressRoot &&\n (0 === (executionContext & 2) &&\n (workInProgressRootInterleavedUpdatedLanes |= lane),\n 4 === workInProgressRootExitStatus &&\n markRootSuspended(\n root,\n workInProgressRootRenderLanes,\n workInProgressDeferredLane,\n !1\n )),\n ensureRootIsScheduled(root);\n}\nfunction performWorkOnRoot(root$jscomp$0, lanes, forceSync) {\n if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(327));\n var shouldTimeSlice =\n (!forceSync &&\n 0 === (lanes & 127) &&\n 0 === (lanes & root$jscomp$0.expiredLanes)) ||\n checkIfRootIsPrerendering(root$jscomp$0, lanes),\n exitStatus = shouldTimeSlice\n ? renderRootConcurrent(root$jscomp$0, lanes)\n : renderRootSync(root$jscomp$0, lanes, !0),\n renderWasConcurrent = shouldTimeSlice;\n do {\n if (0 === exitStatus) {\n workInProgressRootIsPrerendering &&\n !shouldTimeSlice &&\n markRootSuspended(root$jscomp$0, lanes, 0, !1);\n break;\n } else {\n forceSync = root$jscomp$0.current.alternate;\n if (\n renderWasConcurrent &&\n !isRenderConsistentWithExternalStores(forceSync)\n ) {\n exitStatus = renderRootSync(root$jscomp$0, lanes, !1);\n renderWasConcurrent = !1;\n continue;\n }\n if (2 === exitStatus) {\n renderWasConcurrent = lanes;\n if (root$jscomp$0.errorRecoveryDisabledLanes & renderWasConcurrent)\n var JSCompiler_inline_result = 0;\n else\n (JSCompiler_inline_result = root$jscomp$0.pendingLanes & -536870913),\n (JSCompiler_inline_result =\n 0 !== JSCompiler_inline_result\n ? JSCompiler_inline_result\n : JSCompiler_inline_result & 536870912\n ? 536870912\n : 0);\n if (0 !== JSCompiler_inline_result) {\n lanes = JSCompiler_inline_result;\n a: {\n var root = root$jscomp$0;\n exitStatus = workInProgressRootConcurrentErrors;\n var wasRootDehydrated = root.current.memoizedState.isDehydrated;\n wasRootDehydrated &&\n (prepareFreshStack(root, JSCompiler_inline_result).flags |= 256);\n JSCompiler_inline_result = renderRootSync(\n root,\n JSCompiler_inline_result,\n !1\n );\n if (2 !== JSCompiler_inline_result) {\n if (\n workInProgressRootDidAttachPingListener &&\n !wasRootDehydrated\n ) {\n root.errorRecoveryDisabledLanes |= renderWasConcurrent;\n workInProgressRootInterleavedUpdatedLanes |=\n renderWasConcurrent;\n exitStatus = 4;\n break a;\n }\n renderWasConcurrent = workInProgressRootRecoverableErrors;\n workInProgressRootRecoverableErrors = exitStatus;\n null !== renderWasConcurrent &&\n (null === workInProgressRootRecoverableErrors\n ? (workInProgressRootRecoverableErrors = renderWasConcurrent)\n : workInProgressRootRecoverableErrors.push.apply(\n workInProgressRootRecoverableErrors,\n renderWasConcurrent\n ));\n }\n exitStatus = JSCompiler_inline_result;\n }\n renderWasConcurrent = !1;\n if (2 !== exitStatus) continue;\n }\n }\n if (1 === exitStatus) {\n prepareFreshStack(root$jscomp$0, 0);\n markRootSuspended(root$jscomp$0, lanes, 0, !0);\n break;\n }\n a: {\n shouldTimeSlice = root$jscomp$0;\n renderWasConcurrent = exitStatus;\n switch (renderWasConcurrent) {\n case 0:\n case 1:\n throw Error(formatProdErrorMessage(345));\n case 4:\n if ((lanes & 4194048) !== lanes) break;\n case 6:\n markRootSuspended(\n shouldTimeSlice,\n lanes,\n workInProgressDeferredLane,\n !workInProgressRootDidSkipSuspendedSiblings\n );\n break a;\n case 2:\n workInProgressRootRecoverableErrors = null;\n break;\n case 3:\n case 5:\n break;\n default:\n throw Error(formatProdErrorMessage(329));\n }\n if (\n (lanes & 62914560) === lanes &&\n ((exitStatus = globalMostRecentFallbackTime + 300 - now()),\n 10 < exitStatus)\n ) {\n markRootSuspended(\n shouldTimeSlice,\n lanes,\n workInProgressDeferredLane,\n !workInProgressRootDidSkipSuspendedSiblings\n );\n if (0 !== getNextLanes(shouldTimeSlice, 0, !0)) break a;\n pendingEffectsLanes = lanes;\n shouldTimeSlice.timeoutHandle = scheduleTimeout(\n commitRootWhenReady.bind(\n null,\n shouldTimeSlice,\n forceSync,\n workInProgressRootRecoverableErrors,\n workInProgressTransitions,\n workInProgressRootDidIncludeRecursiveRenderUpdate,\n lanes,\n workInProgressDeferredLane,\n workInProgressRootInterleavedUpdatedLanes,\n workInProgressSuspendedRetryLanes,\n workInProgressRootDidSkipSuspendedSiblings,\n renderWasConcurrent,\n \"Throttled\",\n -0,\n 0\n ),\n exitStatus\n );\n break a;\n }\n commitRootWhenReady(\n shouldTimeSlice,\n forceSync,\n workInProgressRootRecoverableErrors,\n workInProgressTransitions,\n workInProgressRootDidIncludeRecursiveRenderUpdate,\n lanes,\n workInProgressDeferredLane,\n workInProgressRootInterleavedUpdatedLanes,\n workInProgressSuspendedRetryLanes,\n workInProgressRootDidSkipSuspendedSiblings,\n renderWasConcurrent,\n null,\n -0,\n 0\n );\n }\n }\n break;\n } while (1);\n ensureRootIsScheduled(root$jscomp$0);\n}\nfunction commitRootWhenReady(\n root,\n finishedWork,\n recoverableErrors,\n transitions,\n didIncludeRenderPhaseUpdate,\n lanes,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes,\n didSkipSuspendedSiblings,\n exitStatus,\n suspendedCommitReason,\n completedRenderStartTime,\n completedRenderEndTime\n) {\n root.timeoutHandle = -1;\n suspendedCommitReason = finishedWork.subtreeFlags;\n if (\n suspendedCommitReason & 8192 ||\n 16785408 === (suspendedCommitReason & 16785408)\n ) {\n suspendedCommitReason = {\n stylesheets: null,\n count: 0,\n imgCount: 0,\n imgBytes: 0,\n suspenseyImages: [],\n waitingForImages: !0,\n waitingForViewTransition: !1,\n unsuspend: noop$1\n };\n accumulateSuspenseyCommitOnFiber(\n finishedWork,\n lanes,\n suspendedCommitReason\n );\n var timeoutOffset =\n (lanes & 62914560) === lanes\n ? globalMostRecentFallbackTime - now()\n : (lanes & 4194048) === lanes\n ? globalMostRecentTransitionTime - now()\n : 0;\n timeoutOffset = waitForCommitToBeReady(\n suspendedCommitReason,\n timeoutOffset\n );\n if (null !== timeoutOffset) {\n pendingEffectsLanes = lanes;\n root.cancelPendingCommit = timeoutOffset(\n commitRoot.bind(\n null,\n root,\n finishedWork,\n lanes,\n recoverableErrors,\n transitions,\n didIncludeRenderPhaseUpdate,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes,\n exitStatus,\n suspendedCommitReason,\n null,\n completedRenderStartTime,\n completedRenderEndTime\n )\n );\n markRootSuspended(root, lanes, spawnedLane, !didSkipSuspendedSiblings);\n return;\n }\n }\n commitRoot(\n root,\n finishedWork,\n lanes,\n recoverableErrors,\n transitions,\n didIncludeRenderPhaseUpdate,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes\n );\n}\nfunction isRenderConsistentWithExternalStores(finishedWork) {\n for (var node = finishedWork; ; ) {\n var tag = node.tag;\n if (\n (0 === tag || 11 === tag || 15 === tag) &&\n node.flags & 16384 &&\n ((tag = node.updateQueue),\n null !== tag && ((tag = tag.stores), null !== tag))\n )\n for (var i = 0; i < tag.length; i++) {\n var check = tag[i],\n getSnapshot = check.getSnapshot;\n check = check.value;\n try {\n if (!objectIs(getSnapshot(), check)) return !1;\n } catch (error) {\n return !1;\n }\n }\n tag = node.child;\n if (node.subtreeFlags & 16384 && null !== tag)\n (tag.return = node), (node = tag);\n else {\n if (node === finishedWork) break;\n for (; null === node.sibling; ) {\n if (null === node.return || node.return === finishedWork) return !0;\n node = node.return;\n }\n node.sibling.return = node.return;\n node = node.sibling;\n }\n }\n return !0;\n}\nfunction markRootSuspended(\n root,\n suspendedLanes,\n spawnedLane,\n didAttemptEntireTree\n) {\n suspendedLanes &= ~workInProgressRootPingedLanes;\n suspendedLanes &= ~workInProgressRootInterleavedUpdatedLanes;\n root.suspendedLanes |= suspendedLanes;\n root.pingedLanes &= ~suspendedLanes;\n didAttemptEntireTree && (root.warmLanes |= suspendedLanes);\n didAttemptEntireTree = root.expirationTimes;\n for (var lanes = suspendedLanes; 0 < lanes; ) {\n var index$6 = 31 - clz32(lanes),\n lane = 1 << index$6;\n didAttemptEntireTree[index$6] = -1;\n lanes &= ~lane;\n }\n 0 !== spawnedLane &&\n markSpawnedDeferredLane(root, spawnedLane, suspendedLanes);\n}\nfunction flushSyncWork$1() {\n return 0 === (executionContext & 6)\n ? (flushSyncWorkAcrossRoots_impl(0, !1), !1)\n : !0;\n}\nfunction resetWorkInProgressStack() {\n if (null !== workInProgress) {\n if (0 === workInProgressSuspendedReason)\n var interruptedWork = workInProgress.return;\n else\n (interruptedWork = workInProgress),\n (lastContextDependency = currentlyRenderingFiber$1 = null),\n resetHooksOnUnwind(interruptedWork),\n (thenableState$1 = null),\n (thenableIndexCounter$1 = 0),\n (interruptedWork = workInProgress);\n for (; null !== interruptedWork; )\n unwindInterruptedWork(interruptedWork.alternate, interruptedWork),\n (interruptedWork = interruptedWork.return);\n workInProgress = null;\n }\n}\nfunction prepareFreshStack(root, lanes) {\n var timeoutHandle = root.timeoutHandle;\n -1 !== timeoutHandle &&\n ((root.timeoutHandle = -1), cancelTimeout(timeoutHandle));\n timeoutHandle = root.cancelPendingCommit;\n null !== timeoutHandle &&\n ((root.cancelPendingCommit = null), timeoutHandle());\n pendingEffectsLanes = 0;\n resetWorkInProgressStack();\n workInProgressRoot = root;\n workInProgress = timeoutHandle = createWorkInProgress(root.current, null);\n workInProgressRootRenderLanes = lanes;\n workInProgressSuspendedReason = 0;\n workInProgressThrownValue = null;\n workInProgressRootDidSkipSuspendedSiblings = !1;\n workInProgressRootIsPrerendering = checkIfRootIsPrerendering(root, lanes);\n workInProgressRootDidAttachPingListener = !1;\n workInProgressSuspendedRetryLanes =\n workInProgressDeferredLane =\n workInProgressRootPingedLanes =\n workInProgressRootInterleavedUpdatedLanes =\n workInProgressRootSkippedLanes =\n workInProgressRootExitStatus =\n 0;\n workInProgressRootRecoverableErrors = workInProgressRootConcurrentErrors =\n null;\n workInProgressRootDidIncludeRecursiveRenderUpdate = !1;\n 0 !== (lanes & 8) && (lanes |= lanes & 32);\n var allEntangledLanes = root.entangledLanes;\n if (0 !== allEntangledLanes)\n for (\n root = root.entanglements, allEntangledLanes &= lanes;\n 0 < allEntangledLanes;\n\n ) {\n var index$4 = 31 - clz32(allEntangledLanes),\n lane = 1 << index$4;\n lanes |= root[index$4];\n allEntangledLanes &= ~lane;\n }\n entangledRenderLanes = lanes;\n finishQueueingConcurrentUpdates();\n return timeoutHandle;\n}\nfunction handleThrow(root, thrownValue) {\n currentlyRenderingFiber = null;\n ReactSharedInternals.H = ContextOnlyDispatcher;\n thrownValue === SuspenseException || thrownValue === SuspenseActionException\n ? ((thrownValue = getSuspendedThenable()),\n (workInProgressSuspendedReason = 3))\n : thrownValue === SuspenseyCommitException\n ? ((thrownValue = getSuspendedThenable()),\n (workInProgressSuspendedReason = 4))\n : (workInProgressSuspendedReason =\n thrownValue === SelectiveHydrationException\n ? 8\n : null !== thrownValue &&\n \"object\" === typeof thrownValue &&\n \"function\" === typeof thrownValue.then\n ? 6\n : 1);\n workInProgressThrownValue = thrownValue;\n null === workInProgress &&\n ((workInProgressRootExitStatus = 1),\n logUncaughtError(\n root,\n createCapturedValueAtFiber(thrownValue, root.current)\n ));\n}\nfunction shouldRemainOnPreviousScreen() {\n var handler = suspenseHandlerStackCursor.current;\n return null === handler\n ? !0\n : (workInProgressRootRenderLanes & 4194048) ===\n workInProgressRootRenderLanes\n ? null === shellBoundary\n ? !0\n : !1\n : (workInProgressRootRenderLanes & 62914560) ===\n workInProgressRootRenderLanes ||\n 0 !== (workInProgressRootRenderLanes & 536870912)\n ? handler === shellBoundary\n : !1;\n}\nfunction pushDispatcher() {\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = ContextOnlyDispatcher;\n return null === prevDispatcher ? ContextOnlyDispatcher : prevDispatcher;\n}\nfunction pushAsyncDispatcher() {\n var prevAsyncDispatcher = ReactSharedInternals.A;\n ReactSharedInternals.A = DefaultAsyncDispatcher;\n return prevAsyncDispatcher;\n}\nfunction renderDidSuspendDelayIfPossible() {\n workInProgressRootExitStatus = 4;\n workInProgressRootDidSkipSuspendedSiblings ||\n ((workInProgressRootRenderLanes & 4194048) !==\n workInProgressRootRenderLanes &&\n null !== suspenseHandlerStackCursor.current) ||\n (workInProgressRootIsPrerendering = !0);\n (0 === (workInProgressRootSkippedLanes & 134217727) &&\n 0 === (workInProgressRootInterleavedUpdatedLanes & 134217727)) ||\n null === workInProgressRoot ||\n markRootSuspended(\n workInProgressRoot,\n workInProgressRootRenderLanes,\n workInProgressDeferredLane,\n !1\n );\n}\nfunction renderRootSync(root, lanes, shouldYieldForPrerendering) {\n var prevExecutionContext = executionContext;\n executionContext |= 2;\n var prevDispatcher = pushDispatcher(),\n prevAsyncDispatcher = pushAsyncDispatcher();\n if (workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes)\n (workInProgressTransitions = null), prepareFreshStack(root, lanes);\n lanes = !1;\n var exitStatus = workInProgressRootExitStatus;\n a: do\n try {\n if (0 !== workInProgressSuspendedReason && null !== workInProgress) {\n var unitOfWork = workInProgress,\n thrownValue = workInProgressThrownValue;\n switch (workInProgressSuspendedReason) {\n case 8:\n resetWorkInProgressStack();\n exitStatus = 6;\n break a;\n case 3:\n case 2:\n case 9:\n case 6:\n null === suspenseHandlerStackCursor.current && (lanes = !0);\n var reason = workInProgressSuspendedReason;\n workInProgressSuspendedReason = 0;\n workInProgressThrownValue = null;\n throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);\n if (\n shouldYieldForPrerendering &&\n workInProgressRootIsPrerendering\n ) {\n exitStatus = 0;\n break a;\n }\n break;\n default:\n (reason = workInProgressSuspendedReason),\n (workInProgressSuspendedReason = 0),\n (workInProgressThrownValue = null),\n throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);\n }\n }\n workLoopSync();\n exitStatus = workInProgressRootExitStatus;\n break;\n } catch (thrownValue$165) {\n handleThrow(root, thrownValue$165);\n }\n while (1);\n lanes && root.shellSuspendCounter++;\n lastContextDependency = currentlyRenderingFiber$1 = null;\n executionContext = prevExecutionContext;\n ReactSharedInternals.H = prevDispatcher;\n ReactSharedInternals.A = prevAsyncDispatcher;\n null === workInProgress &&\n ((workInProgressRoot = null),\n (workInProgressRootRenderLanes = 0),\n finishQueueingConcurrentUpdates());\n return exitStatus;\n}\nfunction workLoopSync() {\n for (; null !== workInProgress; ) performUnitOfWork(workInProgress);\n}\nfunction renderRootConcurrent(root, lanes) {\n var prevExecutionContext = executionContext;\n executionContext |= 2;\n var prevDispatcher = pushDispatcher(),\n prevAsyncDispatcher = pushAsyncDispatcher();\n workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes\n ? ((workInProgressTransitions = null),\n (workInProgressRootRenderTargetTime = now() + 500),\n prepareFreshStack(root, lanes))\n : (workInProgressRootIsPrerendering = checkIfRootIsPrerendering(\n root,\n lanes\n ));\n a: do\n try {\n if (0 !== workInProgressSuspendedReason && null !== workInProgress) {\n lanes = workInProgress;\n var thrownValue = workInProgressThrownValue;\n b: switch (workInProgressSuspendedReason) {\n case 1:\n workInProgressSuspendedReason = 0;\n workInProgressThrownValue = null;\n throwAndUnwindWorkLoop(root, lanes, thrownValue, 1);\n break;\n case 2:\n case 9:\n if (isThenableResolved(thrownValue)) {\n workInProgressSuspendedReason = 0;\n workInProgressThrownValue = null;\n replaySuspendedUnitOfWork(lanes);\n break;\n }\n lanes = function () {\n (2 !== workInProgressSuspendedReason &&\n 9 !== workInProgressSuspendedReason) ||\n workInProgressRoot !== root ||\n (workInProgressSuspendedReason = 7);\n ensureRootIsScheduled(root);\n };\n thrownValue.then(lanes, lanes);\n break a;\n case 3:\n workInProgressSuspendedReason = 7;\n break a;\n case 4:\n workInProgressSuspendedReason = 5;\n break a;\n case 7:\n isThenableResolved(thrownValue)\n ? ((workInProgressSuspendedReason = 0),\n (workInProgressThrownValue = null),\n replaySuspendedUnitOfWork(lanes))\n : ((workInProgressSuspendedReason = 0),\n (workInProgressThrownValue = null),\n throwAndUnwindWorkLoop(root, lanes, thrownValue, 7));\n break;\n case 5:\n var resource = null;\n switch (workInProgress.tag) {\n case 26:\n resource = workInProgress.memoizedState;\n case 5:\n case 27:\n var hostFiber = workInProgress;\n if (\n resource\n ? preloadResource(resource)\n : hostFiber.stateNode.complete\n ) {\n workInProgressSuspendedReason = 0;\n workInProgressThrownValue = null;\n var sibling = hostFiber.sibling;\n if (null !== sibling) workInProgress = sibling;\n else {\n var returnFiber = hostFiber.return;\n null !== returnFiber\n ? ((workInProgress = returnFiber),\n completeUnitOfWork(returnFiber))\n : (workInProgress = null);\n }\n break b;\n }\n }\n workInProgressSuspendedReason = 0;\n workInProgressThrownValue = null;\n throwAndUnwindWorkLoop(root, lanes, thrownValue, 5);\n break;\n case 6:\n workInProgressSuspendedReason = 0;\n workInProgressThrownValue = null;\n throwAndUnwindWorkLoop(root, lanes, thrownValue, 6);\n break;\n case 8:\n resetWorkInProgressStack();\n workInProgressRootExitStatus = 6;\n break a;\n default:\n throw Error(formatProdErrorMessage(462));\n }\n }\n workLoopConcurrentByScheduler();\n break;\n } catch (thrownValue$167) {\n handleThrow(root, thrownValue$167);\n }\n while (1);\n lastContextDependency = currentlyRenderingFiber$1 = null;\n ReactSharedInternals.H = prevDispatcher;\n ReactSharedInternals.A = prevAsyncDispatcher;\n executionContext = prevExecutionContext;\n if (null !== workInProgress) return 0;\n workInProgressRoot = null;\n workInProgressRootRenderLanes = 0;\n finishQueueingConcurrentUpdates();\n return workInProgressRootExitStatus;\n}\nfunction workLoopConcurrentByScheduler() {\n for (; null !== workInProgress && !shouldYield(); )\n performUnitOfWork(workInProgress);\n}\nfunction performUnitOfWork(unitOfWork) {\n var next = beginWork(unitOfWork.alternate, unitOfWork, entangledRenderLanes);\n unitOfWork.memoizedProps = unitOfWork.pendingProps;\n null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);\n}\nfunction replaySuspendedUnitOfWork(unitOfWork) {\n var next = unitOfWork;\n var current = next.alternate;\n switch (next.tag) {\n case 15:\n case 0:\n next = replayFunctionComponent(\n current,\n next,\n next.pendingProps,\n next.type,\n void 0,\n workInProgressRootRenderLanes\n );\n break;\n case 11:\n next = replayFunctionComponent(\n current,\n next,\n next.pendingProps,\n next.type.render,\n next.ref,\n workInProgressRootRenderLanes\n );\n break;\n case 5:\n resetHooksOnUnwind(next);\n default:\n unwindInterruptedWork(current, next),\n (next = workInProgress =\n resetWorkInProgress(next, entangledRenderLanes)),\n (next = beginWork(current, next, entangledRenderLanes));\n }\n unitOfWork.memoizedProps = unitOfWork.pendingProps;\n null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);\n}\nfunction throwAndUnwindWorkLoop(\n root,\n unitOfWork,\n thrownValue,\n suspendedReason\n) {\n lastContextDependency = currentlyRenderingFiber$1 = null;\n resetHooksOnUnwind(unitOfWork);\n thenableState$1 = null;\n thenableIndexCounter$1 = 0;\n var returnFiber = unitOfWork.return;\n try {\n if (\n throwException(\n root,\n returnFiber,\n unitOfWork,\n thrownValue,\n workInProgressRootRenderLanes\n )\n ) {\n workInProgressRootExitStatus = 1;\n logUncaughtError(\n root,\n createCapturedValueAtFiber(thrownValue, root.current)\n );\n workInProgress = null;\n return;\n }\n } catch (error) {\n if (null !== returnFiber) throw ((workInProgress = returnFiber), error);\n workInProgressRootExitStatus = 1;\n logUncaughtError(\n root,\n createCapturedValueAtFiber(thrownValue, root.current)\n );\n workInProgress = null;\n return;\n }\n if (unitOfWork.flags & 32768) {\n if (isHydrating || 1 === suspendedReason) root = !0;\n else if (\n workInProgressRootIsPrerendering ||\n 0 !== (workInProgressRootRenderLanes & 536870912)\n )\n root = !1;\n else if (\n ((workInProgressRootDidSkipSuspendedSiblings = root = !0),\n 2 === suspendedReason ||\n 9 === suspendedReason ||\n 3 === suspendedReason ||\n 6 === suspendedReason)\n )\n (suspendedReason = suspenseHandlerStackCursor.current),\n null !== suspendedReason &&\n 13 === suspendedReason.tag &&\n (suspendedReason.flags |= 16384);\n unwindUnitOfWork(unitOfWork, root);\n } else completeUnitOfWork(unitOfWork);\n}\nfunction completeUnitOfWork(unitOfWork) {\n var completedWork = unitOfWork;\n do {\n if (0 !== (completedWork.flags & 32768)) {\n unwindUnitOfWork(\n completedWork,\n workInProgressRootDidSkipSuspendedSiblings\n );\n return;\n }\n unitOfWork = completedWork.return;\n var next = completeWork(\n completedWork.alternate,\n completedWork,\n entangledRenderLanes\n );\n if (null !== next) {\n workInProgress = next;\n return;\n }\n completedWork = completedWork.sibling;\n if (null !== completedWork) {\n workInProgress = completedWork;\n return;\n }\n workInProgress = completedWork = unitOfWork;\n } while (null !== completedWork);\n 0 === workInProgressRootExitStatus && (workInProgressRootExitStatus = 5);\n}\nfunction unwindUnitOfWork(unitOfWork, skipSiblings) {\n do {\n var next = unwindWork(unitOfWork.alternate, unitOfWork);\n if (null !== next) {\n next.flags &= 32767;\n workInProgress = next;\n return;\n }\n next = unitOfWork.return;\n null !== next &&\n ((next.flags |= 32768), (next.subtreeFlags = 0), (next.deletions = null));\n if (\n !skipSiblings &&\n ((unitOfWork = unitOfWork.sibling), null !== unitOfWork)\n ) {\n workInProgress = unitOfWork;\n return;\n }\n workInProgress = unitOfWork = next;\n } while (null !== unitOfWork);\n workInProgressRootExitStatus = 6;\n workInProgress = null;\n}\nfunction commitRoot(\n root,\n finishedWork,\n lanes,\n recoverableErrors,\n transitions,\n didIncludeRenderPhaseUpdate,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes\n) {\n root.cancelPendingCommit = null;\n do flushPendingEffects();\n while (0 !== pendingEffectsStatus);\n if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(327));\n if (null !== finishedWork) {\n if (finishedWork === root.current) throw Error(formatProdErrorMessage(177));\n didIncludeRenderPhaseUpdate = finishedWork.lanes | finishedWork.childLanes;\n didIncludeRenderPhaseUpdate |= concurrentlyUpdatedLanes;\n markRootFinished(\n root,\n lanes,\n didIncludeRenderPhaseUpdate,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes\n );\n root === workInProgressRoot &&\n ((workInProgress = workInProgressRoot = null),\n (workInProgressRootRenderLanes = 0));\n pendingFinishedWork = finishedWork;\n pendingEffectsRoot = root;\n pendingEffectsLanes = lanes;\n pendingEffectsRemainingLanes = didIncludeRenderPhaseUpdate;\n pendingPassiveTransitions = transitions;\n pendingRecoverableErrors = recoverableErrors;\n 0 !== (finishedWork.subtreeFlags & 10256) ||\n 0 !== (finishedWork.flags & 10256)\n ? ((root.callbackNode = null),\n (root.callbackPriority = 0),\n scheduleCallback$1(NormalPriority$1, function () {\n flushPassiveEffects();\n return null;\n }))\n : ((root.callbackNode = null), (root.callbackPriority = 0));\n recoverableErrors = 0 !== (finishedWork.flags & 13878);\n if (0 !== (finishedWork.subtreeFlags & 13878) || recoverableErrors) {\n recoverableErrors = ReactSharedInternals.T;\n ReactSharedInternals.T = null;\n transitions = ReactDOMSharedInternals.p;\n ReactDOMSharedInternals.p = 2;\n spawnedLane = executionContext;\n executionContext |= 4;\n try {\n commitBeforeMutationEffects(root, finishedWork, lanes);\n } finally {\n (executionContext = spawnedLane),\n (ReactDOMSharedInternals.p = transitions),\n (ReactSharedInternals.T = recoverableErrors);\n }\n }\n pendingEffectsStatus = 1;\n flushMutationEffects();\n flushLayoutEffects();\n flushSpawnedWork();\n }\n}\nfunction flushMutationEffects() {\n if (1 === pendingEffectsStatus) {\n pendingEffectsStatus = 0;\n var root = pendingEffectsRoot,\n finishedWork = pendingFinishedWork,\n rootMutationHasEffect = 0 !== (finishedWork.flags & 13878);\n if (0 !== (finishedWork.subtreeFlags & 13878) || rootMutationHasEffect) {\n rootMutationHasEffect = ReactSharedInternals.T;\n ReactSharedInternals.T = null;\n var previousPriority = ReactDOMSharedInternals.p;\n ReactDOMSharedInternals.p = 2;\n var prevExecutionContext = executionContext;\n executionContext |= 4;\n try {\n commitMutationEffectsOnFiber(finishedWork, root);\n var priorSelectionInformation = selectionInformation,\n curFocusedElem = getActiveElementDeep(root.containerInfo),\n priorFocusedElem = priorSelectionInformation.focusedElem,\n priorSelectionRange = priorSelectionInformation.selectionRange;\n if (\n curFocusedElem !== priorFocusedElem &&\n priorFocusedElem &&\n priorFocusedElem.ownerDocument &&\n containsNode(\n priorFocusedElem.ownerDocument.documentElement,\n priorFocusedElem\n )\n ) {\n if (\n null !== priorSelectionRange &&\n hasSelectionCapabilities(priorFocusedElem)\n ) {\n var start = priorSelectionRange.start,\n end = priorSelectionRange.end;\n void 0 === end && (end = start);\n if (\"selectionStart\" in priorFocusedElem)\n (priorFocusedElem.selectionStart = start),\n (priorFocusedElem.selectionEnd = Math.min(\n end,\n priorFocusedElem.value.length\n ));\n else {\n var doc = priorFocusedElem.ownerDocument || document,\n win = (doc && doc.defaultView) || window;\n if (win.getSelection) {\n var selection = win.getSelection(),\n length = priorFocusedElem.textContent.length,\n start$jscomp$0 = Math.min(priorSelectionRange.start, length),\n end$jscomp$0 =\n void 0 === priorSelectionRange.end\n ? start$jscomp$0\n : Math.min(priorSelectionRange.end, length);\n !selection.extend &&\n start$jscomp$0 > end$jscomp$0 &&\n ((curFocusedElem = end$jscomp$0),\n (end$jscomp$0 = start$jscomp$0),\n (start$jscomp$0 = curFocusedElem));\n var startMarker = getNodeForCharacterOffset(\n priorFocusedElem,\n start$jscomp$0\n ),\n endMarker = getNodeForCharacterOffset(\n priorFocusedElem,\n end$jscomp$0\n );\n if (\n startMarker &&\n endMarker &&\n (1 !== selection.rangeCount ||\n selection.anchorNode !== startMarker.node ||\n selection.anchorOffset !== startMarker.offset ||\n selection.focusNode !== endMarker.node ||\n selection.focusOffset !== endMarker.offset)\n ) {\n var range = doc.createRange();\n range.setStart(startMarker.node, startMarker.offset);\n selection.removeAllRanges();\n start$jscomp$0 > end$jscomp$0\n ? (selection.addRange(range),\n selection.extend(endMarker.node, endMarker.offset))\n : (range.setEnd(endMarker.node, endMarker.offset),\n selection.addRange(range));\n }\n }\n }\n }\n doc = [];\n for (\n selection = priorFocusedElem;\n (selection = selection.parentNode);\n\n )\n 1 === selection.nodeType &&\n doc.push({\n element: selection,\n left: selection.scrollLeft,\n top: selection.scrollTop\n });\n \"function\" === typeof priorFocusedElem.focus &&\n priorFocusedElem.focus();\n for (\n priorFocusedElem = 0;\n priorFocusedElem < doc.length;\n priorFocusedElem++\n ) {\n var info = doc[priorFocusedElem];\n info.element.scrollLeft = info.left;\n info.element.scrollTop = info.top;\n }\n }\n _enabled = !!eventsEnabled;\n selectionInformation = eventsEnabled = null;\n } finally {\n (executionContext = prevExecutionContext),\n (ReactDOMSharedInternals.p = previousPriority),\n (ReactSharedInternals.T = rootMutationHasEffect);\n }\n }\n root.current = finishedWork;\n pendingEffectsStatus = 2;\n }\n}\nfunction flushLayoutEffects() {\n if (2 === pendingEffectsStatus) {\n pendingEffectsStatus = 0;\n var root = pendingEffectsRoot,\n finishedWork = pendingFinishedWork,\n rootHasLayoutEffect = 0 !== (finishedWork.flags & 8772);\n if (0 !== (finishedWork.subtreeFlags & 8772) || rootHasLayoutEffect) {\n rootHasLayoutEffect = ReactSharedInternals.T;\n ReactSharedInternals.T = null;\n var previousPriority = ReactDOMSharedInternals.p;\n ReactDOMSharedInternals.p = 2;\n var prevExecutionContext = executionContext;\n executionContext |= 4;\n try {\n commitLayoutEffectOnFiber(root, finishedWork.alternate, finishedWork);\n } finally {\n (executionContext = prevExecutionContext),\n (ReactDOMSharedInternals.p = previousPriority),\n (ReactSharedInternals.T = rootHasLayoutEffect);\n }\n }\n pendingEffectsStatus = 3;\n }\n}\nfunction flushSpawnedWork() {\n if (4 === pendingEffectsStatus || 3 === pendingEffectsStatus) {\n pendingEffectsStatus = 0;\n requestPaint();\n var root = pendingEffectsRoot,\n finishedWork = pendingFinishedWork,\n lanes = pendingEffectsLanes,\n recoverableErrors = pendingRecoverableErrors;\n 0 !== (finishedWork.subtreeFlags & 10256) ||\n 0 !== (finishedWork.flags & 10256)\n ? (pendingEffectsStatus = 5)\n : ((pendingEffectsStatus = 0),\n (pendingFinishedWork = pendingEffectsRoot = null),\n releaseRootPooledCache(root, root.pendingLanes));\n var remainingLanes = root.pendingLanes;\n 0 === remainingLanes && (legacyErrorBoundariesThatAlreadyFailed = null);\n lanesToEventPriority(lanes);\n finishedWork = finishedWork.stateNode;\n if (injectedHook && \"function\" === typeof injectedHook.onCommitFiberRoot)\n try {\n injectedHook.onCommitFiberRoot(\n rendererID,\n finishedWork,\n void 0,\n 128 === (finishedWork.current.flags & 128)\n );\n } catch (err) {}\n if (null !== recoverableErrors) {\n finishedWork = ReactSharedInternals.T;\n remainingLanes = ReactDOMSharedInternals.p;\n ReactDOMSharedInternals.p = 2;\n ReactSharedInternals.T = null;\n try {\n for (\n var onRecoverableError = root.onRecoverableError, i = 0;\n i < recoverableErrors.length;\n i++\n ) {\n var recoverableError = recoverableErrors[i];\n onRecoverableError(recoverableError.value, {\n componentStack: recoverableError.stack\n });\n }\n } finally {\n (ReactSharedInternals.T = finishedWork),\n (ReactDOMSharedInternals.p = remainingLanes);\n }\n }\n 0 !== (pendingEffectsLanes & 3) && flushPendingEffects();\n ensureRootIsScheduled(root);\n remainingLanes = root.pendingLanes;\n 0 !== (lanes & 261930) && 0 !== (remainingLanes & 42)\n ? root === rootWithNestedUpdates\n ? nestedUpdateCount++\n : ((nestedUpdateCount = 0), (rootWithNestedUpdates = root))\n : (nestedUpdateCount = 0);\n flushSyncWorkAcrossRoots_impl(0, !1);\n }\n}\nfunction releaseRootPooledCache(root, remainingLanes) {\n 0 === (root.pooledCacheLanes &= remainingLanes) &&\n ((remainingLanes = root.pooledCache),\n null != remainingLanes &&\n ((root.pooledCache = null), releaseCache(remainingLanes)));\n}\nfunction flushPendingEffects() {\n flushMutationEffects();\n flushLayoutEffects();\n flushSpawnedWork();\n return flushPassiveEffects();\n}\nfunction flushPassiveEffects() {\n if (5 !== pendingEffectsStatus) return !1;\n var root = pendingEffectsRoot,\n remainingLanes = pendingEffectsRemainingLanes;\n pendingEffectsRemainingLanes = 0;\n var renderPriority = lanesToEventPriority(pendingEffectsLanes),\n prevTransition = ReactSharedInternals.T,\n previousPriority = ReactDOMSharedInternals.p;\n try {\n ReactDOMSharedInternals.p = 32 > renderPriority ? 32 : renderPriority;\n ReactSharedInternals.T = null;\n renderPriority = pendingPassiveTransitions;\n pendingPassiveTransitions = null;\n var root$jscomp$0 = pendingEffectsRoot,\n lanes = pendingEffectsLanes;\n pendingEffectsStatus = 0;\n pendingFinishedWork = pendingEffectsRoot = null;\n pendingEffectsLanes = 0;\n if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(331));\n var prevExecutionContext = executionContext;\n executionContext |= 4;\n commitPassiveUnmountOnFiber(root$jscomp$0.current);\n commitPassiveMountOnFiber(\n root$jscomp$0,\n root$jscomp$0.current,\n lanes,\n renderPriority\n );\n executionContext = prevExecutionContext;\n flushSyncWorkAcrossRoots_impl(0, !1);\n if (\n injectedHook &&\n \"function\" === typeof injectedHook.onPostCommitFiberRoot\n )\n try {\n injectedHook.onPostCommitFiberRoot(rendererID, root$jscomp$0);\n } catch (err) {}\n return !0;\n } finally {\n (ReactDOMSharedInternals.p = previousPriority),\n (ReactSharedInternals.T = prevTransition),\n releaseRootPooledCache(root, remainingLanes);\n }\n}\nfunction captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) {\n sourceFiber = createCapturedValueAtFiber(error, sourceFiber);\n sourceFiber = createRootErrorUpdate(rootFiber.stateNode, sourceFiber, 2);\n rootFiber = enqueueUpdate(rootFiber, sourceFiber, 2);\n null !== rootFiber &&\n (markRootUpdated$1(rootFiber, 2), ensureRootIsScheduled(rootFiber));\n}\nfunction captureCommitPhaseError(sourceFiber, nearestMountedAncestor, error) {\n if (3 === sourceFiber.tag)\n captureCommitPhaseErrorOnRoot(sourceFiber, sourceFiber, error);\n else\n for (; null !== nearestMountedAncestor; ) {\n if (3 === nearestMountedAncestor.tag) {\n captureCommitPhaseErrorOnRoot(\n nearestMountedAncestor,\n sourceFiber,\n error\n );\n break;\n } else if (1 === nearestMountedAncestor.tag) {\n var instance = nearestMountedAncestor.stateNode;\n if (\n \"function\" ===\n typeof nearestMountedAncestor.type.getDerivedStateFromError ||\n (\"function\" === typeof instance.componentDidCatch &&\n (null === legacyErrorBoundariesThatAlreadyFailed ||\n !legacyErrorBoundariesThatAlreadyFailed.has(instance)))\n ) {\n sourceFiber = createCapturedValueAtFiber(error, sourceFiber);\n error = createClassErrorUpdate(2);\n instance = enqueueUpdate(nearestMountedAncestor, error, 2);\n null !== instance &&\n (initializeClassErrorUpdate(\n error,\n instance,\n nearestMountedAncestor,\n sourceFiber\n ),\n markRootUpdated$1(instance, 2),\n ensureRootIsScheduled(instance));\n break;\n }\n }\n nearestMountedAncestor = nearestMountedAncestor.return;\n }\n}\nfunction attachPingListener(root, wakeable, lanes) {\n var pingCache = root.pingCache;\n if (null === pingCache) {\n pingCache = root.pingCache = new PossiblyWeakMap();\n var threadIDs = new Set();\n pingCache.set(wakeable, threadIDs);\n } else\n (threadIDs = pingCache.get(wakeable)),\n void 0 === threadIDs &&\n ((threadIDs = new Set()), pingCache.set(wakeable, threadIDs));\n threadIDs.has(lanes) ||\n ((workInProgressRootDidAttachPingListener = !0),\n threadIDs.add(lanes),\n (root = pingSuspendedRoot.bind(null, root, wakeable, lanes)),\n wakeable.then(root, root));\n}\nfunction pingSuspendedRoot(root, wakeable, pingedLanes) {\n var pingCache = root.pingCache;\n null !== pingCache && pingCache.delete(wakeable);\n root.pingedLanes |= root.suspendedLanes & pingedLanes;\n root.warmLanes &= ~pingedLanes;\n workInProgressRoot === root &&\n (workInProgressRootRenderLanes & pingedLanes) === pingedLanes &&\n (4 === workInProgressRootExitStatus ||\n (3 === workInProgressRootExitStatus &&\n (workInProgressRootRenderLanes & 62914560) ===\n workInProgressRootRenderLanes &&\n 300 > now() - globalMostRecentFallbackTime)\n ? 0 === (executionContext & 2) && prepareFreshStack(root, 0)\n : (workInProgressRootPingedLanes |= pingedLanes),\n workInProgressSuspendedRetryLanes === workInProgressRootRenderLanes &&\n (workInProgressSuspendedRetryLanes = 0));\n ensureRootIsScheduled(root);\n}\nfunction retryTimedOutBoundary(boundaryFiber, retryLane) {\n 0 === retryLane && (retryLane = claimNextRetryLane());\n boundaryFiber = enqueueConcurrentRenderForLane(boundaryFiber, retryLane);\n null !== boundaryFiber &&\n (markRootUpdated$1(boundaryFiber, retryLane),\n ensureRootIsScheduled(boundaryFiber));\n}\nfunction retryDehydratedSuspenseBoundary(boundaryFiber) {\n var suspenseState = boundaryFiber.memoizedState,\n retryLane = 0;\n null !== suspenseState && (retryLane = suspenseState.retryLane);\n retryTimedOutBoundary(boundaryFiber, retryLane);\n}\nfunction resolveRetryWakeable(boundaryFiber, wakeable) {\n var retryLane = 0;\n switch (boundaryFiber.tag) {\n case 31:\n case 13:\n var retryCache = boundaryFiber.stateNode;\n var suspenseState = boundaryFiber.memoizedState;\n null !== suspenseState && (retryLane = suspenseState.retryLane);\n break;\n case 19:\n retryCache = boundaryFiber.stateNode;\n break;\n case 22:\n retryCache = boundaryFiber.stateNode._retryCache;\n break;\n default:\n throw Error(formatProdErrorMessage(314));\n }\n null !== retryCache && retryCache.delete(wakeable);\n retryTimedOutBoundary(boundaryFiber, retryLane);\n}\nfunction scheduleCallback$1(priorityLevel, callback) {\n return scheduleCallback$3(priorityLevel, callback);\n}\nvar firstScheduledRoot = null,\n lastScheduledRoot = null,\n didScheduleMicrotask = !1,\n mightHavePendingSyncWork = !1,\n isFlushingWork = !1,\n currentEventTransitionLane = 0;\nfunction ensureRootIsScheduled(root) {\n root !== lastScheduledRoot &&\n null === root.next &&\n (null === lastScheduledRoot\n ? (firstScheduledRoot = lastScheduledRoot = root)\n : (lastScheduledRoot = lastScheduledRoot.next = root));\n mightHavePendingSyncWork = !0;\n didScheduleMicrotask ||\n ((didScheduleMicrotask = !0), scheduleImmediateRootScheduleTask());\n}\nfunction flushSyncWorkAcrossRoots_impl(syncTransitionLanes, onlyLegacy) {\n if (!isFlushingWork && mightHavePendingSyncWork) {\n isFlushingWork = !0;\n do {\n var didPerformSomeWork = !1;\n for (var root$170 = firstScheduledRoot; null !== root$170; ) {\n if (!onlyLegacy)\n if (0 !== syncTransitionLanes) {\n var pendingLanes = root$170.pendingLanes;\n if (0 === pendingLanes) var JSCompiler_inline_result = 0;\n else {\n var suspendedLanes = root$170.suspendedLanes,\n pingedLanes = root$170.pingedLanes;\n JSCompiler_inline_result =\n (1 << (31 - clz32(42 | syncTransitionLanes) + 1)) - 1;\n JSCompiler_inline_result &=\n pendingLanes & ~(suspendedLanes & ~pingedLanes);\n JSCompiler_inline_result =\n JSCompiler_inline_result & 201326741\n ? (JSCompiler_inline_result & 201326741) | 1\n : JSCompiler_inline_result\n ? JSCompiler_inline_result | 2\n : 0;\n }\n 0 !== JSCompiler_inline_result &&\n ((didPerformSomeWork = !0),\n performSyncWorkOnRoot(root$170, JSCompiler_inline_result));\n } else\n (JSCompiler_inline_result = workInProgressRootRenderLanes),\n (JSCompiler_inline_result = getNextLanes(\n root$170,\n root$170 === workInProgressRoot ? JSCompiler_inline_result : 0,\n null !== root$170.cancelPendingCommit ||\n -1 !== root$170.timeoutHandle\n )),\n 0 === (JSCompiler_inline_result & 3) ||\n checkIfRootIsPrerendering(root$170, JSCompiler_inline_result) ||\n ((didPerformSomeWork = !0),\n performSyncWorkOnRoot(root$170, JSCompiler_inline_result));\n root$170 = root$170.next;\n }\n } while (didPerformSomeWork);\n isFlushingWork = !1;\n }\n}\nfunction processRootScheduleInImmediateTask() {\n processRootScheduleInMicrotask();\n}\nfunction processRootScheduleInMicrotask() {\n mightHavePendingSyncWork = didScheduleMicrotask = !1;\n var syncTransitionLanes = 0;\n 0 !== currentEventTransitionLane &&\n shouldAttemptEagerTransition() &&\n (syncTransitionLanes = currentEventTransitionLane);\n for (\n var currentTime = now(), prev = null, root = firstScheduledRoot;\n null !== root;\n\n ) {\n var next = root.next,\n nextLanes = scheduleTaskForRootDuringMicrotask(root, currentTime);\n if (0 === nextLanes)\n (root.next = null),\n null === prev ? (firstScheduledRoot = next) : (prev.next = next),\n null === next && (lastScheduledRoot = prev);\n else if (\n ((prev = root), 0 !== syncTransitionLanes || 0 !== (nextLanes & 3))\n )\n mightHavePendingSyncWork = !0;\n root = next;\n }\n (0 !== pendingEffectsStatus && 5 !== pendingEffectsStatus) ||\n flushSyncWorkAcrossRoots_impl(syncTransitionLanes, !1);\n 0 !== currentEventTransitionLane && (currentEventTransitionLane = 0);\n}\nfunction scheduleTaskForRootDuringMicrotask(root, currentTime) {\n for (\n var suspendedLanes = root.suspendedLanes,\n pingedLanes = root.pingedLanes,\n expirationTimes = root.expirationTimes,\n lanes = root.pendingLanes & -62914561;\n 0 < lanes;\n\n ) {\n var index$5 = 31 - clz32(lanes),\n lane = 1 << index$5,\n expirationTime = expirationTimes[index$5];\n if (-1 === expirationTime) {\n if (0 === (lane & suspendedLanes) || 0 !== (lane & pingedLanes))\n expirationTimes[index$5] = computeExpirationTime(lane, currentTime);\n } else expirationTime <= currentTime && (root.expiredLanes |= lane);\n lanes &= ~lane;\n }\n currentTime = workInProgressRoot;\n suspendedLanes = workInProgressRootRenderLanes;\n suspendedLanes = getNextLanes(\n root,\n root === currentTime ? suspendedLanes : 0,\n null !== root.cancelPendingCommit || -1 !== root.timeoutHandle\n );\n pingedLanes = root.callbackNode;\n if (\n 0 === suspendedLanes ||\n (root === currentTime &&\n (2 === workInProgressSuspendedReason ||\n 9 === workInProgressSuspendedReason)) ||\n null !== root.cancelPendingCommit\n )\n return (\n null !== pingedLanes &&\n null !== pingedLanes &&\n cancelCallback$1(pingedLanes),\n (root.callbackNode = null),\n (root.callbackPriority = 0)\n );\n if (\n 0 === (suspendedLanes & 3) ||\n checkIfRootIsPrerendering(root, suspendedLanes)\n ) {\n currentTime = suspendedLanes & -suspendedLanes;\n if (currentTime === root.callbackPriority) return currentTime;\n null !== pingedLanes && cancelCallback$1(pingedLanes);\n switch (lanesToEventPriority(suspendedLanes)) {\n case 2:\n case 8:\n suspendedLanes = UserBlockingPriority;\n break;\n case 32:\n suspendedLanes = NormalPriority$1;\n break;\n case 268435456:\n suspendedLanes = IdlePriority;\n break;\n default:\n suspendedLanes = NormalPriority$1;\n }\n pingedLanes = performWorkOnRootViaSchedulerTask.bind(null, root);\n suspendedLanes = scheduleCallback$3(suspendedLanes, pingedLanes);\n root.callbackPriority = currentTime;\n root.callbackNode = suspendedLanes;\n return currentTime;\n }\n null !== pingedLanes && null !== pingedLanes && cancelCallback$1(pingedLanes);\n root.callbackPriority = 2;\n root.callbackNode = null;\n return 2;\n}\nfunction performWorkOnRootViaSchedulerTask(root, didTimeout) {\n if (0 !== pendingEffectsStatus && 5 !== pendingEffectsStatus)\n return (root.callbackNode = null), (root.callbackPriority = 0), null;\n var originalCallbackNode = root.callbackNode;\n if (flushPendingEffects() && root.callbackNode !== originalCallbackNode)\n return null;\n var workInProgressRootRenderLanes$jscomp$0 = workInProgressRootRenderLanes;\n workInProgressRootRenderLanes$jscomp$0 = getNextLanes(\n root,\n root === workInProgressRoot ? workInProgressRootRenderLanes$jscomp$0 : 0,\n null !== root.cancelPendingCommit || -1 !== root.timeoutHandle\n );\n if (0 === workInProgressRootRenderLanes$jscomp$0) return null;\n performWorkOnRoot(root, workInProgressRootRenderLanes$jscomp$0, didTimeout);\n scheduleTaskForRootDuringMicrotask(root, now());\n return null != root.callbackNode && root.callbackNode === originalCallbackNode\n ? performWorkOnRootViaSchedulerTask.bind(null, root)\n : null;\n}\nfunction performSyncWorkOnRoot(root, lanes) {\n if (flushPendingEffects()) return null;\n performWorkOnRoot(root, lanes, !0);\n}\nfunction scheduleImmediateRootScheduleTask() {\n scheduleMicrotask(function () {\n 0 !== (executionContext & 6)\n ? scheduleCallback$3(\n ImmediatePriority,\n processRootScheduleInImmediateTask\n )\n : processRootScheduleInMicrotask();\n });\n}\nfunction requestTransitionLane() {\n if (0 === currentEventTransitionLane) {\n var actionScopeLane = currentEntangledLane;\n 0 === actionScopeLane &&\n ((actionScopeLane = nextTransitionUpdateLane),\n (nextTransitionUpdateLane <<= 1),\n 0 === (nextTransitionUpdateLane & 261888) &&\n (nextTransitionUpdateLane = 256));\n currentEventTransitionLane = actionScopeLane;\n }\n return currentEventTransitionLane;\n}\nfunction coerceFormActionProp(actionProp) {\n return null == actionProp ||\n \"symbol\" === typeof actionProp ||\n \"boolean\" === typeof actionProp\n ? null\n : \"function\" === typeof actionProp\n ? actionProp\n : sanitizeURL(\"\" + actionProp);\n}\nfunction createFormDataWithSubmitter(form, submitter) {\n var temp = submitter.ownerDocument.createElement(\"input\");\n temp.name = submitter.name;\n temp.value = submitter.value;\n form.id && temp.setAttribute(\"form\", form.id);\n submitter.parentNode.insertBefore(temp, submitter);\n form = new FormData(form);\n temp.parentNode.removeChild(temp);\n return form;\n}\nfunction extractEvents$1(\n dispatchQueue,\n domEventName,\n maybeTargetInst,\n nativeEvent,\n nativeEventTarget\n) {\n if (\n \"submit\" === domEventName &&\n maybeTargetInst &&\n maybeTargetInst.stateNode === nativeEventTarget\n ) {\n var action = coerceFormActionProp(\n (nativeEventTarget[internalPropsKey] || null).action\n ),\n submitter = nativeEvent.submitter;\n submitter &&\n ((domEventName = (domEventName = submitter[internalPropsKey] || null)\n ? coerceFormActionProp(domEventName.formAction)\n : submitter.getAttribute(\"formAction\")),\n null !== domEventName && ((action = domEventName), (submitter = null)));\n var event = new SyntheticEvent(\n \"action\",\n \"action\",\n null,\n nativeEvent,\n nativeEventTarget\n );\n dispatchQueue.push({\n event: event,\n listeners: [\n {\n instance: null,\n listener: function () {\n if (nativeEvent.defaultPrevented) {\n if (0 !== currentEventTransitionLane) {\n var formData = submitter\n ? createFormDataWithSubmitter(nativeEventTarget, submitter)\n : new FormData(nativeEventTarget);\n startHostTransition(\n maybeTargetInst,\n {\n pending: !0,\n data: formData,\n method: nativeEventTarget.method,\n action: action\n },\n null,\n formData\n );\n }\n } else\n \"function\" === typeof action &&\n (event.preventDefault(),\n (formData = submitter\n ? createFormDataWithSubmitter(nativeEventTarget, submitter)\n : new FormData(nativeEventTarget)),\n startHostTransition(\n maybeTargetInst,\n {\n pending: !0,\n data: formData,\n method: nativeEventTarget.method,\n action: action\n },\n action,\n formData\n ));\n },\n currentTarget: nativeEventTarget\n }\n ]\n });\n }\n}\nfor (\n var i$jscomp$inline_1577 = 0;\n i$jscomp$inline_1577 < simpleEventPluginEvents.length;\n i$jscomp$inline_1577++\n) {\n var eventName$jscomp$inline_1578 =\n simpleEventPluginEvents[i$jscomp$inline_1577],\n domEventName$jscomp$inline_1579 =\n eventName$jscomp$inline_1578.toLowerCase(),\n capitalizedEvent$jscomp$inline_1580 =\n eventName$jscomp$inline_1578[0].toUpperCase() +\n eventName$jscomp$inline_1578.slice(1);\n registerSimpleEvent(\n domEventName$jscomp$inline_1579,\n \"on\" + capitalizedEvent$jscomp$inline_1580\n );\n}\nregisterSimpleEvent(ANIMATION_END, \"onAnimationEnd\");\nregisterSimpleEvent(ANIMATION_ITERATION, \"onAnimationIteration\");\nregisterSimpleEvent(ANIMATION_START, \"onAnimationStart\");\nregisterSimpleEvent(\"dblclick\", \"onDoubleClick\");\nregisterSimpleEvent(\"focusin\", \"onFocus\");\nregisterSimpleEvent(\"focusout\", \"onBlur\");\nregisterSimpleEvent(TRANSITION_RUN, \"onTransitionRun\");\nregisterSimpleEvent(TRANSITION_START, \"onTransitionStart\");\nregisterSimpleEvent(TRANSITION_CANCEL, \"onTransitionCancel\");\nregisterSimpleEvent(TRANSITION_END, \"onTransitionEnd\");\nregisterDirectEvent(\"onMouseEnter\", [\"mouseout\", \"mouseover\"]);\nregisterDirectEvent(\"onMouseLeave\", [\"mouseout\", \"mouseover\"]);\nregisterDirectEvent(\"onPointerEnter\", [\"pointerout\", \"pointerover\"]);\nregisterDirectEvent(\"onPointerLeave\", [\"pointerout\", \"pointerover\"]);\nregisterTwoPhaseEvent(\n \"onChange\",\n \"change click focusin focusout input keydown keyup selectionchange\".split(\" \")\n);\nregisterTwoPhaseEvent(\n \"onSelect\",\n \"focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange\".split(\n \" \"\n )\n);\nregisterTwoPhaseEvent(\"onBeforeInput\", [\n \"compositionend\",\n \"keypress\",\n \"textInput\",\n \"paste\"\n]);\nregisterTwoPhaseEvent(\n \"onCompositionEnd\",\n \"compositionend focusout keydown keypress keyup mousedown\".split(\" \")\n);\nregisterTwoPhaseEvent(\n \"onCompositionStart\",\n \"compositionstart focusout keydown keypress keyup mousedown\".split(\" \")\n);\nregisterTwoPhaseEvent(\n \"onCompositionUpdate\",\n \"compositionupdate focusout keydown keypress keyup mousedown\".split(\" \")\n);\nvar mediaEventTypes =\n \"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting\".split(\n \" \"\n ),\n nonDelegatedEvents = new Set(\n \"beforetoggle cancel close invalid load scroll scrollend toggle\"\n .split(\" \")\n .concat(mediaEventTypes)\n );\nfunction processDispatchQueue(dispatchQueue, eventSystemFlags) {\n eventSystemFlags = 0 !== (eventSystemFlags & 4);\n for (var i = 0; i < dispatchQueue.length; i++) {\n var _dispatchQueue$i = dispatchQueue[i],\n event = _dispatchQueue$i.event;\n _dispatchQueue$i = _dispatchQueue$i.listeners;\n a: {\n var previousInstance = void 0;\n if (eventSystemFlags)\n for (\n var i$jscomp$0 = _dispatchQueue$i.length - 1;\n 0 <= i$jscomp$0;\n i$jscomp$0--\n ) {\n var _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0],\n instance = _dispatchListeners$i.instance,\n currentTarget = _dispatchListeners$i.currentTarget;\n _dispatchListeners$i = _dispatchListeners$i.listener;\n if (instance !== previousInstance && event.isPropagationStopped())\n break a;\n previousInstance = _dispatchListeners$i;\n event.currentTarget = currentTarget;\n try {\n previousInstance(event);\n } catch (error) {\n reportGlobalError(error);\n }\n event.currentTarget = null;\n previousInstance = instance;\n }\n else\n for (\n i$jscomp$0 = 0;\n i$jscomp$0 < _dispatchQueue$i.length;\n i$jscomp$0++\n ) {\n _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0];\n instance = _dispatchListeners$i.instance;\n currentTarget = _dispatchListeners$i.currentTarget;\n _dispatchListeners$i = _dispatchListeners$i.listener;\n if (instance !== previousInstance && event.isPropagationStopped())\n break a;\n previousInstance = _dispatchListeners$i;\n event.currentTarget = currentTarget;\n try {\n previousInstance(event);\n } catch (error) {\n reportGlobalError(error);\n }\n event.currentTarget = null;\n previousInstance = instance;\n }\n }\n }\n}\nfunction listenToNonDelegatedEvent(domEventName, targetElement) {\n var JSCompiler_inline_result = targetElement[internalEventHandlersKey];\n void 0 === JSCompiler_inline_result &&\n (JSCompiler_inline_result = targetElement[internalEventHandlersKey] =\n new Set());\n var listenerSetKey = domEventName + \"__bubble\";\n JSCompiler_inline_result.has(listenerSetKey) ||\n (addTrappedEventListener(targetElement, domEventName, 2, !1),\n JSCompiler_inline_result.add(listenerSetKey));\n}\nfunction listenToNativeEvent(domEventName, isCapturePhaseListener, target) {\n var eventSystemFlags = 0;\n isCapturePhaseListener && (eventSystemFlags |= 4);\n addTrappedEventListener(\n target,\n domEventName,\n eventSystemFlags,\n isCapturePhaseListener\n );\n}\nvar listeningMarker = \"_reactListening\" + Math.random().toString(36).slice(2);\nfunction listenToAllSupportedEvents(rootContainerElement) {\n if (!rootContainerElement[listeningMarker]) {\n rootContainerElement[listeningMarker] = !0;\n allNativeEvents.forEach(function (domEventName) {\n \"selectionchange\" !== domEventName &&\n (nonDelegatedEvents.has(domEventName) ||\n listenToNativeEvent(domEventName, !1, rootContainerElement),\n listenToNativeEvent(domEventName, !0, rootContainerElement));\n });\n var ownerDocument =\n 9 === rootContainerElement.nodeType\n ? rootContainerElement\n : rootContainerElement.ownerDocument;\n null === ownerDocument ||\n ownerDocument[listeningMarker] ||\n ((ownerDocument[listeningMarker] = !0),\n listenToNativeEvent(\"selectionchange\", !1, ownerDocument));\n }\n}\nfunction addTrappedEventListener(\n targetContainer,\n domEventName,\n eventSystemFlags,\n isCapturePhaseListener\n) {\n switch (getEventPriority(domEventName)) {\n case 2:\n var listenerWrapper = dispatchDiscreteEvent;\n break;\n case 8:\n listenerWrapper = dispatchContinuousEvent;\n break;\n default:\n listenerWrapper = dispatchEvent;\n }\n eventSystemFlags = listenerWrapper.bind(\n null,\n domEventName,\n eventSystemFlags,\n targetContainer\n );\n listenerWrapper = void 0;\n !passiveBrowserEventsSupported ||\n (\"touchstart\" !== domEventName &&\n \"touchmove\" !== domEventName &&\n \"wheel\" !== domEventName) ||\n (listenerWrapper = !0);\n isCapturePhaseListener\n ? void 0 !== listenerWrapper\n ? targetContainer.addEventListener(domEventName, eventSystemFlags, {\n capture: !0,\n passive: listenerWrapper\n })\n : targetContainer.addEventListener(domEventName, eventSystemFlags, !0)\n : void 0 !== listenerWrapper\n ? targetContainer.addEventListener(domEventName, eventSystemFlags, {\n passive: listenerWrapper\n })\n : targetContainer.addEventListener(domEventName, eventSystemFlags, !1);\n}\nfunction dispatchEventForPluginEventSystem(\n domEventName,\n eventSystemFlags,\n nativeEvent,\n targetInst$jscomp$0,\n targetContainer\n) {\n var ancestorInst = targetInst$jscomp$0;\n if (\n 0 === (eventSystemFlags & 1) &&\n 0 === (eventSystemFlags & 2) &&\n null !== targetInst$jscomp$0\n )\n a: for (;;) {\n if (null === targetInst$jscomp$0) return;\n var nodeTag = targetInst$jscomp$0.tag;\n if (3 === nodeTag || 4 === nodeTag) {\n var container = targetInst$jscomp$0.stateNode.containerInfo;\n if (container === targetContainer) break;\n if (4 === nodeTag)\n for (nodeTag = targetInst$jscomp$0.return; null !== nodeTag; ) {\n var grandTag = nodeTag.tag;\n if (\n (3 === grandTag || 4 === grandTag) &&\n nodeTag.stateNode.containerInfo === targetContainer\n )\n return;\n nodeTag = nodeTag.return;\n }\n for (; null !== container; ) {\n nodeTag = getClosestInstanceFromNode(container);\n if (null === nodeTag) return;\n grandTag = nodeTag.tag;\n if (\n 5 === grandTag ||\n 6 === grandTag ||\n 26 === grandTag ||\n 27 === grandTag\n ) {\n targetInst$jscomp$0 = ancestorInst = nodeTag;\n continue a;\n }\n container = container.parentNode;\n }\n }\n targetInst$jscomp$0 = targetInst$jscomp$0.return;\n }\n batchedUpdates$1(function () {\n var targetInst = ancestorInst,\n nativeEventTarget = getEventTarget(nativeEvent),\n dispatchQueue = [];\n a: {\n var reactName = topLevelEventsToReactNames.get(domEventName);\n if (void 0 !== reactName) {\n var SyntheticEventCtor = SyntheticEvent,\n reactEventType = domEventName;\n switch (domEventName) {\n case \"keypress\":\n if (0 === getEventCharCode(nativeEvent)) break a;\n case \"keydown\":\n case \"keyup\":\n SyntheticEventCtor = SyntheticKeyboardEvent;\n break;\n case \"focusin\":\n reactEventType = \"focus\";\n SyntheticEventCtor = SyntheticFocusEvent;\n break;\n case \"focusout\":\n reactEventType = \"blur\";\n SyntheticEventCtor = SyntheticFocusEvent;\n break;\n case \"beforeblur\":\n case \"afterblur\":\n SyntheticEventCtor = SyntheticFocusEvent;\n break;\n case \"click\":\n if (2 === nativeEvent.button) break a;\n case \"auxclick\":\n case \"dblclick\":\n case \"mousedown\":\n case \"mousemove\":\n case \"mouseup\":\n case \"mouseout\":\n case \"mouseover\":\n case \"contextmenu\":\n SyntheticEventCtor = SyntheticMouseEvent;\n break;\n case \"drag\":\n case \"dragend\":\n case \"dragenter\":\n case \"dragexit\":\n case \"dragleave\":\n case \"dragover\":\n case \"dragstart\":\n case \"drop\":\n SyntheticEventCtor = SyntheticDragEvent;\n break;\n case \"touchcancel\":\n case \"touchend\":\n case \"touchmove\":\n case \"touchstart\":\n SyntheticEventCtor = SyntheticTouchEvent;\n break;\n case ANIMATION_END:\n case ANIMATION_ITERATION:\n case ANIMATION_START:\n SyntheticEventCtor = SyntheticAnimationEvent;\n break;\n case TRANSITION_END:\n SyntheticEventCtor = SyntheticTransitionEvent;\n break;\n case \"scroll\":\n case \"scrollend\":\n SyntheticEventCtor = SyntheticUIEvent;\n break;\n case \"wheel\":\n SyntheticEventCtor = SyntheticWheelEvent;\n break;\n case \"copy\":\n case \"cut\":\n case \"paste\":\n SyntheticEventCtor = SyntheticClipboardEvent;\n break;\n case \"gotpointercapture\":\n case \"lostpointercapture\":\n case \"pointercancel\":\n case \"pointerdown\":\n case \"pointermove\":\n case \"pointerout\":\n case \"pointerover\":\n case \"pointerup\":\n SyntheticEventCtor = SyntheticPointerEvent;\n break;\n case \"toggle\":\n case \"beforetoggle\":\n SyntheticEventCtor = SyntheticToggleEvent;\n }\n var inCapturePhase = 0 !== (eventSystemFlags & 4),\n accumulateTargetOnly =\n !inCapturePhase &&\n (\"scroll\" === domEventName || \"scrollend\" === domEventName),\n reactEventName = inCapturePhase\n ? null !== reactName\n ? reactName + \"Capture\"\n : null\n : reactName;\n inCapturePhase = [];\n for (\n var instance = targetInst, lastHostComponent;\n null !== instance;\n\n ) {\n var _instance = instance;\n lastHostComponent = _instance.stateNode;\n _instance = _instance.tag;\n (5 !== _instance && 26 !== _instance && 27 !== _instance) ||\n null === lastHostComponent ||\n null === reactEventName ||\n ((_instance = getListener(instance, reactEventName)),\n null != _instance &&\n inCapturePhase.push(\n createDispatchListener(instance, _instance, lastHostComponent)\n ));\n if (accumulateTargetOnly) break;\n instance = instance.return;\n }\n 0 < inCapturePhase.length &&\n ((reactName = new SyntheticEventCtor(\n reactName,\n reactEventType,\n null,\n nativeEvent,\n nativeEventTarget\n )),\n dispatchQueue.push({ event: reactName, listeners: inCapturePhase }));\n }\n }\n if (0 === (eventSystemFlags & 7)) {\n a: {\n reactName =\n \"mouseover\" === domEventName || \"pointerover\" === domEventName;\n SyntheticEventCtor =\n \"mouseout\" === domEventName || \"pointerout\" === domEventName;\n if (\n reactName &&\n nativeEvent !== currentReplayingEvent &&\n (reactEventType =\n nativeEvent.relatedTarget || nativeEvent.fromElement) &&\n (getClosestInstanceFromNode(reactEventType) ||\n reactEventType[internalContainerInstanceKey])\n )\n break a;\n if (SyntheticEventCtor || reactName) {\n reactName =\n nativeEventTarget.window === nativeEventTarget\n ? nativeEventTarget\n : (reactName = nativeEventTarget.ownerDocument)\n ? reactName.defaultView || reactName.parentWindow\n : window;\n if (SyntheticEventCtor) {\n if (\n ((reactEventType =\n nativeEvent.relatedTarget || nativeEvent.toElement),\n (SyntheticEventCtor = targetInst),\n (reactEventType = reactEventType\n ? getClosestInstanceFromNode(reactEventType)\n : null),\n null !== reactEventType &&\n ((accumulateTargetOnly =\n getNearestMountedFiber(reactEventType)),\n (inCapturePhase = reactEventType.tag),\n reactEventType !== accumulateTargetOnly ||\n (5 !== inCapturePhase &&\n 27 !== inCapturePhase &&\n 6 !== inCapturePhase)))\n )\n reactEventType = null;\n } else (SyntheticEventCtor = null), (reactEventType = targetInst);\n if (SyntheticEventCtor !== reactEventType) {\n inCapturePhase = SyntheticMouseEvent;\n _instance = \"onMouseLeave\";\n reactEventName = \"onMouseEnter\";\n instance = \"mouse\";\n if (\"pointerout\" === domEventName || \"pointerover\" === domEventName)\n (inCapturePhase = SyntheticPointerEvent),\n (_instance = \"onPointerLeave\"),\n (reactEventName = \"onPointerEnter\"),\n (instance = \"pointer\");\n accumulateTargetOnly =\n null == SyntheticEventCtor\n ? reactName\n : getNodeFromInstance(SyntheticEventCtor);\n lastHostComponent =\n null == reactEventType\n ? reactName\n : getNodeFromInstance(reactEventType);\n reactName = new inCapturePhase(\n _instance,\n instance + \"leave\",\n SyntheticEventCtor,\n nativeEvent,\n nativeEventTarget\n );\n reactName.target = accumulateTargetOnly;\n reactName.relatedTarget = lastHostComponent;\n _instance = null;\n getClosestInstanceFromNode(nativeEventTarget) === targetInst &&\n ((inCapturePhase = new inCapturePhase(\n reactEventName,\n instance + \"enter\",\n reactEventType,\n nativeEvent,\n nativeEventTarget\n )),\n (inCapturePhase.target = lastHostComponent),\n (inCapturePhase.relatedTarget = accumulateTargetOnly),\n (_instance = inCapturePhase));\n accumulateTargetOnly = _instance;\n if (SyntheticEventCtor && reactEventType)\n b: {\n inCapturePhase = getParent;\n reactEventName = SyntheticEventCtor;\n instance = reactEventType;\n lastHostComponent = 0;\n for (\n _instance = reactEventName;\n _instance;\n _instance = inCapturePhase(_instance)\n )\n lastHostComponent++;\n _instance = 0;\n for (var tempB = instance; tempB; tempB = inCapturePhase(tempB))\n _instance++;\n for (; 0 < lastHostComponent - _instance; )\n (reactEventName = inCapturePhase(reactEventName)),\n lastHostComponent--;\n for (; 0 < _instance - lastHostComponent; )\n (instance = inCapturePhase(instance)), _instance--;\n for (; lastHostComponent--; ) {\n if (\n reactEventName === instance ||\n (null !== instance && reactEventName === instance.alternate)\n ) {\n inCapturePhase = reactEventName;\n break b;\n }\n reactEventName = inCapturePhase(reactEventName);\n instance = inCapturePhase(instance);\n }\n inCapturePhase = null;\n }\n else inCapturePhase = null;\n null !== SyntheticEventCtor &&\n accumulateEnterLeaveListenersForEvent(\n dispatchQueue,\n reactName,\n SyntheticEventCtor,\n inCapturePhase,\n !1\n );\n null !== reactEventType &&\n null !== accumulateTargetOnly &&\n accumulateEnterLeaveListenersForEvent(\n dispatchQueue,\n accumulateTargetOnly,\n reactEventType,\n inCapturePhase,\n !0\n );\n }\n }\n }\n a: {\n reactName = targetInst ? getNodeFromInstance(targetInst) : window;\n SyntheticEventCtor =\n reactName.nodeName && reactName.nodeName.toLowerCase();\n if (\n \"select\" === SyntheticEventCtor ||\n (\"input\" === SyntheticEventCtor && \"file\" === reactName.type)\n )\n var getTargetInstFunc = getTargetInstForChangeEvent;\n else if (isTextInputElement(reactName))\n if (isInputEventSupported)\n getTargetInstFunc = getTargetInstForInputOrChangeEvent;\n else {\n getTargetInstFunc = getTargetInstForInputEventPolyfill;\n var handleEventFunc = handleEventsForInputEventPolyfill;\n }\n else\n (SyntheticEventCtor = reactName.nodeName),\n !SyntheticEventCtor ||\n \"input\" !== SyntheticEventCtor.toLowerCase() ||\n (\"checkbox\" !== reactName.type && \"radio\" !== reactName.type)\n ? targetInst &&\n isCustomElement(targetInst.elementType) &&\n (getTargetInstFunc = getTargetInstForChangeEvent)\n : (getTargetInstFunc = getTargetInstForClickEvent);\n if (\n getTargetInstFunc &&\n (getTargetInstFunc = getTargetInstFunc(domEventName, targetInst))\n ) {\n createAndAccumulateChangeEvent(\n dispatchQueue,\n getTargetInstFunc,\n nativeEvent,\n nativeEventTarget\n );\n break a;\n }\n handleEventFunc && handleEventFunc(domEventName, reactName, targetInst);\n \"focusout\" === domEventName &&\n targetInst &&\n \"number\" === reactName.type &&\n null != targetInst.memoizedProps.value &&\n setDefaultValue(reactName, \"number\", reactName.value);\n }\n handleEventFunc = targetInst ? getNodeFromInstance(targetInst) : window;\n switch (domEventName) {\n case \"focusin\":\n if (\n isTextInputElement(handleEventFunc) ||\n \"true\" === handleEventFunc.contentEditable\n )\n (activeElement = handleEventFunc),\n (activeElementInst = targetInst),\n (lastSelection = null);\n break;\n case \"focusout\":\n lastSelection = activeElementInst = activeElement = null;\n break;\n case \"mousedown\":\n mouseDown = !0;\n break;\n case \"contextmenu\":\n case \"mouseup\":\n case \"dragend\":\n mouseDown = !1;\n constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);\n break;\n case \"selectionchange\":\n if (skipSelectionChangeEvent) break;\n case \"keydown\":\n case \"keyup\":\n constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);\n }\n var fallbackData;\n if (canUseCompositionEvent)\n b: {\n switch (domEventName) {\n case \"compositionstart\":\n var eventType = \"onCompositionStart\";\n break b;\n case \"compositionend\":\n eventType = \"onCompositionEnd\";\n break b;\n case \"compositionupdate\":\n eventType = \"onCompositionUpdate\";\n break b;\n }\n eventType = void 0;\n }\n else\n isComposing\n ? isFallbackCompositionEnd(domEventName, nativeEvent) &&\n (eventType = \"onCompositionEnd\")\n : \"keydown\" === domEventName &&\n 229 === nativeEvent.keyCode &&\n (eventType = \"onCompositionStart\");\n eventType &&\n (useFallbackCompositionData &&\n \"ko\" !== nativeEvent.locale &&\n (isComposing || \"onCompositionStart\" !== eventType\n ? \"onCompositionEnd\" === eventType &&\n isComposing &&\n (fallbackData = getData())\n : ((root = nativeEventTarget),\n (startText = \"value\" in root ? root.value : root.textContent),\n (isComposing = !0))),\n (handleEventFunc = accumulateTwoPhaseListeners(targetInst, eventType)),\n 0 < handleEventFunc.length &&\n ((eventType = new SyntheticCompositionEvent(\n eventType,\n domEventName,\n null,\n nativeEvent,\n nativeEventTarget\n )),\n dispatchQueue.push({ event: eventType, listeners: handleEventFunc }),\n fallbackData\n ? (eventType.data = fallbackData)\n : ((fallbackData = getDataFromCustomEvent(nativeEvent)),\n null !== fallbackData && (eventType.data = fallbackData))));\n if (\n (fallbackData = canUseTextInputEvent\n ? getNativeBeforeInputChars(domEventName, nativeEvent)\n : getFallbackBeforeInputChars(domEventName, nativeEvent))\n )\n (eventType = accumulateTwoPhaseListeners(targetInst, \"onBeforeInput\")),\n 0 < eventType.length &&\n ((handleEventFunc = new SyntheticCompositionEvent(\n \"onBeforeInput\",\n \"beforeinput\",\n null,\n nativeEvent,\n nativeEventTarget\n )),\n dispatchQueue.push({\n event: handleEventFunc,\n listeners: eventType\n }),\n (handleEventFunc.data = fallbackData));\n extractEvents$1(\n dispatchQueue,\n domEventName,\n targetInst,\n nativeEvent,\n nativeEventTarget\n );\n }\n processDispatchQueue(dispatchQueue, eventSystemFlags);\n });\n}\nfunction createDispatchListener(instance, listener, currentTarget) {\n return {\n instance: instance,\n listener: listener,\n currentTarget: currentTarget\n };\n}\nfunction accumulateTwoPhaseListeners(targetFiber, reactName) {\n for (\n var captureName = reactName + \"Capture\", listeners = [];\n null !== targetFiber;\n\n ) {\n var _instance2 = targetFiber,\n stateNode = _instance2.stateNode;\n _instance2 = _instance2.tag;\n (5 !== _instance2 && 26 !== _instance2 && 27 !== _instance2) ||\n null === stateNode ||\n ((_instance2 = getListener(targetFiber, captureName)),\n null != _instance2 &&\n listeners.unshift(\n createDispatchListener(targetFiber, _instance2, stateNode)\n ),\n (_instance2 = getListener(targetFiber, reactName)),\n null != _instance2 &&\n listeners.push(\n createDispatchListener(targetFiber, _instance2, stateNode)\n ));\n if (3 === targetFiber.tag) return listeners;\n targetFiber = targetFiber.return;\n }\n return [];\n}\nfunction getParent(inst) {\n if (null === inst) return null;\n do inst = inst.return;\n while (inst && 5 !== inst.tag && 27 !== inst.tag);\n return inst ? inst : null;\n}\nfunction accumulateEnterLeaveListenersForEvent(\n dispatchQueue,\n event,\n target,\n common,\n inCapturePhase\n) {\n for (\n var registrationName = event._reactName, listeners = [];\n null !== target && target !== common;\n\n ) {\n var _instance3 = target,\n alternate = _instance3.alternate,\n stateNode = _instance3.stateNode;\n _instance3 = _instance3.tag;\n if (null !== alternate && alternate === common) break;\n (5 !== _instance3 && 26 !== _instance3 && 27 !== _instance3) ||\n null === stateNode ||\n ((alternate = stateNode),\n inCapturePhase\n ? ((stateNode = getListener(target, registrationName)),\n null != stateNode &&\n listeners.unshift(\n createDispatchListener(target, stateNode, alternate)\n ))\n : inCapturePhase ||\n ((stateNode = getListener(target, registrationName)),\n null != stateNode &&\n listeners.push(\n createDispatchListener(target, stateNode, alternate)\n )));\n target = target.return;\n }\n 0 !== listeners.length &&\n dispatchQueue.push({ event: event, listeners: listeners });\n}\nvar NORMALIZE_NEWLINES_REGEX = /\\r\\n?/g,\n NORMALIZE_NULL_AND_REPLACEMENT_REGEX = /\\u0000|\\uFFFD/g;\nfunction normalizeMarkupForTextOrAttribute(markup) {\n return (\"string\" === typeof markup ? markup : \"\" + markup)\n .replace(NORMALIZE_NEWLINES_REGEX, \"\\n\")\n .replace(NORMALIZE_NULL_AND_REPLACEMENT_REGEX, \"\");\n}\nfunction checkForUnmatchedText(serverText, clientText) {\n clientText = normalizeMarkupForTextOrAttribute(clientText);\n return normalizeMarkupForTextOrAttribute(serverText) === clientText ? !0 : !1;\n}\nfunction setProp(domElement, tag, key, value, props, prevValue) {\n switch (key) {\n case \"children\":\n \"string\" === typeof value\n ? \"body\" === tag ||\n (\"textarea\" === tag && \"\" === value) ||\n setTextContent(domElement, value)\n : (\"number\" === typeof value || \"bigint\" === typeof value) &&\n \"body\" !== tag &&\n setTextContent(domElement, \"\" + value);\n break;\n case \"className\":\n setValueForKnownAttribute(domElement, \"class\", value);\n break;\n case \"tabIndex\":\n setValueForKnownAttribute(domElement, \"tabindex\", value);\n break;\n case \"dir\":\n case \"role\":\n case \"viewBox\":\n case \"width\":\n case \"height\":\n setValueForKnownAttribute(domElement, key, value);\n break;\n case \"style\":\n setValueForStyles(domElement, value, prevValue);\n break;\n case \"data\":\n if (\"object\" !== tag) {\n setValueForKnownAttribute(domElement, \"data\", value);\n break;\n }\n case \"src\":\n case \"href\":\n if (\"\" === value && (\"a\" !== tag || \"href\" !== key)) {\n domElement.removeAttribute(key);\n break;\n }\n if (\n null == value ||\n \"function\" === typeof value ||\n \"symbol\" === typeof value ||\n \"boolean\" === typeof value\n ) {\n domElement.removeAttribute(key);\n break;\n }\n value = sanitizeURL(\"\" + value);\n domElement.setAttribute(key, value);\n break;\n case \"action\":\n case \"formAction\":\n if (\"function\" === typeof value) {\n domElement.setAttribute(\n key,\n \"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')\"\n );\n break;\n } else\n \"function\" === typeof prevValue &&\n (\"formAction\" === key\n ? (\"input\" !== tag &&\n setProp(domElement, tag, \"name\", props.name, props, null),\n setProp(\n domElement,\n tag,\n \"formEncType\",\n props.formEncType,\n props,\n null\n ),\n setProp(\n domElement,\n tag,\n \"formMethod\",\n props.formMethod,\n props,\n null\n ),\n setProp(\n domElement,\n tag,\n \"formTarget\",\n props.formTarget,\n props,\n null\n ))\n : (setProp(domElement, tag, \"encType\", props.encType, props, null),\n setProp(domElement, tag, \"method\", props.method, props, null),\n setProp(domElement, tag, \"target\", props.target, props, null)));\n if (\n null == value ||\n \"symbol\" === typeof value ||\n \"boolean\" === typeof value\n ) {\n domElement.removeAttribute(key);\n break;\n }\n value = sanitizeURL(\"\" + value);\n domElement.setAttribute(key, value);\n break;\n case \"onClick\":\n null != value && (domElement.onclick = noop$1);\n break;\n case \"onScroll\":\n null != value && listenToNonDelegatedEvent(\"scroll\", domElement);\n break;\n case \"onScrollEnd\":\n null != value && listenToNonDelegatedEvent(\"scrollend\", domElement);\n break;\n case \"dangerouslySetInnerHTML\":\n if (null != value) {\n if (\"object\" !== typeof value || !(\"__html\" in value))\n throw Error(formatProdErrorMessage(61));\n key = value.__html;\n if (null != key) {\n if (null != props.children) throw Error(formatProdErrorMessage(60));\n domElement.innerHTML = key;\n }\n }\n break;\n case \"multiple\":\n domElement.multiple =\n value && \"function\" !== typeof value && \"symbol\" !== typeof value;\n break;\n case \"muted\":\n domElement.muted =\n value && \"function\" !== typeof value && \"symbol\" !== typeof value;\n break;\n case \"suppressContentEditableWarning\":\n case \"suppressHydrationWarning\":\n case \"defaultValue\":\n case \"defaultChecked\":\n case \"innerHTML\":\n case \"ref\":\n break;\n case \"autoFocus\":\n break;\n case \"xlinkHref\":\n if (\n null == value ||\n \"function\" === typeof value ||\n \"boolean\" === typeof value ||\n \"symbol\" === typeof value\n ) {\n domElement.removeAttribute(\"xlink:href\");\n break;\n }\n key = sanitizeURL(\"\" + value);\n domElement.setAttributeNS(\n \"http://www.w3.org/1999/xlink\",\n \"xlink:href\",\n key\n );\n break;\n case \"contentEditable\":\n case \"spellCheck\":\n case \"draggable\":\n case \"value\":\n case \"autoReverse\":\n case \"externalResourcesRequired\":\n case \"focusable\":\n case \"preserveAlpha\":\n null != value && \"function\" !== typeof value && \"symbol\" !== typeof value\n ? domElement.setAttribute(key, \"\" + value)\n : domElement.removeAttribute(key);\n break;\n case \"inert\":\n case \"allowFullScreen\":\n case \"async\":\n case \"autoPlay\":\n case \"controls\":\n case \"default\":\n case \"defer\":\n case \"disabled\":\n case \"disablePictureInPicture\":\n case \"disableRemotePlayback\":\n case \"formNoValidate\":\n case \"hidden\":\n case \"loop\":\n case \"noModule\":\n case \"noValidate\":\n case \"open\":\n case \"playsInline\":\n case \"readOnly\":\n case \"required\":\n case \"reversed\":\n case \"scoped\":\n case \"seamless\":\n case \"itemScope\":\n value && \"function\" !== typeof value && \"symbol\" !== typeof value\n ? domElement.setAttribute(key, \"\")\n : domElement.removeAttribute(key);\n break;\n case \"capture\":\n case \"download\":\n !0 === value\n ? domElement.setAttribute(key, \"\")\n : !1 !== value &&\n null != value &&\n \"function\" !== typeof value &&\n \"symbol\" !== typeof value\n ? domElement.setAttribute(key, value)\n : domElement.removeAttribute(key);\n break;\n case \"cols\":\n case \"rows\":\n case \"size\":\n case \"span\":\n null != value &&\n \"function\" !== typeof value &&\n \"symbol\" !== typeof value &&\n !isNaN(value) &&\n 1 <= value\n ? domElement.setAttribute(key, value)\n : domElement.removeAttribute(key);\n break;\n case \"rowSpan\":\n case \"start\":\n null == value ||\n \"function\" === typeof value ||\n \"symbol\" === typeof value ||\n isNaN(value)\n ? domElement.removeAttribute(key)\n : domElement.setAttribute(key, value);\n break;\n case \"popover\":\n listenToNonDelegatedEvent(\"beforetoggle\", domElement);\n listenToNonDelegatedEvent(\"toggle\", domElement);\n setValueForAttribute(domElement, \"popover\", value);\n break;\n case \"xlinkActuate\":\n setValueForNamespacedAttribute(\n domElement,\n \"http://www.w3.org/1999/xlink\",\n \"xlink:actuate\",\n value\n );\n break;\n case \"xlinkArcrole\":\n setValueForNamespacedAttribute(\n domElement,\n \"http://www.w3.org/1999/xlink\",\n \"xlink:arcrole\",\n value\n );\n break;\n case \"xlinkRole\":\n setValueForNamespacedAttribute(\n domElement,\n \"http://www.w3.org/1999/xlink\",\n \"xlink:role\",\n value\n );\n break;\n case \"xlinkShow\":\n setValueForNamespacedAttribute(\n domElement,\n \"http://www.w3.org/1999/xlink\",\n \"xlink:show\",\n value\n );\n break;\n case \"xlinkTitle\":\n setValueForNamespacedAttribute(\n domElement,\n \"http://www.w3.org/1999/xlink\",\n \"xlink:title\",\n value\n );\n break;\n case \"xlinkType\":\n setValueForNamespacedAttribute(\n domElement,\n \"http://www.w3.org/1999/xlink\",\n \"xlink:type\",\n value\n );\n break;\n case \"xmlBase\":\n setValueForNamespacedAttribute(\n domElement,\n \"http://www.w3.org/XML/1998/namespace\",\n \"xml:base\",\n value\n );\n break;\n case \"xmlLang\":\n setValueForNamespacedAttribute(\n domElement,\n \"http://www.w3.org/XML/1998/namespace\",\n \"xml:lang\",\n value\n );\n break;\n case \"xmlSpace\":\n setValueForNamespacedAttribute(\n domElement,\n \"http://www.w3.org/XML/1998/namespace\",\n \"xml:space\",\n value\n );\n break;\n case \"is\":\n setValueForAttribute(domElement, \"is\", value);\n break;\n case \"innerText\":\n case \"textContent\":\n break;\n default:\n if (\n !(2 < key.length) ||\n (\"o\" !== key[0] && \"O\" !== key[0]) ||\n (\"n\" !== key[1] && \"N\" !== key[1])\n )\n (key = aliases.get(key) || key),\n setValueForAttribute(domElement, key, value);\n }\n}\nfunction setPropOnCustomElement(domElement, tag, key, value, props, prevValue) {\n switch (key) {\n case \"style\":\n setValueForStyles(domElement, value, prevValue);\n break;\n case \"dangerouslySetInnerHTML\":\n if (null != value) {\n if (\"object\" !== typeof value || !(\"__html\" in value))\n throw Error(formatProdErrorMessage(61));\n key = value.__html;\n if (null != key) {\n if (null != props.children) throw Error(formatProdErrorMessage(60));\n domElement.innerHTML = key;\n }\n }\n break;\n case \"children\":\n \"string\" === typeof value\n ? setTextContent(domElement, value)\n : (\"number\" === typeof value || \"bigint\" === typeof value) &&\n setTextContent(domElement, \"\" + value);\n break;\n case \"onScroll\":\n null != value && listenToNonDelegatedEvent(\"scroll\", domElement);\n break;\n case \"onScrollEnd\":\n null != value && listenToNonDelegatedEvent(\"scrollend\", domElement);\n break;\n case \"onClick\":\n null != value && (domElement.onclick = noop$1);\n break;\n case \"suppressContentEditableWarning\":\n case \"suppressHydrationWarning\":\n case \"innerHTML\":\n case \"ref\":\n break;\n case \"innerText\":\n case \"textContent\":\n break;\n default:\n if (!registrationNameDependencies.hasOwnProperty(key))\n a: {\n if (\n \"o\" === key[0] &&\n \"n\" === key[1] &&\n ((props = key.endsWith(\"Capture\")),\n (tag = key.slice(2, props ? key.length - 7 : void 0)),\n (prevValue = domElement[internalPropsKey] || null),\n (prevValue = null != prevValue ? prevValue[key] : null),\n \"function\" === typeof prevValue &&\n domElement.removeEventListener(tag, prevValue, props),\n \"function\" === typeof value)\n ) {\n \"function\" !== typeof prevValue &&\n null !== prevValue &&\n (key in domElement\n ? (domElement[key] = null)\n : domElement.hasAttribute(key) &&\n domElement.removeAttribute(key));\n domElement.addEventListener(tag, value, props);\n break a;\n }\n key in domElement\n ? (domElement[key] = value)\n : !0 === value\n ? domElement.setAttribute(key, \"\")\n : setValueForAttribute(domElement, key, value);\n }\n }\n}\nfunction setInitialProperties(domElement, tag, props) {\n switch (tag) {\n case \"div\":\n case \"span\":\n case \"svg\":\n case \"path\":\n case \"a\":\n case \"g\":\n case \"p\":\n case \"li\":\n break;\n case \"img\":\n listenToNonDelegatedEvent(\"error\", domElement);\n listenToNonDelegatedEvent(\"load\", domElement);\n var hasSrc = !1,\n hasSrcSet = !1,\n propKey;\n for (propKey in props)\n if (props.hasOwnProperty(propKey)) {\n var propValue = props[propKey];\n if (null != propValue)\n switch (propKey) {\n case \"src\":\n hasSrc = !0;\n break;\n case \"srcSet\":\n hasSrcSet = !0;\n break;\n case \"children\":\n case \"dangerouslySetInnerHTML\":\n throw Error(formatProdErrorMessage(137, tag));\n default:\n setProp(domElement, tag, propKey, propValue, props, null);\n }\n }\n hasSrcSet &&\n setProp(domElement, tag, \"srcSet\", props.srcSet, props, null);\n hasSrc && setProp(domElement, tag, \"src\", props.src, props, null);\n return;\n case \"input\":\n listenToNonDelegatedEvent(\"invalid\", domElement);\n var defaultValue = (propKey = propValue = hasSrcSet = null),\n checked = null,\n defaultChecked = null;\n for (hasSrc in props)\n if (props.hasOwnProperty(hasSrc)) {\n var propValue$184 = props[hasSrc];\n if (null != propValue$184)\n switch (hasSrc) {\n case \"name\":\n hasSrcSet = propValue$184;\n break;\n case \"type\":\n propValue = propValue$184;\n break;\n case \"checked\":\n checked = propValue$184;\n break;\n case \"defaultChecked\":\n defaultChecked = propValue$184;\n break;\n case \"value\":\n propKey = propValue$184;\n break;\n case \"defaultValue\":\n defaultValue = propValue$184;\n break;\n case \"children\":\n case \"dangerouslySetInnerHTML\":\n if (null != propValue$184)\n throw Error(formatProdErrorMessage(137, tag));\n break;\n default:\n setProp(domElement, tag, hasSrc, propValue$184, props, null);\n }\n }\n initInput(\n domElement,\n propKey,\n defaultValue,\n checked,\n defaultChecked,\n propValue,\n hasSrcSet,\n !1\n );\n return;\n case \"select\":\n listenToNonDelegatedEvent(\"invalid\", domElement);\n hasSrc = propValue = propKey = null;\n for (hasSrcSet in props)\n if (\n props.hasOwnProperty(hasSrcSet) &&\n ((defaultValue = props[hasSrcSet]), null != defaultValue)\n )\n switch (hasSrcSet) {\n case \"value\":\n propKey = defaultValue;\n break;\n case \"defaultValue\":\n propValue = defaultValue;\n break;\n case \"multiple\":\n hasSrc = defaultValue;\n default:\n setProp(domElement, tag, hasSrcSet, defaultValue, props, null);\n }\n tag = propKey;\n props = propValue;\n domElement.multiple = !!hasSrc;\n null != tag\n ? updateOptions(domElement, !!hasSrc, tag, !1)\n : null != props && updateOptions(domElement, !!hasSrc, props, !0);\n return;\n case \"textarea\":\n listenToNonDelegatedEvent(\"invalid\", domElement);\n propKey = hasSrcSet = hasSrc = null;\n for (propValue in props)\n if (\n props.hasOwnProperty(propValue) &&\n ((defaultValue = props[propValue]), null != defaultValue)\n )\n switch (propValue) {\n case \"value\":\n hasSrc = defaultValue;\n break;\n case \"defaultValue\":\n hasSrcSet = defaultValue;\n break;\n case \"children\":\n propKey = defaultValue;\n break;\n case \"dangerouslySetInnerHTML\":\n if (null != defaultValue) throw Error(formatProdErrorMessage(91));\n break;\n default:\n setProp(domElement, tag, propValue, defaultValue, props, null);\n }\n initTextarea(domElement, hasSrc, hasSrcSet, propKey);\n return;\n case \"option\":\n for (checked in props)\n if (\n props.hasOwnProperty(checked) &&\n ((hasSrc = props[checked]), null != hasSrc)\n )\n switch (checked) {\n case \"selected\":\n domElement.selected =\n hasSrc &&\n \"function\" !== typeof hasSrc &&\n \"symbol\" !== typeof hasSrc;\n break;\n default:\n setProp(domElement, tag, checked, hasSrc, props, null);\n }\n return;\n case \"dialog\":\n listenToNonDelegatedEvent(\"beforetoggle\", domElement);\n listenToNonDelegatedEvent(\"toggle\", domElement);\n listenToNonDelegatedEvent(\"cancel\", domElement);\n listenToNonDelegatedEvent(\"close\", domElement);\n break;\n case \"iframe\":\n case \"object\":\n listenToNonDelegatedEvent(\"load\", domElement);\n break;\n case \"video\":\n case \"audio\":\n for (hasSrc = 0; hasSrc < mediaEventTypes.length; hasSrc++)\n listenToNonDelegatedEvent(mediaEventTypes[hasSrc], domElement);\n break;\n case \"image\":\n listenToNonDelegatedEvent(\"error\", domElement);\n listenToNonDelegatedEvent(\"load\", domElement);\n break;\n case \"details\":\n listenToNonDelegatedEvent(\"toggle\", domElement);\n break;\n case \"embed\":\n case \"source\":\n case \"link\":\n listenToNonDelegatedEvent(\"error\", domElement),\n listenToNonDelegatedEvent(\"load\", domElement);\n case \"area\":\n case \"base\":\n case \"br\":\n case \"col\":\n case \"hr\":\n case \"keygen\":\n case \"meta\":\n case \"param\":\n case \"track\":\n case \"wbr\":\n case \"menuitem\":\n for (defaultChecked in props)\n if (\n props.hasOwnProperty(defaultChecked) &&\n ((hasSrc = props[defaultChecked]), null != hasSrc)\n )\n switch (defaultChecked) {\n case \"children\":\n case \"dangerouslySetInnerHTML\":\n throw Error(formatProdErrorMessage(137, tag));\n default:\n setProp(domElement, tag, defaultChecked, hasSrc, props, null);\n }\n return;\n default:\n if (isCustomElement(tag)) {\n for (propValue$184 in props)\n props.hasOwnProperty(propValue$184) &&\n ((hasSrc = props[propValue$184]),\n void 0 !== hasSrc &&\n setPropOnCustomElement(\n domElement,\n tag,\n propValue$184,\n hasSrc,\n props,\n void 0\n ));\n return;\n }\n }\n for (defaultValue in props)\n props.hasOwnProperty(defaultValue) &&\n ((hasSrc = props[defaultValue]),\n null != hasSrc &&\n setProp(domElement, tag, defaultValue, hasSrc, props, null));\n}\nfunction updateProperties(domElement, tag, lastProps, nextProps) {\n switch (tag) {\n case \"div\":\n case \"span\":\n case \"svg\":\n case \"path\":\n case \"a\":\n case \"g\":\n case \"p\":\n case \"li\":\n break;\n case \"input\":\n var name = null,\n type = null,\n value = null,\n defaultValue = null,\n lastDefaultValue = null,\n checked = null,\n defaultChecked = null;\n for (propKey in lastProps) {\n var lastProp = lastProps[propKey];\n if (lastProps.hasOwnProperty(propKey) && null != lastProp)\n switch (propKey) {\n case \"checked\":\n break;\n case \"value\":\n break;\n case \"defaultValue\":\n lastDefaultValue = lastProp;\n default:\n nextProps.hasOwnProperty(propKey) ||\n setProp(domElement, tag, propKey, null, nextProps, lastProp);\n }\n }\n for (var propKey$201 in nextProps) {\n var propKey = nextProps[propKey$201];\n lastProp = lastProps[propKey$201];\n if (\n nextProps.hasOwnProperty(propKey$201) &&\n (null != propKey || null != lastProp)\n )\n switch (propKey$201) {\n case \"type\":\n type = propKey;\n break;\n case \"name\":\n name = propKey;\n break;\n case \"checked\":\n checked = propKey;\n break;\n case \"defaultChecked\":\n defaultChecked = propKey;\n break;\n case \"value\":\n value = propKey;\n break;\n case \"defaultValue\":\n defaultValue = propKey;\n break;\n case \"children\":\n case \"dangerouslySetInnerHTML\":\n if (null != propKey)\n throw Error(formatProdErrorMessage(137, tag));\n break;\n default:\n propKey !== lastProp &&\n setProp(\n domElement,\n tag,\n propKey$201,\n propKey,\n nextProps,\n lastProp\n );\n }\n }\n updateInput(\n domElement,\n value,\n defaultValue,\n lastDefaultValue,\n checked,\n defaultChecked,\n type,\n name\n );\n return;\n case \"select\":\n propKey = value = defaultValue = propKey$201 = null;\n for (type in lastProps)\n if (\n ((lastDefaultValue = lastProps[type]),\n lastProps.hasOwnProperty(type) && null != lastDefaultValue)\n )\n switch (type) {\n case \"value\":\n break;\n case \"multiple\":\n propKey = lastDefaultValue;\n default:\n nextProps.hasOwnProperty(type) ||\n setProp(\n domElement,\n tag,\n type,\n null,\n nextProps,\n lastDefaultValue\n );\n }\n for (name in nextProps)\n if (\n ((type = nextProps[name]),\n (lastDefaultValue = lastProps[name]),\n nextProps.hasOwnProperty(name) &&\n (null != type || null != lastDefaultValue))\n )\n switch (name) {\n case \"value\":\n propKey$201 = type;\n break;\n case \"defaultValue\":\n defaultValue = type;\n break;\n case \"multiple\":\n value = type;\n default:\n type !== lastDefaultValue &&\n setProp(\n domElement,\n tag,\n name,\n type,\n nextProps,\n lastDefaultValue\n );\n }\n tag = defaultValue;\n lastProps = value;\n nextProps = propKey;\n null != propKey$201\n ? updateOptions(domElement, !!lastProps, propKey$201, !1)\n : !!nextProps !== !!lastProps &&\n (null != tag\n ? updateOptions(domElement, !!lastProps, tag, !0)\n : updateOptions(domElement, !!lastProps, lastProps ? [] : \"\", !1));\n return;\n case \"textarea\":\n propKey = propKey$201 = null;\n for (defaultValue in lastProps)\n if (\n ((name = lastProps[defaultValue]),\n lastProps.hasOwnProperty(defaultValue) &&\n null != name &&\n !nextProps.hasOwnProperty(defaultValue))\n )\n switch (defaultValue) {\n case \"value\":\n break;\n case \"children\":\n break;\n default:\n setProp(domElement, tag, defaultValue, null, nextProps, name);\n }\n for (value in nextProps)\n if (\n ((name = nextProps[value]),\n (type = lastProps[value]),\n nextProps.hasOwnProperty(value) && (null != name || null != type))\n )\n switch (value) {\n case \"value\":\n propKey$201 = name;\n break;\n case \"defaultValue\":\n propKey = name;\n break;\n case \"children\":\n break;\n case \"dangerouslySetInnerHTML\":\n if (null != name) throw Error(formatProdErrorMessage(91));\n break;\n default:\n name !== type &&\n setProp(domElement, tag, value, name, nextProps, type);\n }\n updateTextarea(domElement, propKey$201, propKey);\n return;\n case \"option\":\n for (var propKey$217 in lastProps)\n if (\n ((propKey$201 = lastProps[propKey$217]),\n lastProps.hasOwnProperty(propKey$217) &&\n null != propKey$201 &&\n !nextProps.hasOwnProperty(propKey$217))\n )\n switch (propKey$217) {\n case \"selected\":\n domElement.selected = !1;\n break;\n default:\n setProp(\n domElement,\n tag,\n propKey$217,\n null,\n nextProps,\n propKey$201\n );\n }\n for (lastDefaultValue in nextProps)\n if (\n ((propKey$201 = nextProps[lastDefaultValue]),\n (propKey = lastProps[lastDefaultValue]),\n nextProps.hasOwnProperty(lastDefaultValue) &&\n propKey$201 !== propKey &&\n (null != propKey$201 || null != propKey))\n )\n switch (lastDefaultValue) {\n case \"selected\":\n domElement.selected =\n propKey$201 &&\n \"function\" !== typeof propKey$201 &&\n \"symbol\" !== typeof propKey$201;\n break;\n default:\n setProp(\n domElement,\n tag,\n lastDefaultValue,\n propKey$201,\n nextProps,\n propKey\n );\n }\n return;\n case \"img\":\n case \"link\":\n case \"area\":\n case \"base\":\n case \"br\":\n case \"col\":\n case \"embed\":\n case \"hr\":\n case \"keygen\":\n case \"meta\":\n case \"param\":\n case \"source\":\n case \"track\":\n case \"wbr\":\n case \"menuitem\":\n for (var propKey$222 in lastProps)\n (propKey$201 = lastProps[propKey$222]),\n lastProps.hasOwnProperty(propKey$222) &&\n null != propKey$201 &&\n !nextProps.hasOwnProperty(propKey$222) &&\n setProp(domElement, tag, propKey$222, null, nextProps, propKey$201);\n for (checked in nextProps)\n if (\n ((propKey$201 = nextProps[checked]),\n (propKey = lastProps[checked]),\n nextProps.hasOwnProperty(checked) &&\n propKey$201 !== propKey &&\n (null != propKey$201 || null != propKey))\n )\n switch (checked) {\n case \"children\":\n case \"dangerouslySetInnerHTML\":\n if (null != propKey$201)\n throw Error(formatProdErrorMessage(137, tag));\n break;\n default:\n setProp(\n domElement,\n tag,\n checked,\n propKey$201,\n nextProps,\n propKey\n );\n }\n return;\n default:\n if (isCustomElement(tag)) {\n for (var propKey$227 in lastProps)\n (propKey$201 = lastProps[propKey$227]),\n lastProps.hasOwnProperty(propKey$227) &&\n void 0 !== propKey$201 &&\n !nextProps.hasOwnProperty(propKey$227) &&\n setPropOnCustomElement(\n domElement,\n tag,\n propKey$227,\n void 0,\n nextProps,\n propKey$201\n );\n for (defaultChecked in nextProps)\n (propKey$201 = nextProps[defaultChecked]),\n (propKey = lastProps[defaultChecked]),\n !nextProps.hasOwnProperty(defaultChecked) ||\n propKey$201 === propKey ||\n (void 0 === propKey$201 && void 0 === propKey) ||\n setPropOnCustomElement(\n domElement,\n tag,\n defaultChecked,\n propKey$201,\n nextProps,\n propKey\n );\n return;\n }\n }\n for (var propKey$232 in lastProps)\n (propKey$201 = lastProps[propKey$232]),\n lastProps.hasOwnProperty(propKey$232) &&\n null != propKey$201 &&\n !nextProps.hasOwnProperty(propKey$232) &&\n setProp(domElement, tag, propKey$232, null, nextProps, propKey$201);\n for (lastProp in nextProps)\n (propKey$201 = nextProps[lastProp]),\n (propKey = lastProps[lastProp]),\n !nextProps.hasOwnProperty(lastProp) ||\n propKey$201 === propKey ||\n (null == propKey$201 && null == propKey) ||\n setProp(domElement, tag, lastProp, propKey$201, nextProps, propKey);\n}\nfunction isLikelyStaticResource(initiatorType) {\n switch (initiatorType) {\n case \"css\":\n case \"script\":\n case \"font\":\n case \"img\":\n case \"image\":\n case \"input\":\n case \"link\":\n return !0;\n default:\n return !1;\n }\n}\nfunction estimateBandwidth() {\n if (\"function\" === typeof performance.getEntriesByType) {\n for (\n var count = 0,\n bits = 0,\n resourceEntries = performance.getEntriesByType(\"resource\"),\n i = 0;\n i < resourceEntries.length;\n i++\n ) {\n var entry = resourceEntries[i],\n transferSize = entry.transferSize,\n initiatorType = entry.initiatorType,\n duration = entry.duration;\n if (transferSize && duration && isLikelyStaticResource(initiatorType)) {\n initiatorType = 0;\n duration = entry.responseEnd;\n for (i += 1; i < resourceEntries.length; i++) {\n var overlapEntry = resourceEntries[i],\n overlapStartTime = overlapEntry.startTime;\n if (overlapStartTime > duration) break;\n var overlapTransferSize = overlapEntry.transferSize,\n overlapInitiatorType = overlapEntry.initiatorType;\n overlapTransferSize &&\n isLikelyStaticResource(overlapInitiatorType) &&\n ((overlapEntry = overlapEntry.responseEnd),\n (initiatorType +=\n overlapTransferSize *\n (overlapEntry < duration\n ? 1\n : (duration - overlapStartTime) /\n (overlapEntry - overlapStartTime))));\n }\n --i;\n bits += (8 * (transferSize + initiatorType)) / (entry.duration / 1e3);\n count++;\n if (10 < count) break;\n }\n }\n if (0 < count) return bits / count / 1e6;\n }\n return navigator.connection &&\n ((count = navigator.connection.downlink), \"number\" === typeof count)\n ? count\n : 5;\n}\nvar eventsEnabled = null,\n selectionInformation = null;\nfunction getOwnerDocumentFromRootContainer(rootContainerElement) {\n return 9 === rootContainerElement.nodeType\n ? rootContainerElement\n : rootContainerElement.ownerDocument;\n}\nfunction getOwnHostContext(namespaceURI) {\n switch (namespaceURI) {\n case \"http://www.w3.org/2000/svg\":\n return 1;\n case \"http://www.w3.org/1998/Math/MathML\":\n return 2;\n default:\n return 0;\n }\n}\nfunction getChildHostContextProd(parentNamespace, type) {\n if (0 === parentNamespace)\n switch (type) {\n case \"svg\":\n return 1;\n case \"math\":\n return 2;\n default:\n return 0;\n }\n return 1 === parentNamespace && \"foreignObject\" === type\n ? 0\n : parentNamespace;\n}\nfunction shouldSetTextContent(type, props) {\n return (\n \"textarea\" === type ||\n \"noscript\" === type ||\n \"string\" === typeof props.children ||\n \"number\" === typeof props.children ||\n \"bigint\" === typeof props.children ||\n (\"object\" === typeof props.dangerouslySetInnerHTML &&\n null !== props.dangerouslySetInnerHTML &&\n null != props.dangerouslySetInnerHTML.__html)\n );\n}\nvar currentPopstateTransitionEvent = null;\nfunction shouldAttemptEagerTransition() {\n var event = window.event;\n if (event && \"popstate\" === event.type) {\n if (event === currentPopstateTransitionEvent) return !1;\n currentPopstateTransitionEvent = event;\n return !0;\n }\n currentPopstateTransitionEvent = null;\n return !1;\n}\nvar scheduleTimeout = \"function\" === typeof setTimeout ? setTimeout : void 0,\n cancelTimeout = \"function\" === typeof clearTimeout ? clearTimeout : void 0,\n localPromise = \"function\" === typeof Promise ? Promise : void 0,\n scheduleMicrotask =\n \"function\" === typeof queueMicrotask\n ? queueMicrotask\n : \"undefined\" !== typeof localPromise\n ? function (callback) {\n return localPromise\n .resolve(null)\n .then(callback)\n .catch(handleErrorInNextTick);\n }\n : scheduleTimeout;\nfunction handleErrorInNextTick(error) {\n setTimeout(function () {\n throw error;\n });\n}\nfunction isSingletonScope(type) {\n return \"head\" === type;\n}\nfunction clearHydrationBoundary(parentInstance, hydrationInstance) {\n var node = hydrationInstance,\n depth = 0;\n do {\n var nextNode = node.nextSibling;\n parentInstance.removeChild(node);\n if (nextNode && 8 === nextNode.nodeType)\n if (((node = nextNode.data), \"/$\" === node || \"/&\" === node)) {\n if (0 === depth) {\n parentInstance.removeChild(nextNode);\n retryIfBlockedOn(hydrationInstance);\n return;\n }\n depth--;\n } else if (\n \"$\" === node ||\n \"$?\" === node ||\n \"$~\" === node ||\n \"$!\" === node ||\n \"&\" === node\n )\n depth++;\n else if (\"html\" === node)\n releaseSingletonInstance(parentInstance.ownerDocument.documentElement);\n else if (\"head\" === node) {\n node = parentInstance.ownerDocument.head;\n releaseSingletonInstance(node);\n for (var node$jscomp$0 = node.firstChild; node$jscomp$0; ) {\n var nextNode$jscomp$0 = node$jscomp$0.nextSibling,\n nodeName = node$jscomp$0.nodeName;\n node$jscomp$0[internalHoistableMarker] ||\n \"SCRIPT\" === nodeName ||\n \"STYLE\" === nodeName ||\n (\"LINK\" === nodeName &&\n \"stylesheet\" === node$jscomp$0.rel.toLowerCase()) ||\n node.removeChild(node$jscomp$0);\n node$jscomp$0 = nextNode$jscomp$0;\n }\n } else\n \"body\" === node &&\n releaseSingletonInstance(parentInstance.ownerDocument.body);\n node = nextNode;\n } while (node);\n retryIfBlockedOn(hydrationInstance);\n}\nfunction hideOrUnhideDehydratedBoundary(suspenseInstance, isHidden) {\n var node = suspenseInstance;\n suspenseInstance = 0;\n do {\n var nextNode = node.nextSibling;\n 1 === node.nodeType\n ? isHidden\n ? ((node._stashedDisplay = node.style.display),\n (node.style.display = \"none\"))\n : ((node.style.display = node._stashedDisplay || \"\"),\n \"\" === node.getAttribute(\"style\") && node.removeAttribute(\"style\"))\n : 3 === node.nodeType &&\n (isHidden\n ? ((node._stashedText = node.nodeValue), (node.nodeValue = \"\"))\n : (node.nodeValue = node._stashedText || \"\"));\n if (nextNode && 8 === nextNode.nodeType)\n if (((node = nextNode.data), \"/$\" === node))\n if (0 === suspenseInstance) break;\n else suspenseInstance--;\n else\n (\"$\" !== node && \"$?\" !== node && \"$~\" !== node && \"$!\" !== node) ||\n suspenseInstance++;\n node = nextNode;\n } while (node);\n}\nfunction clearContainerSparingly(container) {\n var nextNode = container.firstChild;\n nextNode && 10 === nextNode.nodeType && (nextNode = nextNode.nextSibling);\n for (; nextNode; ) {\n var node = nextNode;\n nextNode = nextNode.nextSibling;\n switch (node.nodeName) {\n case \"HTML\":\n case \"HEAD\":\n case \"BODY\":\n clearContainerSparingly(node);\n detachDeletedInstance(node);\n continue;\n case \"SCRIPT\":\n case \"STYLE\":\n continue;\n case \"LINK\":\n if (\"stylesheet\" === node.rel.toLowerCase()) continue;\n }\n container.removeChild(node);\n }\n}\nfunction canHydrateInstance(instance, type, props, inRootOrSingleton) {\n for (; 1 === instance.nodeType; ) {\n var anyProps = props;\n if (instance.nodeName.toLowerCase() !== type.toLowerCase()) {\n if (\n !inRootOrSingleton &&\n (\"INPUT\" !== instance.nodeName || \"hidden\" !== instance.type)\n )\n break;\n } else if (!inRootOrSingleton)\n if (\"input\" === type && \"hidden\" === instance.type) {\n var name = null == anyProps.name ? null : \"\" + anyProps.name;\n if (\n \"hidden\" === anyProps.type &&\n instance.getAttribute(\"name\") === name\n )\n return instance;\n } else return instance;\n else if (!instance[internalHoistableMarker])\n switch (type) {\n case \"meta\":\n if (!instance.hasAttribute(\"itemprop\")) break;\n return instance;\n case \"link\":\n name = instance.getAttribute(\"rel\");\n if (\"stylesheet\" === name && instance.hasAttribute(\"data-precedence\"))\n break;\n else if (\n name !== anyProps.rel ||\n instance.getAttribute(\"href\") !==\n (null == anyProps.href || \"\" === anyProps.href\n ? null\n : anyProps.href) ||\n instance.getAttribute(\"crossorigin\") !==\n (null == anyProps.crossOrigin ? null : anyProps.crossOrigin) ||\n instance.getAttribute(\"title\") !==\n (null == anyProps.title ? null : anyProps.title)\n )\n break;\n return instance;\n case \"style\":\n if (instance.hasAttribute(\"data-precedence\")) break;\n return instance;\n case \"script\":\n name = instance.getAttribute(\"src\");\n if (\n (name !== (null == anyProps.src ? null : anyProps.src) ||\n instance.getAttribute(\"type\") !==\n (null == anyProps.type ? null : anyProps.type) ||\n instance.getAttribute(\"crossorigin\") !==\n (null == anyProps.crossOrigin ? null : anyProps.crossOrigin)) &&\n name &&\n instance.hasAttribute(\"async\") &&\n !instance.hasAttribute(\"itemprop\")\n )\n break;\n return instance;\n default:\n return instance;\n }\n instance = getNextHydratable(instance.nextSibling);\n if (null === instance) break;\n }\n return null;\n}\nfunction canHydrateTextInstance(instance, text, inRootOrSingleton) {\n if (\"\" === text) return null;\n for (; 3 !== instance.nodeType; ) {\n if (\n (1 !== instance.nodeType ||\n \"INPUT\" !== instance.nodeName ||\n \"hidden\" !== instance.type) &&\n !inRootOrSingleton\n )\n return null;\n instance = getNextHydratable(instance.nextSibling);\n if (null === instance) return null;\n }\n return instance;\n}\nfunction canHydrateHydrationBoundary(instance, inRootOrSingleton) {\n for (; 8 !== instance.nodeType; ) {\n if (\n (1 !== instance.nodeType ||\n \"INPUT\" !== instance.nodeName ||\n \"hidden\" !== instance.type) &&\n !inRootOrSingleton\n )\n return null;\n instance = getNextHydratable(instance.nextSibling);\n if (null === instance) return null;\n }\n return instance;\n}\nfunction isSuspenseInstancePending(instance) {\n return \"$?\" === instance.data || \"$~\" === instance.data;\n}\nfunction isSuspenseInstanceFallback(instance) {\n return (\n \"$!\" === instance.data ||\n (\"$?\" === instance.data && \"loading\" !== instance.ownerDocument.readyState)\n );\n}\nfunction registerSuspenseInstanceRetry(instance, callback) {\n var ownerDocument = instance.ownerDocument;\n if (\"$~\" === instance.data) instance._reactRetry = callback;\n else if (\"$?\" !== instance.data || \"loading\" !== ownerDocument.readyState)\n callback();\n else {\n var listener = function () {\n callback();\n ownerDocument.removeEventListener(\"DOMContentLoaded\", listener);\n };\n ownerDocument.addEventListener(\"DOMContentLoaded\", listener);\n instance._reactRetry = listener;\n }\n}\nfunction getNextHydratable(node) {\n for (; null != node; node = node.nextSibling) {\n var nodeType = node.nodeType;\n if (1 === nodeType || 3 === nodeType) break;\n if (8 === nodeType) {\n nodeType = node.data;\n if (\n \"$\" === nodeType ||\n \"$!\" === nodeType ||\n \"$?\" === nodeType ||\n \"$~\" === nodeType ||\n \"&\" === nodeType ||\n \"F!\" === nodeType ||\n \"F\" === nodeType\n )\n break;\n if (\"/$\" === nodeType || \"/&\" === nodeType) return null;\n }\n }\n return node;\n}\nvar previousHydratableOnEnteringScopedSingleton = null;\nfunction getNextHydratableInstanceAfterHydrationBoundary(hydrationInstance) {\n hydrationInstance = hydrationInstance.nextSibling;\n for (var depth = 0; hydrationInstance; ) {\n if (8 === hydrationInstance.nodeType) {\n var data = hydrationInstance.data;\n if (\"/$\" === data || \"/&\" === data) {\n if (0 === depth)\n return getNextHydratable(hydrationInstance.nextSibling);\n depth--;\n } else\n (\"$\" !== data &&\n \"$!\" !== data &&\n \"$?\" !== data &&\n \"$~\" !== data &&\n \"&\" !== data) ||\n depth++;\n }\n hydrationInstance = hydrationInstance.nextSibling;\n }\n return null;\n}\nfunction getParentHydrationBoundary(targetInstance) {\n targetInstance = targetInstance.previousSibling;\n for (var depth = 0; targetInstance; ) {\n if (8 === targetInstance.nodeType) {\n var data = targetInstance.data;\n if (\n \"$\" === data ||\n \"$!\" === data ||\n \"$?\" === data ||\n \"$~\" === data ||\n \"&\" === data\n ) {\n if (0 === depth) return targetInstance;\n depth--;\n } else (\"/$\" !== data && \"/&\" !== data) || depth++;\n }\n targetInstance = targetInstance.previousSibling;\n }\n return null;\n}\nfunction resolveSingletonInstance(type, props, rootContainerInstance) {\n props = getOwnerDocumentFromRootContainer(rootContainerInstance);\n switch (type) {\n case \"html\":\n type = props.documentElement;\n if (!type) throw Error(formatProdErrorMessage(452));\n return type;\n case \"head\":\n type = props.head;\n if (!type) throw Error(formatProdErrorMessage(453));\n return type;\n case \"body\":\n type = props.body;\n if (!type) throw Error(formatProdErrorMessage(454));\n return type;\n default:\n throw Error(formatProdErrorMessage(451));\n }\n}\nfunction releaseSingletonInstance(instance) {\n for (var attributes = instance.attributes; attributes.length; )\n instance.removeAttributeNode(attributes[0]);\n detachDeletedInstance(instance);\n}\nvar preloadPropsMap = new Map(),\n preconnectsSet = new Set();\nfunction getHoistableRoot(container) {\n return \"function\" === typeof container.getRootNode\n ? container.getRootNode()\n : 9 === container.nodeType\n ? container\n : container.ownerDocument;\n}\nvar previousDispatcher = ReactDOMSharedInternals.d;\nReactDOMSharedInternals.d = {\n f: flushSyncWork,\n r: requestFormReset,\n D: prefetchDNS,\n C: preconnect,\n L: preload,\n m: preloadModule,\n X: preinitScript,\n S: preinitStyle,\n M: preinitModuleScript\n};\nfunction flushSyncWork() {\n var previousWasRendering = previousDispatcher.f(),\n wasRendering = flushSyncWork$1();\n return previousWasRendering || wasRendering;\n}\nfunction requestFormReset(form) {\n var formInst = getInstanceFromNode(form);\n null !== formInst && 5 === formInst.tag && \"form\" === formInst.type\n ? requestFormReset$1(formInst)\n : previousDispatcher.r(form);\n}\nvar globalDocument = \"undefined\" === typeof document ? null : document;\nfunction preconnectAs(rel, href, crossOrigin) {\n var ownerDocument = globalDocument;\n if (ownerDocument && \"string\" === typeof href && href) {\n var limitedEscapedHref =\n escapeSelectorAttributeValueInsideDoubleQuotes(href);\n limitedEscapedHref =\n 'link[rel=\"' + rel + '\"][href=\"' + limitedEscapedHref + '\"]';\n \"string\" === typeof crossOrigin &&\n (limitedEscapedHref += '[crossorigin=\"' + crossOrigin + '\"]');\n preconnectsSet.has(limitedEscapedHref) ||\n (preconnectsSet.add(limitedEscapedHref),\n (rel = { rel: rel, crossOrigin: crossOrigin, href: href }),\n null === ownerDocument.querySelector(limitedEscapedHref) &&\n ((href = ownerDocument.createElement(\"link\")),\n setInitialProperties(href, \"link\", rel),\n markNodeAsHoistable(href),\n ownerDocument.head.appendChild(href)));\n }\n}\nfunction prefetchDNS(href) {\n previousDispatcher.D(href);\n preconnectAs(\"dns-prefetch\", href, null);\n}\nfunction preconnect(href, crossOrigin) {\n previousDispatcher.C(href, crossOrigin);\n preconnectAs(\"preconnect\", href, crossOrigin);\n}\nfunction preload(href, as, options) {\n previousDispatcher.L(href, as, options);\n var ownerDocument = globalDocument;\n if (ownerDocument && href && as) {\n var preloadSelector =\n 'link[rel=\"preload\"][as=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(as) +\n '\"]';\n \"image\" === as\n ? options && options.imageSrcSet\n ? ((preloadSelector +=\n '[imagesrcset=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(\n options.imageSrcSet\n ) +\n '\"]'),\n \"string\" === typeof options.imageSizes &&\n (preloadSelector +=\n '[imagesizes=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(\n options.imageSizes\n ) +\n '\"]'))\n : (preloadSelector +=\n '[href=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n '\"]')\n : (preloadSelector +=\n '[href=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n '\"]');\n var key = preloadSelector;\n switch (as) {\n case \"style\":\n key = getStyleKey(href);\n break;\n case \"script\":\n key = getScriptKey(href);\n }\n preloadPropsMap.has(key) ||\n ((href = assign(\n {\n rel: \"preload\",\n href:\n \"image\" === as && options && options.imageSrcSet ? void 0 : href,\n as: as\n },\n options\n )),\n preloadPropsMap.set(key, href),\n null !== ownerDocument.querySelector(preloadSelector) ||\n (\"style\" === as &&\n ownerDocument.querySelector(getStylesheetSelectorFromKey(key))) ||\n (\"script\" === as &&\n ownerDocument.querySelector(getScriptSelectorFromKey(key))) ||\n ((as = ownerDocument.createElement(\"link\")),\n setInitialProperties(as, \"link\", href),\n markNodeAsHoistable(as),\n ownerDocument.head.appendChild(as)));\n }\n}\nfunction preloadModule(href, options) {\n previousDispatcher.m(href, options);\n var ownerDocument = globalDocument;\n if (ownerDocument && href) {\n var as = options && \"string\" === typeof options.as ? options.as : \"script\",\n preloadSelector =\n 'link[rel=\"modulepreload\"][as=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(as) +\n '\"][href=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n '\"]',\n key = preloadSelector;\n switch (as) {\n case \"audioworklet\":\n case \"paintworklet\":\n case \"serviceworker\":\n case \"sharedworker\":\n case \"worker\":\n case \"script\":\n key = getScriptKey(href);\n }\n if (\n !preloadPropsMap.has(key) &&\n ((href = assign({ rel: \"modulepreload\", href: href }, options)),\n preloadPropsMap.set(key, href),\n null === ownerDocument.querySelector(preloadSelector))\n ) {\n switch (as) {\n case \"audioworklet\":\n case \"paintworklet\":\n case \"serviceworker\":\n case \"sharedworker\":\n case \"worker\":\n case \"script\":\n if (ownerDocument.querySelector(getScriptSelectorFromKey(key)))\n return;\n }\n as = ownerDocument.createElement(\"link\");\n setInitialProperties(as, \"link\", href);\n markNodeAsHoistable(as);\n ownerDocument.head.appendChild(as);\n }\n }\n}\nfunction preinitStyle(href, precedence, options) {\n previousDispatcher.S(href, precedence, options);\n var ownerDocument = globalDocument;\n if (ownerDocument && href) {\n var styles = getResourcesFromRoot(ownerDocument).hoistableStyles,\n key = getStyleKey(href);\n precedence = precedence || \"default\";\n var resource = styles.get(key);\n if (!resource) {\n var state = { loading: 0, preload: null };\n if (\n (resource = ownerDocument.querySelector(\n getStylesheetSelectorFromKey(key)\n ))\n )\n state.loading = 5;\n else {\n href = assign(\n { rel: \"stylesheet\", href: href, \"data-precedence\": precedence },\n options\n );\n (options = preloadPropsMap.get(key)) &&\n adoptPreloadPropsForStylesheet(href, options);\n var link = (resource = ownerDocument.createElement(\"link\"));\n markNodeAsHoistable(link);\n setInitialProperties(link, \"link\", href);\n link._p = new Promise(function (resolve, reject) {\n link.onload = resolve;\n link.onerror = reject;\n });\n link.addEventListener(\"load\", function () {\n state.loading |= 1;\n });\n link.addEventListener(\"error\", function () {\n state.loading |= 2;\n });\n state.loading |= 4;\n insertStylesheet(resource, precedence, ownerDocument);\n }\n resource = {\n type: \"stylesheet\",\n instance: resource,\n count: 1,\n state: state\n };\n styles.set(key, resource);\n }\n }\n}\nfunction preinitScript(src, options) {\n previousDispatcher.X(src, options);\n var ownerDocument = globalDocument;\n if (ownerDocument && src) {\n var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,\n key = getScriptKey(src),\n resource = scripts.get(key);\n resource ||\n ((resource = ownerDocument.querySelector(getScriptSelectorFromKey(key))),\n resource ||\n ((src = assign({ src: src, async: !0 }, options)),\n (options = preloadPropsMap.get(key)) &&\n adoptPreloadPropsForScript(src, options),\n (resource = ownerDocument.createElement(\"script\")),\n markNodeAsHoistable(resource),\n setInitialProperties(resource, \"link\", src),\n ownerDocument.head.appendChild(resource)),\n (resource = {\n type: \"script\",\n instance: resource,\n count: 1,\n state: null\n }),\n scripts.set(key, resource));\n }\n}\nfunction preinitModuleScript(src, options) {\n previousDispatcher.M(src, options);\n var ownerDocument = globalDocument;\n if (ownerDocument && src) {\n var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,\n key = getScriptKey(src),\n resource = scripts.get(key);\n resource ||\n ((resource = ownerDocument.querySelector(getScriptSelectorFromKey(key))),\n resource ||\n ((src = assign({ src: src, async: !0, type: \"module\" }, options)),\n (options = preloadPropsMap.get(key)) &&\n adoptPreloadPropsForScript(src, options),\n (resource = ownerDocument.createElement(\"script\")),\n markNodeAsHoistable(resource),\n setInitialProperties(resource, \"link\", src),\n ownerDocument.head.appendChild(resource)),\n (resource = {\n type: \"script\",\n instance: resource,\n count: 1,\n state: null\n }),\n scripts.set(key, resource));\n }\n}\nfunction getResource(type, currentProps, pendingProps, currentResource) {\n var JSCompiler_inline_result = (JSCompiler_inline_result =\n rootInstanceStackCursor.current)\n ? getHoistableRoot(JSCompiler_inline_result)\n : null;\n if (!JSCompiler_inline_result) throw Error(formatProdErrorMessage(446));\n switch (type) {\n case \"meta\":\n case \"title\":\n return null;\n case \"style\":\n return \"string\" === typeof pendingProps.precedence &&\n \"string\" === typeof pendingProps.href\n ? ((currentProps = getStyleKey(pendingProps.href)),\n (pendingProps = getResourcesFromRoot(\n JSCompiler_inline_result\n ).hoistableStyles),\n (currentResource = pendingProps.get(currentProps)),\n currentResource ||\n ((currentResource = {\n type: \"style\",\n instance: null,\n count: 0,\n state: null\n }),\n pendingProps.set(currentProps, currentResource)),\n currentResource)\n : { type: \"void\", instance: null, count: 0, state: null };\n case \"link\":\n if (\n \"stylesheet\" === pendingProps.rel &&\n \"string\" === typeof pendingProps.href &&\n \"string\" === typeof pendingProps.precedence\n ) {\n type = getStyleKey(pendingProps.href);\n var styles$243 = getResourcesFromRoot(\n JSCompiler_inline_result\n ).hoistableStyles,\n resource$244 = styles$243.get(type);\n resource$244 ||\n ((JSCompiler_inline_result =\n JSCompiler_inline_result.ownerDocument || JSCompiler_inline_result),\n (resource$244 = {\n type: \"stylesheet\",\n instance: null,\n count: 0,\n state: { loading: 0, preload: null }\n }),\n styles$243.set(type, resource$244),\n (styles$243 = JSCompiler_inline_result.querySelector(\n getStylesheetSelectorFromKey(type)\n )) &&\n !styles$243._p &&\n ((resource$244.instance = styles$243),\n (resource$244.state.loading = 5)),\n preloadPropsMap.has(type) ||\n ((pendingProps = {\n rel: \"preload\",\n as: \"style\",\n href: pendingProps.href,\n crossOrigin: pendingProps.crossOrigin,\n integrity: pendingProps.integrity,\n media: pendingProps.media,\n hrefLang: pendingProps.hrefLang,\n referrerPolicy: pendingProps.referrerPolicy\n }),\n preloadPropsMap.set(type, pendingProps),\n styles$243 ||\n preloadStylesheet(\n JSCompiler_inline_result,\n type,\n pendingProps,\n resource$244.state\n )));\n if (currentProps && null === currentResource)\n throw Error(formatProdErrorMessage(528, \"\"));\n return resource$244;\n }\n if (currentProps && null !== currentResource)\n throw Error(formatProdErrorMessage(529, \"\"));\n return null;\n case \"script\":\n return (\n (currentProps = pendingProps.async),\n (pendingProps = pendingProps.src),\n \"string\" === typeof pendingProps &&\n currentProps &&\n \"function\" !== typeof currentProps &&\n \"symbol\" !== typeof currentProps\n ? ((currentProps = getScriptKey(pendingProps)),\n (pendingProps = getResourcesFromRoot(\n JSCompiler_inline_result\n ).hoistableScripts),\n (currentResource = pendingProps.get(currentProps)),\n currentResource ||\n ((currentResource = {\n type: \"script\",\n instance: null,\n count: 0,\n state: null\n }),\n pendingProps.set(currentProps, currentResource)),\n currentResource)\n : { type: \"void\", instance: null, count: 0, state: null }\n );\n default:\n throw Error(formatProdErrorMessage(444, type));\n }\n}\nfunction getStyleKey(href) {\n return 'href=\"' + escapeSelectorAttributeValueInsideDoubleQuotes(href) + '\"';\n}\nfunction getStylesheetSelectorFromKey(key) {\n return 'link[rel=\"stylesheet\"][' + key + \"]\";\n}\nfunction stylesheetPropsFromRawProps(rawProps) {\n return assign({}, rawProps, {\n \"data-precedence\": rawProps.precedence,\n precedence: null\n });\n}\nfunction preloadStylesheet(ownerDocument, key, preloadProps, state) {\n ownerDocument.querySelector('link[rel=\"preload\"][as=\"style\"][' + key + \"]\")\n ? (state.loading = 1)\n : ((key = ownerDocument.createElement(\"link\")),\n (state.preload = key),\n key.addEventListener(\"load\", function () {\n return (state.loading |= 1);\n }),\n key.addEventListener(\"error\", function () {\n return (state.loading |= 2);\n }),\n setInitialProperties(key, \"link\", preloadProps),\n markNodeAsHoistable(key),\n ownerDocument.head.appendChild(key));\n}\nfunction getScriptKey(src) {\n return '[src=\"' + escapeSelectorAttributeValueInsideDoubleQuotes(src) + '\"]';\n}\nfunction getScriptSelectorFromKey(key) {\n return \"script[async]\" + key;\n}\nfunction acquireResource(hoistableRoot, resource, props) {\n resource.count++;\n if (null === resource.instance)\n switch (resource.type) {\n case \"style\":\n var instance = hoistableRoot.querySelector(\n 'style[data-href~=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(props.href) +\n '\"]'\n );\n if (instance)\n return (\n (resource.instance = instance),\n markNodeAsHoistable(instance),\n instance\n );\n var styleProps = assign({}, props, {\n \"data-href\": props.href,\n \"data-precedence\": props.precedence,\n href: null,\n precedence: null\n });\n instance = (hoistableRoot.ownerDocument || hoistableRoot).createElement(\n \"style\"\n );\n markNodeAsHoistable(instance);\n setInitialProperties(instance, \"style\", styleProps);\n insertStylesheet(instance, props.precedence, hoistableRoot);\n return (resource.instance = instance);\n case \"stylesheet\":\n styleProps = getStyleKey(props.href);\n var instance$249 = hoistableRoot.querySelector(\n getStylesheetSelectorFromKey(styleProps)\n );\n if (instance$249)\n return (\n (resource.state.loading |= 4),\n (resource.instance = instance$249),\n markNodeAsHoistable(instance$249),\n instance$249\n );\n instance = stylesheetPropsFromRawProps(props);\n (styleProps = preloadPropsMap.get(styleProps)) &&\n adoptPreloadPropsForStylesheet(instance, styleProps);\n instance$249 = (\n hoistableRoot.ownerDocument || hoistableRoot\n ).createElement(\"link\");\n markNodeAsHoistable(instance$249);\n var linkInstance = instance$249;\n linkInstance._p = new Promise(function (resolve, reject) {\n linkInstance.onload = resolve;\n linkInstance.onerror = reject;\n });\n setInitialProperties(instance$249, \"link\", instance);\n resource.state.loading |= 4;\n insertStylesheet(instance$249, props.precedence, hoistableRoot);\n return (resource.instance = instance$249);\n case \"script\":\n instance$249 = getScriptKey(props.src);\n if (\n (styleProps = hoistableRoot.querySelector(\n getScriptSelectorFromKey(instance$249)\n ))\n )\n return (\n (resource.instance = styleProps),\n markNodeAsHoistable(styleProps),\n styleProps\n );\n instance = props;\n if ((styleProps = preloadPropsMap.get(instance$249)))\n (instance = assign({}, props)),\n adoptPreloadPropsForScript(instance, styleProps);\n hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n styleProps = hoistableRoot.createElement(\"script\");\n markNodeAsHoistable(styleProps);\n setInitialProperties(styleProps, \"link\", instance);\n hoistableRoot.head.appendChild(styleProps);\n return (resource.instance = styleProps);\n case \"void\":\n return null;\n default:\n throw Error(formatProdErrorMessage(443, resource.type));\n }\n else\n \"stylesheet\" === resource.type &&\n 0 === (resource.state.loading & 4) &&\n ((instance = resource.instance),\n (resource.state.loading |= 4),\n insertStylesheet(instance, props.precedence, hoistableRoot));\n return resource.instance;\n}\nfunction insertStylesheet(instance, precedence, root) {\n for (\n var nodes = root.querySelectorAll(\n 'link[rel=\"stylesheet\"][data-precedence],style[data-precedence]'\n ),\n last = nodes.length ? nodes[nodes.length - 1] : null,\n prior = last,\n i = 0;\n i < nodes.length;\n i++\n ) {\n var node = nodes[i];\n if (node.dataset.precedence === precedence) prior = node;\n else if (prior !== last) break;\n }\n prior\n ? prior.parentNode.insertBefore(instance, prior.nextSibling)\n : ((precedence = 9 === root.nodeType ? root.head : root),\n precedence.insertBefore(instance, precedence.firstChild));\n}\nfunction adoptPreloadPropsForStylesheet(stylesheetProps, preloadProps) {\n null == stylesheetProps.crossOrigin &&\n (stylesheetProps.crossOrigin = preloadProps.crossOrigin);\n null == stylesheetProps.referrerPolicy &&\n (stylesheetProps.referrerPolicy = preloadProps.referrerPolicy);\n null == stylesheetProps.title && (stylesheetProps.title = preloadProps.title);\n}\nfunction adoptPreloadPropsForScript(scriptProps, preloadProps) {\n null == scriptProps.crossOrigin &&\n (scriptProps.crossOrigin = preloadProps.crossOrigin);\n null == scriptProps.referrerPolicy &&\n (scriptProps.referrerPolicy = preloadProps.referrerPolicy);\n null == scriptProps.integrity &&\n (scriptProps.integrity = preloadProps.integrity);\n}\nvar tagCaches = null;\nfunction getHydratableHoistableCache(type, keyAttribute, ownerDocument) {\n if (null === tagCaches) {\n var cache = new Map();\n var caches = (tagCaches = new Map());\n caches.set(ownerDocument, cache);\n } else\n (caches = tagCaches),\n (cache = caches.get(ownerDocument)),\n cache || ((cache = new Map()), caches.set(ownerDocument, cache));\n if (cache.has(type)) return cache;\n cache.set(type, null);\n ownerDocument = ownerDocument.getElementsByTagName(type);\n for (caches = 0; caches < ownerDocument.length; caches++) {\n var node = ownerDocument[caches];\n if (\n !(\n node[internalHoistableMarker] ||\n node[internalInstanceKey] ||\n (\"link\" === type && \"stylesheet\" === node.getAttribute(\"rel\"))\n ) &&\n \"http://www.w3.org/2000/svg\" !== node.namespaceURI\n ) {\n var nodeKey = node.getAttribute(keyAttribute) || \"\";\n nodeKey = type + nodeKey;\n var existing = cache.get(nodeKey);\n existing ? existing.push(node) : cache.set(nodeKey, [node]);\n }\n }\n return cache;\n}\nfunction mountHoistable(hoistableRoot, type, instance) {\n hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n hoistableRoot.head.insertBefore(\n instance,\n \"title\" === type ? hoistableRoot.querySelector(\"head > title\") : null\n );\n}\nfunction isHostHoistableType(type, props, hostContext) {\n if (1 === hostContext || null != props.itemProp) return !1;\n switch (type) {\n case \"meta\":\n case \"title\":\n return !0;\n case \"style\":\n if (\n \"string\" !== typeof props.precedence ||\n \"string\" !== typeof props.href ||\n \"\" === props.href\n )\n break;\n return !0;\n case \"link\":\n if (\n \"string\" !== typeof props.rel ||\n \"string\" !== typeof props.href ||\n \"\" === props.href ||\n props.onLoad ||\n props.onError\n )\n break;\n switch (props.rel) {\n case \"stylesheet\":\n return (\n (type = props.disabled),\n \"string\" === typeof props.precedence && null == type\n );\n default:\n return !0;\n }\n case \"script\":\n if (\n props.async &&\n \"function\" !== typeof props.async &&\n \"symbol\" !== typeof props.async &&\n !props.onLoad &&\n !props.onError &&\n props.src &&\n \"string\" === typeof props.src\n )\n return !0;\n }\n return !1;\n}\nfunction preloadResource(resource) {\n return \"stylesheet\" === resource.type && 0 === (resource.state.loading & 3)\n ? !1\n : !0;\n}\nfunction suspendResource(state, hoistableRoot, resource, props) {\n if (\n \"stylesheet\" === resource.type &&\n (\"string\" !== typeof props.media ||\n !1 !== matchMedia(props.media).matches) &&\n 0 === (resource.state.loading & 4)\n ) {\n if (null === resource.instance) {\n var key = getStyleKey(props.href),\n instance = hoistableRoot.querySelector(\n getStylesheetSelectorFromKey(key)\n );\n if (instance) {\n hoistableRoot = instance._p;\n null !== hoistableRoot &&\n \"object\" === typeof hoistableRoot &&\n \"function\" === typeof hoistableRoot.then &&\n (state.count++,\n (state = onUnsuspend.bind(state)),\n hoistableRoot.then(state, state));\n resource.state.loading |= 4;\n resource.instance = instance;\n markNodeAsHoistable(instance);\n return;\n }\n instance = hoistableRoot.ownerDocument || hoistableRoot;\n props = stylesheetPropsFromRawProps(props);\n (key = preloadPropsMap.get(key)) &&\n adoptPreloadPropsForStylesheet(props, key);\n instance = instance.createElement(\"link\");\n markNodeAsHoistable(instance);\n var linkInstance = instance;\n linkInstance._p = new Promise(function (resolve, reject) {\n linkInstance.onload = resolve;\n linkInstance.onerror = reject;\n });\n setInitialProperties(instance, \"link\", props);\n resource.instance = instance;\n }\n null === state.stylesheets && (state.stylesheets = new Map());\n state.stylesheets.set(resource, hoistableRoot);\n (hoistableRoot = resource.state.preload) &&\n 0 === (resource.state.loading & 3) &&\n (state.count++,\n (resource = onUnsuspend.bind(state)),\n hoistableRoot.addEventListener(\"load\", resource),\n hoistableRoot.addEventListener(\"error\", resource));\n }\n}\nvar estimatedBytesWithinLimit = 0;\nfunction waitForCommitToBeReady(state, timeoutOffset) {\n state.stylesheets &&\n 0 === state.count &&\n insertSuspendedStylesheets(state, state.stylesheets);\n return 0 < state.count || 0 < state.imgCount\n ? function (commit) {\n var stylesheetTimer = setTimeout(function () {\n state.stylesheets &&\n insertSuspendedStylesheets(state, state.stylesheets);\n if (state.unsuspend) {\n var unsuspend = state.unsuspend;\n state.unsuspend = null;\n unsuspend();\n }\n }, 6e4 + timeoutOffset);\n 0 < state.imgBytes &&\n 0 === estimatedBytesWithinLimit &&\n (estimatedBytesWithinLimit = 62500 * estimateBandwidth());\n var imgTimer = setTimeout(\n function () {\n state.waitingForImages = !1;\n if (\n 0 === state.count &&\n (state.stylesheets &&\n insertSuspendedStylesheets(state, state.stylesheets),\n state.unsuspend)\n ) {\n var unsuspend = state.unsuspend;\n state.unsuspend = null;\n unsuspend();\n }\n },\n (state.imgBytes > estimatedBytesWithinLimit ? 50 : 800) +\n timeoutOffset\n );\n state.unsuspend = commit;\n return function () {\n state.unsuspend = null;\n clearTimeout(stylesheetTimer);\n clearTimeout(imgTimer);\n };\n }\n : null;\n}\nfunction onUnsuspend() {\n this.count--;\n if (0 === this.count && (0 === this.imgCount || !this.waitingForImages))\n if (this.stylesheets) insertSuspendedStylesheets(this, this.stylesheets);\n else if (this.unsuspend) {\n var unsuspend = this.unsuspend;\n this.unsuspend = null;\n unsuspend();\n }\n}\nvar precedencesByRoot = null;\nfunction insertSuspendedStylesheets(state, resources) {\n state.stylesheets = null;\n null !== state.unsuspend &&\n (state.count++,\n (precedencesByRoot = new Map()),\n resources.forEach(insertStylesheetIntoRoot, state),\n (precedencesByRoot = null),\n onUnsuspend.call(state));\n}\nfunction insertStylesheetIntoRoot(root, resource) {\n if (!(resource.state.loading & 4)) {\n var precedences = precedencesByRoot.get(root);\n if (precedences) var last = precedences.get(null);\n else {\n precedences = new Map();\n precedencesByRoot.set(root, precedences);\n for (\n var nodes = root.querySelectorAll(\n \"link[data-precedence],style[data-precedence]\"\n ),\n i = 0;\n i < nodes.length;\n i++\n ) {\n var node = nodes[i];\n if (\n \"LINK\" === node.nodeName ||\n \"not all\" !== node.getAttribute(\"media\")\n )\n precedences.set(node.dataset.precedence, node), (last = node);\n }\n last && precedences.set(null, last);\n }\n nodes = resource.instance;\n node = nodes.getAttribute(\"data-precedence\");\n i = precedences.get(node) || last;\n i === last && precedences.set(null, nodes);\n precedences.set(node, nodes);\n this.count++;\n last = onUnsuspend.bind(this);\n nodes.addEventListener(\"load\", last);\n nodes.addEventListener(\"error\", last);\n i\n ? i.parentNode.insertBefore(nodes, i.nextSibling)\n : ((root = 9 === root.nodeType ? root.head : root),\n root.insertBefore(nodes, root.firstChild));\n resource.state.loading |= 4;\n }\n}\nvar HostTransitionContext = {\n $$typeof: REACT_CONTEXT_TYPE,\n Provider: null,\n Consumer: null,\n _currentValue: sharedNotPendingObject,\n _currentValue2: sharedNotPendingObject,\n _threadCount: 0\n};\nfunction FiberRootNode(\n containerInfo,\n tag,\n hydrate,\n identifierPrefix,\n onUncaughtError,\n onCaughtError,\n onRecoverableError,\n onDefaultTransitionIndicator,\n formState\n) {\n this.tag = 1;\n this.containerInfo = containerInfo;\n this.pingCache = this.current = this.pendingChildren = null;\n this.timeoutHandle = -1;\n this.callbackNode =\n this.next =\n this.pendingContext =\n this.context =\n this.cancelPendingCommit =\n null;\n this.callbackPriority = 0;\n this.expirationTimes = createLaneMap(-1);\n this.entangledLanes =\n this.shellSuspendCounter =\n this.errorRecoveryDisabledLanes =\n this.expiredLanes =\n this.warmLanes =\n this.pingedLanes =\n this.suspendedLanes =\n this.pendingLanes =\n 0;\n this.entanglements = createLaneMap(0);\n this.hiddenUpdates = createLaneMap(null);\n this.identifierPrefix = identifierPrefix;\n this.onUncaughtError = onUncaughtError;\n this.onCaughtError = onCaughtError;\n this.onRecoverableError = onRecoverableError;\n this.pooledCache = null;\n this.pooledCacheLanes = 0;\n this.formState = formState;\n this.incompleteTransitions = new Map();\n}\nfunction createFiberRoot(\n containerInfo,\n tag,\n hydrate,\n initialChildren,\n hydrationCallbacks,\n isStrictMode,\n identifierPrefix,\n formState,\n onUncaughtError,\n onCaughtError,\n onRecoverableError,\n onDefaultTransitionIndicator\n) {\n containerInfo = new FiberRootNode(\n containerInfo,\n tag,\n hydrate,\n identifierPrefix,\n onUncaughtError,\n onCaughtError,\n onRecoverableError,\n onDefaultTransitionIndicator,\n formState\n );\n tag = 1;\n !0 === isStrictMode && (tag |= 24);\n isStrictMode = createFiberImplClass(3, null, null, tag);\n containerInfo.current = isStrictMode;\n isStrictMode.stateNode = containerInfo;\n tag = createCache();\n tag.refCount++;\n containerInfo.pooledCache = tag;\n tag.refCount++;\n isStrictMode.memoizedState = {\n element: initialChildren,\n isDehydrated: hydrate,\n cache: tag\n };\n initializeUpdateQueue(isStrictMode);\n return containerInfo;\n}\nfunction getContextForSubtree(parentComponent) {\n if (!parentComponent) return emptyContextObject;\n parentComponent = emptyContextObject;\n return parentComponent;\n}\nfunction updateContainerImpl(\n rootFiber,\n lane,\n element,\n container,\n parentComponent,\n callback\n) {\n parentComponent = getContextForSubtree(parentComponent);\n null === container.context\n ? (container.context = parentComponent)\n : (container.pendingContext = parentComponent);\n container = createUpdate(lane);\n container.payload = { element: element };\n callback = void 0 === callback ? null : callback;\n null !== callback && (container.callback = callback);\n element = enqueueUpdate(rootFiber, container, lane);\n null !== element &&\n (scheduleUpdateOnFiber(element, rootFiber, lane),\n entangleTransitions(element, rootFiber, lane));\n}\nfunction markRetryLaneImpl(fiber, retryLane) {\n fiber = fiber.memoizedState;\n if (null !== fiber && null !== fiber.dehydrated) {\n var a = fiber.retryLane;\n fiber.retryLane = 0 !== a && a < retryLane ? a : retryLane;\n }\n}\nfunction markRetryLaneIfNotHydrated(fiber, retryLane) {\n markRetryLaneImpl(fiber, retryLane);\n (fiber = fiber.alternate) && markRetryLaneImpl(fiber, retryLane);\n}\nfunction attemptContinuousHydration(fiber) {\n if (13 === fiber.tag || 31 === fiber.tag) {\n var root = enqueueConcurrentRenderForLane(fiber, 67108864);\n null !== root && scheduleUpdateOnFiber(root, fiber, 67108864);\n markRetryLaneIfNotHydrated(fiber, 67108864);\n }\n}\nfunction attemptHydrationAtCurrentPriority(fiber) {\n if (13 === fiber.tag || 31 === fiber.tag) {\n var lane = requestUpdateLane();\n lane = getBumpedLaneForHydrationByLane(lane);\n var root = enqueueConcurrentRenderForLane(fiber, lane);\n null !== root && scheduleUpdateOnFiber(root, fiber, lane);\n markRetryLaneIfNotHydrated(fiber, lane);\n }\n}\nvar _enabled = !0;\nfunction dispatchDiscreteEvent(\n domEventName,\n eventSystemFlags,\n container,\n nativeEvent\n) {\n var prevTransition = ReactSharedInternals.T;\n ReactSharedInternals.T = null;\n var previousPriority = ReactDOMSharedInternals.p;\n try {\n (ReactDOMSharedInternals.p = 2),\n dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n } finally {\n (ReactDOMSharedInternals.p = previousPriority),\n (ReactSharedInternals.T = prevTransition);\n }\n}\nfunction dispatchContinuousEvent(\n domEventName,\n eventSystemFlags,\n container,\n nativeEvent\n) {\n var prevTransition = ReactSharedInternals.T;\n ReactSharedInternals.T = null;\n var previousPriority = ReactDOMSharedInternals.p;\n try {\n (ReactDOMSharedInternals.p = 8),\n dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n } finally {\n (ReactDOMSharedInternals.p = previousPriority),\n (ReactSharedInternals.T = prevTransition);\n }\n}\nfunction dispatchEvent(\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n) {\n if (_enabled) {\n var blockedOn = findInstanceBlockingEvent(nativeEvent);\n if (null === blockedOn)\n dispatchEventForPluginEventSystem(\n domEventName,\n eventSystemFlags,\n nativeEvent,\n return_targetInst,\n targetContainer\n ),\n clearIfContinuousEvent(domEventName, nativeEvent);\n else if (\n queueIfContinuousEvent(\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )\n )\n nativeEvent.stopPropagation();\n else if (\n (clearIfContinuousEvent(domEventName, nativeEvent),\n eventSystemFlags & 4 &&\n -1 < discreteReplayableEvents.indexOf(domEventName))\n ) {\n for (; null !== blockedOn; ) {\n var fiber = getInstanceFromNode(blockedOn);\n if (null !== fiber)\n switch (fiber.tag) {\n case 3:\n fiber = fiber.stateNode;\n if (fiber.current.memoizedState.isDehydrated) {\n var lanes = getHighestPriorityLanes(fiber.pendingLanes);\n if (0 !== lanes) {\n var root = fiber;\n root.pendingLanes |= 2;\n for (root.entangledLanes |= 2; lanes; ) {\n var lane = 1 << (31 - clz32(lanes));\n root.entanglements[1] |= lane;\n lanes &= ~lane;\n }\n ensureRootIsScheduled(fiber);\n 0 === (executionContext & 6) &&\n ((workInProgressRootRenderTargetTime = now() + 500),\n flushSyncWorkAcrossRoots_impl(0, !1));\n }\n }\n break;\n case 31:\n case 13:\n (root = enqueueConcurrentRenderForLane(fiber, 2)),\n null !== root && scheduleUpdateOnFiber(root, fiber, 2),\n flushSyncWork$1(),\n markRetryLaneIfNotHydrated(fiber, 2);\n }\n fiber = findInstanceBlockingEvent(nativeEvent);\n null === fiber &&\n dispatchEventForPluginEventSystem(\n domEventName,\n eventSystemFlags,\n nativeEvent,\n return_targetInst,\n targetContainer\n );\n if (fiber === blockedOn) break;\n blockedOn = fiber;\n }\n null !== blockedOn && nativeEvent.stopPropagation();\n } else\n dispatchEventForPluginEventSystem(\n domEventName,\n eventSystemFlags,\n nativeEvent,\n null,\n targetContainer\n );\n }\n}\nfunction findInstanceBlockingEvent(nativeEvent) {\n nativeEvent = getEventTarget(nativeEvent);\n return findInstanceBlockingTarget(nativeEvent);\n}\nvar return_targetInst = null;\nfunction findInstanceBlockingTarget(targetNode) {\n return_targetInst = null;\n targetNode = getClosestInstanceFromNode(targetNode);\n if (null !== targetNode) {\n var nearestMounted = getNearestMountedFiber(targetNode);\n if (null === nearestMounted) targetNode = null;\n else {\n var tag = nearestMounted.tag;\n if (13 === tag) {\n targetNode = getSuspenseInstanceFromFiber(nearestMounted);\n if (null !== targetNode) return targetNode;\n targetNode = null;\n } else if (31 === tag) {\n targetNode = getActivityInstanceFromFiber(nearestMounted);\n if (null !== targetNode) return targetNode;\n targetNode = null;\n } else if (3 === tag) {\n if (nearestMounted.stateNode.current.memoizedState.isDehydrated)\n return 3 === nearestMounted.tag\n ? nearestMounted.stateNode.containerInfo\n : null;\n targetNode = null;\n } else nearestMounted !== targetNode && (targetNode = null);\n }\n }\n return_targetInst = targetNode;\n return null;\n}\nfunction getEventPriority(domEventName) {\n switch (domEventName) {\n case \"beforetoggle\":\n case \"cancel\":\n case \"click\":\n case \"close\":\n case \"contextmenu\":\n case \"copy\":\n case \"cut\":\n case \"auxclick\":\n case \"dblclick\":\n case \"dragend\":\n case \"dragstart\":\n case \"drop\":\n case \"focusin\":\n case \"focusout\":\n case \"input\":\n case \"invalid\":\n case \"keydown\":\n case \"keypress\":\n case \"keyup\":\n case \"mousedown\":\n case \"mouseup\":\n case \"paste\":\n case \"pause\":\n case \"play\":\n case \"pointercancel\":\n case \"pointerdown\":\n case \"pointerup\":\n case \"ratechange\":\n case \"reset\":\n case \"resize\":\n case \"seeked\":\n case \"submit\":\n case \"toggle\":\n case \"touchcancel\":\n case \"touchend\":\n case \"touchstart\":\n case \"volumechange\":\n case \"change\":\n case \"selectionchange\":\n case \"textInput\":\n case \"compositionstart\":\n case \"compositionend\":\n case \"compositionupdate\":\n case \"beforeblur\":\n case \"afterblur\":\n case \"beforeinput\":\n case \"blur\":\n case \"fullscreenchange\":\n case \"focus\":\n case \"hashchange\":\n case \"popstate\":\n case \"select\":\n case \"selectstart\":\n return 2;\n case \"drag\":\n case \"dragenter\":\n case \"dragexit\":\n case \"dragleave\":\n case \"dragover\":\n case \"mousemove\":\n case \"mouseout\":\n case \"mouseover\":\n case \"pointermove\":\n case \"pointerout\":\n case \"pointerover\":\n case \"scroll\":\n case \"touchmove\":\n case \"wheel\":\n case \"mouseenter\":\n case \"mouseleave\":\n case \"pointerenter\":\n case \"pointerleave\":\n return 8;\n case \"message\":\n switch (getCurrentPriorityLevel()) {\n case ImmediatePriority:\n return 2;\n case UserBlockingPriority:\n return 8;\n case NormalPriority$1:\n case LowPriority:\n return 32;\n case IdlePriority:\n return 268435456;\n default:\n return 32;\n }\n default:\n return 32;\n }\n}\nvar hasScheduledReplayAttempt = !1,\n queuedFocus = null,\n queuedDrag = null,\n queuedMouse = null,\n queuedPointers = new Map(),\n queuedPointerCaptures = new Map(),\n queuedExplicitHydrationTargets = [],\n discreteReplayableEvents =\n \"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset\".split(\n \" \"\n );\nfunction clearIfContinuousEvent(domEventName, nativeEvent) {\n switch (domEventName) {\n case \"focusin\":\n case \"focusout\":\n queuedFocus = null;\n break;\n case \"dragenter\":\n case \"dragleave\":\n queuedDrag = null;\n break;\n case \"mouseover\":\n case \"mouseout\":\n queuedMouse = null;\n break;\n case \"pointerover\":\n case \"pointerout\":\n queuedPointers.delete(nativeEvent.pointerId);\n break;\n case \"gotpointercapture\":\n case \"lostpointercapture\":\n queuedPointerCaptures.delete(nativeEvent.pointerId);\n }\n}\nfunction accumulateOrCreateContinuousQueuedReplayableEvent(\n existingQueuedEvent,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n) {\n if (\n null === existingQueuedEvent ||\n existingQueuedEvent.nativeEvent !== nativeEvent\n )\n return (\n (existingQueuedEvent = {\n blockedOn: blockedOn,\n domEventName: domEventName,\n eventSystemFlags: eventSystemFlags,\n nativeEvent: nativeEvent,\n targetContainers: [targetContainer]\n }),\n null !== blockedOn &&\n ((blockedOn = getInstanceFromNode(blockedOn)),\n null !== blockedOn && attemptContinuousHydration(blockedOn)),\n existingQueuedEvent\n );\n existingQueuedEvent.eventSystemFlags |= eventSystemFlags;\n blockedOn = existingQueuedEvent.targetContainers;\n null !== targetContainer &&\n -1 === blockedOn.indexOf(targetContainer) &&\n blockedOn.push(targetContainer);\n return existingQueuedEvent;\n}\nfunction queueIfContinuousEvent(\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n) {\n switch (domEventName) {\n case \"focusin\":\n return (\n (queuedFocus = accumulateOrCreateContinuousQueuedReplayableEvent(\n queuedFocus,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )),\n !0\n );\n case \"dragenter\":\n return (\n (queuedDrag = accumulateOrCreateContinuousQueuedReplayableEvent(\n queuedDrag,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )),\n !0\n );\n case \"mouseover\":\n return (\n (queuedMouse = accumulateOrCreateContinuousQueuedReplayableEvent(\n queuedMouse,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )),\n !0\n );\n case \"pointerover\":\n var pointerId = nativeEvent.pointerId;\n queuedPointers.set(\n pointerId,\n accumulateOrCreateContinuousQueuedReplayableEvent(\n queuedPointers.get(pointerId) || null,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )\n );\n return !0;\n case \"gotpointercapture\":\n return (\n (pointerId = nativeEvent.pointerId),\n queuedPointerCaptures.set(\n pointerId,\n accumulateOrCreateContinuousQueuedReplayableEvent(\n queuedPointerCaptures.get(pointerId) || null,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )\n ),\n !0\n );\n }\n return !1;\n}\nfunction attemptExplicitHydrationTarget(queuedTarget) {\n var targetInst = getClosestInstanceFromNode(queuedTarget.target);\n if (null !== targetInst) {\n var nearestMounted = getNearestMountedFiber(targetInst);\n if (null !== nearestMounted)\n if (((targetInst = nearestMounted.tag), 13 === targetInst)) {\n if (\n ((targetInst = getSuspenseInstanceFromFiber(nearestMounted)),\n null !== targetInst)\n ) {\n queuedTarget.blockedOn = targetInst;\n runWithPriority(queuedTarget.priority, function () {\n attemptHydrationAtCurrentPriority(nearestMounted);\n });\n return;\n }\n } else if (31 === targetInst) {\n if (\n ((targetInst = getActivityInstanceFromFiber(nearestMounted)),\n null !== targetInst)\n ) {\n queuedTarget.blockedOn = targetInst;\n runWithPriority(queuedTarget.priority, function () {\n attemptHydrationAtCurrentPriority(nearestMounted);\n });\n return;\n }\n } else if (\n 3 === targetInst &&\n nearestMounted.stateNode.current.memoizedState.isDehydrated\n ) {\n queuedTarget.blockedOn =\n 3 === nearestMounted.tag\n ? nearestMounted.stateNode.containerInfo\n : null;\n return;\n }\n }\n queuedTarget.blockedOn = null;\n}\nfunction attemptReplayContinuousQueuedEvent(queuedEvent) {\n if (null !== queuedEvent.blockedOn) return !1;\n for (\n var targetContainers = queuedEvent.targetContainers;\n 0 < targetContainers.length;\n\n ) {\n var nextBlockedOn = findInstanceBlockingEvent(queuedEvent.nativeEvent);\n if (null === nextBlockedOn) {\n nextBlockedOn = queuedEvent.nativeEvent;\n var nativeEventClone = new nextBlockedOn.constructor(\n nextBlockedOn.type,\n nextBlockedOn\n );\n currentReplayingEvent = nativeEventClone;\n nextBlockedOn.target.dispatchEvent(nativeEventClone);\n currentReplayingEvent = null;\n } else\n return (\n (targetContainers = getInstanceFromNode(nextBlockedOn)),\n null !== targetContainers &&\n attemptContinuousHydration(targetContainers),\n (queuedEvent.blockedOn = nextBlockedOn),\n !1\n );\n targetContainers.shift();\n }\n return !0;\n}\nfunction attemptReplayContinuousQueuedEventInMap(queuedEvent, key, map) {\n attemptReplayContinuousQueuedEvent(queuedEvent) && map.delete(key);\n}\nfunction replayUnblockedEvents() {\n hasScheduledReplayAttempt = !1;\n null !== queuedFocus &&\n attemptReplayContinuousQueuedEvent(queuedFocus) &&\n (queuedFocus = null);\n null !== queuedDrag &&\n attemptReplayContinuousQueuedEvent(queuedDrag) &&\n (queuedDrag = null);\n null !== queuedMouse &&\n attemptReplayContinuousQueuedEvent(queuedMouse) &&\n (queuedMouse = null);\n queuedPointers.forEach(attemptReplayContinuousQueuedEventInMap);\n queuedPointerCaptures.forEach(attemptReplayContinuousQueuedEventInMap);\n}\nfunction scheduleCallbackIfUnblocked(queuedEvent, unblocked) {\n queuedEvent.blockedOn === unblocked &&\n ((queuedEvent.blockedOn = null),\n hasScheduledReplayAttempt ||\n ((hasScheduledReplayAttempt = !0),\n Scheduler.unstable_scheduleCallback(\n Scheduler.unstable_NormalPriority,\n replayUnblockedEvents\n )));\n}\nvar lastScheduledReplayQueue = null;\nfunction scheduleReplayQueueIfNeeded(formReplayingQueue) {\n lastScheduledReplayQueue !== formReplayingQueue &&\n ((lastScheduledReplayQueue = formReplayingQueue),\n Scheduler.unstable_scheduleCallback(\n Scheduler.unstable_NormalPriority,\n function () {\n lastScheduledReplayQueue === formReplayingQueue &&\n (lastScheduledReplayQueue = null);\n for (var i = 0; i < formReplayingQueue.length; i += 3) {\n var form = formReplayingQueue[i],\n submitterOrAction = formReplayingQueue[i + 1],\n formData = formReplayingQueue[i + 2];\n if (\"function\" !== typeof submitterOrAction)\n if (null === findInstanceBlockingTarget(submitterOrAction || form))\n continue;\n else break;\n var formInst = getInstanceFromNode(form);\n null !== formInst &&\n (formReplayingQueue.splice(i, 3),\n (i -= 3),\n startHostTransition(\n formInst,\n {\n pending: !0,\n data: formData,\n method: form.method,\n action: submitterOrAction\n },\n submitterOrAction,\n formData\n ));\n }\n }\n ));\n}\nfunction retryIfBlockedOn(unblocked) {\n function unblock(queuedEvent) {\n return scheduleCallbackIfUnblocked(queuedEvent, unblocked);\n }\n null !== queuedFocus && scheduleCallbackIfUnblocked(queuedFocus, unblocked);\n null !== queuedDrag && scheduleCallbackIfUnblocked(queuedDrag, unblocked);\n null !== queuedMouse && scheduleCallbackIfUnblocked(queuedMouse, unblocked);\n queuedPointers.forEach(unblock);\n queuedPointerCaptures.forEach(unblock);\n for (var i = 0; i < queuedExplicitHydrationTargets.length; i++) {\n var queuedTarget = queuedExplicitHydrationTargets[i];\n queuedTarget.blockedOn === unblocked && (queuedTarget.blockedOn = null);\n }\n for (\n ;\n 0 < queuedExplicitHydrationTargets.length &&\n ((i = queuedExplicitHydrationTargets[0]), null === i.blockedOn);\n\n )\n attemptExplicitHydrationTarget(i),\n null === i.blockedOn && queuedExplicitHydrationTargets.shift();\n i = (unblocked.ownerDocument || unblocked).$$reactFormReplay;\n if (null != i)\n for (queuedTarget = 0; queuedTarget < i.length; queuedTarget += 3) {\n var form = i[queuedTarget],\n submitterOrAction = i[queuedTarget + 1],\n formProps = form[internalPropsKey] || null;\n if (\"function\" === typeof submitterOrAction)\n formProps || scheduleReplayQueueIfNeeded(i);\n else if (formProps) {\n var action = null;\n if (submitterOrAction && submitterOrAction.hasAttribute(\"formAction\"))\n if (\n ((form = submitterOrAction),\n (formProps = submitterOrAction[internalPropsKey] || null))\n )\n action = formProps.formAction;\n else {\n if (null !== findInstanceBlockingTarget(form)) continue;\n }\n else action = formProps.action;\n \"function\" === typeof action\n ? (i[queuedTarget + 1] = action)\n : (i.splice(queuedTarget, 3), (queuedTarget -= 3));\n scheduleReplayQueueIfNeeded(i);\n }\n }\n}\nfunction defaultOnDefaultTransitionIndicator() {\n function handleNavigate(event) {\n event.canIntercept &&\n \"react-transition\" === event.info &&\n event.intercept({\n handler: function () {\n return new Promise(function (resolve) {\n return (pendingResolve = resolve);\n });\n },\n focusReset: \"manual\",\n scroll: \"manual\"\n });\n }\n function handleNavigateComplete() {\n null !== pendingResolve && (pendingResolve(), (pendingResolve = null));\n isCancelled || setTimeout(startFakeNavigation, 20);\n }\n function startFakeNavigation() {\n if (!isCancelled && !navigation.transition) {\n var currentEntry = navigation.currentEntry;\n currentEntry &&\n null != currentEntry.url &&\n navigation.navigate(currentEntry.url, {\n state: currentEntry.getState(),\n info: \"react-transition\",\n history: \"replace\"\n });\n }\n }\n if (\"object\" === typeof navigation) {\n var isCancelled = !1,\n pendingResolve = null;\n navigation.addEventListener(\"navigate\", handleNavigate);\n navigation.addEventListener(\"navigatesuccess\", handleNavigateComplete);\n navigation.addEventListener(\"navigateerror\", handleNavigateComplete);\n setTimeout(startFakeNavigation, 100);\n return function () {\n isCancelled = !0;\n navigation.removeEventListener(\"navigate\", handleNavigate);\n navigation.removeEventListener(\"navigatesuccess\", handleNavigateComplete);\n navigation.removeEventListener(\"navigateerror\", handleNavigateComplete);\n null !== pendingResolve && (pendingResolve(), (pendingResolve = null));\n };\n }\n}\nfunction ReactDOMRoot(internalRoot) {\n this._internalRoot = internalRoot;\n}\nReactDOMHydrationRoot.prototype.render = ReactDOMRoot.prototype.render =\n function (children) {\n var root = this._internalRoot;\n if (null === root) throw Error(formatProdErrorMessage(409));\n var current = root.current,\n lane = requestUpdateLane();\n updateContainerImpl(current, lane, children, root, null, null);\n };\nReactDOMHydrationRoot.prototype.unmount = ReactDOMRoot.prototype.unmount =\n function () {\n var root = this._internalRoot;\n if (null !== root) {\n this._internalRoot = null;\n var container = root.containerInfo;\n updateContainerImpl(root.current, 2, null, root, null, null);\n flushSyncWork$1();\n container[internalContainerInstanceKey] = null;\n }\n };\nfunction ReactDOMHydrationRoot(internalRoot) {\n this._internalRoot = internalRoot;\n}\nReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) {\n if (target) {\n var updatePriority = resolveUpdatePriority();\n target = { blockedOn: null, target: target, priority: updatePriority };\n for (\n var i = 0;\n i < queuedExplicitHydrationTargets.length &&\n 0 !== updatePriority &&\n updatePriority < queuedExplicitHydrationTargets[i].priority;\n i++\n );\n queuedExplicitHydrationTargets.splice(i, 0, target);\n 0 === i && attemptExplicitHydrationTarget(target);\n }\n};\nvar isomorphicReactPackageVersion$jscomp$inline_1840 = React.version;\nif (\n \"19.2.6\" !==\n isomorphicReactPackageVersion$jscomp$inline_1840\n)\n throw Error(\n formatProdErrorMessage(\n 527,\n isomorphicReactPackageVersion$jscomp$inline_1840,\n \"19.2.6\"\n )\n );\nReactDOMSharedInternals.findDOMNode = function (componentOrElement) {\n var fiber = componentOrElement._reactInternals;\n if (void 0 === fiber) {\n if (\"function\" === typeof componentOrElement.render)\n throw Error(formatProdErrorMessage(188));\n componentOrElement = Object.keys(componentOrElement).join(\",\");\n throw Error(formatProdErrorMessage(268, componentOrElement));\n }\n componentOrElement = findCurrentFiberUsingSlowPath(fiber);\n componentOrElement =\n null !== componentOrElement\n ? findCurrentHostFiberImpl(componentOrElement)\n : null;\n componentOrElement =\n null === componentOrElement ? null : componentOrElement.stateNode;\n return componentOrElement;\n};\nvar internals$jscomp$inline_2347 = {\n bundleType: 0,\n version: \"19.2.6\",\n rendererPackageName: \"react-dom\",\n currentDispatcherRef: ReactSharedInternals,\n reconcilerVersion: \"19.2.6\"\n};\nif (\"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {\n var hook$jscomp$inline_2348 = __REACT_DEVTOOLS_GLOBAL_HOOK__;\n if (\n !hook$jscomp$inline_2348.isDisabled &&\n hook$jscomp$inline_2348.supportsFiber\n )\n try {\n (rendererID = hook$jscomp$inline_2348.inject(\n internals$jscomp$inline_2347\n )),\n (injectedHook = hook$jscomp$inline_2348);\n } catch (err) {}\n}\nexports.createRoot = function (container, options) {\n if (!isValidContainer(container)) throw Error(formatProdErrorMessage(299));\n var isStrictMode = !1,\n identifierPrefix = \"\",\n onUncaughtError = defaultOnUncaughtError,\n onCaughtError = defaultOnCaughtError,\n onRecoverableError = defaultOnRecoverableError;\n null !== options &&\n void 0 !== options &&\n (!0 === options.unstable_strictMode && (isStrictMode = !0),\n void 0 !== options.identifierPrefix &&\n (identifierPrefix = options.identifierPrefix),\n void 0 !== options.onUncaughtError &&\n (onUncaughtError = options.onUncaughtError),\n void 0 !== options.onCaughtError && (onCaughtError = options.onCaughtError),\n void 0 !== options.onRecoverableError &&\n (onRecoverableError = options.onRecoverableError));\n options = createFiberRoot(\n container,\n 1,\n !1,\n null,\n null,\n isStrictMode,\n identifierPrefix,\n null,\n onUncaughtError,\n onCaughtError,\n onRecoverableError,\n defaultOnDefaultTransitionIndicator\n );\n container[internalContainerInstanceKey] = options.current;\n listenToAllSupportedEvents(container);\n return new ReactDOMRoot(options);\n};\nexports.hydrateRoot = function (container, initialChildren, options) {\n if (!isValidContainer(container)) throw Error(formatProdErrorMessage(299));\n var isStrictMode = !1,\n identifierPrefix = \"\",\n onUncaughtError = defaultOnUncaughtError,\n onCaughtError = defaultOnCaughtError,\n onRecoverableError = defaultOnRecoverableError,\n formState = null;\n null !== options &&\n void 0 !== options &&\n (!0 === options.unstable_strictMode && (isStrictMode = !0),\n void 0 !== options.identifierPrefix &&\n (identifierPrefix = options.identifierPrefix),\n void 0 !== options.onUncaughtError &&\n (onUncaughtError = options.onUncaughtError),\n void 0 !== options.onCaughtError && (onCaughtError = options.onCaughtError),\n void 0 !== options.onRecoverableError &&\n (onRecoverableError = options.onRecoverableError),\n void 0 !== options.formState && (formState = options.formState));\n initialChildren = createFiberRoot(\n container,\n 1,\n !0,\n initialChildren,\n null != options ? options : null,\n isStrictMode,\n identifierPrefix,\n formState,\n onUncaughtError,\n onCaughtError,\n onRecoverableError,\n defaultOnDefaultTransitionIndicator\n );\n initialChildren.context = getContextForSubtree(null);\n options = initialChildren.current;\n isStrictMode = requestUpdateLane();\n isStrictMode = getBumpedLaneForHydrationByLane(isStrictMode);\n identifierPrefix = createUpdate(isStrictMode);\n identifierPrefix.callback = null;\n enqueueUpdate(options, identifierPrefix, isStrictMode);\n options = isStrictMode;\n initialChildren.current.lanes = options;\n markRootUpdated$1(initialChildren, options);\n ensureRootIsScheduled(initialChildren);\n container[internalContainerInstanceKey] = initialChildren.current;\n listenToAllSupportedEvents(container);\n return new ReactDOMHydrationRoot(initialChildren);\n};\nexports.version = \"19.2.6\";\n", "'use strict';\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (process.env.NODE_ENV === 'production') {\n // DCE check should happen before ReactDOM bundle executes so that\n // DevTools can report bad minification during injection.\n checkDCE();\n module.exports = require('./cjs/react-dom-client.production.js');\n} else {\n module.exports = require('./cjs/react-dom-client.development.js');\n}\n", "/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n", "'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n", "const isString = obj => typeof obj === 'string';\nconst defer = () => {\n let res;\n let rej;\n const promise = new Promise((resolve, reject) => {\n res = resolve;\n rej = reject;\n });\n promise.resolve = res;\n promise.reject = rej;\n return promise;\n};\nconst makeString = object => {\n if (object == null) return '';\n return String(object);\n};\nconst copy = (a, s, t) => {\n a.forEach(m => {\n if (s[m]) t[m] = s[m];\n });\n};\nconst lastOfPathSeparatorRegExp = /###/g;\nconst cleanKey = key => key && key.includes('###') ? key.replace(lastOfPathSeparatorRegExp, '.') : key;\nconst canNotTraverseDeeper = object => !object || isString(object);\nconst getLastOfPath = (object, path, Empty) => {\n const stack = !isString(path) ? path : path.split('.');\n let stackIndex = 0;\n while (stackIndex < stack.length - 1) {\n if (canNotTraverseDeeper(object)) return {};\n const key = cleanKey(stack[stackIndex]);\n if (!object[key] && Empty) object[key] = new Empty();\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n object = object[key];\n } else {\n object = {};\n }\n ++stackIndex;\n }\n if (canNotTraverseDeeper(object)) return {};\n return {\n obj: object,\n k: cleanKey(stack[stackIndex])\n };\n};\nconst setPath = (object, path, newValue) => {\n const {\n obj,\n k\n } = getLastOfPath(object, path, Object);\n if (obj !== undefined || path.length === 1) {\n obj[k] = newValue;\n return;\n }\n let e = path[path.length - 1];\n let p = path.slice(0, path.length - 1);\n let last = getLastOfPath(object, p, Object);\n while (last.obj === undefined && p.length) {\n e = `${p[p.length - 1]}.${e}`;\n p = p.slice(0, p.length - 1);\n last = getLastOfPath(object, p, Object);\n if (last?.obj && typeof last.obj[`${last.k}.${e}`] !== 'undefined') {\n last.obj = undefined;\n }\n }\n last.obj[`${last.k}.${e}`] = newValue;\n};\nconst pushPath = (object, path, newValue, concat) => {\n const {\n obj,\n k\n } = getLastOfPath(object, path, Object);\n obj[k] = obj[k] || [];\n obj[k].push(newValue);\n};\nconst getPath = (object, path) => {\n const {\n obj,\n k\n } = getLastOfPath(object, path);\n if (!obj) return undefined;\n if (!Object.prototype.hasOwnProperty.call(obj, k)) return undefined;\n return obj[k];\n};\nconst getPathWithDefaults = (data, defaultData, key) => {\n const value = getPath(data, key);\n if (value !== undefined) {\n return value;\n }\n return getPath(defaultData, key);\n};\nconst deepExtend = (target, source, overwrite) => {\n for (const prop in source) {\n if (prop !== '__proto__' && prop !== 'constructor') {\n if (prop in target) {\n if (isString(target[prop]) || target[prop] instanceof String || isString(source[prop]) || source[prop] instanceof String) {\n if (overwrite) target[prop] = source[prop];\n } else {\n deepExtend(target[prop], source[prop], overwrite);\n }\n } else {\n target[prop] = source[prop];\n }\n }\n }\n return target;\n};\nconst regexEscape = str => str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\nconst _entityMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/'\n};\nconst escape = data => {\n if (isString(data)) {\n return data.replace(/[&<>\"'\\/]/g, s => _entityMap[s]);\n }\n return data;\n};\nclass RegExpCache {\n constructor(capacity) {\n this.capacity = capacity;\n this.regExpMap = new Map();\n this.regExpQueue = [];\n }\n getRegExp(pattern) {\n const regExpFromCache = this.regExpMap.get(pattern);\n if (regExpFromCache !== undefined) {\n return regExpFromCache;\n }\n const regExpNew = new RegExp(pattern);\n if (this.regExpQueue.length === this.capacity) {\n this.regExpMap.delete(this.regExpQueue.shift());\n }\n this.regExpMap.set(pattern, regExpNew);\n this.regExpQueue.push(pattern);\n return regExpNew;\n }\n}\nconst chars = [' ', ',', '?', '!', ';'];\nconst looksLikeObjectPathRegExpCache = new RegExpCache(20);\nconst looksLikeObjectPath = (key, nsSeparator, keySeparator) => {\n nsSeparator = nsSeparator || '';\n keySeparator = keySeparator || '';\n const possibleChars = chars.filter(c => !nsSeparator.includes(c) && !keySeparator.includes(c));\n if (possibleChars.length === 0) return true;\n const r = looksLikeObjectPathRegExpCache.getRegExp(`(${possibleChars.map(c => c === '?' ? '\\\\?' : c).join('|')})`);\n let matched = !r.test(key);\n if (!matched) {\n const ki = key.indexOf(keySeparator);\n if (ki > 0 && !r.test(key.substring(0, ki))) {\n matched = true;\n }\n }\n return matched;\n};\nconst deepFind = (obj, path, keySeparator = '.') => {\n if (!obj) return undefined;\n if (obj[path]) {\n if (!Object.prototype.hasOwnProperty.call(obj, path)) return undefined;\n return obj[path];\n }\n const tokens = path.split(keySeparator);\n let current = obj;\n for (let i = 0; i < tokens.length;) {\n if (!current || typeof current !== 'object') {\n return undefined;\n }\n let next;\n let nextPath = '';\n for (let j = i; j < tokens.length; ++j) {\n if (j !== i) {\n nextPath += keySeparator;\n }\n nextPath += tokens[j];\n next = current[nextPath];\n if (next !== undefined) {\n if (['string', 'number', 'boolean'].includes(typeof next) && j < tokens.length - 1) {\n continue;\n }\n i += j - i + 1;\n break;\n }\n }\n current = next;\n }\n return current;\n};\nconst getCleanedCode = code => code?.replace(/_/g, '-');\n\nconst consoleLogger = {\n type: 'logger',\n log(args) {\n this.output('log', args);\n },\n warn(args) {\n this.output('warn', args);\n },\n error(args) {\n this.output('error', args);\n },\n output(type, args) {\n console?.[type]?.apply?.(console, args);\n }\n};\nclass Logger {\n constructor(concreteLogger, options = {}) {\n this.init(concreteLogger, options);\n }\n init(concreteLogger, options = {}) {\n this.prefix = options.prefix || 'i18next:';\n this.logger = concreteLogger || consoleLogger;\n this.options = options;\n this.debug = options.debug;\n }\n log(...args) {\n return this.forward(args, 'log', '', true);\n }\n warn(...args) {\n return this.forward(args, 'warn', '', true);\n }\n error(...args) {\n return this.forward(args, 'error', '');\n }\n deprecate(...args) {\n return this.forward(args, 'warn', 'WARNING DEPRECATED: ', true);\n }\n forward(args, lvl, prefix, debugOnly) {\n if (debugOnly && !this.debug) return null;\n args = args.map(a => isString(a) ? a.replace(/[\\r\\n\\x00-\\x1F\\x7F]/g, ' ') : a);\n if (isString(args[0])) args[0] = `${prefix}${this.prefix} ${args[0]}`;\n return this.logger[lvl](args);\n }\n create(moduleName) {\n return new Logger(this.logger, {\n ...{\n prefix: `${this.prefix}:${moduleName}:`\n },\n ...this.options\n });\n }\n clone(options) {\n options = options || this.options;\n options.prefix = options.prefix || this.prefix;\n return new Logger(this.logger, options);\n }\n}\nvar baseLogger = new Logger();\n\nclass EventEmitter {\n constructor() {\n this.observers = {};\n }\n on(events, listener) {\n events.split(' ').forEach(event => {\n if (!this.observers[event]) this.observers[event] = new Map();\n const numListeners = this.observers[event].get(listener) || 0;\n this.observers[event].set(listener, numListeners + 1);\n });\n return this;\n }\n off(event, listener) {\n if (!this.observers[event]) return;\n if (!listener) {\n delete this.observers[event];\n return;\n }\n this.observers[event].delete(listener);\n }\n once(event, listener) {\n const wrapper = (...args) => {\n listener(...args);\n this.off(event, wrapper);\n };\n this.on(event, wrapper);\n return this;\n }\n emit(event, ...args) {\n if (this.observers[event]) {\n const cloned = Array.from(this.observers[event].entries());\n cloned.forEach(([observer, numTimesAdded]) => {\n for (let i = 0; i < numTimesAdded; i++) {\n observer(...args);\n }\n });\n }\n if (this.observers['*']) {\n const cloned = Array.from(this.observers['*'].entries());\n cloned.forEach(([observer, numTimesAdded]) => {\n for (let i = 0; i < numTimesAdded; i++) {\n observer(event, ...args);\n }\n });\n }\n }\n}\n\nclass ResourceStore extends EventEmitter {\n constructor(data, options = {\n ns: ['translation'],\n defaultNS: 'translation'\n }) {\n super();\n this.data = data || {};\n this.options = options;\n if (this.options.keySeparator === undefined) {\n this.options.keySeparator = '.';\n }\n if (this.options.ignoreJSONStructure === undefined) {\n this.options.ignoreJSONStructure = true;\n }\n }\n addNamespaces(ns) {\n if (!this.options.ns.includes(ns)) {\n this.options.ns.push(ns);\n }\n }\n removeNamespaces(ns) {\n const index = this.options.ns.indexOf(ns);\n if (index > -1) {\n this.options.ns.splice(index, 1);\n }\n }\n getResource(lng, ns, key, options = {}) {\n const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n const ignoreJSONStructure = options.ignoreJSONStructure !== undefined ? options.ignoreJSONStructure : this.options.ignoreJSONStructure;\n let path;\n if (lng.includes('.')) {\n path = lng.split('.');\n } else {\n path = [lng, ns];\n if (key) {\n if (Array.isArray(key)) {\n path.push(...key);\n } else if (isString(key) && keySeparator) {\n path.push(...key.split(keySeparator));\n } else {\n path.push(key);\n }\n }\n }\n const result = getPath(this.data, path);\n if (!result && !ns && !key && lng.includes('.')) {\n lng = path[0];\n ns = path[1];\n key = path.slice(2).join('.');\n }\n if (result || !ignoreJSONStructure || !isString(key)) return result;\n return deepFind(this.data?.[lng]?.[ns], key, keySeparator);\n }\n addResource(lng, ns, key, value, options = {\n silent: false\n }) {\n const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n let path = [lng, ns];\n if (key) path = path.concat(keySeparator ? key.split(keySeparator) : key);\n if (lng.includes('.')) {\n path = lng.split('.');\n value = ns;\n ns = path[1];\n }\n this.addNamespaces(ns);\n setPath(this.data, path, value);\n if (!options.silent) this.emit('added', lng, ns, key, value);\n }\n addResources(lng, ns, resources, options = {\n silent: false\n }) {\n for (const m in resources) {\n if (isString(resources[m]) || Array.isArray(resources[m])) this.addResource(lng, ns, m, resources[m], {\n silent: true\n });\n }\n if (!options.silent) this.emit('added', lng, ns, resources);\n }\n addResourceBundle(lng, ns, resources, deep, overwrite, options = {\n silent: false,\n skipCopy: false\n }) {\n let path = [lng, ns];\n if (lng.includes('.')) {\n path = lng.split('.');\n deep = resources;\n resources = ns;\n ns = path[1];\n }\n this.addNamespaces(ns);\n let pack = getPath(this.data, path) || {};\n if (!options.skipCopy) resources = JSON.parse(JSON.stringify(resources));\n if (deep) {\n deepExtend(pack, resources, overwrite);\n } else {\n pack = {\n ...pack,\n ...resources\n };\n }\n setPath(this.data, path, pack);\n if (!options.silent) this.emit('added', lng, ns, resources);\n }\n removeResourceBundle(lng, ns) {\n if (this.hasResourceBundle(lng, ns)) {\n delete this.data[lng][ns];\n }\n this.removeNamespaces(ns);\n this.emit('removed', lng, ns);\n }\n hasResourceBundle(lng, ns) {\n return this.getResource(lng, ns) !== undefined;\n }\n getResourceBundle(lng, ns) {\n if (!ns) ns = this.options.defaultNS;\n return this.getResource(lng, ns);\n }\n getDataByLanguage(lng) {\n return this.data[lng];\n }\n hasLanguageSomeTranslations(lng) {\n const data = this.getDataByLanguage(lng);\n const n = data && Object.keys(data) || [];\n return !!n.find(v => data[v] && Object.keys(data[v]).length > 0);\n }\n toJSON() {\n return this.data;\n }\n}\n\nvar postProcessor = {\n processors: {},\n addPostProcessor(module) {\n this.processors[module.name] = module;\n },\n handle(processors, value, key, options, translator) {\n processors.forEach(processor => {\n value = this.processors[processor]?.process(value, key, options, translator) ?? value;\n });\n return value;\n }\n};\n\nconst PATH_KEY = Symbol('i18next/PATH_KEY');\nfunction createProxy() {\n const state = [];\n const handler = Object.create(null);\n let proxy;\n handler.get = (target, key) => {\n proxy?.revoke?.();\n if (key === PATH_KEY) return state;\n state.push(key);\n proxy = Proxy.revocable(target, handler);\n return proxy.proxy;\n };\n return Proxy.revocable(Object.create(null), handler).proxy;\n}\nfunction keysFromSelector(selector, opts) {\n const {\n [PATH_KEY]: path\n } = selector(createProxy());\n const keySeparator = opts?.keySeparator ?? '.';\n const nsSeparator = opts?.nsSeparator ?? ':';\n const strict = opts?.enableSelector === 'strict';\n if (path.length > 1 && nsSeparator) {\n const ns = opts?.ns;\n const nsList = strict ? Array.isArray(ns) ? ns : ns ? [ns] : null : Array.isArray(ns) ? ns : null;\n if (nsList) {\n const candidates = strict ? nsList : nsList.length > 1 ? nsList.slice(1) : [];\n if (candidates.includes(path[0])) {\n return `${path[0]}${nsSeparator}${path.slice(1).join(keySeparator)}`;\n }\n }\n }\n return path.join(keySeparator);\n}\n\nconst shouldHandleAsObject = res => !isString(res) && typeof res !== 'boolean' && typeof res !== 'number';\nclass Translator extends EventEmitter {\n constructor(services, options = {}) {\n super();\n copy(['resourceStore', 'languageUtils', 'pluralResolver', 'interpolator', 'backendConnector', 'i18nFormat', 'utils'], services, this);\n this.options = options;\n if (this.options.keySeparator === undefined) {\n this.options.keySeparator = '.';\n }\n this.logger = baseLogger.create('translator');\n this.checkedLoadedFor = {};\n }\n changeLanguage(lng) {\n if (lng) this.language = lng;\n }\n exists(key, o = {\n interpolation: {}\n }) {\n const opt = {\n ...o\n };\n if (key == null) return false;\n const resolved = this.resolve(key, opt);\n if (resolved?.res === undefined) return false;\n const isObject = shouldHandleAsObject(resolved.res);\n if (opt.returnObjects === false && isObject) {\n return false;\n }\n return true;\n }\n extractFromKey(key, opt) {\n let nsSeparator = opt.nsSeparator !== undefined ? opt.nsSeparator : this.options.nsSeparator;\n if (nsSeparator === undefined) nsSeparator = ':';\n const keySeparator = opt.keySeparator !== undefined ? opt.keySeparator : this.options.keySeparator;\n let namespaces = opt.ns || this.options.defaultNS || [];\n const wouldCheckForNsInKey = nsSeparator && key.includes(nsSeparator);\n const seemsNaturalLanguage = !this.options.userDefinedKeySeparator && !opt.keySeparator && !this.options.userDefinedNsSeparator && !opt.nsSeparator && !looksLikeObjectPath(key, nsSeparator, keySeparator);\n if (wouldCheckForNsInKey && !seemsNaturalLanguage) {\n const m = key.match(this.interpolator.nestingRegexp);\n if (m && m.length > 0) {\n return {\n key,\n namespaces: isString(namespaces) ? [namespaces] : namespaces\n };\n }\n const parts = key.split(nsSeparator);\n if (nsSeparator !== keySeparator || nsSeparator === keySeparator && this.options.ns.includes(parts[0])) namespaces = parts.shift();\n key = parts.join(keySeparator);\n }\n return {\n key,\n namespaces: isString(namespaces) ? [namespaces] : namespaces\n };\n }\n translate(keys, o, lastKey) {\n let opt = typeof o === 'object' ? {\n ...o\n } : o;\n if (typeof opt !== 'object' && this.options.overloadTranslationOptionHandler) {\n opt = this.options.overloadTranslationOptionHandler(arguments);\n }\n if (typeof opt === 'object') opt = {\n ...opt\n };\n if (!opt) opt = {};\n if (keys == null) return '';\n if (typeof keys === 'function') keys = keysFromSelector(keys, {\n ...this.options,\n ...opt\n });\n if (!Array.isArray(keys)) keys = [String(keys)];\n keys = keys.map(k => typeof k === 'function' ? keysFromSelector(k, {\n ...this.options,\n ...opt\n }) : String(k));\n const returnDetails = opt.returnDetails !== undefined ? opt.returnDetails : this.options.returnDetails;\n const keySeparator = opt.keySeparator !== undefined ? opt.keySeparator : this.options.keySeparator;\n const {\n key,\n namespaces\n } = this.extractFromKey(keys[keys.length - 1], opt);\n const namespace = namespaces[namespaces.length - 1];\n let nsSeparator = opt.nsSeparator !== undefined ? opt.nsSeparator : this.options.nsSeparator;\n if (nsSeparator === undefined) nsSeparator = ':';\n const lng = opt.lng || this.language;\n const appendNamespaceToCIMode = opt.appendNamespaceToCIMode || this.options.appendNamespaceToCIMode;\n if (lng?.toLowerCase() === 'cimode') {\n if (appendNamespaceToCIMode) {\n if (returnDetails) {\n return {\n res: `${namespace}${nsSeparator}${key}`,\n usedKey: key,\n exactUsedKey: key,\n usedLng: lng,\n usedNS: namespace,\n usedParams: this.getUsedParamsDetails(opt)\n };\n }\n return `${namespace}${nsSeparator}${key}`;\n }\n if (returnDetails) {\n return {\n res: key,\n usedKey: key,\n exactUsedKey: key,\n usedLng: lng,\n usedNS: namespace,\n usedParams: this.getUsedParamsDetails(opt)\n };\n }\n return key;\n }\n const resolved = this.resolve(keys, opt);\n let res = resolved?.res;\n const resUsedKey = resolved?.usedKey || key;\n const resExactUsedKey = resolved?.exactUsedKey || key;\n const noObject = ['[object Number]', '[object Function]', '[object RegExp]'];\n const joinArrays = opt.joinArrays !== undefined ? opt.joinArrays : this.options.joinArrays;\n const handleAsObjectInI18nFormat = !this.i18nFormat || this.i18nFormat.handleAsObject;\n const needsPluralHandling = opt.count !== undefined && !isString(opt.count);\n const hasDefaultValue = Translator.hasDefaultValue(opt);\n const defaultValueSuffix = needsPluralHandling ? this.pluralResolver.getSuffix(lng, opt.count, opt) : '';\n const defaultValueSuffixOrdinalFallback = opt.ordinal && needsPluralHandling ? this.pluralResolver.getSuffix(lng, opt.count, {\n ordinal: false\n }) : '';\n const needsZeroSuffixLookup = needsPluralHandling && !opt.ordinal && opt.count === 0;\n const defaultValue = needsZeroSuffixLookup && opt[`defaultValue${this.options.pluralSeparator}zero`] || opt[`defaultValue${defaultValueSuffix}`] || opt[`defaultValue${defaultValueSuffixOrdinalFallback}`] || opt.defaultValue;\n let resForObjHndl = res;\n if (handleAsObjectInI18nFormat && !res && hasDefaultValue) {\n resForObjHndl = defaultValue;\n }\n const handleAsObject = shouldHandleAsObject(resForObjHndl);\n const resType = Object.prototype.toString.apply(resForObjHndl);\n if (handleAsObjectInI18nFormat && resForObjHndl && handleAsObject && !noObject.includes(resType) && !(isString(joinArrays) && Array.isArray(resForObjHndl))) {\n if (!opt.returnObjects && !this.options.returnObjects) {\n if (!this.options.returnedObjectHandler) {\n this.logger.warn('accessing an object - but returnObjects options is not enabled!');\n }\n const r = this.options.returnedObjectHandler ? this.options.returnedObjectHandler(resUsedKey, resForObjHndl, {\n ...opt,\n ns: namespaces\n }) : `key '${key} (${this.language})' returned an object instead of string.`;\n if (returnDetails) {\n resolved.res = r;\n resolved.usedParams = this.getUsedParamsDetails(opt);\n return resolved;\n }\n return r;\n }\n if (keySeparator) {\n const resTypeIsArray = Array.isArray(resForObjHndl);\n const copy = resTypeIsArray ? [] : {};\n const newKeyToUse = resTypeIsArray ? resExactUsedKey : resUsedKey;\n for (const m in resForObjHndl) {\n if (Object.prototype.hasOwnProperty.call(resForObjHndl, m)) {\n const deepKey = `${newKeyToUse}${keySeparator}${m}`;\n if (hasDefaultValue && !res) {\n copy[m] = this.translate(deepKey, {\n ...opt,\n defaultValue: shouldHandleAsObject(defaultValue) ? defaultValue[m] : undefined,\n ...{\n joinArrays: false,\n ns: namespaces\n }\n });\n } else {\n copy[m] = this.translate(deepKey, {\n ...opt,\n ...{\n joinArrays: false,\n ns: namespaces\n }\n });\n }\n if (copy[m] === deepKey) copy[m] = resForObjHndl[m];\n }\n }\n res = copy;\n }\n } else if (handleAsObjectInI18nFormat && isString(joinArrays) && Array.isArray(res)) {\n res = res.join(joinArrays);\n if (res) res = this.extendTranslation(res, keys, opt, lastKey);\n } else {\n let usedDefault = false;\n let usedKey = false;\n if (!this.isValidLookup(res) && hasDefaultValue) {\n usedDefault = true;\n res = defaultValue;\n }\n if (!this.isValidLookup(res)) {\n usedKey = true;\n res = key;\n }\n const missingKeyNoValueFallbackToKey = opt.missingKeyNoValueFallbackToKey || this.options.missingKeyNoValueFallbackToKey;\n const resForMissing = missingKeyNoValueFallbackToKey && usedKey ? undefined : res;\n const updateMissing = hasDefaultValue && defaultValue !== res && this.options.updateMissing;\n if (usedKey || usedDefault || updateMissing) {\n this.logger.log(updateMissing ? 'updateKey' : 'missingKey', lng, namespace, needsPluralHandling && !updateMissing ? `${key}${this.pluralResolver.getSuffix(lng, opt.count, opt)}` : key, updateMissing ? defaultValue : res);\n if (keySeparator) {\n const fk = this.resolve(key, {\n ...opt,\n keySeparator: false\n });\n if (fk && fk.res) this.logger.warn('Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.');\n }\n let lngs = [];\n const fallbackLngs = this.languageUtils.getFallbackCodes(this.options.fallbackLng, opt.lng || this.language);\n if (this.options.saveMissingTo === 'fallback' && fallbackLngs && fallbackLngs[0]) {\n for (let i = 0; i < fallbackLngs.length; i++) {\n lngs.push(fallbackLngs[i]);\n }\n } else if (this.options.saveMissingTo === 'all') {\n lngs = this.languageUtils.toResolveHierarchy(opt.lng || this.language);\n } else {\n lngs.push(opt.lng || this.language);\n }\n const send = (l, k, specificDefaultValue) => {\n const defaultForMissing = hasDefaultValue && specificDefaultValue !== res ? specificDefaultValue : resForMissing;\n if (this.options.missingKeyHandler) {\n this.options.missingKeyHandler(l, namespace, k, defaultForMissing, updateMissing, opt);\n } else if (this.backendConnector?.saveMissing) {\n this.backendConnector.saveMissing(l, namespace, k, defaultForMissing, updateMissing, opt);\n }\n this.emit('missingKey', l, namespace, k, res);\n };\n if (this.options.saveMissing) {\n if (this.options.saveMissingPlurals && needsPluralHandling) {\n lngs.forEach(language => {\n const suffixes = this.pluralResolver.getSuffixes(language, opt);\n if (needsZeroSuffixLookup && opt[`defaultValue${this.options.pluralSeparator}zero`] && !suffixes.includes(`${this.options.pluralSeparator}zero`)) {\n suffixes.push(`${this.options.pluralSeparator}zero`);\n }\n suffixes.forEach(suffix => {\n send([language], key + suffix, opt[`defaultValue${suffix}`] || defaultValue);\n });\n });\n } else {\n send(lngs, key, defaultValue);\n }\n }\n }\n res = this.extendTranslation(res, keys, opt, resolved, lastKey);\n if (usedKey && res === key && this.options.appendNamespaceToMissingKey) {\n res = `${namespace}${nsSeparator}${key}`;\n }\n if ((usedKey || usedDefault) && this.options.parseMissingKeyHandler) {\n res = this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey ? `${namespace}${nsSeparator}${key}` : key, usedDefault ? res : undefined, opt);\n }\n }\n if (returnDetails) {\n resolved.res = res;\n resolved.usedParams = this.getUsedParamsDetails(opt);\n return resolved;\n }\n return res;\n }\n extendTranslation(res, key, opt, resolved, lastKey) {\n if (this.i18nFormat?.parse) {\n res = this.i18nFormat.parse(res, {\n ...this.options.interpolation.defaultVariables,\n ...opt\n }, opt.lng || this.language || resolved.usedLng, resolved.usedNS, resolved.usedKey, {\n resolved\n });\n } else if (!opt.skipInterpolation) {\n if (opt.interpolation) this.interpolator.init({\n ...opt,\n ...{\n interpolation: {\n ...this.options.interpolation,\n ...opt.interpolation\n }\n }\n });\n const skipOnVariables = isString(res) && (opt?.interpolation?.skipOnVariables !== undefined ? opt.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables);\n let nestBef;\n if (skipOnVariables) {\n const nb = res.match(this.interpolator.nestingRegexp);\n nestBef = nb && nb.length;\n }\n let data = opt.replace && !isString(opt.replace) ? opt.replace : opt;\n if (this.options.interpolation.defaultVariables) data = {\n ...this.options.interpolation.defaultVariables,\n ...data\n };\n res = this.interpolator.interpolate(res, data, opt.lng || this.language || resolved.usedLng, opt);\n if (skipOnVariables) {\n const na = res.match(this.interpolator.nestingRegexp);\n const nestAft = na && na.length;\n if (nestBef < nestAft) opt.nest = false;\n }\n if (!opt.lng && resolved && resolved.res) opt.lng = this.language || resolved.usedLng;\n if (opt.nest !== false) res = this.interpolator.nest(res, (...args) => {\n if (lastKey?.[0] === args[0] && !opt.context) {\n this.logger.warn(`It seems you are nesting recursively key: ${args[0]} in key: ${key[0]}`);\n return null;\n }\n return this.translate(...args, key);\n }, opt);\n if (opt.interpolation) this.interpolator.reset();\n }\n const postProcess = opt.postProcess || this.options.postProcess;\n const postProcessorNames = isString(postProcess) ? [postProcess] : postProcess;\n if (res != null && postProcessorNames?.length && opt.applyPostProcessor !== false) {\n res = postProcessor.handle(postProcessorNames, res, key, this.options && this.options.postProcessPassResolved ? {\n i18nResolved: {\n ...resolved,\n usedParams: this.getUsedParamsDetails(opt)\n },\n ...opt\n } : opt, this);\n }\n return res;\n }\n resolve(keys, opt = {}) {\n let found;\n let usedKey;\n let exactUsedKey;\n let usedLng;\n let usedNS;\n if (isString(keys)) keys = [keys];\n if (Array.isArray(keys)) keys = keys.map(k => typeof k === 'function' ? keysFromSelector(k, {\n ...this.options,\n ...opt\n }) : k);\n keys.forEach(k => {\n if (this.isValidLookup(found)) return;\n const extracted = this.extractFromKey(k, opt);\n const key = extracted.key;\n usedKey = key;\n let namespaces = extracted.namespaces;\n if (this.options.fallbackNS) namespaces = namespaces.concat(this.options.fallbackNS);\n const needsPluralHandling = opt.count !== undefined && !isString(opt.count);\n const needsZeroSuffixLookup = needsPluralHandling && !opt.ordinal && opt.count === 0;\n const needsContextHandling = opt.context !== undefined && (isString(opt.context) || typeof opt.context === 'number') && opt.context !== '';\n const codes = opt.lngs ? opt.lngs : this.languageUtils.toResolveHierarchy(opt.lng || this.language, opt.fallbackLng);\n namespaces.forEach(ns => {\n if (this.isValidLookup(found)) return;\n usedNS = ns;\n if (!this.checkedLoadedFor[`${codes[0]}-${ns}`] && this.utils?.hasLoadedNamespace && !this.utils?.hasLoadedNamespace(usedNS)) {\n this.checkedLoadedFor[`${codes[0]}-${ns}`] = true;\n this.logger.warn(`key \"${usedKey}\" for languages \"${codes.join(', ')}\" won't get resolved as namespace \"${usedNS}\" was not yet loaded`, 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n }\n codes.forEach(code => {\n if (this.isValidLookup(found)) return;\n usedLng = code;\n const finalKeys = [key];\n if (this.i18nFormat?.addLookupKeys) {\n this.i18nFormat.addLookupKeys(finalKeys, key, code, ns, opt);\n } else {\n let pluralSuffix;\n if (needsPluralHandling) pluralSuffix = this.pluralResolver.getSuffix(code, opt.count, opt);\n const zeroSuffix = `${this.options.pluralSeparator}zero`;\n const ordinalPrefix = `${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;\n if (needsPluralHandling) {\n if (opt.ordinal && pluralSuffix.startsWith(ordinalPrefix)) {\n finalKeys.push(key + pluralSuffix.replace(ordinalPrefix, this.options.pluralSeparator));\n }\n finalKeys.push(key + pluralSuffix);\n if (needsZeroSuffixLookup) {\n finalKeys.push(key + zeroSuffix);\n }\n }\n if (needsContextHandling) {\n const contextKey = `${key}${this.options.contextSeparator || '_'}${opt.context}`;\n finalKeys.push(contextKey);\n if (needsPluralHandling) {\n if (opt.ordinal && pluralSuffix.startsWith(ordinalPrefix)) {\n finalKeys.push(contextKey + pluralSuffix.replace(ordinalPrefix, this.options.pluralSeparator));\n }\n finalKeys.push(contextKey + pluralSuffix);\n if (needsZeroSuffixLookup) {\n finalKeys.push(contextKey + zeroSuffix);\n }\n }\n }\n }\n let possibleKey;\n while (possibleKey = finalKeys.pop()) {\n if (!this.isValidLookup(found)) {\n exactUsedKey = possibleKey;\n found = this.getResource(code, ns, possibleKey, opt);\n }\n }\n });\n });\n });\n return {\n res: found,\n usedKey,\n exactUsedKey,\n usedLng,\n usedNS\n };\n }\n isValidLookup(res) {\n return res !== undefined && !(!this.options.returnNull && res === null) && !(!this.options.returnEmptyString && res === '');\n }\n getResource(code, ns, key, options = {}) {\n if (this.i18nFormat?.getResource) return this.i18nFormat.getResource(code, ns, key, options);\n return this.resourceStore.getResource(code, ns, key, options);\n }\n getUsedParamsDetails(options = {}) {\n const optionsKeys = ['defaultValue', 'ordinal', 'context', 'replace', 'lng', 'lngs', 'fallbackLng', 'ns', 'keySeparator', 'nsSeparator', 'returnObjects', 'returnDetails', 'joinArrays', 'postProcess', 'interpolation'];\n const useOptionsReplaceForData = options.replace && !isString(options.replace);\n let data = useOptionsReplaceForData ? options.replace : options;\n if (useOptionsReplaceForData && typeof options.count !== 'undefined') {\n data.count = options.count;\n }\n if (this.options.interpolation.defaultVariables) {\n data = {\n ...this.options.interpolation.defaultVariables,\n ...data\n };\n }\n if (!useOptionsReplaceForData) {\n data = {\n ...data\n };\n for (const key of optionsKeys) {\n delete data[key];\n }\n }\n return data;\n }\n static hasDefaultValue(options) {\n const prefix = 'defaultValue';\n for (const option in options) {\n if (Object.prototype.hasOwnProperty.call(options, option) && option.startsWith(prefix) && undefined !== options[option]) {\n return true;\n }\n }\n return false;\n }\n}\n\nclass LanguageUtil {\n constructor(options) {\n this.options = options;\n this.supportedLngs = this.options.supportedLngs || false;\n this.logger = baseLogger.create('languageUtils');\n }\n getScriptPartFromCode(code) {\n code = getCleanedCode(code);\n if (!code || !code.includes('-')) return null;\n const p = code.split('-');\n if (p.length === 2) return null;\n p.pop();\n if (p[p.length - 1].toLowerCase() === 'x') return null;\n return this.formatLanguageCode(p.join('-'));\n }\n getLanguagePartFromCode(code) {\n code = getCleanedCode(code);\n if (!code || !code.includes('-')) return code;\n const p = code.split('-');\n return this.formatLanguageCode(p[0]);\n }\n formatLanguageCode(code) {\n if (isString(code) && code.includes('-')) {\n let formattedCode;\n try {\n formattedCode = Intl.getCanonicalLocales(code)[0];\n } catch (e) {}\n if (formattedCode && this.options.lowerCaseLng) {\n formattedCode = formattedCode.toLowerCase();\n }\n if (formattedCode) return formattedCode;\n if (this.options.lowerCaseLng) {\n return code.toLowerCase();\n }\n return code;\n }\n return this.options.cleanCode || this.options.lowerCaseLng ? code.toLowerCase() : code;\n }\n isSupportedCode(code) {\n if (this.options.load === 'languageOnly' || this.options.nonExplicitSupportedLngs) {\n code = this.getLanguagePartFromCode(code);\n }\n return !this.supportedLngs || !this.supportedLngs.length || this.supportedLngs.includes(code);\n }\n getBestMatchFromCodes(codes) {\n if (!codes) return null;\n let found;\n codes.forEach(code => {\n if (found) return;\n const cleanedLng = this.formatLanguageCode(code);\n if (!this.options.supportedLngs || this.isSupportedCode(cleanedLng)) found = cleanedLng;\n });\n if (!found && this.options.supportedLngs) {\n codes.forEach(code => {\n if (found) return;\n const lngScOnly = this.getScriptPartFromCode(code);\n if (this.isSupportedCode(lngScOnly)) return found = lngScOnly;\n const lngOnly = this.getLanguagePartFromCode(code);\n if (this.isSupportedCode(lngOnly)) return found = lngOnly;\n found = this.options.supportedLngs.find(supportedLng => {\n if (supportedLng === lngOnly) return true;\n if (!supportedLng.includes('-') && !lngOnly.includes('-')) return false;\n if (supportedLng.includes('-') && !lngOnly.includes('-') && supportedLng.slice(0, supportedLng.indexOf('-')) === lngOnly) return true;\n if (supportedLng.startsWith(lngOnly) && lngOnly.length > 1) return true;\n return false;\n });\n });\n }\n if (!found) found = this.getFallbackCodes(this.options.fallbackLng)[0];\n return found;\n }\n getFallbackCodes(fallbacks, code) {\n if (!fallbacks) return [];\n if (typeof fallbacks === 'function') fallbacks = fallbacks(code);\n if (isString(fallbacks)) fallbacks = [fallbacks];\n if (Array.isArray(fallbacks)) return fallbacks;\n if (!code) return fallbacks.default || [];\n let found = fallbacks[code];\n if (!found) found = fallbacks[this.getScriptPartFromCode(code)];\n if (!found) found = fallbacks[this.formatLanguageCode(code)];\n if (!found) found = fallbacks[this.getLanguagePartFromCode(code)];\n if (!found) found = fallbacks.default;\n return found || [];\n }\n toResolveHierarchy(code, fallbackCode) {\n const fallbackCodes = this.getFallbackCodes((fallbackCode === false ? [] : fallbackCode) || this.options.fallbackLng || [], code);\n const codes = [];\n const addCode = c => {\n if (!c) return;\n if (this.isSupportedCode(c)) {\n codes.push(c);\n } else {\n this.logger.warn(`rejecting language code not found in supportedLngs: ${c}`);\n }\n };\n if (isString(code) && (code.includes('-') || code.includes('_'))) {\n if (this.options.load !== 'languageOnly') addCode(this.formatLanguageCode(code));\n if (this.options.load !== 'languageOnly' && this.options.load !== 'currentOnly') addCode(this.getScriptPartFromCode(code));\n if (this.options.load !== 'currentOnly') addCode(this.getLanguagePartFromCode(code));\n } else if (isString(code)) {\n addCode(this.formatLanguageCode(code));\n }\n fallbackCodes.forEach(fc => {\n if (!codes.includes(fc)) addCode(this.formatLanguageCode(fc));\n });\n return codes;\n }\n}\n\nconst suffixesOrder = {\n zero: 0,\n one: 1,\n two: 2,\n few: 3,\n many: 4,\n other: 5\n};\nconst dummyRule = {\n select: count => count === 1 ? 'one' : 'other',\n resolvedOptions: () => ({\n pluralCategories: ['one', 'other']\n })\n};\nclass PluralResolver {\n constructor(languageUtils, options = {}) {\n this.languageUtils = languageUtils;\n this.options = options;\n this.logger = baseLogger.create('pluralResolver');\n this.pluralRulesCache = {};\n }\n clearCache() {\n this.pluralRulesCache = {};\n }\n getRule(code, options = {}) {\n const cleanedCode = getCleanedCode(code === 'dev' ? 'en' : code);\n const type = options.ordinal ? 'ordinal' : 'cardinal';\n const cacheKey = JSON.stringify({\n cleanedCode,\n type\n });\n if (cacheKey in this.pluralRulesCache) {\n return this.pluralRulesCache[cacheKey];\n }\n let rule;\n try {\n rule = new Intl.PluralRules(cleanedCode, {\n type\n });\n } catch (err) {\n if (typeof Intl === 'undefined') {\n this.logger.error('No Intl support, please use an Intl polyfill!');\n return dummyRule;\n }\n if (!code.match(/-|_/)) return dummyRule;\n const lngPart = this.languageUtils.getLanguagePartFromCode(code);\n rule = this.getRule(lngPart, options);\n }\n this.pluralRulesCache[cacheKey] = rule;\n return rule;\n }\n needsPlural(code, options = {}) {\n let rule = this.getRule(code, options);\n if (!rule) rule = this.getRule('dev', options);\n return rule?.resolvedOptions().pluralCategories.length > 1;\n }\n getPluralFormsOfKey(code, key, options = {}) {\n return this.getSuffixes(code, options).map(suffix => `${key}${suffix}`);\n }\n getSuffixes(code, options = {}) {\n let rule = this.getRule(code, options);\n if (!rule) rule = this.getRule('dev', options);\n if (!rule) return [];\n return rule.resolvedOptions().pluralCategories.sort((pluralCategory1, pluralCategory2) => suffixesOrder[pluralCategory1] - suffixesOrder[pluralCategory2]).map(pluralCategory => `${this.options.prepend}${options.ordinal ? `ordinal${this.options.prepend}` : ''}${pluralCategory}`);\n }\n getSuffix(code, count, options = {}) {\n const rule = this.getRule(code, options);\n if (rule) {\n return `${this.options.prepend}${options.ordinal ? `ordinal${this.options.prepend}` : ''}${rule.select(count)}`;\n }\n this.logger.warn(`no plural rule found for: ${code}`);\n return this.getSuffix('dev', count, options);\n }\n}\n\nconst deepFindWithDefaults = (data, defaultData, key, keySeparator = '.', ignoreJSONStructure = true) => {\n let path = getPathWithDefaults(data, defaultData, key);\n if (!path && ignoreJSONStructure && isString(key)) {\n path = deepFind(data, key, keySeparator);\n if (path === undefined) path = deepFind(defaultData, key, keySeparator);\n }\n return path;\n};\nconst regexSafe = val => val.replace(/\\$/g, '$$$$');\nclass Interpolator {\n constructor(options = {}) {\n this.logger = baseLogger.create('interpolator');\n this.options = options;\n this.format = options?.interpolation?.format || (value => value);\n this.init(options);\n }\n init(options = {}) {\n if (!options.interpolation) options.interpolation = {\n escapeValue: true\n };\n const {\n escape: escape$1,\n escapeValue,\n useRawValueToEscape,\n prefix,\n prefixEscaped,\n suffix,\n suffixEscaped,\n formatSeparator,\n unescapeSuffix,\n unescapePrefix,\n nestingPrefix,\n nestingPrefixEscaped,\n nestingSuffix,\n nestingSuffixEscaped,\n nestingOptionsSeparator,\n maxReplaces,\n alwaysFormat\n } = options.interpolation;\n this.escape = escape$1 !== undefined ? escape$1 : escape;\n this.escapeValue = escapeValue !== undefined ? escapeValue : true;\n this.useRawValueToEscape = useRawValueToEscape !== undefined ? useRawValueToEscape : false;\n this.prefix = prefix ? regexEscape(prefix) : prefixEscaped || '{{';\n this.suffix = suffix ? regexEscape(suffix) : suffixEscaped || '}}';\n this.formatSeparator = formatSeparator || ',';\n this.unescapePrefix = unescapeSuffix ? '' : unescapePrefix ? regexEscape(unescapePrefix) : '-';\n this.unescapeSuffix = this.unescapePrefix ? '' : unescapeSuffix ? regexEscape(unescapeSuffix) : '';\n this.nestingPrefix = nestingPrefix ? regexEscape(nestingPrefix) : nestingPrefixEscaped || regexEscape('$t(');\n this.nestingSuffix = nestingSuffix ? regexEscape(nestingSuffix) : nestingSuffixEscaped || regexEscape(')');\n this.nestingOptionsSeparator = nestingOptionsSeparator || ',';\n this.maxReplaces = maxReplaces || 1000;\n this.alwaysFormat = alwaysFormat !== undefined ? alwaysFormat : false;\n this.resetRegExp();\n }\n reset() {\n if (this.options) this.init(this.options);\n }\n resetRegExp() {\n const getOrResetRegExp = (existingRegExp, pattern) => {\n if (existingRegExp?.source === pattern) {\n existingRegExp.lastIndex = 0;\n return existingRegExp;\n }\n return new RegExp(pattern, 'g');\n };\n this.regexp = getOrResetRegExp(this.regexp, `${this.prefix}(.+?)${this.suffix}`);\n this.regexpUnescape = getOrResetRegExp(this.regexpUnescape, `${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`);\n this.nestingRegexp = getOrResetRegExp(this.nestingRegexp, `${this.nestingPrefix}((?:[^()\"']+|\"[^\"]*\"|'[^']*'|\\\\((?:[^()]|\"[^\"]*\"|'[^']*')*\\\\))*?)${this.nestingSuffix}`);\n }\n interpolate(str, data, lng, options) {\n let match;\n let value;\n let replaces;\n const defaultData = this.options && this.options.interpolation && this.options.interpolation.defaultVariables || {};\n const handleFormat = key => {\n if (!key.includes(this.formatSeparator)) {\n const path = deepFindWithDefaults(data, defaultData, key, this.options.keySeparator, this.options.ignoreJSONStructure);\n return this.alwaysFormat ? this.format(path, undefined, lng, {\n ...options,\n ...data,\n interpolationkey: key\n }) : path;\n }\n const p = key.split(this.formatSeparator);\n const k = p.shift().trim();\n const f = p.join(this.formatSeparator).trim();\n return this.format(deepFindWithDefaults(data, defaultData, k, this.options.keySeparator, this.options.ignoreJSONStructure), f, lng, {\n ...options,\n ...data,\n interpolationkey: k\n });\n };\n this.resetRegExp();\n if (!this.escapeValue && typeof str === 'string' && /\\$t\\([^)]*\\{[^}]*\\{\\{/.test(str)) {\n this.logger.warn('nesting options string contains interpolated variables with escapeValue: false \u2014 ' + 'if any of those values are attacker-controlled they can inject additional ' + 'nesting options (e.g. redirect lng/ns). Sanitise untrusted input before passing ' + 'it to t(), or keep escapeValue: true.');\n }\n const missingInterpolationHandler = options?.missingInterpolationHandler || this.options.missingInterpolationHandler;\n const skipOnVariables = options?.interpolation?.skipOnVariables !== undefined ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables;\n const todos = [{\n regex: this.regexpUnescape,\n safeValue: val => regexSafe(val)\n }, {\n regex: this.regexp,\n safeValue: val => this.escapeValue ? regexSafe(this.escape(val)) : regexSafe(val)\n }];\n todos.forEach(todo => {\n replaces = 0;\n while (match = todo.regex.exec(str)) {\n const matchedVar = match[1].trim();\n value = handleFormat(matchedVar);\n if (value === undefined) {\n if (typeof missingInterpolationHandler === 'function') {\n const temp = missingInterpolationHandler(str, match, options);\n value = isString(temp) ? temp : '';\n } else if (options && Object.prototype.hasOwnProperty.call(options, matchedVar)) {\n value = '';\n } else if (skipOnVariables) {\n value = match[0];\n continue;\n } else {\n this.logger.warn(`missed to pass in variable ${matchedVar} for interpolating ${str}`);\n value = '';\n }\n } else if (!isString(value) && !this.useRawValueToEscape) {\n value = makeString(value);\n }\n const safeValue = todo.safeValue(value);\n str = str.replace(match[0], safeValue);\n if (skipOnVariables) {\n todo.regex.lastIndex += value.length;\n todo.regex.lastIndex -= match[0].length;\n } else {\n todo.regex.lastIndex = 0;\n }\n replaces++;\n if (replaces >= this.maxReplaces) {\n break;\n }\n }\n });\n return str;\n }\n nest(str, fc, options = {}) {\n let match;\n let value;\n let clonedOptions;\n const handleHasOptions = (key, inheritedOptions) => {\n const sep = this.nestingOptionsSeparator;\n if (!key.includes(sep)) return key;\n const c = key.split(new RegExp(`${regexEscape(sep)}[ ]*{`));\n let optionsString = `{${c[1]}`;\n key = c[0];\n optionsString = this.interpolate(optionsString, clonedOptions);\n const matchedSingleQuotes = optionsString.match(/'/g);\n const matchedDoubleQuotes = optionsString.match(/\"/g);\n if ((matchedSingleQuotes?.length ?? 0) % 2 === 0 && !matchedDoubleQuotes || (matchedDoubleQuotes?.length ?? 0) % 2 !== 0) {\n optionsString = optionsString.replace(/'/g, '\"');\n }\n try {\n clonedOptions = JSON.parse(optionsString);\n if (inheritedOptions) clonedOptions = {\n ...inheritedOptions,\n ...clonedOptions\n };\n } catch (e) {\n this.logger.warn(`failed parsing options string in nesting for key ${key}`, e);\n return `${key}${sep}${optionsString}`;\n }\n if (clonedOptions.defaultValue && clonedOptions.defaultValue.includes(this.prefix)) delete clonedOptions.defaultValue;\n return key;\n };\n while (match = this.nestingRegexp.exec(str)) {\n let formatters = [];\n clonedOptions = {\n ...options\n };\n clonedOptions = clonedOptions.replace && !isString(clonedOptions.replace) ? clonedOptions.replace : clonedOptions;\n clonedOptions.applyPostProcessor = false;\n delete clonedOptions.defaultValue;\n const keyEndIndex = /{.*}/.test(match[1]) ? match[1].lastIndexOf('}') + 1 : match[1].indexOf(this.formatSeparator);\n if (keyEndIndex !== -1) {\n formatters = match[1].slice(keyEndIndex).split(this.formatSeparator).map(elem => elem.trim()).filter(Boolean);\n match[1] = match[1].slice(0, keyEndIndex);\n }\n value = fc(handleHasOptions.call(this, match[1].trim(), clonedOptions), clonedOptions);\n if (value && match[0] === str && !isString(value)) return value;\n if (!isString(value)) value = makeString(value);\n if (!value) {\n this.logger.warn(`missed to resolve ${match[1]} for nesting ${str}`);\n value = '';\n }\n if (formatters.length) {\n value = formatters.reduce((v, f) => this.format(v, f, options.lng, {\n ...options,\n interpolationkey: match[1].trim()\n }), value.trim());\n }\n str = str.replace(match[0], value);\n this.regexp.lastIndex = 0;\n }\n return str;\n }\n}\n\nconst parseFormatStr = formatStr => {\n let formatName = formatStr.toLowerCase().trim();\n const formatOptions = {};\n if (formatStr.includes('(')) {\n const p = formatStr.split('(');\n formatName = p[0].toLowerCase().trim();\n const optStr = p[1].slice(0, -1);\n if (formatName === 'currency' && !optStr.includes(':')) {\n if (!formatOptions.currency) formatOptions.currency = optStr.trim();\n } else if (formatName === 'relativetime' && !optStr.includes(':')) {\n if (!formatOptions.range) formatOptions.range = optStr.trim();\n } else {\n const opts = optStr.split(';');\n opts.forEach(opt => {\n if (opt) {\n const [key, ...rest] = opt.split(':');\n const val = rest.join(':').trim().replace(/^'+|'+$/g, '');\n const trimmedKey = key.trim();\n if (!formatOptions[trimmedKey]) formatOptions[trimmedKey] = val;\n if (val === 'false') formatOptions[trimmedKey] = false;\n if (val === 'true') formatOptions[trimmedKey] = true;\n if (!isNaN(val)) formatOptions[trimmedKey] = parseInt(val, 10);\n }\n });\n }\n }\n return {\n formatName,\n formatOptions\n };\n};\nconst createCachedFormatter = fn => {\n const cache = {};\n return (v, l, o) => {\n let optForCache = o;\n if (o && o.interpolationkey && o.formatParams && o.formatParams[o.interpolationkey] && o[o.interpolationkey]) {\n optForCache = {\n ...optForCache,\n [o.interpolationkey]: undefined\n };\n }\n const key = l + JSON.stringify(optForCache);\n let frm = cache[key];\n if (!frm) {\n frm = fn(getCleanedCode(l), o);\n cache[key] = frm;\n }\n return frm(v);\n };\n};\nconst createNonCachedFormatter = fn => (v, l, o) => fn(getCleanedCode(l), o)(v);\nclass Formatter {\n constructor(options = {}) {\n this.logger = baseLogger.create('formatter');\n this.options = options;\n this.init(options);\n }\n init(services, options = {\n interpolation: {}\n }) {\n this.formatSeparator = options.interpolation.formatSeparator || ',';\n const cf = options.cacheInBuiltFormats ? createCachedFormatter : createNonCachedFormatter;\n this.formats = {\n number: cf((lng, opt) => {\n const formatter = new Intl.NumberFormat(lng, {\n ...opt\n });\n return val => formatter.format(val);\n }),\n currency: cf((lng, opt) => {\n const formatter = new Intl.NumberFormat(lng, {\n ...opt,\n style: 'currency'\n });\n return val => formatter.format(val);\n }),\n datetime: cf((lng, opt) => {\n const formatter = new Intl.DateTimeFormat(lng, {\n ...opt\n });\n return val => formatter.format(val);\n }),\n relativetime: cf((lng, opt) => {\n const formatter = new Intl.RelativeTimeFormat(lng, {\n ...opt\n });\n return val => formatter.format(val, opt.range || 'day');\n }),\n list: cf((lng, opt) => {\n const formatter = new Intl.ListFormat(lng, {\n ...opt\n });\n return val => formatter.format(val);\n })\n };\n }\n add(name, fc) {\n this.formats[name.toLowerCase().trim()] = fc;\n }\n addCached(name, fc) {\n this.formats[name.toLowerCase().trim()] = createCachedFormatter(fc);\n }\n format(value, format, lng, options = {}) {\n if (!format) return value;\n if (value == null) return value;\n const formats = format.split(this.formatSeparator);\n if (formats.length > 1 && formats[0].indexOf('(') > 1 && !formats[0].includes(')') && formats.find(f => f.includes(')'))) {\n const lastIndex = formats.findIndex(f => f.includes(')'));\n formats[0] = [formats[0], ...formats.splice(1, lastIndex)].join(this.formatSeparator);\n }\n const result = formats.reduce((mem, f) => {\n const {\n formatName,\n formatOptions\n } = parseFormatStr(f);\n if (this.formats[formatName]) {\n let formatted = mem;\n try {\n const valOptions = options?.formatParams?.[options.interpolationkey] || {};\n const l = valOptions.locale || valOptions.lng || options.locale || options.lng || lng;\n formatted = this.formats[formatName](mem, l, {\n ...formatOptions,\n ...options,\n ...valOptions\n });\n } catch (error) {\n this.logger.warn(error);\n }\n return formatted;\n } else {\n this.logger.warn(`there was no format function for ${formatName}`);\n }\n return mem;\n }, value);\n return result;\n }\n}\n\nconst removePending = (q, name) => {\n if (q.pending[name] !== undefined) {\n delete q.pending[name];\n q.pendingCount--;\n }\n};\nclass Connector extends EventEmitter {\n constructor(backend, store, services, options = {}) {\n super();\n this.backend = backend;\n this.store = store;\n this.services = services;\n this.languageUtils = services.languageUtils;\n this.options = options;\n this.logger = baseLogger.create('backendConnector');\n this.waitingReads = [];\n this.maxParallelReads = options.maxParallelReads || 10;\n this.readingCalls = 0;\n this.maxRetries = options.maxRetries >= 0 ? options.maxRetries : 5;\n this.retryTimeout = options.retryTimeout >= 1 ? options.retryTimeout : 350;\n this.state = {};\n this.queue = [];\n this.backend?.init?.(services, options.backend, options);\n }\n queueLoad(languages, namespaces, options, callback) {\n const toLoad = {};\n const pending = {};\n const toLoadLanguages = {};\n const toLoadNamespaces = {};\n languages.forEach(lng => {\n let hasAllNamespaces = true;\n namespaces.forEach(ns => {\n const name = `${lng}|${ns}`;\n if (!options.reload && this.store.hasResourceBundle(lng, ns)) {\n this.state[name] = 2;\n } else if (this.state[name] < 0) ; else if (this.state[name] === 1) {\n if (pending[name] === undefined) pending[name] = true;\n } else {\n this.state[name] = 1;\n hasAllNamespaces = false;\n if (pending[name] === undefined) pending[name] = true;\n if (toLoad[name] === undefined) toLoad[name] = true;\n if (toLoadNamespaces[ns] === undefined) toLoadNamespaces[ns] = true;\n }\n });\n if (!hasAllNamespaces) toLoadLanguages[lng] = true;\n });\n if (Object.keys(toLoad).length || Object.keys(pending).length) {\n this.queue.push({\n pending,\n pendingCount: Object.keys(pending).length,\n loaded: {},\n errors: [],\n callback\n });\n }\n return {\n toLoad: Object.keys(toLoad),\n pending: Object.keys(pending),\n toLoadLanguages: Object.keys(toLoadLanguages),\n toLoadNamespaces: Object.keys(toLoadNamespaces)\n };\n }\n loaded(name, err, data) {\n const s = name.split('|');\n const lng = s[0];\n const ns = s[1];\n if (err) this.emit('failedLoading', lng, ns, err);\n if (!err && data) {\n this.store.addResourceBundle(lng, ns, data, undefined, undefined, {\n skipCopy: true\n });\n }\n this.state[name] = err ? -1 : 2;\n if (err && data) this.state[name] = 0;\n const loaded = {};\n this.queue.forEach(q => {\n pushPath(q.loaded, [lng], ns);\n removePending(q, name);\n if (err) q.errors.push(err);\n if (q.pendingCount === 0 && !q.done) {\n Object.keys(q.loaded).forEach(l => {\n if (!loaded[l]) loaded[l] = {};\n const loadedKeys = q.loaded[l];\n if (loadedKeys.length) {\n loadedKeys.forEach(n => {\n if (loaded[l][n] === undefined) loaded[l][n] = true;\n });\n }\n });\n q.done = true;\n if (q.errors.length) {\n q.callback(q.errors);\n } else {\n q.callback();\n }\n }\n });\n this.emit('loaded', loaded);\n this.queue = this.queue.filter(q => !q.done);\n }\n read(lng, ns, fcName, tried = 0, wait = this.retryTimeout, callback) {\n if (!lng.length) return callback(null, {});\n if (this.readingCalls >= this.maxParallelReads) {\n this.waitingReads.push({\n lng,\n ns,\n fcName,\n tried,\n wait,\n callback\n });\n return;\n }\n this.readingCalls++;\n const resolver = (err, data) => {\n this.readingCalls--;\n if (this.waitingReads.length > 0) {\n const next = this.waitingReads.shift();\n this.read(next.lng, next.ns, next.fcName, next.tried, next.wait, next.callback);\n }\n if (err && data && tried < this.maxRetries) {\n setTimeout(() => {\n this.read(lng, ns, fcName, tried + 1, wait * 2, callback);\n }, wait);\n return;\n }\n callback(err, data);\n };\n const fc = this.backend[fcName].bind(this.backend);\n if (fc.length === 2) {\n try {\n const r = fc(lng, ns);\n if (r && typeof r.then === 'function') {\n r.then(data => resolver(null, data)).catch(resolver);\n } else {\n resolver(null, r);\n }\n } catch (err) {\n resolver(err);\n }\n return;\n }\n return fc(lng, ns, resolver);\n }\n prepareLoading(languages, namespaces, options = {}, callback) {\n if (!this.backend) {\n this.logger.warn('No backend was added via i18next.use. Will not load resources.');\n return callback && callback();\n }\n if (isString(languages)) languages = this.languageUtils.toResolveHierarchy(languages);\n if (isString(namespaces)) namespaces = [namespaces];\n const toLoad = this.queueLoad(languages, namespaces, options, callback);\n if (!toLoad.toLoad.length) {\n if (!toLoad.pending.length) callback();\n return null;\n }\n toLoad.toLoad.forEach(name => {\n this.loadOne(name);\n });\n }\n load(languages, namespaces, callback) {\n this.prepareLoading(languages, namespaces, {}, callback);\n }\n reload(languages, namespaces, callback) {\n this.prepareLoading(languages, namespaces, {\n reload: true\n }, callback);\n }\n loadOne(name, prefix = '') {\n const s = name.split('|');\n const lng = s[0];\n const ns = s[1];\n this.read(lng, ns, 'read', undefined, undefined, (err, data) => {\n if (err) this.logger.warn(`${prefix}loading namespace ${ns} for language ${lng} failed`, err);\n if (!err && data) this.logger.log(`${prefix}loaded namespace ${ns} for language ${lng}`, data);\n this.loaded(name, err, data);\n });\n }\n saveMissing(languages, namespace, key, fallbackValue, isUpdate, options = {}, clb = () => {}) {\n if (this.services?.utils?.hasLoadedNamespace && !this.services?.utils?.hasLoadedNamespace(namespace)) {\n this.logger.warn(`did not save key \"${key}\" as the namespace \"${namespace}\" was not yet loaded`, 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n return;\n }\n if (key === undefined || key === null || key === '') return;\n if (this.backend?.create) {\n const opts = {\n ...options,\n isUpdate\n };\n const fc = this.backend.create.bind(this.backend);\n if (fc.length < 6) {\n try {\n let r;\n if (fc.length === 5) {\n r = fc(languages, namespace, key, fallbackValue, opts);\n } else {\n r = fc(languages, namespace, key, fallbackValue);\n }\n if (r && typeof r.then === 'function') {\n r.then(data => clb(null, data)).catch(clb);\n } else {\n clb(null, r);\n }\n } catch (err) {\n clb(err);\n }\n } else {\n fc(languages, namespace, key, fallbackValue, clb, opts);\n }\n }\n if (!languages || !languages[0]) return;\n this.store.addResource(languages[0], namespace, key, fallbackValue);\n }\n}\n\nconst get = () => ({\n debug: false,\n initAsync: true,\n ns: ['translation'],\n defaultNS: ['translation'],\n fallbackLng: ['dev'],\n fallbackNS: false,\n supportedLngs: false,\n nonExplicitSupportedLngs: false,\n load: 'all',\n preload: false,\n keySeparator: '.',\n nsSeparator: ':',\n pluralSeparator: '_',\n contextSeparator: '_',\n enableSelector: false,\n partialBundledLanguages: false,\n saveMissing: false,\n updateMissing: false,\n saveMissingTo: 'fallback',\n saveMissingPlurals: true,\n missingKeyHandler: false,\n missingInterpolationHandler: false,\n postProcess: false,\n postProcessPassResolved: false,\n returnNull: false,\n returnEmptyString: true,\n returnObjects: false,\n joinArrays: false,\n returnedObjectHandler: false,\n parseMissingKeyHandler: false,\n appendNamespaceToMissingKey: false,\n appendNamespaceToCIMode: false,\n overloadTranslationOptionHandler: args => {\n let ret = {};\n if (typeof args[1] === 'object') ret = args[1];\n if (isString(args[1])) ret.defaultValue = args[1];\n if (isString(args[2])) ret.tDescription = args[2];\n if (typeof args[2] === 'object' || typeof args[3] === 'object') {\n const options = args[3] || args[2];\n Object.keys(options).forEach(key => {\n ret[key] = options[key];\n });\n }\n return ret;\n },\n interpolation: {\n escapeValue: true,\n prefix: '{{',\n suffix: '}}',\n formatSeparator: ',',\n unescapePrefix: '-',\n nestingPrefix: '$t(',\n nestingSuffix: ')',\n nestingOptionsSeparator: ',',\n maxReplaces: 1000,\n skipOnVariables: true\n },\n cacheInBuiltFormats: true\n});\nconst transformOptions = options => {\n if (isString(options.ns)) options.ns = [options.ns];\n if (isString(options.fallbackLng)) options.fallbackLng = [options.fallbackLng];\n if (isString(options.fallbackNS)) options.fallbackNS = [options.fallbackNS];\n if (options.supportedLngs && !options.supportedLngs.includes('cimode')) {\n options.supportedLngs = options.supportedLngs.concat(['cimode']);\n }\n return options;\n};\n\nconst noop = () => {};\nconst bindMemberFunctions = inst => {\n const mems = Object.getOwnPropertyNames(Object.getPrototypeOf(inst));\n mems.forEach(mem => {\n if (typeof inst[mem] === 'function') {\n inst[mem] = inst[mem].bind(inst);\n }\n });\n};\nclass I18n extends EventEmitter {\n constructor(options = {}, callback) {\n super();\n this.options = transformOptions(options);\n this.services = {};\n this.logger = baseLogger;\n this.modules = {\n external: []\n };\n bindMemberFunctions(this);\n if (callback && !this.isInitialized && !options.isClone) {\n if (!this.options.initAsync) {\n this.init(options, callback);\n return this;\n }\n setTimeout(() => {\n this.init(options, callback);\n }, 0);\n }\n }\n init(options = {}, callback) {\n this.isInitializing = true;\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n if (options.defaultNS == null && options.ns) {\n if (isString(options.ns)) {\n options.defaultNS = options.ns;\n } else if (!options.ns.includes('translation')) {\n options.defaultNS = options.ns[0];\n }\n }\n const defOpts = get();\n this.options = {\n ...defOpts,\n ...this.options,\n ...transformOptions(options)\n };\n this.options.interpolation = {\n ...defOpts.interpolation,\n ...this.options.interpolation\n };\n if (options.keySeparator !== undefined) {\n this.options.userDefinedKeySeparator = options.keySeparator;\n }\n if (options.nsSeparator !== undefined) {\n this.options.userDefinedNsSeparator = options.nsSeparator;\n }\n if (typeof this.options.overloadTranslationOptionHandler !== 'function') {\n this.options.overloadTranslationOptionHandler = defOpts.overloadTranslationOptionHandler;\n }\n const createClassOnDemand = ClassOrObject => {\n if (!ClassOrObject) return null;\n if (typeof ClassOrObject === 'function') return new ClassOrObject();\n return ClassOrObject;\n };\n if (!this.options.isClone) {\n if (this.modules.logger) {\n baseLogger.init(createClassOnDemand(this.modules.logger), this.options);\n } else {\n baseLogger.init(null, this.options);\n }\n let formatter;\n if (this.modules.formatter) {\n formatter = this.modules.formatter;\n } else {\n formatter = Formatter;\n }\n const lu = new LanguageUtil(this.options);\n this.store = new ResourceStore(this.options.resources, this.options);\n const s = this.services;\n s.logger = baseLogger;\n s.resourceStore = this.store;\n s.languageUtils = lu;\n s.pluralResolver = new PluralResolver(lu, {\n prepend: this.options.pluralSeparator\n });\n if (formatter) {\n s.formatter = createClassOnDemand(formatter);\n if (s.formatter.init) s.formatter.init(s, this.options);\n this.options.interpolation.format = s.formatter.format.bind(s.formatter);\n }\n s.interpolator = new Interpolator(this.options);\n s.utils = {\n hasLoadedNamespace: this.hasLoadedNamespace.bind(this)\n };\n s.backendConnector = new Connector(createClassOnDemand(this.modules.backend), s.resourceStore, s, this.options);\n s.backendConnector.on('*', (event, ...args) => {\n this.emit(event, ...args);\n });\n if (this.modules.languageDetector) {\n s.languageDetector = createClassOnDemand(this.modules.languageDetector);\n if (s.languageDetector.init) s.languageDetector.init(s, this.options.detection, this.options);\n }\n if (this.modules.i18nFormat) {\n s.i18nFormat = createClassOnDemand(this.modules.i18nFormat);\n if (s.i18nFormat.init) s.i18nFormat.init(this);\n }\n this.translator = new Translator(this.services, this.options);\n this.translator.on('*', (event, ...args) => {\n this.emit(event, ...args);\n });\n this.modules.external.forEach(m => {\n if (m.init) m.init(this);\n });\n }\n this.format = this.options.interpolation.format;\n if (!callback) callback = noop;\n if (this.options.fallbackLng && !this.services.languageDetector && !this.options.lng) {\n const codes = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n if (codes.length > 0 && codes[0] !== 'dev') this.options.lng = codes[0];\n }\n if (!this.services.languageDetector && !this.options.lng) {\n this.logger.warn('init: no languageDetector is used and no lng is defined');\n }\n const storeApi = ['getResource', 'hasResourceBundle', 'getResourceBundle', 'getDataByLanguage'];\n storeApi.forEach(fcName => {\n this[fcName] = (...args) => this.store[fcName](...args);\n });\n const storeApiChained = ['addResource', 'addResources', 'addResourceBundle', 'removeResourceBundle'];\n storeApiChained.forEach(fcName => {\n this[fcName] = (...args) => {\n this.store[fcName](...args);\n return this;\n };\n });\n const deferred = defer();\n const load = () => {\n const finish = (err, t) => {\n this.isInitializing = false;\n if (this.isInitialized && !this.initializedStoreOnce) this.logger.warn('init: i18next is already initialized. You should call init just once!');\n this.isInitialized = true;\n if (!this.options.isClone) this.logger.log('initialized', this.options);\n this.emit('initialized', this.options);\n deferred.resolve(t);\n callback(err, t);\n };\n if ((this.languages || this.isLanguageChangingTo) && !this.isInitialized) return finish(null, this.t.bind(this));\n this.changeLanguage(this.options.lng, finish);\n };\n if (this.options.resources || !this.options.initAsync) {\n load();\n } else {\n setTimeout(load, 0);\n }\n return deferred;\n }\n loadResources(language, callback = noop) {\n let usedCallback = callback;\n const usedLng = isString(language) ? language : this.language;\n if (typeof language === 'function') usedCallback = language;\n if (!this.options.resources || this.options.partialBundledLanguages) {\n if (usedLng?.toLowerCase() === 'cimode' && (!this.options.preload || this.options.preload.length === 0)) return usedCallback();\n const toLoad = [];\n const append = lng => {\n if (!lng) return;\n if (lng === 'cimode') return;\n const lngs = this.services.languageUtils.toResolveHierarchy(lng);\n lngs.forEach(l => {\n if (l === 'cimode') return;\n if (!toLoad.includes(l)) toLoad.push(l);\n });\n };\n if (!usedLng) {\n const fallbacks = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n fallbacks.forEach(l => append(l));\n } else {\n append(usedLng);\n }\n this.options.preload?.forEach?.(l => append(l));\n this.services.backendConnector.load(toLoad, this.options.ns, e => {\n if (!e && !this.resolvedLanguage && this.language) this.setResolvedLanguage(this.language);\n usedCallback(e);\n });\n } else {\n usedCallback(null);\n }\n }\n reloadResources(lngs, ns, callback) {\n const deferred = defer();\n if (typeof lngs === 'function') {\n callback = lngs;\n lngs = undefined;\n }\n if (typeof ns === 'function') {\n callback = ns;\n ns = undefined;\n }\n if (!lngs) lngs = this.languages;\n if (!ns) ns = this.options.ns;\n if (!callback) callback = noop;\n this.services.backendConnector.reload(lngs, ns, err => {\n deferred.resolve();\n callback(err);\n });\n return deferred;\n }\n use(module) {\n if (!module) throw new Error('You are passing an undefined module! Please check the object you are passing to i18next.use()');\n if (!module.type) throw new Error('You are passing a wrong module! Please check the object you are passing to i18next.use()');\n if (module.type === 'backend') {\n this.modules.backend = module;\n }\n if (module.type === 'logger' || module.log && module.warn && module.error) {\n this.modules.logger = module;\n }\n if (module.type === 'languageDetector') {\n this.modules.languageDetector = module;\n }\n if (module.type === 'i18nFormat') {\n this.modules.i18nFormat = module;\n }\n if (module.type === 'postProcessor') {\n postProcessor.addPostProcessor(module);\n }\n if (module.type === 'formatter') {\n this.modules.formatter = module;\n }\n if (module.type === '3rdParty') {\n this.modules.external.push(module);\n }\n return this;\n }\n setResolvedLanguage(l) {\n if (!l || !this.languages) return;\n if (['cimode', 'dev'].includes(l)) return;\n for (let li = 0; li < this.languages.length; li++) {\n const lngInLngs = this.languages[li];\n if (['cimode', 'dev'].includes(lngInLngs)) continue;\n if (this.store.hasLanguageSomeTranslations(lngInLngs)) {\n this.resolvedLanguage = lngInLngs;\n break;\n }\n }\n if (!this.resolvedLanguage && !this.languages.includes(l) && this.store.hasLanguageSomeTranslations(l)) {\n this.resolvedLanguage = l;\n this.languages.unshift(l);\n }\n }\n changeLanguage(lng, callback) {\n this.isLanguageChangingTo = lng;\n const deferred = defer();\n this.emit('languageChanging', lng);\n const setLngProps = l => {\n this.language = l;\n this.languages = this.services.languageUtils.toResolveHierarchy(l);\n this.resolvedLanguage = undefined;\n this.setResolvedLanguage(l);\n };\n const done = (err, l) => {\n if (l) {\n if (this.isLanguageChangingTo === lng) {\n setLngProps(l);\n this.translator.changeLanguage(l);\n this.isLanguageChangingTo = undefined;\n this.emit('languageChanged', l);\n this.logger.log('languageChanged', l);\n }\n } else {\n this.isLanguageChangingTo = undefined;\n }\n deferred.resolve((...args) => this.t(...args));\n if (callback) callback(err, (...args) => this.t(...args));\n };\n const setLng = lngs => {\n if (!lng && !lngs && this.services.languageDetector) lngs = [];\n const fl = isString(lngs) ? lngs : lngs && lngs[0];\n const l = this.store.hasLanguageSomeTranslations(fl) ? fl : this.services.languageUtils.getBestMatchFromCodes(isString(lngs) ? [lngs] : lngs);\n if (l) {\n if (!this.language) {\n setLngProps(l);\n }\n if (!this.translator.language) this.translator.changeLanguage(l);\n this.services.languageDetector?.cacheUserLanguage?.(l);\n }\n this.loadResources(l, err => {\n done(err, l);\n });\n };\n if (!lng && this.services.languageDetector && !this.services.languageDetector.async) {\n setLng(this.services.languageDetector.detect());\n } else if (!lng && this.services.languageDetector && this.services.languageDetector.async) {\n if (this.services.languageDetector.detect.length === 0) {\n this.services.languageDetector.detect().then(setLng);\n } else {\n this.services.languageDetector.detect(setLng);\n }\n } else {\n setLng(lng);\n }\n return deferred;\n }\n getFixedT(lng, ns, keyPrefix, fixedOpts) {\n const scopeNs = fixedOpts?.scopeNs;\n const fixedT = (key, opts, ...rest) => {\n let o;\n if (typeof opts !== 'object') {\n o = this.options.overloadTranslationOptionHandler([key, opts].concat(rest));\n } else {\n o = {\n ...opts\n };\n }\n o.lng = o.lng || fixedT.lng;\n o.lngs = o.lngs || fixedT.lngs;\n const explicitCallNs = o.ns !== undefined && o.ns !== null;\n o.ns = o.ns || fixedT.ns;\n if (o.keyPrefix !== '') o.keyPrefix = o.keyPrefix || keyPrefix || fixedT.keyPrefix;\n const selectorOpts = {\n ...this.options,\n ...o\n };\n if (Array.isArray(scopeNs) && !explicitCallNs) selectorOpts.ns = scopeNs;\n if (typeof o.keyPrefix === 'function') o.keyPrefix = keysFromSelector(o.keyPrefix, selectorOpts);\n const keySeparator = this.options.keySeparator || '.';\n let resultKey;\n if (o.keyPrefix && Array.isArray(key)) {\n resultKey = key.map(k => {\n if (typeof k === 'function') k = keysFromSelector(k, selectorOpts);\n return `${o.keyPrefix}${keySeparator}${k}`;\n });\n } else {\n if (typeof key === 'function') key = keysFromSelector(key, selectorOpts);\n resultKey = o.keyPrefix ? `${o.keyPrefix}${keySeparator}${key}` : key;\n }\n return this.t(resultKey, o);\n };\n if (isString(lng)) {\n fixedT.lng = lng;\n } else {\n fixedT.lngs = lng;\n }\n fixedT.ns = ns;\n fixedT.keyPrefix = keyPrefix;\n return fixedT;\n }\n t(...args) {\n return this.translator?.translate(...args);\n }\n exists(...args) {\n return this.translator?.exists(...args);\n }\n setDefaultNamespace(ns) {\n this.options.defaultNS = ns;\n }\n hasLoadedNamespace(ns, options = {}) {\n if (!this.isInitialized) {\n this.logger.warn('hasLoadedNamespace: i18next was not initialized', this.languages);\n return false;\n }\n if (!this.languages || !this.languages.length) {\n this.logger.warn('hasLoadedNamespace: i18n.languages were undefined or empty', this.languages);\n return false;\n }\n const lng = options.lng || this.resolvedLanguage || this.languages[0];\n const fallbackLng = this.options ? this.options.fallbackLng : false;\n const lastLng = this.languages[this.languages.length - 1];\n if (lng.toLowerCase() === 'cimode') return true;\n const loadNotPending = (l, n) => {\n const loadState = this.services.backendConnector.state[`${l}|${n}`];\n return loadState === -1 || loadState === 0 || loadState === 2;\n };\n if (options.precheck) {\n const preResult = options.precheck(this, loadNotPending);\n if (preResult !== undefined) return preResult;\n }\n if (this.hasResourceBundle(lng, ns)) return true;\n if (!this.services.backendConnector.backend || this.options.resources && !this.options.partialBundledLanguages) return true;\n if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true;\n return false;\n }\n loadNamespaces(ns, callback) {\n const deferred = defer();\n if (!this.options.ns) {\n if (callback) callback();\n return Promise.resolve();\n }\n if (isString(ns)) ns = [ns];\n ns.forEach(n => {\n if (!this.options.ns.includes(n)) this.options.ns.push(n);\n });\n this.loadResources(err => {\n deferred.resolve();\n if (callback) callback(err);\n });\n return deferred;\n }\n loadLanguages(lngs, callback) {\n const deferred = defer();\n if (isString(lngs)) lngs = [lngs];\n const preloaded = this.options.preload || [];\n const newLngs = lngs.filter(lng => !preloaded.includes(lng) && this.services.languageUtils.isSupportedCode(lng));\n if (!newLngs.length) {\n if (callback) callback();\n return Promise.resolve();\n }\n this.options.preload = preloaded.concat(newLngs);\n this.loadResources(err => {\n deferred.resolve();\n if (callback) callback(err);\n });\n return deferred;\n }\n dir(lng) {\n if (!lng) lng = this.resolvedLanguage || (this.languages?.length > 0 ? this.languages[0] : this.language);\n if (!lng) return 'rtl';\n try {\n const l = new Intl.Locale(lng);\n if (l && l.getTextInfo) {\n const ti = l.getTextInfo();\n if (ti && ti.direction) return ti.direction;\n }\n } catch (e) {}\n const rtlLngs = ['ar', 'shu', 'sqr', 'ssh', 'xaa', 'yhd', 'yud', 'aao', 'abh', 'abv', 'acm', 'acq', 'acw', 'acx', 'acy', 'adf', 'ads', 'aeb', 'aec', 'afb', 'ajp', 'apc', 'apd', 'arb', 'arq', 'ars', 'ary', 'arz', 'auz', 'avl', 'ayh', 'ayl', 'ayn', 'ayp', 'bbz', 'pga', 'he', 'iw', 'ps', 'pbt', 'pbu', 'pst', 'prp', 'prd', 'ug', 'ur', 'ydd', 'yds', 'yih', 'ji', 'yi', 'hbo', 'men', 'xmn', 'fa', 'jpr', 'peo', 'pes', 'prs', 'dv', 'sam', 'ckb'];\n const languageUtils = this.services?.languageUtils || new LanguageUtil(get());\n if (lng.toLowerCase().indexOf('-latn') > 1) return 'ltr';\n return rtlLngs.includes(languageUtils.getLanguagePartFromCode(lng)) || lng.toLowerCase().indexOf('-arab') > 1 ? 'rtl' : 'ltr';\n }\n static createInstance(options = {}, callback) {\n const instance = new I18n(options, callback);\n instance.createInstance = I18n.createInstance;\n return instance;\n }\n cloneInstance(options = {}, callback = noop) {\n const forkResourceStore = options.forkResourceStore;\n if (forkResourceStore) delete options.forkResourceStore;\n const mergedOptions = {\n ...this.options,\n ...options,\n ...{\n isClone: true\n }\n };\n const clone = new I18n(mergedOptions);\n if (options.debug !== undefined || options.prefix !== undefined) {\n clone.logger = clone.logger.clone(options);\n }\n const membersToCopy = ['store', 'services', 'language'];\n membersToCopy.forEach(m => {\n clone[m] = this[m];\n });\n clone.services = {\n ...this.services\n };\n clone.services.utils = {\n hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n };\n if (forkResourceStore) {\n const clonedData = Object.keys(this.store.data).reduce((prev, l) => {\n prev[l] = {\n ...this.store.data[l]\n };\n prev[l] = Object.keys(prev[l]).reduce((acc, n) => {\n acc[n] = {\n ...prev[l][n]\n };\n return acc;\n }, prev[l]);\n return prev;\n }, {});\n clone.store = new ResourceStore(clonedData, mergedOptions);\n clone.services.resourceStore = clone.store;\n }\n if (options.interpolation) {\n const defOpts = get();\n const mergedInterpolation = {\n ...defOpts.interpolation,\n ...this.options.interpolation,\n ...options.interpolation\n };\n const mergedForInterpolator = {\n ...mergedOptions,\n interpolation: mergedInterpolation\n };\n clone.services.interpolator = new Interpolator(mergedForInterpolator);\n }\n clone.translator = new Translator(clone.services, mergedOptions);\n clone.translator.on('*', (event, ...args) => {\n clone.emit(event, ...args);\n });\n clone.init(mergedOptions, callback);\n clone.translator.options = mergedOptions;\n clone.translator.backendConnector.services.utils = {\n hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n };\n return clone;\n }\n toJSON() {\n return {\n options: this.options,\n store: this.store,\n language: this.language,\n languages: this.languages,\n resolvedLanguage: this.resolvedLanguage\n };\n }\n}\nconst instance = I18n.createInstance();\n\nconst createInstance = instance.createInstance;\nconst dir = instance.dir;\nconst init = instance.init;\nconst loadResources = instance.loadResources;\nconst reloadResources = instance.reloadResources;\nconst use = instance.use;\nconst changeLanguage = instance.changeLanguage;\nconst getFixedT = instance.getFixedT;\nconst t = instance.t;\nconst exists = instance.exists;\nconst setDefaultNamespace = instance.setDefaultNamespace;\nconst hasLoadedNamespace = instance.hasLoadedNamespace;\nconst loadNamespaces = instance.loadNamespaces;\nconst loadLanguages = instance.loadLanguages;\n\nexport { changeLanguage, createInstance, instance as default, dir, exists, getFixedT, hasLoadedNamespace, init, keysFromSelector as keyFromSelector, loadLanguages, loadNamespaces, loadResources, reloadResources, setDefaultNamespace, t, use };\n", "function _classCallCheck(a, n) {\n if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\");\n}\nexport { _classCallCheck as default };", "function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nexport { _typeof as default };", "import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };", "import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };", "import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperties(e, r) {\n for (var t = 0; t < r.length; t++) {\n var o = r[t];\n o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, toPropertyKey(o.key), o);\n }\n}\nfunction _createClass(e, r, t) {\n return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", {\n writable: !1\n }), e;\n}\nexport { _createClass as default };", "import _classCallCheck from '@babel/runtime/helpers/esm/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/esm/createClass';\n\nvar arr = [];\nvar each = arr.forEach;\nvar slice = arr.slice;\nfunction defaults(obj) {\n each.call(slice.call(arguments, 1), function (source) {\n if (source) {\n for (var prop in source) {\n if (obj[prop] === undefined) obj[prop] = source[prop];\n }\n }\n });\n return obj;\n}\nfunction createClassOnDemand(ClassOrObject) {\n if (!ClassOrObject) return null;\n if (typeof ClassOrObject === 'function') return new ClassOrObject();\n return ClassOrObject;\n}\n\nfunction getDefaults() {\n return {\n handleEmptyResourcesAsFailed: true,\n cacheHitMode: 'none',\n retryOnFailure: false\n // reloadInterval: typeof window !== 'undefined' ? false : 60 * 60 * 1000\n // refreshExpirationTime: 60 * 60 * 1000\n };\n}\nfunction handleCorrectReadFunction(backend, language, namespace, resolver) {\n var fc = backend.read.bind(backend);\n if (fc.length === 2) {\n // no callback\n try {\n var r = fc(language, namespace);\n if (r && typeof r.then === 'function') {\n // promise\n r.then(function (data) {\n return resolver(null, data);\n })[\"catch\"](resolver);\n } else {\n // sync\n resolver(null, r);\n }\n } catch (err) {\n resolver(err);\n }\n return;\n }\n\n // normal with callback\n fc(language, namespace, resolver);\n}\nvar Backend = /*#__PURE__*/function () {\n function Backend(services) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var i18nextOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _classCallCheck(this, Backend);\n this.backends = [];\n this.type = 'backend';\n this.allOptions = i18nextOptions;\n this.init(services, options);\n }\n return _createClass(Backend, [{\n key: \"init\",\n value: function init(services) {\n var _this = this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var i18nextOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n this.services = services;\n this.options = defaults(options, this.options || {}, getDefaults());\n this.allOptions = i18nextOptions;\n if (this.options.backends && this.options.backends.length > 1 && (this.allOptions.saveMissing || this.allOptions.updateMissing)) {\n if (this.services && this.services.logger) {\n this.services.logger.warn('i18next-chained-backend: Using multiple backends in combination with saveMissing/updateMissing is not recommended, as it may trigger based on stale data.');\n }\n }\n this.options.backends && this.options.backends.forEach(function (b, i) {\n _this.backends[i] = _this.backends[i] || createClassOnDemand(b);\n _this.backends[i].init(services, _this.options.backendOptions && _this.options.backendOptions[i] || {}, i18nextOptions);\n });\n if (this.services && this.options.reloadInterval) {\n setInterval(function () {\n return _this.reload();\n }, this.options.reloadInterval);\n }\n }\n }, {\n key: \"read\",\n value: function read(language, namespace, callback) {\n var _this2 = this;\n var bLen = this.backends.length;\n var _loadPosition = function loadPosition(pos) {\n if (pos >= bLen) return callback(new Error('non of the backend loaded data'), _this2.options.retryOnFailure); // failed, signal retry to i18next only if explicitly enabled\n var isLastBackend = pos === bLen - 1;\n var lengthCheckAmount = _this2.options.handleEmptyResourcesAsFailed && !isLastBackend ? 0 : -1;\n var backend = _this2.backends[pos];\n if (backend.read) {\n handleCorrectReadFunction(backend, language, namespace, function (err, data, savedAt) {\n if (!err && data && Object.keys(data).length > lengthCheckAmount) {\n callback(null, data, pos);\n _savePosition(pos - 1, data); // save one in front\n if (backend.save && _this2.options.cacheHitMode && ['refresh', 'refreshAndUpdateStore'].indexOf(_this2.options.cacheHitMode) > -1) {\n if (savedAt && _this2.options.refreshExpirationTime && savedAt + _this2.options.refreshExpirationTime > Date.now()) return;\n var nextBackend = _this2.backends[pos + 1];\n if (nextBackend && nextBackend.read) {\n handleCorrectReadFunction(nextBackend, language, namespace, function (err, data) {\n if (err) return;\n if (!data) return;\n if (Object.keys(data).length <= lengthCheckAmount) return;\n _savePosition(pos, data);\n if (_this2.options.cacheHitMode !== 'refreshAndUpdateStore') return;\n if (_this2.services && _this2.services.resourceStore) {\n _this2.services.resourceStore.addResourceBundle(language, namespace, data);\n }\n });\n }\n }\n } else {\n _loadPosition(pos + 1); // try load from next\n }\n });\n } else {\n _loadPosition(pos + 1); // try load from next\n }\n };\n var _savePosition = function savePosition(pos, data) {\n if (pos < 0) return;\n var backend = _this2.backends[pos];\n if (backend.save) {\n backend.save(language, namespace, data);\n _savePosition(pos - 1, data);\n } else {\n _savePosition(pos - 1, data);\n }\n };\n _loadPosition(0);\n }\n }, {\n key: \"create\",\n value: function create(languages, namespace, key, fallbackValue) {\n var clb = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : function () {};\n var opts = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n this.backends.forEach(function (b) {\n if (!b.create) return;\n var fc = b.create.bind(b);\n if (fc.length < 6) {\n // no callback\n try {\n var r;\n if (fc.length === 5) {\n // future callback-less api for i18next-locize-backend\n r = fc(languages, namespace, key, fallbackValue, opts);\n } else {\n r = fc(languages, namespace, key, fallbackValue);\n }\n if (r && typeof r.then === 'function') {\n // promise\n r.then(function (data) {\n return clb(null, data);\n })[\"catch\"](clb);\n } else {\n // sync\n clb(null, r);\n }\n } catch (err) {\n clb(err);\n }\n return;\n }\n\n // normal with callback\n fc(languages, namespace, key, fallbackValue, clb /* unused callback */, opts);\n });\n }\n }, {\n key: \"reload\",\n value: function reload() {\n var _this3 = this;\n var _this$services = this.services,\n backendConnector = _this$services.backendConnector,\n languageUtils = _this$services.languageUtils,\n logger = _this$services.logger;\n var currentLanguage = backendConnector.language;\n if (currentLanguage && currentLanguage.toLowerCase() === 'cimode') return; // avoid loading resources for cimode\n\n var toLoad = [];\n var append = function append(lng) {\n var lngs = languageUtils.toResolveHierarchy(lng);\n lngs.forEach(function (l) {\n if (toLoad.indexOf(l) < 0) toLoad.push(l);\n });\n };\n append(currentLanguage);\n if (this.allOptions.preload) this.allOptions.preload.forEach(function (l) {\n return append(l);\n });\n toLoad.forEach(function (lng) {\n _this3.allOptions.ns.forEach(function (ns) {\n backendConnector.read(lng, ns, 'read', null, null, function (err, data) {\n if (err) logger.warn(\"loading namespace \".concat(ns, \" for language \").concat(lng, \" failed\"), err);\n if (!err && data) logger.log(\"loaded namespace \".concat(ns, \" for language \").concat(lng), data);\n backendConnector.loaded(\"\".concat(lng, \"|\").concat(ns), err, data);\n });\n });\n });\n }\n }]);\n}();\nBackend.type = 'backend';\n\nexport { Backend as default };\n", "//#region lib/utils.js\nconst arr = [];\narr.forEach;\narr.slice;\nconst UNSAFE_KEYS$1 = [\n\t\"__proto__\",\n\t\"constructor\",\n\t\"prototype\"\n];\nfunction isSafeUrlSegmentBase(v) {\n\tif (typeof v !== \"string\") return false;\n\tif (v.length === 0 || v.length > 128) return false;\n\tif (UNSAFE_KEYS$1.indexOf(v) > -1) return false;\n\tif (v.indexOf(\"..\") > -1) return false;\n\tif (v.indexOf(\"\\\\\") > -1) return false;\n\tif (/[?#%\\s@]/.test(v)) return false;\n\tif (/[\\x00-\\x1F\\x7F]/.test(v)) return false;\n\treturn true;\n}\nfunction isSafeLangUrlSegment(v) {\n\tif (!isSafeUrlSegmentBase(v)) return false;\n\tif (v.indexOf(\"/\") > -1) return false;\n\treturn true;\n}\nfunction isSafeNsUrlSegment(v) {\n\treturn isSafeUrlSegmentBase(v);\n}\nconst SAFETY_CHECK_BY_KEY = {\n\tlng: isSafeLangUrlSegment,\n\tns: isSafeNsUrlSegment\n};\nfunction sanitizeLogValue(v) {\n\tif (typeof v !== \"string\") return v;\n\treturn v.replace(/[\\r\\n\\x00-\\x1F\\x7F]/g, \" \");\n}\nfunction redactUrlCredentials(u) {\n\tif (typeof u !== \"string\" || u.length === 0) return u;\n\ttry {\n\t\tconst parsed = new URL(u);\n\t\tif (parsed.username || parsed.password) {\n\t\t\tparsed.username = \"\";\n\t\t\tparsed.password = \"\";\n\t\t\treturn parsed.toString();\n\t\t}\n\t\treturn u;\n\t} catch (e) {\n\t\treturn u.replace(/(\\/\\/)[^/@\\s]+@/g, \"$1\");\n\t}\n}\nfunction hasXMLHttpRequest() {\n\treturn typeof XMLHttpRequest === \"function\" || typeof XMLHttpRequest === \"object\";\n}\n/**\n* Determine whether the given `maybePromise` is a Promise.\n*\n* @param {*} maybePromise\n*\n* @returns {Boolean}\n*/\nfunction isPromise(maybePromise) {\n\treturn !!maybePromise && typeof maybePromise.then === \"function\";\n}\n/**\n* Convert any value to a Promise than will resolve to this value.\n*\n* @param {*} maybePromise\n*\n* @returns {Promise}\n*/\nfunction makePromise(maybePromise) {\n\tif (isPromise(maybePromise)) return maybePromise;\n\treturn Promise.resolve(maybePromise);\n}\nconst interpolationRegexp = /\\{\\{(.+?)\\}\\}/g;\nfunction interpolateUrl(str, data) {\n\tlet unsafe = false;\n\tconst result = str.replace(interpolationRegexp, (match, key) => {\n\t\tconst k = key.trim();\n\t\tif (UNSAFE_KEYS$1.indexOf(k) > -1) return match;\n\t\tconst value = data[k];\n\t\tif (value == null) return match;\n\t\tconst check = SAFETY_CHECK_BY_KEY[k] || isSafeLangUrlSegment;\n\t\tconst segments = String(value).split(\"+\");\n\t\tfor (const seg of segments) if (!check(seg)) {\n\t\t\tunsafe = true;\n\t\t\treturn match;\n\t\t}\n\t\treturn segments.join(\"+\");\n\t});\n\treturn unsafe ? null : result;\n}\n//#endregion\n//#region lib/request.js\nconst g = typeof globalThis !== \"undefined\" ? globalThis : typeof global !== \"undefined\" ? global : typeof window !== \"undefined\" ? window : void 0;\nlet fetchApi;\nif (typeof fetch === \"function\") fetchApi = fetch;\nelse if (g && typeof g.fetch === \"function\") fetchApi = g.fetch;\nconst XmlHttpRequestApi = hasXMLHttpRequest() && g ? g.XMLHttpRequest : void 0;\nconst ActiveXObjectApi = typeof ActiveXObject === \"function\" && g ? g.ActiveXObject : void 0;\nconst UNSAFE_KEYS = [\n\t\"__proto__\",\n\t\"constructor\",\n\t\"prototype\"\n];\nconst addQueryString = (url, params) => {\n\tif (params && typeof params === \"object\") {\n\t\tlet queryString = \"\";\n\t\tfor (const paramName of Object.keys(params)) {\n\t\t\tif (UNSAFE_KEYS.indexOf(paramName) > -1) continue;\n\t\t\tqueryString += \"&\" + encodeURIComponent(paramName) + \"=\" + encodeURIComponent(params[paramName]);\n\t\t}\n\t\tif (!queryString) return url;\n\t\turl = url + (url.indexOf(\"?\") !== -1 ? \"&\" : \"?\") + queryString.slice(1);\n\t}\n\treturn url;\n};\nconst fetchIt = (url, fetchOptions, callback, altFetch) => {\n\tconst resolver = (response) => {\n\t\tif (!response.ok) return callback(response.statusText || \"Error\", { status: response.status });\n\t\tresponse.text().then((data) => {\n\t\t\tcallback(null, {\n\t\t\t\tstatus: response.status,\n\t\t\t\tdata\n\t\t\t});\n\t\t}).catch(callback);\n\t};\n\tif (altFetch) {\n\t\tconst altResponse = altFetch(url, fetchOptions);\n\t\tif (altResponse instanceof Promise) {\n\t\t\taltResponse.then(resolver).catch(callback);\n\t\t\treturn;\n\t\t}\n\t}\n\tif (typeof fetch === \"function\") fetch(url, fetchOptions).then(resolver).catch(callback);\n\telse fetchApi(url, fetchOptions).then(resolver).catch(callback);\n};\nconst requestWithFetch = (options, url, payload, callback) => {\n\tif (options.queryStringParams) url = addQueryString(url, options.queryStringParams);\n\tconst headers = { ...typeof options.customHeaders === \"function\" ? options.customHeaders() : options.customHeaders };\n\tif (typeof window === \"undefined\" && typeof global !== \"undefined\" && typeof global.process !== \"undefined\" && global.process.versions && global.process.versions.node) headers[\"User-Agent\"] = `i18next-http-backend (node/${global.process.version}; ${global.process.platform} ${global.process.arch})`;\n\tif (payload) headers[\"Content-Type\"] = \"application/json\";\n\tconst reqOptions = typeof options.requestOptions === \"function\" ? options.requestOptions(payload) : options.requestOptions;\n\tconst fetchOptions = {\n\t\tmethod: payload ? \"POST\" : \"GET\",\n\t\tbody: payload ? options.stringify(payload) : void 0,\n\t\theaders,\n\t\t...options._omitFetchOptions ? {} : reqOptions\n\t};\n\tconst altFetch = typeof options.alternateFetch === \"function\" && options.alternateFetch.length >= 1 ? options.alternateFetch : void 0;\n\ttry {\n\t\tfetchIt(url, fetchOptions, callback, altFetch);\n\t} catch (e) {\n\t\tif (!reqOptions || Object.keys(reqOptions).length === 0 || !e.message || e.message.indexOf(\"not implemented\") < 0) return callback(e);\n\t\ttry {\n\t\t\tObject.keys(reqOptions).forEach((opt) => {\n\t\t\t\tdelete fetchOptions[opt];\n\t\t\t});\n\t\t\tfetchIt(url, fetchOptions, callback, altFetch);\n\t\t\toptions._omitFetchOptions = true;\n\t\t} catch (err) {\n\t\t\tcallback(err);\n\t\t}\n\t}\n};\nconst requestWithXmlHttpRequest = (options, url, payload, callback) => {\n\tif (payload && typeof payload === \"object\") payload = addQueryString(\"\", payload).slice(1);\n\tif (options.queryStringParams) url = addQueryString(url, options.queryStringParams);\n\ttry {\n\t\tconst x = XmlHttpRequestApi ? new XmlHttpRequestApi() : new ActiveXObjectApi(\"MSXML2.XMLHTTP.3.0\");\n\t\tx.open(payload ? \"POST\" : \"GET\", url, 1);\n\t\tif (!options.crossDomain) x.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n\t\tx.withCredentials = !!options.withCredentials;\n\t\tif (payload) x.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\n\t\tif (x.overrideMimeType) x.overrideMimeType(\"application/json\");\n\t\tlet h = options.customHeaders;\n\t\th = typeof h === \"function\" ? h() : h;\n\t\tif (h) for (const i of Object.keys(h)) {\n\t\t\tif (UNSAFE_KEYS.indexOf(i) > -1) continue;\n\t\t\tx.setRequestHeader(i, h[i]);\n\t\t}\n\t\tx.onreadystatechange = () => {\n\t\t\tx.readyState > 3 && callback(x.status >= 400 ? x.statusText : null, {\n\t\t\t\tstatus: x.status,\n\t\t\t\tdata: x.responseText\n\t\t\t});\n\t\t};\n\t\tx.send(payload);\n\t} catch (e) {\n\t\tconsole && console.log(e);\n\t}\n};\nconst request = (options, url, payload, callback) => {\n\tif (typeof payload === \"function\") {\n\t\tcallback = payload;\n\t\tpayload = void 0;\n\t}\n\tcallback = callback || (() => {});\n\tif (fetchApi && url.indexOf(\"file:\") !== 0) return requestWithFetch(options, url, payload, callback);\n\tif (hasXMLHttpRequest() || typeof ActiveXObject === \"function\") return requestWithXmlHttpRequest(options, url, payload, callback);\n\tcallback(/* @__PURE__ */ new Error(\"No fetch and no xhr implementation found!\"));\n};\n//#endregion\n//#region lib/index.js\nconst getDefaults = () => {\n\treturn {\n\t\tloadPath: \"/locales/{{lng}}/{{ns}}.json\",\n\t\taddPath: \"/locales/add/{{lng}}/{{ns}}\",\n\t\tparse: (data) => JSON.parse(data),\n\t\tstringify: JSON.stringify,\n\t\tparsePayload: (namespace, key, fallbackValue) => ({ [key]: fallbackValue || \"\" }),\n\t\tparseLoadPayload: (languages, namespaces) => void 0,\n\t\trequest,\n\t\treloadInterval: typeof window !== \"undefined\" ? false : 3600 * 1e3,\n\t\tcustomHeaders: {},\n\t\tqueryStringParams: {},\n\t\tcrossDomain: false,\n\t\twithCredentials: false,\n\t\toverrideMimeType: false,\n\t\trequestOptions: {\n\t\t\tmode: \"cors\",\n\t\t\tcredentials: \"same-origin\",\n\t\t\tcache: \"default\"\n\t\t}\n\t};\n};\nvar Backend = class {\n\tconstructor(services, options = {}, allOptions = {}) {\n\t\tthis.services = services;\n\t\tthis.options = options;\n\t\tthis.allOptions = allOptions;\n\t\tthis.type = \"backend\";\n\t\tthis.init(services, options, allOptions);\n\t}\n\tinit(services, options = {}, allOptions = {}) {\n\t\tthis.services = services;\n\t\tthis.options = {\n\t\t\t...getDefaults(),\n\t\t\t...this.options || {},\n\t\t\t...options\n\t\t};\n\t\tthis.allOptions = allOptions;\n\t\tif (this.services && this.options.reloadInterval) {\n\t\t\tconst timer = setInterval(() => this.reload(), this.options.reloadInterval);\n\t\t\tif (typeof timer === \"object\" && typeof timer.unref === \"function\") timer.unref();\n\t\t}\n\t}\n\treadMulti(languages, namespaces, callback) {\n\t\tthis._readAny(languages, languages, namespaces, namespaces, callback);\n\t}\n\tread(language, namespace, callback) {\n\t\tthis._readAny([language], language, [namespace], namespace, callback);\n\t}\n\t_readAny(languages, loadUrlLanguages, namespaces, loadUrlNamespaces, callback) {\n\t\tlet loadPath = this.options.loadPath;\n\t\tif (typeof this.options.loadPath === \"function\") loadPath = this.options.loadPath(languages, namespaces);\n\t\tloadPath = makePromise(loadPath);\n\t\tloadPath.then((resolvedLoadPath) => {\n\t\t\tif (!resolvedLoadPath) return callback(null, {});\n\t\t\tconst url = interpolateUrl(resolvedLoadPath, {\n\t\t\t\tlng: languages.join(\"+\"),\n\t\t\t\tns: namespaces.join(\"+\")\n\t\t\t});\n\t\t\tif (url == null) {\n\t\t\t\tconst safeLngs = languages.map(sanitizeLogValue).join(\", \");\n\t\t\t\tconst safeNss = namespaces.map(sanitizeLogValue).join(\", \");\n\t\t\t\treturn callback(/* @__PURE__ */ new Error(\"i18next-http-backend: unsafe lng/ns value \u2014 refusing to build request URL for languages=[\" + safeLngs + \"] namespaces=[\" + safeNss + \"]\"), false);\n\t\t\t}\n\t\t\tthis.loadUrl(url, callback, loadUrlLanguages, loadUrlNamespaces);\n\t\t});\n\t}\n\tloadUrl(url, callback, languages, namespaces) {\n\t\tconst lng = typeof languages === \"string\" ? [languages] : languages;\n\t\tconst ns = typeof namespaces === \"string\" ? [namespaces] : namespaces;\n\t\tconst payload = this.options.parseLoadPayload(lng, ns);\n\t\tconst safeUrl = sanitizeLogValue(redactUrlCredentials(url));\n\t\tthis.options.request(this.options, url, payload, (err, res) => {\n\t\t\tif (res && (res.status >= 500 && res.status < 600 || !res.status)) return callback(\"failed loading \" + safeUrl + \"; status code: \" + res.status, true);\n\t\t\tif (res && res.status >= 400 && res.status < 500) return callback(\"failed loading \" + safeUrl + \"; status code: \" + res.status, false);\n\t\t\tif (!res && err && err.message) {\n\t\t\t\tconst errorMessage = err.message.toLowerCase();\n\t\t\t\tif ([\n\t\t\t\t\t\"failed\",\n\t\t\t\t\t\"fetch\",\n\t\t\t\t\t\"network\",\n\t\t\t\t\t\"load\"\n\t\t\t\t].find((term) => errorMessage.indexOf(term) > -1)) return callback(\"failed loading \" + safeUrl + \": \" + sanitizeLogValue(err.message), true);\n\t\t\t}\n\t\t\tif (err) return callback(err, false);\n\t\t\tlet ret, parseErr;\n\t\t\ttry {\n\t\t\t\tif (typeof res.data === \"string\") ret = this.options.parse(res.data, languages, namespaces);\n\t\t\t\telse ret = res.data;\n\t\t\t} catch (e) {\n\t\t\t\tparseErr = \"failed parsing \" + safeUrl + \" to json\";\n\t\t\t}\n\t\t\tif (parseErr) return callback(parseErr, false);\n\t\t\tcallback(null, ret);\n\t\t});\n\t}\n\tcreate(languages, namespace, key, fallbackValue, callback) {\n\t\tif (!this.options.addPath) return;\n\t\tif (typeof languages === \"string\") languages = [languages];\n\t\tconst payload = this.options.parsePayload(namespace, key, fallbackValue);\n\t\tlet finished = 0;\n\t\tconst dataArray = [];\n\t\tconst resArray = [];\n\t\tlanguages.forEach((lng) => {\n\t\t\tlet addPath = this.options.addPath;\n\t\t\tif (typeof this.options.addPath === \"function\") addPath = this.options.addPath(lng, namespace);\n\t\t\tconst url = interpolateUrl(addPath, {\n\t\t\t\tlng,\n\t\t\t\tns: namespace\n\t\t\t});\n\t\t\tif (url == null) {\n\t\t\t\tfinished += 1;\n\t\t\t\tif (callback && finished === languages.length) callback(dataArray, resArray);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.options.request(this.options, url, payload, (data, res) => {\n\t\t\t\tfinished += 1;\n\t\t\t\tdataArray.push(data);\n\t\t\t\tresArray.push(res);\n\t\t\t\tif (finished === languages.length) {\n\t\t\t\t\tif (typeof callback === \"function\") callback(dataArray, resArray);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\treload() {\n\t\tconst { backendConnector, languageUtils, logger } = this.services;\n\t\tconst currentLanguage = backendConnector.language;\n\t\tif (currentLanguage && currentLanguage.toLowerCase() === \"cimode\") return;\n\t\tconst toLoad = [];\n\t\tconst append = (lng) => {\n\t\t\tlanguageUtils.toResolveHierarchy(lng).forEach((l) => {\n\t\t\t\tif (toLoad.indexOf(l) < 0) toLoad.push(l);\n\t\t\t});\n\t\t};\n\t\tappend(currentLanguage);\n\t\tif (this.allOptions.preload) this.allOptions.preload.forEach((l) => append(l));\n\t\ttoLoad.forEach((lng) => {\n\t\t\tthis.allOptions.ns.forEach((ns) => {\n\t\t\t\tbackendConnector.read(lng, ns, \"read\", null, null, (err, data) => {\n\t\t\t\t\tif (err) logger.warn(`loading namespace ${ns} for language ${lng} failed`, err);\n\t\t\t\t\tif (!err && data) logger.log(`loaded namespace ${ns} for language ${lng}`, data);\n\t\t\t\t\tbackendConnector.loaded(`${lng}|${ns}`, err, data);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t}\n};\nBackend.type = \"backend\";\n//#endregion\nexport { Backend as default };\n", "import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperty(e, r, t) {\n return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nexport { _defineProperty as default };", "import _defineProperty from '@babel/runtime/helpers/esm/defineProperty';\nimport _classCallCheck from '@babel/runtime/helpers/esm/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/esm/createClass';\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n/* eslint-disable max-classes-per-file */\nvar Storage = /*#__PURE__*/function () {\n function Storage(options) {\n _classCallCheck(this, Storage);\n this.store = options.store;\n }\n return _createClass(Storage, [{\n key: \"setItem\",\n value: function setItem(key, value) {\n if (this.store) {\n try {\n this.store.setItem(key, value);\n } catch (e) {\n // f.log('failed to set value for key \"' + key + '\" to localStorage.');\n }\n }\n }\n }, {\n key: \"getItem\",\n value: function getItem(key, value) {\n if (this.store) {\n try {\n return this.store.getItem(key, value);\n } catch (e) {\n // f.log('failed to get value for key \"' + key + '\" from localStorage.');\n }\n }\n return undefined;\n }\n }]);\n}();\nfunction getDefaults() {\n var store = null;\n try {\n store = window.localStorage;\n } catch (e) {\n if (typeof window !== 'undefined') {\n console.log('Failed to load local storage.', e);\n }\n }\n return {\n prefix: 'i18next_res_',\n expirationTime: 7 * 24 * 60 * 60 * 1000,\n defaultVersion: undefined,\n getVersion: undefined,\n versions: {},\n store: store\n };\n}\nvar Cache = /*#__PURE__*/function () {\n function Cache(services) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _classCallCheck(this, Cache);\n this.init(services, options);\n this.type = 'backend';\n }\n return _createClass(Cache, [{\n key: \"init\",\n value: function init(services) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.services = services;\n this.options = _objectSpread(_objectSpread(_objectSpread({}, getDefaults()), this.options), options);\n this.storage = new Storage(this.options);\n }\n }, {\n key: \"read\",\n value: function read(language, namespace, callback) {\n var nowMS = Date.now();\n if (!this.storage.store) {\n return callback(null, null);\n }\n var local = this.storage.getItem(\"\".concat(this.options.prefix).concat(language, \"-\").concat(namespace));\n if (local) {\n local = JSON.parse(local);\n var version = this.getVersion(language, namespace);\n if (\n // expiration field is mandatory, and should not be expired\n local.i18nStamp && local.i18nStamp + this.options.expirationTime > nowMS &&\n // there should be no language version set, or if it is, it should match the one in translation\n version === local.i18nVersion) {\n var i18nStamp = local.i18nStamp;\n delete local.i18nVersion;\n delete local.i18nStamp;\n return callback(null, local, i18nStamp);\n }\n }\n return callback(null, null);\n }\n }, {\n key: \"save\",\n value: function save(language, namespace, data) {\n if (this.storage.store) {\n data.i18nStamp = Date.now();\n\n // language version (if set)\n var version = this.getVersion(language, namespace);\n if (version) {\n data.i18nVersion = version;\n }\n\n // save\n this.storage.setItem(\"\".concat(this.options.prefix).concat(language, \"-\").concat(namespace), JSON.stringify(data));\n }\n }\n }, {\n key: \"getVersion\",\n value: function getVersion(language, namespace) {\n var _this$options$getVers, _this$options;\n return ((_this$options$getVers = (_this$options = this.options).getVersion) === null || _this$options$getVers === void 0 ? void 0 : _this$options$getVers.call(_this$options, language, namespace)) || this.options.versions[language] || this.options.defaultVersion;\n }\n }]);\n}();\nCache.type = 'backend';\n\nexport { Cache as default };\n", "import { useContext } from 'react';\nimport { nodesToString, Trans as TransWithoutContext } from './TransWithoutContext.js';\nimport { getI18n, I18nContext } from './context.js';\nexport { nodesToString };\nexport function Trans({\n children,\n count,\n parent,\n i18nKey,\n context,\n tOptions = {},\n values,\n defaults,\n components,\n ns,\n i18n: i18nFromProps,\n t: tFromProps,\n shouldUnescape,\n ...additionalProps\n}) {\n const {\n i18n: i18nFromContext,\n defaultNS: defaultNSFromContext\n } = useContext(I18nContext) || {};\n const i18n = i18nFromProps || i18nFromContext || getI18n();\n const t = tFromProps || i18n?.t.bind(i18n);\n return TransWithoutContext({\n children,\n count,\n parent,\n i18nKey,\n context,\n tOptions,\n values,\n defaults,\n components,\n ns: ns || t?.ns || defaultNSFromContext || i18n?.options?.defaultNS,\n i18n,\n t: tFromProps,\n shouldUnescape,\n ...additionalProps\n });\n}", "import { Fragment, isValidElement, cloneElement, createElement, Children } from 'react';\nimport { keyFromSelector } from 'i18next';\nimport HTML from 'html-parse-stringify';\nimport { isObject, isString, warn, warnOnce } from './utils.js';\nimport { getDefaults } from './defaults.js';\nimport { getI18n } from './i18nInstance.js';\nimport { unescape } from './unescape.js';\nconst hasChildren = (node, checkLength) => {\n if (!node) return false;\n const base = node.props?.children ?? node.children;\n if (checkLength) return base.length > 0;\n return !!base;\n};\nconst getChildren = node => {\n if (!node) return [];\n const children = node.props?.children ?? node.children;\n return node.props?.i18nIsDynamicList ? getAsArray(children) : children;\n};\nconst hasValidReactChildren = children => Array.isArray(children) && children.every(isValidElement);\nconst getAsArray = data => Array.isArray(data) ? data : [data];\nconst mergeProps = (source, target) => {\n const newTarget = {\n ...target\n };\n newTarget.props = {\n ...target.props,\n ...source.props\n };\n return newTarget;\n};\nconst getValuesFromChildren = children => {\n const values = {};\n if (!children) return values;\n const getData = childs => {\n const childrenArray = getAsArray(childs);\n childrenArray.forEach(child => {\n if (isString(child)) return;\n if (hasChildren(child)) getData(getChildren(child));else if (isObject(child) && !isValidElement(child)) Object.assign(values, child);\n });\n };\n getData(children);\n return values;\n};\nexport const nodesToString = (children, i18nOptions, i18n, i18nKey) => {\n if (!children) return '';\n let stringNode = '';\n const childrenArray = getAsArray(children);\n const keepArray = i18nOptions?.transSupportBasicHtmlNodes ? i18nOptions.transKeepBasicHtmlNodesFor ?? [] : [];\n childrenArray.forEach((child, childIndex) => {\n if (isString(child)) {\n stringNode += `${child}`;\n return;\n }\n if (isValidElement(child)) {\n const {\n props,\n type\n } = child;\n const childPropsCount = Object.keys(props).length;\n const shouldKeepChild = keepArray.indexOf(type) > -1;\n const childChildren = props.children;\n if (!childChildren && shouldKeepChild && !childPropsCount) {\n stringNode += `<${type}/>`;\n return;\n }\n if (!childChildren && (!shouldKeepChild || childPropsCount) || props.i18nIsDynamicList) {\n stringNode += `<${childIndex}></${childIndex}>`;\n return;\n }\n if (shouldKeepChild && childPropsCount <= 1) {\n const cnt = isString(childChildren) ? childChildren : nodesToString(childChildren, i18nOptions, i18n, i18nKey);\n stringNode += `<${type}>${cnt}</${type}>`;\n return;\n }\n const content = nodesToString(childChildren, i18nOptions, i18n, i18nKey);\n stringNode += `<${childIndex}>${content}</${childIndex}>`;\n return;\n }\n if (child === null) {\n warn(i18n, 'TRANS_NULL_VALUE', `Passed in a null value as child`, {\n i18nKey\n });\n return;\n }\n if (isObject(child)) {\n const {\n format,\n ...clone\n } = child;\n const keys = Object.keys(clone);\n if (keys.length === 1) {\n const value = format ? `${keys[0]}, ${format}` : keys[0];\n stringNode += `{{${value}}}`;\n return;\n }\n warn(i18n, 'TRANS_INVALID_OBJ', `Invalid child - Object should only have keys {{ value, format }} (format is optional).`, {\n i18nKey,\n child\n });\n return;\n }\n warn(i18n, 'TRANS_INVALID_VAR', `Passed in a variable like {number} - pass variables for interpolation as full objects like {{number}}.`, {\n i18nKey,\n child\n });\n });\n return stringNode;\n};\nconst escapeLiteralLessThan = (str, keepArray = [], knownComponentsMap = {}) => {\n if (!str) return str;\n const knownNames = Object.keys(knownComponentsMap);\n const allValidNames = [...keepArray, ...knownNames];\n let result = '';\n let i = 0;\n while (i < str.length) {\n if (str[i] === '<') {\n let isValidTag = false;\n const closingMatch = str.slice(i).match(/^<\\/(\\d+|[a-zA-Z][a-zA-Z0-9_-]*)>/);\n if (closingMatch) {\n const tagName = closingMatch[1];\n if (/^\\d+$/.test(tagName) || allValidNames.includes(tagName)) {\n isValidTag = true;\n result += closingMatch[0];\n i += closingMatch[0].length;\n }\n }\n if (!isValidTag) {\n const openingMatch = str.slice(i).match(/^<(\\d+|[a-zA-Z][a-zA-Z0-9_-]*)(\\s+[\\w-]+(?:=(?:\"[^\"]*\"|'[^']*'|[^\\s>]+))?)*\\s*(\\/)?>/);\n if (openingMatch) {\n const tagName = openingMatch[1];\n if (/^\\d+$/.test(tagName) || allValidNames.includes(tagName)) {\n isValidTag = true;\n result += openingMatch[0];\n i += openingMatch[0].length;\n }\n }\n }\n if (!isValidTag) {\n result += '<';\n i += 1;\n }\n } else {\n result += str[i];\n i += 1;\n }\n }\n return result;\n};\nconst renderNodes = (children, knownComponentsMap, targetString, i18n, i18nOptions, combinedTOpts, shouldUnescape) => {\n if (targetString === '') return [];\n const keepArray = i18nOptions.transKeepBasicHtmlNodesFor || [];\n const emptyChildrenButNeedsHandling = targetString && new RegExp(keepArray.map(keep => `<${keep}`).join('|')).test(targetString);\n if (!children && !knownComponentsMap && !emptyChildrenButNeedsHandling && !shouldUnescape) return [targetString];\n const data = knownComponentsMap ?? {};\n const getData = childs => {\n const childrenArray = getAsArray(childs);\n childrenArray.forEach(child => {\n if (isString(child)) return;\n if (hasChildren(child)) getData(getChildren(child));else if (isObject(child) && !isValidElement(child)) Object.assign(data, child);\n });\n };\n getData(children);\n const escapedString = escapeLiteralLessThan(targetString, keepArray, data);\n const ast = HTML.parse(`<0>${escapedString}</0>`);\n const opts = {\n ...data,\n ...combinedTOpts\n };\n const renderInner = (child, node, rootReactNode) => {\n const childs = getChildren(child);\n const mappedChildren = mapAST(childs, node.children, rootReactNode);\n return hasValidReactChildren(childs) && mappedChildren.length === 0 || child.props?.i18nIsDynamicList ? childs : mappedChildren;\n };\n const pushTranslatedJSX = (child, inner, mem, i, isVoid) => {\n if (child.dummy) {\n child.children = inner;\n mem.push(cloneElement(child, {\n key: i\n }, isVoid ? undefined : inner));\n } else {\n mem.push(...Children.map([child], c => {\n if (c.type === Fragment || c.props?.i18nIsDynamicList !== undefined) {\n const freshProps = {\n key: i\n };\n if (c && c.props) {\n Object.keys(c.props).forEach(k => {\n if (k === 'children' || k === 'i18nIsDynamicList') return;\n freshProps[k] = c.props[k];\n });\n }\n return createElement(c.type, freshProps, isVoid ? null : inner);\n }\n const override = {\n key: i\n };\n if (c && c.props) {\n Object.keys(c.props).forEach(k => {\n if (k === 'ref' || k === 'children') return;\n override[k] = c.props[k];\n });\n }\n return cloneElement(c, override, isVoid ? null : inner);\n }));\n }\n };\n const mapAST = (reactNode, astNode, rootReactNode) => {\n const reactNodes = getAsArray(reactNode);\n const astNodes = getAsArray(astNode);\n const keepTagOccurrence = {};\n return astNodes.reduce((mem, node, i) => {\n const translationContent = node.children?.[0]?.content && i18n.services.interpolator.interpolate(node.children[0].content, opts, i18n.language);\n if (node.type === 'tag') {\n let tmp = reactNodes[parseInt(node.name, 10)];\n if (!tmp && knownComponentsMap) tmp = knownComponentsMap[node.name];\n if (rootReactNode.length === 1 && !tmp) tmp = rootReactNode[0][node.name];\n if (!tmp) tmp = {};\n const props = {\n ...node.attrs\n };\n if (shouldUnescape) {\n Object.keys(props).forEach(p => {\n const val = props[p];\n if (isString(val)) {\n props[p] = unescape(val);\n }\n });\n }\n const child = Object.keys(props).length !== 0 ? mergeProps({\n props\n }, tmp) : tmp;\n const isElement = isValidElement(child);\n const isValidTranslationWithChildren = isElement && hasChildren(node, true) && !node.voidElement;\n const isEmptyTransWithHTML = emptyChildrenButNeedsHandling && isObject(child) && child.dummy && !isElement;\n const isKnownComponent = isObject(knownComponentsMap) && Object.hasOwnProperty.call(knownComponentsMap, node.name);\n if (isString(child)) {\n const value = i18n.services.interpolator.interpolate(child, opts, i18n.language);\n mem.push(value);\n } else if (hasChildren(child) || isValidTranslationWithChildren) {\n const inner = renderInner(child, node, rootReactNode);\n pushTranslatedJSX(child, inner, mem, i);\n } else if (isEmptyTransWithHTML) {\n const inner = mapAST(reactNodes, node.children, rootReactNode);\n pushTranslatedJSX(child, inner, mem, i);\n } else if (Number.isNaN(parseFloat(node.name))) {\n if (isKnownComponent) {\n const inner = renderInner(child, node, rootReactNode);\n pushTranslatedJSX(child, inner, mem, i, node.voidElement);\n } else if (i18nOptions.transSupportBasicHtmlNodes && keepArray.indexOf(node.name) > -1) {\n if (node.voidElement) {\n mem.push(createElement(node.name, {\n key: `${node.name}-${i}`\n }));\n } else {\n const occurrence = keepTagOccurrence[node.name] || 0;\n keepTagOccurrence[node.name] = occurrence + 1;\n let matched;\n let seen = 0;\n for (let r = 0; r < reactNodes.length; r += 1) {\n const rn = reactNodes[r];\n if (isValidElement(rn) && rn.type === node.name) {\n if (seen === occurrence) {\n matched = rn;\n break;\n }\n seen += 1;\n }\n }\n const innerScope = matched ? getAsArray(getChildren(matched)) : reactNodes;\n const inner = mapAST(innerScope, node.children, rootReactNode);\n mem.push(createElement(node.name, {\n key: `${node.name}-${i}`\n }, inner));\n }\n } else if (node.voidElement) {\n mem.push(`<${node.name} />`);\n } else {\n const inner = mapAST(reactNodes, node.children, rootReactNode);\n mem.push(`<${node.name}>${inner}</${node.name}>`);\n }\n } else if (isObject(child) && !isElement) {\n const content = node.children[0] ? translationContent : null;\n if (content) mem.push(content);\n } else {\n pushTranslatedJSX(child, translationContent, mem, i, node.children.length !== 1 || !translationContent);\n }\n } else if (node.type === 'text') {\n const wrapTextNodes = i18nOptions.transWrapTextNodes;\n const unescapeFn = typeof i18nOptions.unescape === 'function' ? i18nOptions.unescape : getDefaults().unescape;\n const content = shouldUnescape ? unescapeFn(i18n.services.interpolator.interpolate(node.content, opts, i18n.language)) : i18n.services.interpolator.interpolate(node.content, opts, i18n.language);\n if (wrapTextNodes) {\n mem.push(createElement(wrapTextNodes, {\n key: `${node.name}-${i}`\n }, content));\n } else {\n mem.push(content);\n }\n }\n return mem;\n }, []);\n };\n const result = mapAST([{\n dummy: true,\n children: children || []\n }], ast, getAsArray(children || []));\n return getChildren(result[0]);\n};\nconst fixComponentProps = (component, index, translation) => {\n const componentKey = component.key || index;\n const comp = cloneElement(component, {\n key: componentKey\n });\n if (!comp.props || !comp.props.children || translation.indexOf(`${index}/>`) < 0 && translation.indexOf(`${index} />`) < 0) {\n return comp;\n }\n function Componentized() {\n return createElement(Fragment, null, comp);\n }\n return createElement(Componentized, {\n key: componentKey\n });\n};\nconst generateArrayComponents = (components, translation) => components.map((c, index) => fixComponentProps(c, index, translation));\nconst generateObjectComponents = (components, translation) => {\n const componentMap = {};\n Object.keys(components).forEach(c => {\n Object.assign(componentMap, {\n [c]: fixComponentProps(components[c], c, translation)\n });\n });\n return componentMap;\n};\nconst generateComponents = (components, translation, i18n, i18nKey) => {\n if (!components) return null;\n if (Array.isArray(components)) {\n return generateArrayComponents(components, translation);\n }\n if (isObject(components)) {\n return generateObjectComponents(components, translation);\n }\n warnOnce(i18n, 'TRANS_INVALID_COMPONENTS', `<Trans /> \"components\" prop expects an object or array`, {\n i18nKey\n });\n return null;\n};\nconst isComponentsMap = object => {\n if (!isObject(object)) return false;\n if (Array.isArray(object)) return false;\n return Object.keys(object).reduce((acc, key) => acc && Number.isNaN(Number.parseFloat(key)), true);\n};\nexport function Trans({\n children,\n count,\n parent,\n i18nKey,\n context,\n tOptions = {},\n values,\n defaults,\n components,\n ns,\n i18n: i18nFromProps,\n t: tFromProps,\n shouldUnescape,\n ...additionalProps\n}) {\n const i18n = i18nFromProps || getI18n();\n if (!i18n) {\n warnOnce(i18n, 'NO_I18NEXT_INSTANCE', `Trans: You need to pass in an i18next instance using i18nextReactModule`, {\n i18nKey\n });\n return children;\n }\n const t = tFromProps || i18n.t.bind(i18n) || (k => k);\n const reactI18nextOptions = {\n ...getDefaults(),\n ...i18n.options?.react\n };\n let namespaces = ns || t.ns || i18n.options?.defaultNS;\n namespaces = isString(namespaces) ? [namespaces] : namespaces || ['translation'];\n const {\n transDefaultProps\n } = reactI18nextOptions;\n const mergedTOptions = transDefaultProps?.tOptions ? {\n ...transDefaultProps.tOptions,\n ...tOptions\n } : tOptions;\n const mergedShouldUnescape = shouldUnescape ?? transDefaultProps?.shouldUnescape;\n const mergedValues = transDefaultProps?.values ? {\n ...transDefaultProps.values,\n ...values\n } : values;\n const mergedComponents = transDefaultProps?.components ? {\n ...transDefaultProps.components,\n ...components\n } : components;\n const nodeAsString = nodesToString(children, reactI18nextOptions, i18n, i18nKey);\n const defaultValue = defaults || mergedTOptions?.defaultValue || nodeAsString || reactI18nextOptions.transEmptyNodeValue || (typeof i18nKey === 'function' ? keyFromSelector(i18nKey) : i18nKey);\n const {\n hashTransKey\n } = reactI18nextOptions;\n const key = i18nKey || (hashTransKey ? hashTransKey(nodeAsString || defaultValue) : nodeAsString || defaultValue);\n if (i18n.options?.interpolation?.defaultVariables) {\n values = mergedValues && Object.keys(mergedValues).length > 0 ? {\n ...mergedValues,\n ...i18n.options.interpolation.defaultVariables\n } : {\n ...i18n.options.interpolation.defaultVariables\n };\n } else {\n values = mergedValues;\n }\n const valuesFromChildren = getValuesFromChildren(children);\n if (valuesFromChildren && typeof valuesFromChildren.count === 'number' && count === undefined) {\n count = valuesFromChildren.count;\n }\n const interpolationOverride = values || count !== undefined && !i18n.options?.interpolation?.alwaysFormat || !children ? mergedTOptions.interpolation : {\n interpolation: {\n ...mergedTOptions.interpolation,\n prefix: '#$?',\n suffix: '?$#'\n }\n };\n const combinedTOpts = {\n ...mergedTOptions,\n context: context || mergedTOptions.context,\n count,\n ...values,\n ...interpolationOverride,\n defaultValue,\n ns: namespaces\n };\n let translation = key ? t(key, combinedTOpts) : defaultValue;\n if (translation === key && defaultValue) translation = defaultValue;\n const generatedComponents = generateComponents(mergedComponents, translation, i18n, i18nKey);\n let indexedChildren = generatedComponents || children;\n let componentsMap = null;\n if (isComponentsMap(generatedComponents)) {\n componentsMap = generatedComponents;\n indexedChildren = children;\n }\n const content = renderNodes(indexedChildren, componentsMap, translation, i18n, reactI18nextOptions, combinedTOpts, mergedShouldUnescape);\n const useAsParent = parent ?? reactI18nextOptions.defaultTransParent;\n return useAsParent ? createElement(useAsParent, additionalProps, content) : content;\n}", "export const warn = (i18n, code, msg, rest) => {\n const args = [msg, {\n code,\n ...(rest || {})\n }];\n if (i18n?.services?.logger?.forward) {\n return i18n.services.logger.forward(args, 'warn', 'react-i18next::', true);\n }\n if (isString(args[0])) args[0] = `react-i18next:: ${args[0]}`;\n if (i18n?.services?.logger?.warn) {\n i18n.services.logger.warn(...args);\n } else if (console?.warn) {\n console.warn(...args);\n }\n};\nconst alreadyWarned = {};\nexport const warnOnce = (i18n, code, msg, rest) => {\n if (isString(msg) && alreadyWarned[msg]) return;\n if (isString(msg)) alreadyWarned[msg] = new Date();\n warn(i18n, code, msg, rest);\n};\nconst loadedClb = (i18n, cb) => () => {\n if (i18n.isInitialized) {\n cb();\n } else {\n const initialized = () => {\n setTimeout(() => {\n i18n.off('initialized', initialized);\n }, 0);\n cb();\n };\n i18n.on('initialized', initialized);\n }\n};\nexport const loadNamespaces = (i18n, ns, cb) => {\n i18n.loadNamespaces(ns, loadedClb(i18n, cb));\n};\nexport const loadLanguages = (i18n, lng, ns, cb) => {\n if (isString(ns)) ns = [ns];\n if (i18n.options.preload && i18n.options.preload.indexOf(lng) > -1) return loadNamespaces(i18n, ns, cb);\n ns.forEach(n => {\n if (i18n.options.ns.indexOf(n) < 0) i18n.options.ns.push(n);\n });\n i18n.loadLanguages(lng, loadedClb(i18n, cb));\n};\nexport const hasLoadedNamespace = (ns, i18n, options = {}) => {\n if (!i18n.languages || !i18n.languages.length) {\n warnOnce(i18n, 'NO_LANGUAGES', 'i18n.languages were undefined or empty', {\n languages: i18n.languages\n });\n return true;\n }\n return i18n.hasLoadedNamespace(ns, {\n lng: options.lng,\n precheck: (i18nInstance, loadNotPending) => {\n if (options.bindI18n && options.bindI18n.indexOf('languageChanging') > -1 && i18nInstance.services.backendConnector.backend && i18nInstance.isLanguageChangingTo && !loadNotPending(i18nInstance.isLanguageChangingTo, ns)) return false;\n }\n });\n};\nexport const getDisplayName = Component => Component.displayName || Component.name || (isString(Component) && Component.length > 0 ? Component : 'Unknown');\nexport const isString = obj => typeof obj === 'string';\nexport const isObject = obj => typeof obj === 'object' && obj !== null;", "const matchHtmlEntity = /&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g;\nconst htmlEntities = {\n '&': '&',\n '&': '&',\n '<': '<',\n '<': '<',\n '>': '>',\n '>': '>',\n ''': \"'\",\n ''': \"'\",\n '"': '\"',\n '"': '\"',\n ' ': ' ',\n ' ': ' ',\n '©': '\u00A9',\n '©': '\u00A9',\n '®': '\u00AE',\n '®': '\u00AE',\n '…': '\u2026',\n '…': '\u2026',\n '/': '/',\n '/': '/'\n};\nconst unescapeHtmlEntity = m => htmlEntities[m];\nexport const unescape = text => text.replace(matchHtmlEntity, unescapeHtmlEntity);", "import { unescape } from './unescape.js';\nlet defaultOptions = {\n bindI18n: 'languageChanged',\n bindI18nStore: '',\n transEmptyNodeValue: '',\n transSupportBasicHtmlNodes: true,\n transWrapTextNodes: '',\n transKeepBasicHtmlNodesFor: ['br', 'strong', 'i', 'p'],\n useSuspense: true,\n unescape,\n transDefaultProps: undefined\n};\nexport const setDefaults = (options = {}) => {\n defaultOptions = {\n ...defaultOptions,\n ...options\n };\n};\nexport const getDefaults = () => defaultOptions;", "let i18nInstance;\nexport const setI18n = instance => {\n i18nInstance = instance;\n};\nexport const getI18n = () => i18nInstance;", "import { createContext } from 'react';\nimport { getDefaults, setDefaults } from './defaults.js';\nimport { getI18n, setI18n } from './i18nInstance.js';\nimport { initReactI18next } from './initReactI18next.js';\nexport { getDefaults, setDefaults, getI18n, setI18n, initReactI18next };\nexport const I18nContext = createContext();\nexport class ReportNamespaces {\n constructor() {\n this.usedNamespaces = {};\n }\n addUsedNamespaces(namespaces) {\n namespaces.forEach(ns => {\n if (!this.usedNamespaces[ns]) this.usedNamespaces[ns] = true;\n });\n }\n getUsedNamespaces() {\n return Object.keys(this.usedNamespaces);\n }\n}\nexport const composeInitialProps = ForComponent => async ctx => {\n const componentsInitialProps = (await ForComponent.getInitialProps?.(ctx)) ?? {};\n const i18nInitialProps = getInitialProps();\n return {\n ...componentsInitialProps,\n ...i18nInitialProps\n };\n};\nexport const getInitialProps = () => {\n const i18n = getI18n();\n if (!i18n) {\n console.warn('react-i18next:: getInitialProps: You will need to pass in an i18next instance by using initReactI18next');\n return {};\n }\n const namespaces = i18n.reportNamespaces?.getUsedNamespaces() ?? [];\n const ret = {};\n const initialI18nStore = {};\n i18n.languages.forEach(l => {\n initialI18nStore[l] = {};\n namespaces.forEach(ns => {\n initialI18nStore[l][ns] = i18n.getResourceBundle(l, ns) || {};\n });\n });\n ret.initialI18nStore = initialI18nStore;\n ret.initialLanguage = i18n.language;\n return ret;\n};", "import { setDefaults } from './defaults.js';\nimport { setI18n } from './i18nInstance.js';\nexport const initReactI18next = {\n type: '3rdParty',\n init(instance) {\n setDefaults(instance.options.react);\n setI18n(instance);\n }\n};", "import { useContext } from 'react';\nimport { IcuTransWithoutContext } from './IcuTransWithoutContext.js';\nimport { getI18n, I18nContext } from './context.js';\nexport function IcuTrans({\n i18nKey,\n defaultTranslation,\n content,\n ns,\n values = {},\n i18n: i18nFromProps,\n t: tFromProps\n}) {\n const {\n i18n: i18nFromContext,\n defaultNS: defaultNSFromContext\n } = useContext(I18nContext) || {};\n const i18n = i18nFromProps || i18nFromContext || getI18n();\n const t = tFromProps || i18n?.t.bind(i18n);\n return IcuTransWithoutContext({\n i18nKey,\n defaultTranslation,\n content,\n ns: ns || t?.ns || defaultNSFromContext || i18n?.options?.defaultNS,\n values,\n i18n,\n t: tFromProps\n });\n}\nIcuTrans.displayName = 'IcuTrans';", "import React from 'react';\nimport { warn, warnOnce, isString } from './utils.js';\nimport { getI18n } from './i18nInstance.js';\nimport { renderTranslation } from './IcuTransUtils/index.js';\nexport function IcuTransWithoutContext({\n i18nKey,\n defaultTranslation,\n content,\n ns,\n values = {},\n i18n: i18nFromProps,\n t: tFromProps\n}) {\n const i18n = i18nFromProps || getI18n();\n if (!i18n) {\n warnOnce(i18n, 'NO_I18NEXT_INSTANCE', `IcuTrans: You need to pass in an i18next instance using i18nextReactModule`, {\n i18nKey\n });\n return React.createElement(React.Fragment, {}, defaultTranslation);\n }\n const t = tFromProps || i18n.t?.bind(i18n) || (k => k);\n let namespaces = ns || t.ns || i18n.options?.defaultNS;\n namespaces = isString(namespaces) ? [namespaces] : namespaces || ['translation'];\n let mergedValues = values;\n if (i18n.options?.interpolation?.defaultVariables) {\n mergedValues = values && Object.keys(values).length > 0 ? {\n ...values,\n ...i18n.options.interpolation.defaultVariables\n } : {\n ...i18n.options.interpolation.defaultVariables\n };\n }\n const translation = t(i18nKey, {\n defaultValue: defaultTranslation,\n ...mergedValues,\n ns: namespaces\n });\n try {\n const rendered = renderTranslation(translation, content);\n return React.createElement(React.Fragment, {}, ...rendered);\n } catch (error) {\n warn(i18n, 'ICU_TRANS_RENDER_ERROR', `IcuTrans component error for key \"${i18nKey}\": ${error.message}`, {\n i18nKey,\n error\n });\n return React.createElement(React.Fragment, {}, translation);\n }\n}\nIcuTransWithoutContext.displayName = 'IcuTransWithoutContext';", "export class TranslationParserError extends Error {\n constructor(message, position, translationString) {\n super(message);\n this.name = 'TranslationParserError';\n this.position = position;\n this.translationString = translationString;\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, TranslationParserError);\n }\n }\n}", "const commonEntities = {\n ' ': '\\u00A0',\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\",\n '©': '\u00A9',\n '®': '\u00AE',\n '™': '\u2122',\n '…': '\u2026',\n '–': '\u2013',\n '—': '\u2014',\n '‘': '\\u2018',\n '’': '\\u2019',\n '‚': '\\u201A',\n '“': '\\u201C',\n '”': '\\u201D',\n '„': '\\u201E',\n '†': '\u2020',\n '‡': '\u2021',\n '•': '\u2022',\n '′': '\u2032',\n '″': '\u2033',\n '‹': '\u2039',\n '›': '\u203A',\n '§': '\u00A7',\n '¶': '\u00B6',\n '·': '\u00B7',\n ' ': '\\u2002',\n ' ': '\\u2003',\n ' ': '\\u2009',\n '€': '\u20AC',\n '£': '\u00A3',\n '¥': '\u00A5',\n '¢': '\u00A2',\n '¤': '\u00A4',\n '×': '\u00D7',\n '÷': '\u00F7',\n '−': '\u2212',\n '±': '\u00B1',\n '≠': '\u2260',\n '≤': '\u2264',\n '≥': '\u2265',\n '≈': '\u2248',\n '≡': '\u2261',\n '∞': '\u221E',\n '∫': '\u222B',\n '∑': '\u2211',\n '∏': '\u220F',\n '√': '\u221A',\n '∂': '\u2202',\n '‰': '\u2030',\n '°': '\u00B0',\n 'µ': '\u00B5',\n '←': '\u2190',\n '↑': '\u2191',\n '→': '\u2192',\n '↓': '\u2193',\n '↔': '\u2194',\n '↵': '\u21B5',\n '⇐': '\u21D0',\n '⇑': '\u21D1',\n '⇒': '\u21D2',\n '⇓': '\u21D3',\n '⇔': '\u21D4',\n 'α': '\u03B1',\n 'β': '\u03B2',\n 'γ': '\u03B3',\n 'δ': '\u03B4',\n 'ε': '\u03B5',\n 'ζ': '\u03B6',\n 'η': '\u03B7',\n 'θ': '\u03B8',\n 'ι': '\u03B9',\n 'κ': '\u03BA',\n 'λ': '\u03BB',\n 'μ': '\u03BC',\n 'ν': '\u03BD',\n 'ξ': '\u03BE',\n 'ο': '\u03BF',\n 'π': '\u03C0',\n 'ρ': '\u03C1',\n 'σ': '\u03C3',\n 'τ': '\u03C4',\n 'υ': '\u03C5',\n 'φ': '\u03C6',\n 'χ': '\u03C7',\n 'ψ': '\u03C8',\n 'ω': '\u03C9',\n 'Α': '\u0391',\n 'Β': '\u0392',\n 'Γ': '\u0393',\n 'Δ': '\u0394',\n 'Ε': '\u0395',\n 'Ζ': '\u0396',\n 'Η': '\u0397',\n 'Θ': '\u0398',\n 'Ι': '\u0399',\n 'Κ': '\u039A',\n 'Λ': '\u039B',\n 'Μ': '\u039C',\n 'Ν': '\u039D',\n 'Ξ': '\u039E',\n 'Ο': '\u039F',\n 'Π': '\u03A0',\n 'Ρ': '\u03A1',\n 'Σ': '\u03A3',\n 'Τ': '\u03A4',\n 'Υ': '\u03A5',\n 'Φ': '\u03A6',\n 'Χ': '\u03A7',\n 'Ψ': '\u03A8',\n 'Ω': '\u03A9',\n 'À': '\u00C0',\n 'Á': '\u00C1',\n 'Â': '\u00C2',\n 'Ã': '\u00C3',\n 'Ä': '\u00C4',\n 'Å': '\u00C5',\n 'Æ': '\u00C6',\n 'Ç': '\u00C7',\n 'È': '\u00C8',\n 'É': '\u00C9',\n 'Ê': '\u00CA',\n 'Ë': '\u00CB',\n 'Ì': '\u00CC',\n 'Í': '\u00CD',\n 'Î': '\u00CE',\n 'Ï': '\u00CF',\n 'Ð': '\u00D0',\n 'Ñ': '\u00D1',\n 'Ò': '\u00D2',\n 'Ó': '\u00D3',\n 'Ô': '\u00D4',\n 'Õ': '\u00D5',\n 'Ö': '\u00D6',\n 'Ø': '\u00D8',\n 'Ù': '\u00D9',\n 'Ú': '\u00DA',\n 'Û': '\u00DB',\n 'Ü': '\u00DC',\n 'Ý': '\u00DD',\n 'Þ': '\u00DE',\n 'ß': '\u00DF',\n 'à': '\u00E0',\n 'á': '\u00E1',\n 'â': '\u00E2',\n 'ã': '\u00E3',\n 'ä': '\u00E4',\n 'å': '\u00E5',\n 'æ': '\u00E6',\n 'ç': '\u00E7',\n 'è': '\u00E8',\n 'é': '\u00E9',\n 'ê': '\u00EA',\n 'ë': '\u00EB',\n 'ì': '\u00EC',\n 'í': '\u00ED',\n 'î': '\u00EE',\n 'ï': '\u00EF',\n 'ð': '\u00F0',\n 'ñ': '\u00F1',\n 'ò': '\u00F2',\n 'ó': '\u00F3',\n 'ô': '\u00F4',\n 'õ': '\u00F5',\n 'ö': '\u00F6',\n 'ø': '\u00F8',\n 'ù': '\u00F9',\n 'ú': '\u00FA',\n 'û': '\u00FB',\n 'ü': '\u00FC',\n 'ý': '\u00FD',\n 'þ': '\u00FE',\n 'ÿ': '\u00FF',\n '¡': '\u00A1',\n '¿': '\u00BF',\n 'ƒ': '\u0192',\n 'ˆ': '\u02C6',\n '˜': '\u02DC',\n 'Œ': '\u0152',\n 'œ': '\u0153',\n 'Š': '\u0160',\n 'š': '\u0161',\n 'Ÿ': '\u0178',\n 'ª': '\u00AA',\n 'º': '\u00BA',\n '¯': '\u00AF',\n '´': '\u00B4',\n '¸': '\u00B8',\n '¹': '\u00B9',\n '²': '\u00B2',\n '³': '\u00B3',\n '¼': '\u00BC',\n '½': '\u00BD',\n '¾': '\u00BE',\n '♠': '\u2660',\n '♣': '\u2663',\n '♥': '\u2665',\n '♦': '\u2666',\n '◊': '\u25CA',\n '‾': '\u203E',\n '⁄': '\u2044',\n '℘': '\u2118',\n 'ℑ': '\u2111',\n 'ℜ': '\u211C',\n 'ℵ': '\u2135'\n};\nconst entityPattern = new RegExp(Object.keys(commonEntities).map(entity => entity.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')).join('|'), 'g');\nexport const decodeHtmlEntities = text => text.replace(entityPattern, match => commonEntities[match]).replace(/&#(\\d+);/g, (_, num) => String.fromCharCode(parseInt(num, 10))).replace(/&#x([0-9a-fA-F]+);/g, (_, hex) => String.fromCharCode(parseInt(hex, 16)));", "export const tokenize = translation => {\n const tokens = [];\n let position = 0;\n let currentText = '';\n const flushText = () => {\n if (currentText) {\n tokens.push({\n type: 'Text',\n value: currentText,\n position: position - currentText.length\n });\n currentText = '';\n }\n };\n while (position < translation.length) {\n const char = translation[position];\n if (char === '<') {\n const tagMatch = translation.slice(position).match(/^<(\\d+)>/);\n if (tagMatch) {\n flushText();\n tokens.push({\n type: 'TagOpen',\n value: tagMatch[0],\n position,\n tagNumber: parseInt(tagMatch[1], 10)\n });\n position += tagMatch[0].length;\n } else {\n const closeTagMatch = translation.slice(position).match(/^<\\/(\\d+)>/);\n if (closeTagMatch) {\n flushText();\n tokens.push({\n type: 'TagClose',\n value: closeTagMatch[0],\n position,\n tagNumber: parseInt(closeTagMatch[1], 10)\n });\n position += closeTagMatch[0].length;\n } else {\n currentText += char;\n position += 1;\n }\n }\n } else {\n currentText += char;\n position += 1;\n }\n }\n flushText();\n return tokens;\n};", "import React from 'react';\nimport { TranslationParserError } from './TranslationParserError.js';\nimport { tokenize } from './tokenizer.js';\nimport { decodeHtmlEntities } from './htmlEntityDecoder.js';\nconst renderDeclarationNode = (declaration, children, childDeclarations) => {\n const {\n type,\n props = {}\n } = declaration;\n if (props.children && Array.isArray(props.children) && childDeclarations) {\n const {\n children: _childrenToRemove,\n ...propsWithoutChildren\n } = props;\n return React.createElement(type, propsWithoutChildren, ...children);\n }\n if (children.length === 0) {\n return React.createElement(type, props);\n }\n if (children.length === 1) {\n return React.createElement(type, props, children[0]);\n }\n return React.createElement(type, props, ...children);\n};\nexport const renderTranslation = (translation, declarations = []) => {\n if (!translation) {\n return [];\n }\n const tokens = tokenize(translation);\n const result = [];\n const stack = [];\n const literalTagNumbers = new Set();\n const getCurrentDeclarations = () => {\n if (stack.length === 0) {\n return declarations;\n }\n const parentFrame = stack[stack.length - 1];\n if (parentFrame.declaration.props?.children && Array.isArray(parentFrame.declaration.props.children)) {\n return parentFrame.declaration.props.children;\n }\n return parentFrame.declarations;\n };\n tokens.forEach(token => {\n switch (token.type) {\n case 'Text':\n {\n const decoded = decodeHtmlEntities(token.value);\n const targetArray = stack.length > 0 ? stack[stack.length - 1].children : result;\n targetArray.push(decoded);\n }\n break;\n case 'TagOpen':\n {\n const {\n tagNumber\n } = token;\n const currentDeclarations = getCurrentDeclarations();\n const declaration = currentDeclarations[tagNumber];\n if (!declaration) {\n literalTagNumbers.add(tagNumber);\n const literalText = `<${tagNumber}>`;\n const targetArray = stack.length > 0 ? stack[stack.length - 1].children : result;\n targetArray.push(literalText);\n break;\n }\n stack.push({\n tagNumber,\n children: [],\n position: token.position,\n declaration,\n declarations: currentDeclarations\n });\n }\n break;\n case 'TagClose':\n {\n const {\n tagNumber\n } = token;\n if (literalTagNumbers.has(tagNumber)) {\n const literalText = `</${tagNumber}>`;\n const literalTargetArray = stack.length > 0 ? stack[stack.length - 1].children : result;\n literalTargetArray.push(literalText);\n literalTagNumbers.delete(tagNumber);\n break;\n }\n if (stack.length === 0) {\n throw new TranslationParserError(`Unexpected closing tag </${tagNumber}> at position ${token.position}`, token.position, translation);\n }\n const frame = stack.pop();\n if (frame.tagNumber !== tagNumber) {\n throw new TranslationParserError(`Mismatched tags: expected </${frame.tagNumber}> but got </${tagNumber}> at position ${token.position}`, token.position, translation);\n }\n const element = renderDeclarationNode(frame.declaration, frame.children, frame.declarations);\n const elementTargetArray = stack.length > 0 ? stack[stack.length - 1].children : result;\n elementTargetArray.push(element);\n }\n break;\n }\n });\n if (stack.length > 0) {\n const unclosed = stack[stack.length - 1];\n throw new TranslationParserError(`Unclosed tag <${unclosed.tagNumber}> at position ${unclosed.position}`, unclosed.position, translation);\n }\n return result;\n};", "import { useContext, useCallback, useMemo, useEffect, useRef, useState } from 'react';\nimport { useSyncExternalStore } from 'use-sync-external-store/shim';\nimport { getI18n, getDefaults, ReportNamespaces, I18nContext } from './context.js';\nimport { warnOnce, loadNamespaces, loadLanguages, hasLoadedNamespace, isString, isObject } from './utils.js';\nconst notReadyT = (k, optsOrDefaultValue) => {\n if (isString(optsOrDefaultValue)) return optsOrDefaultValue;\n if (isObject(optsOrDefaultValue) && isString(optsOrDefaultValue.defaultValue)) return optsOrDefaultValue.defaultValue;\n if (typeof k === 'function') return '';\n if (Array.isArray(k)) {\n const last = k[k.length - 1];\n return typeof last === 'function' ? '' : last;\n }\n return k;\n};\nconst notReadySnapshot = {\n t: notReadyT,\n ready: false\n};\nconst dummySubscribe = () => () => {};\nexport const useTranslation = (ns, props = {}) => {\n const {\n i18n: i18nFromProps\n } = props;\n const {\n i18n: i18nFromContext,\n defaultNS: defaultNSFromContext\n } = useContext(I18nContext) || {};\n const i18n = i18nFromProps || i18nFromContext || getI18n();\n if (i18n && !i18n.reportNamespaces) i18n.reportNamespaces = new ReportNamespaces();\n if (!i18n) {\n warnOnce(i18n, 'NO_I18NEXT_INSTANCE', 'useTranslation: You will need to pass in an i18next instance by using initReactI18next');\n }\n const i18nOptions = useMemo(() => ({\n ...getDefaults(),\n ...i18n?.options?.react,\n ...props\n }), [i18n, props]);\n const {\n useSuspense,\n keyPrefix\n } = i18nOptions;\n const nsOrContext = ns || defaultNSFromContext || i18n?.options?.defaultNS;\n const unstableNamespaces = isString(nsOrContext) ? [nsOrContext] : nsOrContext || ['translation'];\n const namespaces = useMemo(() => unstableNamespaces, unstableNamespaces);\n i18n?.reportNamespaces?.addUsedNamespaces?.(namespaces);\n const revisionRef = useRef(0);\n const subscribe = useCallback(callback => {\n if (!i18n) return dummySubscribe;\n const {\n bindI18n,\n bindI18nStore\n } = i18nOptions;\n const wrappedCallback = () => {\n revisionRef.current += 1;\n callback();\n };\n if (bindI18n) i18n.on(bindI18n, wrappedCallback);\n if (bindI18nStore) i18n.store.on(bindI18nStore, wrappedCallback);\n return () => {\n if (bindI18n) bindI18n.split(' ').forEach(e => i18n.off(e, wrappedCallback));\n if (bindI18nStore) bindI18nStore.split(' ').forEach(e => i18n.store.off(e, wrappedCallback));\n };\n }, [i18n, i18nOptions]);\n const snapshotRef = useRef();\n const getSnapshot = useCallback(() => {\n if (!i18n) {\n return notReadySnapshot;\n }\n const calculatedReady = !!(i18n.isInitialized || i18n.initializedStoreOnce) && namespaces.every(n => hasLoadedNamespace(n, i18n, i18nOptions));\n const currentLng = props.lng || i18n.language;\n const currentRevision = revisionRef.current;\n const lastSnapshot = snapshotRef.current;\n if (lastSnapshot && lastSnapshot.ready === calculatedReady && lastSnapshot.lng === currentLng && lastSnapshot.keyPrefix === keyPrefix && lastSnapshot.revision === currentRevision) {\n return lastSnapshot;\n }\n const calculatedT = i18n.getFixedT(currentLng, i18nOptions.nsMode === 'fallback' ? namespaces : namespaces[0], keyPrefix, {\n scopeNs: namespaces\n });\n const newSnapshot = {\n t: calculatedT,\n ready: calculatedReady,\n lng: currentLng,\n keyPrefix,\n revision: currentRevision\n };\n snapshotRef.current = newSnapshot;\n return newSnapshot;\n }, [i18n, namespaces, keyPrefix, i18nOptions, props.lng]);\n const [loadCount, setLoadCount] = useState(0);\n const {\n t,\n ready\n } = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n useEffect(() => {\n if (i18n && !ready && !useSuspense) {\n const onLoaded = () => setLoadCount(c => c + 1);\n if (props.lng) {\n loadLanguages(i18n, props.lng, namespaces, onLoaded);\n } else {\n loadNamespaces(i18n, namespaces, onLoaded);\n }\n }\n }, [i18n, props.lng, namespaces, ready, useSuspense, loadCount]);\n const finalI18n = i18n || {};\n const wrapperRef = useRef(null);\n const wrapperLangRef = useRef();\n const createI18nWrapper = original => {\n const descriptors = Object.getOwnPropertyDescriptors(original);\n if (descriptors.__original) delete descriptors.__original;\n const wrapper = Object.create(Object.getPrototypeOf(original), descriptors);\n if (!Object.prototype.hasOwnProperty.call(wrapper, '__original')) {\n try {\n Object.defineProperty(wrapper, '__original', {\n value: original,\n writable: false,\n enumerable: false,\n configurable: false\n });\n } catch (_) {}\n }\n return wrapper;\n };\n const ret = useMemo(() => {\n const original = finalI18n;\n const lang = original?.language;\n let i18nWrapper = original;\n if (original) {\n if (wrapperRef.current && wrapperRef.current.__original === original) {\n if (wrapperLangRef.current !== lang) {\n i18nWrapper = createI18nWrapper(original);\n wrapperRef.current = i18nWrapper;\n wrapperLangRef.current = lang;\n } else {\n i18nWrapper = wrapperRef.current;\n }\n } else {\n i18nWrapper = createI18nWrapper(original);\n wrapperRef.current = i18nWrapper;\n wrapperLangRef.current = lang;\n }\n }\n const effectiveT = !ready && !useSuspense ? (...args) => {\n warnOnce(i18n, 'USE_T_BEFORE_READY', 'useTranslation: t was called before ready. When using useSuspense: false, make sure to check the ready flag before using t.');\n return t(...args);\n } : t;\n const arr = [effectiveT, i18nWrapper, ready];\n arr.t = effectiveT;\n arr.i18n = i18nWrapper;\n arr.ready = ready;\n return arr;\n }, [t, finalI18n, ready, finalI18n.resolvedLanguage, finalI18n.language, finalI18n.languages]);\n if (i18n && useSuspense && !ready) {\n throw new Promise(resolve => {\n const onLoaded = () => resolve();\n if (props.lng) {\n loadLanguages(i18n, props.lng, namespaces, onLoaded);\n } else {\n loadNamespaces(i18n, namespaces, onLoaded);\n }\n });\n }\n return ret;\n};", "import { createElement, forwardRef as forwardRefReact } from 'react';\nimport { useTranslation } from './useTranslation.js';\nimport { getDisplayName } from './utils.js';\nexport const withTranslation = (ns, options = {}) => function Extend(WrappedComponent) {\n function I18nextWithTranslation({\n forwardedRef,\n ...rest\n }) {\n const [t, i18n, ready] = useTranslation(ns, {\n ...rest,\n keyPrefix: options.keyPrefix\n });\n const passDownProps = {\n ...rest,\n t,\n i18n,\n tReady: ready\n };\n if (options.withRef && forwardedRef) {\n passDownProps.ref = forwardedRef;\n } else if (!options.withRef && forwardedRef) {\n passDownProps.forwardedRef = forwardedRef;\n }\n return createElement(WrappedComponent, passDownProps);\n }\n I18nextWithTranslation.displayName = `withI18nextTranslation(${getDisplayName(WrappedComponent)})`;\n I18nextWithTranslation.WrappedComponent = WrappedComponent;\n const forwardRef = (props, ref) => createElement(I18nextWithTranslation, Object.assign({}, props, {\n forwardedRef: ref\n }));\n return options.withRef ? forwardRefReact(forwardRef) : I18nextWithTranslation;\n};", "import { createElement, useMemo } from 'react';\nimport { I18nContext } from './context.js';\nexport function I18nextProvider({\n i18n,\n defaultNS,\n children\n}) {\n const value = useMemo(() => ({\n i18n,\n defaultNS\n }), [i18n, defaultNS]);\n return createElement(I18nContext.Provider, {\n value\n }, children);\n}", "import { createElement } from 'react';\nimport { useSSR } from './useSSR.js';\nimport { composeInitialProps } from './context.js';\nimport { getDisplayName } from './utils.js';\nexport const withSSR = () => function Extend(WrappedComponent) {\n function I18nextWithSSR({\n initialI18nStore,\n initialLanguage,\n ...rest\n }) {\n useSSR(initialI18nStore, initialLanguage);\n return createElement(WrappedComponent, {\n ...rest\n });\n }\n I18nextWithSSR.getInitialProps = composeInitialProps(WrappedComponent);\n I18nextWithSSR.displayName = `withI18nextSSR(${getDisplayName(WrappedComponent)})`;\n I18nextWithSSR.WrappedComponent = WrappedComponent;\n return I18nextWithSSR;\n};", "import { useContext } from 'react';\nimport { getI18n, I18nContext } from './context.js';\nimport { warnOnce } from './utils.js';\nexport const useSSR = (initialI18nStore, initialLanguage, props = {}) => {\n const {\n i18n: i18nFromProps\n } = props;\n const {\n i18n: i18nFromContext\n } = useContext(I18nContext) || {};\n const i18n = i18nFromProps || i18nFromContext || getI18n();\n if (!i18n) {\n warnOnce(i18n, 'NO_I18NEXT_INSTANCE', 'useSSR: You will need to pass in an i18next instance by using initReactI18next or by passing it via props or context. In monorepo setups, make sure there is only one instance of react-i18next.');\n return;\n }\n if (i18n.options?.isClone) return;\n if (initialI18nStore && !i18n.initializedStoreOnce) {\n if (!i18n.services?.resourceStore) {\n warnOnce(i18n, 'I18N_NOT_INITIALIZED', 'useSSR: i18n instance was found but not initialized (services.resourceStore is missing). Make sure you call i18next.init() before using useSSR \u2014 e.g. at module level, not only in getStaticProps/getServerSideProps.');\n return;\n }\n i18n.services.resourceStore.data = initialI18nStore;\n i18n.options.ns = Object.values(initialI18nStore).reduce((mem, lngResources) => {\n Object.keys(lngResources).forEach(ns => {\n if (mem.indexOf(ns) < 0) mem.push(ns);\n });\n return mem;\n }, i18n.options.ns);\n i18n.initializedStoreOnce = true;\n i18n.isInitialized = true;\n }\n if (initialLanguage && !i18n.initializedLanguageOnce) {\n i18n.changeLanguage(initialLanguage);\n i18n.initializedLanguageOnce = true;\n }\n};", "{\n \"auth\": {\n \"invalidUsernamePass\": \"Invalid username/password combination\",\n \"incorrectOldPassword\": \"Incorrect Old Password\",\n \"passwordTooShort\": \"Password must be at least 6 characters long\",\n \"passUpdated\": \"Password updated\",\n \"missingRequiredFields\": \"Missing Required Fields\"\n },\n \"error\": {\n \"notFound\": \"Not Found\",\n \"internalError\": \"Internal Server Error\",\n \"invalidArgs\": \"Invalid Arguments\",\n \"badMethod\": \"Bad Method\",\n \"notAuthenticated\": \"Not Authenticated\",\n \"permissionDenied\": \"Permission Denied\"\n },\n \"nav\": {\n \"privateProfileEnabled\": \"private profile enabled\",\n \"darkMode\": \"dark mode\",\n \"lightMode\": \"light mode\",\n \"addUrl\": \"add url\",\n \"addNote\": \"add note\",\n \"notes\": \"notes\",\n \"settings\": \"settings\",\n \"logout\": \"log out\",\n \"login\": \"log in\"\n },\n \"footer\": {\n \"sourceCode\": \"Source Code\"\n },\n \"login\": {\n \"pageTitle\": \"Log In\",\n \"username\": \"Username\",\n \"password\": \"Password\",\n \"submit\": \"Log In\"\n },\n \"changePassword\": {\n \"oldPassword\": \"Old Password\",\n \"newPassword\": \"New Password\",\n \"submit\": \"Save Changes\"\n },\n \"settings\": {\n \"serverDefault\": \"Server Default\",\n \"bookmarklet\": \"add url bookmarklet\",\n \"changePassword\": \"Change Password\",\n \"accountTitle\": \"Account Settings\",\n \"archiveDefault\": \"Archive new non-Private bookmarks by default\",\n \"privateDefault\": \"Default new bookmarks to Private\",\n \"suggestTags\": \"Enable tag suggestions\",\n \"privacyLock\": \"Privacy Lock (Private Account)\",\n \"archivingDisabled\": \"Archiving Disabled\",\n \"language\": \"Language\"\n },\n \"rss\": \"RSS\",\n \"filter\": {\n \"all\": \"all\",\n \"private\": \"private\",\n \"public\": \"public\",\n \"unread\": \"unread\",\n \"untagged\": \"untagged\",\n \"starred\": \"starred\"\n },\n \"pagination\": {\n \"perPage\": \"per page:\"\n },\n \"pager\": {\n \"earlier\": \"\u00AB earlier\",\n \"later\": \"later \u00BB\"\n },\n \"notes\": {\n \"youHave\": \"You have\",\n \"found\": \"Found\",\n \"label\": \"notes:\"\n },\n \"search\": {\n \"placeholder\": \"search\",\n \"clearTitle\": \"clear search results\",\n \"submitTitle\": \"submit search\",\n \"syntaxTitle\": \"search syntax\"\n },\n \"noTitle\": \"[no title]\",\n \"edit\": \"edit\",\n \"delete\": \"delete\",\n \"cancel\": \"cancel\",\n \"destroy\": \"destroy\",\n \"save\": \"save\",\n \"fetch\": \"fetch\",\n \"archive\": \"archive\",\n \"archiving\": \"archiving\",\n \"bmark\": {\n \"archiveLinkTitle\": \"archive link\",\n \"markAsRead\": \"mark as read\",\n \"viewInContext\": \"view in context\",\n \"url\": \"url\",\n \"title\": \"title\",\n \"description\": \"description\",\n \"tags\": \"tags\",\n \"private\": \"private\",\n \"toread\": \"to-read\"\n },\n \"note\": {\n \"killed\": \"you killed this note\",\n \"titleLabel\": \"title:\",\n \"descriptionLabel\": \"description:\",\n \"useMarkdown\": \"use markdown?\",\n \"publicLabel\": \"public?\"\n },\n \"addForm\": {\n \"previouslySaved\": \"previously saved\",\n \"url\": \"URL\",\n \"archive\": \"archive\",\n \"archiveUnavailable\": \"archiving is unavailable for private bookmarks\",\n \"readLater\": \"read later\",\n \"update\": \"update bookmark\",\n \"add\": \"add bookmark\",\n \"killed\": \"you killed this bookmark\"\n },\n \"tagCloud\": {\n \"relatedTags\": \"Related Tags\",\n \"topTags\": \"Top Tags\",\n \"topTagsTitle\": \"show a cloud of your most-used tags\",\n \"allTitle\": \"show all tags\",\n \"min2Title\": \"show tags with at least 2 bookmarks\",\n \"min5Title\": \"show tags with at least 5 bookmarks\",\n \"min10Title\": \"show tags with at least 10 bookmarks\",\n \"min20Title\": \"show tags with at least 20 bookmarks\",\n \"hide\": \"hide\",\n \"show\": \"show\"\n },\n \"docs\": {\n \"title\": \"Understanding the Search Syntax\",\n \"pageFilters\": \"Page filters\",\n \"pageFiltersDesc\": \"Searches are scoped to the currently selected page filter.\",\n \"soGiven\": \"So, given the possible page filters\",\n \"if\": \"If\",\n \"isCurrentlySelectedIncludes\": \"is currently selected, the search includes\",\n \"bookmarks\": \"bookmarks\",\n \"isCurrentlySelectedOnly\": \"is currently selected, the search only includes\",\n \"bookmarksEtc\": \"bookmarks, etc..\",\n \"combineAnd\": \"Combine Searches (AND)\",\n \"separateBySpace\": \"Separate terms by a space.\",\n \"forExample\": \"For example,\",\n \"combineOr\": \"Combine Searches (OR)\",\n \"put\": \"Put\",\n \"betweenQuery\": \"between each search query.\",\n \"excludeWords\": \"Exclude words from your search\",\n \"inFrontWord\": \"in front of a word you want to leave out.\",\n \"exactMatch\": \"Search for an exact match\",\n \"putInQuotes\": \"Put a word or phrase inside quotes.\",\n \"specificField\": \"Search on a specific field\",\n \"inFrontTerm\": \"in front of the term,\",\n \"where\": \"where\",\n \"isOneOfOptions\": \"is one of the options below\",\n \"bookmarkSearch\": \"Bookmark Search\",\n \"noteSearch\": \"Note Search\",\n \"fieldHeader\": \"FIELD\",\n \"exampleHeader\": \"EXAMPLE\",\n \"complexExamples\": \"More Complex Examples\",\n \"complexExample1Desc\": \"\\\"youtube\\\" in url, and title of \\\"haskell\\\" or title of \\\"python\\\" and after 12/31/2017\",\n \"complexExample2Desc\": \"\\\"hacker news\\\" not in title, and \\\"news\\\", \\\"cnn\\\", \\\"npr\\\" anywhere, or \\\"the guardian\\\" in the description\"\n }\n}\n", "import type { Bookmark, Filter } from './types';\n\n/** Server-rendered page data. */\nexport type AppData = {\n /** The list of bookmarks for the current page. */\n bmarks: Bookmark[];\n /** A single bookmark, used when viewing or editing one entry. */\n bmark: Bookmark;\n /** Whether the current user owns the displayed profile. */\n isowner: boolean;\n /** Whether tag suggestions are enabled. */\n suggestTags?: boolean;\n /** Whether the archive backend is enabled. */\n archiveBackendEnabled?: boolean;\n /** The current filter applied to the bookmarks. */\n filter?: Filter;\n};\n\n/** Server-rendered global data. */\nexport type App = {\n /** The HTTP header name used to send the CSRF token. */\n csrfHeaderName: string;\n /** The cookie name that holds the CSRF token. */\n csrfCookieName: string;\n /** The form parameter name used to submit the CSRF token. */\n csrfParamName: string;\n /** The current CSRF token value. */\n csrfToken: string;\n /** URL for the home route. */\n homeR: string;\n /** URL for the logout route. */\n authRlogoutR: string;\n /** URL for the current user's profile, or null if not logged in. */\n userR: string | null;\n /** URL for the current note, or null if not viewing a note. */\n noteR: string | null;\n /** URL for the i18n backend */\n i18nR: string;\n /** The current language code (e.g. 'en', 'fr'). */\n lang: string;\n /** Server-rendered page data. */\n dat: AppData;\n};\n\ndeclare global {\n // Provided by the server in a <script> tag.\n\n var app: App;\n}\n\nexport function app(): App {\n return globalThis.app;\n}\n\nexport function fromNow(locale = navigator.language, date: Date | number | string): string {\n const target = date instanceof Date ? date.getTime() : new Date(date).getTime();\n\n const diff = target - Date.now();\n const abs = Math.abs(diff);\n\n const units: readonly [Intl.RelativeTimeFormatUnit, number][] = [\n ['year', 365 * 24 * 60 * 60 * 1000],\n ['month', 30 * 24 * 60 * 60 * 1000],\n ['day', 24 * 60 * 60 * 1000],\n ['hour', 60 * 60 * 1000],\n ['minute', 60 * 1000],\n ['second', 1000],\n ];\n\n const rtf = new Intl.RelativeTimeFormat(locale, { numeric: 'auto' });\n\n for (const [unit, ms] of units) {\n if (abs >= ms || unit === 'second') {\n return rtf.format(Math.round(diff / ms), unit);\n }\n }\n\n // Unreachable, but satisfies TypeScript.\n return '';\n}\n\nexport function shdatetime(lang: string, dateString: string): string {\n return new Date(dateString).toLocaleString(lang, {\n dateStyle: 'full',\n timeStyle: 'long',\n });\n}\n\nexport function toLocaleDateString(lang: string, dateString: string): string {\n return new Date(dateString).toLocaleDateString(lang, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n });\n}\n\nexport function closeWindow(win: Window): void {\n win.close();\n}\n\nexport type RawHTML = string;\n\nexport function setFocus(elemId: string): void {\n document.getElementById(elemId)?.focus();\n}\n", "export type QueryStringArray = Array<[string, string | null]>;\n\nfunction unsafeDecode(str: string): string {\n return decodeURIComponent(str);\n}\n\nexport function parseQueryString(searchOrHash: string): QueryStringArray {\n const first = searchOrHash.slice(0, 1);\n const qs = first === '#' || first === '?' ? searchOrHash.slice(1) : searchOrHash;\n const parts = qs.split('&').filter((x) => x !== '');\n\n const decode = (s: string) => unsafeDecode(s.replace(/\\+/g, ' '));\n\n const out: QueryStringArray = [];\n for (const kv of parts) {\n const [k, ...rest] = kv.split('=');\n if (!k) continue;\n if (rest.length === 0) out.push([decode(k), null]);\n else if (rest.length === 1) out.push([decode(k), decode(rest[0] ?? '')]);\n }\n return out;\n}\n\nexport function curQuerystring(): QueryStringArray {\n return parseQueryString(window.location.search);\n}\n\nexport function lookupQueryStringValue(qs: QueryStringArray, k: string): string | null {\n for (const [key, val] of qs) {\n if (key === k) return val;\n }\n return null;\n}\n\nexport function encodeTag(tag: string): string {\n return encodeURIComponent(tag.replace(/\\+/g, '%2B'));\n}\n\nexport function fromNullableStr(s: string | null | undefined): string {\n return s ?? '';\n}\n\nexport function normalizeTags(tags: string | null): string {\n return tags?.replace(/,/g, ' ').replace(/\\s+/g, ' ').trim() ?? '';\n}\n\n/**\n * Generates a short, non-cryptographic hash from a string.\n * @param str - The input string to hash.\n * @returns A short alphanumeric string hash.\n */\nexport function getShortHash(str: string): string {\n let hash = 5381;\n let i = str.length;\n\n while (i) {\n hash = (hash * 33) ^ str.charCodeAt(--i);\n }\n\n // Convert to an unsigned 32-bit integer, then to a base36 string\n return (hash >>> 0).toString(36);\n}\n", "import i18next from 'i18next';\nimport ChainedBackend from 'i18next-chained-backend';\nimport HttpBackend from 'i18next-http-backend';\nimport LocalStorageBackend from 'i18next-localstorage-backend';\nimport { initReactI18next } from 'react-i18next';\n\nimport translationEn from '../../static/locales/en/translation.json';\nimport { app } from './globals';\nimport { getShortHash } from './util';\n\nexport const defaultNS = 'translation';\nexport const fallbackNS = 'translation';\n\nconst a = app();\n\nvoid i18next\n .use(ChainedBackend)\n .use(initReactI18next)\n .init({\n lng: a.lang,\n fallbackLng: 'en',\n defaultNS: defaultNS,\n ns: [defaultNS],\n partialBundledLanguages: true,\n resources: {\n en: {\n translation: translationEn,\n },\n },\n backend: {\n backends: [LocalStorageBackend, HttpBackend],\n backendOptions: [\n {\n prefix: `i18next_res_${getShortHash(a.i18nR)}_`,\n expirationTime: 7 * 24 * 60 * 60 * 1000, // 7 days\n },\n {\n loadPath: `${a.i18nR}/{{lng}}/{{ns}}.json`,\n },\n ],\n },\n interpolation: {\n escapeValue: false,\n },\n load: 'currentOnly',\n });\n\nexport default i18next;\n", "import './i18n';\n\nimport { type ReactNode, useLayoutEffect } from 'react';\nimport { createRoot } from 'react-dom/client';\n\nimport { logout } from './api';\nimport { AccountSettingsView } from './components/AccountSettings';\nimport { AddForm } from './components/AddForm';\nimport { BList } from './components/BList';\nimport { NList } from './components/NList';\nimport { NNote } from './components/NNote';\nimport { TagCloud } from './components/TagCloud';\nimport type { AccountSettings, Bookmark, ColorSchemePreference, Note, TagCloudMode } from './types';\nimport { tagCloudModeToF } from './types';\n\nfunction selectEl(selector: string): Element | null {\n return document.querySelector(selector);\n}\n\nfunction viewRendered(): void {\n const el = document.querySelector('#content');\n if (el) el.setAttribute('view-rendered', '');\n}\n\nfunction RenderReady({ children }: { children: ReactNode }) {\n useLayoutEffect(() => {\n viewRendered();\n }, []);\n\n return children;\n}\n\nfunction renderView(renderElSelector: string, node: ReactNode): void {\n const el = selectEl(renderElSelector);\n if (!el) return;\n createRoot(el).render(<RenderReady>{node}</RenderReady>);\n}\n\nexport const logoutE = (e: Event) => () => {\n e.preventDefault();\n void logout();\n};\n\nexport const renderBookmarks = (renderElSelector: string) => (bmarks: Bookmark[]) => () => {\n renderView(renderElSelector, <BList initial={bmarks} />);\n};\n\nexport const renderTagCloud = (renderElSelector: string) => (tagCloudMode: TagCloudMode) => () => {\n const el = selectEl(renderElSelector);\n if (!el) return;\n createRoot(el).render(<TagCloud initialMode={tagCloudModeToF(tagCloudMode)} />);\n};\n\nexport const renderAddForm = (renderElSelector: string) => (bmark: Bookmark) => () => {\n renderView(renderElSelector, <AddForm initial={bmark} />);\n};\n\nexport const renderNotes = (renderElSelector: string) => (notes: Note[]) => () => {\n renderView(renderElSelector, <NList initial={notes} />);\n};\n\nexport const renderNote = (renderElSelector: string) => (note: Note) => () => {\n renderView(renderElSelector, <NNote initial={note} />);\n};\n\nexport const renderAccountSettings =\n (renderElSelector: string) => (accountSettings: AccountSettings) => () => {\n renderView(renderElSelector, <AccountSettingsView initial={accountSettings} />);\n };\n\nexport function initColorSchemeToggle(): void {\n function isColorSchemePreference(value: string | null): value is ColorSchemePreference {\n return value === 'light' || value === 'dark';\n }\n function getEffectiveColorScheme(): ColorSchemePreference {\n const explicit = document.documentElement.dataset.colorScheme;\n if (explicit === 'light' || explicit === 'dark') return explicit;\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n }\n\n function applyColorSchemePreference(preference: ColorSchemePreference): void {\n document.documentElement.dataset.colorScheme = preference;\n }\n\n const colorSchemeStorageKey = 'espial-color-scheme';\n const stored = window.localStorage.getItem(colorSchemeStorageKey);\n if (isColorSchemePreference(stored)) {\n applyColorSchemePreference(stored);\n }\n\n const toggleEl = document.querySelector<HTMLAnchorElement>('#color-scheme-toggle');\n if (!toggleEl) return;\n\n toggleEl.addEventListener('click', (e) => {\n e.preventDefault();\n const next: ColorSchemePreference = getEffectiveColorScheme() === 'dark' ? 'light' : 'dark';\n applyColorSchemePreference(next);\n window.localStorage.setItem(colorSchemeStorageKey, next);\n });\n}\n", "/**\nBase class for all Ky-specific errors. `HTTPError`, `NetworkError`, `TimeoutError`, and `ForceRetryError` extend this class.\n\nYou can use `instanceof KyError` to check if an error originated from Ky, or use the `isKyError()` type guard for cross-realm compatibility and TypeScript type narrowing.\n\nNote: `SchemaValidationError` is intentionally not considered a Ky error. `KyError` covers failures in Ky's HTTP lifecycle (bad status, timeout, retry), while schema validation errors originate from the user-provided schema, not from Ky itself.\n*/\nexport class KyError extends Error {\n\toverride name = 'KyError';\n\n\tget isKyError(): true {\n\t\treturn true;\n\t}\n}\n", "import type {NormalizedOptions} from '../types/options.js';\nimport type {KyRequest} from '../types/request.js';\nimport type {KyResponse} from '../types/response.js';\nimport {KyError} from './KyError.js';\n\n/**\nError thrown when the response has a non-2xx status code and `throwHttpErrors` is enabled.\n\nThe error has a `response` property with the `Response` object, a `request` property with the `Request` object, an `options` property with the normalized options (either passed to `ky` when creating an instance with `ky.create()` or directly when performing the request), and a `data` property with the pre-parsed response body. For JSON responses (based on `Content-Type`), the body is parsed using the `parseJson` option if set, or `JSON.parse` by default. For other content types, it is set as plain text. If the body is empty or parsing fails, `data` will be `undefined`. To avoid hanging or excessive buffering, `error.data` population is bounded by the request timeout and a 10 MiB response body size limit. The `data` property is populated before `beforeError` hooks run, so hooks can access it.\n\nThe response body is automatically consumed when populating `error.data`, so `error.response.json()` and other body methods will not work. Use `error.data` instead. The `error.response` object is still available for headers, status, etc.\n\nBe aware that some types of errors, such as network errors, inherently mean that a response was not received. In that case, the error will be an instance of `NetworkError` instead of `HTTPError` and will not contain a `response` property.\n*/\nexport class HTTPError<T = unknown> extends KyError {\n\toverride name = 'HTTPError' as const;\n\tresponse: KyResponse<T>;\n\trequest: KyRequest;\n\toptions: NormalizedOptions;\n\tdata: T | string | undefined;\n\n\tconstructor(response: Response, request: Request, options: NormalizedOptions) {\n\t\tconst code = (response.status || response.status === 0) ? response.status : '';\n\t\tconst title = response.statusText ?? '';\n\t\tconst status = `${code} ${title}`.trim();\n\t\tconst reason = status ? `status code ${status}` : 'an unknown error';\n\n\t\tsuper(`Request failed with ${reason}: ${request.method} ${request.url}`);\n\n\t\tthis.response = response;\n\t\tthis.request = request;\n\t\tthis.options = options;\n\t}\n}\n", "import type {KyRequest} from '../types/request.js';\nimport {KyError} from './KyError.js';\n\n/**\nError thrown when a network error occurs during the request (e.g., DNS failure, connection refused, offline). It has a `request` property with the `Request` object. The original error is available via the standard `cause` property.\n\nNetwork errors are automatically retried (for retriable methods).\n\nNote: Network errors are detected using runtime-specific heuristics. Unrecognized runtimes may produce errors that are not wrapped in `NetworkError`. Use the `shouldRetry` option to handle such cases.\n*/\nexport class NetworkError extends KyError {\n\toverride name = 'NetworkError' as const;\n\trequest: KyRequest;\n\n\tconstructor(request: Request, options?: {cause?: Error}) {\n\t\tsuper(`Request failed due to a network error: ${request.method} ${request.url}`, options);\n\t\tthis.request = request;\n\t}\n}\n", "/**\nWrapper for non-Error values that were thrown.\n\nIn JavaScript, any value can be thrown (not just Error instances). This class wraps such values to ensure consistent error handling.\n*/\nexport class NonError extends Error {\n\toverride name = 'NonError';\n\treadonly value: unknown;\n\n\tconstructor(value: unknown) {\n\t\tlet message = 'Non-error value was thrown';\n\n\t\t// Intentionally minimal as this error is just an edge-case.\n\t\ttry {\n\t\t\tif (typeof value === 'string') {\n\t\t\t\tmessage = value;\n\t\t\t} else if (value && typeof value === 'object' && 'message' in value && typeof value.message === 'string') {\n\t\t\t\tmessage = value.message;\n\t\t\t}\n\t\t} catch {\n\t\t\t// Use default message if accessing properties throws\n\t\t}\n\n\t\tsuper(message);\n\n\t\tthis.value = value;\n\t}\n}\n", "import type {ForceRetryOptions} from '../core/constants.js';\nimport {KyError} from './KyError.js';\nimport {NonError} from './NonError.js';\n\n/**\nError used to signal a forced retry from `afterResponse` hooks.\n\nThis is thrown when `ky.retry()` is returned from an `afterResponse` hook. It is observable in `beforeRetry` and `beforeError` hooks via the `isForceRetryError()` type guard.\n*/\nexport class ForceRetryError extends KyError {\n\toverride name = 'ForceRetryError' as const;\n\tcustomDelay: number | undefined;\n\tcode: string | undefined;\n\tcustomRequest: Request | undefined;\n\n\tconstructor(options?: ForceRetryOptions) {\n\t\t// Runtime protection: wrap non-Error causes in NonError\n\t\t// TypeScript type is Error for guidance, but JS users can pass anything\n\t\tconst cause = options?.cause\n\t\t\t? (options.cause instanceof Error ? options.cause : new NonError(options.cause))\n\t\t\t: undefined;\n\n\t\tsuper(\n\t\t\toptions?.code ? `Forced retry: ${options.code}` : 'Forced retry',\n\t\t\tcause ? {cause} : undefined,\n\t\t);\n\n\t\tthis.customDelay = options?.delay;\n\t\tthis.code = options?.code;\n\t\tthis.customRequest = options?.request;\n\t}\n}\n", "import type {StandardSchemaV1Issue} from '../types/standard-schema.js';\n\n/**\nThe error thrown when [Standard Schema](https://github.com/standard-schema/standard-schema) validation fails in `.json(schema)`. It has an `issues` property with the validation issues from the schema.\n\nThis error intentionally does not extend `KyError` because it does not represent a failure in Ky's HTTP lifecycle. The request succeeded; the user's schema rejected the data. As such, it is not matched by `isKyError()`.\n\n@example\n```\nimport ky, {SchemaValidationError} from 'ky';\nimport {z} from 'zod';\n\nconst userSchema = z.object({name: z.string()});\n\ntry {\n\tconst user = await ky('/api/user').json(userSchema);\n\tconsole.log(user.name);\n} catch (error) {\n\tif (error instanceof SchemaValidationError) {\n\t\tconsole.error(error.issues);\n\t}\n}\n```\n*/\nexport class SchemaValidationError extends Error {\n\toverride name = 'SchemaValidationError' as const;\n\treadonly issues: readonly StandardSchemaV1Issue[];\n\n\tconstructor(issues: readonly StandardSchemaV1Issue[]) {\n\t\tsuper('Response schema validation failed');\n\t\tthis.issues = issues;\n\t}\n}\n", "import type {KyRequest} from '../types/request.js';\nimport {KyError} from './KyError.js';\n\n/**\nError thrown when the request times out. It has a `request` property with the `Request` object.\n*/\nexport class TimeoutError extends KyError {\n\toverride name = 'TimeoutError' as const;\n\trequest: KyRequest;\n\n\tconstructor(request: Request) {\n\t\tsuper(`Request timed out: ${request.method} ${request.url}`);\n\t\tthis.request = request;\n\t}\n}\n", "import type {Expect, Equal} from '@type-challenges/utils';\nimport {type KyOptionsRegistry, type RequestHttpMethod} from '../types/options.js';\n\nexport const supportsRequestStreams = (() => {\n\tlet duplexAccessed = false;\n\tlet hasContentType = false;\n\tconst supportsReadableStream = typeof globalThis.ReadableStream === 'function';\n\tconst supportsRequest = typeof globalThis.Request === 'function';\n\n\tif (supportsReadableStream && supportsRequest) {\n\t\ttry {\n\t\t\thasContentType = new globalThis.Request('https://empty.invalid', {\n\t\t\t\tbody: new globalThis.ReadableStream(),\n\t\t\t\tmethod: 'POST',\n\t\t\t\t// @ts-expect-error - Types are outdated.\n\t\t\t\tget duplex() {\n\t\t\t\t\tduplexAccessed = true;\n\t\t\t\t\treturn 'half';\n\t\t\t\t},\n\t\t\t}).headers.has('Content-Type');\n\t\t} catch (error) {\n\t\t\t// QQBrowser on iOS throws \"unsupported BodyInit type\" error (see issue #581)\n\t\t\tif (error instanceof Error && error.message === 'unsupported BodyInit type') {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\treturn duplexAccessed && !hasContentType;\n})();\n\nexport const supportsAbortController = typeof globalThis.AbortController === 'function';\nexport const supportsAbortSignal = typeof globalThis.AbortSignal === 'function' && typeof globalThis.AbortSignal.any === 'function';\nexport const supportsResponseStreams = typeof globalThis.ReadableStream === 'function';\nexport const supportsFormData = typeof globalThis.FormData === 'function';\n\nexport const requestMethods = ['get', 'post', 'put', 'patch', 'head', 'delete'] as const;\n\nconst validate = <T extends Array<true>>() => undefined as unknown as T;\nvalidate<[\n\tExpect<Equal<typeof requestMethods[number], RequestHttpMethod>>,\n]>();\n\nexport const responseTypes = {\n\tjson: 'application/json',\n\ttext: 'text/*',\n\tformData: 'multipart/form-data',\n\tarrayBuffer: '*/*',\n\tblob: '*/*',\n\t// Supported in modern Fetch implementations (for example, browsers and recent Node.js/undici).\n\t// We still feature-check at runtime before exposing the shortcut.\n\tbytes: '*/*',\n} as const;\n\n// The maximum value of a 32bit int (see issue #117)\nexport const maxSafeTimeout = 2_147_483_647;\n\n// Size in bytes of a typical form boundary (e.g., '------WebKitFormBoundaryaxpyiPgbbPti10Rw'), used to help estimate upload size\nexport const usualFormBoundarySize = 40;\n\n/**\nSymbol that can be returned by a `beforeRetry` hook to stop retrying without throwing an error.\n*/\nexport const stop = Symbol('stop');\n\n/**\nOptions for forcing a retry via `ky.retry()`.\n*/\nexport type ForceRetryOptions = {\n\t/**\n\tCustom delay in milliseconds before retrying.\n\n\tIf not provided, uses the default retry delay calculation based on `retry.delay` configuration.\n\n\t**Note:** Custom delays bypass jitter and `backoffLimit`. This is intentional, as custom delays often come from server responses (e.g., `Retry-After` headers) and should be respected exactly as specified.\n\t*/\n\tdelay?: number;\n\n\t/**\n\tError code for the retry.\n\n\tThis machine-readable identifier will be included in the error message passed to `beforeRetry` hooks, allowing you to distinguish between different types of forced retries.\n\n\t@example\n\t```\n\treturn ky.retry({code: 'RATE_LIMIT'});\n\t// Resulting error message: 'Forced retry: RATE_LIMIT'\n\t```\n\t*/\n\tcode?: string;\n\n\t/**\n\tOriginal error that caused the retry.\n\n\tThis allows you to preserve the error chain when forcing a retry based on caught exceptions. The error will be set as the `cause` of the `ForceRetryError`, enabling proper error chain traversal.\n\n\t@example\n\t```\n\ttry {\n\t\tconst data = await response.json();\n\t\tvalidateBusinessLogic(data);\n\t} catch (error) {\n\t\treturn ky.retry({\n\t\t\tcode: 'VALIDATION_FAILED',\n\t\t\tcause: error // Preserves original error in chain\n\t\t});\n\t}\n\t```\n\t*/\n\tcause?: Error;\n\n\t/**\n\tCustom request to use for the retry.\n\n\tThis allows you to modify or completely replace the request during a forced retry. The custom request becomes the starting point for the retry - `beforeRetry` hooks can still further modify it if needed.\n\n\t**Note:** The custom request's `signal` will be replaced with Ky's managed signal to handle timeouts and user-provided abort signals correctly. If the original request body has been consumed, you must provide a new body or clone the request before consuming.\n\n\t**Warning:** Custom retry requests are not sanitized. If you reuse headers across origins, remove any credentials you do not want forwarded.\n\n\t@example\n\t```\n\t// Fallback to a different endpoint\n\treturn ky.retry({\n\t\trequest: new Request('https://backup-api.com/endpoint', {\n\t\t\tmethod: request.method,\n\t\t\theaders: request.headers,\n\t\t}),\n\t\tcode: 'BACKUP_ENDPOINT'\n\t});\n\n\t// Retry with refreshed authentication token\n\tconst data = await response.json();\n\treturn ky.retry({\n\t\trequest: new Request(request, {\n\t\t\theaders: {\n\t\t\t\t...Object.fromEntries(request.headers),\n\t\t\t\t'Authorization': `Bearer ${data.newToken}`\n\t\t\t}\n\t\t}),\n\t\tcode: 'TOKEN_REFRESHED'\n\t});\n\t```\n\t*/\n\trequest?: Request;\n};\n\n/**\nMarker returned by `ky.retry()` to signal a forced retry from `afterResponse` hooks.\n*/\nexport class RetryMarker {\n\toptions: ForceRetryOptions | undefined;\n\n\tconstructor(options?: ForceRetryOptions) {\n\t\tthis.options = options;\n\t}\n}\n\n/**\nForce a retry from an `afterResponse` hook.\n\nThis allows you to retry a request based on the response content, even if the response has a successful status code. The retry will respect the `retry.limit` option and skip the `shouldRetry` check. The forced retry is observable in `beforeRetry` hooks, where the error will be a `ForceRetryError`.\n\n@param options - Optional configuration for the retry.\n\n@example\n```\nimport ky, {isForceRetryError} from 'ky';\n\nconst api = ky.extend({\n\thooks: {\n\t\tafterResponse: [\n\t\t\tasync ({request, response}) => {\n\t\t\t\t// Retry based on response body content\n\t\t\t\tif (response.status === 200) {\n\t\t\t\t\tconst data = await response.json();\n\n\t\t\t\t\t// Simple retry with default delay\n\t\t\t\t\tif (data.error?.code === 'TEMPORARY_ERROR') {\n\t\t\t\t\t\treturn ky.retry();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Retry with custom delay from API response\n\t\t\t\t\tif (data.error?.code === 'RATE_LIMIT') {\n\t\t\t\t\t\treturn ky.retry({\n\t\t\t\t\t\t\tdelay: data.error.retryAfter * 1000,\n\t\t\t\t\t\t\tcode: 'RATE_LIMIT'\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t// Retry with a modified request (e.g., fallback endpoint)\n\t\t\t\t\tif (data.error?.code === 'FALLBACK_TO_BACKUP') {\n\t\t\t\t\t\treturn ky.retry({\n\t\t\t\t\t\t\trequest: new Request('https://backup-api.com/endpoint', {\n\t\t\t\t\t\t\t\tmethod: request.method,\n\t\t\t\t\t\t\t\theaders: request.headers,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\tcode: 'BACKUP_ENDPOINT'\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t// Retry with refreshed authentication\n\t\t\t\t\tif (data.error?.code === 'TOKEN_REFRESH' && data.newToken) {\n\t\t\t\t\t\treturn ky.retry({\n\t\t\t\t\t\t\trequest: new Request(request, {\n\t\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t\t...Object.fromEntries(request.headers),\n\t\t\t\t\t\t\t\t\t'Authorization': `Bearer ${data.newToken}`\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\tcode: 'TOKEN_REFRESHED'\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t// Retry with cause to preserve error chain\n\t\t\t\t\ttry {\n\t\t\t\t\t\tvalidateResponse(data);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\treturn ky.retry({\n\t\t\t\t\t\t\tcode: 'VALIDATION_FAILED',\n\t\t\t\t\t\t\tcause: error\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\tbeforeRetry: [\n\t\t\t({error, retryCount}) => {\n\t\t\t\t// Observable in beforeRetry hooks\n\t\t\t\tif (isForceRetryError(error)) {\n\t\t\t\t\tconsole.log(`Forced retry #${retryCount}: ${error.message}`);\n\t\t\t\t\t// Example output: \"Forced retry #1: Forced retry: RATE_LIMIT\"\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t}\n});\n\nconst response = await api.get('https://example.com/api');\n```\n*/\nexport const retry = (options?: ForceRetryOptions) => new RetryMarker(options);\n\nexport const kyOptionKeys: KyOptionsRegistry = {\n\tjson: true,\n\tparseJson: true,\n\tstringifyJson: true,\n\tsearchParams: true,\n\tbaseUrl: true,\n\tprefix: true,\n\tretry: true,\n\ttimeout: true,\n\ttotalTimeout: true,\n\thooks: true,\n\tthrowHttpErrors: true,\n\tonDownloadProgress: true,\n\tonUploadProgress: true,\n\tfetch: true,\n\tcontext: true,\n};\n\n// Standard RequestInit options that should NOT be passed separately to fetch()\n// because they're already applied to the Request object.\n// Note: `dispatcher` and `priority` are NOT included here - they're fetch-only\n// options that the Request constructor doesn't accept, so they need to be passed\n// separately to fetch().\nexport const requestOptionsRegistry = {\n\tmethod: true,\n\theaders: true,\n\tbody: true,\n\tmode: true,\n\tcredentials: true,\n\tcache: true,\n\tredirect: true,\n\treferrer: true,\n\treferrerPolicy: true,\n\tintegrity: true,\n\tkeepalive: true,\n\tsignal: true,\n\twindow: true,\n\tduplex: true,\n} as const;\n", "import type {Options} from '../types/options.js';\nimport {usualFormBoundarySize} from '../core/constants.js';\n\nconst encoder = new TextEncoder();\n\n// eslint-disable-next-line @typescript-eslint/no-restricted-types\nexport const getBodySize = (body?: BodyInit | null): number => {\n\tif (!body) {\n\t\treturn 0;\n\t}\n\n\tif (body instanceof FormData) {\n\t\t// This is an approximation, as FormData size calculation is not straightforward\n\t\tlet size = 0;\n\n\t\tfor (const [key, value] of body) {\n\t\t\tsize += usualFormBoundarySize;\n\t\t\tsize += encoder.encode(`Content-Disposition: form-data; name=\"${key}\"`).byteLength;\n\t\t\tsize += typeof value === 'string'\n\t\t\t\t? encoder.encode(value).byteLength\n\t\t\t\t: value.size;\n\t\t}\n\n\t\treturn size;\n\t}\n\n\tif (body instanceof Blob) {\n\t\treturn body.size;\n\t}\n\n\tif (body instanceof ArrayBuffer || ArrayBuffer.isView(body)) {\n\t\treturn body.byteLength;\n\t}\n\n\tif (typeof body === 'string') {\n\t\treturn encoder.encode(body).byteLength;\n\t}\n\n\tif (body instanceof URLSearchParams) {\n\t\treturn encoder.encode(body.toString()).byteLength;\n\t}\n\n\treturn 0;\n};\n\nconst withProgress = (stream: ReadableStream<Uint8Array>, totalBytes: number, onProgress: Options['onDownloadProgress'] | Options['onUploadProgress']): ReadableStream<Uint8Array> => {\n\tlet previousChunk: Uint8Array | undefined;\n\tlet transferredBytes = 0;\n\n\treturn stream.pipeThrough(new TransformStream<Uint8Array, Uint8Array>({\n\t\ttransform(currentChunk, controller) {\n\t\t\tcontroller.enqueue(currentChunk);\n\n\t\t\tif (previousChunk) {\n\t\t\t\ttransferredBytes += previousChunk.byteLength;\n\n\t\t\t\tlet percent = totalBytes === 0 ? 0 : transferredBytes / totalBytes;\n\t\t\t\t// Avoid reporting 100% progress before the stream is actually finished (in case totalBytes is inaccurate)\n\t\t\t\tif (percent >= 1) {\n\t\t\t\t\t// Epsilon is used here to get as close as possible to 100% without reaching it.\n\t\t\t\t\t// If we were to use 0.99 here, percent could potentially go backwards.\n\t\t\t\t\tpercent = 1 - Number.EPSILON;\n\t\t\t\t}\n\n\t\t\t\tonProgress?.({percent, totalBytes: Math.max(totalBytes, transferredBytes), transferredBytes}, previousChunk);\n\t\t\t}\n\n\t\t\tpreviousChunk = currentChunk;\n\t\t},\n\t\tflush() {\n\t\t\tif (previousChunk) {\n\t\t\t\ttransferredBytes += previousChunk.byteLength;\n\t\t\t\tonProgress?.({percent: 1, totalBytes: Math.max(totalBytes, transferredBytes), transferredBytes}, previousChunk);\n\t\t\t}\n\t\t},\n\t}));\n};\n\nexport const streamResponse = (response: Response, onDownloadProgress: Options['onDownloadProgress']) => {\n\tif (!response.body) {\n\t\treturn response;\n\t}\n\n\tconst responseInit = {\n\t\tstatus: response.status,\n\t\tstatusText: response.statusText,\n\t\theaders: response.headers,\n\t};\n\n\tif (response.status === 204) {\n\t\treturn new Response(null, responseInit);\n\t}\n\n\tconst totalBytes = Math.max(0, Number(response.headers.get('content-length')) || 0);\n\treturn new Response(withProgress(response.body, totalBytes, onDownloadProgress), responseInit);\n};\n\n// eslint-disable-next-line @typescript-eslint/no-restricted-types\nexport const streamRequest = (request: Request, onUploadProgress: Options['onUploadProgress'], originalBody?: BodyInit | null) => {\n\tif (!request.body) {\n\t\treturn request;\n\t}\n\n\t// Use original body for size calculation since request.body is already a stream\n\tconst totalBytes = getBodySize(originalBody ?? request.body);\n\n\treturn new Request(request, {\n\t\t// @ts-expect-error - Types are outdated.\n\t\tduplex: 'half',\n\t\tbody: withProgress(request.body, totalBytes, onUploadProgress),\n\t});\n};\n", "// eslint-disable-next-line @typescript-eslint/no-restricted-types\nexport const isObject = (value: unknown): value is object => value !== null && typeof value === 'object';\n", "import type {KyHeadersInit, Options} from '../types/options.js';\nimport type {Hooks} from '../types/hooks.js';\nimport {supportsAbortSignal} from '../core/constants.js';\nimport {isObject} from './is.js';\n\nconst replaceSymbol: unique symbol = Symbol('replaceOption');\n\ntype ReplaceMarked<T> = {\n\t[replaceSymbol]: true;\n\tvalue: T;\n};\n\ntype ReplaceState<T> = {\n\tisReplace: boolean;\n\tvalue: T;\n};\n\nconst getReplaceState = <T>(value: T): ReplaceState<T> =>\n\tisObject(value) && (value as any)[replaceSymbol] === true\n\t\t? {\n\t\t\tisReplace: true,\n\t\t\tvalue: (value as unknown as ReplaceMarked<T>).value,\n\t\t}\n\t\t: {\n\t\t\tisReplace: false,\n\t\t\tvalue,\n\t\t};\n\n/**\nWraps a value so that `ky.extend()` will replace the parent value instead of merging with it. Works with hooks, headers, search parameters, context, and any other deep-merged option.\n\nBy default, `.extend()` deep-merges options with the parent instance: hooks get appended, headers get merged, and search parameters get accumulated. Use `replaceOption` when you want to fully replace a merged property instead.\n\n@example\n```\nimport ky, {replaceOption} from 'ky';\n\nconst base = ky.create({\n\thooks: {beforeRequest: [addAuth, addTracking]},\n});\n\n// Replaces instead of appending\nconst extended = base.extend({\n\thooks: replaceOption({beforeRequest: [onlyThis]}),\n});\n// hooks.beforeRequest is now [onlyThis], not [addAuth, addTracking, onlyThis]\n```\n*/\nexport const replaceOption = <T>(value: T): T => {\n\tconst markedValue: ReplaceMarked<T> = {[replaceSymbol]: true, value};\n\treturn markedValue as unknown as T;\n};\n\nexport const validateAndMerge = (...sources: Array<Partial<Options> | undefined>): Partial<Options> => {\n\tfor (const source of sources) {\n\t\tif ((!isObject(source) || Array.isArray(source)) && source !== undefined) {\n\t\t\tthrow new TypeError('The `options` argument must be an object');\n\t\t}\n\t}\n\n\treturn deepMerge({}, ...sources);\n};\n\nexport const mergeHeaders = (source1: KyHeadersInit = {}, source2: KyHeadersInit = {}) => {\n\tconst result = new globalThis.Headers(source1 as RequestInit['headers']);\n\tconst isHeadersInstance = source2 instanceof globalThis.Headers;\n\tconst source = new globalThis.Headers(source2 as RequestInit['headers']);\n\n\tfor (const [key, value] of source.entries()) {\n\t\tif ((isHeadersInstance && value === 'undefined') || value === undefined) {\n\t\t\tresult.delete(key);\n\t\t} else {\n\t\t\tresult.set(key, value);\n\t\t}\n\t}\n\n\treturn result;\n};\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> => {\n\tif (!isObject(value) || Array.isArray(value)) {\n\t\treturn false;\n\t}\n\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn prototype === Object.prototype || prototype === null;\n};\n\nexport const cloneShallow = <T>(value: T): T => {\n\tif (value instanceof URLSearchParams) {\n\t\tconst copy = new URLSearchParams(value) as URLSearchParams & {[deletedParametersSymbol]?: Set<string>};\n\t\tconst deleted = (value as URLSearchParams & {[deletedParametersSymbol]?: Set<string>})[deletedParametersSymbol];\n\t\tif (deleted) {\n\t\t\t// Preserve internal deletion markers so init-hook cloning does not resurrect params removed during option merging.\n\t\t\tcopy[deletedParametersSymbol] = new Set(deleted);\n\t\t}\n\n\t\treturn copy as T;\n\t}\n\n\tif (value instanceof globalThis.Headers) {\n\t\treturn new globalThis.Headers(value) as T;\n\t}\n\n\tif (Array.isArray(value)) {\n\t\treturn [...value] as T;\n\t}\n\n\tif (isPlainObject(value)) {\n\t\tconst copy = {...value};\n\t\treturn copy as T;\n\t}\n\n\treturn value;\n};\n\nconst normalizeHeaderObject = (headers: Record<string, string | undefined>): Record<string, string> =>\n\tObject.fromEntries(\n\t\tObject.entries(headers).filter((entry): entry is [string, string] => entry[1] !== undefined),\n\t);\n\nconst mergeHeaderContainers = (source1: KyHeadersInit, source2: KyHeadersInit): KyHeadersInit => {\n\tif (isPlainObject(source1) && isPlainObject(source2)) {\n\t\treturn normalizeHeaderObject({...source1, ...source2});\n\t}\n\n\treturn mergeHeaders(source1, source2);\n};\n\nfunction newHookValue<K extends keyof Hooks>(original: Hooks, incoming: Hooks, property: K): Required<Hooks>[K] {\n\treturn (Object.hasOwn(incoming, property) && incoming[property] === undefined)\n\t\t? []\n\t\t: deepMerge<Required<Hooks>[K]>(original[property] ?? [], incoming[property] ?? []);\n}\n\nexport const mergeHooks = (original: Hooks = {}, incoming: Hooks = {}): Required<Hooks> => (\n\t{\n\t\tinit: newHookValue(original, incoming, 'init'),\n\t\tbeforeRequest: newHookValue(original, incoming, 'beforeRequest'),\n\t\tbeforeRetry: newHookValue(original, incoming, 'beforeRetry'),\n\t\tbeforeError: newHookValue(original, incoming, 'beforeError'),\n\t\tafterResponse: newHookValue(original, incoming, 'afterResponse'),\n\t}\n);\n\nexport const deletedParametersSymbol = Symbol('deletedParameters');\n\nconst appendSearchParameters = (target: any, source: any): URLSearchParams => {\n\tconst result = new URLSearchParams() as URLSearchParams & {[deletedParametersSymbol]?: Set<string>};\n\tconst deleted = new Set<string>();\n\n\tfor (const input of [target, source]) {\n\t\tif (input === undefined) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (input instanceof URLSearchParams) {\n\t\t\tfor (const [key, value] of input.entries()) {\n\t\t\t\tresult.append(key, value);\n\t\t\t\tdeleted.delete(key);\n\t\t\t}\n\n\t\t\tconst inputDeleted = (input as any)[deletedParametersSymbol] as Set<string> | undefined;\n\t\t\tif (inputDeleted) {\n\t\t\t\tfor (const key of inputDeleted) {\n\t\t\t\t\tresult.delete(key);\n\t\t\t\t\tdeleted.add(key);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (Array.isArray(input)) {\n\t\t\tfor (const pair of input) {\n\t\t\t\tif (!Array.isArray(pair) || pair.length !== 2) {\n\t\t\t\t\tthrow new TypeError('Array search parameters must be provided in [[key, value], ...] format');\n\t\t\t\t}\n\n\t\t\t\tresult.append(String(pair[0]), String(pair[1]));\n\t\t\t\tdeleted.delete(String(pair[0]));\n\t\t\t}\n\t\t} else if (isObject(input)) {\n\t\t\tfor (const [key, value] of Object.entries(input)) {\n\t\t\t\tif (value === undefined) {\n\t\t\t\t\tresult.delete(key);\n\t\t\t\t\tdeleted.add(key);\n\t\t\t\t} else {\n\t\t\t\t\tresult.append(key, String(value));\n\t\t\t\t\tdeleted.delete(key);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// String\n\t\t\tconst parameters = new URLSearchParams(input);\n\t\t\tfor (const [key, value] of parameters.entries()) {\n\t\t\t\tresult.append(key, value);\n\t\t\t\tdeleted.delete(key);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (deleted.size > 0) {\n\t\tresult[deletedParametersSymbol] = deleted;\n\t}\n\n\treturn result;\n};\n\n// TODO: Make this strongly-typed (no `any`).\nexport const deepMerge = <T>(...sources: Array<Partial<T> | undefined>): T => {\n\tlet returnValue: any = {};\n\tlet headers: KyHeadersInit = {};\n\tlet hooks = {};\n\tlet searchParameters: any;\n\tconst signals: AbortSignal[] = [];\n\n\tfor (const source of sources) {\n\t\tif (Array.isArray(source)) {\n\t\t\tif (!Array.isArray(returnValue)) {\n\t\t\t\treturnValue = [];\n\t\t\t}\n\n\t\t\treturnValue = [...returnValue, ...source];\n\t\t} else if (isObject(source)) {\n\t\t\tfor (let [key, value] of Object.entries(source)) {\n\t\t\t\t// Special handling for AbortSignal instances\n\t\t\t\tif (key === 'signal' && value instanceof globalThis.AbortSignal) {\n\t\t\t\t\tsignals.push(value);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst replaceState = getReplaceState(value);\n\t\t\t\tconst {isReplace} = replaceState;\n\t\t\t\tvalue = replaceState.value;\n\n\t\t\t\t// Special handling for context - shallow merge only\n\t\t\t\tif (key === 'context') {\n\t\t\t\t\tif (value !== undefined && value !== null && (!isObject(value) || Array.isArray(value))) {\n\t\t\t\t\t\tthrow new TypeError('The `context` option must be an object');\n\t\t\t\t\t}\n\n\t\t\t\t\t// Shallow merge: always create a new object to prevent mutation bugs\n\t\t\t\t\treturnValue = {\n\t\t\t\t\t\t...returnValue,\n\t\t\t\t\t\tcontext: (value === undefined || value === null)\n\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t: (isReplace\n\t\t\t\t\t\t\t\t? {...value}\n\t\t\t\t\t\t\t\t: {...returnValue.context, ...value}),\n\t\t\t\t\t};\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Special handling for searchParams\n\t\t\t\tif (key === 'searchParams') {\n\t\t\t\t\tif (value === undefined || value === null) {\n\t\t\t\t\t\t// Explicit undefined or null removes searchParams\n\t\t\t\t\t\tsearchParameters = undefined;\n\t\t\t\t\t} else if (isReplace) {\n\t\t\t\t\t\tsearchParameters = value;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// First source: keep as-is to preserve type (string/object/URLSearchParams)\n\t\t\t\t\t\t// Subsequent sources: merge and convert to URLSearchParams\n\t\t\t\t\t\tsearchParameters = searchParameters === undefined ? value : appendSearchParameters(searchParameters, value);\n\t\t\t\t\t}\n\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (isObject(value) && !isReplace && key in returnValue) {\n\t\t\t\t\tvalue = deepMerge(returnValue[key], value);\n\t\t\t\t}\n\n\t\t\t\treturnValue = {...returnValue, [key]: value};\n\t\t\t}\n\n\t\t\tif (isObject((source as any).hooks)) {\n\t\t\t\tconst {value: hookValue, isReplace} = getReplaceState((source as any).hooks);\n\t\t\t\thooks = isReplace\n\t\t\t\t\t? mergeHooks({}, hookValue)\n\t\t\t\t\t: mergeHooks(hooks, hookValue);\n\n\t\t\t\treturnValue.hooks = hooks;\n\t\t\t}\n\n\t\t\tif (isObject((source as any).headers)) {\n\t\t\t\tconst {value: headerValue, isReplace} = getReplaceState((source as any).headers);\n\t\t\t\theaders = isReplace\n\t\t\t\t\t? cloneShallow(headerValue as KyHeadersInit)\n\t\t\t\t\t: mergeHeaderContainers(headers, headerValue as KyHeadersInit);\n\n\t\t\t\treturnValue.headers = headers;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (searchParameters !== undefined) {\n\t\treturnValue.searchParams = searchParameters;\n\t}\n\n\tif (signals.length > 0) {\n\t\tif (signals.length === 1) {\n\t\t\treturnValue.signal = signals[0];\n\t\t} else if (supportsAbortSignal) {\n\t\t\treturnValue.signal = AbortSignal.any(signals);\n\t\t} else {\n\t\t\t// When AbortSignal.any is not available, use the last signal\n\t\t\t// This maintains the previous behavior before signal merging was added\n\t\t\t// This can be remove when the `supportsAbortSignal` check is removed.`\n\t\t\treturnValue.signal = signals.at(-1);\n\t\t}\n\t}\n\n\treturn returnValue;\n};\n", "import {requestMethods} from '../core/constants.js';\nimport type {RetryOptions} from '../types/retry.js';\nimport type {HttpMethod, RequestHttpMethod} from '../types/options.js';\n\nexport const normalizeRequestMethod = (input: string): string =>\n\trequestMethods.includes(input as RequestHttpMethod) ? input.toUpperCase() : input;\n\nconst retryMethods: HttpMethod[] = ['get', 'put', 'head', 'delete', 'options', 'trace'];\n\nconst retryStatusCodes = [408, 413, 429, 500, 502, 503, 504];\n\nconst retryAfterStatusCodes = [413, 429, 503];\n\ntype InternalRetryOptions = Required<Omit<RetryOptions, 'shouldRetry'>> & Pick<RetryOptions, 'shouldRetry'>;\n\nconst defaultRetryOptions: InternalRetryOptions = {\n\tlimit: 2,\n\tmethods: retryMethods,\n\tstatusCodes: retryStatusCodes,\n\tafterStatusCodes: retryAfterStatusCodes,\n\tmaxRetryAfter: Number.POSITIVE_INFINITY,\n\tbackoffLimit: Number.POSITIVE_INFINITY,\n\tdelay: attemptCount => 0.3 * (2 ** (attemptCount - 1)) * 1000,\n\tjitter: undefined,\n\tretryOnTimeout: false,\n};\n\nexport const normalizeRetryOptions = (retry: number | RetryOptions = {}): InternalRetryOptions => {\n\tif (typeof retry === 'number') {\n\t\treturn {\n\t\t\t...defaultRetryOptions,\n\t\t\tlimit: retry,\n\t\t};\n\t}\n\n\tif (retry.methods && !Array.isArray(retry.methods)) {\n\t\tthrow new Error('retry.methods must be an array');\n\t}\n\n\tif (retry.statusCodes && !Array.isArray(retry.statusCodes)) {\n\t\tthrow new Error('retry.statusCodes must be an array');\n\t}\n\n\tconst normalizedRetry = Object.fromEntries(Object.entries({\n\t\t...retry,\n\t\tmethods: retry.methods?.map(method => method.toLowerCase()),\n\t}).filter(([, value]) => value !== undefined)) as RetryOptions;\n\n\treturn {\n\t\t...defaultRetryOptions,\n\t\t...normalizedRetry,\n\t};\n};\n", "import {TimeoutError} from '../errors/TimeoutError.js';\n\nexport type TimeoutOptions = {\n\ttimeout: number;\n\tfetch: typeof fetch;\n};\n\n// `Promise.race()` workaround (#91)\nexport default async function timeout(\n\trequest: Request,\n\tinit: RequestInit,\n\tabortController: AbortController | undefined,\n\toptions: TimeoutOptions,\n): Promise<Response> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst timeoutId = setTimeout(() => {\n\t\t\tif (abortController) {\n\t\t\t\tabortController.abort();\n\t\t\t}\n\n\t\t\treject(new TimeoutError(request));\n\t\t}, options.timeout);\n\n\t\tvoid options\n\t\t\t.fetch(request, init)\n\t\t\t.then(resolve)\n\t\t\t.catch(reject)\n\t\t\t.then(() => {\n\t\t\t\tclearTimeout(timeoutId);\n\t\t\t});\n\t});\n}\n", "// https://github.com/sindresorhus/delay/tree/ab98ae8dfcb38e1593286c94d934e70d14a4e111\n\nimport {type InternalOptions} from '../types/options.js';\n\nexport type DelayOptions = {\n\tsignal?: InternalOptions['signal'];\n};\n\nexport default async function delay(\n\tms: number,\n\t{signal}: DelayOptions,\n): Promise<void> {\n\treturn new Promise((resolve, reject) => {\n\t\tif (signal) {\n\t\t\tsignal.throwIfAborted();\n\t\t\tsignal.addEventListener('abort', abortHandler, {once: true});\n\t\t}\n\n\t\tfunction abortHandler() {\n\t\t\tclearTimeout(timeoutId);\n\t\t\treject(signal!.reason as Error);\n\t\t}\n\n\t\tconst timeoutId = setTimeout(() => {\n\t\t\tsignal?.removeEventListener('abort', abortHandler);\n\t\t\tresolve();\n\t\t}, ms);\n\t});\n}\n", "import {kyOptionKeys, requestOptionsRegistry} from '../core/constants.js';\nimport type {SearchParamsOption} from '../types/options.js';\nimport {deletedParametersSymbol} from './merge.js';\n\nexport const findUnknownOptions = (\n\toptions: Record<string, unknown>,\n): Record<string, unknown> => {\n\tconst unknownOptions: Record<string, unknown> = {};\n\n\tfor (const key in options) {\n\t\t// Skip inherited properties\n\t\tif (!Object.hasOwn(options, key)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Forward every non-standard, non-Ky option to fetch().\n\t\t// We intentionally do not check whether the key also exists on `Request`, because some runtimes\n\t\t// patch `Request.prototype` with fetch-only extensions. For example, Next.js adds `next`, and the\n\t\t// old `key in request` heuristic dropped it unless Ky kept a special-case allowlist.\n\t\t// Passing all non-standard keys makes that allowlist unnecessary and preserves future fetch extensions too.\n\t\tif (!(key in requestOptionsRegistry) && !(key in kyOptionKeys)) {\n\t\t\tunknownOptions[key] = options[key];\n\t\t}\n\t}\n\n\treturn unknownOptions;\n};\n\nexport const hasSearchParameters = (search: SearchParamsOption): boolean => {\n\tif (search === undefined) {\n\t\treturn false;\n\t}\n\n\t// The `typeof array` still gives \"object\", so we need different checking for array.\n\tif (Array.isArray(search)) {\n\t\treturn search.length > 0;\n\t}\n\n\tif (search instanceof URLSearchParams) {\n\t\treturn search.size > 0 || Boolean((search as any)[deletedParametersSymbol]?.size);\n\t}\n\n\t// Record\n\tif (typeof search === 'object') {\n\t\treturn Object.keys(search).length > 0;\n\t}\n\n\tif (typeof search === 'string') {\n\t\treturn search.trim().length > 0;\n\t}\n\n\treturn Boolean(search);\n};\n", "// Inlined from https://github.com/sindresorhus/is-network-error v1.3.1\n\nconst objectToString = Object.prototype.toString;\n\nconst isError = (value: unknown): value is Error => objectToString.call(value) === '[object Error]';\n\nconst errorMessages = new Set([\n\t'network error', // Chrome\n\t'NetworkError when attempting to fetch resource.', // Firefox\n\t'The Internet connection appears to be offline.', // Safari 16\n\t'Network request failed', // `cross-fetch`\n\t'fetch failed', // Undici (Node.js)\n\t'terminated', // Undici (Node.js)\n\t' A network error occurred.', // Bun (WebKit) - leading space is intentional\n\t'Network connection lost', // Cloudflare Workers (fetch)\n]);\n\nexport default function isRawNetworkError(error: unknown): error is TypeError {\n\tconst isValid = error\n\t\t&& isError(error)\n\t\t&& error.name === 'TypeError'\n\t\t&& typeof error.message === 'string';\n\n\tif (!isValid) {\n\t\treturn false;\n\t}\n\n\tconst {message, stack} = error;\n\n\t// Safari 17+ has generic message but no stack for network errors\n\tif (message === 'Load failed') {\n\t\treturn stack === undefined\n\t\t\t// Sentry adds its own stack trace to the fetch error, so also check for that\n\t\t\t|| '__sentry_captured__' in error;\n\t}\n\n\t// Deno network errors start with specific text\n\tif (message.startsWith('error sending request for url')) {\n\t\treturn true;\n\t}\n\n\t// Chrome: exact \"Failed to fetch\" or with hostname: \"Failed to fetch (example.com)\"\n\tif (message === 'Failed to fetch' || (message.startsWith('Failed to fetch (') && message.endsWith(')'))) {\n\t\treturn true;\n\t}\n\n\t// Standard network error messages\n\treturn errorMessages.has(message);\n}\n", "import type {KyError} from '../errors/KyError.js';\nimport {HTTPError} from '../errors/HTTPError.js';\nimport {NetworkError} from '../errors/NetworkError.js';\nimport {TimeoutError} from '../errors/TimeoutError.js';\nimport {ForceRetryError} from '../errors/ForceRetryError.js';\n\n// Handles cross-realm cases (e.g., iframes, different JS contexts) where `instanceof` fails.\nconst isErrorType = (error: unknown, cls: {name: string}): boolean =>\n\terror instanceof (cls as any) || (error as any)?.name === cls.name;\n\n/**\nType guard to check if an error is a `KyError`.\n\nNote: `SchemaValidationError` is intentionally not considered a Ky error. `KyError` covers failures in Ky's HTTP lifecycle (bad status, timeout, retry), while schema validation errors originate from the user-provided schema, not from Ky itself.\n\n@param error - The error to check\n@returns `true` if the error is a Ky error, `false` otherwise\n\n@example\n```\nimport ky, {isKyError} from 'ky';\ntry {\n\tconst response = await ky.get('/api/data');\n} catch (error) {\n\tif (isKyError(error)) {\n\t\t// Handle Ky-specific errors\n\t\tconsole.log('Ky error occurred:', error.message);\n\t} else {\n\t\t// Handle other errors\n\t\tconsole.log('Unknown error:', error);\n\t}\n}\n```\n*/\nexport function isKyError(error: unknown): error is KyError {\n\treturn (error as any)?.isKyError === true || isHTTPError(error) || isNetworkError(error) || isTimeoutError(error) || isForceRetryError(error);\n}\n\n/**\nType guard to check if an error is an `HTTPError`.\n\n@param error - The error to check\n@returns `true` if the error is an `HTTPError`, `false` otherwise\n\n@example\n```\nimport ky, {isHTTPError} from 'ky';\ntry {\n\tconst response = await ky.get('/api/data');\n} catch (error) {\n\tif (isHTTPError(error)) {\n\t\tconsole.log('HTTP error status:', error.response.status);\n\t}\n}\n```\n*/\nexport function isHTTPError<T = unknown>(error: unknown): error is HTTPError<T> {\n\treturn isErrorType(error, HTTPError);\n}\n\n/**\nType guard to check if an error is a `NetworkError`.\n\n@param error - The error to check\n@returns `true` if the error is a `NetworkError`, `false` otherwise\n\n@example\n```\nimport ky, {isNetworkError} from 'ky';\ntry {\n\tconst response = await ky.get('/api/data');\n} catch (error) {\n\tif (isNetworkError(error)) {\n\t\tconsole.log('Network error:', error.request.url);\n\t}\n}\n```\n*/\nexport function isNetworkError(error: unknown): error is NetworkError {\n\treturn isErrorType(error, NetworkError);\n}\n\n/**\nType guard to check if an error is a `TimeoutError`.\n\n@param error - The error to check\n@returns `true` if the error is a `TimeoutError`, `false` otherwise\n\n@example\n```\nimport ky, {isTimeoutError} from 'ky';\ntry {\n\tconst response = await ky.get('/api/data', { timeout: 1000 });\n} catch (error) {\n\tif (isTimeoutError(error)) {\n\t\tconsole.log('Request timed out:', error.request.url);\n\t}\n}\n```\n*/\nexport function isTimeoutError(error: unknown): error is TimeoutError {\n\treturn isErrorType(error, TimeoutError);\n}\n\n/**\nType guard to check if an error is a `ForceRetryError`.\n\n@param error - The error to check\n@returns `true` if the error is a `ForceRetryError`, `false` otherwise\n\n@example\n```\nimport ky, {isForceRetryError} from 'ky';\n\nconst api = ky.extend({\n\thooks: {\n\t\tbeforeRetry: [\n\t\t\t({error, retryCount}) => {\n\t\t\t\tif (isForceRetryError(error)) {\n\t\t\t\t\tconsole.log(`Forced retry #${retryCount}: ${error.code}`);\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t}\n});\n```\n*/\nexport function isForceRetryError(error: unknown): error is ForceRetryError {\n\treturn isErrorType(error, ForceRetryError);\n}\n", "import {HTTPError} from '../errors/HTTPError.js';\nimport {NetworkError} from '../errors/NetworkError.js';\nimport {NonError} from '../errors/NonError.js';\nimport {ForceRetryError} from '../errors/ForceRetryError.js';\nimport {SchemaValidationError} from '../errors/SchemaValidationError.js';\nimport {TimeoutError} from '../errors/TimeoutError.js';\nimport type {\n\tInput,\n\tInternalOptions,\n\tNormalizedOptions,\n\tOptions,\n\tSearchParamsInit,\n\tSearchParamsOption,\n} from '../types/options.js';\nimport {type ResponsePromise} from '../types/ResponsePromise.js';\nimport type {StandardSchemaV1} from '../types/standard-schema.js';\nimport {streamRequest, streamResponse} from '../utils/body.js';\nimport {\n\tcloneShallow,\n\tmergeHeaders,\n\tmergeHooks,\n\tdeletedParametersSymbol,\n} from '../utils/merge.js';\nimport type {RetryOptions} from '../types/retry.js';\nimport {normalizeRequestMethod, normalizeRetryOptions} from '../utils/normalize.js';\nimport timeout from '../utils/timeout.js';\nimport delay from '../utils/delay.js';\nimport {type ObjectEntries} from '../utils/types.js';\nimport {findUnknownOptions, hasSearchParameters} from '../utils/options.js';\nimport isRawNetworkError from '../utils/is-network-error.js';\nimport {isHTTPError, isNetworkError, isTimeoutError} from '../utils/type-guards.js';\nimport {\n\tmaxSafeTimeout,\n\tresponseTypes,\n\tstop,\n\tRetryMarker,\n\tsupportsAbortController,\n\tsupportsAbortSignal,\n\tsupportsFormData,\n\tsupportsResponseStreams,\n\tsupportsRequestStreams,\n} from './constants.js';\n\nconst maxErrorResponseBodySize = 10 * 1024 * 1024;\nconst prefixUrlRenamedErrorMessage = 'The `prefixUrl` option has been renamed `prefix` in v2 and enhanced to allow slashes in input. See also the new `baseUrl` option for improved flexibility with standard URL resolution: https://github.com/sindresorhus/ky#baseurl';\nconst timedOutResponseData = Symbol('timedOutResponseData');\n\nconst createTextDecoder = (contentType: string): TextDecoder => {\n\tconst match = /;\\s*charset\\s*=\\s*(?:\"([^\"]+)\"|([^;,\\s]+))/i.exec(contentType);\n\tconst charset = match?.[1] ?? match?.[2];\n\tif (charset) {\n\t\ttry {\n\t\t\treturn new TextDecoder(charset);\n\t\t} catch {}\n\t}\n\n\treturn new TextDecoder();\n};\n\nconst invalidSchemaMessage = 'The `schema` argument must follow the Standard Schema specification';\n\nconst cloneRetryOptions = (retry: RetryOptions | number): RetryOptions | number => {\n\tif (typeof retry !== 'object') {\n\t\treturn retry;\n\t}\n\n\t// Clone nested arrays too so init hooks can mutate retry config without leaking state across requests.\n\treturn {\n\t\t...retry,\n\t\t...(retry.methods && {methods: [...retry.methods]}),\n\t\t...(retry.statusCodes && {statusCodes: [...retry.statusCodes]}),\n\t\t...(retry.afterStatusCodes && {afterStatusCodes: [...retry.afterStatusCodes]}),\n\t};\n};\n\nconst objectToString = Object.prototype.toString;\n\nconst isRequestInstance = (value: unknown): value is Request =>\n\tvalue instanceof globalThis.Request || objectToString.call(value) === '[object Request]';\n\n// Accepted custom responses are treated as full Responses throughout Ky.\n// If a custom fetch returns one, it must behave like a Response for cloning,\n// body consumption, `json()` decoration, and any enabled stream features.\nconst isResponseInstance = (value: unknown): value is Response =>\n\tvalue instanceof globalThis.Response || objectToString.call(value) === '[object Response]';\n\nconst cloneSearchParametersForInitHook = (searchParameters: SearchParamsOption | undefined): SearchParamsOption | undefined => {\n\tif (Array.isArray(searchParameters)) {\n\t\treturn searchParameters.map(parameter => [...parameter]) as SearchParamsOption;\n\t}\n\n\treturn cloneShallow(searchParameters) as SearchParamsOption | undefined;\n};\n\n// Shallow-clone mutable option properties so init hook mutations don't leak across requests.\nfunction cloneInitHookOptions(options: Options): Options {\n\tconst clonedOptions: Options = {\n\t\t...options,\n\t\tjson: cloneShallow(options.json),\n\t\tcontext: cloneShallow(options.context)!,\n\t\theaders: cloneShallow(options.headers)!,\n\t\tsearchParams: cloneSearchParametersForInitHook(options.searchParams),\n\t};\n\n\tif (options.retry !== undefined) {\n\t\tclonedOptions.retry = cloneRetryOptions(options.retry);\n\t}\n\n\treturn clonedOptions;\n}\n\nconst validateJsonWithSchema = async (jsonValue: unknown, schema: StandardSchemaV1): Promise<unknown> => {\n\tif (\n\t\t(\n\t\t\ttypeof schema !== 'object'\n\t\t\t&& typeof schema !== 'function'\n\t\t)\n\t\t|| schema === null\n\t) {\n\t\tthrow new TypeError(invalidSchemaMessage);\n\t}\n\n\tconst standardSchema = schema['~standard'];\n\n\tif (\n\t\ttypeof standardSchema !== 'object'\n\t\t|| standardSchema === null\n\t\t|| typeof standardSchema.validate !== 'function'\n\t) {\n\t\tthrow new TypeError(invalidSchemaMessage);\n\t}\n\n\tconst validationResult = await standardSchema.validate(jsonValue);\n\n\tif (validationResult.issues) {\n\t\tthrow new SchemaValidationError(validationResult.issues);\n\t}\n\n\treturn validationResult.value;\n};\n\nexport class Ky {\n\tstatic create(input: Input, options: Options): ResponsePromise {\n\t\tconst initHooks = options.hooks?.init ?? [];\n\t\tconst initHookOptions = initHooks.length > 0 ? cloneInitHookOptions(options) : options;\n\n\t\tfor (const hook of initHooks) {\n\t\t\thook(initHookOptions);\n\t\t}\n\n\t\tconst ky = new Ky(input, initHookOptions);\n\n\t\tconst function_ = async (): Promise<Response | void> => {\n\t\t\tif (typeof ky.#options.timeout === 'number' && ky.#options.timeout > maxSafeTimeout) {\n\t\t\t\tthrow new RangeError(`The \\`timeout\\` option cannot be greater than ${maxSafeTimeout}`);\n\t\t\t}\n\n\t\t\tif (typeof ky.#options.totalTimeout === 'number' && ky.#options.totalTimeout > maxSafeTimeout) {\n\t\t\t\tthrow new RangeError(`The \\`totalTimeout\\` option cannot be greater than ${maxSafeTimeout}`);\n\t\t\t}\n\n\t\t\t// Delay the fetch so that body method shortcuts can set the Accept header\n\t\t\tawait Promise.resolve();\n\t\t\tconst beforeRequestResponse = await ky.#runBeforeRequestHooks();\n\t\t\tlet response = beforeRequestResponse ?? await ky.#retry(async () => ky.#fetch());\n\t\t\tlet responseFromHook = beforeRequestResponse !== undefined\n\t\t\t\t|| ky.#consumeReturnedResponseFromBeforeRetryHook();\n\n\t\t\tfor (;;) {\n\t\t\t\t// `undefined` means a hook stopped the flow without providing a response.\n\t\t\t\t// Non-native Responses still continue through Ky if they pass `isResponseInstance()`.\n\t\t\t\tif (response === undefined) {\n\t\t\t\t\treturn response;\n\t\t\t\t}\n\n\t\t\t\tif (isResponseInstance(response)) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\t\t\t\tresponse = await ky.#runAfterResponseHooks(response);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tif (!(error instanceof ForceRetryError)) {\n\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\t\t\t\tconst retriedResponse: Response | void = await ky.#retryFromError(error, async () => ky.#fetch());\n\t\t\t\t\t\tif (retriedResponse === undefined) {\n\t\t\t\t\t\t\treturn retriedResponse;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresponse = retriedResponse;\n\t\t\t\t\t\tresponseFromHook = ky.#consumeReturnedResponseFromBeforeRetryHook();\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst currentResponse: Response = response;\n\n\t\t\t\t// Opaque responses (`response.type === 'opaque'`) from `no-cors` requests always have `status: 0` and `ok: false`, but this is not a failure - the actual status is hidden by the browser.\n\t\t\t\tif (!currentResponse.ok && currentResponse.type !== 'opaque' && (\n\t\t\t\t\ttypeof ky.#options.throwHttpErrors === 'function'\n\t\t\t\t\t\t? ky.#options.throwHttpErrors(currentResponse.status)\n\t\t\t\t\t\t: ky.#options.throwHttpErrors\n\t\t\t\t)) {\n\t\t\t\t\t// `request` must reflect the request that actually failed, but `options` stays as Ky's\n\t\t\t\t\t// normalized options snapshot. Replacement `Request` instances do not preserve the\n\t\t\t\t\t// original `BodyInit`, so trying to make `options` mirror arbitrary requests would be lossy.\n\t\t\t\t\tconst httpError: HTTPError = new HTTPError(currentResponse, ky.#getResponseRequest(currentResponse), ky.#getNormalizedOptions());\n\t\t\t\t\tconst errorToThrow: Error = httpError;\n\t\t\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\t\t\thttpError.data = await ky.#getResponseData(currentResponse);\n\n\t\t\t\t\tif (responseFromHook) {\n\t\t\t\t\t\tthrow errorToThrow;\n\t\t\t\t\t}\n\n\t\t\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\t\t\tconst retriedResponse: Response | void = await ky.#retryFromError(httpError, async () => ky.#fetch());\n\t\t\t\t\tif (retriedResponse === undefined) {\n\t\t\t\t\t\treturn retriedResponse;\n\t\t\t\t\t}\n\n\t\t\t\t\tresponse = retriedResponse;\n\t\t\t\t\tresponseFromHook = ky.#consumeReturnedResponseFromBeforeRetryHook();\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (!isResponseInstance(response)) {\n\t\t\t\treturn response;\n\t\t\t}\n\n\t\t\tky.#decorateResponse(response);\n\n\t\t\t// If `onDownloadProgress` is passed, it uses the stream API internally\n\t\t\tif (ky.#options.onDownloadProgress) {\n\t\t\t\tif (typeof ky.#options.onDownloadProgress !== 'function') {\n\t\t\t\t\tthrow new TypeError('The `onDownloadProgress` option must be a function');\n\t\t\t\t}\n\n\t\t\t\tif (!supportsResponseStreams) {\n\t\t\t\t\tthrow new Error('Streams are not supported in your environment. `ReadableStream` is missing.');\n\t\t\t\t}\n\n\t\t\t\tconst progressResponse = response.clone();\n\t\t\t\tky.#cancelResponseBody(response);\n\t\t\t\treturn streamResponse(progressResponse, ky.#options.onDownloadProgress);\n\t\t\t}\n\n\t\t\treturn response;\n\t\t};\n\n\t\tconst result = (async () => {\n\t\t\ttry {\n\t\t\t\treturn await function_();\n\t\t\t} catch (error: unknown) {\n\t\t\t\t// Non-Error throws (e.g., thrown strings) pass through unchanged\n\t\t\t\tif (!(error instanceof Error)) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\n\t\t\t\t// Errors thrown by beforeRetry hooks must propagate unchanged.\n\t\t\t\tif (ky.#beforeRetryHookErrors.has(error)) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\n\t\t\t\tlet processedError: Error = error;\n\t\t\t\tfor (const hook of ky.#options.hooks.beforeError) {\n\t\t\t\t\t// `request` is the current failing request. `options` intentionally remains the\n\t\t\t\t\t// stable normalized Ky options snapshot for the same reason as `HTTPError` above.\n\t\t\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\t\t\tconst hookResult: unknown = await hook({\n\t\t\t\t\t\trequest: ky.request,\n\t\t\t\t\t\toptions: ky.#getNormalizedOptions(),\n\t\t\t\t\t\terror: processedError,\n\t\t\t\t\t\tretryCount: ky.#retryCount,\n\t\t\t\t\t});\n\n\t\t\t\t\t// Only overwrite if the hook returns a valid Error instance.\n\t\t\t\t\tif (hookResult instanceof Error) {\n\t\t\t\t\t\tprocessedError = hookResult;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthrow processedError;\n\t\t\t} finally {\n\t\t\t\tconst originalRequest = ky.#originalRequest;\n\n\t\t\t\t// Ignore cancellation errors from already-locked or already-consumed streams.\n\t\t\t\tky.#cancelBody(originalRequest?.body ?? undefined);\n\t\t\t\t// Only cancel the current request body if it's distinct from the original (i.e. it was cloned for retries).\n\t\t\t\tif (ky.request !== originalRequest) {\n\t\t\t\t\tky.#cancelBody(ky.request.body ?? undefined);\n\t\t\t\t}\n\t\t\t}\n\t\t})() as ResponsePromise;\n\n\t\tfor (const [type, mimeType] of Object.entries(responseTypes) as ObjectEntries<typeof responseTypes>) {\n\t\t\t// Only expose `.bytes()` when the environment implements it.\n\t\t\tif (\n\t\t\t\ttype === 'bytes'\n\t\t\t\t&& typeof (globalThis.Response?.prototype as unknown as {bytes?: unknown})?.bytes !== 'function'\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tresult[type] = async (schema?: StandardSchemaV1) => {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n\t\t\t\tky.request.headers.set('accept', ky.request.headers.get('accept') || mimeType);\n\n\t\t\t\tconst response = await result;\n\n\t\t\t\tif (type !== 'json') {\n\t\t\t\t\treturn response[type]();\n\t\t\t\t}\n\n\t\t\t\tconst text = await response.text();\n\t\t\t\tif (text === '') {\n\t\t\t\t\tif (schema !== undefined) {\n\t\t\t\t\t\treturn validateJsonWithSchema(undefined, schema);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn JSON.parse(text);\n\t\t\t\t}\n\n\t\t\t\tconst jsonValue = initHookOptions.parseJson\n\t\t\t\t\t? await initHookOptions.parseJson(text, {request: ky.#getResponseRequest(response), response})\n\t\t\t\t\t: JSON.parse(text);\n\n\t\t\t\treturn schema === undefined ? jsonValue : validateJsonWithSchema(jsonValue, schema);\n\t\t\t};\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t// eslint-disable-next-line unicorn/prevent-abbreviations\n\tstatic #normalizeSearchParams(searchParams: SearchParamsOption): SearchParamsOption {\n\t\t// Filter out undefined values from plain objects\n\t\tif (searchParams && typeof searchParams === 'object' && !Array.isArray(searchParams) && !(searchParams instanceof URLSearchParams)) {\n\t\t\treturn Object.fromEntries(Object.entries(searchParams).filter(([, value]) => value !== undefined));\n\t\t}\n\n\t\treturn searchParams;\n\t}\n\n\tpublic request: Request;\n\t#abortController?: AbortController;\n\t#retryCount = 0;\n\t// eslint-disable-next-line @typescript-eslint/prefer-readonly -- False positive: #input is reassigned on line 202\n\t#input: Input;\n\treadonly #options: InternalOptions;\n\t#originalRequest?: Request;\n\treadonly #userProvidedAbortSignal?: AbortSignal;\n\treadonly #beforeRetryHookErrors = new WeakSet<Error>();\n\t#cachedNormalizedOptions: NormalizedOptions | undefined;\n\treadonly #startTime: number | undefined;\n\t#returnedResponseFromBeforeRetryHook = false;\n\treadonly #responseRequests = new WeakMap<Response, Request>();\n\n\t// eslint-disable-next-line complexity\n\tconstructor(input: Input, options: Options = {}) {\n\t\tthis.#input = input;\n\t\tif (Object.hasOwn(options, 'prefixUrl')) {\n\t\t\tthrow new Error(prefixUrlRenamedErrorMessage);\n\t\t}\n\n\t\tthis.#options = {\n\t\t\t...options,\n\t\t\theaders: mergeHeaders((this.#input as Request).headers, options.headers),\n\t\t\thooks: mergeHooks({}, options.hooks),\n\t\t\tmethod: normalizeRequestMethod(options.method ?? (this.#input as Request).method ?? 'GET'),\n\t\t\t// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n\t\t\tprefix: String(options.prefix || ''),\n\t\t\tretry: normalizeRetryOptions(options.retry),\n\t\t\tthrowHttpErrors: options.throwHttpErrors ?? true,\n\t\t\ttimeout: options.timeout ?? 10_000,\n\t\t\ttotalTimeout: options.totalTimeout ?? false,\n\t\t\tfetch: options.fetch ?? globalThis.fetch.bind(globalThis),\n\t\t\tcontext: options.context ?? {},\n\t\t};\n\n\t\tif (typeof this.#input !== 'string' && !(this.#input instanceof URL || this.#input instanceof globalThis.Request)) {\n\t\t\tthrow new TypeError('`input` must be a string, URL, or Request');\n\t\t}\n\n\t\tif (typeof this.#input === 'string') {\n\t\t\tif (this.#options.prefix) {\n\t\t\t\tconst normalizedPrefix = this.#options.prefix.replace(/\\/+$/, '');\n\t\t\t\tconst normalizedInput = this.#input.replace(/^\\/+/, '');\n\t\t\t\tthis.#input = `${normalizedPrefix}/${normalizedInput}`;\n\t\t\t}\n\n\t\t\tif (this.#options.baseUrl) {\n\t\t\t\tlet absoluteInput: URL | undefined;\n\t\t\t\ttry {\n\t\t\t\t\tabsoluteInput = new URL(this.#input);\n\t\t\t\t} catch {}\n\n\t\t\t\tif (!absoluteInput) {\n\t\t\t\t\tthis.#input = new URL(this.#input, (new Request(this.#options.baseUrl)).url);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (supportsAbortController && supportsAbortSignal) {\n\t\t\tthis.#userProvidedAbortSignal = this.#options.signal ?? (this.#input as Request).signal;\n\t\t\tthis.#abortController = new globalThis.AbortController();\n\t\t\tthis.#options.signal = this.#createManagedSignal();\n\t\t}\n\n\t\tif (supportsRequestStreams) {\n\t\t\t// @ts-expect-error - Types are outdated.\n\t\t\tthis.#options.duplex = 'half';\n\t\t}\n\n\t\tif (this.#options.json !== undefined) {\n\t\t\tthis.#options.body = this.#options.stringifyJson?.(this.#options.json) ?? JSON.stringify(this.#options.json);\n\t\t\tthis.#options.headers.set('content-type', this.#options.headers.get('content-type') ?? 'application/json');\n\t\t}\n\n\t\t// To provide correct form boundary, Content-Type header should be deleted when creating Request from another Request with FormData/URLSearchParams body\n\t\t// Only delete if user didn't explicitly provide a custom content-type\n\t\tconst userProvidedContentType = options.headers && new globalThis.Headers(options.headers as HeadersInit).has('content-type');\n\t\tif (\n\t\t\tthis.#input instanceof globalThis.Request\n\t\t\t&& ((supportsFormData && this.#options.body instanceof globalThis.FormData) || this.#options.body instanceof URLSearchParams)\n\t\t\t&& !userProvidedContentType\n\t\t) {\n\t\t\tthis.#options.headers.delete('content-type');\n\t\t}\n\n\t\tthis.request = new globalThis.Request(this.#input, this.#options);\n\n\t\tif (hasSearchParameters(this.#options.searchParams)) {\n\t\t\tconst url = new URL(this.request.url);\n\t\t\tconst deleted = (this.#options.searchParams as any)?.[deletedParametersSymbol] as Set<string> | undefined;\n\n\t\t\tif (deleted) {\n\t\t\t\t// Remove keys from the input URL first so later searchParams entries can intentionally re-add them.\n\t\t\t\tfor (const key of deleted) {\n\t\t\t\t\turl.searchParams.delete(key);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (typeof this.#options.searchParams === 'string') {\n\t\t\t\tconst stringSearchParameters = this.#options.searchParams.replace(/^\\?/, '');\n\t\t\t\tif (stringSearchParameters !== '') {\n\t\t\t\t\turl.search = url.search ? `${url.search}&${stringSearchParameters}` : `?${stringSearchParameters}`;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst optionsSearchParameters = new URLSearchParams(Ky.#normalizeSearchParams(this.#options.searchParams) as unknown as SearchParamsInit);\n\n\t\t\t\tfor (const [key, value] of optionsSearchParameters.entries()) {\n\t\t\t\t\turl.searchParams.append(key, value);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tthis.#options.searchParams\n\t\t\t\t&& typeof this.#options.searchParams === 'object'\n\t\t\t\t&& !Array.isArray(this.#options.searchParams)\n\t\t\t\t&& !(this.#options.searchParams instanceof URLSearchParams)\n\t\t\t) {\n\t\t\t\tfor (const [key, value] of Object.entries(this.#options.searchParams)) {\n\t\t\t\t\tif (value === undefined) {\n\t\t\t\t\t\turl.searchParams.delete(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Recreate request with the updated URL. We already have all options in this.#options, including duplex.\n\t\t\tthis.request = new globalThis.Request(url, this.#options as RequestInit);\n\t\t}\n\n\t\tif (this.#options.onUploadProgress && typeof this.#options.onUploadProgress !== 'function') {\n\t\t\tthrow new TypeError('The `onUploadProgress` option must be a function');\n\t\t}\n\n\t\t// `totalTimeout` starts when the request pipeline is created, so it also includes\n\t\t// Ky's internal scheduling and user hook time before the first fetch attempt.\n\t\tthis.#startTime = typeof this.#options.totalTimeout === 'number' ? this.#getCurrentTime() : undefined;\n\t}\n\n\t#calculateDelay(): number {\n\t\tconst retryDelay = this.#options.retry.delay(this.#retryCount + 1);\n\n\t\tlet jitteredDelay = retryDelay;\n\t\tif (this.#options.retry.jitter === true) {\n\t\t\tjitteredDelay = Math.random() * retryDelay;\n\t\t} else if (typeof this.#options.retry.jitter === 'function') {\n\t\t\tjitteredDelay = this.#options.retry.jitter(retryDelay);\n\n\t\t\tif (!Number.isFinite(jitteredDelay) || jitteredDelay < 0) {\n\t\t\t\tjitteredDelay = retryDelay;\n\t\t\t}\n\t\t}\n\n\t\treturn Math.min(this.#options.retry.backoffLimit, jitteredDelay);\n\t}\n\n\tasync #calculateRetryDelay(error: unknown) {\n\t\tif (this.#retryCount >= this.#options.retry.limit) {\n\t\t\tthrow error;\n\t\t}\n\n\t\t// Wrap non-Error throws to ensure consistent error handling\n\t\tconst errorObject = error instanceof Error ? error : new NonError(error);\n\n\t\t// Handle forced retry from afterResponse hook - skip method check and shouldRetry\n\t\tif (errorObject instanceof ForceRetryError) {\n\t\t\treturn errorObject.customDelay ?? this.#calculateDelay();\n\t\t}\n\n\t\t// Check if method is retriable for non-forced retries\n\t\tif (!this.#options.retry.methods.includes(this.request.method.toLowerCase())) {\n\t\t\tthrow error;\n\t\t}\n\n\t\t// User-provided shouldRetry function takes precedence over default checks (retryOnTimeout, status codes, etc.)\n\t\tif (this.#options.retry.shouldRetry !== undefined) {\n\t\t\tconst result = await this.#options.retry.shouldRetry({error: errorObject, retryCount: this.#retryCount + 1});\n\n\t\t\t// Strict boolean checking - only exact true/false are handled specially\n\t\t\tif (result === false) {\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\tif (result === true) {\n\t\t\t\t// Force retry - skip all other validation and return delay\n\t\t\t\treturn this.#calculateDelay();\n\t\t\t}\n\n\t\t\t// If undefined or any other value, fall through to default behavior\n\t\t}\n\n\t\t// Default timeout behavior\n\t\tif (isTimeoutError(error)) {\n\t\t\tif (!this.#options.retry.retryOnTimeout) {\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\treturn this.#calculateDelay();\n\t\t}\n\n\t\tif (isHTTPError(error)) {\n\t\t\tif (!this.#options.retry.statusCodes.includes(error.response.status)) {\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\tconst retryAfter = error.response.headers.get('Retry-After')\n\t\t\t\t?? error.response.headers.get('RateLimit-Reset')\n\t\t\t\t?? error.response.headers.get('X-RateLimit-Retry-After') // Symfony-based services\n\t\t\t\t?? error.response.headers.get('X-RateLimit-Reset') // GitHub\n\t\t\t\t?? error.response.headers.get('X-Rate-Limit-Reset'); // Twitter\n\t\t\tif (retryAfter && this.#options.retry.afterStatusCodes.includes(error.response.status)) {\n\t\t\t\tlet after = Number(retryAfter) * 1000;\n\t\t\t\tif (Number.isNaN(after)) {\n\t\t\t\t\tafter = Date.parse(retryAfter) - Date.now();\n\t\t\t\t} else if (after >= Date.parse('2024-01-01')) {\n\t\t\t\t\t// A large number is treated as a timestamp (fixed threshold protects against clock skew)\n\t\t\t\t\tafter -= Date.now();\n\t\t\t\t}\n\n\t\t\t\tif (!Number.isFinite(after)) {\n\t\t\t\t\treturn Math.min(this.#options.retry.maxRetryAfter, this.#calculateDelay());\n\t\t\t\t}\n\n\t\t\t\tafter = Math.max(0, after);\n\n\t\t\t\t// Don't apply jitter when server provides explicit retry timing\n\t\t\t\treturn Math.min(this.#options.retry.maxRetryAfter, after);\n\t\t\t}\n\n\t\t\tif (error.response.status === 413) {\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\treturn this.#calculateDelay();\n\t\t}\n\n\t\t// Only retry known retriable error types. Unknown errors (e.g., programming bugs) are not retried.\n\t\tif (!isNetworkError(error)) {\n\t\t\tthrow error;\n\t\t}\n\n\t\treturn this.#calculateDelay();\n\t}\n\n\t#decorateResponse(response: Response): Response {\n\t\tconst request = this.#getResponseRequest(response);\n\n\t\tif (this.#options.parseJson) {\n\t\t\tresponse.json = async () => {\n\t\t\t\tconst text = await response.text();\n\t\t\t\tif (text === '') {\n\t\t\t\t\treturn JSON.parse(text);\n\t\t\t\t}\n\n\t\t\t\treturn this.#options.parseJson!(text, {request, response});\n\t\t\t};\n\t\t}\n\n\t\treturn response;\n\t}\n\n\tasync #getResponseData(response: Response): Promise<unknown> {\n\t\t// Even with request timeouts disabled, bound error-body reads so retries and error propagation\n\t\t// cannot be stalled indefinitely by never-ending response streams.\n\t\tconst text = await this.#readResponseText(response, this.#getErrorDataTimeout());\n\t\tif (text === timedOutResponseData) {\n\t\t\tthis.#throwIfTotalTimeoutExhausted();\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (!text) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (!this.#isJsonContentType(response.headers.get('content-type') ?? '')) {\n\t\t\treturn text;\n\t\t}\n\n\t\tconst data = await this.#parseJson(text, response, this.#getErrorDataTimeout(), this.#getResponseRequest(response));\n\t\tif (data === timedOutResponseData) {\n\t\t\tthis.#throwIfTotalTimeoutExhausted();\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn data;\n\t}\n\n\t#getErrorDataTimeout(): number {\n\t\tconst errorDataTimeout = this.#options.timeout === false ? 10_000 : this.#options.timeout;\n\t\tconst remainingTotal = this.#getRemainingTotalTimeout();\n\t\tif (remainingTotal === undefined) {\n\t\t\treturn errorDataTimeout;\n\t\t}\n\n\t\tif (remainingTotal <= 0) {\n\t\t\tthrow new TimeoutError(this.request);\n\t\t}\n\n\t\treturn Math.min(errorDataTimeout, remainingTotal);\n\t}\n\n\t#isJsonContentType(contentType: string): boolean {\n\t\t// Match JSON subtypes like `json`, `problem+json`, and `vnd.api+json`.\n\t\tconst mimeType = (contentType.split(';', 1)[0] ?? '').trim().toLowerCase();\n\t\treturn /\\/(?:.*[.+-])?json$/.test(mimeType);\n\t}\n\n\tasync #readResponseText(response: Response, timeoutMs: number): Promise<string | typeof timedOutResponseData | undefined> {\n\t\tconst {body} = response;\n\t\tif (!body) {\n\t\t\ttry {\n\t\t\t\treturn await response.text();\n\t\t\t} catch {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t}\n\n\t\tlet reader: ReadableStreamDefaultReader<Uint8Array>;\n\t\ttry {\n\t\t\treader = body.getReader();\n\t\t} catch {\n\t\t\t// Another consumer already locked the stream.\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst decoder = createTextDecoder(response.headers.get('content-type') ?? '');\n\t\tconst chunks: string[] = [];\n\t\tlet totalBytes = 0;\n\n\t\tconst readAll = (async (): Promise<string | undefined> => {\n\t\t\ttry {\n\t\t\t\tfor (;;) {\n\t\t\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\t\t\tconst {done, value} = await reader.read();\n\t\t\t\t\tif (done) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\ttotalBytes += value.byteLength;\n\t\t\t\t\tif (totalBytes > maxErrorResponseBodySize) {\n\t\t\t\t\t\tvoid reader.cancel().catch(() => undefined);\n\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t}\n\n\t\t\t\t\tchunks.push(decoder.decode(value, {stream: true}));\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tchunks.push(decoder.decode());\n\t\t\treturn chunks.join('');\n\t\t})();\n\n\t\tconst timeoutPromise = new Promise<typeof timedOutResponseData>(resolve => {\n\t\t\tconst timeoutId = setTimeout(() => {\n\t\t\t\tresolve(timedOutResponseData);\n\t\t\t}, timeoutMs);\n\t\t\tvoid readAll.finally(() => {\n\t\t\t\tclearTimeout(timeoutId);\n\t\t\t});\n\t\t});\n\n\t\tconst result = await Promise.race([readAll, timeoutPromise]);\n\t\tif (result === timedOutResponseData) {\n\t\t\tvoid reader.cancel().catch(() => undefined);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tasync #parseJson(text: string, response: Response, timeoutMs: number, request: Request): Promise<unknown> {\n\t\tlet timeoutId: ReturnType<typeof setTimeout> | undefined;\n\t\ttry {\n\t\t\treturn await Promise.race([\n\t\t\t\tPromise.resolve().then(() => this.#options.parseJson\n\t\t\t\t\t? this.#options.parseJson(text, {request, response})\n\t\t\t\t\t: JSON.parse(text),\n\t\t\t\t),\n\t\t\t\tnew Promise<typeof timedOutResponseData>(resolve => {\n\t\t\t\t\ttimeoutId = setTimeout(() => {\n\t\t\t\t\t\tresolve(timedOutResponseData);\n\t\t\t\t\t}, timeoutMs);\n\t\t\t\t}),\n\t\t\t]);\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t} finally {\n\t\t\tclearTimeout(timeoutId);\n\t\t}\n\t}\n\n\t#cancelBody(body: ReadableStream | undefined): void {\n\t\tif (!body) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Ignore cancellation failures from already-locked or already-consumed streams.\n\t\tvoid body.cancel().catch(() => undefined);\n\t}\n\n\t#cancelResponseBody(response: Response): void {\n\t\t// Ignore cancellation failures from already-locked or already-consumed streams.\n\t\tthis.#cancelBody(response.body ?? undefined);\n\t}\n\n\t#createManagedSignal(): AbortSignal {\n\t\treturn this.#userProvidedAbortSignal\n\t\t\t? AbortSignal.any([this.#userProvidedAbortSignal, this.#abortController!.signal])\n\t\t\t: this.#abortController!.signal;\n\t}\n\n\t#throwIfTotalTimeoutExhausted(): void {\n\t\tconst remaining = this.#getRemainingTotalTimeout();\n\t\tif (remaining !== undefined && remaining <= 0) {\n\t\t\tthrow new TimeoutError(this.request);\n\t\t}\n\t}\n\n\tasync #runBeforeRequestHooks(): Promise<Response | undefined> {\n\t\tfor (const hook of this.#options.hooks.beforeRequest) {\n\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\tconst result = await hook({\n\t\t\t\trequest: this.request,\n\t\t\t\toptions: this.#getNormalizedOptions(),\n\t\t\t\tretryCount: 0,\n\t\t\t});\n\n\t\t\tif (isRequestInstance(result)) {\n\t\t\t\tthis.#assignRequest(result);\n\t\t\t} else if (isResponseInstance(result)) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tasync #runAfterResponseHooks(response: Response): Promise<Response> {\n\t\tconst responseRequest = this.#getResponseRequest(response);\n\n\t\tfor (const hook of this.#options.hooks.afterResponse) {\n\t\t\tconst hookResponse = this.#setResponseRequest(response.clone(), responseRequest);\n\t\t\tthis.#decorateResponse(hookResponse);\n\n\t\t\tlet modifiedResponse;\n\t\t\ttry {\n\t\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\t\tmodifiedResponse = await hook({\n\t\t\t\t\trequest: this.request,\n\t\t\t\t\toptions: this.#getNormalizedOptions(),\n\t\t\t\t\tresponse: hookResponse,\n\t\t\t\t\tretryCount: this.#retryCount,\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\t// Cancel both responses to prevent memory leaks when hook throws\n\t\t\t\tif (hookResponse !== response) {\n\t\t\t\t\tthis.#cancelResponseBody(hookResponse);\n\t\t\t\t}\n\n\t\t\t\tthis.#cancelResponseBody(response);\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\tif (modifiedResponse instanceof RetryMarker) {\n\t\t\t\t// Cancel both the cloned response passed to the hook and the current response to prevent resource leaks (especially important in Deno/Bun).\n\t\t\t\t// Do not await cancellation since hooks can clone the response, leaving extra tee branches that keep cancel promises pending per the Streams spec.\n\t\t\t\tif (hookResponse !== response) {\n\t\t\t\t\tthis.#cancelResponseBody(hookResponse);\n\t\t\t\t}\n\n\t\t\t\tthis.#cancelResponseBody(response);\n\t\t\t\tthrow new ForceRetryError(modifiedResponse.options);\n\t\t\t}\n\n\t\t\tconst nextResponse = isResponseInstance(modifiedResponse)\n\t\t\t\t? this.#setResponseRequest(modifiedResponse, responseRequest)\n\t\t\t\t: response;\n\n\t\t\t// Cancel any response bodies we won't use to prevent memory leaks.\n\t\t\t// Uses fire-and-forget since hooks may have cloned the response, creating tee branches that block cancellation.\n\t\t\t// If the hook wrapped an existing body into a new Response, both Response objects can still point at the same stream.\n\t\t\tif (hookResponse !== response && hookResponse !== nextResponse && hookResponse.body !== nextResponse.body) {\n\t\t\t\tthis.#cancelResponseBody(hookResponse);\n\t\t\t}\n\n\t\t\tif (response !== nextResponse && response.body !== nextResponse.body) {\n\t\t\t\tthis.#cancelResponseBody(response);\n\t\t\t}\n\n\t\t\tresponse = nextResponse;\n\t\t}\n\n\t\treturn response;\n\t}\n\n\tasync #retry<T extends (...arguments_: any) => Promise<any>>(function_: T): Promise<ReturnType<T> | Response | void> {\n\t\ttry {\n\t\t\treturn await function_();\n\t\t} catch (error) {\n\t\t\treturn this.#retryFromError(error, function_);\n\t\t}\n\t}\n\n\tasync #retryFromError<T extends (...arguments_: any) => Promise<any>>(error: unknown, function_: T): Promise<ReturnType<T> | Response | void> {\n\t\tthis.#returnedResponseFromBeforeRetryHook = false;\n\n\t\tconst retryDelay = Math.min(await this.#calculateRetryDelay(error), maxSafeTimeout);\n\t\tconst delayOptions = {signal: this.#userProvidedAbortSignal};\n\n\t\tconst remainingTimeout = this.#getRemainingTotalTimeout();\n\t\tif (remainingTimeout !== undefined) {\n\t\t\tif (remainingTimeout <= 0) {\n\t\t\t\tthrow new TimeoutError(this.request);\n\t\t\t}\n\n\t\t\t// If waiting would consume all remaining budget, time out without starting another request.\n\t\t\tif (retryDelay >= remainingTimeout) {\n\t\t\t\tawait delay(remainingTimeout, delayOptions);\n\t\t\t\tthrow new TimeoutError(this.request);\n\t\t\t}\n\t\t}\n\n\t\t// Only use user-provided signal for delay, not our internal abortController\n\t\tawait delay(retryDelay, delayOptions);\n\n\t\tthis.#throwIfTotalTimeoutExhausted();\n\n\t\t// Apply custom request from forced retry before beforeRetry hooks\n\t\t// Ensure the custom request has the correct managed signal for timeouts and user aborts\n\t\tif (error instanceof ForceRetryError && error.customRequest) {\n\t\t\tconst customRequest = new globalThis.Request(error.customRequest, this.#options.signal ? {signal: this.#options.signal} : undefined);\n\t\t\t// Replacement Requests are authoritative by design. Do not rewrite headers here,\n\t\t\t// even for cross-origin retries. Callers using `ky.retry({request})` explicitly\n\t\t\t// opted into the exact Request they constructed.\n\t\t\tthis.#assignRequest(customRequest);\n\t\t}\n\n\t\tfor (const hook of this.#options.hooks.beforeRetry) {\n\t\t\tlet hookResult: Awaited<ReturnType<typeof hook>>;\n\t\t\ttry {\n\t\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\t\thookResult = await hook({\n\t\t\t\t\trequest: this.request,\n\t\t\t\t\toptions: this.#getNormalizedOptions(),\n\t\t\t\t\terror: error as Error,\n\t\t\t\t\tretryCount: this.#retryCount + 1,\n\t\t\t\t});\n\t\t\t} catch (hookError) {\n\t\t\t\t// Preserve the original request error path (`throw error`) so beforeError hooks can still run.\n\t\t\t\tif (hookError instanceof Error && hookError !== error) {\n\t\t\t\t\tthis.#beforeRetryHookErrors.add(hookError);\n\t\t\t\t}\n\n\t\t\t\tthrow hookError;\n\t\t\t}\n\n\t\t\tif (isRequestInstance(hookResult)) {\n\t\t\t\t// Same contract as `ky.retry({request})`: a Request returned from `beforeRetry`\n\t\t\t\t// is used as-is rather than being sanitized or otherwise rewritten by Ky.\n\t\t\t\tthis.#assignRequest(hookResult);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (isResponseInstance(hookResult)) {\n\t\t\t\tthis.#returnedResponseFromBeforeRetryHook = true;\n\t\t\t\tthis.#retryCount++;\n\t\t\t\treturn hookResult;\n\t\t\t}\n\n\t\t\t// If `stop` is returned from the hook, the retry process is stopped\n\t\t\tif (hookResult === stop) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tthis.#throwIfTotalTimeoutExhausted();\n\n\t\tthis.#retryCount++;\n\t\treturn this.#retry(function_);\n\t}\n\n\t#consumeReturnedResponseFromBeforeRetryHook(): boolean {\n\t\tconst value = this.#returnedResponseFromBeforeRetryHook;\n\t\tthis.#returnedResponseFromBeforeRetryHook = false;\n\t\treturn value;\n\t}\n\n\tasync #fetch(): Promise<Response> {\n\t\t// Reset abortController if it was aborted (happens on timeout retry)\n\t\tif (this.#abortController?.signal.aborted) {\n\t\t\tthis.#abortController = new globalThis.AbortController();\n\t\t\tthis.#options.signal = this.#createManagedSignal();\n\t\t\t// Recreate request with new signal\n\t\t\tthis.request = new globalThis.Request(this.request, {signal: this.#options.signal});\n\t\t}\n\n\t\tconst nonRequestOptions = findUnknownOptions(this.#options);\n\t\tconst retryRequest = this.#options.retry.limit > 0 ? this.request.clone() : undefined;\n\t\tconst request = this.#wrapRequestWithUploadProgress(this.request, this.#options.body ?? undefined);\n\n\t\t// Cloning is done here to prepare in advance for retries.\n\t\t// Skip cloning when retries are disabled - cloning a streaming body calls ReadableStream#tee()\n\t\t// which buffers the entire stream in memory, causing excessive memory usage for large uploads.\n\t\tthis.#originalRequest = request;\n\t\tif (retryRequest) {\n\t\t\tthis.request = retryRequest;\n\t\t}\n\n\t\ttry {\n\t\t\tconst remainingTotal = this.#getRemainingTotalTimeout();\n\t\t\tif (remainingTotal !== undefined && remainingTotal <= 0) {\n\t\t\t\tthrow new TimeoutError(this.request);\n\t\t\t}\n\n\t\t\tconst effectiveTimeout: number | undefined = this.#options.timeout === false\n\t\t\t\t? remainingTotal\n\t\t\t\t: (remainingTotal === undefined\n\t\t\t\t\t? this.#options.timeout\n\t\t\t\t\t: Math.min(this.#options.timeout, remainingTotal));\n\n\t\t\tconst response = effectiveTimeout === undefined\n\t\t\t\t? await this.#options.fetch(request, nonRequestOptions)\n\t\t\t\t: await timeout(request, nonRequestOptions, this.#abortController, {\n\t\t\t\t\ttimeout: effectiveTimeout,\n\t\t\t\t\tfetch: this.#options.fetch,\n\t\t\t\t});\n\n\t\t\treturn this.#setResponseRequest(response, request);\n\t\t} catch (error) {\n\t\t\tif (isRawNetworkError(error)) {\n\t\t\t\tthrow new NetworkError(this.request, {cause: error as Error});\n\t\t\t}\n\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\t#getRemainingTotalTimeout(): number | undefined {\n\t\tif (this.#startTime === undefined) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst elapsed = this.#getCurrentTime() - this.#startTime;\n\t\treturn Math.max(0, (this.#options.totalTimeout as number) - elapsed);\n\t}\n\n\t#getCurrentTime(): number {\n\t\treturn globalThis.performance?.now() ?? Date.now();\n\t}\n\n\t#getNormalizedOptions(): NormalizedOptions {\n\t\tif (!this.#cachedNormalizedOptions) {\n\t\t\t// Exclude Ky-specific options that are not part of `RequestInit`.\n\t\t\tconst {\n\t\t\t\thooks,\n\t\t\t\tjson,\n\t\t\t\tparseJson,\n\t\t\t\tstringifyJson,\n\t\t\t\tsearchParams,\n\t\t\t\ttimeout,\n\t\t\t\ttotalTimeout,\n\t\t\t\tthrowHttpErrors,\n\t\t\t\tfetch,\n\t\t\t\t...normalizedOptions\n\t\t\t} = this.#options;\n\n\t\t\tthis.#cachedNormalizedOptions = Object.freeze(normalizedOptions) as NormalizedOptions;\n\t\t}\n\n\t\treturn this.#cachedNormalizedOptions;\n\t}\n\n\t#assignRequest(request: Request): void {\n\t\tthis.#cachedNormalizedOptions = undefined;\n\t\tthis.request = request;\n\t}\n\n\t#getResponseRequest(response: Response): Request {\n\t\treturn this.#responseRequests.get(response) ?? this.request;\n\t}\n\n\t#setResponseRequest(response: Response, request: Request): Response {\n\t\tthis.#responseRequests.set(response, request);\n\t\treturn response;\n\t}\n\n\t#wrapRequestWithUploadProgress(request: Request, originalBody?: BodyInit): Request {\n\t\tif (!this.#options.onUploadProgress || !request.body || !supportsRequestStreams) {\n\t\t\treturn request;\n\t\t}\n\n\t\treturn streamRequest(request, this.#options.onUploadProgress, originalBody ?? this.#options.body ?? undefined);\n\t}\n}\n", "/*! MIT License © Sindre Sorhus */\n\nimport {Ky} from './core/Ky.js';\nimport {requestMethods, stop, retry} from './core/constants.js';\nimport type {KyInstance} from './types/ky.js';\nimport type {Input, Options} from './types/options.js';\nimport {validateAndMerge} from './utils/merge.js';\nimport {type Mutable} from './utils/types.js';\n\nconst createInstance = (defaults?: Partial<Options>): KyInstance => {\n\t// eslint-disable-next-line @typescript-eslint/promise-function-async\n\tconst ky: Partial<Mutable<KyInstance>> = (input: Input, options?: Options) => Ky.create(input, validateAndMerge(defaults, options));\n\n\tfor (const method of requestMethods) {\n\t\t// eslint-disable-next-line @typescript-eslint/promise-function-async\n\t\tky[method] = (input: Input, options?: Options) => Ky.create(input, validateAndMerge(defaults, options, {method}));\n\t}\n\n\tky.create = (newDefaults?: Partial<Options>) => createInstance(validateAndMerge(newDefaults));\n\tky.extend = (newDefaults?: Partial<Options> | ((parentDefaults: Partial<Options>) => Partial<Options>)) => {\n\t\tif (typeof newDefaults === 'function') {\n\t\t\tnewDefaults = newDefaults(defaults ?? {});\n\t\t}\n\n\t\treturn createInstance(validateAndMerge(defaults, newDefaults));\n\t};\n\n\tky.stop = stop;\n\tky.retry = retry;\n\n\treturn ky as KyInstance;\n};\n\nconst ky = createInstance();\n\nexport default ky;\n\nexport type {KyInstance} from './types/ky.js';\n\nexport type {\n\tInput,\n\tOptions,\n\tNormalizedOptions,\n\tRetryOptions,\n\tShouldRetryState,\n\tSearchParamsOption,\n\tProgress,\n} from './types/options.js';\n\nexport type {\n\tHooks,\n\tInitHook,\n\tBeforeRequestHook,\n\tBeforeRequestState,\n\tBeforeRetryHook,\n\tBeforeRetryState,\n\tBeforeErrorHook,\n\tBeforeErrorState,\n\tAfterResponseHook,\n\tAfterResponseState,\n} from './types/hooks.js';\n\nexport type {ResponsePromise} from './types/ResponsePromise.js';\nexport type {\n\tStandardSchemaV1,\n\tStandardSchemaV1InferOutput,\n\tStandardSchemaV1Issue,\n} from './types/standard-schema.js';\nexport type {KyRequest} from './types/request.js';\nexport type {KyResponse} from './types/response.js';\nexport {KyError} from './errors/KyError.js';\nexport {HTTPError} from './errors/HTTPError.js';\nexport {SchemaValidationError} from './errors/SchemaValidationError.js';\nexport {NetworkError} from './errors/NetworkError.js';\nexport {TimeoutError} from './errors/TimeoutError.js';\nexport {ForceRetryError} from './errors/ForceRetryError.js';\nexport {\n\tisKyError,\n\tisHTTPError,\n\tisNetworkError,\n\tisTimeoutError,\n\tisForceRetryError,\n} from './utils/type-guards.js';\nexport {replaceOption} from './utils/merge.js';\n\n// Intentionally not exporting this for now as it's just an implementation detail and we don't want to commit to a certain API yet at least.\n// export {NonError} from './errors/NonError.js';\n", "import ky from 'ky';\n\nimport { app } from './globals';\nimport type {\n AccountSettings,\n Bookmark,\n Note,\n TagCloud,\n TagCloudMode,\n TagSuggestionRequest,\n TagSuggestionResponse,\n} from './types';\n\nexport type StarAction = 'star' | 'unstar';\n\nfunction withCsrf(headers?: HeadersInit): HeadersInit {\n const a = app();\n const h = new Headers(headers);\n h.set(a.csrfHeaderName, a.csrfToken);\n return h;\n}\n\nfunction urlFor(path: string): string {\n // Preserve PureScript semantics: simple string concatenation.\n return `${app().homeR}${path}`;\n}\n\nfunction toRelativePath(urlOrPath: string): string {\n try {\n const u = new URL(urlOrPath, window.location.origin);\n const rel = `${u.pathname}${u.search}${u.hash}`;\n return rel.startsWith('/') ? rel.slice(1) : rel;\n } catch {\n return urlOrPath.replace(/^\\/+/, '');\n }\n}\n\nasync function request(\n method: string,\n path: string,\n opts: { headers?: HeadersInit; body?: BodyInit | null } = {},\n) {\n const res = await ky(urlFor(path), {\n method,\n headers: withCsrf(opts.headers),\n body: opts.body ?? undefined,\n throwHttpErrors: false,\n });\n return res;\n}\n\nexport async function toggleStar(bid: number, action: StarAction): Promise<void> {\n await request('POST', `bm/${bid.toString()}/${action}`, {\n headers: { 'content-type': 'application/x-www-form-urlencoded' },\n });\n}\n\nexport async function destroy(bid: number): Promise<void> {\n await request('DELETE', `bm/${bid.toString()}`, {\n headers: { 'content-type': 'application/x-www-form-urlencoded' },\n });\n}\n\nexport async function markRead(bid: number): Promise<void> {\n await request('POST', `bm/${bid.toString()}/read`, {\n headers: { 'content-type': 'application/x-www-form-urlencoded' },\n });\n}\n\nexport async function archiveBookmark(bid: number): Promise<void> {\n await request('POST', `bm/${bid.toString()}/archive`, {\n headers: { 'content-type': 'application/x-www-form-urlencoded' },\n });\n}\n\nexport async function editBookmark(\n bm: Bookmark,\n): Promise<{ ok: boolean; status: number; bodyText: string }> {\n const res = await request('POST', 'api/add', {\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify(bm),\n });\n return { ok: res.ok, status: res.status, bodyText: await res.text() };\n}\n\nexport async function editNote(\n note: Note,\n): Promise<{ ok: boolean; status: number; bodyText: string }> {\n const res = await request('POST', 'api/note/add', {\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify(note),\n });\n return { ok: res.ok, status: res.status, bodyText: await res.text() };\n}\n\nexport async function lookupTitle(bm: Bookmark): Promise<string | null> {\n const res = await request('POST', 'api/lookuptitle', {\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify(bm),\n });\n if (res.status === 200) return await res.text();\n return null;\n}\n\nexport async function getTagCloud(mode: TagCloudMode): Promise<TagCloud | null> {\n const res = await request('POST', 'api/tagcloud', {\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify(mode),\n });\n if (!res.ok) return null;\n try {\n return await res.json();\n } catch {\n return null;\n }\n}\n\nexport async function updateTagCloudMode(mode: TagCloudMode): Promise<void> {\n await request('POST', 'api/tagcloudmode', {\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify(mode),\n });\n}\n\nexport async function fetchTagSuggestions(\n data: TagSuggestionRequest,\n): Promise<TagSuggestionResponse | null> {\n const res = await request('POST', 'api/tagSuggestions', {\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify(data),\n });\n if (!res.ok) return null;\n try {\n return await res.json<TagSuggestionResponse>();\n } catch {\n return null;\n }\n}\n\nexport async function destroyNote(nid: number): Promise<void> {\n await request('DELETE', `api/note/${nid.toString()}`, {\n headers: { 'content-type': 'application/x-www-form-urlencoded' },\n });\n}\n\nexport async function editAccountSettings(us: AccountSettings): Promise<void> {\n await request('POST', 'api/accountSettings', {\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify(us),\n });\n}\n\nexport async function logout(): Promise<void> {\n const a = app();\n await request('POST', toRelativePath(a.authRlogoutR));\n window.location.reload();\n}\n", "import React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { editAccountSettings } from '../api';\nimport type { AccountSettings } from '../types';\n\n/** Displays and edits the current user's account settings. */\nexport function AccountSettingsView({ initial }: { initial: AccountSettings }) {\n const { t } = useTranslation();\n const [us, setUs] = React.useState<AccountSettings>(initial);\n const archiveDisabled = !us.archiveBackendEnabled;\n const archiveDisabledTitle = archiveDisabled ? t('settings.archivingDisabled') : undefined;\n\n async function update(next: AccountSettings) {\n setUs(next);\n await editAccountSettings(next);\n }\n\n return (\n <div className=\"settings-form\">\n <div className=\"fw7 mb2\">{t('settings.accountTitle')}</div>\n\n <div className=\"flex items-center mb2\">\n <label htmlFor=\"language\" className=\"lh-copy mr2\">\n {t('settings.language')}\n </label>\n <select\n id=\"language\"\n name=\"language\"\n className=\"pointer\"\n value={us.language ?? ''}\n onChange={(e) => {\n const next = { ...us, language: e.target.value === '' ? null : e.target.value };\n setUs(next);\n void editAccountSettings(next).then(() => {\n window.location.reload();\n });\n }}\n >\n <option value=\"\">{t('settings.serverDefault')}</option>\n <option value=\"en\">English</option>\n <option value=\"de\">Deutsch</option>\n <option value=\"es\">Espa\u00F1ol</option>\n <option value=\"fr\">Fran\u00E7ais</option>\n <option value=\"it\">Italiano</option>\n <option value=\"ja\">\u65E5\u672C\u8A9E</option>\n <option value=\"ko\">\uD55C\uAD6D\uC5B4</option>\n <option value=\"pl\">Polski</option>\n <option value=\"pt-BR\">Portugu\u00EAs (Brasil)</option>\n <option value=\"ru\">\u0420\u0443\u0441\u0441\u043A\u0438\u0439</option>\n <option value=\"tr\">T\u00FCrk\u00E7e</option>\n <option value=\"uk\">\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430</option>\n <option value=\"zh-Hans\">\u7B80\u4F53\u4E2D\u6587</option>\n <option value=\"zh-Hant\">\u7E41\u9AD4\u4E2D\u6587</option>\n </select>\n </div>\n\n <div\n className={`flex items-center mb2${archiveDisabled ? ' o-50' : ''}`}\n title={archiveDisabledTitle}\n >\n <input\n type=\"checkbox\"\n className={`mr2${archiveDisabled ? '' : ' pointer'}`}\n id=\"archiveDefault\"\n name=\"archiveDefault\"\n checked={us.archiveDefault}\n disabled={archiveDisabled}\n title={archiveDisabledTitle}\n onChange={(e) => void update({ ...us, archiveDefault: e.target.checked })}\n />\n <label\n htmlFor=\"archiveDefault\"\n className={`lh-copy${archiveDisabled ? ' thm-text-tertiary' : ''}`}\n title={archiveDisabledTitle}\n >\n {t('settings.archiveDefault')}\n </label>\n </div>\n\n <div className=\"flex items-center mb2\">\n <input\n type=\"checkbox\"\n className=\"pointer mr2\"\n id=\"privateDefault\"\n name=\"privateDefault\"\n checked={us.privateDefault}\n onChange={(e) => void update({ ...us, privateDefault: e.target.checked })}\n />\n <label htmlFor=\"privateDefault\" className=\"lh-copy\">\n {t('settings.privateDefault')}\n </label>\n </div>\n\n <div className=\"flex items-center mb2\">\n <input\n type=\"checkbox\"\n className=\"pointer mr2\"\n id=\"suggestTags\"\n name=\"suggestTags\"\n checked={us.suggestTags}\n onChange={(e) => void update({ ...us, suggestTags: e.target.checked })}\n />\n <label htmlFor=\"suggestTags\" className=\"lh-copy\">\n {t('settings.suggestTags')}\n </label>\n </div>\n\n <div className=\"flex items-center mb2\">\n <input\n type=\"checkbox\"\n className=\"pointer mr2\"\n id=\"privacyLock\"\n name=\"privacyLock\"\n checked={us.privacyLock}\n onChange={(e) => void update({ ...us, privacyLock: e.target.checked })}\n />\n <label htmlFor=\"privacyLock\" className=\"lh-copy\">\n {t('settings.privacyLock')}\n </label>\n </div>\n </div>\n );\n}\n", "import React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { destroy, editBookmark, lookupTitle } from '../api';\nimport { app, closeWindow, fromNow, shdatetime } from '../globals';\nimport { useTagSuggestions } from '../hooks/useTagSuggestions';\nimport type { Bookmark } from '../types';\nimport { curQuerystring, lookupQueryStringValue, normalizeTags } from '../util';\nimport { TagSuggestionsDropdown } from './TagSuggestionsDropdown';\n\n/** Form for adding or editing a single bookmark, used in the popup window. */\nexport function AddForm({ initial }: { initial: Bookmark }) {\n const { t } = useTranslation();\n const a = app();\n const [bm, setBm] = React.useState<Bookmark>(initial);\n const [editBm, setEditBm] = React.useState<Bookmark>(initial);\n const [deleteAsk, setDeleteAsk] = React.useState(false);\n const [loading, setLoading] = React.useState(false);\n const [destroyed, setDestroyed] = React.useState(false);\n const [apiError, setApiError] = React.useState<string | null>(null);\n const suggestEnabled = a.dat.suggestTags === true;\n const fromNowVal = React.useMemo(() => fromNow(a.lang, bm.time), [a.lang, bm.time]);\n\n const {\n tagInputRef,\n suggestionState,\n closeSuggestions,\n onTagsChange,\n onTagsKeyDown,\n onTagsSelect,\n onSuggestionHover,\n onSuggestionPick,\n } = useTagSuggestions({\n enabled: suggestEnabled,\n tags: editBm.tags,\n maxSuggestions: 4,\n onTagsUpdate: (tags) => {\n setEditBm((x) => ({ ...x, tags }));\n },\n });\n\n async function onFetchTitle() {\n setLoading(true);\n try {\n const title = await lookupTitle(editBm);\n if (title != null) setEditBm((x) => ({ ...x, title }));\n } finally {\n setLoading(false);\n }\n }\n\n async function onDestroy() {\n await destroy(bm.bid);\n setDestroyed(true);\n }\n\n const onSubmit = async (e: React.SyntheticEvent<HTMLFormElement, SubmitEvent>): Promise<void> => {\n e.preventDefault();\n setApiError(null);\n const editBm2 = { ...editBm, tags: normalizeTags(editBm.tags) };\n\n const res = await editBookmark(editBm2);\n if (res.ok && res.status >= 200 && res.status < 300) {\n setBm(editBm2);\n\n const qs = curQuerystring();\n const next = lookupQueryStringValue(qs, 'next');\n const ref = document.referrer;\n const org = window.location.origin;\n\n if (next === 'closeWindow') closeWindow(window);\n else if (next === 'back') {\n if (ref.startsWith(org)) window.location.href = ref;\n else window.location.href = org;\n } else {\n closeWindow(window);\n }\n } else {\n setApiError(res.bodyText);\n }\n };\n\n if (destroyed) return <p className=\"thm-text-killed\">{t('addForm.killed')}</p>;\n\n return (\n <form\n onSubmit={(e) => {\n void onSubmit(e);\n }}\n >\n <table className=\"w-100\">\n <tbody>\n <tr>\n <td className=\"w1\" />\n <td>\n {bm.bid > 0 ? (\n <div className=\"alert\">\n {t('addForm.previouslySaved')} \n <span\n className=\"link f7 dib thm-text-tertiary thm-hover-link-color pr3\"\n data-time={bm.time}\n title={shdatetime(a.lang, bm.time)}\n >\n {fromNowVal}\n </span>\n <div className=\"edit_links dib ml1\">\n <div className=\"delete_link di\">\n <button\n type=\"button\"\n onClick={() => {\n setDeleteAsk(true);\n }}\n className=\"delete\"\n hidden={deleteAsk}\n >\n {t('delete')}\n </button>\n <span className=\"confirm thm-text-error\" hidden={!deleteAsk}>\n <button\n type=\"button\"\n onClick={() => {\n setDeleteAsk(false);\n }}\n >\n {t('cancel')} / \n </button>\n <button\n type=\"button\"\n onClick={() => void onDestroy()}\n className=\"thm-text-error\"\n >\n {t('destroy')}\n </button>\n </span>\n </div>\n </div>\n </div>\n ) : null}\n {apiError ? <div className=\"alert alert-err\">{apiError}</div> : null}\n </td>\n </tr>\n\n <tr>\n <td>\n <label htmlFor=\"url\">{t('addForm.url')}</label>\n </td>\n <td>\n <input\n type=\"url\"\n id=\"url\"\n className=\"w-100 mv1\"\n required\n name=\"url\"\n autoFocus={bm.url === ''}\n value={editBm.url}\n onChange={(e) => {\n setEditBm((x) => ({ ...x, url: e.target.value }));\n }}\n />\n </td>\n </tr>\n\n <tr>\n <td>\n <label htmlFor=\"title\">{t('bmark.title')}</label>\n </td>\n <td className=\"flex\">\n <input\n type=\"text\"\n id=\"title\"\n className=\"w-100 mv1 flex-auto\"\n name=\"title\"\n value={editBm.title}\n onChange={(e) => {\n setEditBm((x) => ({ ...x, title: e.target.value }));\n }}\n />\n <button\n disabled={loading}\n type=\"button\"\n onClick={() => void onFetchTitle()}\n className={`ml2 input-reset ba thm-border-primary pointer f6 di dim pa1 ma1 mr0${loading ? ' thm-bg-disabled' : ''}`}\n >\n {t('fetch')}\n </button>\n </td>\n </tr>\n\n <tr>\n <td>\n <label htmlFor=\"description\">{t('bmark.description')}</label>\n </td>\n <td>\n <textarea\n className=\"w-100 mt1 thm-text-secondary\"\n id=\"description\"\n name=\"description\"\n rows={4}\n value={editBm.description}\n onChange={(e) => {\n setEditBm((x) => ({ ...x, description: e.target.value }));\n }}\n />\n </td>\n </tr>\n\n <tr>\n <td>\n <label htmlFor=\"tags\">{t('bmark.tags')}</label>\n </td>\n <td>\n <div className=\"relative\">\n <input\n ref={tagInputRef}\n type=\"text\"\n id=\"tags\"\n className=\"w-100 mv1\"\n name=\"tags\"\n autoComplete=\"off\"\n autoCapitalize=\"off\"\n autoFocus={bm.url !== ''}\n value={editBm.tags}\n onChange={onTagsChange}\n onKeyDown={onTagsKeyDown}\n onClick={onTagsSelect}\n onSelect={onTagsSelect}\n onBlur={() => {\n window.setTimeout(() => {\n closeSuggestions();\n }, 0);\n }}\n />\n {suggestionState != null ? (\n <TagSuggestionsDropdown\n suggestionState={suggestionState}\n onHover={onSuggestionHover}\n onPick={onSuggestionPick}\n />\n ) : null}\n </div>\n </td>\n </tr>\n\n <tr>\n <td>\n <label htmlFor=\"private\">{t('bmark.private')}</label>\n </td>\n <td>\n <div className=\"mr4 dib\">\n <input\n type=\"checkbox\"\n id=\"private\"\n className=\"private pointer\"\n name=\"private\"\n checked={editBm.private}\n onChange={(e) => {\n setEditBm((x) => ({\n ...x,\n private: e.target.checked,\n ...(a.dat.archiveBackendEnabled && editBm.archiveRequested && e.target.checked\n ? { archiveRequested: false }\n : {}),\n }));\n }}\n />\n </div>\n {!(bm.bid > 0) && a.dat.archiveBackendEnabled ? (\n <div\n className={`dib ${editBm.private ? 'o-50' : ''}`}\n title={editBm.private ? t('addForm.archiveUnavailable') : undefined}\n >\n <label className=\"mr2 di\" htmlFor=\"archiveRequested\">\n {t('archive')}\n </label>\n <input\n type=\"checkbox\"\n id=\"archiveRequested\"\n className=\"archive pointer ml2\"\n name=\"archiveRequested\"\n disabled={editBm.private}\n checked={editBm.archiveRequested ?? false}\n onChange={(e) => {\n setEditBm((x) => ({ ...x, archiveRequested: e.target.checked }));\n }}\n />\n </div>\n ) : null}\n </td>\n </tr>\n\n <tr>\n <td>\n <label htmlFor=\"toread\">{t('addForm.readLater')}</label>\n </td>\n <td>\n <input\n type=\"checkbox\"\n id=\"toread\"\n className=\"toread pointer\"\n name=\"toread\"\n checked={editBm.toread}\n onChange={(e) => {\n setEditBm((x) => ({ ...x, toread: e.target.checked }));\n }}\n />\n </td>\n </tr>\n\n <tr>\n <td />\n <td>\n <input\n type=\"submit\"\n className=\"ph3 pv2 input-reset thm-text-strong ba thm-border-primary bg-transparent pointer f6 dib mt1 dim\"\n value={bm.bid > 0 ? t('addForm.update') : t('addForm.add')}\n />\n </td>\n </tr>\n </tbody>\n </table>\n </form>\n );\n}\n", "import React from 'react';\n\nimport { fetchTagSuggestions } from '../api';\nimport type { TagSuggestionRequest, TSuggestion } from '../types';\n\nexport type SuggestionState = {\n items: TSuggestion[];\n selectedIndex: number;\n tokenRange: TagTokenRange;\n anchorLeft: number;\n anchorTop: number;\n};\n\ntype TagTokenRange = {\n token: string;\n start: number;\n end: number;\n};\n\nconst TAG_SUGGESTION_DEBOUNCE_MS = 180;\n\nexport function useTagSuggestions({\n enabled,\n tags,\n onTagsUpdate,\n maxSuggestions = 10,\n}: {\n enabled: boolean;\n tags: string;\n onTagsUpdate: (next: string) => void;\n maxSuggestions?: number;\n}) {\n const [suggestionState, setSuggestionState] = React.useState<SuggestionState | null>(null);\n const tagSuggestionRequestId = React.useRef(0);\n const tagSuggestionDebounceRef = React.useRef<number | null>(null);\n const tagInputRef = React.useRef<HTMLInputElement | null>(null);\n\n const cancelPendingSuggestions = React.useCallback(() => {\n if (tagSuggestionDebounceRef.current != null) {\n window.clearTimeout(tagSuggestionDebounceRef.current);\n tagSuggestionDebounceRef.current = null;\n }\n tagSuggestionRequestId.current += 1;\n }, []);\n\n const closeSuggestions = React.useCallback(() => {\n cancelPendingSuggestions();\n setSuggestionState(null);\n }, [cancelPendingSuggestions]);\n\n React.useEffect(() => {\n return () => {\n cancelPendingSuggestions();\n };\n }, [cancelPendingSuggestions]);\n\n React.useEffect(() => {\n if (!enabled) closeSuggestions();\n }, [enabled, closeSuggestions]);\n\n const onTagsChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const { value, selectionStart, selectionEnd } = e.target;\n\n onTagsUpdate(value);\n\n if (!enabled) {\n closeSuggestions();\n return;\n }\n\n if (selectionStart == null || selectionEnd == null || selectionStart !== selectionEnd) {\n closeSuggestions();\n return;\n }\n\n if (isWhitespaceOnlyEdit(tags, value)) {\n closeSuggestions();\n return;\n }\n\n const activeToken = getActiveTagToken(value, selectionStart);\n if (activeToken == null || activeToken.token.length < 2) {\n closeSuggestions();\n return;\n }\n\n const normalizedTagTerms = getNormalizedTagTerms(value);\n const activeTokenNormalized = activeToken.token.toLowerCase();\n const activeTokenOccurrences = normalizedTagTerms.filter(\n (tag) => tag === activeTokenNormalized,\n ).length;\n const shouldExcludeActiveToken = activeTokenOccurrences > 1;\n const payload: TagSuggestionRequest = {\n query: activeToken.token,\n currentTags: Array.from(\n new Set(\n normalizedTagTerms.filter(\n (tag) => shouldExcludeActiveToken || tag !== activeTokenNormalized,\n ),\n ),\n ),\n };\n\n cancelPendingSuggestions();\n tagSuggestionDebounceRef.current = window.setTimeout(() => {\n const requestId = tagSuggestionRequestId.current + 1;\n tagSuggestionRequestId.current = requestId;\n\n void (async () => {\n const response = await fetchTagSuggestions(payload);\n\n if (\n requestId !== tagSuggestionRequestId.current ||\n response == null ||\n tagInputRef.current == null\n ) {\n return;\n }\n\n const items = response.suggestions.slice(0, maxSuggestions);\n if (items.length === 0) {\n closeSuggestions();\n return;\n }\n\n const anchor = measureCaretPosition(tagInputRef.current, selectionStart);\n\n setSuggestionState({\n items,\n selectedIndex: 0,\n tokenRange: activeToken,\n anchorLeft: anchor.left,\n anchorTop: anchor.top,\n });\n })();\n }, TAG_SUGGESTION_DEBOUNCE_MS);\n },\n [cancelPendingSuggestions, closeSuggestions, enabled, maxSuggestions, onTagsUpdate],\n );\n\n const applySuggestion = React.useCallback(\n (term: string) => {\n const input = tagInputRef.current;\n if (input == null || suggestionState == null) return;\n\n const next = replaceTokenAtRange(tags, suggestionState.tokenRange, term);\n onTagsUpdate(next.value);\n closeSuggestions();\n\n requestAnimationFrame(() => {\n input.focus();\n input.setSelectionRange(next.caret, next.caret);\n });\n },\n [closeSuggestions, onTagsUpdate, suggestionState, tags],\n );\n\n const onTagsKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Escape') {\n if (suggestionState != null) {\n e.preventDefault();\n closeSuggestions();\n }\n return;\n }\n\n if (e.key === ' ') {\n closeSuggestions();\n return;\n }\n\n if (suggestionState == null) return;\n\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n setSuggestionState((current) => {\n if (current == null) return current;\n return {\n ...current,\n selectedIndex: (current.selectedIndex + 1) % current.items.length,\n };\n });\n return;\n }\n\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n setSuggestionState((current) => {\n if (current == null) return current;\n return {\n ...current,\n selectedIndex:\n (current.selectedIndex - 1 + current.items.length) % current.items.length,\n };\n });\n return;\n }\n\n if (e.key === 'Enter' || e.key === 'Tab') {\n e.preventDefault();\n const selected = suggestionState.items[suggestionState.selectedIndex];\n applySuggestion(selected.term);\n }\n },\n [applySuggestion, closeSuggestions, suggestionState],\n );\n\n const onTagsSelect = React.useCallback(\n (e: React.SyntheticEvent<HTMLInputElement>) => {\n if (suggestionState == null) return;\n\n const input = e.currentTarget;\n const { selectionStart, selectionEnd, value } = input;\n if (selectionStart == null || selectionEnd == null || selectionStart !== selectionEnd) {\n closeSuggestions();\n return;\n }\n\n const activeToken = getActiveTagToken(value, selectionStart);\n if (activeToken == null) {\n closeSuggestions();\n return;\n }\n\n if (activeToken.start !== suggestionState.tokenRange.start) {\n closeSuggestions();\n }\n },\n [closeSuggestions, suggestionState],\n );\n\n const onSuggestionHover = React.useCallback((index: number) => {\n setSuggestionState((current) => {\n if (current == null) return current;\n return { ...current, selectedIndex: index };\n });\n }, []);\n\n return {\n tagInputRef,\n suggestionState,\n closeSuggestions,\n onTagsChange,\n onTagsKeyDown,\n onTagsSelect,\n onSuggestionHover,\n onSuggestionPick: applySuggestion,\n };\n}\n\nfunction getActiveTagToken(value: string, caret: number): TagTokenRange | null {\n const boundedCaret = Math.max(0, Math.min(caret, value.length));\n\n let start = boundedCaret;\n while (start > 0 && value[start - 1] !== ' ') {\n start -= 1;\n }\n\n let end = boundedCaret;\n while (end < value.length && value[end] !== ' ') {\n end += 1;\n }\n\n const token = value.slice(start, end).trim();\n return token === '' ? null : { token, start, end };\n}\n\nfunction measureCaretPosition(\n input: HTMLInputElement,\n caret: number,\n): { left: number; top: number } {\n const style = window.getComputedStyle(input);\n const mirror = document.createElement('div');\n mirror.style.position = 'absolute';\n mirror.style.visibility = 'hidden';\n mirror.style.whiteSpace = 'pre';\n mirror.style.top = '0';\n mirror.style.left = '0';\n mirror.style.font = style.font;\n mirror.style.fontKerning = style.fontKerning;\n mirror.style.fontFeatureSettings = style.fontFeatureSettings;\n mirror.style.fontVariantLigatures = style.fontVariantLigatures;\n mirror.style.letterSpacing = style.letterSpacing;\n mirror.style.textTransform = style.textTransform;\n mirror.style.textIndent = style.textIndent;\n mirror.style.boxSizing = style.boxSizing;\n mirror.style.padding = style.padding;\n mirror.style.border = style.border;\n mirror.style.width = `${String(input.clientWidth)}px`;\n\n const prefix = document.createElement('span');\n prefix.textContent = input.value.slice(0, caret);\n mirror.appendChild(prefix);\n\n const marker = document.createElement('span');\n marker.textContent = '\\u200b';\n mirror.appendChild(marker);\n\n document.body.appendChild(mirror);\n const left = marker.offsetLeft - input.scrollLeft + 1;\n const top = marker.offsetTop - input.scrollTop + input.offsetHeight + 4;\n document.body.removeChild(mirror);\n\n return { left, top };\n}\n\nfunction replaceTokenAtRange(\n value: string,\n range: TagTokenRange,\n replacement: string,\n): { value: string; caret: number } {\n const prefix = value.slice(0, range.start);\n // Consume any existing leading space from the suffix so we always own the\n // separator. This lets us unconditionally append a trailing space and place\n // the caret after it, whether the accepted tag is in the middle or at the end.\n const suffix = value.slice(range.end).replace(/^ /, '');\n const inserted = `${replacement} `;\n return {\n value: `${prefix}${inserted}${suffix}`,\n caret: prefix.length + inserted.length,\n };\n}\n\nfunction isWhitespaceOnlyEdit(previous: string, next: string): boolean {\n if (previous === next) return false;\n\n let start = 0;\n while (start < previous.length && start < next.length && previous[start] === next[start]) {\n start += 1;\n }\n\n let prevEnd = previous.length;\n let nextEnd = next.length;\n while (prevEnd > start && nextEnd > start && previous[prevEnd - 1] === next[nextEnd - 1]) {\n prevEnd -= 1;\n nextEnd -= 1;\n }\n\n const removed = previous.slice(start, prevEnd);\n const added = next.slice(start, nextEnd);\n if (removed === '' && added === '') return false;\n return isSpacesOnly(removed) && isSpacesOnly(added);\n}\n\nfunction isSpacesOnly(value: string): boolean {\n return value === '' || /^ *$/.test(value);\n}\n\nfunction getNormalizedTagTerms(value: string): string[] {\n return value\n .split(' ')\n .map((tag) => tag.trim().toLowerCase())\n .filter((tag) => tag !== '');\n}\n", "import React from 'react';\n\nimport type { SuggestionState } from '../hooks/useTagSuggestions';\n\nconst MAX_SUGGESTION_TERM_RENDER_LENGTH = 80;\n\nexport function TagSuggestionsDropdown({\n suggestionState,\n onHover,\n onPick,\n}: {\n suggestionState: SuggestionState;\n onHover: (index: number) => void;\n onPick: (term: string) => void;\n}) {\n return (\n <div\n className=\"absolute z-5 thm-bg-secondary thm-text-primary ba thm-border-default br2 shadow-4 overflow-hidden f6\"\n style={{\n left: suggestionState.anchorLeft,\n top: suggestionState.anchorTop,\n width: 'max-content',\n maxWidth: '22rem',\n }}\n >\n {suggestionState.items.map((item, index) => {\n const selected = index === suggestionState.selectedIndex;\n const displayTerm = truncateSuggestionTerm(item.term);\n return (\n <button\n key={`${item.term}-${item.count.toString()}`}\n type=\"button\"\n className={`flex items-center justify-between w-100 bn bg-transparent tl ph2 pv1 pointer nowrap thm-text-primary thm-hover-link-color ${selected ? 'thm-bg-selected thm-text-selected' : ''}`}\n onMouseEnter={() => {\n onHover(index);\n }}\n onMouseDown={(e) => {\n e.preventDefault();\n }}\n onClick={() => {\n onPick(item.term);\n }}\n title={item.term}\n >\n <span className=\"mr2\">\n {renderHighlightedSuggestion(displayTerm, suggestionState.tokenRange.token)}\n </span>\n <span className=\"thm-text-tertiary f6 tr\" style={{ minWidth: '3ch' }}>\n {item.count}\n </span>\n </button>\n );\n })}\n </div>\n );\n}\n\nfunction renderHighlightedSuggestion(term: string, query: string): React.ReactNode {\n const lowerTerm = term.toLocaleLowerCase();\n const lowerQuery = query.toLocaleLowerCase();\n const idx = lowerTerm.indexOf(lowerQuery);\n if (idx < 0) return term;\n\n const before = term.slice(0, idx);\n const match = term.slice(idx, idx + query.length);\n const after = term.slice(idx + query.length);\n\n return (\n <>\n {before}\n <strong>{match}</strong>\n {after}\n </>\n );\n}\n\nfunction truncateSuggestionTerm(term: string): string {\n if (term.length <= MAX_SUGGESTION_TERM_RENDER_LENGTH) return term;\n return `${term.slice(0, MAX_SUGGESTION_TERM_RENDER_LENGTH)}...`;\n}\n", "import React from 'react';\n\nimport { useBookmarksStore } from '../stores/bookmarksStore';\nimport type { Bookmark } from '../types';\nimport { BMark } from './BMark';\n\n/** Renders the full list of bookmarks, delegating each item to BMark. */\nexport function BList({ initial }: { initial: Bookmark[] }) {\n const [hasHydrated, setHasHydrated] = React.useState(false);\n const bmarks = useBookmarksStore((s) => s.bmarks);\n const setAll = useBookmarksStore((s) => s.setAll);\n const removeById = useBookmarksStore((s) => s.removeById);\n const upsert = useBookmarksStore((s) => s.upsert);\n\n React.useLayoutEffect(() => {\n setAll(initial);\n setHasHydrated(true);\n }, [initial, setAll]);\n\n const visibleBmarks = hasHydrated ? bmarks : initial;\n\n return (\n <div>\n {visibleBmarks.map((b) => (\n <BMark\n key={b.bid}\n initial={b}\n onNotifyRemove={() => {\n removeById(b.bid);\n }}\n onUpdated={(bm) => {\n upsert(bm);\n }}\n />\n ))}\n </div>\n );\n}\n", "const createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const getInitialState = () => initialState;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const api = { setState, getState, getInitialState, subscribe };\n const initialState = state = createState(setState, getState, api);\n return api;\n};\nconst createStore = ((createState) => createState ? createStoreImpl(createState) : createStoreImpl);\n\nexport { createStore };\n", "import React from 'react';\nimport { createStore } from 'zustand/vanilla';\n\nconst identity = (arg) => arg;\nfunction useStore(api, selector = identity) {\n const slice = React.useSyncExternalStore(\n api.subscribe,\n React.useCallback(() => selector(api.getState()), [api, selector]),\n React.useCallback(() => selector(api.getInitialState()), [api, selector])\n );\n React.useDebugValue(slice);\n return slice;\n}\nconst createImpl = (createState) => {\n const api = createStore(createState);\n const useBoundStore = (selector) => useStore(api, selector);\n Object.assign(useBoundStore, api);\n return useBoundStore;\n};\nconst create = ((createState) => createState ? createImpl(createState) : createImpl);\n\nexport { create, useStore };\n", "import { create } from 'zustand';\n\nimport type { Bookmark } from '../types';\n\nexport type BookmarksState = {\n bmarks: Bookmark[];\n setAll: (bmarks: Bookmark[]) => void;\n removeById: (bid: number) => void;\n upsert: (bm: Bookmark) => void;\n};\n\nexport const useBookmarksStore = create<BookmarksState>((set) => ({\n bmarks: [],\n setAll: (bmarks) => {\n set({ bmarks });\n },\n removeById: (bid) => {\n set((s) => ({ bmarks: s.bmarks.filter((b) => b.bid !== bid) }));\n },\n upsert: (bm) => {\n set((s) => ({ bmarks: s.bmarks.map((b) => (b.bid === bm.bid ? bm : b)) }));\n },\n}));\n", "import React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { archiveBookmark, destroy, editBookmark, lookupTitle, markRead, toggleStar } from '../api';\nimport { app, setFocus, shdatetime, toLocaleDateString } from '../globals';\nimport { useTagSuggestions } from '../hooks/useTagSuggestions';\nimport type { Bookmark } from '../types';\nimport { encodeTag, fromNullableStr, normalizeTags } from '../util';\nimport { Markdown } from './Markdown';\nimport { TagSuggestionsDropdown } from './TagSuggestionsDropdown';\n\n/** Displays a single bookmark with inline editing, starring, and deletion. */\nexport function BMark({\n initial,\n onNotifyRemove,\n onUpdated,\n}: {\n initial: Bookmark;\n onNotifyRemove: () => void;\n onUpdated: (bm: Bookmark) => void;\n}) {\n const { t } = useTranslation();\n const a = app();\n const [bm, setBm] = React.useState<Bookmark>(initial);\n const [editBm, setEditBm] = React.useState<Bookmark>(initial);\n const [deleteAsk, setDeleteAsk] = React.useState(false);\n const [edit, setEdit] = React.useState(false);\n const [loading, setLoading] = React.useState(false);\n const [archiving, setArchiving] = React.useState(false);\n const [apiError, setApiError] = React.useState<string | null>(null);\n\n const tagInputId = `${bm.bid.toString()}_tags`;\n\n const linkToFilterSingle = `${fromNullableStr(a.userR)}/b:${bm.slug}`;\n const linkToFilterTag = (tag: string) => `${fromNullableStr(a.userR)}/t:${encodeTag(tag)}`;\n const viewInContextTime = (time: Date) => {\n const t = new Date(time);\n const t2 = new Date(t.getTime() + 2);\n return t2.toISOString();\n };\n const linkToViewInContext = `${fromNullableStr(a.userR)}?before=${encodeURIComponent(viewInContextTime(new Date(bm.time)))}`;\n\n const suggestEnabled = a.dat.suggestTags === true;\n\n const {\n tagInputRef,\n suggestionState,\n closeSuggestions,\n onTagsChange,\n onTagsKeyDown,\n onTagsSelect,\n onSuggestionHover,\n onSuggestionPick,\n } = useTagSuggestions({\n enabled: suggestEnabled,\n tags: editBm.tags,\n onTagsUpdate: (tags) => {\n setEditBm((x) => ({ ...x, tags }));\n },\n });\n\n async function onStar(next: boolean) {\n await toggleStar(bm.bid, next ? 'star' : 'unstar');\n const updated = { ...bm, selected: next };\n setBm(updated);\n setEditBm((x) => ({ ...x, selected: next }));\n onUpdated(updated);\n }\n\n async function onDestroy() {\n await destroy(bm.bid);\n onNotifyRemove();\n }\n\n async function onMarkRead() {\n await markRead(bm.bid);\n const updated = { ...bm, toread: false };\n setBm(updated);\n onUpdated(updated);\n }\n\n function startEdit(next: boolean) {\n setEditBm(bm);\n setEdit(next);\n setApiError(null);\n setArchiving(false);\n closeSuggestions();\n if (next) setFocus(tagInputId);\n }\n\n async function onFetchTitle() {\n setLoading(true);\n try {\n const title = await lookupTitle(editBm);\n if (title != null) setEditBm((x) => ({ ...x, title }));\n } finally {\n setLoading(false);\n }\n }\n\n async function onArchive() {\n setArchiving(true);\n await archiveBookmark(bm.bid);\n }\n\n const onSubmit = async (e: React.SyntheticEvent<HTMLFormElement, SubmitEvent>): Promise<void> => {\n e.preventDefault();\n setApiError(null);\n const editBm2 = { ...editBm, tags: normalizeTags(editBm.tags) };\n\n const res = await editBookmark(editBm2);\n if (res.ok && res.status >= 200 && res.status < 300) {\n setBm(editBm2);\n setEdit(false);\n onUpdated(editBm2);\n } else {\n setApiError(res.bodyText);\n }\n };\n\n const archivingDisabled = archiving || editBm.private || bm.url !== editBm.url;\n\n return (\n <div\n id={String(bm.bid)}\n className={`bookmark w-100 mw7 pa1 mb3${bm.private ? ' private' : ''}`}\n >\n {a.dat.isowner ? (\n <div className={`star fl pointer${bm.selected ? ' selected' : ''}`}>\n <button\n className=\"thm-text-border\"\n onClick={() => void onStar(!bm.selected)}\n type=\"button\"\n >\n \u272D\n </button>\n </div>\n ) : null}\n\n {!edit ? (\n <div className=\"display\">\n <a\n href={bm.url}\n target=\"_blank\"\n rel=\"noreferrer\"\n className={`link f5 lh-title${bm.toread ? ' unread' : ''}`}\n >\n {bm.title === '' ? t('noTitle') : bm.title}\n </a>\n <br />\n <a href={bm.url} className=\"link f7 thm-text-tertiary thm-hover-link-color\">\n {bm.url}\n </a>\n {bm.archiveUrl ? (\n <a\n href={bm.archiveUrl}\n className=\"link f7 thm-text-tertiary thm-hover-link-color ml2 thm-text-success\"\n target=\"_blank\"\n rel=\"noreferrer\"\n title={t('bmark.archiveLinkTitle')}\n >\n \u2611\n </a>\n ) : null}\n <br />\n <div className=\"description mt1 thm-text-secondary\">\n <Markdown text={bm.description} />\n </div>\n <div className=\"tags\">\n {bm.tags !== ''\n ? bm.tags.split(' ').map((tag) => (\n <a\n key={tag}\n className={`link tag mr1${tag.slice(0, 1) === '.' ? ' private' : ''}`}\n href={linkToFilterTag(tag)}\n >\n {tag}\n </a>\n ))\n : null}\n </div>\n\n <div>\n <a\n className=\"link f7 di mr5 thm-text-tertiary\"\n href={linkToFilterSingle}\n data-time={bm.time}\n title={shdatetime(a.lang, bm.time)}\n >\n {toLocaleDateString(a.lang, bm.time)}\n </a>\n\n {a.dat.isowner ? (\n <div className=\"edit_links di\">\n <button\n type=\"button\"\n onClick={() => {\n startEdit(true);\n }}\n className=\"edit thm-text-muted thm-hover-link-color\"\n >\n {t('edit')} \n </button>\n <div className=\"delete_link di\">\n <button\n type=\"button\"\n onClick={() => {\n setDeleteAsk(true);\n }}\n className={`delete thm-text-muted thm-hover-link-color${deleteAsk ? ' dn' : ''}`}\n >\n {t('delete')}\n </button>\n <span className={`confirm thm-text-error${!deleteAsk ? ' dn' : ''}`}>\n <button\n type=\"button\"\n onClick={() => {\n setDeleteAsk(false);\n }}\n >\n {t('cancel')} / \n </button>\n <button\n type=\"button\"\n onClick={() => void onDestroy()}\n className=\"thm-text-error\"\n >\n {t('destroy')}\n </button>\n </span>\n </div>\n </div>\n ) : null}\n\n {a.dat.isowner && bm.toread ? (\n <div className=\"read di\">\n \n <button onClick={() => void onMarkRead()} className=\"mark_read\" type=\"button\">\n {t('bmark.markAsRead')}\n </button>\n </div>\n ) : null}\n </div>\n\n {a.dat.filter?.tag == 'FilterSingle' ? (\n <div className=\"mt2\">\n <a className=\"link f7 di mr5\" href={linkToViewInContext}>\n {t('bmark.viewInContext')}\n </a>\n </div>\n ) : null}\n </div>\n ) : (\n <div className=\"edit_bookmark_form pa2 pt0 thm-bg-surface\">\n {apiError ? <div className=\"alert alert-err\">{apiError}</div> : null}\n <form onSubmit={(e) => void onSubmit(e)}>\n <div>{t('bmark.url')}</div>\n <input\n type=\"url\"\n className=\"url w-100 mb2 pt1 edit_form_input\"\n required\n name=\"url\"\n value={editBm.url}\n onChange={(e) => {\n setEditBm((x) => ({ ...x, url: e.target.value }));\n }}\n />\n <div>{t('bmark.title')}</div>\n <div className=\"flex\">\n <input\n type=\"text\"\n className=\"title w-100 mb2 pt1 edit_form_input\"\n name=\"title\"\n value={editBm.title}\n onChange={(e) => {\n setEditBm((x) => ({ ...x, title: e.target.value }));\n }}\n />\n <button\n disabled={loading}\n type=\"button\"\n onClick={() => void onFetchTitle()}\n className={`ml1 pa1 mb2 thm-text-primary ba thm-border-default thm-bg-secondary pointer rdim f7${\n loading ? ' thm-bg-disabled' : ''\n }`}\n >\n {t('fetch')}\n </button>\n </div>\n <div>{t('bmark.description')}</div>\n <textarea\n className=\"description w-100 mb1 pt1 edit_form_input\"\n name=\"description\"\n rows={5}\n value={editBm.description}\n onChange={(e) => {\n setEditBm((x) => ({ ...x, description: e.target.value }));\n }}\n />\n <div id=\"tags_input_box\">\n <div>{t('bmark.tags')}</div>\n <div className=\"relative\">\n <input\n id={tagInputId}\n ref={tagInputRef}\n type=\"text\"\n className=\"tags w-100 mb1 pt1 edit_form_input\"\n name=\"tags\"\n autoComplete=\"off\"\n autoCapitalize=\"off\"\n value={editBm.tags}\n onChange={onTagsChange}\n onKeyDown={onTagsKeyDown}\n onClick={onTagsSelect}\n onSelect={onTagsSelect}\n onBlur={() => {\n window.setTimeout(() => {\n closeSuggestions();\n }, 0);\n }}\n />\n {suggestionState != null ? (\n <TagSuggestionsDropdown\n suggestionState={suggestionState}\n onHover={onSuggestionHover}\n onPick={onSuggestionPick}\n />\n ) : null}\n </div>\n </div>\n <div className=\"edit_form_checkboxes mv3\">\n <input\n type=\"checkbox\"\n className=\"private pointer\"\n id=\"edit_private\"\n name=\"private\"\n checked={editBm.private}\n onChange={(e) => {\n setEditBm((x) => ({ ...x, private: e.target.checked }));\n }}\n />{' '}\n <label htmlFor=\"edit_private\" className=\"mr2\">\n {t('bmark.private')}\n </label>{' '}\n <input\n type=\"checkbox\"\n className=\"toread pointer\"\n id=\"edit_toread\"\n name=\"toread\"\n checked={editBm.toread}\n onChange={(e) => {\n setEditBm((x) => ({ ...x, toread: e.target.checked }));\n }}\n />{' '}\n <label htmlFor=\"edit_toread\">{t('bmark.toread')}</label>\n </div>\n <div className=\"flex justify-between items-center\">\n <div>\n <input\n type=\"submit\"\n className=\"mr1 pv1 ph2 thm-text-primary ba thm-border-default thm-bg-secondary pointer rdim\"\n value={t('save')}\n />{' '}\n <input\n type=\"reset\"\n className=\"pv1 ph2 thm-text-primary ba thm-border-default thm-bg-secondary pointer rdim\"\n value={t('cancel')}\n onClick={() => {\n startEdit(false);\n }}\n />\n </div>\n {a.dat.archiveBackendEnabled ? (\n <button\n type=\"button\"\n disabled={archivingDisabled}\n onClick={() => void onArchive()}\n className={`pv1 ph2 thm-text-primary ba thm-border-default thm-bg-secondary${archiving ? ' thm-bg-disabled' : ''}${archivingDisabled ? ' not-allowed o-20' : ''}`}\n >\n {archiving ? t('archiving') : t('archive')}\n </button>\n ) : null}\n </div>\n </form>\n </div>\n )}\n </div>\n );\n}\n", "const {\n entries,\n setPrototypeOf,\n isFrozen,\n getPrototypeOf,\n getOwnPropertyDescriptor,\n} = Object;\n\nlet { freeze, seal, create } = Object; // eslint-disable-line import/no-mutable-exports\nlet { apply, construct } = typeof Reflect !== 'undefined' && Reflect;\n\nif (!freeze) {\n freeze = function <T>(x: T): T {\n return x;\n };\n}\n\nif (!seal) {\n seal = function <T>(x: T): T {\n return x;\n };\n}\n\nif (!apply) {\n apply = function <T>(\n func: (thisArg: any, ...args: any[]) => T,\n thisArg: any,\n ...args: any[]\n ): T {\n return func.apply(thisArg, args);\n };\n}\n\nif (!construct) {\n construct = function <T>(Func: new (...args: any[]) => T, ...args: any[]): T {\n return new Func(...args);\n };\n}\n\nconst arrayForEach = unapply(Array.prototype.forEach);\nconst arrayIndexOf = unapply(Array.prototype.indexOf);\nconst arrayLastIndexOf = unapply(Array.prototype.lastIndexOf);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst arraySlice = unapply(Array.prototype.slice);\nconst arraySplice = unapply(Array.prototype.splice);\nconst arrayIsArray = Array.isArray;\n\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringToString = unapply(String.prototype.toString);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\n\nconst numberToString = unapply(Number.prototype.toString);\nconst booleanToString = unapply(Boolean.prototype.toString);\nconst bigintToString =\n typeof BigInt === 'undefined' ? null : unapply(BigInt.prototype.toString);\nconst symbolToString =\n typeof Symbol === 'undefined' ? null : unapply(Symbol.prototype.toString);\n\nconst objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\nconst objectToString = unapply(Object.prototype.toString);\n\nconst regExpTest = unapply(RegExp.prototype.test);\n\nconst typeErrorCreate = unconstruct(TypeError);\n\n/**\n * Creates a new function that calls the given function with a specified thisArg and arguments.\n *\n * @param func - The function to be wrapped and called.\n * @returns A new function that calls the given function with a specified thisArg and arguments.\n */\nfunction unapply<T>(\n func: (thisArg: any, ...args: any[]) => T\n): (thisArg: any, ...args: any[]) => T {\n return (thisArg: any, ...args: any[]): T => {\n if (thisArg instanceof RegExp) {\n thisArg.lastIndex = 0;\n }\n\n return apply(func, thisArg, args);\n };\n}\n\n/**\n * Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n *\n * @param func - The constructor function to be wrapped and called.\n * @returns A new function that constructs an instance of the given constructor function with the provided arguments.\n */\nfunction unconstruct<T>(\n Func: new (...args: any[]) => T\n): (...args: any[]) => T {\n return (...args: any[]): T => construct(Func, args);\n}\n\n/**\n * Add properties to a lookup table\n *\n * @param set - The set to which elements will be added.\n * @param array - The array containing elements to be added to the set.\n * @param transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n * @returns The modified set with added elements.\n */\nfunction addToSet(\n set: Record<string, boolean>,\n array: readonly unknown[],\n transformCaseFunc: ReturnType<typeof unapply<string>> = stringToLowerCase\n): Record<string, boolean> {\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n\n if (!arrayIsArray(array)) {\n return set;\n }\n\n let l = array.length;\n while (l--) {\n let element = array[l];\n\n if (typeof element === 'string') {\n const lcElement = transformCaseFunc(element);\n\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n (array as unknown[])[l] = lcElement;\n }\n\n element = lcElement;\n }\n }\n\n set[element as string] = true;\n }\n\n return set;\n}\n\n/**\n * Clean up an array to harden against CSPP\n *\n * @param array - The array to be cleaned.\n * @returns The cleaned version of the array\n */\nfunction cleanArray<T>(array: T[]): Array<T | null> {\n for (let index = 0; index < array.length; index++) {\n const isPropertyExist = objectHasOwnProperty(array, index);\n\n if (!isPropertyExist) {\n array[index] = null;\n }\n }\n\n return array;\n}\n\n/**\n * Shallow clone an object\n *\n * @param object - The object to be cloned.\n * @returns A new object that copies the original.\n */\nfunction clone<T extends Record<string, any>>(object: T): T {\n const newObject = create(null);\n\n for (const [property, value] of entries(object)) {\n const isPropertyExist = objectHasOwnProperty(object, property);\n\n if (isPropertyExist) {\n if (arrayIsArray(value)) {\n newObject[property] = cleanArray(value);\n } else if (\n value &&\n typeof value === 'object' &&\n value.constructor === Object\n ) {\n newObject[property] = clone(value);\n } else {\n newObject[property] = value;\n }\n }\n }\n\n return newObject;\n}\n\n/**\n * Convert non-node values into strings without depending on direct property access.\n *\n * @param value - The value to stringify.\n * @returns A string representation of the provided value.\n */\nfunction stringifyValue(value: unknown): string {\n switch (typeof value) {\n case 'string': {\n return value;\n }\n\n case 'number': {\n return numberToString(value);\n }\n\n case 'boolean': {\n return booleanToString(value);\n }\n\n case 'bigint': {\n return bigintToString ? bigintToString(value) : '0';\n }\n\n case 'symbol': {\n return symbolToString ? symbolToString(value) : 'Symbol()';\n }\n\n case 'undefined': {\n return objectToString(value);\n }\n\n case 'function':\n case 'object': {\n if (value === null) {\n return objectToString(value);\n }\n\n const valueAsRecord = value as Record<string, any>;\n const valueToString = lookupGetter(valueAsRecord, 'toString');\n\n if (typeof valueToString === 'function') {\n const stringified = valueToString(valueAsRecord);\n\n return typeof stringified === 'string'\n ? stringified\n : objectToString(stringified);\n }\n\n return objectToString(value);\n }\n\n default: {\n return objectToString(value);\n }\n }\n}\n\n/**\n * This method automatically checks if the prop is function or getter and behaves accordingly.\n *\n * @param object - The object to look up the getter function in its prototype chain.\n * @param prop - The property name for which to find the getter function.\n * @returns The getter function found in the prototype chain or a fallback function.\n */\nfunction lookupGetter<T extends Record<string, any>>(\n object: T,\n prop: string\n): ReturnType<typeof unapply<any>> | (() => null) {\n while (object !== null) {\n const desc = getOwnPropertyDescriptor(object, prop);\n\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n\n object = getPrototypeOf(object);\n }\n\n function fallbackValue(): null {\n return null;\n }\n\n return fallbackValue;\n}\n\nfunction isRegex(value: unknown): value is RegExp {\n try {\n regExpTest(value as RegExp, '');\n return true;\n } catch {\n return false;\n }\n}\n\nexport {\n // Array\n arrayForEach,\n arrayIndexOf,\n arrayIsArray,\n arrayLastIndexOf,\n arrayPop,\n arrayPush,\n arraySlice,\n arraySplice,\n // Object\n entries,\n freeze,\n getPrototypeOf,\n getOwnPropertyDescriptor,\n isFrozen,\n setPrototypeOf,\n seal,\n clone,\n create,\n objectHasOwnProperty,\n objectToString,\n // RegExp\n regExpTest,\n isRegex,\n // String\n stringIndexOf,\n stringMatch,\n stringReplace,\n stringToLowerCase,\n stringToString,\n stringTrim,\n // Other conversion\n stringifyValue,\n // Errors\n typeErrorCreate,\n // Other\n lookupGetter,\n addToSet,\n // Reflect\n unapply,\n unconstruct,\n};\n", "import { freeze } from './utils.js';\n\nexport const html = freeze([\n 'a',\n 'abbr',\n 'acronym',\n 'address',\n 'area',\n 'article',\n 'aside',\n 'audio',\n 'b',\n 'bdi',\n 'bdo',\n 'big',\n 'blink',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'center',\n 'cite',\n 'code',\n 'col',\n 'colgroup',\n 'content',\n 'data',\n 'datalist',\n 'dd',\n 'decorator',\n 'del',\n 'details',\n 'dfn',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'element',\n 'em',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'font',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hgroup',\n 'hr',\n 'html',\n 'i',\n 'img',\n 'input',\n 'ins',\n 'kbd',\n 'label',\n 'legend',\n 'li',\n 'main',\n 'map',\n 'mark',\n 'marquee',\n 'menu',\n 'menuitem',\n 'meter',\n 'nav',\n 'nobr',\n 'ol',\n 'optgroup',\n 'option',\n 'output',\n 'p',\n 'picture',\n 'pre',\n 'progress',\n 'q',\n 'rp',\n 'rt',\n 'ruby',\n 's',\n 'samp',\n 'search',\n 'section',\n 'select',\n 'shadow',\n 'slot',\n 'small',\n 'source',\n 'spacer',\n 'span',\n 'strike',\n 'strong',\n 'style',\n 'sub',\n 'summary',\n 'sup',\n 'table',\n 'tbody',\n 'td',\n 'template',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'time',\n 'tr',\n 'track',\n 'tt',\n 'u',\n 'ul',\n 'var',\n 'video',\n 'wbr',\n] as const);\n\nexport const svg = freeze([\n 'svg',\n 'a',\n 'altglyph',\n 'altglyphdef',\n 'altglyphitem',\n 'animatecolor',\n 'animatemotion',\n 'animatetransform',\n 'circle',\n 'clippath',\n 'defs',\n 'desc',\n 'ellipse',\n 'enterkeyhint',\n 'exportparts',\n 'filter',\n 'font',\n 'g',\n 'glyph',\n 'glyphref',\n 'hkern',\n 'image',\n 'inputmode',\n 'line',\n 'lineargradient',\n 'marker',\n 'mask',\n 'metadata',\n 'mpath',\n 'part',\n 'path',\n 'pattern',\n 'polygon',\n 'polyline',\n 'radialgradient',\n 'rect',\n 'stop',\n 'style',\n 'switch',\n 'symbol',\n 'text',\n 'textpath',\n 'title',\n 'tref',\n 'tspan',\n 'view',\n 'vkern',\n] as const);\n\nexport const svgFilters = freeze([\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feDistantLight',\n 'feDropShadow',\n 'feFlood',\n 'feFuncA',\n 'feFuncB',\n 'feFuncG',\n 'feFuncR',\n 'feGaussianBlur',\n 'feImage',\n 'feMerge',\n 'feMergeNode',\n 'feMorphology',\n 'feOffset',\n 'fePointLight',\n 'feSpecularLighting',\n 'feSpotLight',\n 'feTile',\n 'feTurbulence',\n] as const);\n\n// List of SVG elements that are disallowed by default.\n// We still need to know them so that we can do namespace\n// checks properly in case one wants to add them to\n// allow-list.\nexport const svgDisallowed = freeze([\n 'animate',\n 'color-profile',\n 'cursor',\n 'discard',\n 'font-face',\n 'font-face-format',\n 'font-face-name',\n 'font-face-src',\n 'font-face-uri',\n 'foreignobject',\n 'hatch',\n 'hatchpath',\n 'mesh',\n 'meshgradient',\n 'meshpatch',\n 'meshrow',\n 'missing-glyph',\n 'script',\n 'set',\n 'solidcolor',\n 'unknown',\n 'use',\n] as const);\n\nexport const mathMl = freeze([\n 'math',\n 'menclose',\n 'merror',\n 'mfenced',\n 'mfrac',\n 'mglyph',\n 'mi',\n 'mlabeledtr',\n 'mmultiscripts',\n 'mn',\n 'mo',\n 'mover',\n 'mpadded',\n 'mphantom',\n 'mroot',\n 'mrow',\n 'ms',\n 'mspace',\n 'msqrt',\n 'mstyle',\n 'msub',\n 'msup',\n 'msubsup',\n 'mtable',\n 'mtd',\n 'mtext',\n 'mtr',\n 'munder',\n 'munderover',\n 'mprescripts',\n] as const);\n\n// Similarly to SVG, we want to know all MathML elements,\n// even those that we disallow by default.\nexport const mathMlDisallowed = freeze([\n 'maction',\n 'maligngroup',\n 'malignmark',\n 'mlongdiv',\n 'mscarries',\n 'mscarry',\n 'msgroup',\n 'mstack',\n 'msline',\n 'msrow',\n 'semantics',\n 'annotation',\n 'annotation-xml',\n 'mprescripts',\n 'none',\n] as const);\n\nexport const text = freeze(['#text'] as const);\n", "import { freeze } from './utils.js';\n\nexport const html = freeze([\n 'accept',\n 'action',\n 'align',\n 'alt',\n 'autocapitalize',\n 'autocomplete',\n 'autopictureinpicture',\n 'autoplay',\n 'background',\n 'bgcolor',\n 'border',\n 'capture',\n 'cellpadding',\n 'cellspacing',\n 'checked',\n 'cite',\n 'class',\n 'clear',\n 'color',\n 'cols',\n 'colspan',\n 'command',\n 'commandfor',\n 'controls',\n 'controlslist',\n 'coords',\n 'crossorigin',\n 'datetime',\n 'decoding',\n 'default',\n 'dir',\n 'disabled',\n 'disablepictureinpicture',\n 'disableremoteplayback',\n 'download',\n 'draggable',\n 'enctype',\n 'enterkeyhint',\n 'exportparts',\n 'face',\n 'for',\n 'headers',\n 'height',\n 'hidden',\n 'high',\n 'href',\n 'hreflang',\n 'id',\n 'inert',\n 'inputmode',\n 'integrity',\n 'ismap',\n 'kind',\n 'label',\n 'lang',\n 'list',\n 'loading',\n 'loop',\n 'low',\n 'max',\n 'maxlength',\n 'media',\n 'method',\n 'min',\n 'minlength',\n 'multiple',\n 'muted',\n 'name',\n 'nonce',\n 'noshade',\n 'novalidate',\n 'nowrap',\n 'open',\n 'optimum',\n 'part',\n 'pattern',\n 'placeholder',\n 'playsinline',\n 'popover',\n 'popovertarget',\n 'popovertargetaction',\n 'poster',\n 'preload',\n 'pubdate',\n 'radiogroup',\n 'readonly',\n 'rel',\n 'required',\n 'rev',\n 'reversed',\n 'role',\n 'rows',\n 'rowspan',\n 'spellcheck',\n 'scope',\n 'selected',\n 'shape',\n 'size',\n 'sizes',\n 'slot',\n 'span',\n 'srclang',\n 'start',\n 'src',\n 'srcset',\n 'step',\n 'style',\n 'summary',\n 'tabindex',\n 'title',\n 'translate',\n 'type',\n 'usemap',\n 'valign',\n 'value',\n 'width',\n 'wrap',\n 'xmlns',\n] as const);\n\nexport const svg = freeze([\n 'accent-height',\n 'accumulate',\n 'additive',\n 'alignment-baseline',\n 'amplitude',\n 'ascent',\n 'attributename',\n 'attributetype',\n 'azimuth',\n 'basefrequency',\n 'baseline-shift',\n 'begin',\n 'bias',\n 'by',\n 'class',\n 'clip',\n 'clippathunits',\n 'clip-path',\n 'clip-rule',\n 'color',\n 'color-interpolation',\n 'color-interpolation-filters',\n 'color-profile',\n 'color-rendering',\n 'cx',\n 'cy',\n 'd',\n 'dx',\n 'dy',\n 'diffuseconstant',\n 'direction',\n 'display',\n 'divisor',\n 'dur',\n 'edgemode',\n 'elevation',\n 'end',\n 'exponent',\n 'fill',\n 'fill-opacity',\n 'fill-rule',\n 'filter',\n 'filterunits',\n 'flood-color',\n 'flood-opacity',\n 'font-family',\n 'font-size',\n 'font-size-adjust',\n 'font-stretch',\n 'font-style',\n 'font-variant',\n 'font-weight',\n 'fx',\n 'fy',\n 'g1',\n 'g2',\n 'glyph-name',\n 'glyphref',\n 'gradientunits',\n 'gradienttransform',\n 'height',\n 'href',\n 'id',\n 'image-rendering',\n 'in',\n 'in2',\n 'intercept',\n 'k',\n 'k1',\n 'k2',\n 'k3',\n 'k4',\n 'kerning',\n 'keypoints',\n 'keysplines',\n 'keytimes',\n 'lang',\n 'lengthadjust',\n 'letter-spacing',\n 'kernelmatrix',\n 'kernelunitlength',\n 'lighting-color',\n 'local',\n 'marker-end',\n 'marker-mid',\n 'marker-start',\n 'markerheight',\n 'markerunits',\n 'markerwidth',\n 'maskcontentunits',\n 'maskunits',\n 'max',\n 'mask',\n 'mask-type',\n 'media',\n 'method',\n 'mode',\n 'min',\n 'name',\n 'numoctaves',\n 'offset',\n 'operator',\n 'opacity',\n 'order',\n 'orient',\n 'orientation',\n 'origin',\n 'overflow',\n 'paint-order',\n 'path',\n 'pathlength',\n 'patterncontentunits',\n 'patterntransform',\n 'patternunits',\n 'points',\n 'preservealpha',\n 'preserveaspectratio',\n 'primitiveunits',\n 'r',\n 'rx',\n 'ry',\n 'radius',\n 'refx',\n 'refy',\n 'repeatcount',\n 'repeatdur',\n 'restart',\n 'result',\n 'rotate',\n 'scale',\n 'seed',\n 'shape-rendering',\n 'slope',\n 'specularconstant',\n 'specularexponent',\n 'spreadmethod',\n 'startoffset',\n 'stddeviation',\n 'stitchtiles',\n 'stop-color',\n 'stop-opacity',\n 'stroke-dasharray',\n 'stroke-dashoffset',\n 'stroke-linecap',\n 'stroke-linejoin',\n 'stroke-miterlimit',\n 'stroke-opacity',\n 'stroke',\n 'stroke-width',\n 'style',\n 'surfacescale',\n 'systemlanguage',\n 'tabindex',\n 'tablevalues',\n 'targetx',\n 'targety',\n 'transform',\n 'transform-origin',\n 'text-anchor',\n 'text-decoration',\n 'text-rendering',\n 'textlength',\n 'type',\n 'u1',\n 'u2',\n 'unicode',\n 'values',\n 'viewbox',\n 'visibility',\n 'version',\n 'vert-adv-y',\n 'vert-origin-x',\n 'vert-origin-y',\n 'width',\n 'word-spacing',\n 'wrap',\n 'writing-mode',\n 'xchannelselector',\n 'ychannelselector',\n 'x',\n 'x1',\n 'x2',\n 'xmlns',\n 'y',\n 'y1',\n 'y2',\n 'z',\n 'zoomandpan',\n] as const);\n\nexport const mathMl = freeze([\n 'accent',\n 'accentunder',\n 'align',\n 'bevelled',\n 'close',\n 'columnalign',\n 'columnlines',\n 'columnspacing',\n 'columnspan',\n 'denomalign',\n 'depth',\n 'dir',\n 'display',\n 'displaystyle',\n 'encoding',\n 'fence',\n 'frame',\n 'height',\n 'href',\n 'id',\n 'largeop',\n 'length',\n 'linethickness',\n 'lquote',\n 'lspace',\n 'mathbackground',\n 'mathcolor',\n 'mathsize',\n 'mathvariant',\n 'maxsize',\n 'minsize',\n 'movablelimits',\n 'notation',\n 'numalign',\n 'open',\n 'rowalign',\n 'rowlines',\n 'rowspacing',\n 'rowspan',\n 'rspace',\n 'rquote',\n 'scriptlevel',\n 'scriptminsize',\n 'scriptsizemultiplier',\n 'selection',\n 'separator',\n 'separators',\n 'stretchy',\n 'subscriptshift',\n 'supscriptshift',\n 'symmetric',\n 'voffset',\n 'width',\n 'xmlns',\n]);\n\nexport const xml = freeze([\n 'xlink:href',\n 'xml:id',\n 'xlink:title',\n 'xml:space',\n 'xmlns:xlink',\n] as const);\n", "import { seal } from './utils.js';\n\nexport const MUSTACHE_EXPR = seal(/{{[\\w\\W]*|^[\\w\\W]*}}/g);\nexport const ERB_EXPR = seal(/<%[\\w\\W]*|^[\\w\\W]*%>/g);\nexport const TMPLIT_EXPR = seal(/\\${[\\w\\W]*/g);\nexport const DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]+$/); // eslint-disable-line no-useless-escape\nexport const ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nexport const IS_ALLOWED_URI = seal(\n /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nexport const IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nexport const ATTR_WHITESPACE = seal(\n /[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n);\nexport const DOCTYPE_NAME = seal(/^html$/i);\nexport const CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n", "/* eslint-disable @typescript-eslint/indent */\n\nimport type {\n TrustedHTML,\n TrustedTypesWindow,\n} from 'trusted-types/lib/index.js';\nimport type { Config, UseProfilesConfig } from './config';\nimport * as TAGS from './tags.js';\nimport * as ATTRS from './attrs.js';\nimport * as EXPRESSIONS from './regexp.js';\nimport {\n addToSet,\n clone,\n entries,\n freeze,\n arrayForEach,\n arrayIsArray,\n arrayLastIndexOf,\n arrayPop,\n arrayPush,\n arraySplice,\n stringMatch,\n stringReplace,\n stringToLowerCase,\n stringToString,\n stringIndexOf,\n stringTrim,\n regExpTest,\n isRegex,\n typeErrorCreate,\n lookupGetter,\n create,\n objectHasOwnProperty,\n stringifyValue,\n} from './utils.js';\n\nexport type { Config } from './config';\n\ndeclare const VERSION: string;\n\n// https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\nconst NODE_TYPE = {\n element: 1,\n attribute: 2,\n text: 3,\n cdataSection: 4,\n entityReference: 5, // Deprecated\n entityNode: 6, // Deprecated\n progressingInstruction: 7,\n comment: 8,\n document: 9,\n documentType: 10,\n documentFragment: 11,\n notation: 12, // Deprecated\n};\n\nconst getGlobal = function (): WindowLike {\n return typeof window === 'undefined' ? null : window;\n};\n\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param trustedTypes The policy factory.\n * @param purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n * @return The policy created (or null, if Trusted Types\n * are not supported or creating the policy failed).\n */\nconst _createTrustedTypesPolicy = function (\n trustedTypes: TrustedTypePolicyFactory,\n purifyHostElement: HTMLScriptElement\n) {\n if (\n typeof trustedTypes !== 'object' ||\n typeof trustedTypes.createPolicy !== 'function'\n ) {\n return null;\n }\n\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n let suffix = null;\n const ATTR_NAME = 'data-tt-policy-suffix';\n if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n suffix = purifyHostElement.getAttribute(ATTR_NAME);\n }\n\n const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML(html) {\n return html;\n },\n createScriptURL(scriptUrl) {\n return scriptUrl;\n },\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn(\n 'TrustedTypes policy ' + policyName + ' could not be created.'\n );\n return null;\n }\n};\n\nconst _createHooksMap = function (): HooksMap {\n return {\n afterSanitizeAttributes: [],\n afterSanitizeElements: [],\n afterSanitizeShadowDOM: [],\n beforeSanitizeAttributes: [],\n beforeSanitizeElements: [],\n beforeSanitizeShadowDOM: [],\n uponSanitizeAttribute: [],\n uponSanitizeElement: [],\n uponSanitizeShadowNode: [],\n };\n};\n\nfunction createDOMPurify(window: WindowLike = getGlobal()): DOMPurify {\n const DOMPurify: DOMPurify = (root: WindowLike) => createDOMPurify(root);\n\n DOMPurify.version = VERSION;\n\n DOMPurify.removed = [];\n\n if (\n !window ||\n !window.document ||\n window.document.nodeType !== NODE_TYPE.document ||\n !window.Element\n ) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n\n return DOMPurify;\n }\n\n let { document } = window;\n\n const originalDocument = document;\n const currentScript: HTMLScriptElement =\n originalDocument.currentScript as HTMLScriptElement;\n const {\n DocumentFragment,\n HTMLTemplateElement,\n Node,\n Element,\n NodeFilter,\n NamedNodeMap = window.NamedNodeMap || (window as any).MozNamedAttrMap,\n HTMLFormElement,\n DOMParser,\n trustedTypes,\n } = window;\n\n const ElementPrototype = Element.prototype;\n\n const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n const remove = lookupGetter(ElementPrototype, 'remove');\n const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n const getShadowRoot = lookupGetter(ElementPrototype, 'shadowRoot');\n const getAttributes = lookupGetter(ElementPrototype, 'attributes');\n const getNodeType =\n Node && Node.prototype ? lookupGetter(Node.prototype, 'nodeType') : null;\n const getNodeName =\n Node && Node.prototype ? lookupGetter(Node.prototype, 'nodeName') : null;\n\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n if (typeof HTMLTemplateElement === 'function') {\n const template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n\n let trustedTypesPolicy;\n let emptyHTML = '';\n\n const {\n implementation,\n createNodeIterator,\n createDocumentFragment,\n getElementsByTagName,\n } = document;\n const { importNode } = originalDocument;\n\n let hooks = _createHooksMap();\n\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported =\n typeof entries === 'function' &&\n typeof getParentNode === 'function' &&\n implementation &&\n implementation.createHTMLDocument !== undefined;\n\n const {\n MUSTACHE_EXPR,\n ERB_EXPR,\n TMPLIT_EXPR,\n DATA_ATTR,\n ARIA_ATTR,\n IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE,\n CUSTOM_ELEMENT,\n } = EXPRESSIONS;\n\n let { IS_ALLOWED_URI } = EXPRESSIONS;\n\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n\n /* allowed element names */\n let ALLOWED_TAGS = null;\n const DEFAULT_ALLOWED_TAGS = addToSet({}, [\n ...TAGS.html,\n ...TAGS.svg,\n ...TAGS.svgFilters,\n ...TAGS.mathMl,\n ...TAGS.text,\n ]);\n\n /* Allowed attribute names */\n let ALLOWED_ATTR = null;\n const DEFAULT_ALLOWED_ATTR = addToSet({}, [\n ...ATTRS.html,\n ...ATTRS.svg,\n ...ATTRS.mathMl,\n ...ATTRS.xml,\n ]);\n\n /*\n * Configure how DOMPurify should handle custom elements and their attributes as well as customized built-in elements.\n * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n */\n let CUSTOM_ELEMENT_HANDLING = Object.seal(\n create(null, {\n tagNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null,\n },\n attributeNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null,\n },\n allowCustomizedBuiltInElements: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: false,\n },\n })\n );\n\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n let FORBID_TAGS = null;\n\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n let FORBID_ATTR = null;\n\n /* Config object to store ADD_TAGS/ADD_ATTR functions (when used as functions) */\n const EXTRA_ELEMENT_HANDLING = Object.seal(\n create(null, {\n tagCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null,\n },\n attributeCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null,\n },\n })\n );\n\n /* Decide if ARIA attributes are okay */\n let ALLOW_ARIA_ATTR = true;\n\n /* Decide if custom data attributes are okay */\n let ALLOW_DATA_ATTR = true;\n\n /* Decide if unknown protocols are okay */\n let ALLOW_UNKNOWN_PROTOCOLS = false;\n\n /* Decide if self-closing tags in attributes are allowed.\n * Usually removed due to a mXSS issue in jQuery 3.0 */\n let ALLOW_SELF_CLOSE_IN_ATTR = true;\n\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n let SAFE_FOR_TEMPLATES = false;\n\n /* Output should be safe even for XML used within HTML and alike.\n * This means, DOMPurify removes comments when containing risky content.\n */\n let SAFE_FOR_XML = true;\n\n /* Decide if document with <html>... should be returned */\n let WHOLE_DOCUMENT = false;\n\n /* Track whether config is already set on this instance of DOMPurify. */\n let SET_CONFIG = false;\n\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n let FORCE_BODY = false;\n\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n let RETURN_DOM = false;\n\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n let RETURN_DOM_FRAGMENT = false;\n\n /* Try to return a Trusted Type object instead of a string, return a string in\n * case Trusted Types are not supported */\n let RETURN_TRUSTED_TYPE = false;\n\n /* Output should be free from DOM clobbering attacks?\n * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n */\n let SANITIZE_DOM = true;\n\n /* Achieve full DOM Clobbering protection by isolating the namespace of named\n * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n *\n * HTML/DOM spec rules that enable DOM Clobbering:\n * - Named Access on Window (\u00A77.3.3)\n * - DOM Tree Accessors (\u00A73.1.5)\n * - Form Element Parent-Child Relations (\u00A74.10.3)\n * - Iframe srcdoc / Nested WindowProxies (\u00A74.8.5)\n * - HTMLCollection (\u00A74.2.10.2)\n *\n * Namespace isolation is implemented by prefixing `id` and `name` attributes\n * with a constant string, i.e., `user-content-`\n */\n let SANITIZE_NAMED_PROPS = false;\n const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n\n /* Keep element content when removing element? */\n let KEEP_CONTENT = true;\n\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n let IN_PLACE = false;\n\n /* Allow usage of profiles like html, svg and mathMl */\n let USE_PROFILES: UseProfilesConfig | false = {};\n\n /* Tags to ignore content of when KEEP_CONTENT is true */\n let FORBID_CONTENTS = null;\n const DEFAULT_FORBID_CONTENTS = addToSet({}, [\n 'annotation-xml',\n 'audio',\n 'colgroup',\n 'desc',\n 'foreignobject',\n 'head',\n 'iframe',\n 'math',\n 'mi',\n 'mn',\n 'mo',\n 'ms',\n 'mtext',\n 'noembed',\n 'noframes',\n 'noscript',\n 'plaintext',\n 'script',\n 'style',\n 'svg',\n 'template',\n 'thead',\n 'title',\n 'video',\n 'xmp',\n ]);\n\n /* Tags that are safe for data: URIs */\n let DATA_URI_TAGS = null;\n const DEFAULT_DATA_URI_TAGS = addToSet({}, [\n 'audio',\n 'video',\n 'img',\n 'source',\n 'image',\n 'track',\n ]);\n\n /* Attributes safe for values like \"javascript:\" */\n let URI_SAFE_ATTRIBUTES = null;\n const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, [\n 'alt',\n 'class',\n 'for',\n 'id',\n 'label',\n 'name',\n 'pattern',\n 'placeholder',\n 'role',\n 'summary',\n 'title',\n 'value',\n 'style',\n 'xmlns',\n ]);\n\n const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n /* Document namespace */\n let NAMESPACE = HTML_NAMESPACE;\n let IS_EMPTY_INPUT = false;\n\n /* Allowed XHTML+XML namespaces */\n let ALLOWED_NAMESPACES = null;\n const DEFAULT_ALLOWED_NAMESPACES = addToSet(\n {},\n [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE],\n stringToString\n );\n\n let MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, [\n 'mi',\n 'mo',\n 'mn',\n 'ms',\n 'mtext',\n ]);\n\n let HTML_INTEGRATION_POINTS = addToSet({}, ['annotation-xml']);\n\n // Certain elements are allowed in both SVG and HTML\n // namespace. We need to specify them explicitly\n // so that they don't get erroneously deleted from\n // HTML namespace.\n const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, [\n 'title',\n 'style',\n 'font',\n 'a',\n 'script',\n ]);\n\n /* Parsing of strict XHTML documents */\n let PARSER_MEDIA_TYPE: null | DOMParserSupportedType = null;\n const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n let transformCaseFunc: null | Parameters<typeof addToSet>[2] = null;\n\n /* Keep a reference to config to pass to hooks */\n let CONFIG: Config | null = null;\n\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n\n const formElement = document.createElement('form');\n\n const isRegexOrFunction = function (\n testValue: unknown\n ): testValue is Function | RegExp {\n return testValue instanceof RegExp || testValue instanceof Function;\n };\n\n /**\n * _parseConfig\n *\n * @param cfg optional config literal\n */\n // eslint-disable-next-line complexity\n const _parseConfig = function (cfg: Config = {}): void {\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n\n /* Shield configuration object from tampering */\n if (!cfg || typeof cfg !== 'object') {\n cfg = {};\n }\n\n /* Shield configuration object from prototype pollution */\n cfg = clone(cfg);\n\n PARSER_MEDIA_TYPE =\n // eslint-disable-next-line unicorn/prefer-includes\n SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1\n ? DEFAULT_PARSER_MEDIA_TYPE\n : cfg.PARSER_MEDIA_TYPE;\n\n // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n transformCaseFunc =\n PARSER_MEDIA_TYPE === 'application/xhtml+xml'\n ? stringToString\n : stringToLowerCase;\n\n /* Set configuration parameters */\n ALLOWED_TAGS =\n objectHasOwnProperty(cfg, 'ALLOWED_TAGS') &&\n arrayIsArray(cfg.ALLOWED_TAGS)\n ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc)\n : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR =\n objectHasOwnProperty(cfg, 'ALLOWED_ATTR') &&\n arrayIsArray(cfg.ALLOWED_ATTR)\n ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc)\n : DEFAULT_ALLOWED_ATTR;\n ALLOWED_NAMESPACES =\n objectHasOwnProperty(cfg, 'ALLOWED_NAMESPACES') &&\n arrayIsArray(cfg.ALLOWED_NAMESPACES)\n ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString)\n : DEFAULT_ALLOWED_NAMESPACES;\n URI_SAFE_ATTRIBUTES =\n objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR') &&\n arrayIsArray(cfg.ADD_URI_SAFE_ATTR)\n ? addToSet(\n clone(DEFAULT_URI_SAFE_ATTRIBUTES),\n cfg.ADD_URI_SAFE_ATTR,\n transformCaseFunc\n )\n : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS =\n objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS') &&\n arrayIsArray(cfg.ADD_DATA_URI_TAGS)\n ? addToSet(\n clone(DEFAULT_DATA_URI_TAGS),\n cfg.ADD_DATA_URI_TAGS,\n transformCaseFunc\n )\n : DEFAULT_DATA_URI_TAGS;\n FORBID_CONTENTS =\n objectHasOwnProperty(cfg, 'FORBID_CONTENTS') &&\n arrayIsArray(cfg.FORBID_CONTENTS)\n ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc)\n : DEFAULT_FORBID_CONTENTS;\n FORBID_TAGS =\n objectHasOwnProperty(cfg, 'FORBID_TAGS') && arrayIsArray(cfg.FORBID_TAGS)\n ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc)\n : clone({});\n FORBID_ATTR =\n objectHasOwnProperty(cfg, 'FORBID_ATTR') && arrayIsArray(cfg.FORBID_ATTR)\n ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc)\n : clone({});\n USE_PROFILES = objectHasOwnProperty(cfg, 'USE_PROFILES')\n ? cfg.USE_PROFILES && typeof cfg.USE_PROFILES === 'object'\n ? clone(cfg.USE_PROFILES)\n : cfg.USE_PROFILES\n : false;\n\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n IS_ALLOWED_URI = isRegex(cfg.ALLOWED_URI_REGEXP)\n ? cfg.ALLOWED_URI_REGEXP\n : EXPRESSIONS.IS_ALLOWED_URI; // Default regexp\n\n NAMESPACE =\n typeof cfg.NAMESPACE === 'string' ? cfg.NAMESPACE : HTML_NAMESPACE; // Default HTML namespace\n\n MATHML_TEXT_INTEGRATION_POINTS =\n objectHasOwnProperty(cfg, 'MATHML_TEXT_INTEGRATION_POINTS') &&\n cfg.MATHML_TEXT_INTEGRATION_POINTS &&\n typeof cfg.MATHML_TEXT_INTEGRATION_POINTS === 'object'\n ? clone(cfg.MATHML_TEXT_INTEGRATION_POINTS)\n : addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']); // Default built-in map\n\n HTML_INTEGRATION_POINTS =\n objectHasOwnProperty(cfg, 'HTML_INTEGRATION_POINTS') &&\n cfg.HTML_INTEGRATION_POINTS &&\n typeof cfg.HTML_INTEGRATION_POINTS === 'object'\n ? clone(cfg.HTML_INTEGRATION_POINTS)\n : addToSet({}, ['annotation-xml']); // Default built-in map\n\n const customElementHandling =\n objectHasOwnProperty(cfg, 'CUSTOM_ELEMENT_HANDLING') &&\n cfg.CUSTOM_ELEMENT_HANDLING &&\n typeof cfg.CUSTOM_ELEMENT_HANDLING === 'object'\n ? clone(cfg.CUSTOM_ELEMENT_HANDLING)\n : create(null);\n\n CUSTOM_ELEMENT_HANDLING = create(null);\n\n if (\n objectHasOwnProperty(customElementHandling, 'tagNameCheck') &&\n isRegexOrFunction(customElementHandling.tagNameCheck)\n ) {\n CUSTOM_ELEMENT_HANDLING.tagNameCheck = customElementHandling.tagNameCheck; // Default undefined\n }\n\n if (\n objectHasOwnProperty(customElementHandling, 'attributeNameCheck') &&\n isRegexOrFunction(customElementHandling.attributeNameCheck)\n ) {\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck =\n customElementHandling.attributeNameCheck; // Default undefined\n }\n\n if (\n objectHasOwnProperty(\n customElementHandling,\n 'allowCustomizedBuiltInElements'\n ) &&\n typeof customElementHandling.allowCustomizedBuiltInElements === 'boolean'\n ) {\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements =\n customElementHandling.allowCustomizedBuiltInElements; // Default undefined\n }\n\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n\n /* Parse profile info */\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, TAGS.text);\n ALLOWED_ATTR = create(null);\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, TAGS.html);\n addToSet(ALLOWED_ATTR, ATTRS.html);\n }\n\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, TAGS.svg);\n addToSet(ALLOWED_ATTR, ATTRS.svg);\n addToSet(ALLOWED_ATTR, ATTRS.xml);\n }\n\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, TAGS.svgFilters);\n addToSet(ALLOWED_ATTR, ATTRS.svg);\n addToSet(ALLOWED_ATTR, ATTRS.xml);\n }\n\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, TAGS.mathMl);\n addToSet(ALLOWED_ATTR, ATTRS.mathMl);\n addToSet(ALLOWED_ATTR, ATTRS.xml);\n }\n }\n\n /* Always reset function-based ADD_TAGS / ADD_ATTR checks to prevent\n * leaking across calls when switching from function to array config */\n EXTRA_ELEMENT_HANDLING.tagCheck = null;\n EXTRA_ELEMENT_HANDLING.attributeCheck = null;\n\n /* Merge configuration parameters */\n if (objectHasOwnProperty(cfg, 'ADD_TAGS')) {\n if (typeof cfg.ADD_TAGS === 'function') {\n EXTRA_ELEMENT_HANDLING.tagCheck = cfg.ADD_TAGS;\n } else if (arrayIsArray(cfg.ADD_TAGS)) {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n }\n }\n\n if (objectHasOwnProperty(cfg, 'ADD_ATTR')) {\n if (typeof cfg.ADD_ATTR === 'function') {\n EXTRA_ELEMENT_HANDLING.attributeCheck = cfg.ADD_ATTR;\n } else if (arrayIsArray(cfg.ADD_ATTR)) {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n }\n }\n\n if (\n objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR') &&\n arrayIsArray(cfg.ADD_URI_SAFE_ATTR)\n ) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n }\n\n if (\n objectHasOwnProperty(cfg, 'FORBID_CONTENTS') &&\n arrayIsArray(cfg.FORBID_CONTENTS)\n ) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n\n addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n }\n\n if (\n objectHasOwnProperty(cfg, 'ADD_FORBID_CONTENTS') &&\n arrayIsArray(cfg.ADD_FORBID_CONTENTS)\n ) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n\n addToSet(FORBID_CONTENTS, cfg.ADD_FORBID_CONTENTS, transformCaseFunc);\n }\n\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n }\n\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n delete FORBID_TAGS.tbody;\n }\n\n if (cfg.TRUSTED_TYPES_POLICY) {\n if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {\n throw typeErrorCreate(\n 'TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.'\n );\n }\n\n if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {\n throw typeErrorCreate(\n 'TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.'\n );\n }\n\n // Overwrite existing TrustedTypes policy.\n trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n\n // Sign local variables required by `sanitize`.\n emptyHTML = trustedTypesPolicy.createHTML('');\n } else {\n // Uninitialized policy, attempt to initialize the internal dompurify policy.\n if (trustedTypesPolicy === undefined) {\n trustedTypesPolicy = _createTrustedTypesPolicy(\n trustedTypes,\n currentScript\n );\n }\n\n // If creating the internal policy succeeded sign internal variables.\n if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {\n emptyHTML = trustedTypesPolicy.createHTML('');\n }\n }\n\n /*\n * Mirror the clone-before-mutate pattern already applied above for\n * cfg.ADD_TAGS / cfg.ADD_ATTR: if any uponSanitize* hook is\n * registered AND the set still points at the default constant,\n * clone it. The hook then mutates the clone (in-call widening\n * still works exactly as documented) and the next default-cfg\n * call rebinds to the untouched original via the reassignment at\n * the top of this function.\n */\n if (\n (hooks.uponSanitizeElement.length > 0 ||\n hooks.uponSanitizeAttribute.length > 0) &&\n ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS\n ) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n\n if (\n hooks.uponSanitizeAttribute.length > 0 &&\n ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR\n ) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (freeze) {\n freeze(cfg);\n }\n\n CONFIG = cfg;\n };\n\n /* Keep track of all possible SVG and MathML tags\n * so that we can perform the namespace checks\n * correctly. */\n const ALL_SVG_TAGS = addToSet({}, [\n ...TAGS.svg,\n ...TAGS.svgFilters,\n ...TAGS.svgDisallowed,\n ]);\n const ALL_MATHML_TAGS = addToSet({}, [\n ...TAGS.mathMl,\n ...TAGS.mathMlDisallowed,\n ]);\n\n /**\n * @param element a DOM element whose namespace is being checked\n * @returns Return false if the element has a\n * namespace that a spec-compliant parser would never\n * return. Return true otherwise.\n */\n const _checkValidNamespace = function (element: Element): boolean {\n let parent = getParentNode(element);\n\n // In JSDOM, if we're inside shadow DOM, then parentNode\n // can be null. We just simulate parent in this case.\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: NAMESPACE,\n tagName: 'template',\n };\n }\n\n const tagName = stringToLowerCase(element.tagName);\n const parentTagName = stringToLowerCase(parent.tagName);\n\n if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n return false;\n }\n\n if (element.namespaceURI === SVG_NAMESPACE) {\n // The only way to switch from HTML namespace to SVG\n // is via <svg>. If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'svg';\n }\n\n // The only way to switch from MathML to SVG is via`\n // svg if parent is either <annotation-xml> or MathML\n // text integration points.\n if (parent.namespaceURI === MATHML_NAMESPACE) {\n return (\n tagName === 'svg' &&\n (parentTagName === 'annotation-xml' ||\n MATHML_TEXT_INTEGRATION_POINTS[parentTagName])\n );\n }\n\n // We only allow elements that are defined in SVG\n // spec. All others are disallowed in SVG namespace.\n return Boolean(ALL_SVG_TAGS[tagName]);\n }\n\n if (element.namespaceURI === MATHML_NAMESPACE) {\n // The only way to switch from HTML namespace to MathML\n // is via <math>. If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'math';\n }\n\n // The only way to switch from SVG to MathML is via\n // <math> and HTML integration points\n if (parent.namespaceURI === SVG_NAMESPACE) {\n return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n }\n\n // We only allow elements that are defined in MathML\n // spec. All others are disallowed in MathML namespace.\n return Boolean(ALL_MATHML_TAGS[tagName]);\n }\n\n if (element.namespaceURI === HTML_NAMESPACE) {\n // The only way to switch from SVG to HTML is via\n // HTML integration points, and from MathML to HTML\n // is via MathML text integration points\n if (\n parent.namespaceURI === SVG_NAMESPACE &&\n !HTML_INTEGRATION_POINTS[parentTagName]\n ) {\n return false;\n }\n\n if (\n parent.namespaceURI === MATHML_NAMESPACE &&\n !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]\n ) {\n return false;\n }\n\n // We disallow tags that are specific for MathML\n // or SVG and should never appear in HTML namespace\n return (\n !ALL_MATHML_TAGS[tagName] &&\n (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName])\n );\n }\n\n // For XHTML and XML documents that support custom namespaces\n if (\n PARSER_MEDIA_TYPE === 'application/xhtml+xml' &&\n ALLOWED_NAMESPACES[element.namespaceURI]\n ) {\n return true;\n }\n\n // The code should never reach this place (this means\n // that the element somehow got namespace that is not\n // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n // Return false just in case.\n return false;\n };\n\n /**\n * _forceRemove\n *\n * @param node a DOM node\n */\n const _forceRemove = function (node: Node): void {\n arrayPush(DOMPurify.removed, { element: node });\n\n try {\n // eslint-disable-next-line unicorn/prefer-dom-node-remove\n getParentNode(node).removeChild(node);\n } catch (_) {\n remove(node);\n }\n };\n\n /**\n * _removeAttribute\n *\n * @param name an Attribute name\n * @param element a DOM node\n */\n const _removeAttribute = function (name: string, element: Element): void {\n try {\n arrayPush(DOMPurify.removed, {\n attribute: element.getAttributeNode(name),\n from: element,\n });\n } catch (_) {\n arrayPush(DOMPurify.removed, {\n attribute: null,\n from: element,\n });\n }\n\n element.removeAttribute(name);\n\n // We void attribute values for unremovable \"is\" attributes\n if (name === 'is') {\n if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n try {\n _forceRemove(element);\n } catch (_) {}\n } else {\n try {\n element.setAttribute(name, '');\n } catch (_) {}\n }\n }\n };\n\n /**\n * _initDocument\n *\n * @param dirty - a string of dirty markup\n * @return a DOM, filled with the dirty markup\n */\n const _initDocument = function (dirty: string): Document {\n /* Create a HTML document */\n let doc = null;\n let leadingWhitespace = null;\n\n if (FORCE_BODY) {\n dirty = '<remove></remove>' + dirty;\n } else {\n /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n leadingWhitespace = matches && matches[0];\n }\n\n if (\n PARSER_MEDIA_TYPE === 'application/xhtml+xml' &&\n NAMESPACE === HTML_NAMESPACE\n ) {\n // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n dirty =\n '<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>' +\n dirty +\n '</body></html>';\n }\n\n const dirtyPayload = trustedTypesPolicy\n ? trustedTypesPolicy.createHTML(dirty)\n : dirty;\n /*\n * Use the DOMParser API by default, fallback later if needs be\n * DOMParser not work for svg when has multiple root element.\n */\n if (NAMESPACE === HTML_NAMESPACE) {\n try {\n doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n } catch (_) {}\n }\n\n /* Use createHTMLDocument in case DOMParser is not available */\n if (!doc || !doc.documentElement) {\n doc = implementation.createDocument(NAMESPACE, 'template', null);\n try {\n doc.documentElement.innerHTML = IS_EMPTY_INPUT\n ? emptyHTML\n : dirtyPayload;\n } catch (_) {\n // Syntax error if dirtyPayload is invalid xml\n }\n }\n\n const body = doc.body || doc.documentElement;\n\n if (dirty && leadingWhitespace) {\n body.insertBefore(\n document.createTextNode(leadingWhitespace),\n body.childNodes[0] || null\n );\n }\n\n /* Work on whole document or just its body */\n if (NAMESPACE === HTML_NAMESPACE) {\n return getElementsByTagName.call(\n doc,\n WHOLE_DOCUMENT ? 'html' : 'body'\n )[0];\n }\n\n return WHOLE_DOCUMENT ? doc.documentElement : body;\n };\n\n /**\n * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n *\n * @param root The root element or node to start traversing on.\n * @return The created NodeIterator\n */\n const _createNodeIterator = function (root: Node): NodeIterator {\n return createNodeIterator.call(\n root.ownerDocument || root,\n root,\n // eslint-disable-next-line no-bitwise\n NodeFilter.SHOW_ELEMENT |\n NodeFilter.SHOW_COMMENT |\n NodeFilter.SHOW_TEXT |\n NodeFilter.SHOW_PROCESSING_INSTRUCTION |\n NodeFilter.SHOW_CDATA_SECTION,\n null\n );\n };\n\n /**\n * Strip template-engine expressions ({{...}}, ${...}, <%...%>) from the\n * character data of an element subtree. Used as the final safety net for\n * SAFE_FOR_TEMPLATES on every DOM-returning code path so that expressions\n * which only form after text-node normalization (e.g. fragments split across\n * stripped elements) cannot survive into a template-evaluating framework.\n *\n * Walks text/comment/CDATA/processing-instruction nodes and mutates `.data`\n * in place rather than round-tripping through innerHTML. This preserves\n * descendant node references (important for IN_PLACE callers), avoids a\n * serialize/reparse cycle, and reads literal character data \u2014 which means\n * `<%...%>` in text content matches the ERB regex against its real bytes\n * instead of the HTML-entity-escaped form innerHTML would produce.\n *\n * Attribute values are not visited here; SAFE_FOR_TEMPLATES handling for\n * attributes is performed during the per-node `_sanitizeAttributes` pass.\n *\n * @param node The root element whose character data should be scrubbed.\n */\n const _scrubTemplateExpressions = function (node: Element): void {\n node.normalize();\n const walker = createNodeIterator.call(\n node.ownerDocument || node,\n node,\n // eslint-disable-next-line no-bitwise\n NodeFilter.SHOW_TEXT |\n NodeFilter.SHOW_COMMENT |\n NodeFilter.SHOW_CDATA_SECTION |\n NodeFilter.SHOW_PROCESSING_INSTRUCTION,\n null\n );\n\n let currentNode = walker.nextNode() as CharacterData | null;\n while (currentNode) {\n let data = currentNode.data;\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], (expr: RegExp) => {\n data = stringReplace(data, expr, ' ');\n });\n currentNode.data = data;\n currentNode = walker.nextNode() as CharacterData | null;\n }\n };\n\n /**\n * _isClobbered\n *\n * Detect DOM-clobbering on HTMLFormElement nodes. Form is the only HTML\n * interface with [LegacyOverrideBuiltIns]; a descendant element with a\n * `name` attribute matching a prototype property shadows that property\n * on direct reads. We use this check at the IN_PLACE entry-point and\n * during attribute sanitization to refuse clobbered forms.\n *\n * @param element element to check for clobbering attacks\n * @return true if clobbered, false if safe\n */\n const _isClobbered = function (element: Element): boolean {\n // Realm-independent tag-name probe. If we can't determine the tag\n // name at all, we can't reason about clobbering \u2014 return false\n // (the caller's other defences still apply).\n const realTagName = getNodeName ? getNodeName(element) : null;\n if (typeof realTagName !== 'string') {\n return false;\n }\n\n if (transformCaseFunc(realTagName) !== 'form') {\n return false;\n }\n\n return (\n typeof element.nodeName !== 'string' ||\n typeof element.textContent !== 'string' ||\n typeof element.removeChild !== 'function' ||\n // Realm-safe NamedNodeMap detection: equality against the cached\n // prototype getter. Clobbered .attributes (e.g. <input name=\"attributes\">)\n // makes the direct read diverge from the cached read; a clean form\n // (same-realm OR foreign-realm) has both reads pointing at the same\n // canonical NamedNodeMap.\n element.attributes !== getAttributes(element) ||\n typeof element.removeAttribute !== 'function' ||\n typeof element.setAttribute !== 'function' ||\n typeof element.namespaceURI !== 'string' ||\n typeof element.insertBefore !== 'function' ||\n typeof element.hasChildNodes !== 'function' ||\n // NodeType clobbering probe. Cached Node.prototype.nodeType getter\n // returns the integer 1 for any Element regardless of realm; direct\n // read on a clobbered form (e.g. <input name=\"nodeType\">) returns\n // the named child element. Cheap addition \u2014 nodeType is read from\n // an internal slot, no serialization cost \u2014 and removes a residual\n // clobbering surface used by several mXSS / PI / comment branches\n // in _sanitizeElements that compare currentNode.nodeType directly.\n element.nodeType !== getNodeType(element) ||\n // HTMLFormElement has [LegacyOverrideBuiltIns]: a descendant named\n // \"childNodes\" shadows the prototype getter. Direct reads of\n // form.childNodes from a clobbered form return the named child\n // instead of the real NodeList, so any walk that reads it directly\n // skips the form's real children. Compare the direct read to the\n // cached Node.prototype getter \u2014 when the form's named-property\n // getter intercepts the read, the two values differ and we flag\n // the form. This catches every clobbering child type (input,\n // select, etc.) regardless of whether the named child happens to\n // carry a numeric .length, which a typeof-based probe would miss\n // (e.g. HTMLSelectElement.length is a defined unsigned-long).\n element.childNodes !== getChildNodes(element)\n );\n };\n\n /**\n * Checks whether the given value is a DocumentFragment from any realm.\n *\n * The realm-independent replacement reads `nodeType` through the cached\n * Node.prototype getter and compares to the DOCUMENT_FRAGMENT_NODE\n * constant (11). nodeType is a numeric value resolved from the node's\n * internal slot, identical across realms for the same kind of node.\n *\n * @param value object to check\n * @return true if value is a DocumentFragment-shaped node from any realm\n */\n const _isDocumentFragment = function (value: unknown): boolean {\n if (!getNodeType || typeof value !== 'object' || value === null) {\n return false;\n }\n\n try {\n return getNodeType(value as Node) === NODE_TYPE.documentFragment;\n } catch (_) {\n return false;\n }\n };\n\n /**\n * Checks whether the given object is a DOM node, including nodes that\n * originate from a different window/realm (e.g. an iframe's\n * contentDocument). The previous `value instanceof Node` check was\n * realm-bound: nodes from a different window failed it, causing\n * sanitize() to silently stringify them and reset IN_PLACE to false,\n * returning the original node unsanitized. See GHSA-4w3q-35jp-p934.\n *\n * @param value object to check whether it's a DOM node\n * @return true if value is a DOM node from any realm\n */\n const _isNode = function (value: unknown): value is Node {\n if (!getNodeType || typeof value !== 'object' || value === null) {\n return false;\n }\n\n try {\n return typeof getNodeType(value) === 'number';\n } catch (_) {\n return false;\n }\n };\n\n function _executeHooks<T extends HookFunction>(\n hooks: HookFunction[],\n currentNode: Parameters<T>[0],\n data: Parameters<T>[1]\n ): void {\n arrayForEach(hooks, (hook: T) => {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n }\n\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n * @param currentNode to check for permission to exist\n * @return true if node was killed, false if left alive\n */\n const _sanitizeElements = function (currentNode: any): boolean {\n let content = null;\n\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeElements, currentNode, null);\n\n /* Check if element is clobbered or can clobber */\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Now let's check the element's type and name */\n const tagName = transformCaseFunc(currentNode.nodeName);\n\n /* Execute a hook if present */\n _executeHooks(hooks.uponSanitizeElement, currentNode, {\n tagName,\n allowedTags: ALLOWED_TAGS,\n });\n\n /* Detect mXSS attempts abusing namespace confusion */\n if (\n SAFE_FOR_XML &&\n currentNode.hasChildNodes() &&\n !_isNode(currentNode.firstElementChild) &&\n regExpTest(/<[/\\w!]/g, currentNode.innerHTML) &&\n regExpTest(/<[/\\w!]/g, currentNode.textContent)\n ) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Remove risky CSS construction leading to mXSS */\n if (\n SAFE_FOR_XML &&\n currentNode.namespaceURI === HTML_NAMESPACE &&\n tagName === 'style' &&\n _isNode(currentNode.firstElementChild)\n ) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Remove any occurrence of processing instructions */\n if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Remove any kind of possibly harmful comments */\n if (\n SAFE_FOR_XML &&\n currentNode.nodeType === NODE_TYPE.comment &&\n regExpTest(/<[/\\w]/g, currentNode.data)\n ) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Remove element if anything forbids its presence */\n if (\n FORBID_TAGS[tagName] ||\n (!(\n EXTRA_ELEMENT_HANDLING.tagCheck instanceof Function &&\n EXTRA_ELEMENT_HANDLING.tagCheck(tagName)\n ) &&\n !ALLOWED_TAGS[tagName])\n ) {\n /* Check if we have a custom element to handle */\n if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {\n if (\n CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp &&\n regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)\n ) {\n return false;\n }\n\n if (\n CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function &&\n CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)\n ) {\n return false;\n }\n }\n\n /* Keep content except for bad-listed elements.\n Use the cached prototype getters exclusively \u2014 the previous code\n had `|| currentNode.parentNode` / `|| currentNode.childNodes`\n fallbacks, but the cached getters always return the canonical\n value (or null for a real parent-less node), so the fallback\n path was dead in safe cases and a clobbering surface in unsafe\n ones. Falsy cached results stay falsy; the `if (childNodes &&\n parentNode)` check already gates correctly. */\n if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n const parentNode = getParentNode(currentNode);\n const childNodes = getChildNodes(currentNode);\n\n if (childNodes && parentNode) {\n const childCount = childNodes.length;\n\n for (let i = childCount - 1; i >= 0; --i) {\n const childClone = cloneNode(childNodes[i], true);\n parentNode.insertBefore(childClone, getNextSibling(currentNode));\n }\n }\n }\n\n _forceRemove(currentNode);\n return true;\n }\n\n /* Check whether element has a valid namespace.\n Realm-safe check (GHSA-hpcv-96wg-7vj8): use the cached Node.prototype\n nodeType getter rather than `instanceof Element`, which is realm-\n bound and short-circuits to false for any node minted in a different\n realm \u2014 letting a foreign-realm element with a forbidden namespace\n slip past the namespace check entirely. */\n const nt = getNodeType ? getNodeType(currentNode) : currentNode.nodeType;\n if (nt === NODE_TYPE.element && !_checkValidNamespace(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Make sure that older browsers don't get fallback-tag mXSS */\n if (\n (tagName === 'noscript' ||\n tagName === 'noembed' ||\n tagName === 'noframes') &&\n regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)\n ) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Sanitize element content to be template-safe */\n if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {\n /* Get the element's text content */\n content = currentNode.textContent;\n\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], (expr: RegExp) => {\n content = stringReplace(content, expr, ' ');\n });\n\n if (currentNode.textContent !== content) {\n arrayPush(DOMPurify.removed, { element: currentNode.cloneNode() });\n currentNode.textContent = content;\n }\n }\n\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeElements, currentNode, null);\n\n return false;\n };\n\n /**\n * _isValidAttribute\n *\n * @param lcTag Lowercase tag name of containing element.\n * @param lcName Lowercase attribute name.\n * @param value Attribute value.\n * @return Returns true if `value` is valid, otherwise false.\n */\n // eslint-disable-next-line complexity\n const _isValidAttribute = function (\n lcTag: string,\n lcName: string,\n value: string\n ): boolean {\n /* FORBID_ATTR must always win, even if ADD_ATTR predicate would allow it */\n if (FORBID_ATTR[lcName]) {\n return false;\n }\n\n /* Make sure attribute cannot clobber */\n if (\n SANITIZE_DOM &&\n (lcName === 'id' || lcName === 'name') &&\n (value in document || value in formElement)\n ) {\n return false;\n }\n\n const nameIsPermitted =\n ALLOWED_ATTR[lcName] ||\n (EXTRA_ELEMENT_HANDLING.attributeCheck instanceof Function &&\n EXTRA_ELEMENT_HANDLING.attributeCheck(lcName, lcTag));\n\n /* Allow valid data-* attributes: At least one character after \"-\"\n (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n We don't need to check the value; it's always URI safe. */\n if (\n ALLOW_DATA_ATTR &&\n !FORBID_ATTR[lcName] &&\n regExpTest(DATA_ATTR, lcName)\n ) {\n // This attribute is safe\n } else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) {\n // This attribute is safe\n /* Otherwise, check the name is permitted */\n } else if (!nameIsPermitted || FORBID_ATTR[lcName]) {\n if (\n // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n (_isBasicCustomElement(lcTag) &&\n ((CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp &&\n regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag)) ||\n (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function &&\n CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag))) &&\n ((CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp &&\n regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName)) ||\n (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function &&\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName, lcTag)))) ||\n // Alternative, second condition checks if it's an `is`-attribute, AND\n // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n (lcName === 'is' &&\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements &&\n ((CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp &&\n regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value)) ||\n (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function &&\n CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))))\n ) {\n // If user has supplied a regexp or function in CUSTOM_ELEMENT_HANDLING.tagNameCheck, we need to also allow derived custom elements using the same tagName test.\n // Additionally, we need to allow attributes passing the CUSTOM_ELEMENT_HANDLING.attributeNameCheck user has configured, as custom elements can define these at their own discretion.\n } else {\n return false;\n }\n /* Check value is safe. First, is attr inert? If so, is safe */\n } else if (URI_SAFE_ATTRIBUTES[lcName]) {\n // This attribute is safe\n /* Check no script, data or unknown possibly unsafe URI\n unless we know URI values are safe for that attribute */\n } else if (\n regExpTest(IS_ALLOWED_URI, stringReplace(value, ATTR_WHITESPACE, ''))\n ) {\n // This attribute is safe\n /* Keep image data URIs alive if src/xlink:href is allowed */\n /* Further prevent gadget XSS for dynamically built script tags */\n } else if (\n (lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') &&\n lcTag !== 'script' &&\n stringIndexOf(value, 'data:') === 0 &&\n DATA_URI_TAGS[lcTag]\n ) {\n // This attribute is safe\n /* Allow unknown protocols: This provides support for links that\n are handled by protocol handlers which may be unknown ahead of\n time, e.g. fb:, spotify: */\n } else if (\n ALLOW_UNKNOWN_PROTOCOLS &&\n !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))\n ) {\n // This attribute is safe\n /* Check for binary attributes */\n } else if (value) {\n return false;\n } else {\n // Binary attributes are safe at this point\n /* Anything else, presume unsafe, do not add it back */\n }\n\n return true;\n };\n\n /* Names the HTML spec reserves from valid-custom-element-name; these must\n * never be treated as basic custom elements even when a permissive\n * CUSTOM_ELEMENT_HANDLING.tagNameCheck is configured. */\n const RESERVED_CUSTOM_ELEMENT_NAMES = addToSet({}, [\n 'annotation-xml',\n 'color-profile',\n 'font-face',\n 'font-face-format',\n 'font-face-name',\n 'font-face-src',\n 'font-face-uri',\n 'missing-glyph',\n ]);\n\n /**\n * _isBasicCustomElement\n * checks if at least one dash is included in tagName, and it's not the first char\n * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n *\n * @param tagName name of the tag of the node to sanitize\n * @returns Returns true if the tag name meets the basic criteria for a custom element, otherwise false.\n */\n const _isBasicCustomElement = function (tagName: string): boolean {\n return (\n !RESERVED_CUSTOM_ELEMENT_NAMES[stringToLowerCase(tagName)] &&\n regExpTest(CUSTOM_ELEMENT, tagName)\n );\n };\n\n /**\n * _sanitizeAttributes\n *\n * @protect attributes\n * @protect nodeName\n * @protect removeAttribute\n * @protect setAttribute\n *\n * @param currentNode to sanitize\n */\n const _sanitizeAttributes = function (currentNode: Element): void {\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeAttributes, currentNode, null);\n\n const { attributes } = currentNode;\n\n /* Check if we have attributes; if not we might have a text node */\n if (!attributes || _isClobbered(currentNode)) {\n return;\n }\n\n const hookEvent = {\n attrName: '',\n attrValue: '',\n keepAttr: true,\n allowedAttributes: ALLOWED_ATTR,\n forceKeepAttr: undefined,\n };\n let l = attributes.length;\n\n /* Go backwards over all attributes; safely remove bad ones */\n while (l--) {\n const attr = attributes[l];\n const { name, namespaceURI, value: attrValue } = attr;\n const lcName = transformCaseFunc(name);\n\n const initValue = attrValue;\n let value = name === 'value' ? initValue : stringTrim(initValue);\n\n /* Execute a hook if present */\n hookEvent.attrName = lcName;\n hookEvent.attrValue = value;\n hookEvent.keepAttr = true;\n hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n _executeHooks(hooks.uponSanitizeAttribute, currentNode, hookEvent);\n value = hookEvent.attrValue;\n\n /* Full DOM Clobbering protection via namespace isolation,\n * Prefix id and name attributes with `user-content-`\n */\n if (\n SANITIZE_NAMED_PROPS &&\n (lcName === 'id' || lcName === 'name') &&\n stringIndexOf(value, SANITIZE_NAMED_PROPS_PREFIX) !== 0\n ) {\n // Remove the attribute with this value\n _removeAttribute(name, currentNode);\n // Prefix the value and later re-create the attribute with the sanitized value\n value = SANITIZE_NAMED_PROPS_PREFIX + value;\n }\n // Else: already prefixed, leave the attribute alone \u2014 the prefix is\n // itself the clobbering protection, and re-applying it is incorrect.\n\n /* Work around a security issue with comments inside attributes */\n if (\n SAFE_FOR_XML &&\n regExpTest(\n /((--!?|])>)|<\\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,\n value\n )\n ) {\n _removeAttribute(name, currentNode);\n continue;\n }\n\n /* Make sure we cannot easily use animated hrefs, even if animations are allowed */\n if (lcName === 'attributename' && stringMatch(value, 'href')) {\n _removeAttribute(name, currentNode);\n continue;\n }\n\n /* Did the hooks approve of the attribute? */\n if (hookEvent.forceKeepAttr) {\n continue;\n }\n\n /* Did the hooks approve of the attribute? */\n if (!hookEvent.keepAttr) {\n _removeAttribute(name, currentNode);\n continue;\n }\n\n /* Work around a security issue in jQuery 3.0 */\n if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n\n /* Sanitize attribute content to be template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], (expr: RegExp) => {\n value = stringReplace(value, expr, ' ');\n });\n }\n\n /* Is `value` valid for this attribute? */\n const lcTag = transformCaseFunc(currentNode.nodeName);\n if (!_isValidAttribute(lcTag, lcName, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n\n /* Handle attributes that require Trusted Types */\n if (\n trustedTypesPolicy &&\n typeof trustedTypes === 'object' &&\n typeof trustedTypes.getAttributeType === 'function'\n ) {\n if (namespaceURI) {\n /* Namespaces are not yet supported, see https://bugs.chromium.org/p/chromium/issues/detail?id=1305293 */\n } else {\n switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n case 'TrustedHTML': {\n value = trustedTypesPolicy.createHTML(value);\n break;\n }\n\n case 'TrustedScriptURL': {\n value = trustedTypesPolicy.createScriptURL(value);\n break;\n }\n\n default: {\n break;\n }\n }\n }\n }\n\n /* Handle invalid data-* attribute set by try-catching it */\n if (value !== initValue) {\n try {\n if (namespaceURI) {\n currentNode.setAttributeNS(namespaceURI, name, value);\n } else {\n /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n currentNode.setAttribute(name, value);\n }\n\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n } else {\n arrayPop(DOMPurify.removed);\n }\n } catch (_) {\n _removeAttribute(name, currentNode);\n }\n }\n }\n\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeAttributes, currentNode, null);\n };\n\n /**\n * _sanitizeShadowDOM\n *\n * @param fragment to iterate over recursively\n */\n const _sanitizeShadowDOM = function (fragment: DocumentFragment): void {\n let shadowNode = null;\n const shadowIterator = _createNodeIterator(fragment);\n\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeShadowDOM, fragment, null);\n\n while ((shadowNode = shadowIterator.nextNode())) {\n /* Execute a hook if present */\n _executeHooks(hooks.uponSanitizeShadowNode, shadowNode, null);\n\n /* Sanitize tags and elements */\n _sanitizeElements(shadowNode);\n\n /* Check attributes next */\n _sanitizeAttributes(shadowNode);\n\n /* Deep shadow DOM detected.\n Realm-safe check (GHSA-hpcv-96wg-7vj8): use nodeType against the\n DOCUMENT_FRAGMENT_NODE constant rather than instanceof, so we\n recurse into <template>.content from foreign realms too. */\n if (_isDocumentFragment(shadowNode.content)) {\n _sanitizeShadowDOM(shadowNode.content);\n }\n\n /* An element iterated here may itself host an attached\n shadow root. The default NodeIterator does not enter shadow\n trees, so a shadow root nested inside template.content was\n previously reached by no walk at all (the pre-pass at\n _sanitizeAttachedShadowRoots descends via childNodes, which\n doesn't enter template.content; the template-content recursion\n above iterates the content but never inspected shadowRoot).\n Walk it explicitly. The nodeType guard avoids reading\n shadowRoot off text / comment / CDATA / PI nodes that the\n iterator also surfaces. */\n const shadowNodeType = getNodeType\n ? getNodeType(shadowNode)\n : (shadowNode as Node).nodeType;\n if (shadowNodeType === NODE_TYPE.element) {\n const innerSr = getShadowRoot\n ? getShadowRoot(shadowNode)\n : (shadowNode as Element).shadowRoot;\n if (_isDocumentFragment(innerSr)) {\n _sanitizeAttachedShadowRoots(innerSr);\n _sanitizeShadowDOM(innerSr);\n }\n }\n }\n\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeShadowDOM, fragment, null);\n };\n\n /**\n * _sanitizeAttachedShadowRoots\n *\n * Walks `root` and feeds every attached shadow root we encounter into\n * the existing _sanitizeShadowDOM pipeline. The default node iterator\n * does not descend into shadow trees, so nodes inside an attached\n * shadow root would otherwise be skipped entirely.\n *\n * Two real input paths put attached shadow roots in front of us:\n * 1. IN_PLACE on a DOM node that already has shadow roots attached.\n * 2. DOM-node input where importNode(dirty, true) deep-clones the\n * shadow root because it was created with `clonable: true`.\n *\n * This pass runs once, up front, so the main iteration loop (and the\n * existing _sanitizeShadowDOM template-content recursion) stay\n * untouched \u2014 string-input paths are not affected.\n *\n * @param root the subtree root to walk for attached shadow roots\n */\n const _sanitizeAttachedShadowRoots = function (root: Node): void {\n const nodeType = getNodeType ? getNodeType(root) : (root as any).nodeType;\n\n if (nodeType === NODE_TYPE.element) {\n const sr = getShadowRoot\n ? getShadowRoot(root)\n : (root as Element).shadowRoot;\n // Realm-safe check (GHSA-hpcv-96wg-7vj8): use nodeType-based\n // detection rather than `instanceof DocumentFragment`, which is\n // realm-bound and silently skipped shadow roots whose host element\n // belonged to a foreign realm (e.g. iframe.contentDocument\n // attachShadow). A foreign-realm ShadowRoot extends the foreign\n // realm's DocumentFragment, not ours, so the old instanceof check\n // returned false and the shadow subtree was never walked.\n if (_isDocumentFragment(sr)) {\n // Recurse first so that nested shadow roots are reached even if\n // _sanitizeShadowDOM removes hosts at this level.\n _sanitizeAttachedShadowRoots(sr);\n _sanitizeShadowDOM(sr);\n }\n }\n\n // Snapshot children before recursing. Sanitization of one subtree\n // (e.g. via an uponSanitizeShadowNode hook) may detach siblings,\n // and naive nextSibling traversal would silently skip the rest of\n // the list once a node is detached.\n const childNodes = getChildNodes\n ? getChildNodes(root)\n : (root as Element).childNodes;\n if (!childNodes) {\n return;\n }\n\n const snapshot: Node[] = [];\n arrayForEach(childNodes, (child) => {\n arrayPush(snapshot, child);\n });\n\n for (const child of snapshot) {\n _sanitizeAttachedShadowRoots(child);\n }\n\n /* When the root is a <template>, also descend into root.content */\n if (nodeType === NODE_TYPE.element) {\n const rootName = getNodeName ? getNodeName(root) : null;\n if (\n typeof rootName === 'string' &&\n transformCaseFunc(rootName) === 'template'\n ) {\n const content = (root as HTMLTemplateElement).content;\n if (_isDocumentFragment(content)) {\n _sanitizeAttachedShadowRoots(content);\n }\n }\n }\n };\n\n // eslint-disable-next-line complexity\n DOMPurify.sanitize = function (dirty, cfg = {}) {\n let body = null;\n let importedNode = null;\n let currentNode = null;\n let returnNode = null;\n /* Make sure we have a string to sanitize.\n DO NOT return early, as this will return the wrong type if\n the user has requested a DOM object rather than a string */\n IS_EMPTY_INPUT = !dirty;\n if (IS_EMPTY_INPUT) {\n dirty = '<!-->';\n }\n\n /* Stringify, in case dirty is an object */\n if (typeof dirty !== 'string' && !_isNode(dirty)) {\n dirty = stringifyValue(dirty);\n\n if (typeof dirty !== 'string') {\n throw typeErrorCreate('dirty is not a string, aborting');\n }\n }\n\n /* Return dirty HTML if DOMPurify cannot run */\n if (!DOMPurify.isSupported) {\n return dirty;\n }\n\n /* Assign config vars */\n if (!SET_CONFIG) {\n _parseConfig(cfg);\n }\n\n /* Clean up removed elements */\n DOMPurify.removed = [];\n\n /* Check if dirty is correctly typed for IN_PLACE */\n if (typeof dirty === 'string') {\n IN_PLACE = false;\n }\n\n if (IN_PLACE) {\n /* Do some early pre-sanitization to avoid unsafe root nodes.\n Read nodeName through the cached prototype getter \u2014 a clobbering\n child named \"nodeName\" on the form root would otherwise shadow\n the property and let this check skip the root-allowlist\n validation entirely. */\n const nn = getNodeName\n ? getNodeName(dirty as Node)\n : (dirty as Node).nodeName;\n if (typeof nn === 'string') {\n const tagName = transformCaseFunc(nn);\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n throw typeErrorCreate(\n 'root node is forbidden and cannot be sanitized in-place'\n );\n }\n }\n\n /* Pre-flight the root through _isClobbered. The iterator-driven\n removal path can not detach a parent-less root: _forceRemove\n falls through to Element.prototype.remove(), which per spec\n is a no-op on a node with no parent. A clobbered root would\n then survive the main loop with its attributes uninspected,\n because _sanitizeAttributes early-returns on _isClobbered. The\n result would be an attacker-controlled form, complete with any\n event-handler attributes the caller passed in, handed back to\n the application unsanitized. Refuse to sanitize such a root\n the same way we refuse a forbidden tag. GHSA-r47g-fvhr-h676. */\n if (_isClobbered(dirty as Element)) {\n throw typeErrorCreate(\n 'root node is clobbered and cannot be sanitized in-place'\n );\n }\n\n /* Sanitize attached shadow roots before the main iterator runs.\n The iterator does not descend into shadow trees. */\n _sanitizeAttachedShadowRoots(dirty as Node);\n } else if (_isNode(dirty)) {\n /* If dirty is a DOM element, append to an empty document to avoid\n elements being stripped by the parser */\n body = _initDocument('<!---->');\n importedNode = body.ownerDocument.importNode(dirty, true);\n if (\n importedNode.nodeType === NODE_TYPE.element &&\n importedNode.nodeName === 'BODY'\n ) {\n /* Node is already a body, use as is */\n body = importedNode;\n } else if (importedNode.nodeName === 'HTML') {\n body = importedNode;\n } else {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n body.appendChild(importedNode);\n }\n\n /* Clonable shadow roots are deep-cloned by importNode(); sanitize\n them before the main iterator runs, since the iterator does not\n descend into shadow trees. The walk routes every read through a\n cached prototype getter so clobbering descendants on a form root\n cannot hide a shadow host from this pass. */\n _sanitizeAttachedShadowRoots(importedNode);\n } else {\n /* Exit directly if we have nothing to do */\n if (\n !RETURN_DOM &&\n !SAFE_FOR_TEMPLATES &&\n !WHOLE_DOCUMENT &&\n // eslint-disable-next-line unicorn/prefer-includes\n dirty.indexOf('<') === -1\n ) {\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE\n ? trustedTypesPolicy.createHTML(dirty)\n : dirty;\n }\n\n /* Initialize the document to work on */\n body = _initDocument(dirty);\n\n /* Check we have a DOM node from the data */\n if (!body) {\n return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n }\n }\n\n /* Remove first element node (ours) if FORCE_BODY is set */\n if (body && FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n\n /* Get node iterator */\n const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);\n\n /* Now start iterating over the created document */\n while ((currentNode = nodeIterator.nextNode())) {\n /* Sanitize tags and elements */\n _sanitizeElements(currentNode);\n\n /* Check attributes next */\n _sanitizeAttributes(currentNode);\n\n /* Shadow DOM detected, sanitize it.\n Realm-safe check (GHSA-hpcv-96wg-7vj8): nodeType-based detection\n instead of instanceof, so foreign-realm <template>.content is\n walked correctly. */\n if (_isDocumentFragment(currentNode.content)) {\n _sanitizeShadowDOM(currentNode.content);\n }\n }\n\n /* If we sanitized `dirty` in-place, return it. */\n if (IN_PLACE) {\n if (SAFE_FOR_TEMPLATES) {\n _scrubTemplateExpressions(dirty as Element);\n }\n\n return dirty;\n }\n\n /* Return sanitized string or DOM */\n if (RETURN_DOM) {\n if (SAFE_FOR_TEMPLATES) {\n _scrubTemplateExpressions(body);\n }\n\n if (RETURN_DOM_FRAGMENT) {\n returnNode = createDocumentFragment.call(body.ownerDocument);\n\n while (body.firstChild) {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n returnNode.appendChild(body.firstChild);\n }\n } else {\n returnNode = body;\n }\n\n if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {\n /*\n AdoptNode() is not used because internal state is not reset\n (e.g. the past names map of a HTMLFormElement), this is safe\n in theory but we would rather not risk another attack vector.\n The state that is cloned by importNode() is explicitly defined\n by the specs.\n */\n returnNode = importNode.call(originalDocument, returnNode, true);\n }\n\n return returnNode;\n }\n\n let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n\n /* Serialize doctype if allowed */\n if (\n WHOLE_DOCUMENT &&\n ALLOWED_TAGS['!doctype'] &&\n body.ownerDocument &&\n body.ownerDocument.doctype &&\n body.ownerDocument.doctype.name &&\n regExpTest(EXPRESSIONS.DOCTYPE_NAME, body.ownerDocument.doctype.name)\n ) {\n serializedHTML =\n '<!DOCTYPE ' + body.ownerDocument.doctype.name + '>\\n' + serializedHTML;\n }\n\n /* Sanitize final string template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], (expr: RegExp) => {\n serializedHTML = stringReplace(serializedHTML, expr, ' ');\n });\n }\n\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE\n ? trustedTypesPolicy.createHTML(serializedHTML)\n : serializedHTML;\n };\n\n DOMPurify.setConfig = function (cfg = {}) {\n _parseConfig(cfg);\n SET_CONFIG = true;\n };\n\n DOMPurify.clearConfig = function () {\n CONFIG = null;\n SET_CONFIG = false;\n };\n\n DOMPurify.isValidAttribute = function (tag, attr, value) {\n /* Initialize shared config vars if necessary. */\n if (!CONFIG) {\n _parseConfig({});\n }\n\n const lcTag = transformCaseFunc(tag);\n const lcName = transformCaseFunc(attr);\n return _isValidAttribute(lcTag, lcName, value);\n };\n\n DOMPurify.addHook = function (\n entryPoint: keyof HooksMap,\n hookFunction: HookFunction\n ) {\n if (typeof hookFunction !== 'function') {\n return;\n }\n\n arrayPush(hooks[entryPoint], hookFunction);\n };\n\n DOMPurify.removeHook = function (\n entryPoint: keyof HooksMap,\n hookFunction: HookFunction\n ) {\n if (hookFunction !== undefined) {\n const index = arrayLastIndexOf(hooks[entryPoint], hookFunction);\n\n return index === -1\n ? undefined\n : arraySplice(hooks[entryPoint], index, 1)[0];\n }\n\n return arrayPop(hooks[entryPoint]);\n };\n\n DOMPurify.removeHooks = function (entryPoint: keyof HooksMap) {\n hooks[entryPoint] = [];\n };\n\n DOMPurify.removeAllHooks = function () {\n hooks = _createHooksMap();\n };\n\n return DOMPurify;\n}\n\nexport default createDOMPurify();\n\nexport interface DOMPurify {\n /**\n * Creates a DOMPurify instance using the given window-like object. Defaults to `window`.\n */\n (root?: WindowLike): DOMPurify;\n\n /**\n * Version label, exposed for easier checks\n * if DOMPurify is up to date or not\n */\n version: string;\n\n /**\n * Array of elements that DOMPurify removed during sanitation.\n * Empty if nothing was removed.\n */\n removed: Array<RemovedElement | RemovedAttribute>;\n\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n isSupported: boolean;\n\n /**\n * Set the configuration once.\n *\n * @param cfg configuration object\n */\n setConfig(cfg?: Config): void;\n\n /**\n * Removes the configuration.\n */\n clearConfig(): void;\n\n /**\n * Provides core sanitation functionality.\n *\n * @param dirty string or DOM node\n * @param cfg object\n * @returns Sanitized TrustedHTML.\n */\n sanitize(\n dirty: string | Node,\n cfg: Config & { RETURN_TRUSTED_TYPE: true }\n ): TrustedHTML;\n\n /**\n * Provides core sanitation functionality.\n *\n * @param dirty DOM node\n * @param cfg object\n * @returns Sanitized DOM node.\n */\n sanitize(dirty: Node, cfg: Config & { IN_PLACE: true }): Node;\n\n /**\n * Provides core sanitation functionality.\n *\n * @param dirty string or DOM node\n * @param cfg object\n * @returns Sanitized DOM node.\n */\n sanitize(dirty: string | Node, cfg: Config & { RETURN_DOM: true }): Node;\n\n /**\n * Provides core sanitation functionality.\n *\n * @param dirty string or DOM node\n * @param cfg object\n * @returns Sanitized document fragment.\n */\n sanitize(\n dirty: string | Node,\n cfg: Config & { RETURN_DOM_FRAGMENT: true }\n ): DocumentFragment;\n\n /**\n * Provides core sanitation functionality.\n *\n * @param dirty string or DOM node\n * @param cfg object\n * @returns Sanitized string.\n */\n sanitize(dirty: string | Node, cfg?: Config): string;\n\n /**\n * Checks if an attribute value is valid.\n * Uses last set config, if any. Otherwise, uses config defaults.\n *\n * @param tag Tag name of containing element.\n * @param attr Attribute name.\n * @param value Attribute value.\n * @returns Returns true if `value` is valid. Otherwise, returns false.\n */\n isValidAttribute(tag: string, attr: string, value: string): boolean;\n\n /**\n * Adds a DOMPurify hook.\n *\n * @param entryPoint entry point for the hook to add\n * @param hookFunction function to execute\n */\n addHook(entryPoint: BasicHookName, hookFunction: NodeHook): void;\n\n /**\n * Adds a DOMPurify hook.\n *\n * @param entryPoint entry point for the hook to add\n * @param hookFunction function to execute\n */\n addHook(entryPoint: ElementHookName, hookFunction: ElementHook): void;\n\n /**\n * Adds a DOMPurify hook.\n *\n * @param entryPoint entry point for the hook to add\n * @param hookFunction function to execute\n */\n addHook(\n entryPoint: DocumentFragmentHookName,\n hookFunction: DocumentFragmentHook\n ): void;\n\n /**\n * Adds a DOMPurify hook.\n *\n * @param entryPoint entry point for the hook to add\n * @param hookFunction function to execute\n */\n addHook(\n entryPoint: 'uponSanitizeElement',\n hookFunction: UponSanitizeElementHook\n ): void;\n\n /**\n * Adds a DOMPurify hook.\n *\n * @param entryPoint entry point for the hook to add\n * @param hookFunction function to execute\n */\n addHook(\n entryPoint: 'uponSanitizeAttribute',\n hookFunction: UponSanitizeAttributeHook\n ): void;\n\n /**\n * Remove a DOMPurify hook at a given entryPoint\n * (pops it from the stack of hooks if hook not specified)\n *\n * @param entryPoint entry point for the hook to remove\n * @param hookFunction optional specific hook to remove\n * @returns removed hook\n */\n removeHook(\n entryPoint: BasicHookName,\n hookFunction?: NodeHook\n ): NodeHook | undefined;\n\n /**\n * Remove a DOMPurify hook at a given entryPoint\n * (pops it from the stack of hooks if hook not specified)\n *\n * @param entryPoint entry point for the hook to remove\n * @param hookFunction optional specific hook to remove\n * @returns removed hook\n */\n removeHook(\n entryPoint: ElementHookName,\n hookFunction?: ElementHook\n ): ElementHook | undefined;\n\n /**\n * Remove a DOMPurify hook at a given entryPoint\n * (pops it from the stack of hooks if hook not specified)\n *\n * @param entryPoint entry point for the hook to remove\n * @param hookFunction optional specific hook to remove\n * @returns removed hook\n */\n removeHook(\n entryPoint: DocumentFragmentHookName,\n hookFunction?: DocumentFragmentHook\n ): DocumentFragmentHook | undefined;\n\n /**\n * Remove a DOMPurify hook at a given entryPoint\n * (pops it from the stack of hooks if hook not specified)\n *\n * @param entryPoint entry point for the hook to remove\n * @param hookFunction optional specific hook to remove\n * @returns removed hook\n */\n removeHook(\n entryPoint: 'uponSanitizeElement',\n hookFunction?: UponSanitizeElementHook\n ): UponSanitizeElementHook | undefined;\n\n /**\n * Remove a DOMPurify hook at a given entryPoint\n * (pops it from the stack of hooks if hook not specified)\n *\n * @param entryPoint entry point for the hook to remove\n * @param hookFunction optional specific hook to remove\n * @returns removed hook\n */\n removeHook(\n entryPoint: 'uponSanitizeAttribute',\n hookFunction?: UponSanitizeAttributeHook\n ): UponSanitizeAttributeHook | undefined;\n\n /**\n * Removes all DOMPurify hooks at a given entryPoint\n *\n * @param entryPoint entry point for the hooks to remove\n */\n removeHooks(entryPoint: HookName): void;\n\n /**\n * Removes all DOMPurify hooks.\n */\n removeAllHooks(): void;\n}\n\n/**\n * An element removed by DOMPurify.\n */\nexport interface RemovedElement {\n /**\n * The element that was removed.\n */\n element: Node;\n}\n\n/**\n * An element removed by DOMPurify.\n */\nexport interface RemovedAttribute {\n /**\n * The attribute that was removed.\n */\n attribute: Attr | null;\n\n /**\n * The element that the attribute was removed.\n */\n from: Node;\n}\n\ntype BasicHookName =\n | 'beforeSanitizeElements'\n | 'afterSanitizeElements'\n | 'uponSanitizeShadowNode';\ntype ElementHookName = 'beforeSanitizeAttributes' | 'afterSanitizeAttributes';\ntype DocumentFragmentHookName =\n | 'beforeSanitizeShadowDOM'\n | 'afterSanitizeShadowDOM';\ntype UponSanitizeElementHookName = 'uponSanitizeElement';\ntype UponSanitizeAttributeHookName = 'uponSanitizeAttribute';\n\ninterface HooksMap {\n beforeSanitizeElements: NodeHook[];\n afterSanitizeElements: NodeHook[];\n beforeSanitizeShadowDOM: DocumentFragmentHook[];\n uponSanitizeShadowNode: NodeHook[];\n afterSanitizeShadowDOM: DocumentFragmentHook[];\n beforeSanitizeAttributes: ElementHook[];\n afterSanitizeAttributes: ElementHook[];\n uponSanitizeElement: UponSanitizeElementHook[];\n uponSanitizeAttribute: UponSanitizeAttributeHook[];\n}\n\ntype ArrayElement<T> = T extends Array<infer U> ? U : never;\n\ntype HookFunction = ArrayElement<HooksMap[keyof HooksMap]>;\n\nexport type HookName =\n | BasicHookName\n | ElementHookName\n | DocumentFragmentHookName\n | UponSanitizeElementHookName\n | UponSanitizeAttributeHookName;\n\nexport type NodeHook = (\n this: DOMPurify,\n currentNode: Node,\n hookEvent: null,\n config: Config\n) => void;\n\nexport type ElementHook = (\n this: DOMPurify,\n currentNode: Element,\n hookEvent: null,\n config: Config\n) => void;\n\nexport type DocumentFragmentHook = (\n this: DOMPurify,\n currentNode: DocumentFragment,\n hookEvent: null,\n config: Config\n) => void;\n\nexport type UponSanitizeElementHook = (\n this: DOMPurify,\n currentNode: Node,\n hookEvent: UponSanitizeElementHookEvent,\n config: Config\n) => void;\n\nexport type UponSanitizeAttributeHook = (\n this: DOMPurify,\n currentNode: Element,\n hookEvent: UponSanitizeAttributeHookEvent,\n config: Config\n) => void;\n\nexport interface UponSanitizeElementHookEvent {\n tagName: string;\n allowedTags: Record<string, boolean>;\n}\n\nexport interface UponSanitizeAttributeHookEvent {\n attrName: string;\n attrValue: string;\n keepAttr: boolean;\n allowedAttributes: Record<string, boolean>;\n forceKeepAttr: boolean | undefined;\n}\n\n/**\n * A `Window`-like object containing the properties and types that DOMPurify requires.\n */\nexport type WindowLike = Pick<\n typeof globalThis,\n | 'DocumentFragment'\n | 'HTMLTemplateElement'\n | 'Node'\n | 'Element'\n | 'NodeFilter'\n | 'NamedNodeMap'\n | 'HTMLFormElement'\n | 'DOMParser'\n> & {\n document?: Document;\n MozNamedAttrMap?: typeof window.NamedNodeMap;\n} & Pick<TrustedTypesWindow, 'trustedTypes'>;\n", "import type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Gets the original marked default options.\n */\nexport function _getDefaults<ParserOutput = string, RendererOutput = string>(): MarkedOptions<ParserOutput, RendererOutput> {\n return {\n async: false,\n breaks: false,\n extensions: null,\n gfm: true,\n hooks: null,\n pedantic: false,\n renderer: null,\n silent: false,\n tokenizer: null,\n walkTokens: null,\n };\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport let _defaults: MarkedOptions<any, any> = _getDefaults();\n\nexport function changeDefaults<ParserOutput = string, RendererOutput = string>(newDefaults: MarkedOptions<ParserOutput, RendererOutput>) {\n _defaults = newDefaults;\n}\n", "const noopTest = { exec: () => null } as unknown as RegExp;\n\nfunction cachedIndentRegex(createRegex: (indent: number) => RegExp) {\n const cache: RegExp[] = [];\n return (indent: number) => {\n const cacheIndex = Math.max(0, Math.min(3, indent - 1));\n let regex = cache[cacheIndex];\n if (!regex) {\n regex = createRegex(cacheIndex);\n cache[cacheIndex] = regex;\n }\n return regex;\n };\n}\n\nfunction edit(regex: string | RegExp, opt = '') {\n let source = typeof regex === 'string' ? regex : regex.source;\n const obj = {\n replace: (name: string | RegExp, val: string | RegExp) => {\n let valSource = typeof val === 'string' ? val : val.source;\n valSource = valSource.replace(other.caret, '$1');\n source = source.replace(name, valSource);\n return obj;\n },\n getRegex: () => {\n return new RegExp(source, opt);\n },\n };\n return obj;\n}\n\n// use a default variable to ensure the regex is evaluated on client an not removed by minifiers\nconst supportsLookbehind = ((a = '') => {\ntry {\n return !!new RegExp('(?<=1)(?<!1)' + a);\n} catch {\n // See browser support here:\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Regular_expressions/Lookbehind_assertion\n return false;\n}\n})();\n\nexport const other = {\n codeRemoveIndent: /^(?: {1,4}| {0,3}\\t)/gm,\n outputLinkReplace: /\\\\([\\[\\]])/g,\n indentCodeCompensation: /^(\\s+)(?:```)/,\n beginningSpace: /^\\s+/,\n endingHash: /#$/,\n startingSpaceChar: /^ /,\n endingSpaceChar: / $/,\n nonSpaceChar: /[^ ]/,\n newLineCharGlobal: /\\n/g,\n tabCharGlobal: /\\t/g,\n multipleSpaceGlobal: /\\s+/g,\n blankLine: /^[ \\t]*$/,\n doubleBlankLine: /\\n[ \\t]*\\n[ \\t]*$/,\n blockquoteStart: /^ {0,3}>/,\n blockquoteSetextReplace: /\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,\n blockquoteSetextReplace2: /^ {0,3}>[ \\t]?/gm,\n listReplaceNesting: /^ {1,4}(?=( {4})*[^ ])/g,\n listIsTask: /^\\[[ xX]\\] +\\S/,\n listReplaceTask: /^\\[[ xX]\\] +/,\n listTaskCheckbox: /\\[[ xX]\\]/,\n anyLine: /\\n.*\\n/,\n hrefBrackets: /^<(.*)>$/,\n tableDelimiter: /[:|]/,\n tableAlignChars: /^\\||\\| *$/g,\n tableRowBlankLine: /\\n[ \\t]*$/,\n tableAlignRight: /^ *-+: *$/,\n tableAlignCenter: /^ *:-+: *$/,\n tableAlignLeft: /^ *:-+ *$/,\n startATag: /^<a /i,\n endATag: /^<\\/a>/i,\n startPreScriptTag: /^<(pre|code|kbd|script)(\\s|>)/i,\n endPreScriptTag: /^<\\/(pre|code|kbd|script)(\\s|>)/i,\n startAngleBracket: /^</,\n endAngleBracket: />$/,\n pedanticHrefTitle: /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/,\n unicodeAlphaNumeric: /[\\p{L}\\p{N}]/u,\n escapeTest: /[&<>\"']/,\n escapeReplace: /[&<>\"']/g,\n escapeTestNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,\n escapeReplaceNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,\n caret: /(^|[^\\[])\\^/g,\n percentDecode: /%25/g,\n findPipe: /\\|/g,\n splitPipe: / \\|/,\n slashPipe: /\\\\\\|/g,\n carriageReturn: /\\r\\n|\\r/g,\n spaceLine: /^ +$/gm,\n notSpaceStart: /^\\S*/,\n endingNewline: /\\n$/,\n listItemRegex: (bull: string) => new RegExp(`^( {0,3}${bull})((?:[\\t ][^\\\\n]*)?(?:\\\\n|$))`),\n nextBulletRegex: cachedIndentRegex((indent: number) => new RegExp(`^ {0,${indent}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \\t][^\\\\n]*)?(?:\\\\n|$))`)),\n hrRegex: cachedIndentRegex((indent: number) => new RegExp(`^ {0,${indent}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`)),\n fencesBeginRegex: cachedIndentRegex((indent: number) => new RegExp(`^ {0,${indent}}(?:\\`\\`\\`|~~~)`)),\n headingBeginRegex: cachedIndentRegex((indent: number) => new RegExp(`^ {0,${indent}}#`)),\n htmlBeginRegex: cachedIndentRegex((indent: number) => new RegExp(`^ {0,${indent}}<(?:[a-z].*>|!--)`, 'i')),\n blockquoteBeginRegex: cachedIndentRegex((indent: number) => new RegExp(`^ {0,${indent}}>`)),\n};\n\n/**\n * Block-Level Grammar\n */\n\nconst newline = /^(?:[ \\t]*(?:\\n|$))+/;\nconst blockCode = /^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/;\nconst fences = /^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/;\nconst hr = /^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/;\nconst heading = /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/;\nconst bullet = / {0,3}(?:[*+-]|\\d{1,9}[.)])/;\nconst lheadingCore = /^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/;\nconst lheading = edit(lheadingCore)\n .replace(/bull/g, bullet) // lists can interrupt\n .replace(/blockCode/g, /(?: {4}| {0,3}\\t)/) // indented code blocks can interrupt\n .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n .replace(/\\|table/g, '') // table not in commonmark\n .getRegex();\nconst lheadingGfm = edit(lheadingCore)\n .replace(/bull/g, bullet) // lists can interrupt\n .replace(/blockCode/g, /(?: {4}| {0,3}\\t)/) // indented code blocks can interrupt\n .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n .replace(/table/g, / {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/) // table can interrupt\n .getRegex();\nconst _paragraph = /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/;\nconst blockText = /^[^\\n]+/;\nconst _blockLabel = /(?!\\s*\\])(?:\\\\[\\s\\S]|[^\\[\\]\\\\])+/;\nconst def = edit(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/)\n .replace('label', _blockLabel)\n .replace('title', /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/)\n .getRegex();\n\nconst list = edit(/^(bull)([ \\t][^\\n]+?)?(?:\\n|$)/)\n .replace(/bull/g, bullet)\n .getRegex();\n\nconst _tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n + '|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title'\n + '|tr|track|ul';\nconst _comment = /<!--(?:-?>|[\\s\\S]*?(?:-->|$))/;\nconst html = edit(\n '^ {0,3}(?:' // optional indentation\n+ '<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n+ '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n+ '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n+ '|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)' // (4)\n+ '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)' // (5)\n+ '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (6)\n+ '|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (7) open tag\n+ '|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (7) closing tag\n+ ')', 'i')\n .replace('comment', _comment)\n .replace('tag', _tag)\n .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n .getRegex();\n\nconst paragraph = edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)])[ \\\\t]') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\n\nconst blockquote = edit(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/)\n .replace('paragraph', paragraph)\n .getRegex();\n\n/**\n * Normal Block Grammar\n */\n\nconst blockNormal = {\n blockquote,\n code: blockCode,\n def,\n fences,\n heading,\n hr,\n html,\n lheading,\n list,\n newline,\n paragraph,\n table: noopTest,\n text: blockText,\n};\n\ntype BlockKeys = keyof typeof blockNormal;\n\n/**\n * GFM Block Grammar\n */\n\nconst gfmTable = edit(\n '^ *([^\\\\n ].*)\\\\n' // Header\n+ ' {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)' // Align\n+ '(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)') // Cells\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('blockquote', ' {0,3}>')\n .replace('code', '(?: {4}| {0,3}\\t)[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)])[ \\\\t]') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n\nconst blockGfm: Record<BlockKeys, RegExp> = {\n ...blockNormal,\n lheading: lheadingGfm,\n table: gfmTable,\n paragraph: edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('table', gfmTable) // interrupt paragraphs with table\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)])[ \\\\t]') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex(),\n};\n\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\n\nconst blockPedantic: Record<BlockKeys, RegExp> = {\n ...blockNormal,\n html: edit(\n '^ *(?:comment *(?:\\\\n|\\\\s*$)'\n + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n .replace('comment', _comment)\n .replace(/tag/g, '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n .getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest, // fences not supported\n lheading: /^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n paragraph: edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' *#{1,6} *[^\\n]')\n .replace('lheading', lheading)\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('|fences', '')\n .replace('|list', '')\n .replace('|html', '')\n .replace('|tag', '')\n .getRegex(),\n};\n\n/**\n * Inline-Level Grammar\n */\n\nconst escape = /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/;\nconst inlineCode = /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/;\nconst br = /^( {2,}|\\\\)\\n(?!\\s*$)/;\nconst inlineText = /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/;\n\n// list of unicode punctuation marks, plus any missing characters from CommonMark spec\nconst _punctuation = /[\\p{P}\\p{S}]/u;\nconst _punctuationOrSpace = /[\\s\\p{P}\\p{S}]/u;\nconst _notPunctuationOrSpace = /[^\\s\\p{P}\\p{S}]/u;\nconst punctuation = edit(/^((?![*_])punctSpace)/, 'u')\n .replace(/punctSpace/g, _punctuationOrSpace).getRegex();\n\n// GFM allows ~ inside strong and em for strikethrough\nconst _punctuationGfmStrongEm = /(?!~)[\\p{P}\\p{S}]/u;\nconst _punctuationOrSpaceGfmStrongEm = /(?!~)[\\s\\p{P}\\p{S}]/u;\nconst _notPunctuationOrSpaceGfmStrongEm = /(?:[^\\s\\p{P}\\p{S}]|~)/u;\n\n// sequences em should skip over [title](link), `code`, <html>\nconst blockSkip = edit(/link|precode-code|html/, 'g')\n .replace('link', /\\[(?:[^\\[\\]`]|(?<a>`+)[^`]+\\k<a>(?!`))*?\\]\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)]|\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)])*\\))*\\)/)\n .replace('precode-', supportsLookbehind ? '(?<!`)()' : '(^^|[^`])')\n .replace('code', /(?<b>`+)[^`]+\\k<b>(?!`)/)\n .replace('html', /<(?! )[^<>]*?>/)\n .getRegex();\n\nconst emStrongLDelimCore = /^(?:\\*+(?:((?!\\*)punct)|([^\\s*]))?)|^_+(?:((?!_)punct)|([^\\s_]))?/;\n\nconst emStrongLDelim = edit(emStrongLDelimCore, 'u')\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst emStrongLDelimGfm = edit(emStrongLDelimCore, 'u')\n .replace(/punct/g, _punctuationGfmStrongEm)\n .getRegex();\n\nconst emStrongRDelimAstCore =\n '^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)' // Skip orphan inside strong\n+ '|[^*]+(?=[^*])' // Consume to delim\n+ '|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)' // (1) #*** can only be a Right Delimiter\n+ '|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)' // (2) a***#, a*** can only be a Right Delimiter\n+ '|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)' // (3) #***a, ***a can only be Left Delimiter\n+ '|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)' // (4) ***# can only be Left Delimiter\n+ '|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)' // (5) #***# can be either Left or Right Delimiter\n+ '|notPunctSpace(\\\\*+)(?=notPunctSpace)'; // (6) a***a can be either Left or Right Delimiter\n\nconst emStrongRDelimAst = edit(emStrongRDelimAstCore, 'gu')\n .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n .replace(/punctSpace/g, _punctuationOrSpace)\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst emStrongRDelimAstGfm = edit(emStrongRDelimAstCore, 'gu')\n .replace(/notPunctSpace/g, _notPunctuationOrSpaceGfmStrongEm)\n .replace(/punctSpace/g, _punctuationOrSpaceGfmStrongEm)\n .replace(/punct/g, _punctuationGfmStrongEm)\n .getRegex();\n\n// (6) Not allowed for _\nconst emStrongRDelimUnd = edit(\n '^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)' // Skip orphan inside strong\n+ '|[^_]+(?=[^_])' // Consume to delim\n+ '|(?!_)punct(_+)(?=[\\\\s]|$)' // (1) #___ can only be a Right Delimiter\n+ '|notPunctSpace(_+)(?!_)(?=punctSpace|$)' // (2) a___#, a___ can only be a Right Delimiter\n+ '|(?!_)punctSpace(_+)(?=notPunctSpace)' // (3) #___a, ___a can only be Left Delimiter\n+ '|[\\\\s](_+)(?!_)(?=punct)' // (4) ___# can only be Left Delimiter\n+ '|(?!_)punct(_+)(?!_)(?=punct)', 'gu') // (5) #___# can be either Left or Right Delimiter\n .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n .replace(/punctSpace/g, _punctuationOrSpace)\n .replace(/punct/g, _punctuation)\n .getRegex();\n\n// Tilde left delimiter for strikethrough (similar to emStrongLDelim for asterisk)\nconst delLDelim = edit(/^~~?(?:((?!~)punct)|[^\\s~])/, 'u')\n .replace(/punct/g, _punctuation)\n .getRegex();\n\n// Tilde delimiter patterns for strikethrough (similar to asterisk)\nconst delRDelimCore =\n '^[^~]+(?=[^~])' // Consume to delim\n+ '|(?!~)punct(~~?)(?=[\\\\s]|$)' // (1) #~~ can only be a Right Delimiter\n+ '|notPunctSpace(~~?)(?!~)(?=punctSpace|$)' // (2) a~~#, a~~ can only be a Right Delimiter\n+ '|(?!~)punctSpace(~~?)(?=notPunctSpace)' // (3) #~~a, ~~a can only be Left Delimiter\n+ '|[\\\\s](~~?)(?!~)(?=punct)' // (4) ~~# can only be Left Delimiter\n+ '|(?!~)punct(~~?)(?!~)(?=punct)' // (5) #~~# can be either Left or Right Delimiter\n+ '|notPunctSpace(~~?)(?=notPunctSpace)'; // (6) a~~a can be either Left or Right Delimiter\n\nconst delRDelim = edit(delRDelimCore, 'gu')\n .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n .replace(/punctSpace/g, _punctuationOrSpace)\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst anyPunctuation = edit(/\\\\(punct)/, 'gu')\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst autolink = edit(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/)\n .replace('scheme', /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/)\n .replace('email', /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/)\n .getRegex();\n\nconst _inlineComment = edit(_comment).replace('(?:-->|$)', '-->').getRegex();\nconst tag = edit(\n '^comment'\n + '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>') // CDATA section\n .replace('comment', _inlineComment)\n .replace('attribute', /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/)\n .getRegex();\n\nconst _inlineLabel = /(?:\\[(?:\\\\[\\s\\S]|[^\\[\\]\\\\])*\\]|\\\\[\\s\\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\\])|[^\\[\\]\\\\`])*?/;\n\nconst link = edit(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]+(?:\\n[ \\t]*)?|\\n[ \\t]*)(title))?\\s*\\)/)\n .replace('label', _inlineLabel)\n .replace('href', /<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]*/)\n .replace('title', /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/)\n .getRegex();\n\nconst reflink = edit(/^!?\\[(label)\\]\\[(ref)\\]/)\n .replace('label', _inlineLabel)\n .replace('ref', _blockLabel)\n .getRegex();\n\nconst nolink = edit(/^!?\\[(ref)\\](?:\\[\\])?/)\n .replace('ref', _blockLabel)\n .getRegex();\n\nconst reflinkSearch = edit('reflink|nolink(?!\\\\()', 'g')\n .replace('reflink', reflink)\n .replace('nolink', nolink)\n .getRegex();\n\nconst _caseInsensitiveProtocol = /[hH][tT][tT][pP][sS]?|[fF][tT][pP]/;\n\n/**\n * Normal Inline Grammar\n */\n\nconst inlineNormal = {\n _backpedal: noopTest, // only used for GFM url\n anyPunctuation,\n autolink,\n blockSkip,\n br,\n code: inlineCode,\n del: noopTest,\n delLDelim: noopTest,\n delRDelim: noopTest,\n emStrongLDelim,\n emStrongRDelimAst,\n emStrongRDelimUnd,\n escape,\n link,\n nolink,\n punctuation,\n reflink,\n reflinkSearch,\n tag,\n text: inlineText,\n url: noopTest,\n};\n\ntype InlineKeys = keyof typeof inlineNormal;\n\n/**\n * Pedantic Inline Grammar\n */\n\nconst inlinePedantic: Record<InlineKeys, RegExp> = {\n ...inlineNormal,\n link: edit(/^!?\\[(label)\\]\\((.*?)\\)/)\n .replace('label', _inlineLabel)\n .getRegex(),\n reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n .replace('label', _inlineLabel)\n .getRegex(),\n};\n\n/**\n * GFM Inline Grammar\n */\n\nconst inlineGfm: Record<InlineKeys, RegExp> = {\n ...inlineNormal,\n emStrongRDelimAst: emStrongRDelimAstGfm,\n emStrongLDelim: emStrongLDelimGfm,\n delLDelim,\n delRDelim,\n url: edit(/^((?:protocol):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/)\n .replace('protocol', _caseInsensitiveProtocol)\n .replace('email', /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/)\n .getRegex(),\n _backpedal: /(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])((?:\\\\[\\s\\S]|[^\\\\])*?(?:\\\\[\\s\\S]|[^\\s~\\\\]))\\1(?=[^~]|$)/,\n text: edit(/^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|protocol:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/)\n .replace('protocol', _caseInsensitiveProtocol)\n .getRegex(),\n};\n\n/**\n * GFM + Line Breaks Inline Grammar\n */\n\nconst inlineBreaks: Record<InlineKeys, RegExp> = {\n ...inlineGfm,\n br: edit(br).replace('{2,}', '*').getRegex(),\n text: edit(inlineGfm.text)\n .replace('\\\\b_', '\\\\b_| {2,}\\\\n')\n .replace(/\\{2,\\}/g, '*')\n .getRegex(),\n};\n\n/**\n * exports\n */\n\nexport const block = {\n normal: blockNormal,\n gfm: blockGfm,\n pedantic: blockPedantic,\n};\n\nexport const inline = {\n normal: inlineNormal,\n gfm: inlineGfm,\n breaks: inlineBreaks,\n pedantic: inlinePedantic,\n};\n\nexport interface Rules {\n other: typeof other\n block: Record<BlockKeys, RegExp>\n inline: Record<InlineKeys, RegExp>\n}\n", "import { other } from './rules.ts';\n\n/**\n * Helpers\n */\nconst escapeReplacements: { [index: string]: string } = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n};\nconst getEscapeReplacement = (ch: string) => escapeReplacements[ch];\n\nexport function escapeHtmlEntities(html: string, encode?: boolean) {\n if (encode) {\n if (other.escapeTest.test(html)) {\n return html.replace(other.escapeReplace, getEscapeReplacement);\n }\n } else {\n if (other.escapeTestNoEncode.test(html)) {\n return html.replace(other.escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n\n return html;\n}\n\nexport function cleanUrl(href: string) {\n try {\n href = encodeURI(href).replace(other.percentDecode, '%');\n } catch {\n return null;\n }\n return href;\n}\n\nexport function splitCells(tableRow: string, count?: number) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n const row = tableRow.replace(other.findPipe, (match, offset, str) => {\n let escaped = false;\n let curr = offset;\n while (--curr >= 0 && str[curr] === '\\\\') escaped = !escaped;\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n } else {\n // add space before unescaped |\n return ' |';\n }\n }),\n cells = row.split(other.splitPipe);\n let i = 0;\n\n // First/last cell in a row cannot be empty if it has no leading/trailing pipe\n if (!cells[0].trim()) {\n cells.shift();\n }\n if (cells.length > 0 && !cells.at(-1)?.trim()) {\n cells.pop();\n }\n\n if (count) {\n if (cells.length > count) {\n cells.splice(count);\n } else {\n while (cells.length < count) cells.push('');\n }\n }\n\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(other.slashPipe, '|');\n }\n return cells;\n}\n\n/**\n * Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n * /c*$/ is vulnerable to REDOS.\n *\n * @param str\n * @param c\n * @param invert Remove suffix of non-c chars instead. Default falsey.\n */\nexport function rtrim(str: string, c: string, invert?: boolean) {\n const l = str.length;\n if (l === 0) {\n return '';\n }\n\n // Length of suffix matching the invert condition.\n let suffLen = 0;\n\n // Step left until we fail to match the invert condition.\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n } else if (currChar !== c && invert) {\n suffLen++;\n } else {\n break;\n }\n }\n\n return str.slice(0, l - suffLen);\n}\n\nexport function trimTrailingBlankLines(str: string) {\n const lines = str.split('\\n');\n let end = lines.length - 1;\n while (end >= 0 && other.blankLine.test(lines[end])) {\n end--;\n }\n if (lines.length - end <= 2) {\n // we want to keep single trailing blank lines\n return str;\n }\n\n return lines.slice(0, end + 1).join('\\n');\n}\n\nexport function findClosingBracket(str: string, b: string) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n\n let level = 0;\n for (let i = 0; i < str.length; i++) {\n if (str[i] === '\\\\') {\n i++;\n } else if (str[i] === b[0]) {\n level++;\n } else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n if (level > 0) {\n return -2;\n }\n\n return -1;\n}\n\nexport function expandTabs(line: string, indent = 0) {\n let col = indent;\n let expanded = '';\n for (const char of line) {\n if (char === '\\t') {\n const added = 4 - (col % 4);\n expanded += ' '.repeat(added);\n col += added;\n } else {\n expanded += char;\n col++;\n }\n }\n\n return expanded;\n}\n", "import { _defaults } from './defaults.ts';\nimport {\n rtrim,\n splitCells,\n findClosingBracket,\n expandTabs,\n trimTrailingBlankLines,\n} from './helpers.ts';\nimport type { Rules } from './rules.ts';\nimport type { _Lexer } from './Lexer.ts';\nimport type { Links, Tokens, Token } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\nfunction outputLink(cap: string[], link: Pick<Tokens.Link, 'href' | 'title'>, raw: string, lexer: _Lexer, rules: Rules): Tokens.Link | Tokens.Image {\n const href = link.href;\n const title = link.title || null;\n const text = cap[1].replace(rules.other.outputLinkReplace, '$1');\n\n lexer.state.inLink = true;\n const token: Tokens.Link | Tokens.Image = {\n type: cap[0].charAt(0) === '!' ? 'image' : 'link',\n raw,\n href,\n title,\n text,\n tokens: lexer.inlineTokens(text),\n };\n lexer.state.inLink = false;\n return token;\n}\n\nfunction indentCodeCompensation(raw: string, text: string, rules: Rules) {\n const matchIndentToCode = raw.match(rules.other.indentCodeCompensation);\n\n if (matchIndentToCode === null) {\n return text;\n }\n\n const indentToCode = matchIndentToCode[1];\n\n return text\n .split('\\n')\n .map(node => {\n const matchIndentInNode = node.match(rules.other.beginningSpace);\n if (matchIndentInNode === null) {\n return node;\n }\n\n const [indentInNode] = matchIndentInNode;\n\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n\n return node;\n })\n .join('\\n');\n}\n\n/**\n * Tokenizer\n */\nexport class _Tokenizer<ParserOutput = string, RendererOutput = string> {\n options: MarkedOptions<ParserOutput, RendererOutput>;\n rules!: Rules; // set by the lexer\n lexer!: _Lexer<ParserOutput, RendererOutput>; // set by the lexer\n\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n this.options = options || _defaults;\n }\n\n space(src: string): Tokens.Space | undefined {\n const cap = this.rules.block.newline.exec(src);\n if (cap && cap[0].length > 0) {\n return {\n type: 'space',\n raw: cap[0],\n };\n }\n }\n\n code(src: string): Tokens.Code | undefined {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const raw = this.options.pedantic\n ? cap[0]\n : trimTrailingBlankLines(cap[0]);\n const text = raw.replace(this.rules.other.codeRemoveIndent, '');\n return {\n type: 'code',\n raw,\n codeBlockStyle: 'indented',\n text,\n };\n }\n }\n\n fences(src: string): Tokens.Code | undefined {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || '', this.rules);\n\n return {\n type: 'code',\n raw,\n lang: cap[2] ? cap[2].trim().replace(this.rules.inline.anyPunctuation, '$1') : cap[2],\n text,\n };\n }\n }\n\n heading(src: string): Tokens.Heading | undefined {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n\n // remove trailing #s\n if (this.rules.other.endingHash.test(text)) {\n const trimmed = rtrim(text, '#');\n if (this.options.pedantic) {\n text = trimmed.trim();\n } else if (!trimmed || this.rules.other.endingSpaceChar.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n\n return {\n type: 'heading',\n raw: rtrim(cap[0], '\\n'),\n depth: cap[1].length,\n text,\n tokens: this.lexer.inline(text),\n };\n }\n }\n\n hr(src: string): Tokens.Hr | undefined {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: 'hr',\n raw: rtrim(cap[0], '\\n'),\n };\n }\n }\n\n blockquote(src: string): Tokens.Blockquote | undefined {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n let lines = rtrim(cap[0], '\\n').split('\\n');\n let raw = '';\n let text = '';\n const tokens: Token[] = [];\n\n while (lines.length > 0) {\n let inBlockquote = false;\n const currentLines = [];\n\n let i;\n for (i = 0; i < lines.length; i++) {\n // get lines up to a continuation\n if (this.rules.other.blockquoteStart.test(lines[i])) {\n currentLines.push(lines[i]);\n inBlockquote = true;\n } else if (!inBlockquote) {\n currentLines.push(lines[i]);\n } else {\n break;\n }\n }\n lines = lines.slice(i);\n\n const currentRaw = currentLines.join('\\n');\n const currentText = currentRaw\n // precede setext continuation with 4 spaces so it isn't a setext\n .replace(this.rules.other.blockquoteSetextReplace, '\\n $1')\n .replace(this.rules.other.blockquoteSetextReplace2, '');\n raw = raw ? `${raw}\\n${currentRaw}` : currentRaw;\n text = text ? `${text}\\n${currentText}` : currentText;\n\n // parse blockquote lines as top level tokens\n // merge paragraphs if this is a continuation\n const top = this.lexer.state.top;\n this.lexer.state.top = true;\n this.lexer.blockTokens(currentText, tokens, true);\n this.lexer.state.top = top;\n\n // if there is no continuation then we are done\n if (lines.length === 0) {\n break;\n }\n\n const lastToken = tokens.at(-1);\n\n if (lastToken?.type === 'code') {\n // blockquote continuation cannot be preceded by a code block\n break;\n } else if (lastToken?.type === 'blockquote') {\n // include continuation in nested blockquote\n const oldToken = lastToken as Tokens.Blockquote;\n const newText = oldToken.raw + '\\n' + lines.join('\\n');\n const newToken = this.blockquote(newText)!;\n tokens[tokens.length - 1] = newToken;\n\n raw = raw.substring(0, raw.length - oldToken.raw.length) + newToken.raw;\n text = text.substring(0, text.length - oldToken.text.length) + newToken.text;\n break;\n } else if (lastToken?.type === 'list') {\n // include continuation in nested list\n const oldToken = lastToken as Tokens.List;\n const newText = oldToken.raw + '\\n' + lines.join('\\n');\n const newToken = this.list(newText)!;\n tokens[tokens.length - 1] = newToken;\n\n raw = raw.substring(0, raw.length - lastToken.raw.length) + newToken.raw;\n text = text.substring(0, text.length - oldToken.raw.length) + newToken.raw;\n lines = newText.substring(tokens.at(-1)!.raw.length).split('\\n');\n continue;\n }\n }\n\n return {\n type: 'blockquote',\n raw,\n tokens,\n text,\n };\n }\n }\n\n list(src: string): Tokens.List | undefined {\n let cap = this.rules.block.list.exec(src);\n if (cap) {\n let bull = cap[1].trim();\n const isordered = bull.length > 1;\n\n const list: Tokens.List = {\n type: 'list',\n raw: '',\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: [],\n };\n\n bull = isordered ? `\\\\d{1,9}\\\\${bull.slice(-1)}` : `\\\\${bull}`;\n\n if (this.options.pedantic) {\n bull = isordered ? bull : '[*+-]';\n }\n\n // Get next list item\n const itemRegex = this.rules.other.listItemRegex(bull);\n let endsWithBlankLine = false;\n // Check if current bullet point can start a new List Item\n while (src) {\n let endEarly = false;\n let raw = '';\n let itemContents = '';\n if (!(cap = itemRegex.exec(src))) {\n break;\n }\n\n if (this.rules.block.hr.test(src)) { // End list if bullet was actually HR (possibly move into itemRegex?)\n break;\n }\n\n raw = cap[0];\n src = src.substring(raw.length);\n\n let line = expandTabs(cap[2].split('\\n', 1)[0], cap[1].length);\n let nextLine = src.split('\\n', 1)[0];\n let blankLine = !line.trim();\n\n let indent = 0;\n if (this.options.pedantic) {\n indent = 2;\n itemContents = line.trimStart();\n } else if (blankLine) {\n indent = cap[1].length + 1;\n } else {\n indent = line.search(this.rules.other.nonSpaceChar); // Find first non-space char\n indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent\n itemContents = line.slice(indent);\n indent += cap[1].length;\n }\n\n if (blankLine && this.rules.other.blankLine.test(nextLine)) { // Items begin with at most one blank line\n raw += nextLine + '\\n';\n src = src.substring(nextLine.length + 1);\n endEarly = true;\n }\n\n if (!endEarly) {\n const nextBulletRegex = this.rules.other.nextBulletRegex(indent);\n const hrRegex = this.rules.other.hrRegex(indent);\n const fencesBeginRegex = this.rules.other.fencesBeginRegex(indent);\n const headingBeginRegex = this.rules.other.headingBeginRegex(indent);\n const htmlBeginRegex = this.rules.other.htmlBeginRegex(indent);\n const blockquoteBeginRegex = this.rules.other.blockquoteBeginRegex(indent);\n\n // Check if following lines should be included in List Item\n while (src) {\n const rawLine = src.split('\\n', 1)[0];\n let nextLineWithoutTabs;\n nextLine = rawLine;\n\n // Re-align to follow commonmark nesting rules\n if (this.options.pedantic) {\n nextLine = nextLine.replace(this.rules.other.listReplaceNesting, ' ');\n nextLineWithoutTabs = nextLine;\n } else {\n nextLineWithoutTabs = nextLine.replace(this.rules.other.tabCharGlobal, ' ');\n }\n\n // End list item if found code fences\n if (fencesBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of new heading\n if (headingBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of html block\n if (htmlBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of blockquote\n if (blockquoteBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of new bullet\n if (nextBulletRegex.test(nextLine)) {\n break;\n }\n\n // Horizontal rule found\n if (hrRegex.test(nextLine)) {\n break;\n }\n\n if (nextLineWithoutTabs.search(this.rules.other.nonSpaceChar) >= indent || !nextLine.trim()) { // Dedent if possible\n itemContents += '\\n' + nextLineWithoutTabs.slice(indent);\n } else {\n // not enough indentation\n if (blankLine) {\n break;\n }\n\n // paragraph continuation unless last line was a different block level element\n if (line.replace(this.rules.other.tabCharGlobal, ' ').search(this.rules.other.nonSpaceChar) >= 4) { // indented code block\n break;\n }\n if (fencesBeginRegex.test(line)) {\n break;\n }\n if (headingBeginRegex.test(line)) {\n break;\n }\n if (hrRegex.test(line)) {\n break;\n }\n\n itemContents += '\\n' + nextLine;\n }\n\n blankLine = !nextLine.trim();\n\n raw += rawLine + '\\n';\n src = src.substring(rawLine.length + 1);\n line = nextLineWithoutTabs.slice(indent);\n }\n }\n\n if (!list.loose) {\n // If the previous item ended with a blank line, the list is loose\n if (endsWithBlankLine) {\n list.loose = true;\n } else if (this.rules.other.doubleBlankLine.test(raw)) {\n endsWithBlankLine = true;\n }\n }\n\n list.items.push({\n type: 'list_item',\n raw,\n task: !!this.options.gfm && this.rules.other.listIsTask.test(itemContents),\n loose: false,\n text: itemContents,\n tokens: [],\n });\n\n list.raw += raw;\n }\n\n // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic\n const lastItem = list.items.at(-1);\n if (lastItem) {\n lastItem.raw = lastItem.raw.trimEnd();\n lastItem.text = lastItem.text.trimEnd();\n } else {\n // not a list since there were no items\n return;\n }\n list.raw = list.raw.trimEnd();\n\n // Item child tokens handled here at end because we needed to have the final item to trim it first\n for (const item of list.items) {\n this.lexer.state.top = false;\n item.tokens = this.lexer.blockTokens(item.text, []);\n const itemToken = item.tokens[0];\n if (item.task && (itemToken?.type === 'text' || itemToken?.type === 'paragraph')) {\n // Remove checkbox markdown from item tokens\n item.text = item.text.replace(this.rules.other.listReplaceTask, '');\n itemToken.raw = itemToken.raw.replace(this.rules.other.listReplaceTask, '');\n itemToken.text = itemToken.text.replace(this.rules.other.listReplaceTask, '');\n for (let i = this.lexer.inlineQueue.length - 1; i >= 0; i--) {\n if (this.rules.other.listIsTask.test(this.lexer.inlineQueue[i].src)) {\n this.lexer.inlineQueue[i].src = this.lexer.inlineQueue[i].src.replace(this.rules.other.listReplaceTask, '');\n break;\n }\n }\n\n const taskRaw = this.rules.other.listTaskCheckbox.exec(item.raw);\n if (taskRaw) {\n const checkboxToken: Tokens.Checkbox = {\n type: 'checkbox',\n raw: taskRaw[0] + ' ',\n checked: taskRaw[0] !== '[ ]',\n };\n item.checked = checkboxToken.checked;\n if (list.loose) {\n if (item.tokens[0] && ['paragraph', 'text'].includes(item.tokens[0].type) && 'tokens' in item.tokens[0] && item.tokens[0].tokens) {\n item.tokens[0].raw = checkboxToken.raw + item.tokens[0].raw;\n item.tokens[0].text = checkboxToken.raw + item.tokens[0].text;\n item.tokens[0].tokens.unshift(checkboxToken);\n } else {\n item.tokens.unshift({\n type: 'paragraph',\n raw: checkboxToken.raw,\n text: checkboxToken.raw,\n tokens: [checkboxToken],\n });\n }\n } else {\n item.tokens.unshift(checkboxToken);\n }\n }\n } else if (item.task) {\n item.task = false;\n }\n\n if (!list.loose) {\n // Check if list should be loose\n const spacers = item.tokens.filter(t => t.type === 'space');\n const hasMultipleLineBreaks = spacers.length > 0 && spacers.some(t => this.rules.other.anyLine.test(t.raw));\n\n list.loose = hasMultipleLineBreaks;\n }\n }\n\n // Set all items to loose if list is loose\n if (list.loose) {\n for (const item of list.items) {\n item.loose = true;\n for (const token of item.tokens) {\n if (token.type === 'text') {\n token.type = 'paragraph';\n }\n }\n }\n }\n\n return list;\n }\n }\n\n html(src: string): Tokens.HTML | undefined {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n const raw = trimTrailingBlankLines(cap[0]);\n const token: Tokens.HTML = {\n type: 'html',\n block: true,\n raw,\n pre: cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style',\n text: raw,\n };\n return token;\n }\n }\n\n def(src: string): Tokens.Def | undefined {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n const tag = cap[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal, ' ');\n const href = cap[2] ? cap[2].replace(this.rules.other.hrefBrackets, '$1').replace(this.rules.inline.anyPunctuation, '$1') : '';\n const title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline.anyPunctuation, '$1') : cap[3];\n return {\n type: 'def',\n tag,\n raw: rtrim(cap[0], '\\n'),\n href,\n title,\n };\n }\n }\n\n table(src: string): Tokens.Table | undefined {\n const cap = this.rules.block.table.exec(src);\n if (!cap) {\n return;\n }\n\n if (!this.rules.other.tableDelimiter.test(cap[2])) {\n // delimiter row must have a pipe (|) or colon (:) otherwise it is a setext heading\n return;\n }\n\n const headers = splitCells(cap[1]);\n const aligns = cap[2].replace(this.rules.other.tableAlignChars, '').split('|');\n const rows = cap[3]?.trim() ? cap[3].replace(this.rules.other.tableRowBlankLine, '').split('\\n') : [];\n\n const item: Tokens.Table = {\n type: 'table',\n raw: rtrim(cap[0], '\\n'),\n header: [],\n align: [],\n rows: [],\n };\n\n if (headers.length !== aligns.length) {\n // header and align columns must be equal, rows can be different.\n return;\n }\n\n for (const align of aligns) {\n if (this.rules.other.tableAlignRight.test(align)) {\n item.align.push('right');\n } else if (this.rules.other.tableAlignCenter.test(align)) {\n item.align.push('center');\n } else if (this.rules.other.tableAlignLeft.test(align)) {\n item.align.push('left');\n } else {\n item.align.push(null);\n }\n }\n\n for (let i = 0; i < headers.length; i++) {\n item.header.push({\n text: headers[i],\n tokens: this.lexer.inline(headers[i]),\n header: true,\n align: item.align[i],\n });\n }\n\n for (const row of rows) {\n item.rows.push(splitCells(row, item.header.length).map((cell, i) => {\n return {\n text: cell,\n tokens: this.lexer.inline(cell),\n header: false,\n align: item.align[i],\n };\n }));\n }\n\n return item;\n }\n\n lheading(src: string): Tokens.Heading | undefined {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n const text = cap[1].trim();\n return {\n type: 'heading',\n raw: rtrim(cap[0], '\\n'),\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text,\n tokens: this.lexer.inline(text),\n };\n }\n }\n\n paragraph(src: string): Tokens.Paragraph | undefined {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n const text = cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1];\n return {\n type: 'paragraph',\n raw: cap[0],\n text,\n tokens: this.lexer.inline(text),\n };\n }\n }\n\n text(src: string): Tokens.Text | undefined {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n tokens: this.lexer.inline(cap[0]),\n };\n }\n }\n\n escape(src: string): Tokens.Escape | undefined {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: cap[1],\n };\n }\n }\n\n tag(src: string): Tokens.Tag | undefined {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!this.lexer.state.inLink && this.rules.other.startATag.test(cap[0])) {\n this.lexer.state.inLink = true;\n } else if (this.lexer.state.inLink && this.rules.other.endATag.test(cap[0])) {\n this.lexer.state.inLink = false;\n }\n if (!this.lexer.state.inRawBlock && this.rules.other.startPreScriptTag.test(cap[0])) {\n this.lexer.state.inRawBlock = true;\n } else if (this.lexer.state.inRawBlock && this.rules.other.endPreScriptTag.test(cap[0])) {\n this.lexer.state.inRawBlock = false;\n }\n\n return {\n type: 'html',\n raw: cap[0],\n inLink: this.lexer.state.inLink,\n inRawBlock: this.lexer.state.inRawBlock,\n block: false,\n text: cap[0],\n };\n }\n }\n\n link(src: string): Tokens.Link | Tokens.Image | undefined {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && this.rules.other.startAngleBracket.test(trimmedUrl)) {\n // commonmark requires matching angle brackets\n if (!(this.rules.other.endAngleBracket.test(trimmedUrl))) {\n return;\n }\n\n // ending angle bracket cannot be escaped\n const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\\\');\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n } else {\n // find closing parenthesis\n const lastParenIndex = findClosingBracket(cap[2], '()');\n if (lastParenIndex === -2) {\n // more open parens than closed\n return;\n }\n\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n let href = cap[2];\n let title = '';\n if (this.options.pedantic) {\n // split pedantic href and title\n const link = this.rules.other.pedanticHrefTitle.exec(href);\n\n if (link) {\n href = link[1];\n title = link[3];\n }\n } else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n\n href = href.trim();\n if (this.rules.other.startAngleBracket.test(href)) {\n if (this.options.pedantic && !(this.rules.other.endAngleBracket.test(trimmedUrl))) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n } else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline.anyPunctuation, '$1') : href,\n title: title ? title.replace(this.rules.inline.anyPunctuation, '$1') : title,\n }, cap[0], this.lexer, this.rules);\n }\n }\n\n reflink(src: string, links: Links): Tokens.Link | Tokens.Image | Tokens.Text | undefined {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src))\n || (cap = this.rules.inline.nolink.exec(src))) {\n const linkString = (cap[2] || cap[1]).replace(this.rules.other.multipleSpaceGlobal, ' ');\n const link = links[linkString.toLowerCase()];\n if (!link) {\n const text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text,\n };\n }\n return outputLink(cap, link, cap[0], this.lexer, this.rules);\n }\n }\n\n emStrong(src: string, maskedSrc: string, prevChar = ''): Tokens.Em | Tokens.Strong | undefined {\n let match = this.rules.inline.emStrongLDelim.exec(src);\n if (!match) return;\n if (!match[1] && !match[2] && !match[3] && !match[4]) return;\n\n // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n if (match[4] && prevChar.match(this.rules.other.unicodeAlphaNumeric)) return;\n\n const nextChar = match[1] || match[3] || '';\n\n if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n // unicode Regex counts emoji as 1 char; spread into array for proper count (used multiple times below)\n const lLength = [...match[0]].length - 1;\n let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n\n const endReg = match[0][0] === '*' ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;\n endReg.lastIndex = 0;\n\n // Clip maskedSrc to same section of string as src (move to lexer?)\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n\n while ((match = endReg.exec(maskedSrc)) !== null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n\n if (!rDelim) continue; // skip single * in __abc*abc__\n\n rLength = [...rDelim].length;\n\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n } else if (match[5] || match[6]) { // either Left or Right Delim\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue; // CommonMark Emphasis Rules 9-10\n }\n }\n\n delimTotal -= rLength;\n\n if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n\n // Remove extra characters. *a*** -> *a*\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n // char length can be >1 for unicode characters;\n const lastCharLength = [...match[0]][0].length;\n const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n\n // Create `em` if smallest delimiter has odd char count. *a***\n if (Math.min(lLength, rLength) % 2) {\n const text = raw.slice(1, -1);\n return {\n type: 'em',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text),\n };\n }\n\n // Create 'strong' if smallest delimiter has even char count. **a***\n const text = raw.slice(2, -2);\n return {\n type: 'strong',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text),\n };\n }\n }\n }\n\n codespan(src: string): Tokens.Codespan | undefined {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(this.rules.other.newLineCharGlobal, ' ');\n const hasNonSpaceChars = this.rules.other.nonSpaceChar.test(text);\n const hasSpaceCharsOnBothEnds = this.rules.other.startingSpaceChar.test(text) && this.rules.other.endingSpaceChar.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n return {\n type: 'codespan',\n raw: cap[0],\n text,\n };\n }\n }\n\n br(src: string): Tokens.Br | undefined {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: 'br',\n raw: cap[0],\n };\n }\n }\n\n del(src: string, maskedSrc: string, prevChar = ''): Tokens.Del | undefined {\n let match = this.rules.inline.delLDelim.exec(src);\n if (!match) return;\n\n const nextChar = match[1] || '';\n\n if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n // unicode Regex counts emoji as 1 char; spread into array for proper count\n const lLength = [...match[0]].length - 1;\n let rDelim, rLength, delimTotal = lLength;\n\n const endReg = this.rules.inline.delRDelim;\n endReg.lastIndex = 0;\n\n // Clip maskedSrc to same section of string as src\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n\n while ((match = endReg.exec(maskedSrc)) !== null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n\n if (!rDelim) continue;\n\n rLength = [...rDelim].length;\n\n if (rLength !== lLength) continue;\n\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n }\n\n delimTotal -= rLength;\n\n if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n\n // Remove extra characters\n rLength = Math.min(rLength, rLength + delimTotal);\n // char length can be >1 for unicode characters\n const lastCharLength = [...match[0]][0].length;\n const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n\n // Create del token - only single ~ or double ~~ supported\n const text = raw.slice(lLength, -lLength);\n return {\n type: 'del',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text),\n };\n }\n }\n }\n\n autolink(src: string): Tokens.Link | undefined {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === '@') {\n text = cap[1];\n href = 'mailto:' + text;\n } else {\n text = cap[1];\n href = text;\n }\n\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text,\n },\n ],\n };\n }\n }\n\n url(src: string): Tokens.Link | undefined {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === '@') {\n text = cap[0];\n href = 'mailto:' + text;\n } else {\n // do extended autolink path validation\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])?.[0] ?? '';\n } while (prevCapZero !== cap[0]);\n text = cap[0];\n if (cap[1] === 'www.') {\n href = 'http://' + cap[0];\n } else {\n href = cap[0];\n }\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text,\n },\n ],\n };\n }\n }\n\n inlineText(src: string): Tokens.Text | undefined {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n const escaped = this.lexer.state.inRawBlock;\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n escaped,\n };\n }\n }\n}\n", "import { _Tokenizer } from './Tokenizer.ts';\nimport { _defaults } from './defaults.ts';\nimport { other, block, inline } from './rules.ts';\nimport type { Token, TokensList, Tokens } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Block Lexer\n */\nexport class _Lexer<ParserOutput = string, RendererOutput = string> {\n tokens: TokensList;\n options: MarkedOptions<ParserOutput, RendererOutput>;\n state: {\n inLink: boolean;\n inRawBlock: boolean;\n top: boolean;\n };\n\n public inlineQueue: { src: string, tokens: Token[] }[];\n\n private tokenizer: _Tokenizer<ParserOutput, RendererOutput>;\n\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n // TokenList cannot be created in one go\n this.tokens = [] as unknown as TokensList;\n this.tokens.links = Object.create(null);\n this.options = options || _defaults;\n this.options.tokenizer = this.options.tokenizer || new _Tokenizer<ParserOutput, RendererOutput>();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n this.tokenizer.lexer = this;\n this.inlineQueue = [];\n this.state = {\n inLink: false,\n inRawBlock: false,\n top: true,\n };\n\n const rules = {\n other,\n block: block.normal,\n inline: inline.normal,\n };\n\n if (this.options.pedantic) {\n rules.block = block.pedantic;\n rules.inline = inline.pedantic;\n } else if (this.options.gfm) {\n rules.block = block.gfm;\n if (this.options.breaks) {\n rules.inline = inline.breaks;\n } else {\n rules.inline = inline.gfm;\n }\n }\n this.tokenizer.rules = rules;\n }\n\n /**\n * Expose Rules\n */\n static get rules() {\n return {\n block,\n inline,\n };\n }\n\n /**\n * Static Lex Method\n */\n static lex<ParserOutput = string, RendererOutput = string>(src: string, options?: MarkedOptions<ParserOutput, RendererOutput>) {\n const lexer = new _Lexer<ParserOutput, RendererOutput>(options);\n return lexer.lex(src);\n }\n\n /**\n * Static Lex Inline Method\n */\n static lexInline<ParserOutput = string, RendererOutput = string>(src: string, options?: MarkedOptions<ParserOutput, RendererOutput>) {\n const lexer = new _Lexer<ParserOutput, RendererOutput>(options);\n return lexer.inlineTokens(src);\n }\n\n /**\n * Preprocessing\n */\n lex(src: string) {\n src = src.replace(other.carriageReturn, '\\n');\n\n this.blockTokens(src, this.tokens);\n\n for (let i = 0; i < this.inlineQueue.length; i++) {\n const next = this.inlineQueue[i];\n this.inlineTokens(next.src, next.tokens);\n }\n this.inlineQueue = [];\n\n return this.tokens;\n }\n\n /**\n * Lexing\n */\n blockTokens(src: string, tokens?: Token[], lastParagraphClipped?: boolean): Token[];\n blockTokens(src: string, tokens?: TokensList, lastParagraphClipped?: boolean): TokensList;\n blockTokens(src: string, tokens: Token[] = [], lastParagraphClipped = false) {\n this.tokenizer.lexer = this;\n if (this.options.pedantic) {\n src = src.replace(other.tabCharGlobal, ' ').replace(other.spaceLine, '');\n }\n\n let srcLength = Infinity;\n while (src) {\n if (src.length < srcLength) {\n srcLength = src.length;\n } else {\n this.infiniteLoopError(src.charCodeAt(0));\n break;\n }\n\n let token: Tokens.Generic | undefined;\n\n if (this.options.extensions?.block?.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n\n // newline\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (token.raw.length === 1 && lastToken !== undefined) {\n // if there's a single \\n as a spacer, it's terminating the last line,\n // so move it there so that we don't get unnecessary paragraph tags\n lastToken.raw += '\\n';\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // code\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n // An indented code block cannot interrupt a paragraph.\n if (lastToken?.type === 'paragraph' || lastToken?.type === 'text') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // fences\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // heading\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // hr\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // blockquote\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // list\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // html\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // def\n if (token = this.tokenizer.def(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'paragraph' || lastToken?.type === 'text') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.raw;\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title,\n };\n tokens.push(token);\n }\n continue;\n }\n\n // table (gfm)\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // lheading\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // top-level paragraph\n // prevent paragraph consuming extensions by clipping 'src' to extension start\n let cutSrc = src;\n if (this.options.extensions?.startBlock) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startBlock.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {\n const lastToken = tokens.at(-1);\n if (lastParagraphClipped && lastToken?.type === 'paragraph') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else {\n tokens.push(token);\n }\n lastParagraphClipped = cutSrc.length !== src.length;\n src = src.substring(token.raw.length);\n continue;\n }\n\n // text\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'text') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n this.infiniteLoopError(src.charCodeAt(0));\n break;\n }\n }\n\n this.state.top = true;\n return tokens;\n }\n\n inline(src: string, tokens: Token[] = []) {\n this.inlineQueue.push({ src, tokens });\n return tokens;\n }\n\n /**\n * Lexing/Compiling\n */\n inlineTokens(src: string, tokens: Token[] = []): Token[] {\n this.tokenizer.lexer = this;\n // String with links masked to avoid interference with em and strong\n let maskedSrc = src;\n let match: RegExpExecArray | null = null;\n\n // Mask out reflinks\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) !== null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index)\n + '[' + 'a'.repeat(match[0].length - 2) + ']'\n + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n\n // Mask out escaped characters\n while ((match = this.tokenizer.rules.inline.anyPunctuation.exec(maskedSrc)) !== null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);\n }\n\n // Mask out other blocks\n let offset;\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) !== null) {\n offset = match[2] ? match[2].length : 0;\n maskedSrc = maskedSrc.slice(0, match.index + offset) + '[' + 'a'.repeat(match[0].length - offset - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n\n // Mask out blocks from extensions\n maskedSrc = this.options.hooks?.emStrongMask?.call({ lexer: this }, maskedSrc) ?? maskedSrc;\n\n let keepPrevChar = false;\n let prevChar = '';\n let srcLength = Infinity;\n while (src) {\n if (src.length < srcLength) {\n srcLength = src.length;\n } else {\n this.infiniteLoopError(src.charCodeAt(0));\n break;\n }\n\n if (!keepPrevChar) {\n prevChar = '';\n }\n keepPrevChar = false;\n\n let token: Tokens.Generic | undefined;\n\n // extensions\n if (this.options.extensions?.inline?.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n\n // escape\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // tag\n if (token = this.tokenizer.tag(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // link\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // reflink, nolink\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (token.type === 'text' && lastToken?.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // em & strong\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // code\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // br\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // del (gfm)\n if (token = this.tokenizer.del(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // autolink\n if (token = this.tokenizer.autolink(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // url (gfm)\n if (!this.state.inLink && (token = this.tokenizer.url(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n // prevent inlineText consuming extensions by clipping 'src' to extension start\n let cutSrc = src;\n if (this.options.extensions?.startInline) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startInline.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (token = this.tokenizer.inlineText(cutSrc)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n this.infiniteLoopError(src.charCodeAt(0));\n break;\n }\n }\n\n return tokens;\n }\n\n private infiniteLoopError(byte: number) {\n const errMsg = 'Infinite loop on byte: ' + byte;\n if (this.options.silent) {\n console.error(errMsg);\n } else {\n throw new Error(errMsg);\n }\n }\n}\n", "import { _defaults } from './defaults.ts';\nimport {\n cleanUrl,\n escapeHtmlEntities,\n} from './helpers.ts';\nimport { other } from './rules.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\nimport type { Tokens } from './Tokens.ts';\nimport type { _Parser } from './Parser.ts';\n\n/**\n * Renderer\n */\nexport class _Renderer<ParserOutput = string, RendererOutput = string> {\n options: MarkedOptions<ParserOutput, RendererOutput>;\n parser!: _Parser<ParserOutput, RendererOutput>; // set by the parser\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n this.options = options || _defaults;\n }\n\n space(token: Tokens.Space): RendererOutput {\n return '' as RendererOutput;\n }\n\n code({ text, lang, escaped }: Tokens.Code): RendererOutput {\n const langString = (lang || '').match(other.notSpaceStart)?.[0];\n\n const code = text.replace(other.endingNewline, '') + '\\n';\n\n if (!langString) {\n return '<pre><code>'\n + (escaped ? code : escapeHtmlEntities(code, true))\n + '</code></pre>\\n' as RendererOutput;\n }\n\n return '<pre><code class=\"language-'\n + escapeHtmlEntities(langString)\n + '\">'\n + (escaped ? code : escapeHtmlEntities(code, true))\n + '</code></pre>\\n' as RendererOutput;\n }\n\n blockquote({ tokens }: Tokens.Blockquote): RendererOutput {\n const body = this.parser.parse(tokens);\n return `<blockquote>\\n${body}</blockquote>\\n` as RendererOutput;\n }\n\n html({ text }: Tokens.HTML | Tokens.Tag): RendererOutput {\n return text as RendererOutput;\n }\n\n def(token: Tokens.Def): RendererOutput {\n return '' as RendererOutput;\n }\n\n heading({ tokens, depth }: Tokens.Heading): RendererOutput {\n return `<h${depth}>${this.parser.parseInline(tokens)}</h${depth}>\\n` as RendererOutput;\n }\n\n hr(token: Tokens.Hr): RendererOutput {\n return '<hr>\\n' as RendererOutput;\n }\n\n list(token: Tokens.List): RendererOutput {\n const ordered = token.ordered;\n const start = token.start;\n\n let body = '';\n for (let j = 0; j < token.items.length; j++) {\n const item = token.items[j];\n body += this.listitem(item);\n }\n\n const type = ordered ? 'ol' : 'ul';\n const startAttr = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n return '<' + type + startAttr + '>\\n' + body + '</' + type + '>\\n' as RendererOutput;\n }\n\n listitem(item: Tokens.ListItem): RendererOutput {\n return `<li>${this.parser.parse(item.tokens)}</li>\\n` as RendererOutput;\n }\n\n checkbox({ checked }: Tokens.Checkbox): RendererOutput {\n return '<input '\n + (checked ? 'checked=\"\" ' : '')\n + 'disabled=\"\" type=\"checkbox\"> ' as RendererOutput;\n }\n\n paragraph({ tokens }: Tokens.Paragraph): RendererOutput {\n return `<p>${this.parser.parseInline(tokens)}</p>\\n` as RendererOutput;\n }\n\n table(token: Tokens.Table): RendererOutput {\n let header = '';\n\n // header\n let cell = '';\n for (let j = 0; j < token.header.length; j++) {\n cell += this.tablecell(token.header[j]);\n }\n header += this.tablerow({ text: cell as ParserOutput });\n\n let body = '';\n for (let j = 0; j < token.rows.length; j++) {\n const row = token.rows[j];\n\n cell = '';\n for (let k = 0; k < row.length; k++) {\n cell += this.tablecell(row[k]);\n }\n\n body += this.tablerow({ text: cell as ParserOutput });\n }\n if (body) body = `<tbody>${body}</tbody>`;\n\n return '<table>\\n'\n + '<thead>\\n'\n + header\n + '</thead>\\n'\n + body\n + '</table>\\n' as RendererOutput;\n }\n\n tablerow({ text }: Tokens.TableRow<ParserOutput>): RendererOutput {\n return `<tr>\\n${text}</tr>\\n` as RendererOutput;\n }\n\n tablecell(token: Tokens.TableCell): RendererOutput {\n const content = this.parser.parseInline(token.tokens);\n const type = token.header ? 'th' : 'td';\n const tag = token.align\n ? `<${type} align=\"${token.align}\">`\n : `<${type}>`;\n return tag + content + `</${type}>\\n` as RendererOutput;\n }\n\n /**\n * span level renderer\n */\n strong({ tokens }: Tokens.Strong): RendererOutput {\n return `<strong>${this.parser.parseInline(tokens)}</strong>` as RendererOutput;\n }\n\n em({ tokens }: Tokens.Em): RendererOutput {\n return `<em>${this.parser.parseInline(tokens)}</em>` as RendererOutput;\n }\n\n codespan({ text }: Tokens.Codespan): RendererOutput {\n return `<code>${escapeHtmlEntities(text, true)}</code>` as RendererOutput;\n }\n\n br(token: Tokens.Br): RendererOutput {\n return '<br>' as RendererOutput;\n }\n\n del({ tokens }: Tokens.Del): RendererOutput {\n return `<del>${this.parser.parseInline(tokens)}</del>` as RendererOutput;\n }\n\n link({ href, title, tokens }: Tokens.Link): RendererOutput {\n const text = this.parser.parseInline(tokens) as string;\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return text as RendererOutput;\n }\n href = cleanHref;\n let out = '<a href=\"' + href + '\"';\n if (title) {\n out += ' title=\"' + (escapeHtmlEntities(title)) + '\"';\n }\n out += '>' + text + '</a>';\n return out as RendererOutput;\n }\n\n image({ href, title, text, tokens }: Tokens.Image): RendererOutput {\n if (tokens) {\n text = this.parser.parseInline(tokens, this.parser.textRenderer) as string;\n }\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return escapeHtmlEntities(text) as RendererOutput;\n }\n href = cleanHref;\n\n let out = `<img src=\"${href}\" alt=\"${escapeHtmlEntities(text)}\"`;\n if (title) {\n out += ` title=\"${escapeHtmlEntities(title)}\"`;\n }\n out += '>';\n return out as RendererOutput;\n }\n\n text(token: Tokens.Text | Tokens.Escape): RendererOutput {\n return 'tokens' in token && token.tokens\n ? this.parser.parseInline(token.tokens) as unknown as RendererOutput\n : ('escaped' in token && token.escaped ? token.text as RendererOutput : escapeHtmlEntities(token.text) as RendererOutput);\n }\n}\n", "import type { Tokens } from './Tokens.ts';\n\n/**\n * TextRenderer\n * returns only the textual part of the token\n */\nexport class _TextRenderer<RendererOutput = string> {\n // no need for block level renderers\n strong({ text }: Tokens.Strong): RendererOutput {\n return text as RendererOutput;\n }\n\n em({ text }: Tokens.Em): RendererOutput {\n return text as RendererOutput;\n }\n\n codespan({ text }: Tokens.Codespan): RendererOutput {\n return text as RendererOutput;\n }\n\n del({ text }: Tokens.Del): RendererOutput {\n return text as RendererOutput;\n }\n\n html({ text }: Tokens.HTML | Tokens.Tag): RendererOutput {\n return text as RendererOutput;\n }\n\n text({ text }: Tokens.Text | Tokens.Escape | Tokens.Tag): RendererOutput {\n return text as RendererOutput;\n }\n\n link({ text }: Tokens.Link): RendererOutput {\n return '' + text as RendererOutput;\n }\n\n image({ text }: Tokens.Image): RendererOutput {\n return '' + text as RendererOutput;\n }\n\n br(): RendererOutput {\n return '' as RendererOutput;\n }\n\n checkbox({ raw }: Tokens.Checkbox): RendererOutput {\n return raw as RendererOutput;\n }\n}\n", "import { _Renderer } from './Renderer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { _defaults } from './defaults.ts';\nimport type { MarkedToken, Token, Tokens } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Parsing & Compiling\n */\nexport class _Parser<ParserOutput = string, RendererOutput = string> {\n options: MarkedOptions<ParserOutput, RendererOutput>;\n renderer: _Renderer<ParserOutput, RendererOutput>;\n textRenderer: _TextRenderer<RendererOutput>;\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n this.options = options || _defaults;\n this.options.renderer = this.options.renderer || new _Renderer<ParserOutput, RendererOutput>();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.renderer.parser = this;\n this.textRenderer = new _TextRenderer<RendererOutput>();\n }\n\n /**\n * Static Parse Method\n */\n static parse<ParserOutput = string, RendererOutput = string>(tokens: Token[], options?: MarkedOptions<ParserOutput, RendererOutput>) {\n const parser = new _Parser<ParserOutput, RendererOutput>(options);\n return parser.parse(tokens);\n }\n\n /**\n * Static Parse Inline Method\n */\n static parseInline<ParserOutput = string, RendererOutput = string>(tokens: Token[], options?: MarkedOptions<ParserOutput, RendererOutput>) {\n const parser = new _Parser<ParserOutput, RendererOutput>(options);\n return parser.parseInline(tokens);\n }\n\n /**\n * Parse Loop\n */\n parse(tokens: Token[]): ParserOutput {\n this.renderer.parser = this;\n let out = '';\n\n for (let i = 0; i < tokens.length; i++) {\n const anyToken = tokens[i];\n\n // Run any renderer extensions\n if (this.options.extensions?.renderers?.[anyToken.type]) {\n const genericToken = anyToken as Tokens.Generic;\n const ret = this.options.extensions.renderers[genericToken.type].call({ parser: this }, genericToken);\n if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'def', 'paragraph', 'text'].includes(genericToken.type)) {\n out += ret || '';\n continue;\n }\n }\n\n const token = anyToken as MarkedToken;\n\n switch (token.type) {\n case 'space': {\n out += this.renderer.space(token);\n break;\n }\n case 'hr': {\n out += this.renderer.hr(token);\n break;\n }\n case 'heading': {\n out += this.renderer.heading(token);\n break;\n }\n case 'code': {\n out += this.renderer.code(token);\n break;\n }\n case 'table': {\n out += this.renderer.table(token);\n break;\n }\n case 'blockquote': {\n out += this.renderer.blockquote(token);\n break;\n }\n case 'list': {\n out += this.renderer.list(token);\n break;\n }\n case 'checkbox': {\n out += this.renderer.checkbox(token);\n break;\n }\n case 'html': {\n out += this.renderer.html(token);\n break;\n }\n case 'def': {\n out += this.renderer.def(token);\n break;\n }\n case 'paragraph': {\n out += this.renderer.paragraph(token);\n break;\n }\n case 'text': {\n out += this.renderer.text(token);\n break;\n }\n\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '' as ParserOutput;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n\n return out as ParserOutput;\n }\n\n /**\n * Parse Inline Tokens\n */\n parseInline(tokens: Token[], renderer: _Renderer<ParserOutput, RendererOutput> | _TextRenderer<RendererOutput> = this.renderer): ParserOutput {\n this.renderer.parser = this;\n let out = '';\n\n for (let i = 0; i < tokens.length; i++) {\n const anyToken = tokens[i];\n\n // Run any renderer extensions\n if (this.options.extensions?.renderers?.[anyToken.type]) {\n const ret = this.options.extensions.renderers[anyToken.type].call({ parser: this }, anyToken);\n if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(anyToken.type)) {\n out += ret || '';\n continue;\n }\n }\n\n const token = anyToken as MarkedToken;\n\n switch (token.type) {\n case 'escape': {\n out += renderer.text(token);\n break;\n }\n case 'html': {\n out += renderer.html(token);\n break;\n }\n case 'link': {\n out += renderer.link(token);\n break;\n }\n case 'image': {\n out += renderer.image(token);\n break;\n }\n case 'checkbox': {\n out += renderer.checkbox(token);\n break;\n }\n case 'strong': {\n out += renderer.strong(token);\n break;\n }\n case 'em': {\n out += renderer.em(token);\n break;\n }\n case 'codespan': {\n out += renderer.codespan(token);\n break;\n }\n case 'br': {\n out += renderer.br(token);\n break;\n }\n case 'del': {\n out += renderer.del(token);\n break;\n }\n case 'text': {\n out += renderer.text(token);\n break;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '' as ParserOutput;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out as ParserOutput;\n }\n}\n", "import { _defaults } from './defaults.ts';\nimport { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, TokensList } from './Tokens.ts';\n\nexport class _Hooks<ParserOutput = string, RendererOutput = string> {\n options: MarkedOptions<ParserOutput, RendererOutput>;\n block?: boolean;\n\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n this.options = options || _defaults;\n }\n\n static passThroughHooks = new Set([\n 'preprocess',\n 'postprocess',\n 'processAllTokens',\n 'emStrongMask',\n ]);\n\n static passThroughHooksRespectAsync = new Set([\n 'preprocess',\n 'postprocess',\n 'processAllTokens',\n ]);\n\n /**\n * Process markdown before marked\n */\n preprocess(markdown: string) {\n return markdown;\n }\n\n /**\n * Process HTML after marked is finished\n */\n postprocess(html: ParserOutput) {\n return html;\n }\n\n /**\n * Process all tokens before walk tokens\n */\n processAllTokens(tokens: Token[] | TokensList) {\n return tokens;\n }\n\n /**\n * Mask contents that should not be interpreted as em/strong delimiters\n */\n emStrongMask(src: string) {\n return src;\n }\n\n /**\n * Provide function to tokenize markdown\n */\n provideLexer(block = this.block) {\n return block ? _Lexer.lex : _Lexer.lexInline;\n }\n\n /**\n * Provide function to parse tokens\n */\n provideParser(block = this.block) {\n return block ? _Parser.parse<ParserOutput, RendererOutput> : _Parser.parseInline<ParserOutput, RendererOutput>;\n }\n}\n", "import { _getDefaults } from './defaults.ts';\nimport { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport { _Hooks } from './Hooks.ts';\nimport { _Renderer } from './Renderer.ts';\nimport { _Tokenizer } from './Tokenizer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { escapeHtmlEntities } from './helpers.ts';\nimport type { MarkedExtension, MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, Tokens, TokensList } from './Tokens.ts';\n\nexport type MaybePromise = void | Promise<void>;\n\ntype UnknownFunction = (...args: unknown[]) => unknown;\ntype GenericRendererFunction = (...args: unknown[]) => string | false;\n\nexport class Marked<ParserOutput = string, RendererOutput = string> {\n defaults = _getDefaults<ParserOutput, RendererOutput>();\n options = this.setOptions;\n\n parse = this.parseMarkdown(true);\n parseInline = this.parseMarkdown(false);\n\n Parser = _Parser<ParserOutput, RendererOutput>;\n Renderer = _Renderer<ParserOutput, RendererOutput>;\n TextRenderer = _TextRenderer<RendererOutput>;\n Lexer = _Lexer;\n Tokenizer = _Tokenizer<ParserOutput, RendererOutput>;\n Hooks = _Hooks<ParserOutput, RendererOutput>;\n\n constructor(...args: MarkedExtension<ParserOutput, RendererOutput>[]) {\n this.use(...args);\n }\n\n /**\n * Run callback for every token\n */\n walkTokens(tokens: Token[] | TokensList, callback: (token: Token) => MaybePromise | MaybePromise[]) {\n let values: MaybePromise[] = [];\n for (const token of tokens) {\n values = values.concat(callback.call(this, token));\n switch (token.type) {\n case 'table': {\n const tableToken = token as Tokens.Table;\n for (const cell of tableToken.header) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n for (const row of tableToken.rows) {\n for (const cell of row) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n }\n break;\n }\n case 'list': {\n const listToken = token as Tokens.List;\n values = values.concat(this.walkTokens(listToken.items, callback));\n break;\n }\n default: {\n const genericToken = token as Tokens.Generic;\n if (this.defaults.extensions?.childTokens?.[genericToken.type]) {\n this.defaults.extensions.childTokens[genericToken.type].forEach((childTokens) => {\n const tokens = genericToken[childTokens].flat(Infinity) as Token[] | TokensList;\n values = values.concat(this.walkTokens(tokens, callback));\n });\n } else if (genericToken.tokens) {\n values = values.concat(this.walkTokens(genericToken.tokens, callback));\n }\n }\n }\n }\n return values;\n }\n\n use(...args: MarkedExtension<ParserOutput, RendererOutput>[]) {\n const extensions: MarkedOptions<ParserOutput, RendererOutput>['extensions'] = this.defaults.extensions || { renderers: {}, childTokens: {} };\n\n args.forEach((pack) => {\n // copy options to new object\n const opts = { ...pack } as MarkedOptions<ParserOutput, RendererOutput>;\n\n // set async to true if it was set to true before\n opts.async = this.defaults.async || opts.async || false;\n\n // ==-- Parse \"addon\" extensions --== //\n if (pack.extensions) {\n pack.extensions.forEach((ext) => {\n if (!ext.name) {\n throw new Error('extension name required');\n }\n if ('renderer' in ext) { // Renderer extensions\n const prevRenderer = extensions.renderers[ext.name];\n if (prevRenderer) {\n // Replace extension with func to run new extension but fall back if false\n extensions.renderers[ext.name] = function(...args) {\n let ret = ext.renderer.apply(this, args);\n if (ret === false) {\n ret = prevRenderer.apply(this, args);\n }\n return ret;\n };\n } else {\n extensions.renderers[ext.name] = ext.renderer;\n }\n }\n if ('tokenizer' in ext) { // Tokenizer Extensions\n if (!ext.level || (ext.level !== 'block' && ext.level !== 'inline')) {\n throw new Error(\"extension level must be 'block' or 'inline'\");\n }\n const extLevel = extensions[ext.level];\n if (extLevel) {\n extLevel.unshift(ext.tokenizer);\n } else {\n extensions[ext.level] = [ext.tokenizer];\n }\n if (ext.start) { // Function to check for start of token\n if (ext.level === 'block') {\n if (extensions.startBlock) {\n extensions.startBlock.push(ext.start);\n } else {\n extensions.startBlock = [ext.start];\n }\n } else if (ext.level === 'inline') {\n if (extensions.startInline) {\n extensions.startInline.push(ext.start);\n } else {\n extensions.startInline = [ext.start];\n }\n }\n }\n }\n if ('childTokens' in ext && ext.childTokens) { // Child tokens to be visited by walkTokens\n extensions.childTokens[ext.name] = ext.childTokens;\n }\n });\n opts.extensions = extensions;\n }\n\n // ==-- Parse \"overwrite\" extensions --== //\n if (pack.renderer) {\n const renderer = this.defaults.renderer || new _Renderer<ParserOutput, RendererOutput>(this.defaults);\n for (const prop in pack.renderer) {\n if (!(prop in renderer)) {\n throw new Error(`renderer '${prop}' does not exist`);\n }\n if (['options', 'parser'].includes(prop)) {\n // ignore options property\n continue;\n }\n const rendererProp = prop as Exclude<keyof _Renderer<ParserOutput, RendererOutput>, 'options' | 'parser'>;\n const rendererFunc = pack.renderer[rendererProp] as GenericRendererFunction;\n const prevRenderer = renderer[rendererProp] as GenericRendererFunction;\n // Replace renderer with func to run extension, but fall back if false\n renderer[rendererProp] = (...args: unknown[]) => {\n let ret = rendererFunc.apply(renderer, args);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n return (ret || '') as RendererOutput;\n };\n }\n opts.renderer = renderer;\n }\n if (pack.tokenizer) {\n const tokenizer = this.defaults.tokenizer || new _Tokenizer<ParserOutput, RendererOutput>(this.defaults);\n for (const prop in pack.tokenizer) {\n if (!(prop in tokenizer)) {\n throw new Error(`tokenizer '${prop}' does not exist`);\n }\n if (['options', 'rules', 'lexer'].includes(prop)) {\n // ignore options, rules, and lexer properties\n continue;\n }\n const tokenizerProp = prop as Exclude<keyof _Tokenizer<ParserOutput, RendererOutput>, 'options' | 'rules' | 'lexer'>;\n const tokenizerFunc = pack.tokenizer[tokenizerProp] as UnknownFunction;\n const prevTokenizer = tokenizer[tokenizerProp] as UnknownFunction;\n // Replace tokenizer with func to run extension, but fall back if false\n // @ts-expect-error cannot type tokenizer function dynamically\n tokenizer[tokenizerProp] = (...args: unknown[]) => {\n let ret = tokenizerFunc.apply(tokenizer, args);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n\n // ==-- Parse Hooks extensions --== //\n if (pack.hooks) {\n const hooks = this.defaults.hooks || new _Hooks<ParserOutput, RendererOutput>();\n for (const prop in pack.hooks) {\n if (!(prop in hooks)) {\n throw new Error(`hook '${prop}' does not exist`);\n }\n if (['options', 'block'].includes(prop)) {\n // ignore options and block properties\n continue;\n }\n const hooksProp = prop as Exclude<keyof _Hooks<ParserOutput, RendererOutput>, 'options' | 'block'>;\n const hooksFunc = pack.hooks[hooksProp] as UnknownFunction;\n const prevHook = hooks[hooksProp] as UnknownFunction;\n if (_Hooks.passThroughHooks.has(prop)) {\n // @ts-expect-error cannot type hook function dynamically\n hooks[hooksProp] = (arg: unknown) => {\n if (this.defaults.async && _Hooks.passThroughHooksRespectAsync.has(prop)) {\n return (async() => {\n const ret = await hooksFunc.call(hooks, arg);\n return prevHook.call(hooks, ret);\n })();\n }\n\n const ret = hooksFunc.call(hooks, arg);\n return prevHook.call(hooks, ret);\n };\n } else {\n // @ts-expect-error cannot type hook function dynamically\n hooks[hooksProp] = (...args: unknown[]) => {\n if (this.defaults.async) {\n return (async() => {\n let ret = await hooksFunc.apply(hooks, args);\n if (ret === false) {\n ret = await prevHook.apply(hooks, args);\n }\n return ret;\n })();\n }\n\n let ret = hooksFunc.apply(hooks, args);\n if (ret === false) {\n ret = prevHook.apply(hooks, args);\n }\n return ret;\n };\n }\n }\n opts.hooks = hooks;\n }\n\n // ==-- Parse WalkTokens extensions --== //\n if (pack.walkTokens) {\n const walkTokens = this.defaults.walkTokens;\n const packWalktokens = pack.walkTokens;\n opts.walkTokens = function(token) {\n let values: MaybePromise[] = [];\n values.push(packWalktokens.call(this, token));\n if (walkTokens) {\n values = values.concat(walkTokens.call(this, token));\n }\n return values;\n };\n }\n\n this.defaults = { ...this.defaults, ...opts };\n });\n\n return this;\n }\n\n setOptions(opt: MarkedOptions<ParserOutput, RendererOutput>) {\n this.defaults = { ...this.defaults, ...opt };\n return this;\n }\n\n lexer(src: string, options?: MarkedOptions<ParserOutput, RendererOutput>) {\n return _Lexer.lex(src, options ?? this.defaults);\n }\n\n parser(tokens: Token[], options?: MarkedOptions<ParserOutput, RendererOutput>) {\n return _Parser.parse<ParserOutput, RendererOutput>(tokens, options ?? this.defaults);\n }\n\n private parseMarkdown(blockType: boolean) {\n type overloadedParse = {\n (src: string, options: MarkedOptions<ParserOutput, RendererOutput> & { async: true }): Promise<ParserOutput>;\n (src: string, options: MarkedOptions<ParserOutput, RendererOutput> & { async: false }): ParserOutput;\n (src: string, options?: MarkedOptions<ParserOutput, RendererOutput> | null): ParserOutput | Promise<ParserOutput>;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const parse: overloadedParse = (src: string, options?: MarkedOptions<ParserOutput, RendererOutput> | null): any => {\n const origOpt = { ...options };\n const opt = { ...this.defaults, ...origOpt };\n\n const throwError = this.onError(!!opt.silent, !!opt.async);\n\n // throw error if an extension set async to true but parse was called with async: false\n if (this.defaults.async === true && origOpt.async === false) {\n return throwError(new Error('marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.'));\n }\n\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n return throwError(new Error('marked(): input parameter is undefined or null'));\n }\n if (typeof src !== 'string') {\n return throwError(new Error('marked(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected'));\n }\n\n if (opt.hooks) {\n opt.hooks.options = opt;\n opt.hooks.block = blockType;\n }\n\n if (opt.async) {\n return (async() => {\n const processedSrc = opt.hooks ? await opt.hooks.preprocess(src) : src;\n const lexer = opt.hooks ? await opt.hooks.provideLexer(blockType) : (blockType ? _Lexer.lex : _Lexer.lexInline);\n const tokens = await lexer(processedSrc, opt);\n const processedTokens = opt.hooks ? await opt.hooks.processAllTokens(tokens) : tokens;\n if (opt.walkTokens) {\n await Promise.all(this.walkTokens(processedTokens, opt.walkTokens));\n }\n const parser = opt.hooks ? await opt.hooks.provideParser(blockType) : (blockType ? _Parser.parse : _Parser.parseInline);\n const html = await parser(processedTokens, opt);\n return opt.hooks ? await opt.hooks.postprocess(html) : html;\n })().catch(throwError);\n }\n\n try {\n if (opt.hooks) {\n src = opt.hooks.preprocess(src) as string;\n }\n const lexer = opt.hooks ? opt.hooks.provideLexer(blockType) : (blockType ? _Lexer.lex : _Lexer.lexInline);\n let tokens = lexer(src, opt);\n if (opt.hooks) {\n tokens = opt.hooks.processAllTokens(tokens);\n }\n if (opt.walkTokens) {\n this.walkTokens(tokens, opt.walkTokens);\n }\n const parser = opt.hooks ? opt.hooks.provideParser(blockType) : (blockType ? _Parser.parse : _Parser.parseInline);\n let html = parser(tokens, opt);\n if (opt.hooks) {\n html = opt.hooks.postprocess(html);\n }\n return html;\n } catch(e) {\n return throwError(e as Error);\n }\n };\n\n return parse;\n }\n\n private onError(silent: boolean, async: boolean) {\n return (e: Error): string | Promise<string> => {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n\n if (silent) {\n const msg = '<p>An error occurred:</p><pre>'\n + escapeHtmlEntities(e.message + '', true)\n + '</pre>';\n if (async) {\n return Promise.resolve(msg);\n }\n return msg;\n }\n\n if (async) {\n return Promise.reject(e);\n }\n throw e;\n };\n }\n}\n", "import { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport { _Tokenizer } from './Tokenizer.ts';\nimport { _Renderer } from './Renderer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { _Hooks } from './Hooks.ts';\nimport { Marked } from './Instance.ts';\nimport {\n _getDefaults,\n changeDefaults,\n _defaults,\n} from './defaults.ts';\nimport type { MarkedExtension, MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, TokensList } from './Tokens.ts';\nimport type { MaybePromise } from './Instance.ts';\n\nconst markedInstance = new Marked();\n\n/**\n * Compiles markdown to HTML asynchronously.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options, having async: true\n * @return Promise of string of compiled HTML\n */\nexport function marked(src: string, options: MarkedOptions & { async: true }): Promise<string>;\n\n/**\n * Compiles markdown to HTML.\n *\n * @param src String of markdown source to be compiled\n * @param options Optional hash of options\n * @return String of compiled HTML. Will be a Promise of string if async is set to true by any extensions.\n */\nexport function marked(src: string, options: MarkedOptions & { async: false }): string;\nexport function marked(src: string, options: MarkedOptions & { async: true }): Promise<string>;\nexport function marked(src: string, options?: MarkedOptions | null): string | Promise<string>;\nexport function marked(src: string, opt?: MarkedOptions | null): string | Promise<string> {\n return markedInstance.parse(src, opt);\n}\n\n/**\n * Sets the default options.\n *\n * @param options Hash of options\n */\nmarked.options =\n marked.setOptions = function(options: MarkedOptions) {\n markedInstance.setOptions(options);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n };\n\n/**\n * Gets the original marked default options.\n */\nmarked.getDefaults = _getDefaults;\n\nmarked.defaults = _defaults;\n\n/**\n * Use Extension\n */\n\nmarked.use = function(...args: MarkedExtension[]) {\n markedInstance.use(...args);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n};\n\n/**\n * Run callback for every token\n */\n\nmarked.walkTokens = function(tokens: Token[] | TokensList, callback: (token: Token) => MaybePromise | MaybePromise[]) {\n return markedInstance.walkTokens(tokens, callback);\n};\n\n/**\n * Compiles markdown to HTML without enclosing `p` tag.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options\n * @return String of compiled HTML\n */\nmarked.parseInline = markedInstance.parseInline;\n\n/**\n * Expose\n */\nmarked.Parser = _Parser;\nmarked.parser = _Parser.parse;\nmarked.Renderer = _Renderer;\nmarked.TextRenderer = _TextRenderer;\nmarked.Lexer = _Lexer;\nmarked.lexer = _Lexer.lex;\nmarked.Tokenizer = _Tokenizer;\nmarked.Hooks = _Hooks;\nmarked.parse = marked;\n\nexport const options = marked.options;\nexport const setOptions = marked.setOptions;\nexport const use = marked.use;\nexport const walkTokens = marked.walkTokens;\nexport const parseInline = marked.parseInline;\nexport const parse = marked;\nexport const parser = _Parser.parse;\nexport const lexer = _Lexer.lex;\nexport { _defaults as defaults, _getDefaults as getDefaults } from './defaults.ts';\nexport { _Lexer as Lexer } from './Lexer.ts';\nexport { _Parser as Parser } from './Parser.ts';\nexport { _Tokenizer as Tokenizer } from './Tokenizer.ts';\nexport { _Renderer as Renderer } from './Renderer.ts';\nexport { _TextRenderer as TextRenderer } from './TextRenderer.ts';\nexport { _Hooks as Hooks } from './Hooks.ts';\nexport { Marked } from './Instance.ts';\nexport type * from './MarkedOptions.ts';\nexport type * from './Tokens.ts';\n", "import DOMPurify from 'dompurify';\nimport { marked } from 'marked';\nimport React from 'react';\n\nmarked.setOptions({\n pedantic: false,\n gfm: true,\n});\n\n/** Renders sanitized Markdown text as HTML. */\nexport function Markdown({ text, className }: { text: string; className?: string }) {\n const html = React.useMemo(() => {\n if (!text) return '';\n const parsed = marked.parse(text, { async: false });\n return DOMPurify.sanitize(typeof parsed === 'string' ? parsed : '');\n }, [text]);\n\n return <div className={className} dangerouslySetInnerHTML={{ __html: html }} />;\n}\n", "import React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { app, fromNow, shdatetime } from '../globals';\nimport type { Note } from '../types';\nimport { fromNullableStr } from '../util';\n\nfunction toTextareaPreview(input: string) {\n const lines = input.split('\\n');\n return (\n <>\n {lines[0]}\n {lines.slice(1).map((x, idx) => (\n <React.Fragment key={idx}>\n <br />\n {x}\n </React.Fragment>\n ))}\n </>\n );\n}\n\n/** Renders a list of note summaries with links to individual notes. */\nexport function NList({ initial }: { initial: Note[] }) {\n const { t } = useTranslation();\n const a = app();\n const linkToFilterSingle = (slug: string) => `${fromNullableStr(a.userR)}/notes/${slug}`;\n\n return (\n <div>\n {initial.map((note) => {\n const fromNowVal = React.useMemo(\n () => fromNow(a.lang, note.created),\n [a.lang, note.created],\n );\n return (\n <div\n key={note.id}\n id={String(note.id)}\n className={`note w-100 mw7 pa1 mb2${note.shared ? '' : ' private'}`}\n >\n <div className=\"display\">\n <a href={linkToFilterSingle(note.slug)} className=\"link f5 lh-title\">\n {note.title === '' ? t('noTitle') : note.title}\n </a>\n <br />\n <div className=\"description mt1 thm-text-secondary\">\n {toTextareaPreview(note.text.slice(0, 200))}\n </div>\n <a\n className=\"link f7 dib thm-text-tertiary w4\"\n data-created={note.created}\n title={shdatetime(a.lang, note.created)}\n href={linkToFilterSingle(note.slug)}\n >\n {fromNowVal}\n </a>\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n", "import React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { destroyNote, editNote } from '../api';\nimport { app, closeWindow, fromNow, setFocus, shdatetime } from '../globals';\nimport type { Note } from '../types';\nimport { curQuerystring, fromNullableStr, lookupQueryStringValue } from '../util';\nimport { Markdown } from './Markdown';\n\nfunction toTextarea(input: string) {\n const lines = input.split('\\n');\n return (\n <>\n {lines[0]}\n {lines.slice(1).map((x, idx) => (\n <React.Fragment key={idx}>\n <br />\n {x}\n </React.Fragment>\n ))}\n </>\n );\n}\n\n/** Displays a single note with inline editing and deletion, used in the popup window. */\nexport function NNote({ initial }: { initial: Note }) {\n const { t } = useTranslation();\n const a = app();\n\n const [note, setNote] = React.useState<Note>(initial);\n const [editNoteState, setEditNoteState] = React.useState<Note>(initial);\n const [deleteAsk, setDeleteAsk] = React.useState(false);\n const [edit, setEdit] = React.useState(initial.id <= 0);\n const [destroyed, setDestroyed] = React.useState(false);\n const [apiError, setApiError] = React.useState<string | null>(null);\n const fromNowVal = fromNow(a.lang, note.created);\n\n const notetextid = `${note.id.toString()}_text`;\n\n function startEdit(next: boolean) {\n setEditNoteState(note);\n setEdit(next);\n const qs = curQuerystring();\n const q = lookupQueryStringValue(qs, 'next');\n if (!next && q === 'closeWindow') closeWindow(window);\n else if (next) setFocus(notetextid);\n }\n\n async function onDestroy() {\n await destroyNote(note.id);\n setDestroyed(true);\n }\n\n const onSubmit = async (e: React.SyntheticEvent<HTMLFormElement, SubmitEvent>): Promise<void> => {\n e.preventDefault();\n setApiError(null);\n\n const res = await editNote(editNoteState);\n if (res.ok && res.status >= 200 && res.status < 300) {\n const qs = curQuerystring();\n const next = lookupQueryStringValue(qs, 'next');\n const ref = document.referrer;\n const org = window.location.origin;\n\n if (next === 'closeWindow') closeWindow(window);\n else if (next === 'back') {\n if (ref.startsWith(org)) window.location.href = ref;\n else window.location.href = org;\n } else if (editNoteState.id === 0) {\n window.location.href = fromNullableStr(a.noteR);\n } else {\n setNote(editNoteState);\n setEdit(false);\n }\n } else {\n setApiError(res.bodyText);\n // eslint-disable-next-line no-console\n console.log(res.bodyText);\n }\n };\n\n if (destroyed) return <p className=\"thm-text-error\">{t('note.killed')}</p>;\n\n return (\n <div id={String(note.id)} className=\"note w-100 mw7 pa1 mb2\">\n {!edit ? (\n <>\n <div className=\"display\">\n <div className=\"link f5 lh-title\">{note.title === '' ? t('noTitle') : note.title}</div>\n <br />\n {note.isMarkdown ? (\n <div className=\"description mt1\">\n <Markdown text={note.text} />\n </div>\n ) : (\n <div className=\"description mt1 thm-text-secondary\">{toTextarea(note.text)}</div>\n )}\n <div className=\"link f7 mt2 dib thm-text-tertiary w4\">\n <span data-created={note.created} title={shdatetime(a.lang, note.created)}>\n {fromNowVal}\n </span>\n {' - '}\n <span className=\"thm-text-tertiary\">\n {note.shared ? t('filter.public') : t('filter.private')}\n </span>\n </div>\n </div>\n\n {a.dat.isowner ? (\n <div className=\"edit_links db mt3\">\n <button\n type=\"button\"\n onClick={() => {\n startEdit(true);\n }}\n className=\"edit thm-text-muted thm-hover-link-color\"\n >\n {t('edit')} \n </button>\n <div className=\"delete_link di\">\n <button\n type=\"button\"\n onClick={() => {\n setDeleteAsk(true);\n }}\n className={`delete thm-text-muted thm-hover-link-color${deleteAsk ? ' dn' : ''}`}\n >\n {t('delete')}\n </button>\n <span className={`confirm thm-text-error${!deleteAsk ? ' dn' : ''}`}>\n <button\n type=\"button\"\n onClick={() => {\n setDeleteAsk(false);\n }}\n >\n {t('cancel')} / \n </button>\n <button type=\"button\" onClick={() => void onDestroy()} className=\"thm-text-error\">\n {t('destroy')}\n </button>\n </span>\n </div>\n </div>\n ) : null}\n </>\n ) : (\n <form\n onSubmit={(e) => {\n void onSubmit(e);\n }}\n >\n {apiError ? <div className=\"alert alert-err\">{apiError}</div> : null}\n <p className=\"mt2 mb1\">{t('note.titleLabel')}</p>\n <input\n type=\"text\"\n className=\"title w-100 mb1 pt1 edit_form_input\"\n name=\"title\"\n value={editNoteState.title}\n onChange={(e) => {\n setEditNoteState((x) => ({ ...x, title: e.target.value }));\n }}\n autoFocus={editNoteState.title === ''}\n />\n <br />\n <p className=\"mt2 mb1\">{t('note.descriptionLabel')}</p>\n <textarea\n id={notetextid}\n className=\"description w-100 mb1 pt1 edit_form_input\"\n name=\"text\"\n rows={25}\n value={editNoteState.text}\n onChange={(e) => {\n setEditNoteState((x) => ({ ...x, text: e.target.value }));\n }}\n />\n <div className=\"edit_form_checkboxes mb3\">\n <input\n type=\"checkbox\"\n className=\"is-markdown pointer\"\n id=\"edit_ismarkdown\"\n name=\"ismarkdown\"\n checked={editNoteState.isMarkdown}\n onChange={(e) => {\n setEditNoteState((x) => ({ ...x, isMarkdown: e.target.checked }));\n }}\n />{' '}\n <label htmlFor=\"edit_ismarkdown\" className=\"mr2\">\n {t('note.useMarkdown')}\n </label>\n <br />\n </div>\n <div className=\"edit_form_checkboxes mb3\">\n <input\n type=\"checkbox\"\n className=\"is-markdown pointer\"\n id=\"edit_shared\"\n name=\"shared\"\n checked={editNoteState.shared}\n onChange={(e) => {\n setEditNoteState((x) => ({ ...x, shared: e.target.checked }));\n }}\n />{' '}\n <label htmlFor=\"edit_shared\" className=\"mr2\">\n {t('note.publicLabel')}\n </label>\n <br />\n </div>\n <input\n type=\"submit\"\n className=\"mr1 pv1 ph2 thm-text-primary ba thm-border-default thm-bg-secondary pointer rdim\"\n value={t('save')}\n />{' '}\n <input\n type=\"reset\"\n className=\"pv1 ph2 thm-text-primary ba thm-border-default thm-bg-secondary pointer rdim\"\n value={t('cancel')}\n onClick={() => {\n startEdit(false);\n }}\n />\n </form>\n )}\n </div>\n );\n}\n", "import React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { getTagCloud, updateTagCloudMode } from '../api';\nimport { app } from '../globals';\nimport { useTagCloudStore } from '../stores/tagCloudStore';\nimport {\n isExpanded,\n isRelated,\n setExpanded,\n type TagCloud as TagCloudT,\n type TagCloudModeF,\n tagCloudModeFromF,\n} from '../types';\nimport { encodeTag, fromNullableStr } from '../util';\n\n/** Displays the tag cloud, with controls to filter by top tags, frequency, or related tags. */\nexport function TagCloud({ initialMode }: { initialMode: TagCloudModeF }) {\n const { t } = useTranslation();\n const mode = useTagCloudStore((s) => s.mode);\n const tagcloud = useTagCloudStore((s) => s.tagcloud);\n const setMode = useTagCloudStore((s) => s.setMode);\n const setTagCloud = useTagCloudStore((s) => s.setTagCloud);\n\n React.useEffect(() => {\n setMode(initialMode);\n }, [initialMode]);\n\n React.useEffect(() => {\n async function fetchTagCloud(m: TagCloudModeF) {\n if (m.kind === 'none') return;\n const tc = await getTagCloud(tagCloudModeFromF(m));\n setTagCloud(tc ?? {});\n }\n void fetchTagCloud(mode);\n }, [mode, setTagCloud]);\n\n if (mode.kind === 'none') return <div className=\"tag_cloud\" />;\n\n const modetop: TagCloudModeF = { kind: 'top', expanded: isExpanded(mode), value: 200 };\n const modelb1: TagCloudModeF = { kind: 'lowerBound', expanded: isExpanded(mode), value: 1 };\n const modelb2: TagCloudModeF = { kind: 'lowerBound', expanded: isExpanded(mode), value: 2 };\n const modelb5: TagCloudModeF = { kind: 'lowerBound', expanded: isExpanded(mode), value: 5 };\n const modelb10: TagCloudModeF = { kind: 'lowerBound', expanded: isExpanded(mode), value: 10 };\n const modelb20: TagCloudModeF = { kind: 'lowerBound', expanded: isExpanded(mode), value: 20 };\n\n const values = Object.values(tagcloud);\n const n = values.length ? Math.min(...values) : 1;\n const m = values.length ? Math.max(...values) : 1;\n\n async function onExpanded(expanded: boolean) {\n const next = setExpanded(mode, expanded);\n setMode(next);\n await updateTagCloudMode(tagCloudModeFromF(next));\n }\n\n async function onChangeMode(next: TagCloudModeF) {\n if (JSON.stringify(mode) === JSON.stringify(next)) {\n await onExpanded(!isExpanded(mode));\n } else {\n setMode(setExpanded(next, true));\n }\n }\n\n return (\n <div className=\"tag_cloud mv3\">\n <div className=\"tag_cloud_header mb2\">\n {isRelated(mode) ? (\n <button\n type=\"button\"\n className=\"pa1 f7 link thm-hover-link-color mr1 b\"\n onClick={() => void onExpanded(!isExpanded(mode))}\n >\n {t('tagCloud.relatedTags')}\n </button>\n ) : (\n <>\n <button\n type=\"button\"\n className={`pa1 f7 link thm-hover-link-color mr1${JSON.stringify(mode) === JSON.stringify(modetop) ? ' b' : ''}`}\n title={t('tagCloud.topTagsTitle')}\n onClick={() => void onChangeMode(modetop)}\n >\n {t('tagCloud.topTags')}\n </button>\n <button\n type=\"button\"\n className={`pa1 f7 link thm-hover-link-color ml2 ${JSON.stringify(mode) === JSON.stringify(modelb1) ? ' b' : ''}`}\n title={t('tagCloud.allTitle')}\n onClick={() => void onChangeMode(modelb1)}\n >\n {t('filter.all')}\n </button>\n {'\u2027'}\n <button\n type=\"button\"\n className={`pa1 f7 link thm-hover-link-color${JSON.stringify(mode) === JSON.stringify(modelb2) ? ' b' : ''}`}\n title={t('tagCloud.min2Title')}\n onClick={() => void onChangeMode(modelb2)}\n >\n 2\n </button>\n {'\u2027'}\n <button\n type=\"button\"\n className={`pa1 f7 link thm-hover-link-color${JSON.stringify(mode) === JSON.stringify(modelb5) ? ' b' : ''}`}\n title={t('tagCloud.min5Title')}\n onClick={() => void onChangeMode(modelb5)}\n >\n 5\n </button>\n {'\u2027'}\n <button\n type=\"button\"\n className={`pa1 f7 link thm-hover-link-color${JSON.stringify(mode) === JSON.stringify(modelb10) ? ' b' : ''}`}\n title={t('tagCloud.min10Title')}\n onClick={() => void onChangeMode(modelb10)}\n >\n 10\n </button>\n {'\u2027'}\n <button\n type=\"button\"\n className={`pa1 f7 link thm-hover-link-color${JSON.stringify(mode) === JSON.stringify(modelb20) ? ' b' : ''}`}\n title={t('tagCloud.min20Title')}\n onClick={() => void onChangeMode(modelb20)}\n >\n 20\n </button>\n </>\n )}\n <button\n type=\"button\"\n className=\"pa1 ml2 f7 link thm-text-faded thm-hover-link-color\"\n onClick={() => void onExpanded(!isExpanded(mode))}\n >\n {isExpanded(mode) ? t('tagCloud.hide') : t('tagCloud.show')}\n </button>\n </div>\n\n {isExpanded(mode) ? (\n <div className=\"tag_cloud_body\">\n {mode.kind === 'related'\n ? toArray(mode.value, n, m, tagcloud)\n : toArray([], n, m, tagcloud)}\n </div>\n ) : null}\n </div>\n );\n}\n\nfunction toArray(curtags: string[], n: number, m: number, tagcloud: TagCloudT) {\n const a = app();\n const cur = curtags.map((tag) => tag.toLowerCase());\n const entries: Array<[string, number]> = Object.entries(tagcloud).sort((x, y) =>\n x[0].toLowerCase().localeCompare(y[0].toLowerCase()),\n );\n\n const linkToFilterTag = (rest: string) =>\n `${fromNullableStr(a.userR)}${rest === '' ? '' : `/t:${rest}`}`;\n\n const out: Array<React.ReactNode> = [];\n for (const [k, v] of entries) {\n const kLower = k.toLowerCase();\n const fontsize = rescale((x) => x, v, n, m, 100.0, 150.0);\n const opacity = rescale((x) => Math.log(1.0 + x), v, n, m, 0.6, 1.0);\n const style: React.CSSProperties = { fontSize: `${fontsize.toString()}%`, opacity };\n\n const includeExclude =\n cur.length === 0 ? null : !cur.includes(kLower) ? (\n <a\n href={linkToFilterTag(cur.concat([kLower]).map(encodeTag).join('+'))}\n className=\"link mr2 tag-include\"\n >\n \u2295\n </a>\n ) : (\n <a\n href={linkToFilterTag(\n cur\n .filter((t) => t !== kLower)\n .map(encodeTag)\n .join('+'),\n )}\n className=\"link mr2 tag-exclude\"\n >\n \u2296\n </a>\n );\n\n out.push(\n <a\n key={`${k}-tag`}\n href={linkToFilterTag(encodeTag(k))}\n className=\"link tag mr1\"\n style={style}\n >\n {k}\n </a>,\n );\n if (includeExclude) out.push(<React.Fragment key={`${k}-ie`}>{includeExclude}</React.Fragment>);\n }\n return out;\n}\n\nfunction rescale(\n f: (x: number) => number,\n v: number,\n n: number,\n m: number,\n l: number,\n h: number,\n): number {\n const denom = f(m - n);\n const ratio = m - n < 0.01 || denom === 0 ? 1.0 : f(v - n) / denom;\n return ratio * (h - l) + l;\n}\n", "import { create } from 'zustand';\n\nimport type { TagCloud, TagCloudModeF } from '../types';\n\nexport type TagCloudState = {\n mode: TagCloudModeF;\n tagcloud: TagCloud;\n setMode: (mode: TagCloudModeF) => void;\n setTagCloud: (tagcloud: TagCloud) => void;\n};\n\nexport const useTagCloudStore = create<TagCloudState>((set) => ({\n mode: { kind: 'none' },\n tagcloud: {},\n setMode: (mode) => {\n set({ mode });\n },\n setTagCloud: (tagcloud) => {\n set({ tagcloud });\n },\n}));\n", "/** User's preferred color scheme. */\nexport type ColorSchemePreference = 'light' | 'dark';\n\n/** Unique identifier for a bookmark. */\nexport type BookmarkId = number;\n\nexport type Bookmark = {\n /** The bookmarked URL. */\n url: string;\n /** Display title of the bookmark. */\n title: string;\n /** Optional user-provided description. */\n description: string;\n /** Space-separated list of tags. */\n tags: string;\n /** Whether the bookmark is private (not visible to others). */\n private: boolean;\n /** Whether the bookmark is marked for later reading. */\n toread: boolean;\n /** Whether the bookmark should be archived (request). */\n archiveRequested?: boolean | null;\n /** Database ID of the bookmark. */\n bid: BookmarkId;\n /** URL-friendly slug for the bookmark. */\n slug: string;\n /** Whether the bookmark is starred. */\n selected: boolean;\n /** ISO 8601 creation timestamp. */\n time: string;\n /** URL of the archived copy, or null if not archived. */\n archiveUrl: string | null;\n};\n\n/** Unique identifier for a note. */\nexport type NoteId = number;\n/** URL-friendly slug for a note. */\nexport type NoteSlug = string;\n\nexport type Note = {\n /** Database ID of the note. */\n id: NoteId;\n /** URL-friendly slug for the note. */\n slug: NoteSlug;\n /** Display title of the note. */\n title: string;\n /** Raw text content of the note. */\n text: string;\n /** Character length of the note text. */\n length: number;\n /** Whether the note body should be rendered as Markdown. */\n isMarkdown: boolean;\n /** Whether the note is publicly visible. */\n shared: boolean;\n /** ISO 8601 creation timestamp. */\n created: string;\n /** ISO 8601 last-updated timestamp. */\n updated: string;\n};\n\nexport type Filter =\n | { tag: 'FilterAll' }\n | { tag: 'FilterUnread' }\n | { tag: 'FilterUntagged' }\n | { tag: 'FilterStarred' }\n | { tag: 'FilterSingle'; contents: string };\n\nexport type AccountSettings = {\n /** Whether bookmarks are archived by default. */\n archiveDefault: boolean;\n /** Whether new bookmarks are private by default. */\n privateDefault: boolean;\n /** Whether tag suggestions are enabled. */\n suggestTags: boolean;\n /** Whether the account is locked to private-only mode. */\n privacyLock: boolean;\n /** Whether the archive backend is enabled. */\n archiveBackendEnabled: boolean;\n /** The user's preferred language (null means server default). */\n language: string | null;\n};\n\n/** Raw tag cloud mode as stored/sent by the server. */\nexport type TagCloudMode = {\n /** The mode name (e.g. 'top', 'lowerBound', 'related', 'none'). */\n mode: string;\n /** Mode-specific parameter value. */\n value: unknown;\n /** Whether the tag cloud panel is expanded. */\n expanded: boolean;\n};\n\n/** Map of tag name to usage count. */\nexport type TagCloud = Record<string, number>;\n\n/** A single tag suggestion with its usage count. */\nexport type TSuggestion = {\n term: string;\n count: number;\n};\n\n/** Request payload for fetching tag suggestions based on a query and current tags. */\nexport type TagSuggestionRequest = {\n query: string;\n currentTags: string[];\n};\n\n/** Response payload containing a list of tag suggestions. */\nexport type TagSuggestionResponse = {\n suggestions: TSuggestion[];\n};\n\n/** Discriminated union representing the tag cloud filter mode. */\nexport type TagCloudModeF =\n | { kind: 'top'; expanded: boolean; value: number }\n | { kind: 'lowerBound'; expanded: boolean; value: number }\n | { kind: 'related'; expanded: boolean; value: string[] }\n | { kind: 'none' };\n\nexport function tagCloudModeToF(mode: TagCloudMode): TagCloudModeF {\n switch (mode.mode) {\n case 'top': {\n const n = typeof mode.value === 'number' ? mode.value : Number(mode.value);\n return Number.isFinite(n)\n ? { kind: 'top', expanded: mode.expanded, value: n }\n : { kind: 'none' };\n }\n case 'lowerBound': {\n const n = typeof mode.value === 'number' ? mode.value : Number(mode.value);\n return Number.isFinite(n)\n ? { kind: 'lowerBound', expanded: mode.expanded, value: n }\n : { kind: 'none' };\n }\n case 'related': {\n const s = typeof mode.value === 'string' ? mode.value : '';\n const tags = s ? s.split(' ') : [];\n return { kind: 'related', expanded: mode.expanded, value: tags };\n }\n default:\n return { kind: 'none' };\n }\n}\n\nexport function tagCloudModeFromF(mode: TagCloudModeF): TagCloudMode {\n switch (mode.kind) {\n case 'top':\n return { mode: 'top', value: mode.value, expanded: mode.expanded };\n case 'lowerBound':\n return { mode: 'lowerBound', value: mode.value, expanded: mode.expanded };\n case 'related':\n return { mode: 'related', value: mode.value.join(' '), expanded: mode.expanded };\n case 'none':\n return { mode: 'none', value: '', expanded: false };\n }\n}\n\nexport function isExpanded(mode: TagCloudModeF): boolean {\n return mode.kind === 'none' ? false : mode.expanded;\n}\n\nexport function isRelated(mode: TagCloudModeF): boolean {\n return mode.kind === 'related';\n}\n\nexport function setExpanded(mode: TagCloudModeF, expanded: boolean): TagCloudModeF {\n return mode.kind === 'none' ? mode : { ...mode, expanded };\n}\n\nexport function showMode(mode: TagCloudModeF): string {\n switch (mode.kind) {\n case 'top':\n return 'top';\n case 'lowerBound':\n return 'lowerBound';\n case 'related':\n return 'related';\n case 'none':\n return '';\n }\n}\n"],- "mappings": "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cA,EAAY,MAAgBA,IAAT,MACpC4C,GACE5C,EACA+B,EACAY,CACF,EACG3C,EAAcA,EAAY,OACnC,CACA,SAAS4C,GACPtlC,EACAykC,EACAY,EACA,CACA,OAAQrlC,EAAM,IAAK,CACjB,IAAK,IACHolC,GACEplC,EACAykC,EACAY,CACF,EACArlC,EAAM,MAAQmlC,IACHnlC,EAAM,gBAAf,MACAulC,GACEF,EACAzC,GACA5iC,EAAM,cACNA,EAAM,aACR,EACF,MACF,IAAK,GACHolC,GACEplC,EACAykC,EACAY,CACF,EACA,MACF,IAAK,GACL,IAAK,GACH,IAAIG,EAAwB5C,GAC5BA,GAAuBS,GAAiBrjC,EAAM,UAAU,aAAa,EACrEolC,GACEplC,EACAykC,EACAY,CACF,EACAzC,GAAuB4C,EACvB,MACF,IAAK,IACMxlC,EAAM,gBAAf,OACIwlC,EAAwBxlC,EAAM,UACvBwlC,IAAT,MACSA,EAAsB,gBAA/B,MACMA,EAAwBL,GACzBA,GAAsB,SACvBC,GACEplC,EACAykC,EACAY,CACF,EACCF,GAAsBK,GACvBJ,GACEplC,EACAykC,EACAY,CACF,GACN,MACF,QACED,GACEplC,EACAykC,EACAY,CACF,CACJ,CACF,CACA,SAASI,GAAwB/C,EAAa,CAC5C,IAAIgD,EAAgBhD,EAAY,UAChC,GACWgD,IAAT,OACEhD,EAAcgD,EAAc,MAAiBhD,IAAT,MACtC,CACAgD,EAAc,MAAQ,KACtB,GACGA,EAAgBhD,EAAY,QAC1BA,EAAY,QAAU,KACtBA,EAAcgD,QACHhD,IAAT,KACT,CACF,CACA,SAASiD,GAAyCjD,EAAa,CAC7D,IAAInd,EAAYmd,EAAY,UAC5B,IAAWA,EAAY,MAAQ,MAA3B,EAAgC,CAClC,GAAand,IAAT,KACF,QAAS3lB,EAAI,EAAGA,EAAI2lB,EAAU,OAAQ3lB,IAAK,CACzC,IAAI0lB,EAAgBC,EAAU3lB,CAAC,EAC/BkgC,GAAaxa,EACbsgB,GACEtgB,EACAod,CACF,CACF,CACF+C,GAAwB/C,CAAW,CACrC,CACA,GAAIA,EAAY,aAAe,MAC7B,IAA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/B,EACAwyB,GACA,CAACoM,EACH,EACA,MAAM9lC,EACR,IAAK,GACHof,GAAsC,KACtC,MACF,IAAK,GACL,IAAK,GACH,MACF,QACE,MAAM,MAAMpgB,EAAuB,GAAG,CAAC,CAC3C,CACA,IACGkI,EAAQ,YAAcA,IACrBggC,EAAapE,GAA+B,IAAMl9B,GAAI,EACxD,GAAKshC,GACL,CAOA,GANAL,GACEI,EACA//B,EACAwyB,GACA,CAACoM,EACH,EACU1+B,GAAa6/B,EAAiB,EAAG,EAAE,IAAzC,EAA4C,MAAMjnC,EACtDwmC,GAAsBt/B,EACtB+/B,EAAgB,cAAgBO,GAC9BC,GAAoB,KAClB,KACAR,EACAD,EACA5nB,GACAgnB,GACAD,GACAj/B,EACAwyB,GACAuM,GACAhK,GACA6J,GACAuB,EACA,YACA,GACA,CACF,EACAH,CACF,EACA,MAAMlnC,CACR,CACAynC,GACER,EACAD,EACA5nB,GACAgnB,GACAD,GACAj/B,EACAwyB,GACAuM,GACAhK,GACA6J,GACAuB,EACA,KACA,GACA,CACF,CACF,CACF,CACA,KACF,OAAS,IACTP,GAAsB9E,CAAa,CACrC,CACA,SAASyF,GACPpgC,EACAi2B,EACAoK,EACAC,EACAC,EACA1gC,EACAyB,EACAC,EACAC,EACAg/B,EACAX,EACAY,EACAC,EACAC,EACA,CAGA,GAFA3gC,EAAK,cAAgB,GACrBygC,EAAwBxK,EAAa,aAEnCwK,EAAwB,OACVA,EAAwB,YAAtC,SACA,CACAA,EAAwB,CACtB,YAAa,KACb,MAAO,EACP,SAAU,EACV,SAAU,EACV,gBAAiB,CAAC,EAClB,iBAAkB,GAClB,yBAA0B,GAC1B,UAAWh4B,EACb,EACA+0B,GACEvH,EACAp2B,EACA4gC,CACF,EACA,IAAIG,GACD/gC,EAAQ,YAAcA,EACnB47B,GAA+Bl9B,GAAI,GAClCsB,EAAQ,WAAaA,EACpBsb,GAAiC5c,GAAI,EACrC,EAKR,GAJAqiC,EAAgBC,GACdJ,EACAG,CACF,EACaA,IAAT,KAAwB,CAC1BzB,GAAsBt/B,EACtBG,EAAK,oBAAsB4gC,EA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AAgBrqB,CAAG,EACpC,MACF,IAAK,OACL,IAAK,OACL,IAAK,OACL,IAAK,OACKvR,GAAR,MACe,OAAOA,GAAtB,YACa,OAAOA,GAApB,UACA,CAAC,MAAMA,CAAK,GACZ,GAAKA,EACD47B,EAAW,aAAarqB,EAAKvR,CAAK,EAClC47B,EAAW,gBAAgBrqB,CAAG,EAClC,MACF,IAAK,UACL,IAAK,QACKvR,GAAR,MACe,OAAOA,GAAtB,YACa,OAAOA,GAApB,UACA,MAAMA,CAAK,EACP47B,EAAW,gBAAgBrqB,CAAG,EAC9BqqB,EAAW,aAAarqB,EAAKvR,CAAK,EACtC,MACF,IAAK,UACH2b,EAA0B,eAAgBigB,CAAU,EACpDjgB,EAA0B,SAAUigB,CAAU,EAC9ClyB,GAAqBkyB,EAAY,UAAW57B,CAAK,EACjD,MACF,IAAK,eACH6J,GACE+xB,EACA,+BACA,gBACA57B,CACF,EACA,MACF,IAAK,eACH6J,GACE+xB,EACA,+BACA,gBACA57B,CACF,EACA,MACF,IAAK,YACH6J,GACE+xB,EACA,+BACA,aACA57B,CACF,EACA,MACF,IAAK,YACH6J,GACE+xB,EACA,+BACA,aACA57B,CACF,EACA,MACF,IAAK,aACH6J,GACE+xB,EACA,+BACA,cACA57B,CACF,EACA,MACF,IAAK,YACH6J,GACE+xB,EACA,+BACA,aACA57B,CACF,EACA,MACF,IAAK,UACH6J,GACE+xB,EACA,uCACA,WACA57B,CACF,EACA,MACF,IAAK,UACH6J,GACE+xB,EACA,uCACA,WACA57B,CACF,EACA,MACF,IAAK,WACH6J,GACE+xB,EACA,uCACA,YACA57B,CACF,EACA,MACF,IAAK,KACH0J,GAAqBkyB,EAAY,KAAM57B,CAAK,EAC5C,MACF,IAAK,YACL,IAAK,cACH,MACF,SAEI,EAAE,EAAIuR,EAAI,SACDA,EAAI,CAAC,IAAb,KAA0BA,EAAI,CAAC,IAAb,KACVA,EAAI,CAAC,IAAb,KAA0BA,EAAI,CAAC,IAAb,OAElBA,EAAMvE,GAAQ,IAAIuE,CAAG,GAAKA,EACzB7H,GAAqBkyB,EAAYrqB,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AAK,OACL,IAAK,MACL,IAAK,WACL,IAAK,WACL,IAAK,UACL,IAAK,YACL,IAAK,OACL,IAAK,UACL,IAAK,WACL,IAAK,QACL,IAAK,UACL,IAAK,UACL,IAAK,WACL,IAAK,QACL,IAAK,YACL,IAAK,UACL,IAAK,QACL,IAAK,QACL,IAAK,OACL,IAAK,gBACL,IAAK,cACL,IAAK,YACL,IAAK,aACL,IAAK,QACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,cACL,IAAK,WACL,IAAK,aACL,IAAK,eACL,IAAK,SACL,IAAK,kBACL,IAAK,YACL,IAAK,mBACL,IAAK,iBACL,IAAK,oBACL,IAAK,aACL,IAAK,YACL,IAAK,cACL,IAAK,OACL,IAAK,mBACL,IAAK,QACL,IAAK,aACL,IAAK,WACL,IAAK,SACL,IAAK,cACH,MAAO,GACT,IAAK,OACL,IAAK,YACL,IAAK,WACL,IAAK,YACL,IAAK,WACL,IAAK,YACL,IAAK,WACL,IAAK,YACL,IAAK,cACL,IAAK,aACL,IAAK,cACL,IAAK,SACL,IAAK,YACL,IAAK,QACL,IAAK,aACL,IAAK,aACL,IAAK,eACL,IAAK,eACH,MAAO,GACT,IAAK,UACH,OAAQzP,GAAwB,EAAG,CACjC,KAAKC,GACH,MAAO,GACT,KAAKC,GACH,MAAO,GACT,KAAKC,GACL,KAAKC,GACH,MAAO,IACT,KAAKC,GACH,MAAO,WACT,QACE,MAAO,GACX,CACF,QACE,MAAO,GACX,CACF,CACA,IAAIuzC,GAA4B,GAC9BC,GAAc,KACdC,GAAa,KACbC,GAAc,KACdC,GAAiB,IAAI,IACrBC,GAAwB,IAAI,IAC5BC,GAAiC,CAAC,EAClCR,GACE,sPAAsP,MACpP,GACF,EACJ,SAASF,GAAuB/jC,EAAcrF,EAAa,CACzD,OAAQqF,EAAc,CACpB,IAAK,UACL,IAAK,WACHokC,GAAc,KACd,MACF,IAAK,YACL,IAAK,YACHC,GAAa,KACb,MACF,IAAK,YACL,IAAK,WACHC,GAAc,KACd,MACF,IAAK,cACL,IAAK,aACHC,GAAe,OAAO5pC,EAAY,SAAS,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,KACA,OACA,SACA,SACA,KACA,OACA,IACA,MACA,QACA,MACA,MACA,QACA,SACA,KACA,OACA,MACA,OACA,UACA,OACA,WACA,QACA,MACA,OACA,KACA,WACA,SACA,SACA,IACA,UACA,MACA,WACA,IACA,KACA,KACA,OACA,IACA,OACA,SACA,UACA,SACA,SACA,OACA,QACA,SACA,SACA,OACA,SACA,SACA,QACA,MACA,UACA,MACA,QACA,QACA,KACA,WACA,WACA,QACA,KACA,QACA,OACA,KACA,QACA,KACA,IACA,KACA,MACA,QACA,KAAK,CACG,EAEGkG,GAAMlG,GAAO,CACxB,MACA,IACA,WACA,cACA,eACA,eACA,gBACA,mBACA,SACA,WACA,OACA,OACA,UACA,eACA,cACA,SACA,OACA,IACA,QACA,WACA,QACA,QACA,YACA,OACA,iBACA,SACA,OACA,WACA,QACA,OACA,OACA,UACA,UACA,WACA,iBACA,OACA,OACA,QACA,SACA,SACA,OACA,WACA,QACA,OACA,QACA,OACA,OAAO,CACC,EAEGmG,GAAanG,GAAO,CAC/B,UACA,gBACA,sBACA,cACA,mBACA,oBACA,oBACA,iBACA,eACA,UACA,UACA,UACA,UACA,UACA,iBACA,UACA,UACA,cACA,eACA,WACA,eACA,qBACA,cACA,SACA,cAAc,CACN,EAMGoG,GAAgBpG,GAAO,CAClC,UACA,gBACA,SACA,UACA,YACA,mBACA,iBACA,gBACA,gBACA,gBACA,QACA,YACA,OACA,eACA,YACA,UACA,gBACA,SACA,MACA,aACA,UACA,KAAK,CACG,EAEGqG,GAASrG,GAAO,CAC3B,OACA,WACA,SACA,UACA,QACA,SACA,KACA,aACA,gBACA,KACA,KACA,QACA,UACA,WACA,QACA,OACA,KACA,SACA,QACA,SACA,OACA,OACA,UACA,SACA,MACA,QACA,MACA,SACA,aACA,aAAa,CACL,EAIGsG,GAAmBtG,GAAO,CACrC,UACA,cACA,aACA,WACA,YACA,UACA,UACA,SACA,SACA,QACA,YACA,aACA,iBACA,cACA,MAAM,CACE,EAEGuG,GAAOvG,GAAO,CAAC,OAAO,CAAU,EC1RhCiG,GAAOjG,GAAO,CACzB,SACA,SACA,QACA,MACA,iBACA,eACA,uBACA,WACA,aACA,UACA,SACA,UACA,cACA,cACA,UACA,OACA,QACA,QACA,QACA,OACA,UACA,UACA,aACA,WACA,eACA,SACA,cACA,WACA,WACA,UACA,MACA,WACA,0BACA,wBACA,WACA,YACA,UACA,eACA,cACA,OACA,MACA,UACA,SACA,SACA,OACA,OACA,WACA,KACA,QACA,YACA,YACA,QACA,OACA,QACA,OACA,OACA,UACA,OACA,MACA,MACA,YACA,QACA,SACA,MACA,YACA,WACA,QACA,OACA,QACA,UACA,aACA,SACA,OACA,UACA,OACA,UACA,cACA,cACA,UACA,gBACA,sBACA,SACA,UACA,UACA,aACA,WACA,MACA,WACA,MACA,WACA,OACA,OACA,UACA,aACA,QACA,WACA,QACA,OACA,QACA,OACA,OACA,UACA,QACA,MACA,SACA,OACA,QACA,UACA,WACA,QACA,YACA,OACA,SACA,SACA,QACA,QACA,OACA,OAAO,CACC,EAEGkG,GAAMlG,GAAO,CACxB,gBACA,aACA,WACA,qBACA,YACA,SACA,gBACA,gBACA,UACA,gBACA,iBACA,QACA,OACA,KACA,QACA,OACA,gBACA,YACA,YACA,QACA,sBACA,8BACA,gBACA,kBACA,KACA,KACA,IACA,KACA,KACA,kBACA,YACA,UACA,UACA,MACA,WACA,YACA,MACA,WACA,OACA,eACA,YACA,SACA,cACA,cACA,gBACA,cACA,YACA,mBACA,eACA,aACA,eACA,cACA,KACA,KACA,KACA,KACA,aACA,WACA,gBACA,oBACA,SACA,OACA,KACA,kBACA,KACA,MACA,YACA,IACA,KACA,KACA,KACA,KACA,UACA,YACA,aACA,WACA,OACA,eACA,iBACA,eACA,mBACA,iBACA,QACA,aACA,aACA,eACA,eACA,cACA,cACA,mBACA,YACA,MACA,OACA,YACA,QACA,SACA,OACA,MACA,OACA,aACA,SACA,WACA,UACA,QACA,SACA,cACA,SACA,WACA,cACA,OACA,aACA,sBACA,mBACA,eACA,SACA,gBACA,sBACA,iBACA,IACA,KACA,KACA,SACA,OACA,OACA,cACA,YACA,UACA,SACA,SACA,QACA,OACA,kBACA,QACA,mBACA,mBACA,eACA,cACA,eACA,cACA,aACA,eACA,mBACA,oBACA,iBACA,kBACA,oBACA,iBACA,SACA,eACA,QACA,eACA,iBACA,WACA,cACA,UACA,UACA,YACA,mBACA,cACA,kBACA,iBACA,aACA,OACA,KACA,KACA,UACA,SACA,UACA,aACA,UACA,aACA,gBACA,gBACA,QACA,eACA,OACA,eACA,mBACA,mBACA,IACA,KACA,KACA,QACA,IACA,KACA,KACA,IACA,YAAY,CACJ,EAEGqG,GAASrG,GAAO,CAC3B,SACA,cACA,QACA,WACA,QACA,cACA,cACA,gBACA,aACA,aACA,QACA,MACA,UACA,eACA,WACA,QACA,QACA,SACA,OACA,KACA,UACA,SACA,gBACA,SACA,SACA,iBACA,YACA,WACA,cACA,UACA,UACA,gBACA,WACA,WACA,OACA,WACA,WACA,aACA,UACA,SACA,SACA,cACA,gBACA,uBACA,YACA,YACA,aACA,WACA,iBACA,iBACA,YACA,UACA,QACA,OAAO,CACR,EAEYwG,GAAMxG,GAAO,CACxB,aACA,SACA,cACA,YACA,aAAa,CACL,ECvXGyG,GAAgBxG,GAAK,uBAAuB,EAC5CyG,GAAWzG,GAAK,uBAAuB,EACvC0G,GAAc1G,GAAK,aAAa,EAChC2G,GAAY3G,GAAK,8BAA8B,EAC/C4G,GAAY5G,GAAK,gBAAgB,EACjC6G,GAAiB7G,GAC5B,oGAEW8G,GAAoB9G,GAAK,uBAAuB,EAChD+G,GAAkB/G,GAC7B,+DAEWgH,GAAehH,GAAK,SAAS,EAC7BiH,GAAiBjH,GAAK,0BAA0B,EC0BvDkH,GAAY,CAChB1C,QAAS,EACT2C,UAAW,EACXb,KAAM,EACNc,aAAc,EACdC,gBAAiB,EACjBC,WAA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",- "names": ["require_react_production", "__commonJSMin", "exports", "REACT_ELEMENT_TYPE", "REACT_PORTAL_TYPE", "REACT_FRAGMENT_TYPE", "REACT_STRICT_MODE_TYPE", "REACT_PROFILER_TYPE", "REACT_CONSUMER_TYPE", "REACT_CONTEXT_TYPE", "REACT_FORWARD_REF_TYPE", "REACT_SUSPENSE_TYPE", "REACT_MEMO_TYPE", "REACT_LAZY_TYPE", "REACT_ACTIVITY_TYPE", "MAYBE_ITERATOR_SYMBOL", "getIteratorFn", "maybeIterable", "ReactNoopUpdateQueue", "assign", "emptyObject", "Component", "props", "context", "updater", "partialState", "callback", "ComponentDummy", "PureComponent", "pureComponentPrototype", "isArrayImpl", "noop", "ReactSharedInternals", "hasOwnProperty", "ReactElement", "type", "key", "refProp", "cloneAndReplaceKey", "oldElement", "newKey", "isValidElement", "object", "escape", "escaperLookup", "match", "userProvidedKeyEscapeRegex", "getElementKey", "element", "index", "resolveThenable", "thenable", "fulfilledValue", "error", "mapIntoArray", "children", "array", "escapedPrefix", "nameSoFar", "invokeCallback", "c", "nextNamePrefix", "i", "mapChildren", "func", "result", "count", "child", "lazyInitializer", "payload", "ctor", "moduleObject", "reportGlobalError", "event", "Children", "forEachFunc", "forEachContext", "n", "size", "fn", "config", "propName", "childArray", "defaultValue", "childrenLength", "render", "compare", "scope", "prevTransition", "currentTransition", "returnValue", "onStartTransitionFinish", "usable", "action", "initialState", "permalink", "deps", "Context", "value", "initialValue", "create", "ref", "passthrough", "reducer", "initialArg", "init", "subscribe", "getSnapshot", "getServerSnapshot", "require_react", "__commonJSMin", "exports", "module", "require_void_elements", "__commonJSMin", "exports", "module", "require_use_sync_external_store_shim_production", "__commonJSMin", "exports", "React", "is", "x", "y", "objectIs", "useState", "useEffect", "useLayoutEffect", "useDebugValue", "useSyncExternalStore$2", "subscribe", "getSnapshot", "value", "_useState", "inst", "forceUpdate", "checkIfSnapshotChanged", "latestGetSnapshot", "nextValue", "error", "useSyncExternalStore$1", "shim", "require_shim", "__commonJSMin", "exports", "module", "require_scheduler_production", "__commonJSMin", "exports", "push", "heap", "node", "index", "a", "parentIndex", "parent", "compare", "peek", "pop", "first", "last", "length", "halfLength", "leftIndex", "left", "rightIndex", "right", "b", "diff", "localPerformance", "localDate", "initialTime", "taskQueue", "timerQueue", "taskIdCounter", "currentTask", "currentPriorityLevel", "isPerformingWork", "isHostCallbackScheduled", "isHostTimeoutScheduled", "needsPaint", "localSetTimeout", "localClearTimeout", "localSetImmediate", "advanceTimers", "currentTime", "timer", "handleTimeout", "isMessageLoopRunning", "schedulePerformWorkUntilDeadline", "firstTimer", "requestHostTimeout", "taskTimeoutID", "frameInterval", "startTime", "shouldYieldToHost", "performWorkUntilDeadline", "hasMoreWork", "previousPriorityLevel", "callback", "continuationCallback", "channel", "port", "ms", "task", "fps", "eventHandler", "priorityLevel", "options", "timeout", "parentPriorityLevel", "require_scheduler", "__commonJSMin", "exports", "module", "require_react_dom_production", "__commonJSMin", "exports", "React", "formatProdErrorMessage", "code", "url", "i", "noop", "Internals", "REACT_PORTAL_TYPE", "createPortal$1", "children", "containerInfo", "implementation", "key", "ReactSharedInternals", "getCrossOriginStringAs", "as", "input", "container", "fn", "previousTransition", "previousUpdatePriority", "href", "options", "crossOrigin", "integrity", "fetchPriority", "form", "a", "action", "initialState", "permalink", "require_react_dom", "__commonJSMin", "exports", "module", "checkDCE", "err", "require_react_dom_client_production", "__commonJSMin", "exports", "Scheduler", "React", "ReactDOM", "formatProdErrorMessage", "code", "url", "i", "isValidContainer", "node", "getNearestMountedFiber", "fiber", "nearestMounted", "getSuspenseInstanceFromFiber", "suspenseState", "getActivityInstanceFromFiber", "activityState", "assertIsMounted", "findCurrentFiberUsingSlowPath", "alternate", "a", "b", "parentA", "parentB", "didFindChild", "child$0", "findCurrentHostFiberImpl", "tag", "assign", "REACT_LEGACY_ELEMENT_TYPE", "REACT_ELEMENT_TYPE", "REACT_PORTAL_TYPE", "REACT_FRAGMENT_TYPE", "REACT_STRICT_MODE_TYPE", "REACT_PROFILER_TYPE", "REACT_CONSUMER_TYPE", "REACT_CONTEXT_TYPE", "REACT_FORWARD_REF_TYPE", "REACT_SUSPENSE_TYPE", "REACT_SUSPENSE_LIST_TYPE", "REACT_MEMO_TYPE", "REACT_LAZY_TYPE", "REACT_ACTIVITY_TYPE", "REACT_MEMO_CACHE_SENTINEL", "MAYBE_ITERATOR_SYMBOL", "getIteratorFn", "maybeIterable", "REACT_CLIENT_REFERENCE", "getComponentNameFromType", "type", "innerType", "x", "isArrayImpl", "ReactSharedInternals", "ReactDOMSharedInternals", "sharedNotPendingObject", "valueStack", "index", "createCursor", "defaultValue", "pop", "cursor", "push", "value", "contextStackCursor", "contextFiberStackCursor", "rootInstanceStackCursor", "hostTransitionProviderCursor", "pushHostContainer", "nextRootInstance", "getOwnHostContext", "getChildHostContextProd", "popHostContainer", "pushHostContext", "context", "JSCompiler_inline_result", "popHostContext", "HostTransitionContext", "prefix", "suffix", "describeBuiltInComponentFrame", "name", "match", "reentry", "describeNativeComponentFrame", "fn", "construct", "previousPrepareStackTrace", "RunInRootFrame", "Fake", "control", "x$1", "x$2", "sample", "namePropDescriptor", "_RunInRootFrame$Deter", "sampleStack", "controlStack", "sampleLines", "controlLines", "frame", "describeFiber", "childFiber", "getStackByFiberInDevAndProd", "workInProgress", "info", "previous", "hasOwnProperty", "scheduleCallback$3", "cancelCallback$1", "shouldYield", "requestPaint", "now", "getCurrentPriorityLevel", "ImmediatePriority", "UserBlockingPriority", "NormalPriority$1", "LowPriority", "IdlePriority", "log$1", "unstable_setDisableYieldValue", "rendererID", "injectedHook", "setIsStrictModeForDevtools", "newIsStrictMode", "err", "clz32", "clz32Fallback", "log", "LN2", "nextTransitionUpdateLane", "nextTransitionDeferredLane", "nextRetryLane", "getHighestPriorityLanes", "lanes", "pendingSyncLanes", "getNextLanes", "root", "wipLanes", "rootHasPendingCommit", "pendingLanes", "nextLanes", "suspendedLanes", "pingedLanes", "nonIdlePendingLanes", "checkIfRootIsPrerendering", "renderLanes", "computeExpirationTime", "lane", "currentTime", "claimNextRetryLane", "createLaneMap", "initial", "laneMap", "markRootUpdated$1", "updateLane", "markRootFinished", "finishedLanes", "remainingLanes", "spawnedLane", "updatedLanes", "suspendedRetryLanes", "previouslyPendingLanes", "entanglements", "expirationTimes", "hiddenUpdates", "index$7", "hiddenUpdatesForLane", "update", "markSpawnedDeferredLane", "entangledLanes", "spawnedLaneIndex", "markRootEntangled", "rootEntangledLanes", "index$8", "getBumpedLaneForHydration", "renderLane", "getBumpedLaneForHydrationByLane", "lanesToEventPriority", "resolveUpdatePriority", "updatePriority", "getEventPriority", "runWithPriority", "priority", "previousPriority", "randomKey", "internalInstanceKey", "internalPropsKey", "internalContainerInstanceKey", "internalEventHandlersKey", "internalEventHandlerListenersKey", "internalEventHandlesSetKey", "internalRootNodeResourcesKey", "internalHoistableMarker", "detachDeletedInstance", "getClosestInstanceFromNode", "targetNode", "targetInst", "parentNode", "getParentHydrationBoundary", "getInstanceFromNode", "getNodeFromInstance", "inst", "getResourcesFromRoot", "resources", "markNodeAsHoistable", "allNativeEvents", "registrationNameDependencies", "registerTwoPhaseEvent", "registrationName", "dependencies", "registerDirectEvent", "VALID_ATTRIBUTE_NAME_REGEX", "illegalAttributeNameCache", "validatedAttributeNameCache", "isAttributeNameSafe", "attributeName", "setValueForAttribute", "prefix$10", "setValueForKnownAttribute", "setValueForNamespacedAttribute", "namespace", "getToStringValue", "isCheckable", "elem", "trackValueOnNode", "valueField", "currentValue", "descriptor", "get", "set", "track", "updateValueIfChanged", "tracker", "lastValue", "getActiveElement", "doc", "e", "escapeSelectorAttributeValueInsideDoubleQuotesRegex", "escapeSelectorAttributeValueInsideDoubleQuotes", "ch", "updateInput", "element", "lastDefaultValue", "checked", "defaultChecked", "setDefaultValue", "initInput", "isHydrating", "updateOptions", "multiple", "propValue", "setDefaultSelected", "updateTextarea", "initTextarea", "children", "setTextContent", "text", "firstChild", "unitlessNumbers", "setValueForStyle", "style", "styleName", "isCustomProperty", "setValueForStyles", "styles", "prevStyles", "styleName$16", "styleName$17", "isCustomElement", "tagName", "aliases", "isJavaScriptProtocol", "sanitizeURL", "noop$1", "currentReplayingEvent", "getEventTarget", "nativeEvent", "restoreTarget", "restoreQueue", "restoreStateOfTarget", "target", "internalInstance", "props", "otherNode", "otherProps", "isInsideEventHandler", "batchedUpdates$1", "flushSyncWork$1", "getListener", "stateNode", "canUseDOM", "passiveBrowserEventsSupported", "options", "startText", "fallbackText", "getData", "start", "startValue", "startLength", "end", "endValue", "endLength", "minEnd", "getEventCharCode", "keyCode", "functionThatReturnsTrue", "functionThatReturnsFalse", "createSyntheticEvent", "Interface", "SyntheticBaseEvent", "reactName", "reactEventType", "nativeEventTarget", "propName", "event", "EventInterface", "SyntheticEvent", "UIEventInterface", "SyntheticUIEvent", "lastMovementX", "lastMovementY", "lastMouseEvent", "MouseEventInterface", "getEventModifierState", "SyntheticMouseEvent", "DragEventInterface", "SyntheticDragEvent", "FocusEventInterface", "SyntheticFocusEvent", "AnimationEventInterface", "SyntheticAnimationEvent", "ClipboardEventInterface", "SyntheticClipboardEvent", "CompositionEventInterface", "SyntheticCompositionEvent", "normalizeKey", "translateToKey", "modifierKeyToProp", "modifierStateGetter", "keyArg", "KeyboardEventInterface", "key", "SyntheticKeyboardEvent", "PointerEventInterface", "SyntheticPointerEvent", "TouchEventInterface", "SyntheticTouchEvent", "TransitionEventInterface", "SyntheticTransitionEvent", "WheelEventInterface", "SyntheticWheelEvent", "ToggleEventInterface", "SyntheticToggleEvent", "END_KEYCODES", "canUseCompositionEvent", "documentMode", "canUseTextInputEvent", "useFallbackCompositionData", "SPACEBAR_CHAR", "hasSpaceKeypress", "isFallbackCompositionEnd", "domEventName", "getDataFromCustomEvent", "isComposing", "getNativeBeforeInputChars", "getFallbackBeforeInputChars", "supportedInputTypes", "isTextInputElement", "nodeName", "createAndAccumulateChangeEvent", "dispatchQueue", "accumulateTwoPhaseListeners", "activeElement$1", "activeElementInst$1", "runEventInBatch", "processDispatchQueue", "getInstIfValueChanged", "getTargetInstForChangeEvent", "isInputEventSupported", "isSupported$jscomp$inline_427", "element$jscomp$inline_428", "JSCompiler_inline_result$jscomp$286", "stopWatchingForValueChange", "handlePropertyChange", "handleEventsForInputEventPolyfill", "getTargetInstForInputEventPolyfill", "getTargetInstForClickEvent", "getTargetInstForInputOrChangeEvent", "is", "y", "objectIs", "shallowEqual", "objA", "objB", "keysA", "keysB", "currentKey", "getLeafNode", "getNodeForCharacterOffset", "offset", "nodeEnd", "containsNode", "outerNode", "innerNode", "getActiveElementDeep", "containerInfo", "hasSelectionCapabilities", "skipSelectionChangeEvent", "activeElement", "activeElementInst", "lastSelection", "mouseDown", "constructSelectEvent", "makePrefixMap", "styleProp", "eventName", "prefixes", "vendorPrefixes", "prefixedEventNames", "getVendorPrefixedEventName", "prefixMap", "ANIMATION_END", "ANIMATION_ITERATION", "ANIMATION_START", "TRANSITION_RUN", "TRANSITION_START", "TRANSITION_CANCEL", "TRANSITION_END", "topLevelEventsToReactNames", "simpleEventPluginEvents", "registerSimpleEvent", "reportGlobalError", "error", "concurrentQueues", "concurrentQueuesIndex", "concurrentlyUpdatedLanes", "finishQueueingConcurrentUpdates", "endIndex", "queue", "pending", "markUpdateLaneFromFiberToRoot", "enqueueUpdate$1", "enqueueConcurrentHookUpdate", "getRootForUpdatedFiber", "enqueueConcurrentRenderForLane", "sourceFiber", "isHidden", "parent", "nestedUpdateCount", "rootWithNestedUpdates", "emptyContextObject", "FiberNode", "pendingProps", "mode", "createFiberImplClass", "shouldConstruct", "Component", "createWorkInProgress", "current", "resetWorkInProgress", "createFiberFromTypeAndProps", "owner", "fiberTag", "isHostHoistableType", "createFiberFromFragment", "elements", "createFiberFromText", "content", "createFiberFromDehydratedFragment", "dehydratedNode", "createFiberFromPortal", "portal", "CapturedStacks", "createCapturedValueAtFiber", "source", "existing", "forkStack", "forkStackIndex", "treeForkProvider", "treeForkCount", "idStack", "idStackIndex", "treeContextProvider", "treeContextId", "treeContextOverflow", "pushTreeFork", "totalChildren", "pushTreeId", "baseIdWithLeadingBit", "baseLength", "length", "numberOfOverflowBits", "pushMaterializedTreeId", "popTreeContext", "restoreSuspendedTreeContext", "suspendedContext", "hydrationParentFiber", "nextHydratableInstance", "hydrationErrors", "rootOrSingletonContext", "HydrationMismatchException", "throwOnHydrationMismatch", "queueHydrationError", "prepareToHydrateHostInstance", "instance", "listenToNonDelegatedEvent", "mediaEventTypes", "checkForUnmatchedText", "popToNextHostParent", "popHydrationState", "JSCompiler_temp", "shouldSetTextContent", "getNextHydratableInstanceAfterHydrationBoundary", "isSingletonScope", "previousHydratableOnEnteringScopedSingleton", "getNextHydratable", "resetHydrationState", "upgradeHydrationErrorsToRecoverable", "queuedErrors", "workInProgressRootRecoverableErrors", "valueCursor", "currentlyRenderingFiber$1", "lastContextDependency", "pushProvider", "providerFiber", "nextValue", "popProvider", "scheduleContextWorkOnParentPath", "propagationRoot", "propagateContextChanges", "contexts", "forcePropagateEntireTree", "list", "nextFiber", "dependency", "propagateParentContextChanges", "isInsidePropagationBailout", "currentParent", "checkIfContextChanged", "currentDependencies", "prepareToReadContext", "readContext", "readContextForConsumer", "readContextDuringReconciliation", "consumer", "AbortControllerLocal", "listeners", "signal", "listener", "scheduleCallback$2", "NormalPriority", "CacheContext", "createCache", "releaseCache", "cache", "currentEntangledListeners", "currentEntangledPendingCount", "currentEntangledLane", "currentEntangledActionThenable", "entangleAsyncAction", "transition", "thenable", "entangledListeners", "requestTransitionLane", "resolve", "pingEngtangledActionScope", "chainThenableValue", "result", "thenableWithOverride", "prevOnStartTransitionFinish", "returnValue", "globalMostRecentTransitionTime", "resumedCache", "peekCacheFromPool", "cacheResumedFromPreviousRender", "workInProgressRoot", "pushTransition", "offscreenWorkInProgress", "prevCachePool", "getSuspendedCache", "cacheFromPool", "SuspenseException", "SuspenseyCommitException", "SuspenseActionException", "noopSuspenseyCommitThenable", "isThenableResolved", "trackUsedThenable", "thenableState", "checkIfUseWrappedInAsyncCatch", "fulfilledValue", "fulfilledThenable", "rejectedThenable", "suspendedThenable", "resolveLazy", "lazyType", "init", "getSuspendedThenable", "rejectedReason", "thenableState$1", "thenableIndexCounter$1", "unwrapThenable", "coerceRef", "throwOnInvalidObjectTypeImpl", "returnFiber", "newChild", "createChildReconciler", "shouldTrackSideEffects", "deleteChild", "childToDelete", "deletions", "deleteRemainingChildren", "currentFirstChild", "mapRemainingChildren", "existingChildren", "useFiber", "placeChild", "newFiber", "lastPlacedIndex", "newIndex", "placeSingleChild", "updateTextNode", "textContent", "updateElement", "elementType", "updateFragment", "updatePortal", "fragment", "createChild", "updateSlot", "oldFiber", "updateFromMap", "newIdx", "reconcileChildrenArray", "newChildren", "resultingFirstChild", "previousNewFiber", "nextOldFiber", "child", "reconcileChildrenIterator", "step", "reconcileChildFibersImpl", "firstChildFiber", "reconcileChildFibers", "mountChildFibers", "hasForceUpdate", "initializeUpdateQueue", "cloneUpdateQueue", "createUpdate", "enqueueUpdate", "updateQueue", "executionContext", "entangleTransitions", "queueLanes", "enqueueCapturedUpdate", "capturedUpdate", "newFirst", "newLast", "clone", "didReadFromEntangledAsyncAction", "suspendIfUpdateReadFromEntangledAsyncAction", "entangledActionThenable", "processUpdateQueue", "workInProgress$jscomp$0", "instance$jscomp$0", "firstBaseUpdate", "lastBaseUpdate", "pendingQueue", "lastPendingUpdate", "firstPendingUpdate", "newState", "isHiddenUpdate", "workInProgressRootRenderLanes", "workInProgressRootSkippedLanes", "callCallback", "callback", "commitCallbacks", "callbacks", "currentTreeHiddenStackCursor", "prevEntangledRenderLanesCursor", "pushHiddenContext", "entangledRenderLanes", "reuseHiddenContextOnStack", "popHiddenContext", "suspenseHandlerStackCursor", "shellBoundary", "pushPrimaryTreeSuspenseHandler", "handler", "suspenseStackCursor", "pushDehydratedActivitySuspenseHandler", "pushOffscreenSuspenseHandler", "reuseSuspenseHandlerOnStack", "popSuspenseHandler", "findFirstSuspended", "row", "state", "isSuspenseInstancePending", "isSuspenseInstanceFallback", "currentlyRenderingFiber", "currentHook", "workInProgressHook", "didScheduleRenderPhaseUpdate", "didScheduleRenderPhaseUpdateDuringThisPass", "shouldDoubleInvokeUserFnsInHooksDEV", "localIdCounter", "thenableIndexCounter", "globalClientIdCounter", "throwInvalidHookError", "areHookInputsEqual", "nextDeps", "prevDeps", "renderWithHooks", "secondArg", "nextRenderLanes", "HooksDispatcherOnMount", "HooksDispatcherOnUpdate", "renderWithHooksAgain", "finishRenderingHooks", "ContextOnlyDispatcher", "didRenderTooFewHooks", "didReceiveUpdate", "numberOfReRenders", "HooksDispatcherOnRerender", "TransitionAwareHostComponent", "dispatcher", "maybeThenable", "useThenable", "checkDidRenderIdHook", "didRenderIdHook", "bailoutHooks", "resetHooksOnUnwind", "mountWorkInProgressHook", "hook", "updateWorkInProgressHook", "nextCurrentHook", "nextWorkInProgressHook", "createFunctionComponentUpdateQueue", "use", "usable", "useMemoCache", "size", "memoCache", "array", "basicStateReducer", "action", "updateReducer", "reducer", "updateReducerImpl", "baseQueue", "baseFirst", "newBaseQueueFirst", "newBaseQueueLast", "didReadFromEntangledAsyncAction$60", "revertLane", "rerenderReducer", "dispatch", "lastRenderPhaseUpdate", "updateSyncExternalStore", "subscribe", "getSnapshot", "getServerSnapshot", "isHydrating$jscomp$0", "snapshotChanged", "updateEffect", "subscribeToStore", "pushSimpleEffect", "updateStoreInstance", "pushStoreConsistencyCheck", "renderedSnapshot", "nextSnapshot", "checkIfSnapshotChanged", "forceStoreRerender", "latestGetSnapshot", "scheduleUpdateOnFiber", "mountStateImpl", "initialState", "initialStateInitializer", "updateOptimisticImpl", "passthrough", "dispatchActionState", "actionQueue", "setPendingState", "setState", "payload", "isRenderPhaseUpdate", "actionNode", "runActionStateAction", "prevState", "prevTransition", "currentTransition", "onStartTransitionFinish", "handleActionReturnValue", "onActionError", "error$66", "nextState", "onActionSuccess", "notifyActionListeners", "last", "actionStateReducer", "oldState", "mountActionState", "initialStateProp", "ssrFormState", "JSCompiler_inline_result$jscomp$0", "inRootOrSingleton", "dispatchSetState", "dispatchOptimisticSetState", "updateActionState", "stateHook", "updateActionStateImpl", "currentStateHook", "actionStateActionEffect", "rerenderActionState", "create", "deps", "updateRef", "mountEffectImpl", "fiberFlags", "hookFlags", "updateEffectImpl", "mountEffect", "useEffectEventImpl", "componentUpdateQueue", "events", "updateEvent", "ref", "updateInsertionEffect", "updateLayoutEffect", "imperativeHandleEffect", "refCleanup", "updateImperativeHandle", "mountDebugValue", "updateCallback", "updateMemo", "nextCreate", "mountDeferredValueImpl", "initialValue", "requestDeferredLane", "updateDeferredValueImpl", "prevValue", "startTransition", "pendingState", "finishedState", "thenableForFinishedState", "dispatchSetStateInternal", "requestUpdateLane", "noop", "startHostTransition", "formFiber", "formData", "ensureFormComponentIsStateful", "requestFormReset$1", "existingStateHook", "initialResetState", "useHostTransitionStatus", "updateId", "updateRefresh", "refreshCache", "provider", "root$69", "dispatchReducerAction", "enqueueRenderPhaseUpdate", "entangleTransitionUpdate", "currentState", "eagerState", "throwIfDuringRender", "initialArg", "identifierPrefix", "idWithLeadingBit", "booleanOrThenable", "applyDerivedStateFromProps", "ctor", "getDerivedStateFromProps", "nextProps", "classComponentUpdater", "checkShouldComponentUpdate", "oldProps", "newProps", "nextContext", "callComponentWillReceiveProps", "resolveClassComponentProps", "baseProps", "propName$73", "defaultOnUncaughtError", "defaultOnCaughtError", "defaultOnRecoverableError", "logUncaughtError", "errorInfo", "onUncaughtError", "e$74", "logCaughtError", "boundary", "onCaughtError", "e$75", "createRootErrorUpdate", "createClassErrorUpdate", "initializeClassErrorUpdate", "getDerivedStateFromError", "legacyErrorBoundariesThatAlreadyFailed", "stack", "throwException", "rootRenderLanes", "renderDidSuspendDelayIfPossible", "workInProgressRootExitStatus", "attachPingListener", "wrapperError", "workInProgressRootConcurrentErrors", "SelectiveHydrationException", "reconcileChildren", "nextChildren", "updateForwardRef", "propsWithoutRef", "bailoutOnAlreadyFinishedWork", "updateMemoComponent", "updateSimpleMemoComponent", "checkScheduledUpdateOrContext", "prevProps", "updateFunctionComponent", "updateOffscreenComponent", "deferHiddenOffscreenComponent", "bailoutOffscreenComponent", "nextBaseLanes", "remainingChildLanes", "mountActivityChildren", "mountWorkInProgressOffscreenFiber", "retryActivityComponentWithoutHydrating", "updateActivityComponent", "didSuspend", "canHydrateHydrationBoundary", "dehydrated", "markRef", "replayFunctionComponent", "updateClassComponent", "contextType", "unresolvedOldProps", "oldContext", "contextType$jscomp$0", "mountHostRootWithoutHydrating", "SUSPENDED_MARKER", "mountSuspenseOffscreenState", "getRemainingWorkInPrimaryTree", "primaryTreeDidDefer", "workInProgressDeferredLane", "updateSuspenseComponent", "showFallback", "nextPrimaryChildren", "mountSuspensePrimaryChildren", "retrySuspenseComponentWithoutHydrating", "digest", "primaryChildren", "offscreenProps", "scheduleSuspenseWorkOnFiber", "initSuspenseListRenderState", "isBackwards", "tail", "lastContentRow", "tailMode", "renderState", "updateSuspenseListComponent", "revealOrder", "suspenseContext", "shouldForceFallback", "attemptEarlyBailoutIfNoScheduledUpdate", "state$102", "didSuspendBefore", "beginWork", "$$typeof", "getResource", "getOwnerDocumentFromRootContainer", "setInitialProperties", "resolveSingletonInstance", "canHydrateInstance", "canHydrateTextInstance", "markUpdate", "preloadInstanceAndSuspendIfNeeded", "shouldRemainOnPreviousScreen", "preloadResourceAndSuspendIfNeeded", "resource", "preloadResource", "scheduleRetryEffect", "retryQueue", "workInProgressSuspendedRetryLanes", "cutOffTailIfNeeded", "hasRenderedATailFallback", "lastTailNode", "lastTailNode$106", "bubbleProperties", "completedWork", "didBailout", "newChildLanes", "subtreeFlags", "child$107", "completeWork", "nextResource", "ownerDocument", "listenToAllSupportedEvents", "workInProgressRootRenderTargetTime", "unwindWork", "unwindInterruptedWork", "interruptedWork", "commitHookEffectListMount", "flags", "finishedWork", "lastEffect", "firstEffect", "captureCommitPhaseError", "commitHookEffectListUnmount", "nearestMountedAncestor$jscomp$0", "destroy", "nearestMountedAncestor", "destroy_", "commitClassCallbacks", "safelyCallComponentWillUnmount", "safelyAttachRef", "instanceToUse", "safelyDetachRef", "error$140", "commitHostMount", "commitHostUpdate", "domElement", "updateProperties", "isHostParent", "getHostSibling", "insertOrAppendPlacementNodeIntoContainer", "before", "insertOrAppendPlacementNode", "commitHostSingletonAcquisition", "singleton", "attributes", "offscreenSubtreeIsHidden", "offscreenSubtreeWasHidden", "needsFormReset", "PossiblyWeakSet", "nextEffect", "commitBeforeMutationEffects", "eventsEnabled", "_enabled", "selection", "anchorOffset", "focusNode", "e$20", "indexWithinAnchor", "indexWithinFocus", "next", "selectionInformation", "resolvedPrevProps", "clearContainerSparingly", "commitLayoutEffectOnFiber", "finishedRoot", "recursivelyTraverseLayoutEffects", "error$139", "commitActivityHydrationCallbacks", "commitSuspenseHydrationCallbacks", "retryDehydratedSuspenseBoundary", "registerSuspenseInstanceRetry", "prevOffscreenSubtreeWasHidden", "recursivelyTraverseReappearLayoutEffects", "detachFiberAfterEffects", "hostParent", "hostParentIsContainer", "recursivelyTraverseDeletionEffects", "commitDeletionEffectsOnFiber", "deletedFiber", "prevHostParent", "prevHostParentIsContainer", "releaseSingletonInstance", "clearHydrationBoundary", "retryIfBlockedOn", "getRetryCache", "retryCache", "attachSuspenseRetryListeners", "wakeables", "wakeable", "retry", "resolveRetryWakeable", "recursivelyTraverseMutationEffects", "root$jscomp$0", "parentFiber", "commitMutationEffectsOnFiber", "currentHoistableRoot", "commitReconciliationEffects", "hoistableRoot", "currentResource", "maybeNodes", "getHydratableHoistableCache", "mountHoistable", "acquireResource", "tagCaches", "getHoistableRoot", "recursivelyResetForms", "globalMostRecentFallbackTime", "wasHidden", "prevOffscreenSubtreeIsHidden", "recursivelyTraverseDisappearLayoutEffects", "display", "hideOrUnhideDehydratedBoundary", "hostParentFiber", "parent$141", "before$142", "parent$143", "before$144", "finishedRoot$jscomp$0", "includeWorkInProgressEffects", "hiddenCallbacks", "commitOffscreenPassiveMountEffects", "previousCache", "commitCachePassiveMountEffect", "recursivelyTraversePassiveMountEffects", "committedLanes", "committedTransitions", "commitPassiveMountOnFiber", "_finishedWork$memoize2", "id", "onPostCommit", "recursivelyTraverseAtomicPassiveEffects", "recursivelyTraverseReconnectPassiveEffects", "committedLanes$jscomp$0", "committedTransitions$jscomp$0", "suspenseyCommitFlag", "recursivelyAccumulateSuspenseyCommit", "suspendedState", "accumulateSuspenseyCommitOnFiber", "suspendResource", "previousHoistableRoot", "detachAlternateSiblings", "previousFiber", "recursivelyTraversePassiveUnmountEffects", "commitPassiveUnmountEffectsInsideOfDeletedTree_begin", "commitPassiveUnmountOnFiber", "recursivelyTraverseDisconnectPassiveEffects", "deletedSubtreeRoot", "sibling", "DefaultAsyncDispatcher", "resourceType", "cacheForType", "PossiblyWeakMap", "workInProgressSuspendedReason", "workInProgressThrownValue", "workInProgressRootDidSkipSuspendedSiblings", "workInProgressRootIsPrerendering", "workInProgressRootDidAttachPingListener", "workInProgressRootInterleavedUpdatedLanes", "workInProgressRootPingedLanes", "workInProgressRootDidIncludeRecursiveRenderUpdate", "workInProgressTransitions", "pendingEffectsStatus", "pendingEffectsRoot", "pendingFinishedWork", "pendingEffectsLanes", "pendingEffectsRemainingLanes", "pendingPassiveTransitions", "pendingRecoverableErrors", "prepareFreshStack", "markRootSuspended", "ensureRootIsScheduled", "performWorkOnRoot", "forceSync", "shouldTimeSlice", "exitStatus", "renderRootConcurrent", "renderRootSync", "renderWasConcurrent", "isRenderConsistentWithExternalStores", "wasRootDehydrated", "scheduleTimeout", "commitRootWhenReady", "recoverableErrors", "transitions", "didIncludeRenderPhaseUpdate", "didSkipSuspendedSiblings", "suspendedCommitReason", "completedRenderStartTime", "completedRenderEndTime", "timeoutOffset", "waitForCommitToBeReady", "commitRoot", "check", "didAttemptEntireTree", "index$6", "flushSyncWorkAcrossRoots_impl", "resetWorkInProgressStack", "timeoutHandle", "cancelTimeout", "allEntangledLanes", "index$4", "handleThrow", "thrownValue", "pushDispatcher", "prevDispatcher", "pushAsyncDispatcher", "prevAsyncDispatcher", "shouldYieldForPrerendering", "prevExecutionContext", "unitOfWork", "reason", "throwAndUnwindWorkLoop", "workLoopSync", "thrownValue$165", "performUnitOfWork", "replaySuspendedUnitOfWork", "hostFiber", "completeUnitOfWork", "workLoopConcurrentByScheduler", "thrownValue$167", "suspendedReason", "unwindUnitOfWork", "skipSiblings", "flushPendingEffects", "scheduleCallback$1", "flushPassiveEffects", "flushMutationEffects", "flushLayoutEffects", "flushSpawnedWork", "rootMutationHasEffect", "priorSelectionInformation", "curFocusedElem", "priorFocusedElem", "priorSelectionRange", "win", "start$jscomp$0", "end$jscomp$0", "startMarker", "endMarker", "range", "rootHasLayoutEffect", "releaseRootPooledCache", "onRecoverableError", "recoverableError", "renderPriority", "captureCommitPhaseErrorOnRoot", "rootFiber", "pingCache", "threadIDs", "pingSuspendedRoot", "retryTimedOutBoundary", "boundaryFiber", "retryLane", "priorityLevel", "firstScheduledRoot", "lastScheduledRoot", "didScheduleMicrotask", "mightHavePendingSyncWork", "isFlushingWork", "currentEventTransitionLane", "scheduleImmediateRootScheduleTask", "syncTransitionLanes", "onlyLegacy", "didPerformSomeWork", "root$170", "performSyncWorkOnRoot", "processRootScheduleInImmediateTask", "processRootScheduleInMicrotask", "shouldAttemptEagerTransition", "prev", "scheduleTaskForRootDuringMicrotask", "index$5", "expirationTime", "performWorkOnRootViaSchedulerTask", "didTimeout", "originalCallbackNode", "workInProgressRootRenderLanes$jscomp$0", "scheduleMicrotask", "actionScopeLane", "coerceFormActionProp", "actionProp", "createFormDataWithSubmitter", "form", "submitter", "temp", "extractEvents$1", "maybeTargetInst", "i$jscomp$inline_1577", "eventName$jscomp$inline_1578", "domEventName$jscomp$inline_1579", "capitalizedEvent$jscomp$inline_1580", "nonDelegatedEvents", "eventSystemFlags", "_dispatchQueue$i", "previousInstance", "i$jscomp$0", "_dispatchListeners$i", "currentTarget", "targetElement", "listenerSetKey", "addTrappedEventListener", "listenToNativeEvent", "isCapturePhaseListener", "listeningMarker", "rootContainerElement", "targetContainer", "listenerWrapper", "dispatchDiscreteEvent", "dispatchContinuousEvent", "dispatchEvent", "dispatchEventForPluginEventSystem", "targetInst$jscomp$0", "ancestorInst", "nodeTag", "container", "grandTag", "SyntheticEventCtor", "inCapturePhase", "accumulateTargetOnly", "reactEventName", "lastHostComponent", "_instance", "createDispatchListener", "getParent", "tempB", "accumulateEnterLeaveListenersForEvent", "getTargetInstFunc", "handleEventFunc", "fallbackData", "eventType", "targetFiber", "captureName", "_instance2", "common", "_instance3", "NORMALIZE_NEWLINES_REGEX", "NORMALIZE_NULL_AND_REPLACEMENT_REGEX", "normalizeMarkupForTextOrAttribute", "markup", "serverText", "clientText", "setProp", "setPropOnCustomElement", "hasSrc", "hasSrcSet", "propKey", "propValue$184", "lastProps", "lastProp", "propKey$201", "propKey$217", "propKey$222", "propKey$227", "propKey$232", "isLikelyStaticResource", "initiatorType", "estimateBandwidth", "count", "bits", "resourceEntries", "entry", "transferSize", "duration", "overlapEntry", "overlapStartTime", "overlapTransferSize", "overlapInitiatorType", "namespaceURI", "parentNamespace", "currentPopstateTransitionEvent", "localPromise", "handleErrorInNextTick", "parentInstance", "hydrationInstance", "depth", "nextNode", "node$jscomp$0", "nextNode$jscomp$0", "suspenseInstance", "anyProps", "nodeType", "data", "targetInstance", "rootContainerInstance", "preloadPropsMap", "preconnectsSet", "previousDispatcher", "flushSyncWork", "requestFormReset", "prefetchDNS", "preconnect", "preload", "preloadModule", "preinitScript", "preinitStyle", "preinitModuleScript", "previousWasRendering", "wasRendering", "formInst", "globalDocument", "preconnectAs", "rel", "href", "crossOrigin", "limitedEscapedHref", "as", "preloadSelector", "getStyleKey", "getScriptKey", "getStylesheetSelectorFromKey", "getScriptSelectorFromKey", "precedence", "adoptPreloadPropsForStylesheet", "link", "reject", "insertStylesheet", "src", "scripts", "adoptPreloadPropsForScript", "currentProps", "styles$243", "resource$244", "preloadStylesheet", "stylesheetPropsFromRawProps", "rawProps", "preloadProps", "styleProps", "instance$249", "linkInstance", "nodes", "prior", "stylesheetProps", "scriptProps", "keyAttribute", "caches", "nodeKey", "hostContext", "onUnsuspend", "estimatedBytesWithinLimit", "insertSuspendedStylesheets", "commit", "stylesheetTimer", "unsuspend", "imgTimer", "precedencesByRoot", "insertStylesheetIntoRoot", "precedences", "FiberRootNode", "hydrate", "onDefaultTransitionIndicator", "formState", "createFiberRoot", "initialChildren", "hydrationCallbacks", "isStrictMode", "getContextForSubtree", "parentComponent", "updateContainerImpl", "markRetryLaneImpl", "markRetryLaneIfNotHydrated", "attemptContinuousHydration", "attemptHydrationAtCurrentPriority", "blockedOn", "findInstanceBlockingEvent", "return_targetInst", "clearIfContinuousEvent", "queueIfContinuousEvent", "discreteReplayableEvents", "findInstanceBlockingTarget", "hasScheduledReplayAttempt", "queuedFocus", "queuedDrag", "queuedMouse", "queuedPointers", "queuedPointerCaptures", "queuedExplicitHydrationTargets", "accumulateOrCreateContinuousQueuedReplayableEvent", "existingQueuedEvent", "pointerId", "attemptExplicitHydrationTarget", "queuedTarget", "attemptReplayContinuousQueuedEvent", "queuedEvent", "targetContainers", "nextBlockedOn", "nativeEventClone", "attemptReplayContinuousQueuedEventInMap", "map", "replayUnblockedEvents", "scheduleCallbackIfUnblocked", "unblocked", "lastScheduledReplayQueue", "scheduleReplayQueueIfNeeded", "formReplayingQueue", "submitterOrAction", "unblock", "formProps", "defaultOnDefaultTransitionIndicator", "handleNavigate", "pendingResolve", "handleNavigateComplete", "isCancelled", "startFakeNavigation", "currentEntry", "ReactDOMRoot", "internalRoot", "ReactDOMHydrationRoot", "isomorphicReactPackageVersion$jscomp$inline_1840", "componentOrElement", "internals$jscomp$inline_2347", "hook$jscomp$inline_2348", "require_client", "__commonJSMin", "exports", "module", "checkDCE", "err", "require_react_jsx_runtime_production", "__commonJSMin", "exports", "REACT_ELEMENT_TYPE", "REACT_FRAGMENT_TYPE", "jsxProd", "type", "config", "maybeKey", "key", "propName", "require_jsx_runtime", "__commonJSMin", "exports", "module", "isString", "obj", "defer", "res", "rej", "promise", "resolve", "reject", "makeString", "object", "copy", "a", "s", "t", "m", "lastOfPathSeparatorRegExp", "cleanKey", "key", "canNotTraverseDeeper", "getLastOfPath", "path", "Empty", "stack", "stackIndex", "setPath", "newValue", "k", "e", "p", "last", "pushPath", "concat", "getPath", "getPathWithDefaults", "data", "defaultData", "value", "deepExtend", "target", "source", "overwrite", "prop", "regexEscape", "str", "_entityMap", "escape", "RegExpCache", "capacity", "pattern", "regExpFromCache", "regExpNew", "chars", "looksLikeObjectPathRegExpCache", "looksLikeObjectPath", "nsSeparator", "keySeparator", "possibleChars", "c", "r", "matched", "ki", "deepFind", "tokens", "current", "i", "next", "nextPath", "j", "getCleanedCode", "code", "consoleLogger", "args", "type", "_a", "_b", "Logger", "_Logger", "concreteLogger", "options", "lvl", "prefix", "debugOnly", "moduleName", "__spreadValues", "baseLogger", "EventEmitter", "events", "listener", "event", "numListeners", "wrapper", "observer", "numTimesAdded", "ResourceStore", "ns", "index", "lng", "ignoreJSONStructure", "result", "resources", "deep", "pack", "v", "postProcessor", "module", "processors", "translator", "processor", "PATH_KEY", "createProxy", "state", "handler", "proxy", "keysFromSelector", "selector", "opts", "strict", "nsList", "shouldHandleAsObject", "Translator", "_Translator", "services", "o", "opt", "resolved", "isObject", "namespaces", "wouldCheckForNsInKey", "seemsNaturalLanguage", "parts", "keys", "lastKey", "returnDetails", "namespace", "appendNamespaceToCIMode", "resUsedKey", "resExactUsedKey", "noObject", "joinArrays", "handleAsObjectInI18nFormat", "needsPluralHandling", "hasDefaultValue", "defaultValueSuffix", "defaultValueSuffixOrdinalFallback", "needsZeroSuffixLookup", "defaultValue", "resForObjHndl", "handleAsObject", "resType", "__spreadProps", "resTypeIsArray", "newKeyToUse", "deepKey", "usedDefault", "usedKey", "resForMissing", "updateMissing", "fk", "lngs", "fallbackLngs", "send", "l", "specificDefaultValue", "defaultForMissing", "language", "suffixes", "suffix", "skipOnVariables", "nestBef", "nb", "na", "nestAft", "postProcess", "postProcessorNames", "found", "exactUsedKey", "usedLng", "usedNS", "extracted", "needsContextHandling", "codes", "finalKeys", "pluralSuffix", "zeroSuffix", "ordinalPrefix", "contextKey", "possibleKey", "optionsKeys", "useOptionsReplaceForData", "option", "LanguageUtil", "formattedCode", "cleanedLng", "lngScOnly", "lngOnly", "supportedLng", "fallbacks", "fallbackCode", "fallbackCodes", "addCode", "fc", "suffixesOrder", "dummyRule", "count", "PluralResolver", "languageUtils", "cleanedCode", "cacheKey", "rule", "err", "lngPart", "pluralCategory1", "pluralCategory2", "pluralCategory", "deepFindWithDefaults", "regexSafe", "val", "Interpolator", "escape$1", "escapeValue", "useRawValueToEscape", "prefixEscaped", "suffixEscaped", "formatSeparator", "unescapeSuffix", "unescapePrefix", "nestingPrefix", "nestingPrefixEscaped", "nestingSuffix", "nestingSuffixEscaped", "nestingOptionsSeparator", "maxReplaces", "alwaysFormat", "getOrResetRegExp", "existingRegExp", "match", "replaces", "handleFormat", "f", "missingInterpolationHandler", "todo", "matchedVar", "temp", "safeValue", "clonedOptions", "handleHasOptions", "inheritedOptions", "sep", "optionsString", "matchedSingleQuotes", "matchedDoubleQuotes", "formatters", "keyEndIndex", "elem", "parseFormatStr", "formatStr", "formatName", "formatOptions", "optStr", "rest", "trimmedKey", "createCachedFormatter", "fn", "cache", "optForCache", "frm", "createNonCachedFormatter", "Formatter", "cf", "formatter", "name", "format", "formats", "lastIndex", "mem", "formatted", "valOptions", "error", "removePending", "q", "Connector", "backend", "store", "languages", "callback", "toLoad", "pending", "toLoadLanguages", "toLoadNamespaces", "hasAllNamespaces", "loaded", "loadedKeys", "n", "fcName", "tried", "wait", "resolver", "fallbackValue", "isUpdate", "clb", "_c", "_d", "_e", "get", "ret", "transformOptions", "noop", "bindMemberFunctions", "inst", "I18n", "_I18n", "defOpts", "createClassOnDemand", "ClassOrObject", "lu", "deferred", "load", "finish", "usedCallback", "append", "li", "lngInLngs", "setLngProps", "done", "setLng", "fl", "keyPrefix", "fixedOpts", "scopeNs", "fixedT", "explicitCallNs", "selectorOpts", "resultKey", "fallbackLng", "lastLng", "loadNotPending", "loadState", "preResult", "preloaded", "newLngs", "ti", "rtlLngs", "instance", "forkResourceStore", "mergedOptions", "clone", "clonedData", "prev", "acc", "mergedInterpolation", "mergedForInterpolator", "createInstance", "dir", "init", "loadResources", "reloadResources", "use", "changeLanguage", "getFixedT", "exists", "setDefaultNamespace", "hasLoadedNamespace", "loadNamespaces", "loadLanguages", "_classCallCheck", "a", "n", "_typeof", "o", "toPrimitive", "t", "r", "_typeof", "e", "i", "toPropertyKey", "t", "i", "toPrimitive", "_typeof", "_defineProperties", "r", "t", "o", "toPropertyKey", "_createClass", "arr", "each", "slice", "defaults", "obj", "source", "prop", "createClassOnDemand", "ClassOrObject", "getDefaults", "handleCorrectReadFunction", "backend", "language", "namespace", "resolver", "fc", "r", "data", "err", "Backend", "services", "options", "i18nextOptions", "_classCallCheck", "_createClass", "_this", "b", "i", "callback", "_this2", "bLen", "_loadPosition", "pos", "isLastBackend", "lengthCheckAmount", "savedAt", "_savePosition", "nextBackend", "languages", "key", "fallbackValue", "clb", "opts", "_this3", "_this$services", "backendConnector", "languageUtils", "logger", "currentLanguage", "toLoad", "append", "lng", "lngs", "l", "ns", "arr", "UNSAFE_KEYS$1", "isSafeUrlSegmentBase", "v", "isSafeLangUrlSegment", "isSafeNsUrlSegment", "SAFETY_CHECK_BY_KEY", "sanitizeLogValue", "redactUrlCredentials", "u", "parsed", "e", "hasXMLHttpRequest", "isPromise", "maybePromise", "makePromise", "interpolationRegexp", "interpolateUrl", "str", "data", "unsafe", "result", "match", "key", "k", "value", "check", "segments", "seg", "g", "fetchApi", "XmlHttpRequestApi", "ActiveXObjectApi", "UNSAFE_KEYS", "addQueryString", "url", "params", "queryString", "paramName", "fetchIt", "fetchOptions", "callback", "altFetch", "resolver", "response", "altResponse", "requestWithFetch", "options", "payload", "headers", "__spreadValues", "reqOptions", "opt", "err", "requestWithXmlHttpRequest", "x", "h", "i", "request", "getDefaults", "namespace", "fallbackValue", "languages", "namespaces", "Backend", "services", "allOptions", "timer", "language", "loadUrlLanguages", "loadUrlNamespaces", "loadPath", "resolvedLoadPath", "safeLngs", "safeNss", "lng", "ns", "safeUrl", "res", "errorMessage", "term", "ret", "parseErr", "finished", "dataArray", "resArray", "addPath", "backendConnector", "languageUtils", "logger", "currentLanguage", "toLoad", "append", "l", "_defineProperty", "r", "t", "toPropertyKey", "ownKeys", "r", "t", "o", "_objectSpread", "_defineProperty", "Storage", "options", "_classCallCheck", "_createClass", "key", "value", "e", "getDefaults", "store", "Cache", "services", "language", "namespace", "callback", "nowMS", "local", "version", "i18nStamp", "data", "_this$options$getVers", "_this$options", "import_react", "import_react", "warn", "i18n", "code", "msg", "rest", "_a", "_b", "_c", "_d", "args", "__spreadValues", "isString", "alreadyWarned", "warnOnce", "loadedClb", "cb", "initialized", "loadNamespaces", "ns", "loadLanguages", "lng", "n", "hasLoadedNamespace", "options", "i18nInstance", "loadNotPending", "isString", "obj", "isObject", "matchHtmlEntity", "htmlEntities", "unescapeHtmlEntity", "m", "unescape", "text", "defaultOptions", "unescape", "setDefaults", "options", "__spreadValues", "getDefaults", "i18nInstance", "setI18n", "instance", "getI18n", "import_react", "initReactI18next", "instance", "setDefaults", "setI18n", "I18nContext", "ReportNamespaces", "namespaces", "ns", "import_react", "import_react", "TranslationParserError", "_TranslationParserError", "message", "position", "translationString", "commonEntities", "entityPattern", "entity", "decodeHtmlEntities", "text", "match", "_", "num", "hex", "tokenize", "translation", "tokens", "position", "currentText", "flushText", "char", "tagMatch", "closeTagMatch", "import_react", "renderDeclarationNode", "declaration", "children", "childDeclarations", "type", "props", "_a", "_childrenToRemove", "propsWithoutChildren", "__objRest", "React", "renderTranslation", "translation", "declarations", "tokens", "tokenize", "result", "stack", "literalTagNumbers", "getCurrentDeclarations", "parentFrame", "token", "decoded", "decodeHtmlEntities", "tagNumber", "currentDeclarations", "literalText", "TranslationParserError", "frame", "element", "unclosed", "IcuTransWithoutContext", "i18nKey", "defaultTranslation", "content", "ns", "values", "i18nFromProps", "tFromProps", "_a", "_b", "_c", "_d", "i18n", "getI18n", "warnOnce", "React", "t", "k", "namespaces", "isString", "mergedValues", "__spreadValues", "translation", "__spreadProps", "rendered", "renderTranslation", "error", "warn", "IcuTrans", "i18nKey", "defaultTranslation", "content", "ns", "values", "i18nFromProps", "tFromProps", "_a", "i18nFromContext", "defaultNSFromContext", "I18nContext", "i18n", "getI18n", "t", "IcuTransWithoutContext", "import_react", "import_shim", "notReadyT", "k", "optsOrDefaultValue", "isString", "isObject", "last", "notReadySnapshot", "dummySubscribe", "useTranslation", "ns", "props", "_a", "_b", "_c", "i18nFromProps", "i18nFromContext", "defaultNSFromContext", "I18nContext", "i18n", "getI18n", "ReportNamespaces", "warnOnce", "i18nOptions", "__spreadValues", "getDefaults", "useSuspense", "keyPrefix", "nsOrContext", "unstableNamespaces", "namespaces", "revisionRef", "subscribe", "callback", "bindI18n", "bindI18nStore", "wrappedCallback", "e", "snapshotRef", "getSnapshot", "calculatedReady", "n", "hasLoadedNamespace", "currentLng", "currentRevision", "lastSnapshot", "newSnapshot", "loadCount", "setLoadCount", "t", "ready", "onLoaded", "c", "loadLanguages", "loadNamespaces", "finalI18n", "wrapperRef", "wrapperLangRef", "createI18nWrapper", "original", "descriptors", "wrapper", "_", "ret", "lang", "i18nWrapper", "effectiveT", "args", "arr", "resolve", "import_react", "import_react", "import_react", "import_react", "translation_default", "app", "fromNow", "locale", "date", "diff", "abs", "units", "rtf", "unit", "ms", "shdatetime", "lang", "dateString", "toLocaleDateString", "closeWindow", "win", "setFocus", "elemId", "_a", "unsafeDecode", "str", "parseQueryString", "searchOrHash", "_a", "first", "parts", "x", "decode", "out", "kv", "k", "rest", "curQuerystring", "lookupQueryStringValue", "qs", "key", "val", "encodeTag", "tag", "fromNullableStr", "s", "normalizeTags", "tags", "getShortHash", "hash", "i", "defaultNS", "a", "app", "instance", "Backend", "initReactI18next", "defaultNS", "translation_default", "Cache", "getShortHash", "import_react", "import_client", "KyError", "__publicField", "HTTPError", "KyError", "response", "request", "options", "_a", "code", "title", "status", "reason", "__publicField", "NetworkError", "KyError", "request", "options", "__publicField", "NonError", "value", "message", "e", "__publicField", "ForceRetryError", "KyError", "options", "cause", "NonError", "__publicField", "SchemaValidationError", "issues", "__publicField", "TimeoutError", "KyError", "request", "__publicField", "supportsRequestStreams", "duplexAccessed", "hasContentType", "supportsReadableStream", "supportsRequest", "error", "supportsAbortController", "supportsAbortSignal", "supportsResponseStreams", "supportsFormData", "requestMethods", "validate", "responseTypes", "maxSafeTimeout", "usualFormBoundarySize", "stop", "RetryMarker", "options", "__publicField", "retry", "kyOptionKeys", "requestOptionsRegistry", "encoder", "getBodySize", "body", "size", "key", "value", "usualFormBoundarySize", "withProgress", "stream", "totalBytes", "onProgress", "previousChunk", "transferredBytes", "currentChunk", "controller", "percent", "streamResponse", "response", "onDownloadProgress", "responseInit", "streamRequest", "request", "onUploadProgress", "originalBody", "isObject", "value", "replaceSymbol", "getReplaceState", "value", "isObject", "validateAndMerge", "sources", "source", "isObject", "deepMerge", "mergeHeaders", "source1", "source2", "result", "isHeadersInstance", "key", "value", "isPlainObject", "prototype", "cloneShallow", "copy", "deleted", "deletedParametersSymbol", "__spreadValues", "normalizeHeaderObject", "headers", "entry", "mergeHeaderContainers", "newHookValue", "original", "incoming", "property", "_a", "_b", "mergeHooks", "appendSearchParameters", "target", "input", "inputDeleted", "pair", "parameters", "returnValue", "hooks", "searchParameters", "signals", "replaceState", "getReplaceState", "isReplace", "__spreadProps", "hookValue", "headerValue", "supportsAbortSignal", "normalizeRequestMethod", "input", "requestMethods", "retryMethods", "retryStatusCodes", "retryAfterStatusCodes", "defaultRetryOptions", "attemptCount", "normalizeRetryOptions", "retry", "_a", "__spreadProps", "__spreadValues", "normalizedRetry", "method", "value", "timeout", "request", "init", "abortController", "options", "resolve", "reject", "timeoutId", "TimeoutError", "delay", "ms", "signal", "resolve", "reject", "abortHandler", "timeoutId", "findUnknownOptions", "options", "unknownOptions", "key", "requestOptionsRegistry", "kyOptionKeys", "hasSearchParameters", "search", "_a", "deletedParametersSymbol", "objectToString", "isError", "value", "errorMessages", "isRawNetworkError", "error", "message", "stack", "isErrorType", "error", "cls", "isHTTPError", "error", "isErrorType", "HTTPError", "isNetworkError", "NetworkError", "isTimeoutError", "TimeoutError", "maxErrorResponseBodySize", "prefixUrlRenamedErrorMessage", "timedOutResponseData", "createTextDecoder", "contentType", "_a", "match", "charset", "e", "invalidSchemaMessage", "cloneRetryOptions", "retry", "__spreadValues", "objectToString", "isRequestInstance", "value", "isResponseInstance", "cloneSearchParametersForInitHook", "searchParameters", "parameter", "cloneShallow", "cloneInitHookOptions", "options", "clonedOptions", "__spreadProps", "validateJsonWithSchema", "jsonValue", "schema", "standardSchema", "validationResult", "SchemaValidationError", "_Ky_static", "normalizeSearchParams_fn", "_abortController", "_retryCount", "_input", "_options", "_originalRequest", "_userProvidedAbortSignal", "_beforeRetryHookErrors", "_cachedNormalizedOptions", "_startTime", "_returnedResponseFromBeforeRetryHook", "_responseRequests", "_Ky_instances", "calculateDelay_fn", "calculateRetryDelay_fn", "decorateResponse_fn", "getResponseData_fn", "getErrorDataTimeout_fn", "isJsonContentType_fn", "readResponseText_fn", "parseJson_fn", "cancelBody_fn", "cancelResponseBody_fn", "createManagedSignal_fn", "throwIfTotalTimeoutExhausted_fn", "runBeforeRequestHooks_fn", "runAfterResponseHooks_fn", "retry_fn", "retryFromError_fn", "consumeReturnedResponseFromBeforeRetryHook_fn", "fetch_fn", "getRemainingTotalTimeout_fn", "getCurrentTime_fn", "getNormalizedOptions_fn", "assignRequest_fn", "getResponseRequest_fn", "setResponseRequest_fn", "wrapRequestWithUploadProgress_fn", "_Ky", "input", "__privateAdd", "__publicField", "_b", "_c", "_d", "_e", "_f", "_g", "_h", "_i", "_j", "_k", "_l", "_m", "_n", "__privateSet", "mergeHeaders", "__privateGet", "mergeHooks", "normalizeRequestMethod", "normalizeRetryOptions", "normalizedPrefix", "normalizedInput", "absoluteInput", "supportsAbortController", "supportsAbortSignal", "__privateMethod", "supportsRequestStreams", "userProvidedContentType", "supportsFormData", "hasSearchParameters", "url", "deleted", "deletedParametersSymbol", "key", "stringSearchParameters", "optionsSearchParameters", "initHooks", "initHookOptions", "hook", "ky", "function_", "maxSafeTimeout", "beforeRequestResponse", "response", "responseFromHook", "error", "ForceRetryError", "retriedResponse", "currentResponse", "httpError", "HTTPError", "errorToThrow", "supportsResponseStreams", "progressResponse", "streamResponse", "result", "processedError", "hookResult", "originalRequest", "type", "mimeType", "responseTypes", "text", "searchParams", "retryDelay", "jitteredDelay", "errorObject", "NonError", "isTimeoutError", "isHTTPError", "retryAfter", "after", "isNetworkError", "request", "data", "errorDataTimeout", "remainingTotal", "TimeoutError", "timeoutMs", "body", "reader", "decoder", "chunks", "totalBytes", "readAll", "done", "timeoutPromise", "resolve", "timeoutId", "remaining", "responseRequest", "hookResponse", "modifiedResponse", "RetryMarker", "nextResponse", "delayOptions", "remainingTimeout", "delay", "customRequest", "hookError", "__privateWrapper", "stop", "nonRequestOptions", "findUnknownOptions", "retryRequest", "effectiveTimeout", "timeout", "isRawNetworkError", "NetworkError", "elapsed", "hooks", "json", "parseJson", "stringifyJson", "totalTimeout", "throwHttpErrors", "fetch", "normalizedOptions", "__objRest", "originalBody", "streamRequest", "Ky", "createInstance", "defaults", "ky", "input", "options", "Ky", "validateAndMerge", "method", "requestMethods", "newDefaults", "stop", "retry", "distribution_default", "withCsrf", "headers", "a", "app", "h", "urlFor", "path", "toRelativePath", "urlOrPath", "u", "rel", "e", "request", "method", "opts", "_a", "distribution_default", "toggleStar", "bid", "action", "destroy", "markRead", "archiveBookmark", "editBookmark", "bm", "res", "editNote", "note", "lookupTitle", "getTagCloud", "mode", "updateTagCloudMode", "fetchTagSuggestions", "data", "destroyNote", "nid", "editAccountSettings", "us", "logout", "import_react", "import_jsx_runtime", "AccountSettingsView", "initial", "_a", "useTranslation", "us", "setUs", "React", "archiveDisabled", "archiveDisabledTitle", "update", "next", "editAccountSettings", "e", "__spreadProps", "__spreadValues", "import_react", "import_react", "TAG_SUGGESTION_DEBOUNCE_MS", "useTagSuggestions", "enabled", "tags", "onTagsUpdate", "maxSuggestions", "suggestionState", "setSuggestionState", "React", "tagSuggestionRequestId", "tagSuggestionDebounceRef", "tagInputRef", "cancelPendingSuggestions", "closeSuggestions", "onTagsChange", "e", "value", "selectionStart", "selectionEnd", "isWhitespaceOnlyEdit", "activeToken", "getActiveTagToken", "normalizedTagTerms", "getNormalizedTagTerms", "activeTokenNormalized", "shouldExcludeActiveToken", "tag", "payload", "requestId", "response", "fetchTagSuggestions", "items", "anchor", "measureCaretPosition", "applySuggestion", "term", "input", "next", "replaceTokenAtRange", "onTagsKeyDown", "current", "__spreadProps", "__spreadValues", "selected", "onTagsSelect", "onSuggestionHover", "index", "caret", "boundedCaret", "start", "end", "token", "style", "mirror", "prefix", "marker", "left", "top", "range", "replacement", "suffix", "inserted", "previous", "prevEnd", "nextEnd", "removed", "added", "isSpacesOnly", "import_react", "import_jsx_runtime", "MAX_SUGGESTION_TERM_RENDER_LENGTH", "TagSuggestionsDropdown", "suggestionState", "onHover", "onPick", "item", "index", "selected", "displayTerm", "truncateSuggestionTerm", "e", "renderHighlightedSuggestion", "term", "query", "lowerTerm", "lowerQuery", "idx", "before", "match", "after", "import_jsx_runtime", "AddForm", "initial", "_a", "useTranslation", "a", "app", "bm", "setBm", "React", "editBm", "setEditBm", "deleteAsk", "setDeleteAsk", "loading", "setLoading", "destroyed", "setDestroyed", "apiError", "setApiError", "suggestEnabled", "fromNowVal", "fromNow", "tagInputRef", "suggestionState", "closeSuggestions", "onTagsChange", "onTagsKeyDown", "onTagsSelect", "onSuggestionHover", "onSuggestionPick", "useTagSuggestions", "tags", "x", "__spreadProps", "__spreadValues", "onFetchTitle", "title", "lookupTitle", "onDestroy", "destroy", "onSubmit", "e", "editBm2", "normalizeTags", "res", "editBookmark", "qs", "curQuerystring", "next", "lookupQueryStringValue", "ref", "org", "closeWindow", "shdatetime", "TagSuggestionsDropdown", "import_react", "createStoreImpl", "createState", "state", "listeners", "setState", "partial", "replace", "nextState", "previousState", "listener", "getState", "api", "initialState", "createStore", "import_react", "identity", "arg", "useStore", "api", "selector", "slice", "React", "createImpl", "createState", "createStore", "useBoundStore", "create", "useBookmarksStore", "create", "set", "bmarks", "bid", "s", "b", "bm", "import_react", "entries", "Object", "setPrototypeOf", "isFrozen", "getPrototypeOf", "getOwnPropertyDescriptor", "freeze", "seal", "create", "_ref", "Reflect", "apply", "construct", "x", "func", "thisArg", "_len", "arguments", "length", "args", "Array", "_key", "Func", "_len2", "_key2", "arrayForEach", "unapply", "prototype", "forEach", "arrayLastIndexOf", "lastIndexOf", "arrayPop", "pop", "arrayPush", "push", "arraySplice", "splice", "arrayIsArray", "isArray", "stringToLowerCase", "String", "toLowerCase", "stringToString", "toString", "stringMatch", "match", "stringReplace", "replace", "stringIndexOf", "indexOf", "stringTrim", "trim", "numberToString", "Number", "booleanToString", "Boolean", "bigintToString", "BigInt", "symbolToString", "Symbol", "objectHasOwnProperty", "hasOwnProperty", "objectToString", "regExpTest", "RegExp", "test", "typeErrorCreate", "unconstruct", "TypeError", "lastIndex", "_len3", "_key3", "_len4", "_key4", "addToSet", "set", "array", "transformCaseFunc", "l", "element", "lcElement", "cleanArray", "index", "clone", "object", "newObject", "_ref2", "_ref3", "_slicedToArray", "property", "value", "constructor", "stringifyValue", "valueAsRecord", "valueToString", "lookupGetter", "stringified", "prop", "desc", "get", "fallbackValue", "isRegex", "_unused", "html", "svg", "svgFilters", "svgDisallowed", "mathMl", "mathMlDisallowed", "text", "xml", "MUSTACHE_EXPR", "ERB_EXPR", "TMPLIT_EXPR", "DATA_ATTR", "ARIA_ATTR", "IS_ALLOWED_URI", "IS_SCRIPT_OR_DATA", "ATTR_WHITESPACE", "DOCTYPE_NAME", "CUSTOM_ELEMENT", "NODE_TYPE", "attribute", "cdataSection", "entityReference", "entityNode", "progressingInstruction", "comment", "document", "documentType", "documentFragment", "notation", "getGlobal", "window", "_createTrustedTypesPolicy", "trustedTypes", "purifyHostElement", "createPolicy", "suffix", "ATTR_NAME", "hasAttribute", "getAttribute", "policyName", "createHTML", "createScriptURL", "scriptUrl", "_", "console", "warn", "_createHooksMap", "afterSanitizeAttributes", "afterSanitizeElements", "afterSanitizeShadowDOM", "beforeSanitizeAttributes", "beforeSanitizeElements", "beforeSanitizeShadowDOM", "uponSanitizeAttribute", "uponSanitizeElement", "uponSanitizeShadowNode", "createDOMPurify", "undefined", "DOMPurify", "root", "version", "VERSION", "removed", "nodeType", "Element", "isSupported", "originalDocument", "currentScript", "DocumentFragment", "HTMLTemplateElement", "Node", "NodeFilter", "_window$NamedNodeMap", "NamedNodeMap", "MozNamedAttrMap", "HTMLFormElement", "DOMParser", "ElementPrototype", "cloneNode", "remove", "getNextSibling", "getChildNodes", "getParentNode", "getShadowRoot", "getAttributes", "getNodeType", "getNodeName", "template", "createElement", "content", "ownerDocument", "trustedTypesPolicy", "emptyHTML", "_document", "implementation", "createNodeIterator", "createDocumentFragment", "getElementsByTagName", "importNode", "hooks", "createHTMLDocument", "EXPRESSIONS", "ALLOWED_TAGS", "DEFAULT_ALLOWED_TAGS", "TAGS", "ALLOWED_ATTR", "DEFAULT_ALLOWED_ATTR", "ATTRS", "CUSTOM_ELEMENT_HANDLING", "tagNameCheck", "writable", "configurable", "enumerable", "attributeNameCheck", "allowCustomizedBuiltInElements", "FORBID_TAGS", "FORBID_ATTR", "EXTRA_ELEMENT_HANDLING", "tagCheck", "attributeCheck", "ALLOW_ARIA_ATTR", "ALLOW_DATA_ATTR", "ALLOW_UNKNOWN_PROTOCOLS", "ALLOW_SELF_CLOSE_IN_ATTR", "SAFE_FOR_TEMPLATES", "SAFE_FOR_XML", "WHOLE_DOCUMENT", "SET_CONFIG", "FORCE_BODY", "RETURN_DOM", "RETURN_DOM_FRAGMENT", "RETURN_TRUSTED_TYPE", "SANITIZE_DOM", "SANITIZE_NAMED_PROPS", "SANITIZE_NAMED_PROPS_PREFIX", "KEEP_CONTENT", "IN_PLACE", "USE_PROFILES", "FORBID_CONTENTS", "DEFAULT_FORBID_CONTENTS", "DATA_URI_TAGS", "DEFAULT_DATA_URI_TAGS", "URI_SAFE_ATTRIBUTES", "DEFAULT_URI_SAFE_ATTRIBUTES", "MATHML_NAMESPACE", "SVG_NAMESPACE", "HTML_NAMESPACE", "NAMESPACE", "IS_EMPTY_INPUT", "ALLOWED_NAMESPACES", "DEFAULT_ALLOWED_NAMESPACES", "MATHML_TEXT_INTEGRATION_POINTS", "HTML_INTEGRATION_POINTS", "COMMON_SVG_AND_HTML_ELEMENTS", "PARSER_MEDIA_TYPE", "SUPPORTED_PARSER_MEDIA_TYPES", "DEFAULT_PARSER_MEDIA_TYPE", "CONFIG", "formElement", "isRegexOrFunction", "testValue", "Function", "_parseConfig", "cfg", "ADD_URI_SAFE_ATTR", "ADD_DATA_URI_TAGS", "ALLOWED_URI_REGEXP", "customElementHandling", "ADD_TAGS", "ADD_ATTR", "ADD_FORBID_CONTENTS", "table", "tbody", "TRUSTED_TYPES_POLICY", "ALL_SVG_TAGS", "ALL_MATHML_TAGS", "_checkValidNamespace", "parent", "tagName", "namespaceURI", "parentTagName", "_forceRemove", "node", "removeChild", "_removeAttribute", "name", "getAttributeNode", "from", "removeAttribute", "setAttribute", "_initDocument", "dirty", "doc", "leadingWhitespace", "matches", "dirtyPayload", "parseFromString", "documentElement", "createDocument", "innerHTML", "body", "insertBefore", "createTextNode", "childNodes", "call", "_createNodeIterator", "SHOW_ELEMENT", "SHOW_COMMENT", "SHOW_TEXT", "SHOW_PROCESSING_INSTRUCTION", "SHOW_CDATA_SECTION", "_scrubTemplateExpressions", "normalize", "walker", "currentNode", "nextNode", "data", "expr", "_isClobbered", "realTagName", "nodeName", "textContent", "attributes", "hasChildNodes", "_isDocumentFragment", "_isNode", "_executeHooks", "hook", "_sanitizeElements", "allowedTags", "firstElementChild", "_isBasicCustomElement", "parentNode", "childCount", "i", "childClone", "_isValidAttribute", "lcTag", "lcName", "nameIsPermitted", "RESERVED_CUSTOM_ELEMENT_NAMES", "_sanitizeAttributes", "hookEvent", "attrName", "attrValue", "keepAttr", "allowedAttributes", "forceKeepAttr", "attr", "initValue", "getAttributeType", "setAttributeNS", "_sanitizeShadowDOM", "fragment", "shadowNode", "shadowIterator", "innerSr", "shadowRoot", "_sanitizeAttachedShadowRoots", "sr", "snapshot", "child", "rootName", "sanitize", "importedNode", "returnNode", "nn", "appendChild", "firstChild", "nodeIterator", "shadowroot", "shadowrootmode", "serializedHTML", "outerHTML", "doctype", "setConfig", "clearConfig", "isValidAttribute", "tag", "addHook", "entryPoint", "hookFunction", "removeHook", "removeHooks", "removeAllHooks", "purify", "_getDefaults", "_defaults", "changeDefaults", "newDefaults", "noopTest", "cachedIndentRegex", "createRegex", "cache", "indent", "cacheIndex", "regex", "edit", "opt", "source", "obj", "name", "val", "valSource", "other", "supportsLookbehind", "a", "e", "bull", "newline", "blockCode", "fences", "hr", "heading", "bullet", "lheadingCore", "lheading", "lheadingGfm", "_paragraph", "blockText", "_blockLabel", "def", "list", "_tag", "_comment", "html", "paragraph", "blockquote", "blockNormal", "gfmTable", "blockGfm", "__spreadProps", "__spreadValues", "blockPedantic", "escape", "inlineCode", "br", "inlineText", "_punctuation", "_punctuationOrSpace", "_notPunctuationOrSpace", "punctuation", "_punctuationGfmStrongEm", "_punctuationOrSpaceGfmStrongEm", "_notPunctuationOrSpaceGfmStrongEm", "blockSkip", "emStrongLDelimCore", "emStrongLDelim", "emStrongLDelimGfm", "emStrongRDelimAstCore", "emStrongRDelimAst", "emStrongRDelimAstGfm", "emStrongRDelimUnd", "delLDelim", "delRDelimCore", "delRDelim", "anyPunctuation", "autolink", "_inlineComment", "tag", "_inlineLabel", "link", "reflink", "nolink", "reflinkSearch", "_caseInsensitiveProtocol", "inlineNormal", "inlinePedantic", "inlineGfm", "inlineBreaks", "block", "inline", "escapeReplacements", "getEscapeReplacement", "ch", "escapeHtmlEntities", "encode", "cleanUrl", "href", "splitCells", "tableRow", "count", "row", "match", "offset", "str", "escaped", "curr", "cells", "i", "rtrim", "c", "invert", "l", "suffLen", "currChar", "trimTrailingBlankLines", "lines", "end", "findClosingBracket", "b", "level", "expandTabs", "line", "col", "expanded", "char", "added", "outputLink", "cap", "raw", "lexer", "rules", "title", "text", "token", "indentCodeCompensation", "matchIndentToCode", "indentToCode", "node", "matchIndentInNode", "indentInNode", "_Tokenizer", "options", "__publicField", "src", "trimmed", "tokens", "inBlockquote", "currentLines", "currentRaw", "currentText", "top", "lastToken", "oldToken", "newText", "newToken", "isordered", "itemRegex", "endsWithBlankLine", "endEarly", "itemContents", "nextLine", "blankLine", "nextBulletRegex", "hrRegex", "fencesBeginRegex", "headingBeginRegex", "htmlBeginRegex", "blockquoteBeginRegex", "rawLine", "nextLineWithoutTabs", "lastItem", "item", "itemToken", "taskRaw", "checkboxToken", "spacers", "t", "hasMultipleLineBreaks", "headers", "aligns", "rows", "align", "cell", "trimmedUrl", "rtrimSlash", "lastParenIndex", "linkLen", "links", "linkString", "maskedSrc", "prevChar", "lLength", "rDelim", "rLength", "delimTotal", "midDelimTotal", "endReg", "lastCharLength", "hasNonSpaceChars", "hasSpaceCharsOnBothEnds", "prevCapZero", "_b", "_a", "_Lexer", "__Lexer", "next", "lastParagraphClipped", "srcLength", "extTokenizer", "cutSrc", "_c", "startIndex", "tempSrc", "tempStart", "getStartIndex", "keepPrevChar", "_e", "_d", "_f", "byte", "errMsg", "_Renderer", "lang", "langString", "code", "depth", "ordered", "start", "body", "j", "type", "startAttr", "checked", "header", "k", "content", "cleanHref", "out", "_TextRenderer", "_Parser", "__Parser", "anyToken", "genericToken", "ret", "renderer", "_Hooks", "markdown", "Marked", "args", "callback", "values", "tableToken", "listToken", "childTokens", "extensions", "pack", "opts", "ext", "prevRenderer", "extLevel", "prop", "rendererProp", "rendererFunc", "tokenizer", "tokenizerProp", "tokenizerFunc", "prevTokenizer", "hooks", "hooksProp", "hooksFunc", "prevHook", "arg", "walkTokens", "packWalktokens", "blockType", "origOpt", "throwError", "processedSrc", "processedTokens", "silent", "async", "msg", "markedInstance", "marked", "setOptions", "use", "parseInline", "parser", "_Parser", "lexer", "_Lexer", "import_react", "import_jsx_runtime", "g", "Markdown", "text", "className", "html", "React", "parsed", "purify", "import_jsx_runtime", "BMark", "initial", "onNotifyRemove", "onUpdated", "_a", "t", "useTranslation", "a", "app", "bm", "setBm", "React", "editBm", "setEditBm", "deleteAsk", "setDeleteAsk", "edit", "setEdit", "loading", "setLoading", "archiving", "setArchiving", "apiError", "setApiError", "tagInputId", "linkToFilterSingle", "fromNullableStr", "linkToFilterTag", "tag", "encodeTag", "viewInContextTime", "time", "linkToViewInContext", "suggestEnabled", "tagInputRef", "suggestionState", "closeSuggestions", "onTagsChange", "onTagsKeyDown", "onTagsSelect", "onSuggestionHover", "onSuggestionPick", "useTagSuggestions", "tags", "x", "__spreadProps", "__spreadValues", "onStar", "next", "toggleStar", "updated", "onDestroy", "destroy", "onMarkRead", "markRead", "startEdit", "setFocus", "onFetchTitle", "title", "lookupTitle", "onArchive", "archiveBookmark", "onSubmit", "e", "editBm2", "normalizeTags", "res", "editBookmark", "archivingDisabled", "TagSuggestionsDropdown", "Markdown", "shdatetime", "toLocaleDateString", "import_jsx_runtime", "BList", "initial", "hasHydrated", "setHasHydrated", "React", "bmarks", "useBookmarksStore", "s", "setAll", "removeById", "upsert", "b", "BMark", "bm", "import_react", "import_jsx_runtime", "toTextareaPreview", "input", "lines", "x", "idx", "React", "NList", "initial", "useTranslation", "a", "app", "linkToFilterSingle", "slug", "fromNullableStr", "note", "fromNowVal", "fromNow", "shdatetime", "import_react", "import_jsx_runtime", "toTextarea", "input", "lines", "x", "idx", "React", "NNote", "initial", "useTranslation", "a", "app", "note", "setNote", "editNoteState", "setEditNoteState", "deleteAsk", "setDeleteAsk", "edit", "setEdit", "destroyed", "setDestroyed", "apiError", "setApiError", "fromNowVal", "fromNow", "notetextid", "startEdit", "next", "qs", "curQuerystring", "q", "lookupQueryStringValue", "closeWindow", "setFocus", "onDestroy", "destroyNote", "onSubmit", "e", "res", "editNote", "ref", "org", "fromNullableStr", "__spreadProps", "__spreadValues", "Markdown", "shdatetime", "import_react", "useTagCloudStore", "create", "set", "mode", "tagcloud", "tagCloudModeToF", "mode", "n", "s", "tags", "tagCloudModeFromF", "isExpanded", "isRelated", "setExpanded", "expanded", "__spreadProps", "__spreadValues", "import_jsx_runtime", "TagCloud", "initialMode", "useTranslation", "mode", "useTagCloudStore", "s", "tagcloud", "setMode", "setTagCloud", "React", "fetchTagCloud", "tc", "getTagCloud", "tagCloudModeFromF", "modetop", "isExpanded", "modelb1", "modelb2", "modelb5", "modelb10", "modelb20", "values", "n", "m", "onExpanded", "expanded", "next", "setExpanded", "updateTagCloudMode", "onChangeMode", "isRelated", "toArray", "curtags", "a", "app", "cur", "tag", "entries", "x", "y", "linkToFilterTag", "rest", "fromNullableStr", "out", "k", "v", "kLower", "fontsize", "rescale", "opacity", "style", "includeExclude", "t", "encodeTag", "f", "l", "h", "denom", "import_jsx_runtime", "selectEl", "selector", "viewRendered", "el", "RenderReady", "children", "renderView", "renderElSelector", "node", "logoutE", "logout", "renderBookmarks", "bmarks", "BList", "renderTagCloud", "tagCloudMode", "TagCloud", "tagCloudModeToF", "renderAddForm", "bmark", "AddForm", "renderNotes", "notes", "NList", "renderNote", "note", "NNote", "renderAccountSettings", "accountSettings", "AccountSettingsView", "initColorSchemeToggle", "isColorSchemePreference", "value", "getEffectiveColorScheme", "explicit", "applyColorSchemePreference", "preference", "colorSchemeStorageKey", "stored", "toggleEl", "e", "next"]-}
− static/js/app-MD5JJQMB.min.js.map.gz
binary file changed (410762 → absent bytes)
+ static/js/app-SAXM5TAE.min.js view
@@ -0,0 +1,76 @@+var z1=Object.create;var _c=Object.defineProperty,M1=Object.defineProperties,L1=Object.getOwnPropertyDescriptor,U1=Object.getOwnPropertyDescriptors,H1=Object.getOwnPropertyNames,Is=Object.getOwnPropertySymbols,B1=Object.getPrototypeOf,Cc=Object.prototype.hasOwnProperty,Yp=Object.prototype.propertyIsEnumerable;var Vp=e=>{throw TypeError(e)};var Nc=(e,t,n)=>t in e?_c(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,T=(e,t)=>{for(var n in t||(t={}))Cc.call(t,n)&&Nc(e,n,t[n]);if(Is)for(var n of Is(t))Yp.call(t,n)&&Nc(e,n,t[n]);return e},M=(e,t)=>M1(e,U1(t));var Wn=(e,t)=>{var n={};for(var a in e)Cc.call(e,a)&&t.indexOf(a)<0&&(n[a]=e[a]);if(e!=null&&Is)for(var a of Is(e))t.indexOf(a)<0&&Yp.call(e,a)&&(n[a]=e[a]);return n};var qt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var q1=(e,t,n,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let l of H1(t))!Cc.call(e,l)&&l!==n&&_c(e,l,{get:()=>t[l],enumerable:!(a=L1(t,l))||a.enumerable});return e};var $=(e,t,n)=>(n=e!=null?z1(B1(e)):{},q1(t||!e||!e.__esModule?_c(n,"default",{value:e,enumerable:!0}):n,e));var V=(e,t,n)=>Nc(e,typeof t!="symbol"?t+"":t,n),Dc=(e,t,n)=>t.has(e)||Vp("Cannot "+n);var k=(e,t,n)=>(Dc(e,t,"read from private field"),n?n.call(e):t.get(e)),kt=(e,t,n)=>t.has(e)?Vp("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,n),pt=(e,t,n,a)=>(Dc(e,t,"write to private field"),a?a.call(e,n):t.set(e,n),n),B=(e,t,n)=>(Dc(e,t,"access private method"),n);var zc=(e,t,n,a)=>({set _(l){pt(e,t,l,n)},get _(){return k(e,t,a)}});var wm=qt(F=>{"use strict";var Ic=Symbol.for("react.transitional.element"),vT=Symbol.for("react.portal"),ST=Symbol.for("react.fragment"),TT=Symbol.for("react.strict_mode"),xT=Symbol.for("react.profiler"),ET=Symbol.for("react.consumer"),kT=Symbol.for("react.context"),AT=Symbol.for("react.forward_ref"),wT=Symbol.for("react.suspense"),RT=Symbol.for("react.memo"),Sm=Symbol.for("react.lazy"),OT=Symbol.for("react.activity"),gm=Symbol.iterator;function NT(e){return e===null||typeof e!="object"?null:(e=gm&&e[gm]||e["@@iterator"],typeof e=="function"?e:null)}var Tm={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},xm=Object.assign,Em={};function Wl(e,t,n){this.props=e,this.context=t,this.refs=Em,this.updater=n||Tm}Wl.prototype.isReactComponent={};Wl.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};Wl.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function km(){}km.prototype=Wl.prototype;function Pc(e,t,n){this.props=e,this.context=t,this.refs=Em,this.updater=n||Tm}var Wc=Pc.prototype=new km;Wc.constructor=Pc;xm(Wc,Wl.prototype);Wc.isPureReactComponent=!0;var ym=Array.isArray;function Jc(){}var we={H:null,A:null,T:null,S:null},Am=Object.prototype.hasOwnProperty;function ef(e,t,n){var a=n.ref;return{$$typeof:Ic,type:e,key:t,ref:a!==void 0?a:null,props:n}}function _T(e,t){return ef(e.type,t,e.props)}function tf(e){return typeof e=="object"&&e!==null&&e.$$typeof===Ic}function CT(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,function(n){return t[n]})}var bm=/\/+/g;function Fc(e,t){return typeof e=="object"&&e!==null&&e.key!=null?CT(""+e.key):t.toString(36)}function DT(e){switch(e.status){case"fulfilled":return e.value;case"rejected":throw e.reason;default:switch(typeof e.status=="string"?e.then(Jc,Jc):(e.status="pending",e.then(function(t){e.status==="pending"&&(e.status="fulfilled",e.value=t)},function(t){e.status==="pending"&&(e.status="rejected",e.reason=t)})),e.status){case"fulfilled":return e.value;case"rejected":throw e.reason}}throw e}function Pl(e,t,n,a,l){var i=typeof e;(i==="undefined"||i==="boolean")&&(e=null);var r=!1;if(e===null)r=!0;else switch(i){case"bigint":case"string":case"number":r=!0;break;case"object":switch(e.$$typeof){case Ic:case vT:r=!0;break;case Sm:return r=e._init,Pl(r(e._payload),t,n,a,l)}}if(r)return l=l(e),r=a===""?"."+Fc(e,0):a,ym(l)?(n="",r!=null&&(n=r.replace(bm,"$&/")+"/"),Pl(l,t,n,"",function(u){return u})):l!=null&&(tf(l)&&(l=_T(l,n+(l.key==null||e&&e.key===l.key?"":(""+l.key).replace(bm,"$&/")+"/")+r)),t.push(l)),1;r=0;var s=a===""?".":a+":";if(ym(e))for(var o=0;o<e.length;o++)a=e[o],i=s+Fc(a,o),r+=Pl(a,t,n,i,l);else if(o=NT(e),typeof o=="function")for(e=o.call(e),o=0;!(a=e.next()).done;)a=a.value,i=s+Fc(a,o++),r+=Pl(a,t,n,i,l);else if(i==="object"){if(typeof e.then=="function")return Pl(DT(e),t,n,a,l);throw t=String(e),Error("Objects are not valid as a React child (found: "+(t==="[object Object]"?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.")}return r}function so(e,t,n){if(e==null)return e;var a=[],l=0;return Pl(e,a,"","",function(i){return t.call(n,i,l++)}),a}function zT(e){if(e._status===-1){var t=e._result;t=t(),t.then(function(n){(e._status===0||e._status===-1)&&(e._status=1,e._result=n)},function(n){(e._status===0||e._status===-1)&&(e._status=2,e._result=n)}),e._status===-1&&(e._status=0,e._result=t)}if(e._status===1)return e._result.default;throw e._result}var vm=typeof reportError=="function"?reportError:function(e){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var t=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof e=="object"&&e!==null&&typeof e.message=="string"?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",e);return}console.error(e)},MT={map:so,forEach:function(e,t,n){so(e,function(){t.apply(this,arguments)},n)},count:function(e){var t=0;return so(e,function(){t++}),t},toArray:function(e){return so(e,function(t){return t})||[]},only:function(e){if(!tf(e))throw Error("React.Children.only expected to receive a single React element child.");return e}};F.Activity=OT;F.Children=MT;F.Component=Wl;F.Fragment=ST;F.Profiler=xT;F.PureComponent=Pc;F.StrictMode=TT;F.Suspense=wT;F.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=we;F.__COMPILER_RUNTIME={__proto__:null,c:function(e){return we.H.useMemoCache(e)}};F.cache=function(e){return function(){return e.apply(null,arguments)}};F.cacheSignal=function(){return null};F.cloneElement=function(e,t,n){if(e==null)throw Error("The argument must be a React element, but you passed "+e+".");var a=xm({},e.props),l=e.key;if(t!=null)for(i in t.key!==void 0&&(l=""+t.key),t)!Am.call(t,i)||i==="key"||i==="__self"||i==="__source"||i==="ref"&&t.ref===void 0||(a[i]=t[i]);var i=arguments.length-2;if(i===1)a.children=n;else if(1<i){for(var r=Array(i),s=0;s<i;s++)r[s]=arguments[s+2];a.children=r}return ef(e.type,l,a)};F.createContext=function(e){return e={$$typeof:kT,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null},e.Provider=e,e.Consumer={$$typeof:ET,_context:e},e};F.createElement=function(e,t,n){var a,l={},i=null;if(t!=null)for(a in t.key!==void 0&&(i=""+t.key),t)Am.call(t,a)&&a!=="key"&&a!=="__self"&&a!=="__source"&&(l[a]=t[a]);var r=arguments.length-2;if(r===1)l.children=n;else if(1<r){for(var s=Array(r),o=0;o<r;o++)s[o]=arguments[o+2];l.children=s}if(e&&e.defaultProps)for(a in r=e.defaultProps,r)l[a]===void 0&&(l[a]=r[a]);return ef(e,i,l)};F.createRef=function(){return{current:null}};F.forwardRef=function(e){return{$$typeof:AT,render:e}};F.isValidElement=tf;F.lazy=function(e){return{$$typeof:Sm,_payload:{_status:-1,_result:e},_init:zT}};F.memo=function(e,t){return{$$typeof:RT,type:e,compare:t===void 0?null:t}};F.startTransition=function(e){var t=we.T,n={};we.T=n;try{var a=e(),l=we.S;l!==null&&l(n,a),typeof a=="object"&&a!==null&&typeof a.then=="function"&&a.then(Jc,vm)}catch(i){vm(i)}finally{t!==null&&n.types!==null&&(t.types=n.types),we.T=t}};F.unstable_useCacheRefresh=function(){return we.H.useCacheRefresh()};F.use=function(e){return we.H.use(e)};F.useActionState=function(e,t,n){return we.H.useActionState(e,t,n)};F.useCallback=function(e,t){return we.H.useCallback(e,t)};F.useContext=function(e){return we.H.useContext(e)};F.useDebugValue=function(){};F.useDeferredValue=function(e,t){return we.H.useDeferredValue(e,t)};F.useEffect=function(e,t){return we.H.useEffect(e,t)};F.useEffectEvent=function(e){return we.H.useEffectEvent(e)};F.useId=function(){return we.H.useId()};F.useImperativeHandle=function(e,t,n){return we.H.useImperativeHandle(e,t,n)};F.useInsertionEffect=function(e,t){return we.H.useInsertionEffect(e,t)};F.useLayoutEffect=function(e,t){return we.H.useLayoutEffect(e,t)};F.useMemo=function(e,t){return we.H.useMemo(e,t)};F.useOptimistic=function(e,t){return we.H.useOptimistic(e,t)};F.useReducer=function(e,t,n){return we.H.useReducer(e,t,n)};F.useRef=function(e){return we.H.useRef(e)};F.useState=function(e){return we.H.useState(e)};F.useSyncExternalStore=function(e,t,n){return we.H.useSyncExternalStore(e,t,n)};F.useTransition=function(){return we.H.useTransition()};F.version="19.2.6"});var ye=qt((AR,Rm)=>{"use strict";Rm.exports=wm()});var Nm=qt((wR,Om)=>{Om.exports={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0}});var Vm=qt(Ym=>{"use strict";var ti=ye();function XT(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var $T=typeof Object.is=="function"?Object.is:XT,QT=ti.useState,ZT=ti.useEffect,KT=ti.useLayoutEffect,FT=ti.useDebugValue;function JT(e,t){var n=t(),a=QT({inst:{value:n,getSnapshot:t}}),l=a[0].inst,i=a[1];return KT(function(){l.value=n,l.getSnapshot=t,sf(l)&&i({inst:l})},[e,n,t]),ZT(function(){return sf(l)&&i({inst:l}),e(function(){sf(l)&&i({inst:l})})},[e]),FT(n),n}function sf(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!$T(e,n)}catch(a){return!0}}function IT(e,t){return t()}var PT=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?IT:JT;Ym.useSyncExternalStore=ti.useSyncExternalStore!==void 0?ti.useSyncExternalStore:PT});var Xm=qt((kO,Gm)=>{"use strict";Gm.exports=Vm()});var og=qt(De=>{"use strict";function df(e,t){var n=e.length;e.push(t);e:for(;0<n;){var a=n-1>>>1,l=e[a];if(0<yo(l,t))e[a]=t,e[n]=l,n=a;else break e}}function zn(e){return e.length===0?null:e[0]}function vo(e){if(e.length===0)return null;var t=e[0],n=e.pop();if(n!==t){e[0]=n;e:for(var a=0,l=e.length,i=l>>>1;a<i;){var r=2*(a+1)-1,s=e[r],o=r+1,u=e[o];if(0>yo(s,n))o<l&&0>yo(u,s)?(e[a]=u,e[o]=n,a=o):(e[a]=s,e[r]=n,a=r);else if(o<l&&0>yo(u,n))e[a]=u,e[o]=n,a=o;else break e}}return t}function yo(e,t){var n=e.sortIndex-t.sortIndex;return n!==0?n:e.id-t.id}De.unstable_now=void 0;typeof performance=="object"&&typeof performance.now=="function"?(Wm=performance,De.unstable_now=function(){return Wm.now()}):(uf=Date,eg=uf.now(),De.unstable_now=function(){return uf.now()-eg});var Wm,uf,eg,na=[],Na=[],cx=1,en=null,gt=3,hf=!1,Ar=!1,wr=!1,pf=!1,ag=typeof setTimeout=="function"?setTimeout:null,lg=typeof clearTimeout=="function"?clearTimeout:null,tg=typeof setImmediate<"u"?setImmediate:null;function bo(e){for(var t=zn(Na);t!==null;){if(t.callback===null)vo(Na);else if(t.startTime<=e)vo(Na),t.sortIndex=t.expirationTime,df(na,t);else break;t=zn(Na)}}function mf(e){if(wr=!1,bo(e),!Ar)if(zn(na)!==null)Ar=!0,ri||(ri=!0,ii());else{var t=zn(Na);t!==null&&gf(mf,t.startTime-e)}}var ri=!1,Rr=-1,ig=5,rg=-1;function sg(){return pf?!0:!(De.unstable_now()-rg<ig)}function cf(){if(pf=!1,ri){var e=De.unstable_now();rg=e;var t=!0;try{e:{Ar=!1,wr&&(wr=!1,lg(Rr),Rr=-1),hf=!0;var n=gt;try{t:{for(bo(e),en=zn(na);en!==null&&!(en.expirationTime>e&&sg());){var a=en.callback;if(typeof a=="function"){en.callback=null,gt=en.priorityLevel;var l=a(en.expirationTime<=e);if(e=De.unstable_now(),typeof l=="function"){en.callback=l,bo(e),t=!0;break t}en===zn(na)&&vo(na),bo(e)}else vo(na);en=zn(na)}if(en!==null)t=!0;else{var i=zn(Na);i!==null&&gf(mf,i.startTime-e),t=!1}}break e}finally{en=null,gt=n,hf=!1}t=void 0}}finally{t?ii():ri=!1}}}var ii;typeof tg=="function"?ii=function(){tg(cf)}:typeof MessageChannel<"u"?(ff=new MessageChannel,ng=ff.port2,ff.port1.onmessage=cf,ii=function(){ng.postMessage(null)}):ii=function(){ag(cf,0)};var ff,ng;function gf(e,t){Rr=ag(function(){e(De.unstable_now())},t)}De.unstable_IdlePriority=5;De.unstable_ImmediatePriority=1;De.unstable_LowPriority=4;De.unstable_NormalPriority=3;De.unstable_Profiling=null;De.unstable_UserBlockingPriority=2;De.unstable_cancelCallback=function(e){e.callback=null};De.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):ig=0<e?Math.floor(1e3/e):5};De.unstable_getCurrentPriorityLevel=function(){return gt};De.unstable_next=function(e){switch(gt){case 1:case 2:case 3:var t=3;break;default:t=gt}var n=gt;gt=t;try{return e()}finally{gt=n}};De.unstable_requestPaint=function(){pf=!0};De.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=gt;gt=e;try{return t()}finally{gt=n}};De.unstable_scheduleCallback=function(e,t,n){var a=De.unstable_now();switch(typeof n=="object"&&n!==null?(n=n.delay,n=typeof n=="number"&&0<n?a+n:a):n=a,e){case 1:var l=-1;break;case 2:l=250;break;case 5:l=1073741823;break;case 4:l=1e4;break;default:l=5e3}return l=n+l,e={id:cx++,callback:t,priorityLevel:e,startTime:n,expirationTime:l,sortIndex:-1},n>a?(e.sortIndex=n,df(Na,e),zn(na)===null&&e===zn(Na)&&(wr?(lg(Rr),Rr=-1):wr=!0,gf(mf,n-a))):(e.sortIndex=l,df(na,e),Ar||hf||(Ar=!0,ri||(ri=!0,ii()))),e};De.unstable_shouldYield=sg;De.unstable_wrapCallback=function(e){var t=gt;return function(){var n=gt;gt=t;try{return e.apply(this,arguments)}finally{gt=n}}}});var cg=qt((RN,ug)=>{"use strict";ug.exports=og()});var dg=qt(St=>{"use strict";var fx=ye();function fg(e){var t="https://react.dev/errors/"+e;if(1<arguments.length){t+="?args[]="+encodeURIComponent(arguments[1]);for(var n=2;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n])}return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function _a(){}var vt={d:{f:_a,r:function(){throw Error(fg(522))},D:_a,C:_a,L:_a,m:_a,X:_a,S:_a,M:_a},p:0,findDOMNode:null},dx=Symbol.for("react.portal");function hx(e,t,n){var a=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:dx,key:a==null?null:""+a,children:e,containerInfo:t,implementation:n}}var Or=fx.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function So(e,t){if(e==="font")return"";if(typeof t=="string")return t==="use-credentials"?t:""}St.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=vt;St.createPortal=function(e,t){var n=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!t||t.nodeType!==1&&t.nodeType!==9&&t.nodeType!==11)throw Error(fg(299));return hx(e,t,null,n)};St.flushSync=function(e){var t=Or.T,n=vt.p;try{if(Or.T=null,vt.p=2,e)return e()}finally{Or.T=t,vt.p=n,vt.d.f()}};St.preconnect=function(e,t){typeof e=="string"&&(t?(t=t.crossOrigin,t=typeof t=="string"?t==="use-credentials"?t:"":void 0):t=null,vt.d.C(e,t))};St.prefetchDNS=function(e){typeof e=="string"&&vt.d.D(e)};St.preinit=function(e,t){if(typeof e=="string"&&t&&typeof t.as=="string"){var n=t.as,a=So(n,t.crossOrigin),l=typeof t.integrity=="string"?t.integrity:void 0,i=typeof t.fetchPriority=="string"?t.fetchPriority:void 0;n==="style"?vt.d.S(e,typeof t.precedence=="string"?t.precedence:void 0,{crossOrigin:a,integrity:l,fetchPriority:i}):n==="script"&&vt.d.X(e,{crossOrigin:a,integrity:l,fetchPriority:i,nonce:typeof t.nonce=="string"?t.nonce:void 0})}};St.preinitModule=function(e,t){if(typeof e=="string")if(typeof t=="object"&&t!==null){if(t.as==null||t.as==="script"){var n=So(t.as,t.crossOrigin);vt.d.M(e,{crossOrigin:n,integrity:typeof t.integrity=="string"?t.integrity:void 0,nonce:typeof t.nonce=="string"?t.nonce:void 0})}}else t==null&&vt.d.M(e)};St.preload=function(e,t){if(typeof e=="string"&&typeof t=="object"&&t!==null&&typeof t.as=="string"){var n=t.as,a=So(n,t.crossOrigin);vt.d.L(e,n,{crossOrigin:a,integrity:typeof t.integrity=="string"?t.integrity:void 0,nonce:typeof t.nonce=="string"?t.nonce:void 0,type:typeof t.type=="string"?t.type:void 0,fetchPriority:typeof t.fetchPriority=="string"?t.fetchPriority:void 0,referrerPolicy:typeof t.referrerPolicy=="string"?t.referrerPolicy:void 0,imageSrcSet:typeof t.imageSrcSet=="string"?t.imageSrcSet:void 0,imageSizes:typeof t.imageSizes=="string"?t.imageSizes:void 0,media:typeof t.media=="string"?t.media:void 0})}};St.preloadModule=function(e,t){if(typeof e=="string")if(t){var n=So(t.as,t.crossOrigin);vt.d.m(e,{as:typeof t.as=="string"&&t.as!=="script"?t.as:void 0,crossOrigin:n,integrity:typeof t.integrity=="string"?t.integrity:void 0})}else vt.d.m(e)};St.requestFormReset=function(e){vt.d.r(e)};St.unstable_batchedUpdates=function(e,t){return e(t)};St.useFormState=function(e,t,n){return Or.H.useFormState(e,t,n)};St.useFormStatus=function(){return Or.H.useHostTransitionStatus()};St.version="19.2.6"});var mg=qt((NN,pg)=>{"use strict";function hg(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(hg)}catch(e){console.error(e)}}hg(),pg.exports=dg()});var Rv=qt($u=>{"use strict";var Je=cg(),Yy=ye(),px=mg();function w(e){var t="https://react.dev/errors/"+e;if(1<arguments.length){t+="?args[]="+encodeURIComponent(arguments[1]);for(var n=2;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n])}return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function Vy(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11)}function ps(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do t=e,(t.flags&4098)!==0&&(n=t.return),e=t.return;while(e)}return t.tag===3?n:null}function Gy(e){if(e.tag===13){var t=e.memoizedState;if(t===null&&(e=e.alternate,e!==null&&(t=e.memoizedState)),t!==null)return t.dehydrated}return null}function Xy(e){if(e.tag===31){var t=e.memoizedState;if(t===null&&(e=e.alternate,e!==null&&(t=e.memoizedState)),t!==null)return t.dehydrated}return null}function gg(e){if(ps(e)!==e)throw Error(w(188))}function mx(e){var t=e.alternate;if(!t){if(t=ps(e),t===null)throw Error(w(188));return t!==e?null:e}for(var n=e,a=t;;){var l=n.return;if(l===null)break;var i=l.alternate;if(i===null){if(a=l.return,a!==null){n=a;continue}break}if(l.child===i.child){for(i=l.child;i;){if(i===n)return gg(l),e;if(i===a)return gg(l),t;i=i.sibling}throw Error(w(188))}if(n.return!==a.return)n=l,a=i;else{for(var r=!1,s=l.child;s;){if(s===n){r=!0,n=l,a=i;break}if(s===a){r=!0,a=l,n=i;break}s=s.sibling}if(!r){for(s=i.child;s;){if(s===n){r=!0,n=i,a=l;break}if(s===a){r=!0,a=i,n=l;break}s=s.sibling}if(!r)throw Error(w(189))}}if(n.alternate!==a)throw Error(w(190))}if(n.tag!==3)throw Error(w(188));return n.stateNode.current===n?e:t}function $y(e){var t=e.tag;if(t===5||t===26||t===27||t===6)return e;for(e=e.child;e!==null;){if(t=$y(e),t!==null)return t;e=e.sibling}return null}var Ne=Object.assign,gx=Symbol.for("react.element"),To=Symbol.for("react.transitional.element"),Ur=Symbol.for("react.portal"),di=Symbol.for("react.fragment"),Qy=Symbol.for("react.strict_mode"),Jf=Symbol.for("react.profiler"),Zy=Symbol.for("react.consumer"),ca=Symbol.for("react.context"),$d=Symbol.for("react.forward_ref"),If=Symbol.for("react.suspense"),Pf=Symbol.for("react.suspense_list"),Qd=Symbol.for("react.memo"),Ca=Symbol.for("react.lazy"),Wf=Symbol.for("react.activity"),yx=Symbol.for("react.memo_cache_sentinel"),yg=Symbol.iterator;function Nr(e){return e===null||typeof e!="object"?null:(e=yg&&e[yg]||e["@@iterator"],typeof e=="function"?e:null)}var bx=Symbol.for("react.client.reference");function ed(e){if(e==null)return null;if(typeof e=="function")return e.$$typeof===bx?null:e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case di:return"Fragment";case Jf:return"Profiler";case Qy:return"StrictMode";case If:return"Suspense";case Pf:return"SuspenseList";case Wf:return"Activity"}if(typeof e=="object")switch(e.$$typeof){case Ur:return"Portal";case ca:return e.displayName||"Context";case Zy:return(e._context.displayName||"Context")+".Consumer";case $d:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Qd:return t=e.displayName||null,t!==null?t:ed(e.type)||"Memo";case Ca:t=e._payload,e=e._init;try{return ed(e(t))}catch(n){}}return null}var Hr=Array.isArray,Q=Yy.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,fe=px.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,Tl={pending:!1,data:null,method:null,action:null},td=[],hi=-1;function Bn(e){return{current:e}}function at(e){0>hi||(e.current=td[hi],td[hi]=null,hi--)}function xe(e,t){hi++,td[hi]=e.current,e.current=t}var Hn=Bn(null),es=Bn(null),Va=Bn(null),eu=Bn(null);function tu(e,t){switch(xe(Va,t),xe(es,e),xe(Hn,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?ky(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=ky(t),e=hv(t,e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}at(Hn),xe(Hn,e)}function Ci(){at(Hn),at(es),at(Va)}function nd(e){e.memoizedState!==null&&xe(eu,e);var t=Hn.current,n=hv(t,e.type);t!==n&&(xe(es,e),xe(Hn,n))}function nu(e){es.current===e&&(at(Hn),at(es)),eu.current===e&&(at(eu),fs._currentValue=Tl)}var yf,bg;function yl(e){if(yf===void 0)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);yf=t&&t[1]||"",bg=-1<n.stack.indexOf("\n at")?" (<anonymous>)":-1<n.stack.indexOf("@")?"@unknown:0:0":""}return"\n"+yf+e+bg}var bf=!1;function vf(e,t){if(!e||bf)return"";bf=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{var a={DetermineComponentFrameRoot:function(){try{if(t){var f=function(){throw Error()};if(Object.defineProperty(f.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(f,[])}catch(p){var d=p}Reflect.construct(e,[],f)}else{try{f.call()}catch(p){d=p}e.call(f.prototype)}}else{try{throw Error()}catch(p){d=p}(f=e())&&typeof f.catch=="function"&&f.catch(function(){})}}catch(p){if(p&&d&&typeof p.stack=="string")return[p.stack,d.stack]}return[null,null]}};a.DetermineComponentFrameRoot.displayName="DetermineComponentFrameRoot";var l=Object.getOwnPropertyDescriptor(a.DetermineComponentFrameRoot,"name");l&&l.configurable&&Object.defineProperty(a.DetermineComponentFrameRoot,"name",{value:"DetermineComponentFrameRoot"});var i=a.DetermineComponentFrameRoot(),r=i[0],s=i[1];if(r&&s){var o=r.split("\n"),u=s.split("\n");for(l=a=0;a<o.length&&!o[a].includes("DetermineComponentFrameRoot");)a++;for(;l<u.length&&!u[l].includes("DetermineComponentFrameRoot");)l++;if(a===o.length||l===u.length)for(a=o.length-1,l=u.length-1;1<=a&&0<=l&&o[a]!==u[l];)l--;for(;1<=a&&0<=l;a--,l--)if(o[a]!==u[l]){if(a!==1||l!==1)do if(a--,l--,0>l||o[a]!==u[l]){var c="\n"+o[a].replace(" at new "," at ");return e.displayName&&c.includes("<anonymous>")&&(c=c.replace("<anonymous>",e.displayName)),c}while(1<=a&&0<=l);break}}}finally{bf=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:"")?yl(n):""}function vx(e,t){switch(e.tag){case 26:case 27:case 5:return yl(e.type);case 16:return yl("Lazy");case 13:return e.child!==t&&t!==null?yl("Suspense Fallback"):yl("Suspense");case 19:return yl("SuspenseList");case 0:case 15:return vf(e.type,!1);case 11:return vf(e.type.render,!1);case 1:return vf(e.type,!0);case 31:return yl("Activity");default:return""}}function vg(e){try{var t="",n=null;do t+=vx(e,n),n=e,e=e.return;while(e);return t}catch(a){return"\nError generating stack: "+a.message+"\n"+a.stack}}var ad=Object.prototype.hasOwnProperty,Zd=Je.unstable_scheduleCallback,Sf=Je.unstable_cancelCallback,Sx=Je.unstable_shouldYield,Tx=Je.unstable_requestPaint,$t=Je.unstable_now,xx=Je.unstable_getCurrentPriorityLevel,Ky=Je.unstable_ImmediatePriority,Fy=Je.unstable_UserBlockingPriority,au=Je.unstable_NormalPriority,Ex=Je.unstable_LowPriority,Jy=Je.unstable_IdlePriority,kx=Je.log,Ax=Je.unstable_setDisableYieldValue,ms=null,Qt=null;function Ha(e){if(typeof kx=="function"&&Ax(e),Qt&&typeof Qt.setStrictMode=="function")try{Qt.setStrictMode(ms,e)}catch(t){}}var Zt=Math.clz32?Math.clz32:Ox,wx=Math.log,Rx=Math.LN2;function Ox(e){return e>>>=0,e===0?32:31-(wx(e)/Rx|0)|0}var xo=256,Eo=262144,ko=4194304;function bl(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function Nu(e,t,n){var a=e.pendingLanes;if(a===0)return 0;var l=0,i=e.suspendedLanes,r=e.pingedLanes;e=e.warmLanes;var s=a&134217727;return s!==0?(a=s&~i,a!==0?l=bl(a):(r&=s,r!==0?l=bl(r):n||(n=s&~e,n!==0&&(l=bl(n))))):(s=a&~i,s!==0?l=bl(s):r!==0?l=bl(r):n||(n=a&~e,n!==0&&(l=bl(n)))),l===0?0:t!==0&&t!==l&&(t&i)===0&&(i=l&-l,n=t&-t,i>=n||i===32&&(n&4194048)!==0)?t:l}function gs(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function Nx(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Iy(){var e=ko;return ko<<=1,(ko&62914560)===0&&(ko=4194304),e}function Tf(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function ys(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function _x(e,t,n,a,l,i){var r=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var s=e.entanglements,o=e.expirationTimes,u=e.hiddenUpdates;for(n=r&~n;0<n;){var c=31-Zt(n),f=1<<c;s[c]=0,o[c]=-1;var d=u[c];if(d!==null)for(u[c]=null,c=0;c<d.length;c++){var p=d[c];p!==null&&(p.lane&=-536870913)}n&=~f}a!==0&&Py(e,a,0),i!==0&&l===0&&e.tag!==0&&(e.suspendedLanes|=i&~(r&~t))}function Py(e,t,n){e.pendingLanes|=t,e.suspendedLanes&=~t;var a=31-Zt(t);e.entangledLanes|=t,e.entanglements[a]=e.entanglements[a]|1073741824|n&261930}function Wy(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var a=31-Zt(n),l=1<<a;l&t|e[a]&t&&(e[a]|=t),n&=~l}}function eb(e,t){var n=t&-t;return n=(n&42)!==0?1:Kd(n),(n&(e.suspendedLanes|t))!==0?0:n}function Kd(e){switch(e){case 2:e=1;break;case 8:e=4;break;case 32:e=16;break;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:e=128;break;case 268435456:e=134217728;break;default:e=0}return e}function Fd(e){return e&=-e,2<e?8<e?(e&134217727)!==0?32:268435456:8:2}function tb(){var e=fe.p;return e!==0?e:(e=window.event,e===void 0?32:kv(e.type))}function Sg(e,t){var n=fe.p;try{return fe.p=e,t()}finally{fe.p=n}}var tl=Math.random().toString(36).slice(2),st="__reactFiber$"+tl,_t="__reactProps$"+tl,Vi="__reactContainer$"+tl,ld="__reactEvents$"+tl,Cx="__reactListeners$"+tl,Dx="__reactHandles$"+tl,Tg="__reactResources$"+tl,bs="__reactMarker$"+tl;function Jd(e){delete e[st],delete e[_t],delete e[ld],delete e[Cx],delete e[Dx]}function pi(e){var t=e[st];if(t)return t;for(var n=e.parentNode;n;){if(t=n[Vi]||n[st]){if(n=t.alternate,t.child!==null||n!==null&&n.child!==null)for(e=Ny(e);e!==null;){if(n=e[st])return n;e=Ny(e)}return t}e=n,n=e.parentNode}return null}function Gi(e){if(e=e[st]||e[Vi]){var t=e.tag;if(t===5||t===6||t===13||t===31||t===26||t===27||t===3)return e}return null}function Br(e){var t=e.tag;if(t===5||t===26||t===27||t===6)return e.stateNode;throw Error(w(33))}function ki(e){var t=e[Tg];return t||(t=e[Tg]={hoistableStyles:new Map,hoistableScripts:new Map}),t}function nt(e){e[bs]=!0}var nb=new Set,ab={};function Cl(e,t){Di(e,t),Di(e+"Capture",t)}function Di(e,t){for(ab[e]=t,e=0;e<t.length;e++)nb.add(t[e])}var zx=RegExp("^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"),xg={},Eg={};function Mx(e){return ad.call(Eg,e)?!0:ad.call(xg,e)?!1:zx.test(e)?Eg[e]=!0:(xg[e]=!0,!1)}function qo(e,t,n){if(Mx(t))if(n===null)e.removeAttribute(t);else{switch(typeof n){case"undefined":case"function":case"symbol":e.removeAttribute(t);return;case"boolean":var a=t.toLowerCase().slice(0,5);if(a!=="data-"&&a!=="aria-"){e.removeAttribute(t);return}}e.setAttribute(t,""+n)}}function Ao(e,t,n){if(n===null)e.removeAttribute(t);else{switch(typeof n){case"undefined":case"function":case"symbol":case"boolean":e.removeAttribute(t);return}e.setAttribute(t,""+n)}}function aa(e,t,n,a){if(a===null)e.removeAttribute(n);else{switch(typeof a){case"undefined":case"function":case"symbol":case"boolean":e.removeAttribute(n);return}e.setAttributeNS(t,n,""+a)}}function nn(e){switch(typeof e){case"bigint":case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function lb(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function Lx(e,t,n){var a=Object.getOwnPropertyDescriptor(e.constructor.prototype,t);if(!e.hasOwnProperty(t)&&typeof a<"u"&&typeof a.get=="function"&&typeof a.set=="function"){var l=a.get,i=a.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return l.call(this)},set:function(r){n=""+r,i.call(this,r)}}),Object.defineProperty(e,t,{enumerable:a.enumerable}),{getValue:function(){return n},setValue:function(r){n=""+r},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function id(e){if(!e._valueTracker){var t=lb(e)?"checked":"value";e._valueTracker=Lx(e,t,""+e[t])}}function ib(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),a="";return e&&(a=lb(e)?e.checked?"true":"false":e.value),e=a,e!==n?(t.setValue(e),!0):!1}function lu(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch(t){return e.body}}var Ux=/[\n"\\]/g;function rn(e){return e.replace(Ux,function(t){return"\\"+t.charCodeAt(0).toString(16)+" "})}function rd(e,t,n,a,l,i,r,s){e.name="",r!=null&&typeof r!="function"&&typeof r!="symbol"&&typeof r!="boolean"?e.type=r:e.removeAttribute("type"),t!=null?r==="number"?(t===0&&e.value===""||e.value!=t)&&(e.value=""+nn(t)):e.value!==""+nn(t)&&(e.value=""+nn(t)):r!=="submit"&&r!=="reset"||e.removeAttribute("value"),t!=null?sd(e,r,nn(t)):n!=null?sd(e,r,nn(n)):a!=null&&e.removeAttribute("value"),l==null&&i!=null&&(e.defaultChecked=!!i),l!=null&&(e.checked=l&&typeof l!="function"&&typeof l!="symbol"),s!=null&&typeof s!="function"&&typeof s!="symbol"&&typeof s!="boolean"?e.name=""+nn(s):e.removeAttribute("name")}function rb(e,t,n,a,l,i,r,s){if(i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"&&(e.type=i),t!=null||n!=null){if(!(i!=="submit"&&i!=="reset"||t!=null)){id(e);return}n=n!=null?""+nn(n):"",t=t!=null?""+nn(t):n,s||t===e.value||(e.value=t),e.defaultValue=t}a=a!=null?a:l,a=typeof a!="function"&&typeof a!="symbol"&&!!a,e.checked=s?e.checked:!!a,e.defaultChecked=!!a,r!=null&&typeof r!="function"&&typeof r!="symbol"&&typeof r!="boolean"&&(e.name=r),id(e)}function sd(e,t,n){t==="number"&&lu(e.ownerDocument)===e||e.defaultValue===""+n||(e.defaultValue=""+n)}function Ai(e,t,n,a){if(e=e.options,t){t={};for(var l=0;l<n.length;l++)t["$"+n[l]]=!0;for(n=0;n<e.length;n++)l=t.hasOwnProperty("$"+e[n].value),e[n].selected!==l&&(e[n].selected=l),l&&a&&(e[n].defaultSelected=!0)}else{for(n=""+nn(n),t=null,l=0;l<e.length;l++){if(e[l].value===n){e[l].selected=!0,a&&(e[l].defaultSelected=!0);return}t!==null||e[l].disabled||(t=e[l])}t!==null&&(t.selected=!0)}}function sb(e,t,n){if(t!=null&&(t=""+nn(t),t!==e.value&&(e.value=t),n==null)){e.defaultValue!==t&&(e.defaultValue=t);return}e.defaultValue=n!=null?""+nn(n):""}function ob(e,t,n,a){if(t==null){if(a!=null){if(n!=null)throw Error(w(92));if(Hr(a)){if(1<a.length)throw Error(w(93));a=a[0]}n=a}n==null&&(n=""),t=n}n=nn(t),e.defaultValue=n,a=e.textContent,a===n&&a!==""&&a!==null&&(e.value=a),id(e)}function zi(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var Hx=new Set("animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split(" "));function kg(e,t,n){var a=t.indexOf("--")===0;n==null||typeof n=="boolean"||n===""?a?e.setProperty(t,""):t==="float"?e.cssFloat="":e[t]="":a?e.setProperty(t,n):typeof n!="number"||n===0||Hx.has(t)?t==="float"?e.cssFloat=n:e[t]=(""+n).trim():e[t]=n+"px"}function ub(e,t,n){if(t!=null&&typeof t!="object")throw Error(w(62));if(e=e.style,n!=null){for(var a in n)!n.hasOwnProperty(a)||t!=null&&t.hasOwnProperty(a)||(a.indexOf("--")===0?e.setProperty(a,""):a==="float"?e.cssFloat="":e[a]="");for(var l in t)a=t[l],t.hasOwnProperty(l)&&n[l]!==a&&kg(e,l,a)}else for(var i in t)t.hasOwnProperty(i)&&kg(e,i,t[i])}function Id(e){if(e.indexOf("-")===-1)return!1;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var Bx=new Map([["acceptCharset","accept-charset"],["htmlFor","for"],["httpEquiv","http-equiv"],["crossOrigin","crossorigin"],["accentHeight","accent-height"],["alignmentBaseline","alignment-baseline"],["arabicForm","arabic-form"],["baselineShift","baseline-shift"],["capHeight","cap-height"],["clipPath","clip-path"],["clipRule","clip-rule"],["colorInterpolation","color-interpolation"],["colorInterpolationFilters","color-interpolation-filters"],["colorProfile","color-profile"],["colorRendering","color-rendering"],["dominantBaseline","dominant-baseline"],["enableBackground","enable-background"],["fillOpacity","fill-opacity"],["fillRule","fill-rule"],["floodColor","flood-color"],["floodOpacity","flood-opacity"],["fontFamily","font-family"],["fontSize","font-size"],["fontSizeAdjust","font-size-adjust"],["fontStretch","font-stretch"],["fontStyle","font-style"],["fontVariant","font-variant"],["fontWeight","font-weight"],["glyphName","glyph-name"],["glyphOrientationHorizontal","glyph-orientation-horizontal"],["glyphOrientationVertical","glyph-orientation-vertical"],["horizAdvX","horiz-adv-x"],["horizOriginX","horiz-origin-x"],["imageRendering","image-rendering"],["letterSpacing","letter-spacing"],["lightingColor","lighting-color"],["markerEnd","marker-end"],["markerMid","marker-mid"],["markerStart","marker-start"],["overlinePosition","overline-position"],["overlineThickness","overline-thickness"],["paintOrder","paint-order"],["panose-1","panose-1"],["pointerEvents","pointer-events"],["renderingIntent","rendering-intent"],["shapeRendering","shape-rendering"],["stopColor","stop-color"],["stopOpacity","stop-opacity"],["strikethroughPosition","strikethrough-position"],["strikethroughThickness","strikethrough-thickness"],["strokeDasharray","stroke-dasharray"],["strokeDashoffset","stroke-dashoffset"],["strokeLinecap","stroke-linecap"],["strokeLinejoin","stroke-linejoin"],["strokeMiterlimit","stroke-miterlimit"],["strokeOpacity","stroke-opacity"],["strokeWidth","stroke-width"],["textAnchor","text-anchor"],["textDecoration","text-decoration"],["textRendering","text-rendering"],["transformOrigin","transform-origin"],["underlinePosition","underline-position"],["underlineThickness","underline-thickness"],["unicodeBidi","unicode-bidi"],["unicodeRange","unicode-range"],["unitsPerEm","units-per-em"],["vAlphabetic","v-alphabetic"],["vHanging","v-hanging"],["vIdeographic","v-ideographic"],["vMathematical","v-mathematical"],["vectorEffect","vector-effect"],["vertAdvY","vert-adv-y"],["vertOriginX","vert-origin-x"],["vertOriginY","vert-origin-y"],["wordSpacing","word-spacing"],["writingMode","writing-mode"],["xmlnsXlink","xmlns:xlink"],["xHeight","x-height"]]),qx=/^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i;function jo(e){return qx.test(""+e)?"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')":e}function fa(){}var od=null;function Pd(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var mi=null,wi=null;function Ag(e){var t=Gi(e);if(t&&(e=t.stateNode)){var n=e[_t]||null;e:switch(e=t.stateNode,t.type){case"input":if(rd(e,n.value,n.defaultValue,n.defaultValue,n.checked,n.defaultChecked,n.type,n.name),t=n.name,n.type==="radio"&&t!=null){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll('input[name="'+rn(""+t)+'"][type="radio"]'),t=0;t<n.length;t++){var a=n[t];if(a!==e&&a.form===e.form){var l=a[_t]||null;if(!l)throw Error(w(90));rd(a,l.value,l.defaultValue,l.defaultValue,l.checked,l.defaultChecked,l.type,l.name)}}for(t=0;t<n.length;t++)a=n[t],a.form===e.form&&ib(a)}break e;case"textarea":sb(e,n.value,n.defaultValue);break e;case"select":t=n.value,t!=null&&Ai(e,!!n.multiple,t,!1)}}}var xf=!1;function cb(e,t,n){if(xf)return e(t,n);xf=!0;try{var a=e(t);return a}finally{if(xf=!1,(mi!==null||wi!==null)&&(Yu(),mi&&(t=mi,e=wi,wi=mi=null,Ag(t),e)))for(t=0;t<e.length;t++)Ag(e[t])}}function ts(e,t){var n=e.stateNode;if(n===null)return null;var a=n[_t]||null;if(a===null)return null;n=a[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(a=!a.disabled)||(e=e.type,a=!(e==="button"||e==="input"||e==="select"||e==="textarea")),e=!a;break e;default:e=!1}if(e)return null;if(n&&typeof n!="function")throw Error(w(231,t,typeof n));return n}var ga=!(typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),ud=!1;if(ga)try{si={},Object.defineProperty(si,"passive",{get:function(){ud=!0}}),window.addEventListener("test",si,si),window.removeEventListener("test",si,si)}catch(e){ud=!1}var si,Ba=null,Wd=null,Yo=null;function fb(){if(Yo)return Yo;var e,t=Wd,n=t.length,a,l="value"in Ba?Ba.value:Ba.textContent,i=l.length;for(e=0;e<n&&t[e]===l[e];e++);var r=n-e;for(a=1;a<=r&&t[n-a]===l[i-a];a++);return Yo=l.slice(e,1<a?1-a:void 0)}function Vo(e){var t=e.keyCode;return"charCode"in e?(e=e.charCode,e===0&&t===13&&(e=13)):e=t,e===10&&(e=13),32<=e||e===13?e:0}function wo(){return!0}function wg(){return!1}function Ct(e){function t(n,a,l,i,r){this._reactName=n,this._targetInst=l,this.type=a,this.nativeEvent=i,this.target=r,this.currentTarget=null;for(var s in e)e.hasOwnProperty(s)&&(n=e[s],this[s]=n?n(i):i[s]);return this.isDefaultPrevented=(i.defaultPrevented!=null?i.defaultPrevented:i.returnValue===!1)?wo:wg,this.isPropagationStopped=wg,this}return Ne(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var n=this.nativeEvent;n&&(n.preventDefault?n.preventDefault():typeof n.returnValue!="unknown"&&(n.returnValue=!1),this.isDefaultPrevented=wo)},stopPropagation:function(){var n=this.nativeEvent;n&&(n.stopPropagation?n.stopPropagation():typeof n.cancelBubble!="unknown"&&(n.cancelBubble=!0),this.isPropagationStopped=wo)},persist:function(){},isPersistent:wo}),t}var Dl={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},_u=Ct(Dl),vs=Ne({},Dl,{view:0,detail:0}),jx=Ct(vs),Ef,kf,_r,Cu=Ne({},vs,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:eh,button:0,buttons:0,relatedTarget:function(e){return e.relatedTarget===void 0?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==_r&&(_r&&e.type==="mousemove"?(Ef=e.screenX-_r.screenX,kf=e.screenY-_r.screenY):kf=Ef=0,_r=e),Ef)},movementY:function(e){return"movementY"in e?e.movementY:kf}}),Rg=Ct(Cu),Yx=Ne({},Cu,{dataTransfer:0}),Vx=Ct(Yx),Gx=Ne({},vs,{relatedTarget:0}),Af=Ct(Gx),Xx=Ne({},Dl,{animationName:0,elapsedTime:0,pseudoElement:0}),$x=Ct(Xx),Qx=Ne({},Dl,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),Zx=Ct(Qx),Kx=Ne({},Dl,{data:0}),Og=Ct(Kx),Fx={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},Jx={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},Ix={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function Px(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):(e=Ix[e])?!!t[e]:!1}function eh(){return Px}var Wx=Ne({},vs,{key:function(e){if(e.key){var t=Fx[e.key]||e.key;if(t!=="Unidentified")return t}return e.type==="keypress"?(e=Vo(e),e===13?"Enter":String.fromCharCode(e)):e.type==="keydown"||e.type==="keyup"?Jx[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:eh,charCode:function(e){return e.type==="keypress"?Vo(e):0},keyCode:function(e){return e.type==="keydown"||e.type==="keyup"?e.keyCode:0},which:function(e){return e.type==="keypress"?Vo(e):e.type==="keydown"||e.type==="keyup"?e.keyCode:0}}),eE=Ct(Wx),tE=Ne({},Cu,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0}),Ng=Ct(tE),nE=Ne({},vs,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:eh}),aE=Ct(nE),lE=Ne({},Dl,{propertyName:0,elapsedTime:0,pseudoElement:0}),iE=Ct(lE),rE=Ne({},Cu,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),sE=Ct(rE),oE=Ne({},Dl,{newState:0,oldState:0}),uE=Ct(oE),cE=[9,13,27,32],th=ga&&"CompositionEvent"in window,Yr=null;ga&&"documentMode"in document&&(Yr=document.documentMode);var fE=ga&&"TextEvent"in window&&!Yr,db=ga&&(!th||Yr&&8<Yr&&11>=Yr),_g=" ",Cg=!1;function hb(e,t){switch(e){case"keyup":return cE.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function pb(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var gi=!1;function dE(e,t){switch(e){case"compositionend":return pb(t);case"keypress":return t.which!==32?null:(Cg=!0,_g);case"textInput":return e=t.data,e===_g&&Cg?null:e;default:return null}}function hE(e,t){if(gi)return e==="compositionend"||!th&&hb(e,t)?(e=fb(),Yo=Wd=Ba=null,gi=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return db&&t.locale!=="ko"?null:t.data;default:return null}}var pE={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Dg(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t==="input"?!!pE[e.type]:t==="textarea"}function mb(e,t,n,a){mi?wi?wi.push(a):wi=[a]:mi=a,t=xu(t,"onChange"),0<t.length&&(n=new _u("onChange","change",null,n,a),e.push({event:n,listeners:t}))}var Vr=null,ns=null;function mE(e){cv(e,0)}function Du(e){var t=Br(e);if(ib(t))return e}function zg(e,t){if(e==="change")return t}var gb=!1;ga&&(ga?(Oo="oninput"in document,Oo||(wf=document.createElement("div"),wf.setAttribute("oninput","return;"),Oo=typeof wf.oninput=="function"),Ro=Oo):Ro=!1,gb=Ro&&(!document.documentMode||9<document.documentMode));var Ro,Oo,wf;function Mg(){Vr&&(Vr.detachEvent("onpropertychange",yb),ns=Vr=null)}function yb(e){if(e.propertyName==="value"&&Du(ns)){var t=[];mb(t,ns,e,Pd(e)),cb(mE,t)}}function gE(e,t,n){e==="focusin"?(Mg(),Vr=t,ns=n,Vr.attachEvent("onpropertychange",yb)):e==="focusout"&&Mg()}function yE(e){if(e==="selectionchange"||e==="keyup"||e==="keydown")return Du(ns)}function bE(e,t){if(e==="click")return Du(t)}function vE(e,t){if(e==="input"||e==="change")return Du(t)}function SE(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var Ft=typeof Object.is=="function"?Object.is:SE;function as(e,t){if(Ft(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;var n=Object.keys(e),a=Object.keys(t);if(n.length!==a.length)return!1;for(a=0;a<n.length;a++){var l=n[a];if(!ad.call(t,l)||!Ft(e[l],t[l]))return!1}return!0}function Lg(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function Ug(e,t){var n=Lg(e);e=0;for(var a;n;){if(n.nodeType===3){if(a=e+n.textContent.length,e<=t&&a>=t)return{node:n,offset:t-e};e=a}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=Lg(n)}}function bb(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?bb(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function vb(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=lu(e.document);t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch(a){n=!1}if(n)e=t.contentWindow;else break;t=lu(e.document)}return t}function nh(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}var TE=ga&&"documentMode"in document&&11>=document.documentMode,yi=null,cd=null,Gr=null,fd=!1;function Hg(e,t,n){var a=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;fd||yi==null||yi!==lu(a)||(a=yi,"selectionStart"in a&&nh(a)?a={start:a.selectionStart,end:a.selectionEnd}:(a=(a.ownerDocument&&a.ownerDocument.defaultView||window).getSelection(),a={anchorNode:a.anchorNode,anchorOffset:a.anchorOffset,focusNode:a.focusNode,focusOffset:a.focusOffset}),Gr&&as(Gr,a)||(Gr=a,a=xu(cd,"onSelect"),0<a.length&&(t=new _u("onSelect","select",null,t,n),e.push({event:t,listeners:a}),t.target=yi)))}function gl(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var bi={animationend:gl("Animation","AnimationEnd"),animationiteration:gl("Animation","AnimationIteration"),animationstart:gl("Animation","AnimationStart"),transitionrun:gl("Transition","TransitionRun"),transitionstart:gl("Transition","TransitionStart"),transitioncancel:gl("Transition","TransitionCancel"),transitionend:gl("Transition","TransitionEnd")},Rf={},Sb={};ga&&(Sb=document.createElement("div").style,"AnimationEvent"in window||(delete bi.animationend.animation,delete bi.animationiteration.animation,delete bi.animationstart.animation),"TransitionEvent"in window||delete bi.transitionend.transition);function zl(e){if(Rf[e])return Rf[e];if(!bi[e])return e;var t=bi[e],n;for(n in t)if(t.hasOwnProperty(n)&&n in Sb)return Rf[e]=t[n];return e}var Tb=zl("animationend"),xb=zl("animationiteration"),Eb=zl("animationstart"),xE=zl("transitionrun"),EE=zl("transitionstart"),kE=zl("transitioncancel"),kb=zl("transitionend"),Ab=new Map,dd="abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");dd.push("scrollEnd");function En(e,t){Ab.set(e,t),Cl(t,[e])}var iu=typeof reportError=="function"?reportError:function(e){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var t=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof e=="object"&&e!==null&&typeof e.message=="string"?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",e);return}console.error(e)},tn=[],vi=0,ah=0;function zu(){for(var e=vi,t=ah=vi=0;t<e;){var n=tn[t];tn[t++]=null;var a=tn[t];tn[t++]=null;var l=tn[t];tn[t++]=null;var i=tn[t];if(tn[t++]=null,a!==null&&l!==null){var r=a.pending;r===null?l.next=l:(l.next=r.next,r.next=l),a.pending=l}i!==0&&wb(n,l,i)}}function Mu(e,t,n,a){tn[vi++]=e,tn[vi++]=t,tn[vi++]=n,tn[vi++]=a,ah|=a,e.lanes|=a,e=e.alternate,e!==null&&(e.lanes|=a)}function lh(e,t,n,a){return Mu(e,t,n,a),ru(e)}function Ml(e,t){return Mu(e,null,null,t),ru(e)}function wb(e,t,n){e.lanes|=n;var a=e.alternate;a!==null&&(a.lanes|=n);for(var l=!1,i=e.return;i!==null;)i.childLanes|=n,a=i.alternate,a!==null&&(a.childLanes|=n),i.tag===22&&(e=i.stateNode,e===null||e._visibility&1||(l=!0)),e=i,i=i.return;return e.tag===3?(i=e.stateNode,l&&t!==null&&(l=31-Zt(n),e=i.hiddenUpdates,a=e[l],a===null?e[l]=[t]:a.push(t),t.lane=n|536870912),i):null}function ru(e){if(50<Pr)throw Pr=0,zd=null,Error(w(185));for(var t=e.return;t!==null;)e=t,t=e.return;return e.tag===3?e.stateNode:null}var Si={};function AE(e,t,n,a){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.refCleanup=this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=a,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Gt(e,t,n,a){return new AE(e,t,n,a)}function ih(e){return e=e.prototype,!(!e||!e.isReactComponent)}function ha(e,t){var n=e.alternate;return n===null?(n=Gt(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&65011712,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n.refCleanup=e.refCleanup,n}function Rb(e,t){e.flags&=65011714;var n=e.alternate;return n===null?(e.childLanes=0,e.lanes=t,e.child=null,e.subtreeFlags=0,e.memoizedProps=null,e.memoizedState=null,e.updateQueue=null,e.dependencies=null,e.stateNode=null):(e.childLanes=n.childLanes,e.lanes=n.lanes,e.child=n.child,e.subtreeFlags=0,e.deletions=null,e.memoizedProps=n.memoizedProps,e.memoizedState=n.memoizedState,e.updateQueue=n.updateQueue,e.type=n.type,t=n.dependencies,e.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext}),e}function Go(e,t,n,a,l,i){var r=0;if(a=e,typeof e=="function")ih(e)&&(r=1);else if(typeof e=="string")r=Ok(e,n,Hn.current)?26:e==="html"||e==="head"||e==="body"?27:5;else e:switch(e){case Wf:return e=Gt(31,n,t,l),e.elementType=Wf,e.lanes=i,e;case di:return xl(n.children,l,i,t);case Qy:r=8,l|=24;break;case Jf:return e=Gt(12,n,t,l|2),e.elementType=Jf,e.lanes=i,e;case If:return e=Gt(13,n,t,l),e.elementType=If,e.lanes=i,e;case Pf:return e=Gt(19,n,t,l),e.elementType=Pf,e.lanes=i,e;default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case ca:r=10;break e;case Zy:r=9;break e;case $d:r=11;break e;case Qd:r=14;break e;case Ca:r=16,a=null;break e}r=29,n=Error(w(130,e===null?"null":typeof e,"")),a=null}return t=Gt(r,n,t,l),t.elementType=e,t.type=a,t.lanes=i,t}function xl(e,t,n,a){return e=Gt(7,e,a,t),e.lanes=n,e}function Of(e,t,n){return e=Gt(6,e,null,t),e.lanes=n,e}function Ob(e){var t=Gt(18,null,null,0);return t.stateNode=e,t}function Nf(e,t,n){return t=Gt(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}var Bg=new WeakMap;function sn(e,t){if(typeof e=="object"&&e!==null){var n=Bg.get(e);return n!==void 0?n:(t={value:e,source:t,stack:vg(t)},Bg.set(e,t),t)}return{value:e,source:t,stack:vg(t)}}var Ti=[],xi=0,su=null,ls=0,an=[],ln=0,Ia=null,Mn=1,Ln="";function oa(e,t){Ti[xi++]=ls,Ti[xi++]=su,su=e,ls=t}function Nb(e,t,n){an[ln++]=Mn,an[ln++]=Ln,an[ln++]=Ia,Ia=e;var a=Mn;e=Ln;var l=32-Zt(a)-1;a&=~(1<<l),n+=1;var i=32-Zt(t)+l;if(30<i){var r=l-l%5;i=(a&(1<<r)-1).toString(32),a>>=r,l-=r,Mn=1<<32-Zt(t)+l|n<<l|a,Ln=i+e}else Mn=1<<i|n<<l|a,Ln=e}function rh(e){e.return!==null&&(oa(e,1),Nb(e,1,0))}function sh(e){for(;e===su;)su=Ti[--xi],Ti[xi]=null,ls=Ti[--xi],Ti[xi]=null;for(;e===Ia;)Ia=an[--ln],an[ln]=null,Ln=an[--ln],an[ln]=null,Mn=an[--ln],an[ln]=null}function _b(e,t){an[ln++]=Mn,an[ln++]=Ln,an[ln++]=Ia,Mn=t.id,Ln=t.overflow,Ia=e}var ot=null,Oe=null,oe=!1,Ga=null,on=!1,hd=Error(w(519));function Pa(e){var t=Error(w(418,1<arguments.length&&arguments[1]!==void 0&&arguments[1]?"text":"HTML",""));throw is(sn(t,e)),hd}function qg(e){var t=e.stateNode,n=e.type,a=e.memoizedProps;switch(t[st]=e,t[_t]=a,n){case"dialog":te("cancel",t),te("close",t);break;case"iframe":case"object":case"embed":te("load",t);break;case"video":case"audio":for(n=0;n<us.length;n++)te(us[n],t);break;case"source":te("error",t);break;case"img":case"image":case"link":te("error",t),te("load",t);break;case"details":te("toggle",t);break;case"input":te("invalid",t),rb(t,a.value,a.defaultValue,a.checked,a.defaultChecked,a.type,a.name,!0);break;case"select":te("invalid",t);break;case"textarea":te("invalid",t),ob(t,a.value,a.defaultValue,a.children)}n=a.children,typeof n!="string"&&typeof n!="number"&&typeof n!="bigint"||t.textContent===""+n||a.suppressHydrationWarning===!0||dv(t.textContent,n)?(a.popover!=null&&(te("beforetoggle",t),te("toggle",t)),a.onScroll!=null&&te("scroll",t),a.onScrollEnd!=null&&te("scrollend",t),a.onClick!=null&&(t.onclick=fa),t=!0):t=!1,t||Pa(e,!0)}function jg(e){for(ot=e.return;ot;)switch(ot.tag){case 5:case 31:case 13:on=!1;return;case 27:case 3:on=!0;return;default:ot=ot.return}}function oi(e){if(e!==ot)return!1;if(!oe)return jg(e),oe=!0,!1;var t=e.tag,n;if((n=t!==3&&t!==27)&&((n=t===5)&&(n=e.type,n=!(n!=="form"&&n!=="button")||Bd(e.type,e.memoizedProps)),n=!n),n&&Oe&&Pa(e),jg(e),t===13){if(e=e.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(w(317));Oe=Oy(e)}else if(t===31){if(e=e.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(w(317));Oe=Oy(e)}else t===27?(t=Oe,nl(e.type)?(e=Vd,Vd=null,Oe=e):Oe=t):Oe=ot?cn(e.stateNode.nextSibling):null;return!0}function wl(){Oe=ot=null,oe=!1}function _f(){var e=Ga;return e!==null&&(Ot===null?Ot=e:Ot.push.apply(Ot,e),Ga=null),e}function is(e){Ga===null?Ga=[e]:Ga.push(e)}var pd=Bn(null),Ll=null,da=null;function za(e,t,n){xe(pd,t._currentValue),t._currentValue=n}function pa(e){e._currentValue=pd.current,at(pd)}function md(e,t,n){for(;e!==null;){var a=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,a!==null&&(a.childLanes|=t)):a!==null&&(a.childLanes&t)!==t&&(a.childLanes|=t),e===n)break;e=e.return}}function gd(e,t,n,a){var l=e.child;for(l!==null&&(l.return=e);l!==null;){var i=l.dependencies;if(i!==null){var r=l.child;i=i.firstContext;e:for(;i!==null;){var s=i;i=l;for(var o=0;o<t.length;o++)if(s.context===t[o]){i.lanes|=n,s=i.alternate,s!==null&&(s.lanes|=n),md(i.return,n,e),a||(r=null);break e}i=s.next}}else if(l.tag===18){if(r=l.return,r===null)throw Error(w(341));r.lanes|=n,i=r.alternate,i!==null&&(i.lanes|=n),md(r,n,e),r=null}else r=l.child;if(r!==null)r.return=l;else for(r=l;r!==null;){if(r===e){r=null;break}if(l=r.sibling,l!==null){l.return=r.return,r=l;break}r=r.return}l=r}}function Xi(e,t,n,a){e=null;for(var l=t,i=!1;l!==null;){if(!i){if((l.flags&524288)!==0)i=!0;else if((l.flags&262144)!==0)break}if(l.tag===10){var r=l.alternate;if(r===null)throw Error(w(387));if(r=r.memoizedProps,r!==null){var s=l.type;Ft(l.pendingProps.value,r.value)||(e!==null?e.push(s):e=[s])}}else if(l===eu.current){if(r=l.alternate,r===null)throw Error(w(387));r.memoizedState.memoizedState!==l.memoizedState.memoizedState&&(e!==null?e.push(fs):e=[fs])}l=l.return}e!==null&&gd(t,e,n,a),t.flags|=262144}function ou(e){for(e=e.firstContext;e!==null;){if(!Ft(e.context._currentValue,e.memoizedValue))return!0;e=e.next}return!1}function Rl(e){Ll=e,da=null,e=e.dependencies,e!==null&&(e.firstContext=null)}function ut(e){return Cb(Ll,e)}function No(e,t){return Ll===null&&Rl(e),Cb(e,t)}function Cb(e,t){var n=t._currentValue;if(t={context:t,memoizedValue:n,next:null},da===null){if(e===null)throw Error(w(308));da=t,e.dependencies={lanes:0,firstContext:t},e.flags|=524288}else da=da.next=t;return n}var wE=typeof AbortController<"u"?AbortController:function(){var e=[],t=this.signal={aborted:!1,addEventListener:function(n,a){e.push(a)}};this.abort=function(){t.aborted=!0,e.forEach(function(n){return n()})}},RE=Je.unstable_scheduleCallback,OE=Je.unstable_NormalPriority,$e={$$typeof:ca,Consumer:null,Provider:null,_currentValue:null,_currentValue2:null,_threadCount:0};function oh(){return{controller:new wE,data:new Map,refCount:0}}function Ss(e){e.refCount--,e.refCount===0&&RE(OE,function(){e.controller.abort()})}var Xr=null,yd=0,Mi=0,Ri=null;function NE(e,t){if(Xr===null){var n=Xr=[];yd=0,Mi=zh(),Ri={status:"pending",value:void 0,then:function(a){n.push(a)}}}return yd++,t.then(Yg,Yg),t}function Yg(){if(--yd===0&&Xr!==null){Ri!==null&&(Ri.status="fulfilled");var e=Xr;Xr=null,Mi=0,Ri=null;for(var t=0;t<e.length;t++)(0,e[t])()}}function _E(e,t){var n=[],a={status:"pending",value:null,reason:null,then:function(l){n.push(l)}};return e.then(function(){a.status="fulfilled",a.value=t;for(var l=0;l<n.length;l++)(0,n[l])(t)},function(l){for(a.status="rejected",a.reason=l,l=0;l<n.length;l++)(0,n[l])(void 0)}),a}var Vg=Q.S;Q.S=function(e,t){$0=$t(),typeof t=="object"&&t!==null&&typeof t.then=="function"&&NE(e,t),Vg!==null&&Vg(e,t)};var El=Bn(null);function uh(){var e=El.current;return e!==null?e:Te.pooledCache}function Xo(e,t){t===null?xe(El,El.current):xe(El,t.pool)}function Db(){var e=uh();return e===null?null:{parent:$e._currentValue,pool:e}}var $i=Error(w(460)),ch=Error(w(474)),Lu=Error(w(542)),uu={then:function(){}};function Gg(e){return e=e.status,e==="fulfilled"||e==="rejected"}function zb(e,t,n){switch(n=e[n],n===void 0?e.push(t):n!==t&&(t.then(fa,fa),t=n),t.status){case"fulfilled":return t.value;case"rejected":throw e=t.reason,$g(e),e;default:if(typeof t.status=="string")t.then(fa,fa);else{if(e=Te,e!==null&&100<e.shellSuspendCounter)throw Error(w(482));e=t,e.status="pending",e.then(function(a){if(t.status==="pending"){var l=t;l.status="fulfilled",l.value=a}},function(a){if(t.status==="pending"){var l=t;l.status="rejected",l.reason=a}})}switch(t.status){case"fulfilled":return t.value;case"rejected":throw e=t.reason,$g(e),e}throw kl=t,$i}}function vl(e){try{var t=e._init;return t(e._payload)}catch(n){throw n!==null&&typeof n=="object"&&typeof n.then=="function"?(kl=n,$i):n}}var kl=null;function Xg(){if(kl===null)throw Error(w(459));var e=kl;return kl=null,e}function $g(e){if(e===$i||e===Lu)throw Error(w(483))}var Oi=null,rs=0;function _o(e){var t=rs;return rs+=1,Oi===null&&(Oi=[]),zb(Oi,e,t)}function Cr(e,t){t=t.props.ref,e.ref=t!==void 0?t:null}function Co(e,t){throw t.$$typeof===gx?Error(w(525)):(e=Object.prototype.toString.call(t),Error(w(31,e==="[object Object]"?"object with keys {"+Object.keys(t).join(", ")+"}":e)))}function Mb(e){function t(h,m){if(e){var b=h.deletions;b===null?(h.deletions=[m],h.flags|=16):b.push(m)}}function n(h,m){if(!e)return null;for(;m!==null;)t(h,m),m=m.sibling;return null}function a(h){for(var m=new Map;h!==null;)h.key!==null?m.set(h.key,h):m.set(h.index,h),h=h.sibling;return m}function l(h,m){return h=ha(h,m),h.index=0,h.sibling=null,h}function i(h,m,b){return h.index=b,e?(b=h.alternate,b!==null?(b=b.index,b<m?(h.flags|=67108866,m):b):(h.flags|=67108866,m)):(h.flags|=1048576,m)}function r(h){return e&&h.alternate===null&&(h.flags|=67108866),h}function s(h,m,b,v){return m===null||m.tag!==6?(m=Of(b,h.mode,v),m.return=h,m):(m=l(m,b),m.return=h,m)}function o(h,m,b,v){var E=b.type;return E===di?c(h,m,b.props.children,v,b.key):m!==null&&(m.elementType===E||typeof E=="object"&&E!==null&&E.$$typeof===Ca&&vl(E)===m.type)?(m=l(m,b.props),Cr(m,b),m.return=h,m):(m=Go(b.type,b.key,b.props,null,h.mode,v),Cr(m,b),m.return=h,m)}function u(h,m,b,v){return m===null||m.tag!==4||m.stateNode.containerInfo!==b.containerInfo||m.stateNode.implementation!==b.implementation?(m=Nf(b,h.mode,v),m.return=h,m):(m=l(m,b.children||[]),m.return=h,m)}function c(h,m,b,v,E){return m===null||m.tag!==7?(m=xl(b,h.mode,v,E),m.return=h,m):(m=l(m,b),m.return=h,m)}function f(h,m,b){if(typeof m=="string"&&m!==""||typeof m=="number"||typeof m=="bigint")return m=Of(""+m,h.mode,b),m.return=h,m;if(typeof m=="object"&&m!==null){switch(m.$$typeof){case To:return b=Go(m.type,m.key,m.props,null,h.mode,b),Cr(b,m),b.return=h,b;case Ur:return m=Nf(m,h.mode,b),m.return=h,m;case Ca:return m=vl(m),f(h,m,b)}if(Hr(m)||Nr(m))return m=xl(m,h.mode,b,null),m.return=h,m;if(typeof m.then=="function")return f(h,_o(m),b);if(m.$$typeof===ca)return f(h,No(h,m),b);Co(h,m)}return null}function d(h,m,b,v){var E=m!==null?m.key:null;if(typeof b=="string"&&b!==""||typeof b=="number"||typeof b=="bigint")return E!==null?null:s(h,m,""+b,v);if(typeof b=="object"&&b!==null){switch(b.$$typeof){case To:return b.key===E?o(h,m,b,v):null;case Ur:return b.key===E?u(h,m,b,v):null;case Ca:return b=vl(b),d(h,m,b,v)}if(Hr(b)||Nr(b))return E!==null?null:c(h,m,b,v,null);if(typeof b.then=="function")return d(h,m,_o(b),v);if(b.$$typeof===ca)return d(h,m,No(h,b),v);Co(h,b)}return null}function p(h,m,b,v,E){if(typeof v=="string"&&v!==""||typeof v=="number"||typeof v=="bigint")return h=h.get(b)||null,s(m,h,""+v,E);if(typeof v=="object"&&v!==null){switch(v.$$typeof){case To:return h=h.get(v.key===null?b:v.key)||null,o(m,h,v,E);case Ur:return h=h.get(v.key===null?b:v.key)||null,u(m,h,v,E);case Ca:return v=vl(v),p(h,m,b,v,E)}if(Hr(v)||Nr(v))return h=h.get(b)||null,c(m,h,v,E,null);if(typeof v.then=="function")return p(h,m,b,_o(v),E);if(v.$$typeof===ca)return p(h,m,b,No(m,v),E);Co(m,v)}return null}function S(h,m,b,v){for(var E=null,N=null,R=m,C=m=0,L=null;R!==null&&C<b.length;C++){R.index>C?(L=R,R=null):L=R.sibling;var U=d(h,R,b[C],v);if(U===null){R===null&&(R=L);break}e&&R&&U.alternate===null&&t(h,R),m=i(U,m,C),N===null?E=U:N.sibling=U,N=U,R=L}if(C===b.length)return n(h,R),oe&&oa(h,C),E;if(R===null){for(;C<b.length;C++)R=f(h,b[C],v),R!==null&&(m=i(R,m,C),N===null?E=R:N.sibling=R,N=R);return oe&&oa(h,C),E}for(R=a(R);C<b.length;C++)L=p(R,h,C,b[C],v),L!==null&&(e&&L.alternate!==null&&R.delete(L.key===null?C:L.key),m=i(L,m,C),N===null?E=L:N.sibling=L,N=L);return e&&R.forEach(function(Se){return t(h,Se)}),oe&&oa(h,C),E}function y(h,m,b,v){if(b==null)throw Error(w(151));for(var E=null,N=null,R=m,C=m=0,L=null,U=b.next();R!==null&&!U.done;C++,U=b.next()){R.index>C?(L=R,R=null):L=R.sibling;var Se=d(h,R,U.value,v);if(Se===null){R===null&&(R=L);break}e&&R&&Se.alternate===null&&t(h,R),m=i(Se,m,C),N===null?E=Se:N.sibling=Se,N=Se,R=L}if(U.done)return n(h,R),oe&&oa(h,C),E;if(R===null){for(;!U.done;C++,U=b.next())U=f(h,U.value,v),U!==null&&(m=i(U,m,C),N===null?E=U:N.sibling=U,N=U);return oe&&oa(h,C),E}for(R=a(R);!U.done;C++,U=b.next())U=p(R,h,C,U.value,v),U!==null&&(e&&U.alternate!==null&&R.delete(U.key===null?C:U.key),m=i(U,m,C),N===null?E=U:N.sibling=U,N=U);return e&&R.forEach(function(X){return t(h,X)}),oe&&oa(h,C),E}function x(h,m,b,v){if(typeof b=="object"&&b!==null&&b.type===di&&b.key===null&&(b=b.props.children),typeof b=="object"&&b!==null){switch(b.$$typeof){case To:e:{for(var E=b.key;m!==null;){if(m.key===E){if(E=b.type,E===di){if(m.tag===7){n(h,m.sibling),v=l(m,b.props.children),v.return=h,h=v;break e}}else if(m.elementType===E||typeof E=="object"&&E!==null&&E.$$typeof===Ca&&vl(E)===m.type){n(h,m.sibling),v=l(m,b.props),Cr(v,b),v.return=h,h=v;break e}n(h,m);break}else t(h,m);m=m.sibling}b.type===di?(v=xl(b.props.children,h.mode,v,b.key),v.return=h,h=v):(v=Go(b.type,b.key,b.props,null,h.mode,v),Cr(v,b),v.return=h,h=v)}return r(h);case Ur:e:{for(E=b.key;m!==null;){if(m.key===E)if(m.tag===4&&m.stateNode.containerInfo===b.containerInfo&&m.stateNode.implementation===b.implementation){n(h,m.sibling),v=l(m,b.children||[]),v.return=h,h=v;break e}else{n(h,m);break}else t(h,m);m=m.sibling}v=Nf(b,h.mode,v),v.return=h,h=v}return r(h);case Ca:return b=vl(b),x(h,m,b,v)}if(Hr(b))return S(h,m,b,v);if(Nr(b)){if(E=Nr(b),typeof E!="function")throw Error(w(150));return b=E.call(b),y(h,m,b,v)}if(typeof b.then=="function")return x(h,m,_o(b),v);if(b.$$typeof===ca)return x(h,m,No(h,b),v);Co(h,b)}return typeof b=="string"&&b!==""||typeof b=="number"||typeof b=="bigint"?(b=""+b,m!==null&&m.tag===6?(n(h,m.sibling),v=l(m,b),v.return=h,h=v):(n(h,m),v=Of(b,h.mode,v),v.return=h,h=v),r(h)):n(h,m)}return function(h,m,b,v){try{rs=0;var E=x(h,m,b,v);return Oi=null,E}catch(R){if(R===$i||R===Lu)throw R;var N=Gt(29,R,null,h.mode);return N.lanes=v,N.return=h,N}}}var Ol=Mb(!0),Lb=Mb(!1),Da=!1;function fh(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function bd(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function Xa(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function $a(e,t,n){var a=e.updateQueue;if(a===null)return null;if(a=a.shared,(ce&2)!==0){var l=a.pending;return l===null?t.next=t:(t.next=l.next,l.next=t),a.pending=t,t=ru(e),wb(e,null,n),t}return Mu(e,a,t,n),ru(e)}function $r(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194048)!==0)){var a=t.lanes;a&=e.pendingLanes,n|=a,t.lanes=n,Wy(e,n)}}function Cf(e,t){var n=e.updateQueue,a=e.alternate;if(a!==null&&(a=a.updateQueue,n===a)){var l=null,i=null;if(n=n.firstBaseUpdate,n!==null){do{var r={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};i===null?l=i=r:i=i.next=r,n=n.next}while(n!==null);i===null?l=i=t:i=i.next=t}else l=i=t;n={baseState:a.baseState,firstBaseUpdate:l,lastBaseUpdate:i,shared:a.shared,callbacks:a.callbacks},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}var vd=!1;function Qr(){if(vd){var e=Ri;if(e!==null)throw e}}function Zr(e,t,n,a){vd=!1;var l=e.updateQueue;Da=!1;var i=l.firstBaseUpdate,r=l.lastBaseUpdate,s=l.shared.pending;if(s!==null){l.shared.pending=null;var o=s,u=o.next;o.next=null,r===null?i=u:r.next=u,r=o;var c=e.alternate;c!==null&&(c=c.updateQueue,s=c.lastBaseUpdate,s!==r&&(s===null?c.firstBaseUpdate=u:s.next=u,c.lastBaseUpdate=o))}if(i!==null){var f=l.baseState;r=0,c=u=o=null,s=i;do{var d=s.lane&-536870913,p=d!==s.lane;if(p?(le&d)===d:(a&d)===d){d!==0&&d===Mi&&(vd=!0),c!==null&&(c=c.next={lane:0,tag:s.tag,payload:s.payload,callback:null,next:null});e:{var S=e,y=s;d=t;var x=n;switch(y.tag){case 1:if(S=y.payload,typeof S=="function"){f=S.call(x,f,d);break e}f=S;break e;case 3:S.flags=S.flags&-65537|128;case 0:if(S=y.payload,d=typeof S=="function"?S.call(x,f,d):S,d==null)break e;f=Ne({},f,d);break e;case 2:Da=!0}}d=s.callback,d!==null&&(e.flags|=64,p&&(e.flags|=8192),p=l.callbacks,p===null?l.callbacks=[d]:p.push(d))}else p={lane:d,tag:s.tag,payload:s.payload,callback:s.callback,next:null},c===null?(u=c=p,o=f):c=c.next=p,r|=d;if(s=s.next,s===null){if(s=l.shared.pending,s===null)break;p=s,s=p.next,p.next=null,l.lastBaseUpdate=p,l.shared.pending=null}}while(!0);c===null&&(o=f),l.baseState=o,l.firstBaseUpdate=u,l.lastBaseUpdate=c,i===null&&(l.shared.lanes=0),el|=r,e.lanes=r,e.memoizedState=f}}function Ub(e,t){if(typeof e!="function")throw Error(w(191,e));e.call(t)}function Hb(e,t){var n=e.callbacks;if(n!==null)for(e.callbacks=null,e=0;e<n.length;e++)Ub(n[e],t)}var Li=Bn(null),cu=Bn(0);function Qg(e,t){e=Sa,xe(cu,e),xe(Li,t),Sa=e|t.baseLanes}function Sd(){xe(cu,Sa),xe(Li,Li.current)}function dh(){Sa=cu.current,at(Li),at(cu)}var Jt=Bn(null),un=null;function Ma(e){var t=e.alternate;xe(Ye,Ye.current&1),xe(Jt,e),un===null&&(t===null||Li.current!==null||t.memoizedState!==null)&&(un=e)}function Td(e){xe(Ye,Ye.current),xe(Jt,e),un===null&&(un=e)}function Bb(e){e.tag===22?(xe(Ye,Ye.current),xe(Jt,e),un===null&&(un=e)):La(e)}function La(){xe(Ye,Ye.current),xe(Jt,Jt.current)}function Vt(e){at(Jt),un===e&&(un=null),at(Ye)}var Ye=Bn(0);function fu(e){for(var t=e;t!==null;){if(t.tag===13){var n=t.memoizedState;if(n!==null&&(n=n.dehydrated,n===null||jd(n)||Yd(n)))return t}else if(t.tag===19&&(t.memoizedProps.revealOrder==="forwards"||t.memoizedProps.revealOrder==="backwards"||t.memoizedProps.revealOrder==="unstable_legacy-backwards"||t.memoizedProps.revealOrder==="together")){if((t.flags&128)!==0)return t}else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var ya=0,J=null,ve=null,Ge=null,du=!1,Ni=!1,Nl=!1,hu=0,ss=0,_i=null,CE=0;function Le(){throw Error(w(321))}function hh(e,t){if(t===null)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!Ft(e[n],t[n]))return!1;return!0}function ph(e,t,n,a,l,i){return ya=i,J=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,Q.H=e===null||e.memoizedState===null?m0:Ah,Nl=!1,i=n(a,l),Nl=!1,Ni&&(i=jb(t,n,a,l)),qb(e),i}function qb(e){Q.H=os;var t=ve!==null&&ve.next!==null;if(ya=0,Ge=ve=J=null,du=!1,ss=0,_i=null,t)throw Error(w(300));e===null||Qe||(e=e.dependencies,e!==null&&ou(e)&&(Qe=!0))}function jb(e,t,n,a){J=e;var l=0;do{if(Ni&&(_i=null),ss=0,Ni=!1,25<=l)throw Error(w(301));if(l+=1,Ge=ve=null,e.updateQueue!=null){var i=e.updateQueue;i.lastEffect=null,i.events=null,i.stores=null,i.memoCache!=null&&(i.memoCache.index=0)}Q.H=g0,i=t(n,a)}while(Ni);return i}function DE(){var e=Q.H,t=e.useState()[0];return t=typeof t.then=="function"?Ts(t):t,e=e.useState()[0],(ve!==null?ve.memoizedState:null)!==e&&(J.flags|=1024),t}function mh(){var e=hu!==0;return hu=0,e}function gh(e,t,n){t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~n}function yh(e){if(du){for(e=e.memoizedState;e!==null;){var t=e.queue;t!==null&&(t.pending=null),e=e.next}du=!1}ya=0,Ge=ve=J=null,Ni=!1,ss=hu=0,_i=null}function Tt(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return Ge===null?J.memoizedState=Ge=e:Ge=Ge.next=e,Ge}function Ve(){if(ve===null){var e=J.alternate;e=e!==null?e.memoizedState:null}else e=ve.next;var t=Ge===null?J.memoizedState:Ge.next;if(t!==null)Ge=t,ve=e;else{if(e===null)throw J.alternate===null?Error(w(467)):Error(w(310));ve=e,e={memoizedState:ve.memoizedState,baseState:ve.baseState,baseQueue:ve.baseQueue,queue:ve.queue,next:null},Ge===null?J.memoizedState=Ge=e:Ge=Ge.next=e}return Ge}function Uu(){return{lastEffect:null,events:null,stores:null,memoCache:null}}function Ts(e){var t=ss;return ss+=1,_i===null&&(_i=[]),e=zb(_i,e,t),t=J,(Ge===null?t.memoizedState:Ge.next)===null&&(t=t.alternate,Q.H=t===null||t.memoizedState===null?m0:Ah),e}function Hu(e){if(e!==null&&typeof e=="object"){if(typeof e.then=="function")return Ts(e);if(e.$$typeof===ca)return ut(e)}throw Error(w(438,String(e)))}function bh(e){var t=null,n=J.updateQueue;if(n!==null&&(t=n.memoCache),t==null){var a=J.alternate;a!==null&&(a=a.updateQueue,a!==null&&(a=a.memoCache,a!=null&&(t={data:a.data.map(function(l){return l.slice()}),index:0})))}if(t==null&&(t={data:[],index:0}),n===null&&(n=Uu(),J.updateQueue=n),n.memoCache=t,n=t.data[t.index],n===void 0)for(n=t.data[t.index]=Array(e),a=0;a<e;a++)n[a]=yx;return t.index++,n}function ba(e,t){return typeof t=="function"?t(e):t}function $o(e){var t=Ve();return vh(t,ve,e)}function vh(e,t,n){var a=e.queue;if(a===null)throw Error(w(311));a.lastRenderedReducer=n;var l=e.baseQueue,i=a.pending;if(i!==null){if(l!==null){var r=l.next;l.next=i.next,i.next=r}t.baseQueue=l=i,a.pending=null}if(i=e.baseState,l===null)e.memoizedState=i;else{t=l.next;var s=r=null,o=null,u=t,c=!1;do{var f=u.lane&-536870913;if(f!==u.lane?(le&f)===f:(ya&f)===f){var d=u.revertLane;if(d===0)o!==null&&(o=o.next={lane:0,revertLane:0,gesture:null,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null}),f===Mi&&(c=!0);else if((ya&d)===d){u=u.next,d===Mi&&(c=!0);continue}else f={lane:0,revertLane:u.revertLane,gesture:null,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null},o===null?(s=o=f,r=i):o=o.next=f,J.lanes|=d,el|=d;f=u.action,Nl&&n(i,f),i=u.hasEagerState?u.eagerState:n(i,f)}else d={lane:f,revertLane:u.revertLane,gesture:u.gesture,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null},o===null?(s=o=d,r=i):o=o.next=d,J.lanes|=f,el|=f;u=u.next}while(u!==null&&u!==t);if(o===null?r=i:o.next=s,!Ft(i,e.memoizedState)&&(Qe=!0,c&&(n=Ri,n!==null)))throw n;e.memoizedState=i,e.baseState=r,e.baseQueue=o,a.lastRenderedState=i}return l===null&&(a.lanes=0),[e.memoizedState,a.dispatch]}function Df(e){var t=Ve(),n=t.queue;if(n===null)throw Error(w(311));n.lastRenderedReducer=e;var a=n.dispatch,l=n.pending,i=t.memoizedState;if(l!==null){n.pending=null;var r=l=l.next;do i=e(i,r.action),r=r.next;while(r!==l);Ft(i,t.memoizedState)||(Qe=!0),t.memoizedState=i,t.baseQueue===null&&(t.baseState=i),n.lastRenderedState=i}return[i,a]}function Yb(e,t,n){var a=J,l=Ve(),i=oe;if(i){if(n===void 0)throw Error(w(407));n=n()}else n=t();var r=!Ft((ve||l).memoizedState,n);if(r&&(l.memoizedState=n,Qe=!0),l=l.queue,Sh(Xb.bind(null,a,l,e),[e]),l.getSnapshot!==t||r||Ge!==null&&Ge.memoizedState.tag&1){if(a.flags|=2048,Ui(9,{destroy:void 0},Gb.bind(null,a,l,n,t),null),Te===null)throw Error(w(349));i||(ya&127)!==0||Vb(a,t,n)}return n}function Vb(e,t,n){e.flags|=16384,e={getSnapshot:t,value:n},t=J.updateQueue,t===null?(t=Uu(),J.updateQueue=t,t.stores=[e]):(n=t.stores,n===null?t.stores=[e]:n.push(e))}function Gb(e,t,n,a){t.value=n,t.getSnapshot=a,$b(t)&&Qb(e)}function Xb(e,t,n){return n(function(){$b(t)&&Qb(e)})}function $b(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!Ft(e,n)}catch(a){return!0}}function Qb(e){var t=Ml(e,2);t!==null&&Nt(t,e,2)}function xd(e){var t=Tt();if(typeof e=="function"){var n=e;if(e=n(),Nl){Ha(!0);try{n()}finally{Ha(!1)}}}return t.memoizedState=t.baseState=e,t.queue={pending:null,lanes:0,dispatch:null,lastRenderedReducer:ba,lastRenderedState:e},t}function Zb(e,t,n,a){return e.baseState=n,vh(e,ve,typeof a=="function"?a:ba)}function zE(e,t,n,a,l){if(qu(e))throw Error(w(485));if(e=t.action,e!==null){var i={payload:l,action:e,next:null,isTransition:!0,status:"pending",value:null,reason:null,listeners:[],then:function(r){i.listeners.push(r)}};Q.T!==null?n(!0):i.isTransition=!1,a(i),n=t.pending,n===null?(i.next=t.pending=i,Kb(t,i)):(i.next=n.next,t.pending=n.next=i)}}function Kb(e,t){var n=t.action,a=t.payload,l=e.state;if(t.isTransition){var i=Q.T,r={};Q.T=r;try{var s=n(l,a),o=Q.S;o!==null&&o(r,s),Zg(e,t,s)}catch(u){Ed(e,t,u)}finally{i!==null&&r.types!==null&&(i.types=r.types),Q.T=i}}else try{i=n(l,a),Zg(e,t,i)}catch(u){Ed(e,t,u)}}function Zg(e,t,n){n!==null&&typeof n=="object"&&typeof n.then=="function"?n.then(function(a){Kg(e,t,a)},function(a){return Ed(e,t,a)}):Kg(e,t,n)}function Kg(e,t,n){t.status="fulfilled",t.value=n,Fb(t),e.state=n,t=e.pending,t!==null&&(n=t.next,n===t?e.pending=null:(n=n.next,t.next=n,Kb(e,n)))}function Ed(e,t,n){var a=e.pending;if(e.pending=null,a!==null){a=a.next;do t.status="rejected",t.reason=n,Fb(t),t=t.next;while(t!==a)}e.action=null}function Fb(e){e=e.listeners;for(var t=0;t<e.length;t++)(0,e[t])()}function Jb(e,t){return t}function Fg(e,t){if(oe){var n=Te.formState;if(n!==null){e:{var a=J;if(oe){if(Oe){t:{for(var l=Oe,i=on;l.nodeType!==8;){if(!i){l=null;break t}if(l=cn(l.nextSibling),l===null){l=null;break t}}i=l.data,l=i==="F!"||i==="F"?l:null}if(l){Oe=cn(l.nextSibling),a=l.data==="F!";break e}}Pa(a)}a=!1}a&&(t=n[0])}}return n=Tt(),n.memoizedState=n.baseState=t,a={pending:null,lanes:0,dispatch:null,lastRenderedReducer:Jb,lastRenderedState:t},n.queue=a,n=d0.bind(null,J,a),a.dispatch=n,a=xd(!1),i=kh.bind(null,J,!1,a.queue),a=Tt(),l={state:t,dispatch:null,action:e,pending:null},a.queue=l,n=zE.bind(null,J,l,i,n),l.dispatch=n,a.memoizedState=e,[t,n,!1]}function Jg(e){var t=Ve();return Ib(t,ve,e)}function Ib(e,t,n){if(t=vh(e,t,Jb)[0],e=$o(ba)[0],typeof t=="object"&&t!==null&&typeof t.then=="function")try{var a=Ts(t)}catch(r){throw r===$i?Lu:r}else a=t;t=Ve();var l=t.queue,i=l.dispatch;return n!==t.memoizedState&&(J.flags|=2048,Ui(9,{destroy:void 0},ME.bind(null,l,n),null)),[a,i,e]}function ME(e,t){e.action=t}function Ig(e){var t=Ve(),n=ve;if(n!==null)return Ib(t,n,e);Ve(),t=t.memoizedState,n=Ve();var a=n.queue.dispatch;return n.memoizedState=e,[t,a,!1]}function Ui(e,t,n,a){return e={tag:e,create:n,deps:a,inst:t,next:null},t=J.updateQueue,t===null&&(t=Uu(),J.updateQueue=t),n=t.lastEffect,n===null?t.lastEffect=e.next=e:(a=n.next,n.next=e,e.next=a,t.lastEffect=e),e}function Pb(){return Ve().memoizedState}function Qo(e,t,n,a){var l=Tt();J.flags|=e,l.memoizedState=Ui(1|t,{destroy:void 0},n,a===void 0?null:a)}function Bu(e,t,n,a){var l=Ve();a=a===void 0?null:a;var i=l.memoizedState.inst;ve!==null&&a!==null&&hh(a,ve.memoizedState.deps)?l.memoizedState=Ui(t,i,n,a):(J.flags|=e,l.memoizedState=Ui(1|t,i,n,a))}function Pg(e,t){Qo(8390656,8,e,t)}function Sh(e,t){Bu(2048,8,e,t)}function LE(e){J.flags|=4;var t=J.updateQueue;if(t===null)t=Uu(),J.updateQueue=t,t.events=[e];else{var n=t.events;n===null?t.events=[e]:n.push(e)}}function Wb(e){var t=Ve().memoizedState;return LE({ref:t,nextImpl:e}),function(){if((ce&2)!==0)throw Error(w(440));return t.impl.apply(void 0,arguments)}}function e0(e,t){return Bu(4,2,e,t)}function t0(e,t){return Bu(4,4,e,t)}function n0(e,t){if(typeof t=="function"){e=e();var n=t(e);return function(){typeof n=="function"?n():t(null)}}if(t!=null)return e=e(),t.current=e,function(){t.current=null}}function a0(e,t,n){n=n!=null?n.concat([e]):null,Bu(4,4,n0.bind(null,t,e),n)}function Th(){}function l0(e,t){var n=Ve();t=t===void 0?null:t;var a=n.memoizedState;return t!==null&&hh(t,a[1])?a[0]:(n.memoizedState=[e,t],e)}function i0(e,t){var n=Ve();t=t===void 0?null:t;var a=n.memoizedState;if(t!==null&&hh(t,a[1]))return a[0];if(a=e(),Nl){Ha(!0);try{e()}finally{Ha(!1)}}return n.memoizedState=[a,t],a}function xh(e,t,n){return n===void 0||(ya&1073741824)!==0&&(le&261930)===0?e.memoizedState=t:(e.memoizedState=n,e=Z0(),J.lanes|=e,el|=e,n)}function r0(e,t,n,a){return Ft(n,t)?n:Li.current!==null?(e=xh(e,n,a),Ft(e,t)||(Qe=!0),e):(ya&42)===0||(ya&1073741824)!==0&&(le&261930)===0?(Qe=!0,e.memoizedState=n):(e=Z0(),J.lanes|=e,el|=e,t)}function s0(e,t,n,a,l){var i=fe.p;fe.p=i!==0&&8>i?i:8;var r=Q.T,s={};Q.T=s,kh(e,!1,t,n);try{var o=l(),u=Q.S;if(u!==null&&u(s,o),o!==null&&typeof o=="object"&&typeof o.then=="function"){var c=_E(o,a);Kr(e,t,c,Kt(e))}else Kr(e,t,a,Kt(e))}catch(f){Kr(e,t,{then:function(){},status:"rejected",reason:f},Kt())}finally{fe.p=i,r!==null&&s.types!==null&&(r.types=s.types),Q.T=r}}function UE(){}function kd(e,t,n,a){if(e.tag!==5)throw Error(w(476));var l=o0(e).queue;s0(e,l,t,Tl,n===null?UE:function(){return u0(e),n(a)})}function o0(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:Tl,baseState:Tl,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:ba,lastRenderedState:Tl},next:null};var n={};return t.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:ba,lastRenderedState:n},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function u0(e){var t=o0(e);t.next===null&&(t=e.alternate.memoizedState),Kr(e,t.next.queue,{},Kt())}function Eh(){return ut(fs)}function c0(){return Ve().memoizedState}function f0(){return Ve().memoizedState}function HE(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var n=Kt();e=Xa(n);var a=$a(t,e,n);a!==null&&(Nt(a,t,n),$r(a,t,n)),t={cache:oh()},e.payload=t;return}t=t.return}}function BE(e,t,n){var a=Kt();n={lane:a,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},qu(e)?h0(t,n):(n=lh(e,t,n,a),n!==null&&(Nt(n,e,a),p0(n,t,a)))}function d0(e,t,n){var a=Kt();Kr(e,t,n,a)}function Kr(e,t,n,a){var l={lane:a,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null};if(qu(e))h0(t,l);else{var i=e.alternate;if(e.lanes===0&&(i===null||i.lanes===0)&&(i=t.lastRenderedReducer,i!==null))try{var r=t.lastRenderedState,s=i(r,n);if(l.hasEagerState=!0,l.eagerState=s,Ft(s,r))return Mu(e,t,l,0),Te===null&&zu(),!1}catch(o){}if(n=lh(e,t,l,a),n!==null)return Nt(n,e,a),p0(n,t,a),!0}return!1}function kh(e,t,n,a){if(a={lane:2,revertLane:zh(),gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null},qu(e)){if(t)throw Error(w(479))}else t=lh(e,n,a,2),t!==null&&Nt(t,e,2)}function qu(e){var t=e.alternate;return e===J||t!==null&&t===J}function h0(e,t){Ni=du=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function p0(e,t,n){if((n&4194048)!==0){var a=t.lanes;a&=e.pendingLanes,n|=a,t.lanes=n,Wy(e,n)}}var os={readContext:ut,use:Hu,useCallback:Le,useContext:Le,useEffect:Le,useImperativeHandle:Le,useLayoutEffect:Le,useInsertionEffect:Le,useMemo:Le,useReducer:Le,useRef:Le,useState:Le,useDebugValue:Le,useDeferredValue:Le,useTransition:Le,useSyncExternalStore:Le,useId:Le,useHostTransitionStatus:Le,useFormState:Le,useActionState:Le,useOptimistic:Le,useMemoCache:Le,useCacheRefresh:Le};os.useEffectEvent=Le;var m0={readContext:ut,use:Hu,useCallback:function(e,t){return Tt().memoizedState=[e,t===void 0?null:t],e},useContext:ut,useEffect:Pg,useImperativeHandle:function(e,t,n){n=n!=null?n.concat([e]):null,Qo(4194308,4,n0.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Qo(4194308,4,e,t)},useInsertionEffect:function(e,t){Qo(4,2,e,t)},useMemo:function(e,t){var n=Tt();t=t===void 0?null:t;var a=e();if(Nl){Ha(!0);try{e()}finally{Ha(!1)}}return n.memoizedState=[a,t],a},useReducer:function(e,t,n){var a=Tt();if(n!==void 0){var l=n(t);if(Nl){Ha(!0);try{n(t)}finally{Ha(!1)}}}else l=t;return a.memoizedState=a.baseState=l,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:l},a.queue=e,e=e.dispatch=BE.bind(null,J,e),[a.memoizedState,e]},useRef:function(e){var t=Tt();return e={current:e},t.memoizedState=e},useState:function(e){e=xd(e);var t=e.queue,n=d0.bind(null,J,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:Th,useDeferredValue:function(e,t){var n=Tt();return xh(n,e,t)},useTransition:function(){var e=xd(!1);return e=s0.bind(null,J,e.queue,!0,!1),Tt().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var a=J,l=Tt();if(oe){if(n===void 0)throw Error(w(407));n=n()}else{if(n=t(),Te===null)throw Error(w(349));(le&127)!==0||Vb(a,t,n)}l.memoizedState=n;var i={value:n,getSnapshot:t};return l.queue=i,Pg(Xb.bind(null,a,i,e),[e]),a.flags|=2048,Ui(9,{destroy:void 0},Gb.bind(null,a,i,n,t),null),n},useId:function(){var e=Tt(),t=Te.identifierPrefix;if(oe){var n=Ln,a=Mn;n=(a&~(1<<32-Zt(a)-1)).toString(32)+n,t="_"+t+"R_"+n,n=hu++,0<n&&(t+="H"+n.toString(32)),t+="_"}else n=CE++,t="_"+t+"r_"+n.toString(32)+"_";return e.memoizedState=t},useHostTransitionStatus:Eh,useFormState:Fg,useActionState:Fg,useOptimistic:function(e){var t=Tt();t.memoizedState=t.baseState=e;var n={pending:null,lanes:0,dispatch:null,lastRenderedReducer:null,lastRenderedState:null};return t.queue=n,t=kh.bind(null,J,!0,n),n.dispatch=t,[e,t]},useMemoCache:bh,useCacheRefresh:function(){return Tt().memoizedState=HE.bind(null,J)},useEffectEvent:function(e){var t=Tt(),n={impl:e};return t.memoizedState=n,function(){if((ce&2)!==0)throw Error(w(440));return n.impl.apply(void 0,arguments)}}},Ah={readContext:ut,use:Hu,useCallback:l0,useContext:ut,useEffect:Sh,useImperativeHandle:a0,useInsertionEffect:e0,useLayoutEffect:t0,useMemo:i0,useReducer:$o,useRef:Pb,useState:function(){return $o(ba)},useDebugValue:Th,useDeferredValue:function(e,t){var n=Ve();return r0(n,ve.memoizedState,e,t)},useTransition:function(){var e=$o(ba)[0],t=Ve().memoizedState;return[typeof e=="boolean"?e:Ts(e),t]},useSyncExternalStore:Yb,useId:c0,useHostTransitionStatus:Eh,useFormState:Jg,useActionState:Jg,useOptimistic:function(e,t){var n=Ve();return Zb(n,ve,e,t)},useMemoCache:bh,useCacheRefresh:f0};Ah.useEffectEvent=Wb;var g0={readContext:ut,use:Hu,useCallback:l0,useContext:ut,useEffect:Sh,useImperativeHandle:a0,useInsertionEffect:e0,useLayoutEffect:t0,useMemo:i0,useReducer:Df,useRef:Pb,useState:function(){return Df(ba)},useDebugValue:Th,useDeferredValue:function(e,t){var n=Ve();return ve===null?xh(n,e,t):r0(n,ve.memoizedState,e,t)},useTransition:function(){var e=Df(ba)[0],t=Ve().memoizedState;return[typeof e=="boolean"?e:Ts(e),t]},useSyncExternalStore:Yb,useId:c0,useHostTransitionStatus:Eh,useFormState:Ig,useActionState:Ig,useOptimistic:function(e,t){var n=Ve();return ve!==null?Zb(n,ve,e,t):(n.baseState=e,[e,n.queue.dispatch])},useMemoCache:bh,useCacheRefresh:f0};g0.useEffectEvent=Wb;function zf(e,t,n,a){t=e.memoizedState,n=n(a,t),n=n==null?t:Ne({},t,n),e.memoizedState=n,e.lanes===0&&(e.updateQueue.baseState=n)}var Ad={enqueueSetState:function(e,t,n){e=e._reactInternals;var a=Kt(),l=Xa(a);l.payload=t,n!=null&&(l.callback=n),t=$a(e,l,a),t!==null&&(Nt(t,e,a),$r(t,e,a))},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var a=Kt(),l=Xa(a);l.tag=1,l.payload=t,n!=null&&(l.callback=n),t=$a(e,l,a),t!==null&&(Nt(t,e,a),$r(t,e,a))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=Kt(),a=Xa(n);a.tag=2,t!=null&&(a.callback=t),t=$a(e,a,n),t!==null&&(Nt(t,e,n),$r(t,e,n))}};function Wg(e,t,n,a,l,i,r){return e=e.stateNode,typeof e.shouldComponentUpdate=="function"?e.shouldComponentUpdate(a,i,r):t.prototype&&t.prototype.isPureReactComponent?!as(n,a)||!as(l,i):!0}function ey(e,t,n,a){e=t.state,typeof t.componentWillReceiveProps=="function"&&t.componentWillReceiveProps(n,a),typeof t.UNSAFE_componentWillReceiveProps=="function"&&t.UNSAFE_componentWillReceiveProps(n,a),t.state!==e&&Ad.enqueueReplaceState(t,t.state,null)}function _l(e,t){var n=t;if("ref"in t){n={};for(var a in t)a!=="ref"&&(n[a]=t[a])}if(e=e.defaultProps){n===t&&(n=Ne({},n));for(var l in e)n[l]===void 0&&(n[l]=e[l])}return n}function y0(e){iu(e)}function b0(e){console.error(e)}function v0(e){iu(e)}function pu(e,t){try{var n=e.onUncaughtError;n(t.value,{componentStack:t.stack})}catch(a){setTimeout(function(){throw a})}}function ty(e,t,n){try{var a=e.onCaughtError;a(n.value,{componentStack:n.stack,errorBoundary:t.tag===1?t.stateNode:null})}catch(l){setTimeout(function(){throw l})}}function wd(e,t,n){return n=Xa(n),n.tag=3,n.payload={element:null},n.callback=function(){pu(e,t)},n}function S0(e){return e=Xa(e),e.tag=3,e}function T0(e,t,n,a){var l=n.type.getDerivedStateFromError;if(typeof l=="function"){var i=a.value;e.payload=function(){return l(i)},e.callback=function(){ty(t,n,a)}}var r=n.stateNode;r!==null&&typeof r.componentDidCatch=="function"&&(e.callback=function(){ty(t,n,a),typeof l!="function"&&(Qa===null?Qa=new Set([this]):Qa.add(this));var s=a.stack;this.componentDidCatch(a.value,{componentStack:s!==null?s:""})})}function qE(e,t,n,a,l){if(n.flags|=32768,a!==null&&typeof a=="object"&&typeof a.then=="function"){if(t=n.alternate,t!==null&&Xi(t,n,l,!0),n=Jt.current,n!==null){switch(n.tag){case 31:case 13:return un===null?vu():n.alternate===null&&Ue===0&&(Ue=3),n.flags&=-257,n.flags|=65536,n.lanes=l,a===uu?n.flags|=16384:(t=n.updateQueue,t===null?n.updateQueue=new Set([a]):t.add(a),Xf(e,a,l)),!1;case 22:return n.flags|=65536,a===uu?n.flags|=16384:(t=n.updateQueue,t===null?(t={transitions:null,markerInstances:null,retryQueue:new Set([a])},n.updateQueue=t):(n=t.retryQueue,n===null?t.retryQueue=new Set([a]):n.add(a)),Xf(e,a,l)),!1}throw Error(w(435,n.tag))}return Xf(e,a,l),vu(),!1}if(oe)return t=Jt.current,t!==null?((t.flags&65536)===0&&(t.flags|=256),t.flags|=65536,t.lanes=l,a!==hd&&(e=Error(w(422),{cause:a}),is(sn(e,n)))):(a!==hd&&(t=Error(w(423),{cause:a}),is(sn(t,n))),e=e.current.alternate,e.flags|=65536,l&=-l,e.lanes|=l,a=sn(a,n),l=wd(e.stateNode,a,l),Cf(e,l),Ue!==4&&(Ue=2)),!1;var i=Error(w(520),{cause:a});if(i=sn(i,n),Ir===null?Ir=[i]:Ir.push(i),Ue!==4&&(Ue=2),t===null)return!0;a=sn(a,n),n=t;do{switch(n.tag){case 3:return n.flags|=65536,e=l&-l,n.lanes|=e,e=wd(n.stateNode,a,e),Cf(n,e),!1;case 1:if(t=n.type,i=n.stateNode,(n.flags&128)===0&&(typeof t.getDerivedStateFromError=="function"||i!==null&&typeof i.componentDidCatch=="function"&&(Qa===null||!Qa.has(i))))return n.flags|=65536,l&=-l,n.lanes|=l,l=S0(l),T0(l,e,n,a),Cf(n,l),!1}n=n.return}while(n!==null);return!1}var wh=Error(w(461)),Qe=!1;function rt(e,t,n,a){t.child=e===null?Lb(t,null,n,a):Ol(t,e.child,n,a)}function ny(e,t,n,a,l){n=n.render;var i=t.ref;if("ref"in a){var r={};for(var s in a)s!=="ref"&&(r[s]=a[s])}else r=a;return Rl(t),a=ph(e,t,n,r,i,l),s=mh(),e!==null&&!Qe?(gh(e,t,l),va(e,t,l)):(oe&&s&&rh(t),t.flags|=1,rt(e,t,a,l),t.child)}function ay(e,t,n,a,l){if(e===null){var i=n.type;return typeof i=="function"&&!ih(i)&&i.defaultProps===void 0&&n.compare===null?(t.tag=15,t.type=i,x0(e,t,i,a,l)):(e=Go(n.type,null,a,t,t.mode,l),e.ref=t.ref,e.return=t,t.child=e)}if(i=e.child,!Rh(e,l)){var r=i.memoizedProps;if(n=n.compare,n=n!==null?n:as,n(r,a)&&e.ref===t.ref)return va(e,t,l)}return t.flags|=1,e=ha(i,a),e.ref=t.ref,e.return=t,t.child=e}function x0(e,t,n,a,l){if(e!==null){var i=e.memoizedProps;if(as(i,a)&&e.ref===t.ref)if(Qe=!1,t.pendingProps=a=i,Rh(e,l))(e.flags&131072)!==0&&(Qe=!0);else return t.lanes=e.lanes,va(e,t,l)}return Rd(e,t,n,a,l)}function E0(e,t,n,a){var l=a.children,i=e!==null?e.memoizedState:null;if(e===null&&t.stateNode===null&&(t.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null}),a.mode==="hidden"){if((t.flags&128)!==0){if(i=i!==null?i.baseLanes|n:n,e!==null){for(a=t.child=e.child,l=0;a!==null;)l=l|a.lanes|a.childLanes,a=a.sibling;a=l&~i}else a=0,t.child=null;return ly(e,t,i,n,a)}if((n&536870912)!==0)t.memoizedState={baseLanes:0,cachePool:null},e!==null&&Xo(t,i!==null?i.cachePool:null),i!==null?Qg(t,i):Sd(),Bb(t);else return a=t.lanes=536870912,ly(e,t,i!==null?i.baseLanes|n:n,n,a)}else i!==null?(Xo(t,i.cachePool),Qg(t,i),La(t),t.memoizedState=null):(e!==null&&Xo(t,null),Sd(),La(t));return rt(e,t,l,n),t.child}function qr(e,t){return e!==null&&e.tag===22||t.stateNode!==null||(t.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null}),t.sibling}function ly(e,t,n,a,l){var i=uh();return i=i===null?null:{parent:$e._currentValue,pool:i},t.memoizedState={baseLanes:n,cachePool:i},e!==null&&Xo(t,null),Sd(),Bb(t),e!==null&&Xi(e,t,a,!0),t.childLanes=l,null}function Zo(e,t){return t=mu({mode:t.mode,children:t.children},e.mode),t.ref=e.ref,e.child=t,t.return=e,t}function iy(e,t,n){return Ol(t,e.child,null,n),e=Zo(t,t.pendingProps),e.flags|=2,Vt(t),t.memoizedState=null,e}function jE(e,t,n){var a=t.pendingProps,l=(t.flags&128)!==0;if(t.flags&=-129,e===null){if(oe){if(a.mode==="hidden")return e=Zo(t,a),t.lanes=536870912,qr(null,e);if(Td(t),(e=Oe)?(e=mv(e,on),e=e!==null&&e.data==="&"?e:null,e!==null&&(t.memoizedState={dehydrated:e,treeContext:Ia!==null?{id:Mn,overflow:Ln}:null,retryLane:536870912,hydrationErrors:null},n=Ob(e),n.return=t,t.child=n,ot=t,Oe=null)):e=null,e===null)throw Pa(t);return t.lanes=536870912,null}return Zo(t,a)}var i=e.memoizedState;if(i!==null){var r=i.dehydrated;if(Td(t),l)if(t.flags&256)t.flags&=-257,t=iy(e,t,n);else if(t.memoizedState!==null)t.child=e.child,t.flags|=128,t=null;else throw Error(w(558));else if(Qe||Xi(e,t,n,!1),l=(n&e.childLanes)!==0,Qe||l){if(a=Te,a!==null&&(r=eb(a,n),r!==0&&r!==i.retryLane))throw i.retryLane=r,Ml(e,r),Nt(a,e,r),wh;vu(),t=iy(e,t,n)}else e=i.treeContext,Oe=cn(r.nextSibling),ot=t,oe=!0,Ga=null,on=!1,e!==null&&_b(t,e),t=Zo(t,a),t.flags|=4096;return t}return e=ha(e.child,{mode:a.mode,children:a.children}),e.ref=t.ref,t.child=e,e.return=t,e}function Ko(e,t){var n=t.ref;if(n===null)e!==null&&e.ref!==null&&(t.flags|=4194816);else{if(typeof n!="function"&&typeof n!="object")throw Error(w(284));(e===null||e.ref!==n)&&(t.flags|=4194816)}}function Rd(e,t,n,a,l){return Rl(t),n=ph(e,t,n,a,void 0,l),a=mh(),e!==null&&!Qe?(gh(e,t,l),va(e,t,l)):(oe&&a&&rh(t),t.flags|=1,rt(e,t,n,l),t.child)}function ry(e,t,n,a,l,i){return Rl(t),t.updateQueue=null,n=jb(t,a,n,l),qb(e),a=mh(),e!==null&&!Qe?(gh(e,t,i),va(e,t,i)):(oe&&a&&rh(t),t.flags|=1,rt(e,t,n,i),t.child)}function sy(e,t,n,a,l){if(Rl(t),t.stateNode===null){var i=Si,r=n.contextType;typeof r=="object"&&r!==null&&(i=ut(r)),i=new n(a,i),t.memoizedState=i.state!==null&&i.state!==void 0?i.state:null,i.updater=Ad,t.stateNode=i,i._reactInternals=t,i=t.stateNode,i.props=a,i.state=t.memoizedState,i.refs={},fh(t),r=n.contextType,i.context=typeof r=="object"&&r!==null?ut(r):Si,i.state=t.memoizedState,r=n.getDerivedStateFromProps,typeof r=="function"&&(zf(t,n,r,a),i.state=t.memoizedState),typeof n.getDerivedStateFromProps=="function"||typeof i.getSnapshotBeforeUpdate=="function"||typeof i.UNSAFE_componentWillMount!="function"&&typeof i.componentWillMount!="function"||(r=i.state,typeof i.componentWillMount=="function"&&i.componentWillMount(),typeof i.UNSAFE_componentWillMount=="function"&&i.UNSAFE_componentWillMount(),r!==i.state&&Ad.enqueueReplaceState(i,i.state,null),Zr(t,a,i,l),Qr(),i.state=t.memoizedState),typeof i.componentDidMount=="function"&&(t.flags|=4194308),a=!0}else if(e===null){i=t.stateNode;var s=t.memoizedProps,o=_l(n,s);i.props=o;var u=i.context,c=n.contextType;r=Si,typeof c=="object"&&c!==null&&(r=ut(c));var f=n.getDerivedStateFromProps;c=typeof f=="function"||typeof i.getSnapshotBeforeUpdate=="function",s=t.pendingProps!==s,c||typeof i.UNSAFE_componentWillReceiveProps!="function"&&typeof i.componentWillReceiveProps!="function"||(s||u!==r)&&ey(t,i,a,r),Da=!1;var d=t.memoizedState;i.state=d,Zr(t,a,i,l),Qr(),u=t.memoizedState,s||d!==u||Da?(typeof f=="function"&&(zf(t,n,f,a),u=t.memoizedState),(o=Da||Wg(t,n,o,a,d,u,r))?(c||typeof i.UNSAFE_componentWillMount!="function"&&typeof i.componentWillMount!="function"||(typeof i.componentWillMount=="function"&&i.componentWillMount(),typeof i.UNSAFE_componentWillMount=="function"&&i.UNSAFE_componentWillMount()),typeof i.componentDidMount=="function"&&(t.flags|=4194308)):(typeof i.componentDidMount=="function"&&(t.flags|=4194308),t.memoizedProps=a,t.memoizedState=u),i.props=a,i.state=u,i.context=r,a=o):(typeof i.componentDidMount=="function"&&(t.flags|=4194308),a=!1)}else{i=t.stateNode,bd(e,t),r=t.memoizedProps,c=_l(n,r),i.props=c,f=t.pendingProps,d=i.context,u=n.contextType,o=Si,typeof u=="object"&&u!==null&&(o=ut(u)),s=n.getDerivedStateFromProps,(u=typeof s=="function"||typeof i.getSnapshotBeforeUpdate=="function")||typeof i.UNSAFE_componentWillReceiveProps!="function"&&typeof i.componentWillReceiveProps!="function"||(r!==f||d!==o)&&ey(t,i,a,o),Da=!1,d=t.memoizedState,i.state=d,Zr(t,a,i,l),Qr();var p=t.memoizedState;r!==f||d!==p||Da||e!==null&&e.dependencies!==null&&ou(e.dependencies)?(typeof s=="function"&&(zf(t,n,s,a),p=t.memoizedState),(c=Da||Wg(t,n,c,a,d,p,o)||e!==null&&e.dependencies!==null&&ou(e.dependencies))?(u||typeof i.UNSAFE_componentWillUpdate!="function"&&typeof i.componentWillUpdate!="function"||(typeof i.componentWillUpdate=="function"&&i.componentWillUpdate(a,p,o),typeof i.UNSAFE_componentWillUpdate=="function"&&i.UNSAFE_componentWillUpdate(a,p,o)),typeof i.componentDidUpdate=="function"&&(t.flags|=4),typeof i.getSnapshotBeforeUpdate=="function"&&(t.flags|=1024)):(typeof i.componentDidUpdate!="function"||r===e.memoizedProps&&d===e.memoizedState||(t.flags|=4),typeof i.getSnapshotBeforeUpdate!="function"||r===e.memoizedProps&&d===e.memoizedState||(t.flags|=1024),t.memoizedProps=a,t.memoizedState=p),i.props=a,i.state=p,i.context=o,a=c):(typeof i.componentDidUpdate!="function"||r===e.memoizedProps&&d===e.memoizedState||(t.flags|=4),typeof i.getSnapshotBeforeUpdate!="function"||r===e.memoizedProps&&d===e.memoizedState||(t.flags|=1024),a=!1)}return i=a,Ko(e,t),a=(t.flags&128)!==0,i||a?(i=t.stateNode,n=a&&typeof n.getDerivedStateFromError!="function"?null:i.render(),t.flags|=1,e!==null&&a?(t.child=Ol(t,e.child,null,l),t.child=Ol(t,null,n,l)):rt(e,t,n,l),t.memoizedState=i.state,e=t.child):e=va(e,t,l),e}function oy(e,t,n,a){return wl(),t.flags|=256,rt(e,t,n,a),t.child}var Mf={dehydrated:null,treeContext:null,retryLane:0,hydrationErrors:null};function Lf(e){return{baseLanes:e,cachePool:Db()}}function Uf(e,t,n){return e=e!==null?e.childLanes&~n:0,t&&(e|=Xt),e}function k0(e,t,n){var a=t.pendingProps,l=!1,i=(t.flags&128)!==0,r;if((r=i)||(r=e!==null&&e.memoizedState===null?!1:(Ye.current&2)!==0),r&&(l=!0,t.flags&=-129),r=(t.flags&32)!==0,t.flags&=-33,e===null){if(oe){if(l?Ma(t):La(t),(e=Oe)?(e=mv(e,on),e=e!==null&&e.data!=="&"?e:null,e!==null&&(t.memoizedState={dehydrated:e,treeContext:Ia!==null?{id:Mn,overflow:Ln}:null,retryLane:536870912,hydrationErrors:null},n=Ob(e),n.return=t,t.child=n,ot=t,Oe=null)):e=null,e===null)throw Pa(t);return Yd(e)?t.lanes=32:t.lanes=536870912,null}var s=a.children;return a=a.fallback,l?(La(t),l=t.mode,s=mu({mode:"hidden",children:s},l),a=xl(a,l,n,null),s.return=t,a.return=t,s.sibling=a,t.child=s,a=t.child,a.memoizedState=Lf(n),a.childLanes=Uf(e,r,n),t.memoizedState=Mf,qr(null,a)):(Ma(t),Od(t,s))}var o=e.memoizedState;if(o!==null&&(s=o.dehydrated,s!==null)){if(i)t.flags&256?(Ma(t),t.flags&=-257,t=Hf(e,t,n)):t.memoizedState!==null?(La(t),t.child=e.child,t.flags|=128,t=null):(La(t),s=a.fallback,l=t.mode,a=mu({mode:"visible",children:a.children},l),s=xl(s,l,n,null),s.flags|=2,a.return=t,s.return=t,a.sibling=s,t.child=a,Ol(t,e.child,null,n),a=t.child,a.memoizedState=Lf(n),a.childLanes=Uf(e,r,n),t.memoizedState=Mf,t=qr(null,a));else if(Ma(t),Yd(s)){if(r=s.nextSibling&&s.nextSibling.dataset,r)var u=r.dgst;r=u,a=Error(w(419)),a.stack="",a.digest=r,is({value:a,source:null,stack:null}),t=Hf(e,t,n)}else if(Qe||Xi(e,t,n,!1),r=(n&e.childLanes)!==0,Qe||r){if(r=Te,r!==null&&(a=eb(r,n),a!==0&&a!==o.retryLane))throw o.retryLane=a,Ml(e,a),Nt(r,e,a),wh;jd(s)||vu(),t=Hf(e,t,n)}else jd(s)?(t.flags|=192,t.child=e.child,t=null):(e=o.treeContext,Oe=cn(s.nextSibling),ot=t,oe=!0,Ga=null,on=!1,e!==null&&_b(t,e),t=Od(t,a.children),t.flags|=4096);return t}return l?(La(t),s=a.fallback,l=t.mode,o=e.child,u=o.sibling,a=ha(o,{mode:"hidden",children:a.children}),a.subtreeFlags=o.subtreeFlags&65011712,u!==null?s=ha(u,s):(s=xl(s,l,n,null),s.flags|=2),s.return=t,a.return=t,a.sibling=s,t.child=a,qr(null,a),a=t.child,s=e.child.memoizedState,s===null?s=Lf(n):(l=s.cachePool,l!==null?(o=$e._currentValue,l=l.parent!==o?{parent:o,pool:o}:l):l=Db(),s={baseLanes:s.baseLanes|n,cachePool:l}),a.memoizedState=s,a.childLanes=Uf(e,r,n),t.memoizedState=Mf,qr(e.child,a)):(Ma(t),n=e.child,e=n.sibling,n=ha(n,{mode:"visible",children:a.children}),n.return=t,n.sibling=null,e!==null&&(r=t.deletions,r===null?(t.deletions=[e],t.flags|=16):r.push(e)),t.child=n,t.memoizedState=null,n)}function Od(e,t){return t=mu({mode:"visible",children:t},e.mode),t.return=e,e.child=t}function mu(e,t){return e=Gt(22,e,null,t),e.lanes=0,e}function Hf(e,t,n){return Ol(t,e.child,null,n),e=Od(t,t.pendingProps.children),e.flags|=2,t.memoizedState=null,e}function uy(e,t,n){e.lanes|=t;var a=e.alternate;a!==null&&(a.lanes|=t),md(e.return,t,n)}function Bf(e,t,n,a,l,i){var r=e.memoizedState;r===null?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:a,tail:n,tailMode:l,treeForkCount:i}:(r.isBackwards=t,r.rendering=null,r.renderingStartTime=0,r.last=a,r.tail=n,r.tailMode=l,r.treeForkCount=i)}function A0(e,t,n){var a=t.pendingProps,l=a.revealOrder,i=a.tail;a=a.children;var r=Ye.current,s=(r&2)!==0;if(s?(r=r&1|2,t.flags|=128):r&=1,xe(Ye,r),rt(e,t,a,n),a=oe?ls:0,!s&&e!==null&&(e.flags&128)!==0)e:for(e=t.child;e!==null;){if(e.tag===13)e.memoizedState!==null&&uy(e,n,t);else if(e.tag===19)uy(e,n,t);else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;e.sibling===null;){if(e.return===null||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}switch(l){case"forwards":for(n=t.child,l=null;n!==null;)e=n.alternate,e!==null&&fu(e)===null&&(l=n),n=n.sibling;n=l,n===null?(l=t.child,t.child=null):(l=n.sibling,n.sibling=null),Bf(t,!1,l,n,i,a);break;case"backwards":case"unstable_legacy-backwards":for(n=null,l=t.child,t.child=null;l!==null;){if(e=l.alternate,e!==null&&fu(e)===null){t.child=l;break}e=l.sibling,l.sibling=n,n=l,l=e}Bf(t,!0,n,null,i,a);break;case"together":Bf(t,!1,null,null,void 0,a);break;default:t.memoizedState=null}return t.child}function va(e,t,n){if(e!==null&&(t.dependencies=e.dependencies),el|=t.lanes,(n&t.childLanes)===0)if(e!==null){if(Xi(e,t,n,!1),(n&t.childLanes)===0)return null}else return null;if(e!==null&&t.child!==e.child)throw Error(w(153));if(t.child!==null){for(e=t.child,n=ha(e,e.pendingProps),t.child=n,n.return=t;e.sibling!==null;)e=e.sibling,n=n.sibling=ha(e,e.pendingProps),n.return=t;n.sibling=null}return t.child}function Rh(e,t){return(e.lanes&t)!==0?!0:(e=e.dependencies,!!(e!==null&&ou(e)))}function YE(e,t,n){switch(t.tag){case 3:tu(t,t.stateNode.containerInfo),za(t,$e,e.memoizedState.cache),wl();break;case 27:case 5:nd(t);break;case 4:tu(t,t.stateNode.containerInfo);break;case 10:za(t,t.type,t.memoizedProps.value);break;case 31:if(t.memoizedState!==null)return t.flags|=128,Td(t),null;break;case 13:var a=t.memoizedState;if(a!==null)return a.dehydrated!==null?(Ma(t),t.flags|=128,null):(n&t.child.childLanes)!==0?k0(e,t,n):(Ma(t),e=va(e,t,n),e!==null?e.sibling:null);Ma(t);break;case 19:var l=(e.flags&128)!==0;if(a=(n&t.childLanes)!==0,a||(Xi(e,t,n,!1),a=(n&t.childLanes)!==0),l){if(a)return A0(e,t,n);t.flags|=128}if(l=t.memoizedState,l!==null&&(l.rendering=null,l.tail=null,l.lastEffect=null),xe(Ye,Ye.current),a)break;return null;case 22:return t.lanes=0,E0(e,t,n,t.pendingProps);case 24:za(t,$e,e.memoizedState.cache)}return va(e,t,n)}function w0(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps)Qe=!0;else{if(!Rh(e,n)&&(t.flags&128)===0)return Qe=!1,YE(e,t,n);Qe=(e.flags&131072)!==0}else Qe=!1,oe&&(t.flags&1048576)!==0&&Nb(t,ls,t.index);switch(t.lanes=0,t.tag){case 16:e:{var a=t.pendingProps;if(e=vl(t.elementType),t.type=e,typeof e=="function")ih(e)?(a=_l(e,a),t.tag=1,t=sy(null,t,e,a,n)):(t.tag=0,t=Rd(null,t,e,a,n));else{if(e!=null){var l=e.$$typeof;if(l===$d){t.tag=11,t=ny(null,t,e,a,n);break e}else if(l===Qd){t.tag=14,t=ay(null,t,e,a,n);break e}}throw t=ed(e)||e,Error(w(306,t,""))}}return t;case 0:return Rd(e,t,t.type,t.pendingProps,n);case 1:return a=t.type,l=_l(a,t.pendingProps),sy(e,t,a,l,n);case 3:e:{if(tu(t,t.stateNode.containerInfo),e===null)throw Error(w(387));a=t.pendingProps;var i=t.memoizedState;l=i.element,bd(e,t),Zr(t,a,null,n);var r=t.memoizedState;if(a=r.cache,za(t,$e,a),a!==i.cache&&gd(t,[$e],n,!0),Qr(),a=r.element,i.isDehydrated)if(i={element:a,isDehydrated:!1,cache:r.cache},t.updateQueue.baseState=i,t.memoizedState=i,t.flags&256){t=oy(e,t,a,n);break e}else if(a!==l){l=sn(Error(w(424)),t),is(l),t=oy(e,t,a,n);break e}else for(e=t.stateNode.containerInfo,e.nodeType===9?e=e.body:e=e.nodeName==="HTML"?e.ownerDocument.body:e,Oe=cn(e.firstChild),ot=t,oe=!0,Ga=null,on=!0,n=Lb(t,null,a,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(wl(),a===l){t=va(e,t,n);break e}rt(e,t,a,n)}t=t.child}return t;case 26:return Ko(e,t),e===null?(n=Cy(t.type,null,t.pendingProps,null))?t.memoizedState=n:oe||(n=t.type,e=t.pendingProps,a=Eu(Va.current).createElement(n),a[st]=t,a[_t]=e,ct(a,n,e),nt(a),t.stateNode=a):t.memoizedState=Cy(t.type,e.memoizedProps,t.pendingProps,e.memoizedState),null;case 27:return nd(t),e===null&&oe&&(a=t.stateNode=gv(t.type,t.pendingProps,Va.current),ot=t,on=!0,l=Oe,nl(t.type)?(Vd=l,Oe=cn(a.firstChild)):Oe=l),rt(e,t,t.pendingProps.children,n),Ko(e,t),e===null&&(t.flags|=4194304),t.child;case 5:return e===null&&oe&&((l=a=Oe)&&(a=mk(a,t.type,t.pendingProps,on),a!==null?(t.stateNode=a,ot=t,Oe=cn(a.firstChild),on=!1,l=!0):l=!1),l||Pa(t)),nd(t),l=t.type,i=t.pendingProps,r=e!==null?e.memoizedProps:null,a=i.children,Bd(l,i)?a=null:r!==null&&Bd(l,r)&&(t.flags|=32),t.memoizedState!==null&&(l=ph(e,t,DE,null,null,n),fs._currentValue=l),Ko(e,t),rt(e,t,a,n),t.child;case 6:return e===null&&oe&&((e=n=Oe)&&(n=gk(n,t.pendingProps,on),n!==null?(t.stateNode=n,ot=t,Oe=null,e=!0):e=!1),e||Pa(t)),null;case 13:return k0(e,t,n);case 4:return tu(t,t.stateNode.containerInfo),a=t.pendingProps,e===null?t.child=Ol(t,null,a,n):rt(e,t,a,n),t.child;case 11:return ny(e,t,t.type,t.pendingProps,n);case 7:return rt(e,t,t.pendingProps,n),t.child;case 8:return rt(e,t,t.pendingProps.children,n),t.child;case 12:return rt(e,t,t.pendingProps.children,n),t.child;case 10:return a=t.pendingProps,za(t,t.type,a.value),rt(e,t,a.children,n),t.child;case 9:return l=t.type._context,a=t.pendingProps.children,Rl(t),l=ut(l),a=a(l),t.flags|=1,rt(e,t,a,n),t.child;case 14:return ay(e,t,t.type,t.pendingProps,n);case 15:return x0(e,t,t.type,t.pendingProps,n);case 19:return A0(e,t,n);case 31:return jE(e,t,n);case 22:return E0(e,t,n,t.pendingProps);case 24:return Rl(t),a=ut($e),e===null?(l=uh(),l===null&&(l=Te,i=oh(),l.pooledCache=i,i.refCount++,i!==null&&(l.pooledCacheLanes|=n),l=i),t.memoizedState={parent:a,cache:l},fh(t),za(t,$e,l)):((e.lanes&n)!==0&&(bd(e,t),Zr(t,null,null,n),Qr()),l=e.memoizedState,i=t.memoizedState,l.parent!==a?(l={parent:a,cache:a},t.memoizedState=l,t.lanes===0&&(t.memoizedState=t.updateQueue.baseState=l),za(t,$e,a)):(a=i.cache,za(t,$e,a),a!==l.cache&&gd(t,[$e],n,!0))),rt(e,t,t.pendingProps.children,n),t.child;case 29:throw t.pendingProps}throw Error(w(156,t.tag))}function la(e){e.flags|=4}function qf(e,t,n,a,l){if((t=(e.mode&32)!==0)&&(t=!1),t){if(e.flags|=16777216,(l&335544128)===l)if(e.stateNode.complete)e.flags|=8192;else if(J0())e.flags|=8192;else throw kl=uu,ch}else e.flags&=-16777217}function cy(e,t){if(t.type!=="stylesheet"||(t.state.loading&4)!==0)e.flags&=-16777217;else if(e.flags|=16777216,!vv(t))if(J0())e.flags|=8192;else throw kl=uu,ch}function Do(e,t){t!==null&&(e.flags|=4),e.flags&16384&&(t=e.tag!==22?Iy():536870912,e.lanes|=t,Hi|=t)}function Dr(e,t){if(!oe)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;t!==null;)t.alternate!==null&&(n=t),t=t.sibling;n===null?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var a=null;n!==null;)n.alternate!==null&&(a=n),n=n.sibling;a===null?t||e.tail===null?e.tail=null:e.tail.sibling=null:a.sibling=null}}function Re(e){var t=e.alternate!==null&&e.alternate.child===e.child,n=0,a=0;if(t)for(var l=e.child;l!==null;)n|=l.lanes|l.childLanes,a|=l.subtreeFlags&65011712,a|=l.flags&65011712,l.return=e,l=l.sibling;else for(l=e.child;l!==null;)n|=l.lanes|l.childLanes,a|=l.subtreeFlags,a|=l.flags,l.return=e,l=l.sibling;return e.subtreeFlags|=a,e.childLanes=n,t}function VE(e,t,n){var a=t.pendingProps;switch(sh(t),t.tag){case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Re(t),null;case 1:return Re(t),null;case 3:return n=t.stateNode,a=null,e!==null&&(a=e.memoizedState.cache),t.memoizedState.cache!==a&&(t.flags|=2048),pa($e),Ci(),n.pendingContext&&(n.context=n.pendingContext,n.pendingContext=null),(e===null||e.child===null)&&(oi(t)?la(t):e===null||e.memoizedState.isDehydrated&&(t.flags&256)===0||(t.flags|=1024,_f())),Re(t),null;case 26:var l=t.type,i=t.memoizedState;return e===null?(la(t),i!==null?(Re(t),cy(t,i)):(Re(t),qf(t,l,null,a,n))):i?i!==e.memoizedState?(la(t),Re(t),cy(t,i)):(Re(t),t.flags&=-16777217):(e=e.memoizedProps,e!==a&&la(t),Re(t),qf(t,l,e,a,n)),null;case 27:if(nu(t),n=Va.current,l=t.type,e!==null&&t.stateNode!=null)e.memoizedProps!==a&&la(t);else{if(!a){if(t.stateNode===null)throw Error(w(166));return Re(t),null}e=Hn.current,oi(t)?qg(t,e):(e=gv(l,a,n),t.stateNode=e,la(t))}return Re(t),null;case 5:if(nu(t),l=t.type,e!==null&&t.stateNode!=null)e.memoizedProps!==a&&la(t);else{if(!a){if(t.stateNode===null)throw Error(w(166));return Re(t),null}if(i=Hn.current,oi(t))qg(t,i);else{var r=Eu(Va.current);switch(i){case 1:i=r.createElementNS("http://www.w3.org/2000/svg",l);break;case 2:i=r.createElementNS("http://www.w3.org/1998/Math/MathML",l);break;default:switch(l){case"svg":i=r.createElementNS("http://www.w3.org/2000/svg",l);break;case"math":i=r.createElementNS("http://www.w3.org/1998/Math/MathML",l);break;case"script":i=r.createElement("div"),i.innerHTML="<script><\/script>",i=i.removeChild(i.firstChild);break;case"select":i=typeof a.is=="string"?r.createElement("select",{is:a.is}):r.createElement("select"),a.multiple?i.multiple=!0:a.size&&(i.size=a.size);break;default:i=typeof a.is=="string"?r.createElement(l,{is:a.is}):r.createElement(l)}}i[st]=t,i[_t]=a;e:for(r=t.child;r!==null;){if(r.tag===5||r.tag===6)i.appendChild(r.stateNode);else if(r.tag!==4&&r.tag!==27&&r.child!==null){r.child.return=r,r=r.child;continue}if(r===t)break e;for(;r.sibling===null;){if(r.return===null||r.return===t)break e;r=r.return}r.sibling.return=r.return,r=r.sibling}t.stateNode=i;e:switch(ct(i,l,a),l){case"button":case"input":case"select":case"textarea":a=!!a.autoFocus;break e;case"img":a=!0;break e;default:a=!1}a&&la(t)}}return Re(t),qf(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,n),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==a&&la(t);else{if(typeof a!="string"&&t.stateNode===null)throw Error(w(166));if(e=Va.current,oi(t)){if(e=t.stateNode,n=t.memoizedProps,a=null,l=ot,l!==null)switch(l.tag){case 27:case 5:a=l.memoizedProps}e[st]=t,e=!!(e.nodeValue===n||a!==null&&a.suppressHydrationWarning===!0||dv(e.nodeValue,n)),e||Pa(t,!0)}else e=Eu(e).createTextNode(a),e[st]=t,t.stateNode=e}return Re(t),null;case 31:if(n=t.memoizedState,e===null||e.memoizedState!==null){if(a=oi(t),n!==null){if(e===null){if(!a)throw Error(w(318));if(e=t.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(w(557));e[st]=t}else wl(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Re(t),e=!1}else n=_f(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),e=!0;if(!e)return t.flags&256?(Vt(t),t):(Vt(t),null);if((t.flags&128)!==0)throw Error(w(558))}return Re(t),null;case 13:if(a=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(l=oi(t),a!==null&&a.dehydrated!==null){if(e===null){if(!l)throw Error(w(318));if(l=t.memoizedState,l=l!==null?l.dehydrated:null,!l)throw Error(w(317));l[st]=t}else wl(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Re(t),l=!1}else l=_f(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=l),l=!0;if(!l)return t.flags&256?(Vt(t),t):(Vt(t),null)}return Vt(t),(t.flags&128)!==0?(t.lanes=n,t):(n=a!==null,e=e!==null&&e.memoizedState!==null,n&&(a=t.child,l=null,a.alternate!==null&&a.alternate.memoizedState!==null&&a.alternate.memoizedState.cachePool!==null&&(l=a.alternate.memoizedState.cachePool.pool),i=null,a.memoizedState!==null&&a.memoizedState.cachePool!==null&&(i=a.memoizedState.cachePool.pool),i!==l&&(a.flags|=2048)),n!==e&&n&&(t.child.flags|=8192),Do(t,t.updateQueue),Re(t),null);case 4:return Ci(),e===null&&Mh(t.stateNode.containerInfo),Re(t),null;case 10:return pa(t.type),Re(t),null;case 19:if(at(Ye),a=t.memoizedState,a===null)return Re(t),null;if(l=(t.flags&128)!==0,i=a.rendering,i===null)if(l)Dr(a,!1);else{if(Ue!==0||e!==null&&(e.flags&128)!==0)for(e=t.child;e!==null;){if(i=fu(e),i!==null){for(t.flags|=128,Dr(a,!1),e=i.updateQueue,t.updateQueue=e,Do(t,e),t.subtreeFlags=0,e=n,n=t.child;n!==null;)Rb(n,e),n=n.sibling;return xe(Ye,Ye.current&1|2),oe&&oa(t,a.treeForkCount),t.child}e=e.sibling}a.tail!==null&&$t()>yu&&(t.flags|=128,l=!0,Dr(a,!1),t.lanes=4194304)}else{if(!l)if(e=fu(i),e!==null){if(t.flags|=128,l=!0,e=e.updateQueue,t.updateQueue=e,Do(t,e),Dr(a,!0),a.tail===null&&a.tailMode==="hidden"&&!i.alternate&&!oe)return Re(t),null}else 2*$t()-a.renderingStartTime>yu&&n!==536870912&&(t.flags|=128,l=!0,Dr(a,!1),t.lanes=4194304);a.isBackwards?(i.sibling=t.child,t.child=i):(e=a.last,e!==null?e.sibling=i:t.child=i,a.last=i)}return a.tail!==null?(e=a.tail,a.rendering=e,a.tail=e.sibling,a.renderingStartTime=$t(),e.sibling=null,n=Ye.current,xe(Ye,l?n&1|2:n&1),oe&&oa(t,a.treeForkCount),e):(Re(t),null);case 22:case 23:return Vt(t),dh(),a=t.memoizedState!==null,e!==null?e.memoizedState!==null!==a&&(t.flags|=8192):a&&(t.flags|=8192),a?(n&536870912)!==0&&(t.flags&128)===0&&(Re(t),t.subtreeFlags&6&&(t.flags|=8192)):Re(t),n=t.updateQueue,n!==null&&Do(t,n.retryQueue),n=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),a=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(a=t.memoizedState.cachePool.pool),a!==n&&(t.flags|=2048),e!==null&&at(El),null;case 24:return n=null,e!==null&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),pa($e),Re(t),null;case 25:return null;case 30:return null}throw Error(w(156,t.tag))}function GE(e,t){switch(sh(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return pa($e),Ci(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return nu(t),null;case 31:if(t.memoizedState!==null){if(Vt(t),t.alternate===null)throw Error(w(340));wl()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(Vt(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(w(340));wl()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return at(Ye),null;case 4:return Ci(),null;case 10:return pa(t.type),null;case 22:case 23:return Vt(t),dh(),e!==null&&at(El),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return pa($e),null;case 25:return null;default:return null}}function R0(e,t){switch(sh(t),t.tag){case 3:pa($e),Ci();break;case 26:case 27:case 5:nu(t);break;case 4:Ci();break;case 31:t.memoizedState!==null&&Vt(t);break;case 13:Vt(t);break;case 19:at(Ye);break;case 10:pa(t.type);break;case 22:case 23:Vt(t),dh(),e!==null&&at(El);break;case 24:pa($e)}}function xs(e,t){try{var n=t.updateQueue,a=n!==null?n.lastEffect:null;if(a!==null){var l=a.next;n=l;do{if((n.tag&e)===e){a=void 0;var i=n.create,r=n.inst;a=i(),r.destroy=a}n=n.next}while(n!==l)}}catch(s){me(t,t.return,s)}}function Wa(e,t,n){try{var a=t.updateQueue,l=a!==null?a.lastEffect:null;if(l!==null){var i=l.next;a=i;do{if((a.tag&e)===e){var r=a.inst,s=r.destroy;if(s!==void 0){r.destroy=void 0,l=t;var o=n,u=s;try{u()}catch(c){me(l,o,c)}}}a=a.next}while(a!==i)}}catch(c){me(t,t.return,c)}}function O0(e){var t=e.updateQueue;if(t!==null){var n=e.stateNode;try{Hb(t,n)}catch(a){me(e,e.return,a)}}}function N0(e,t,n){n.props=_l(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(a){me(e,t,a)}}function Fr(e,t){try{var n=e.ref;if(n!==null){switch(e.tag){case 26:case 27:case 5:var a=e.stateNode;break;case 30:a=e.stateNode;break;default:a=e.stateNode}typeof n=="function"?e.refCleanup=n(a):n.current=a}}catch(l){me(e,t,l)}}function Un(e,t){var n=e.ref,a=e.refCleanup;if(n!==null)if(typeof a=="function")try{a()}catch(l){me(e,t,l)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof n=="function")try{n(null)}catch(l){me(e,t,l)}else n.current=null}function _0(e){var t=e.type,n=e.memoizedProps,a=e.stateNode;try{e:switch(t){case"button":case"input":case"select":case"textarea":n.autoFocus&&a.focus();break e;case"img":n.src?a.src=n.src:n.srcSet&&(a.srcset=n.srcSet)}}catch(l){me(e,e.return,l)}}function jf(e,t,n){try{var a=e.stateNode;uk(a,e.type,n,t),a[_t]=t}catch(l){me(e,e.return,l)}}function C0(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&nl(e.type)||e.tag===4}function Yf(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||C0(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.tag===27&&nl(e.type)||e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Nd(e,t,n){var a=e.tag;if(a===5||a===6)e=e.stateNode,t?(n.nodeType===9?n.body:n.nodeName==="HTML"?n.ownerDocument.body:n).insertBefore(e,t):(t=n.nodeType===9?n.body:n.nodeName==="HTML"?n.ownerDocument.body:n,t.appendChild(e),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=fa));else if(a!==4&&(a===27&&nl(e.type)&&(n=e.stateNode,t=null),e=e.child,e!==null))for(Nd(e,t,n),e=e.sibling;e!==null;)Nd(e,t,n),e=e.sibling}function gu(e,t,n){var a=e.tag;if(a===5||a===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(a!==4&&(a===27&&nl(e.type)&&(n=e.stateNode),e=e.child,e!==null))for(gu(e,t,n),e=e.sibling;e!==null;)gu(e,t,n),e=e.sibling}function D0(e){var t=e.stateNode,n=e.memoizedProps;try{for(var a=e.type,l=t.attributes;l.length;)t.removeAttributeNode(l[0]);ct(t,a,n),t[st]=e,t[_t]=n}catch(i){me(e,e.return,i)}}var ua=!1,Xe=!1,Vf=!1,fy=typeof WeakSet=="function"?WeakSet:Set,tt=null;function XE(e,t){if(e=e.containerInfo,Ud=Ru,e=vb(e),nh(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var a=n.getSelection&&n.getSelection();if(a&&a.rangeCount!==0){n=a.anchorNode;var l=a.anchorOffset,i=a.focusNode;a=a.focusOffset;try{n.nodeType,i.nodeType}catch(y){n=null;break e}var r=0,s=-1,o=-1,u=0,c=0,f=e,d=null;t:for(;;){for(var p;f!==n||l!==0&&f.nodeType!==3||(s=r+l),f!==i||a!==0&&f.nodeType!==3||(o=r+a),f.nodeType===3&&(r+=f.nodeValue.length),(p=f.firstChild)!==null;)d=f,f=p;for(;;){if(f===e)break t;if(d===n&&++u===l&&(s=r),d===i&&++c===a&&(o=r),(p=f.nextSibling)!==null)break;f=d,d=f.parentNode}f=p}n=s===-1||o===-1?null:{start:s,end:o}}else n=null}n=n||{start:0,end:0}}else n=null;for(Hd={focusedElem:e,selectionRange:n},Ru=!1,tt=t;tt!==null;)if(t=tt,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,tt=e;else for(;tt!==null;){switch(t=tt,i=t.alternate,e=t.flags,t.tag){case 0:if((e&4)!==0&&(e=t.updateQueue,e=e!==null?e.events:null,e!==null))for(n=0;n<e.length;n++)l=e[n],l.ref.impl=l.nextImpl;break;case 11:case 15:break;case 1:if((e&1024)!==0&&i!==null){e=void 0,n=t,l=i.memoizedProps,i=i.memoizedState,a=n.stateNode;try{var S=_l(n.type,l);e=a.getSnapshotBeforeUpdate(S,i),a.__reactInternalSnapshotBeforeUpdate=e}catch(y){me(n,n.return,y)}}break;case 3:if((e&1024)!==0){if(e=t.stateNode.containerInfo,n=e.nodeType,n===9)qd(e);else if(n===1)switch(e.nodeName){case"HEAD":case"HTML":case"BODY":qd(e);break;default:e.textContent=""}}break;case 5:case 26:case 27:case 6:case 4:case 17:break;default:if((e&1024)!==0)throw Error(w(163))}if(e=t.sibling,e!==null){e.return=t.return,tt=e;break}tt=t.return}}function z0(e,t,n){var a=n.flags;switch(n.tag){case 0:case 11:case 15:ra(e,n),a&4&&xs(5,n);break;case 1:if(ra(e,n),a&4)if(e=n.stateNode,t===null)try{e.componentDidMount()}catch(r){me(n,n.return,r)}else{var l=_l(n.type,t.memoizedProps);t=t.memoizedState;try{e.componentDidUpdate(l,t,e.__reactInternalSnapshotBeforeUpdate)}catch(r){me(n,n.return,r)}}a&64&&O0(n),a&512&&Fr(n,n.return);break;case 3:if(ra(e,n),a&64&&(e=n.updateQueue,e!==null)){if(t=null,n.child!==null)switch(n.child.tag){case 27:case 5:t=n.child.stateNode;break;case 1:t=n.child.stateNode}try{Hb(e,t)}catch(r){me(n,n.return,r)}}break;case 27:t===null&&a&4&&D0(n);case 26:case 5:ra(e,n),t===null&&a&4&&_0(n),a&512&&Fr(n,n.return);break;case 12:ra(e,n);break;case 31:ra(e,n),a&4&&U0(e,n);break;case 13:ra(e,n),a&4&&H0(e,n),a&64&&(e=n.memoizedState,e!==null&&(e=e.dehydrated,e!==null&&(n=WE.bind(null,n),yk(e,n))));break;case 22:if(a=n.memoizedState!==null||ua,!a){t=t!==null&&t.memoizedState!==null||Xe,l=ua;var i=Xe;ua=a,(Xe=t)&&!i?sa(e,n,(n.subtreeFlags&8772)!==0):ra(e,n),ua=l,Xe=i}break;case 30:break;default:ra(e,n)}}function M0(e){var t=e.alternate;t!==null&&(e.alternate=null,M0(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&Jd(t)),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}var ze=null,Rt=!1;function ia(e,t,n){for(n=n.child;n!==null;)L0(e,t,n),n=n.sibling}function L0(e,t,n){if(Qt&&typeof Qt.onCommitFiberUnmount=="function")try{Qt.onCommitFiberUnmount(ms,n)}catch(i){}switch(n.tag){case 26:Xe||Un(n,t),ia(e,t,n),n.memoizedState?n.memoizedState.count--:n.stateNode&&(n=n.stateNode,n.parentNode.removeChild(n));break;case 27:Xe||Un(n,t);var a=ze,l=Rt;nl(n.type)&&(ze=n.stateNode,Rt=!1),ia(e,t,n),Wr(n.stateNode),ze=a,Rt=l;break;case 5:Xe||Un(n,t);case 6:if(a=ze,l=Rt,ze=null,ia(e,t,n),ze=a,Rt=l,ze!==null)if(Rt)try{(ze.nodeType===9?ze.body:ze.nodeName==="HTML"?ze.ownerDocument.body:ze).removeChild(n.stateNode)}catch(i){me(n,t,i)}else try{ze.removeChild(n.stateNode)}catch(i){me(n,t,i)}break;case 18:ze!==null&&(Rt?(e=ze,wy(e.nodeType===9?e.body:e.nodeName==="HTML"?e.ownerDocument.body:e,n.stateNode),Yi(e)):wy(ze,n.stateNode));break;case 4:a=ze,l=Rt,ze=n.stateNode.containerInfo,Rt=!0,ia(e,t,n),ze=a,Rt=l;break;case 0:case 11:case 14:case 15:Wa(2,n,t),Xe||Wa(4,n,t),ia(e,t,n);break;case 1:Xe||(Un(n,t),a=n.stateNode,typeof a.componentWillUnmount=="function"&&N0(n,t,a)),ia(e,t,n);break;case 21:ia(e,t,n);break;case 22:Xe=(a=Xe)||n.memoizedState!==null,ia(e,t,n),Xe=a;break;default:ia(e,t,n)}}function U0(e,t){if(t.memoizedState===null&&(e=t.alternate,e!==null&&(e=e.memoizedState,e!==null))){e=e.dehydrated;try{Yi(e)}catch(n){me(t,t.return,n)}}}function H0(e,t){if(t.memoizedState===null&&(e=t.alternate,e!==null&&(e=e.memoizedState,e!==null&&(e=e.dehydrated,e!==null))))try{Yi(e)}catch(n){me(t,t.return,n)}}function $E(e){switch(e.tag){case 31:case 13:case 19:var t=e.stateNode;return t===null&&(t=e.stateNode=new fy),t;case 22:return e=e.stateNode,t=e._retryCache,t===null&&(t=e._retryCache=new fy),t;default:throw Error(w(435,e.tag))}}function zo(e,t){var n=$E(e);t.forEach(function(a){if(!n.has(a)){n.add(a);var l=ek.bind(null,e,a);a.then(l,l)}})}function At(e,t){var n=t.deletions;if(n!==null)for(var a=0;a<n.length;a++){var l=n[a],i=e,r=t,s=r;e:for(;s!==null;){switch(s.tag){case 27:if(nl(s.type)){ze=s.stateNode,Rt=!1;break e}break;case 5:ze=s.stateNode,Rt=!1;break e;case 3:case 4:ze=s.stateNode.containerInfo,Rt=!0;break e}s=s.return}if(ze===null)throw Error(w(160));L0(i,r,l),ze=null,Rt=!1,i=l.alternate,i!==null&&(i.return=null),l.return=null}if(t.subtreeFlags&13886)for(t=t.child;t!==null;)B0(t,e),t=t.sibling}var xn=null;function B0(e,t){var n=e.alternate,a=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:At(t,e),wt(e),a&4&&(Wa(3,e,e.return),xs(3,e),Wa(5,e,e.return));break;case 1:At(t,e),wt(e),a&512&&(Xe||n===null||Un(n,n.return)),a&64&&ua&&(e=e.updateQueue,e!==null&&(a=e.callbacks,a!==null&&(n=e.shared.hiddenCallbacks,e.shared.hiddenCallbacks=n===null?a:n.concat(a))));break;case 26:var l=xn;if(At(t,e),wt(e),a&512&&(Xe||n===null||Un(n,n.return)),a&4){var i=n!==null?n.memoizedState:null;if(a=e.memoizedState,n===null)if(a===null)if(e.stateNode===null){e:{a=e.type,n=e.memoizedProps,l=l.ownerDocument||l;t:switch(a){case"title":i=l.getElementsByTagName("title")[0],(!i||i[bs]||i[st]||i.namespaceURI==="http://www.w3.org/2000/svg"||i.hasAttribute("itemprop"))&&(i=l.createElement(a),l.head.insertBefore(i,l.querySelector("head > title"))),ct(i,a,n),i[st]=e,nt(i),a=i;break e;case"link":var r=zy("link","href",l).get(a+(n.href||""));if(r){for(var s=0;s<r.length;s++)if(i=r[s],i.getAttribute("href")===(n.href==null||n.href===""?null:n.href)&&i.getAttribute("rel")===(n.rel==null?null:n.rel)&&i.getAttribute("title")===(n.title==null?null:n.title)&&i.getAttribute("crossorigin")===(n.crossOrigin==null?null:n.crossOrigin)){r.splice(s,1);break t}}i=l.createElement(a),ct(i,a,n),l.head.appendChild(i);break;case"meta":if(r=zy("meta","content",l).get(a+(n.content||""))){for(s=0;s<r.length;s++)if(i=r[s],i.getAttribute("content")===(n.content==null?null:""+n.content)&&i.getAttribute("name")===(n.name==null?null:n.name)&&i.getAttribute("property")===(n.property==null?null:n.property)&&i.getAttribute("http-equiv")===(n.httpEquiv==null?null:n.httpEquiv)&&i.getAttribute("charset")===(n.charSet==null?null:n.charSet)){r.splice(s,1);break t}}i=l.createElement(a),ct(i,a,n),l.head.appendChild(i);break;default:throw Error(w(468,a))}i[st]=e,nt(i),a=i}e.stateNode=a}else My(l,e.type,e.stateNode);else e.stateNode=Dy(l,a,e.memoizedProps);else i!==a?(i===null?n.stateNode!==null&&(n=n.stateNode,n.parentNode.removeChild(n)):i.count--,a===null?My(l,e.type,e.stateNode):Dy(l,a,e.memoizedProps)):a===null&&e.stateNode!==null&&jf(e,e.memoizedProps,n.memoizedProps)}break;case 27:At(t,e),wt(e),a&512&&(Xe||n===null||Un(n,n.return)),n!==null&&a&4&&jf(e,e.memoizedProps,n.memoizedProps);break;case 5:if(At(t,e),wt(e),a&512&&(Xe||n===null||Un(n,n.return)),e.flags&32){l=e.stateNode;try{zi(l,"")}catch(S){me(e,e.return,S)}}a&4&&e.stateNode!=null&&(l=e.memoizedProps,jf(e,l,n!==null?n.memoizedProps:l)),a&1024&&(Vf=!0);break;case 6:if(At(t,e),wt(e),a&4){if(e.stateNode===null)throw Error(w(162));a=e.memoizedProps,n=e.stateNode;try{n.nodeValue=a}catch(S){me(e,e.return,S)}}break;case 3:if(Io=null,l=xn,xn=ku(t.containerInfo),At(t,e),xn=l,wt(e),a&4&&n!==null&&n.memoizedState.isDehydrated)try{Yi(t.containerInfo)}catch(S){me(e,e.return,S)}Vf&&(Vf=!1,q0(e));break;case 4:a=xn,xn=ku(e.stateNode.containerInfo),At(t,e),wt(e),xn=a;break;case 12:At(t,e),wt(e);break;case 31:At(t,e),wt(e),a&4&&(a=e.updateQueue,a!==null&&(e.updateQueue=null,zo(e,a)));break;case 13:At(t,e),wt(e),e.child.flags&8192&&e.memoizedState!==null!=(n!==null&&n.memoizedState!==null)&&(ju=$t()),a&4&&(a=e.updateQueue,a!==null&&(e.updateQueue=null,zo(e,a)));break;case 22:l=e.memoizedState!==null;var o=n!==null&&n.memoizedState!==null,u=ua,c=Xe;if(ua=u||l,Xe=c||o,At(t,e),Xe=c,ua=u,wt(e),a&8192)e:for(t=e.stateNode,t._visibility=l?t._visibility&-2:t._visibility|1,l&&(n===null||o||ua||Xe||Sl(e)),n=null,t=e;;){if(t.tag===5||t.tag===26){if(n===null){o=n=t;try{if(i=o.stateNode,l)r=i.style,typeof r.setProperty=="function"?r.setProperty("display","none","important"):r.display="none";else{s=o.stateNode;var f=o.memoizedProps.style,d=f!=null&&f.hasOwnProperty("display")?f.display:null;s.style.display=d==null||typeof d=="boolean"?"":(""+d).trim()}}catch(S){me(o,o.return,S)}}}else if(t.tag===6){if(n===null){o=t;try{o.stateNode.nodeValue=l?"":o.memoizedProps}catch(S){me(o,o.return,S)}}}else if(t.tag===18){if(n===null){o=t;try{var p=o.stateNode;l?Ry(p,!0):Ry(o.stateNode,!1)}catch(S){me(o,o.return,S)}}}else if((t.tag!==22&&t.tag!==23||t.memoizedState===null||t===e)&&t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break e;for(;t.sibling===null;){if(t.return===null||t.return===e)break e;n===t&&(n=null),t=t.return}n===t&&(n=null),t.sibling.return=t.return,t=t.sibling}a&4&&(a=e.updateQueue,a!==null&&(n=a.retryQueue,n!==null&&(a.retryQueue=null,zo(e,n))));break;case 19:At(t,e),wt(e),a&4&&(a=e.updateQueue,a!==null&&(e.updateQueue=null,zo(e,a)));break;case 30:break;case 21:break;default:At(t,e),wt(e)}}function wt(e){var t=e.flags;if(t&2){try{for(var n,a=e.return;a!==null;){if(C0(a)){n=a;break}a=a.return}if(n==null)throw Error(w(160));switch(n.tag){case 27:var l=n.stateNode,i=Yf(e);gu(e,i,l);break;case 5:var r=n.stateNode;n.flags&32&&(zi(r,""),n.flags&=-33);var s=Yf(e);gu(e,s,r);break;case 3:case 4:var o=n.stateNode.containerInfo,u=Yf(e);Nd(e,u,o);break;default:throw Error(w(161))}}catch(c){me(e,e.return,c)}e.flags&=-3}t&4096&&(e.flags&=-4097)}function q0(e){if(e.subtreeFlags&1024)for(e=e.child;e!==null;){var t=e;q0(t),t.tag===5&&t.flags&1024&&t.stateNode.reset(),e=e.sibling}}function ra(e,t){if(t.subtreeFlags&8772)for(t=t.child;t!==null;)z0(e,t.alternate,t),t=t.sibling}function Sl(e){for(e=e.child;e!==null;){var t=e;switch(t.tag){case 0:case 11:case 14:case 15:Wa(4,t,t.return),Sl(t);break;case 1:Un(t,t.return);var n=t.stateNode;typeof n.componentWillUnmount=="function"&&N0(t,t.return,n),Sl(t);break;case 27:Wr(t.stateNode);case 26:case 5:Un(t,t.return),Sl(t);break;case 22:t.memoizedState===null&&Sl(t);break;case 30:Sl(t);break;default:Sl(t)}e=e.sibling}}function sa(e,t,n){for(n=n&&(t.subtreeFlags&8772)!==0,t=t.child;t!==null;){var a=t.alternate,l=e,i=t,r=i.flags;switch(i.tag){case 0:case 11:case 15:sa(l,i,n),xs(4,i);break;case 1:if(sa(l,i,n),a=i,l=a.stateNode,typeof l.componentDidMount=="function")try{l.componentDidMount()}catch(u){me(a,a.return,u)}if(a=i,l=a.updateQueue,l!==null){var s=a.stateNode;try{var o=l.shared.hiddenCallbacks;if(o!==null)for(l.shared.hiddenCallbacks=null,l=0;l<o.length;l++)Ub(o[l],s)}catch(u){me(a,a.return,u)}}n&&r&64&&O0(i),Fr(i,i.return);break;case 27:D0(i);case 26:case 5:sa(l,i,n),n&&a===null&&r&4&&_0(i),Fr(i,i.return);break;case 12:sa(l,i,n);break;case 31:sa(l,i,n),n&&r&4&&U0(l,i);break;case 13:sa(l,i,n),n&&r&4&&H0(l,i);break;case 22:i.memoizedState===null&&sa(l,i,n),Fr(i,i.return);break;case 30:break;default:sa(l,i,n)}t=t.sibling}}function Oh(e,t){var n=null;e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),e=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(e=t.memoizedState.cachePool.pool),e!==n&&(e!=null&&e.refCount++,n!=null&&Ss(n))}function Nh(e,t){e=null,t.alternate!==null&&(e=t.alternate.memoizedState.cache),t=t.memoizedState.cache,t!==e&&(t.refCount++,e!=null&&Ss(e))}function Tn(e,t,n,a){if(t.subtreeFlags&10256)for(t=t.child;t!==null;)j0(e,t,n,a),t=t.sibling}function j0(e,t,n,a){var l=t.flags;switch(t.tag){case 0:case 11:case 15:Tn(e,t,n,a),l&2048&&xs(9,t);break;case 1:Tn(e,t,n,a);break;case 3:Tn(e,t,n,a),l&2048&&(e=null,t.alternate!==null&&(e=t.alternate.memoizedState.cache),t=t.memoizedState.cache,t!==e&&(t.refCount++,e!=null&&Ss(e)));break;case 12:if(l&2048){Tn(e,t,n,a),e=t.stateNode;try{var i=t.memoizedProps,r=i.id,s=i.onPostCommit;typeof s=="function"&&s(r,t.alternate===null?"mount":"update",e.passiveEffectDuration,-0)}catch(o){me(t,t.return,o)}}else Tn(e,t,n,a);break;case 31:Tn(e,t,n,a);break;case 13:Tn(e,t,n,a);break;case 23:break;case 22:i=t.stateNode,r=t.alternate,t.memoizedState!==null?i._visibility&2?Tn(e,t,n,a):Jr(e,t):i._visibility&2?Tn(e,t,n,a):(i._visibility|=2,ci(e,t,n,a,(t.subtreeFlags&10256)!==0||!1)),l&2048&&Oh(r,t);break;case 24:Tn(e,t,n,a),l&2048&&Nh(t.alternate,t);break;default:Tn(e,t,n,a)}}function ci(e,t,n,a,l){for(l=l&&((t.subtreeFlags&10256)!==0||!1),t=t.child;t!==null;){var i=e,r=t,s=n,o=a,u=r.flags;switch(r.tag){case 0:case 11:case 15:ci(i,r,s,o,l),xs(8,r);break;case 23:break;case 22:var c=r.stateNode;r.memoizedState!==null?c._visibility&2?ci(i,r,s,o,l):Jr(i,r):(c._visibility|=2,ci(i,r,s,o,l)),l&&u&2048&&Oh(r.alternate,r);break;case 24:ci(i,r,s,o,l),l&&u&2048&&Nh(r.alternate,r);break;default:ci(i,r,s,o,l)}t=t.sibling}}function Jr(e,t){if(t.subtreeFlags&10256)for(t=t.child;t!==null;){var n=e,a=t,l=a.flags;switch(a.tag){case 22:Jr(n,a),l&2048&&Oh(a.alternate,a);break;case 24:Jr(n,a),l&2048&&Nh(a.alternate,a);break;default:Jr(n,a)}t=t.sibling}}var jr=8192;function ui(e,t,n){if(e.subtreeFlags&jr)for(e=e.child;e!==null;)Y0(e,t,n),e=e.sibling}function Y0(e,t,n){switch(e.tag){case 26:ui(e,t,n),e.flags&jr&&e.memoizedState!==null&&Nk(n,xn,e.memoizedState,e.memoizedProps);break;case 5:ui(e,t,n);break;case 3:case 4:var a=xn;xn=ku(e.stateNode.containerInfo),ui(e,t,n),xn=a;break;case 22:e.memoizedState===null&&(a=e.alternate,a!==null&&a.memoizedState!==null?(a=jr,jr=16777216,ui(e,t,n),jr=a):ui(e,t,n));break;default:ui(e,t,n)}}function V0(e){var t=e.alternate;if(t!==null&&(e=t.child,e!==null)){t.child=null;do t=e.sibling,e.sibling=null,e=t;while(e!==null)}}function zr(e){var t=e.deletions;if((e.flags&16)!==0){if(t!==null)for(var n=0;n<t.length;n++){var a=t[n];tt=a,X0(a,e)}V0(e)}if(e.subtreeFlags&10256)for(e=e.child;e!==null;)G0(e),e=e.sibling}function G0(e){switch(e.tag){case 0:case 11:case 15:zr(e),e.flags&2048&&Wa(9,e,e.return);break;case 3:zr(e);break;case 12:zr(e);break;case 22:var t=e.stateNode;e.memoizedState!==null&&t._visibility&2&&(e.return===null||e.return.tag!==13)?(t._visibility&=-3,Fo(e)):zr(e);break;default:zr(e)}}function Fo(e){var t=e.deletions;if((e.flags&16)!==0){if(t!==null)for(var n=0;n<t.length;n++){var a=t[n];tt=a,X0(a,e)}V0(e)}for(e=e.child;e!==null;){switch(t=e,t.tag){case 0:case 11:case 15:Wa(8,t,t.return),Fo(t);break;case 22:n=t.stateNode,n._visibility&2&&(n._visibility&=-3,Fo(t));break;default:Fo(t)}e=e.sibling}}function X0(e,t){for(;tt!==null;){var n=tt;switch(n.tag){case 0:case 11:case 15:Wa(8,n,t);break;case 23:case 22:if(n.memoizedState!==null&&n.memoizedState.cachePool!==null){var a=n.memoizedState.cachePool.pool;a!=null&&a.refCount++}break;case 24:Ss(n.memoizedState.cache)}if(a=n.child,a!==null)a.return=n,tt=a;else e:for(n=e;tt!==null;){a=tt;var l=a.sibling,i=a.return;if(M0(a),a===n){tt=null;break e}if(l!==null){l.return=i,tt=l;break e}tt=i}}}var QE={getCacheForType:function(e){var t=ut($e),n=t.data.get(e);return n===void 0&&(n=e(),t.data.set(e,n)),n},cacheSignal:function(){return ut($e).controller.signal}},ZE=typeof WeakMap=="function"?WeakMap:Map,ce=0,Te=null,ne=null,le=0,pe=0,Yt=null,qa=!1,Qi=!1,_h=!1,Sa=0,Ue=0,el=0,Al=0,Ch=0,Xt=0,Hi=0,Ir=null,Ot=null,_d=!1,ju=0,$0=0,yu=1/0,bu=null,Qa=null,Fe=0,Za=null,Bi=null,ma=0,Cd=0,Dd=null,Q0=null,Pr=0,zd=null;function Kt(){return(ce&2)!==0&&le!==0?le&-le:Q.T!==null?zh():tb()}function Z0(){if(Xt===0)if((le&536870912)===0||oe){var e=Eo;Eo<<=1,(Eo&3932160)===0&&(Eo=262144),Xt=e}else Xt=536870912;return e=Jt.current,e!==null&&(e.flags|=32),Xt}function Nt(e,t,n){(e===Te&&(pe===2||pe===9)||e.cancelPendingCommit!==null)&&(qi(e,0),ja(e,le,Xt,!1)),ys(e,n),((ce&2)===0||e!==Te)&&(e===Te&&((ce&2)===0&&(Al|=n),Ue===4&&ja(e,le,Xt,!1)),qn(e))}function K0(e,t,n){if((ce&6)!==0)throw Error(w(327));var a=!n&&(t&127)===0&&(t&e.expiredLanes)===0||gs(e,t),l=a?JE(e,t):Gf(e,t,!0),i=a;do{if(l===0){Qi&&!a&&ja(e,t,0,!1);break}else{if(n=e.current.alternate,i&&!KE(n)){l=Gf(e,t,!1),i=!1;continue}if(l===2){if(i=t,e.errorRecoveryDisabledLanes&i)var r=0;else r=e.pendingLanes&-536870913,r=r!==0?r:r&536870912?536870912:0;if(r!==0){t=r;e:{var s=e;l=Ir;var o=s.current.memoizedState.isDehydrated;if(o&&(qi(s,r).flags|=256),r=Gf(s,r,!1),r!==2){if(_h&&!o){s.errorRecoveryDisabledLanes|=i,Al|=i,l=4;break e}i=Ot,Ot=l,i!==null&&(Ot===null?Ot=i:Ot.push.apply(Ot,i))}l=r}if(i=!1,l!==2)continue}}if(l===1){qi(e,0),ja(e,t,0,!0);break}e:{switch(a=e,i=l,i){case 0:case 1:throw Error(w(345));case 4:if((t&4194048)!==t)break;case 6:ja(a,t,Xt,!qa);break e;case 2:Ot=null;break;case 3:case 5:break;default:throw Error(w(329))}if((t&62914560)===t&&(l=ju+300-$t(),10<l)){if(ja(a,t,Xt,!qa),Nu(a,0,!0)!==0)break e;ma=t,a.timeoutHandle=pv(dy.bind(null,a,n,Ot,bu,_d,t,Xt,Al,Hi,qa,i,"Throttled",-0,0),l);break e}dy(a,n,Ot,bu,_d,t,Xt,Al,Hi,qa,i,null,-0,0)}}break}while(!0);qn(e)}function dy(e,t,n,a,l,i,r,s,o,u,c,f,d,p){if(e.timeoutHandle=-1,f=t.subtreeFlags,f&8192||(f&16785408)===16785408){f={stylesheets:null,count:0,imgCount:0,imgBytes:0,suspenseyImages:[],waitingForImages:!0,waitingForViewTransition:!1,unsuspend:fa},Y0(t,i,f);var S=(i&62914560)===i?ju-$t():(i&4194048)===i?$0-$t():0;if(S=_k(f,S),S!==null){ma=i,e.cancelPendingCommit=S(py.bind(null,e,t,i,n,a,l,r,s,o,c,f,null,d,p)),ja(e,i,r,!u);return}}py(e,t,i,n,a,l,r,s,o)}function KE(e){for(var t=e;;){var n=t.tag;if((n===0||n===11||n===15)&&t.flags&16384&&(n=t.updateQueue,n!==null&&(n=n.stores,n!==null)))for(var a=0;a<n.length;a++){var l=n[a],i=l.getSnapshot;l=l.value;try{if(!Ft(i(),l))return!1}catch(r){return!1}}if(n=t.child,t.subtreeFlags&16384&&n!==null)n.return=t,t=n;else{if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}function ja(e,t,n,a){t&=~Ch,t&=~Al,e.suspendedLanes|=t,e.pingedLanes&=~t,a&&(e.warmLanes|=t),a=e.expirationTimes;for(var l=t;0<l;){var i=31-Zt(l),r=1<<i;a[i]=-1,l&=~r}n!==0&&Py(e,n,t)}function Yu(){return(ce&6)===0?(Es(0,!1),!1):!0}function Dh(){if(ne!==null){if(pe===0)var e=ne.return;else e=ne,da=Ll=null,yh(e),Oi=null,rs=0,e=ne;for(;e!==null;)R0(e.alternate,e),e=e.return;ne=null}}function qi(e,t){var n=e.timeoutHandle;n!==-1&&(e.timeoutHandle=-1,dk(n)),n=e.cancelPendingCommit,n!==null&&(e.cancelPendingCommit=null,n()),ma=0,Dh(),Te=e,ne=n=ha(e.current,null),le=t,pe=0,Yt=null,qa=!1,Qi=gs(e,t),_h=!1,Hi=Xt=Ch=Al=el=Ue=0,Ot=Ir=null,_d=!1,(t&8)!==0&&(t|=t&32);var a=e.entangledLanes;if(a!==0)for(e=e.entanglements,a&=t;0<a;){var l=31-Zt(a),i=1<<l;t|=e[l],a&=~i}return Sa=t,zu(),n}function F0(e,t){J=null,Q.H=os,t===$i||t===Lu?(t=Xg(),pe=3):t===ch?(t=Xg(),pe=4):pe=t===wh?8:t!==null&&typeof t=="object"&&typeof t.then=="function"?6:1,Yt=t,ne===null&&(Ue=1,pu(e,sn(t,e.current)))}function J0(){var e=Jt.current;return e===null?!0:(le&4194048)===le?un===null:(le&62914560)===le||(le&536870912)!==0?e===un:!1}function I0(){var e=Q.H;return Q.H=os,e===null?os:e}function P0(){var e=Q.A;return Q.A=QE,e}function vu(){Ue=4,qa||(le&4194048)!==le&&Jt.current!==null||(Qi=!0),(el&134217727)===0&&(Al&134217727)===0||Te===null||ja(Te,le,Xt,!1)}function Gf(e,t,n){var a=ce;ce|=2;var l=I0(),i=P0();(Te!==e||le!==t)&&(bu=null,qi(e,t)),t=!1;var r=Ue;e:do try{if(pe!==0&&ne!==null){var s=ne,o=Yt;switch(pe){case 8:Dh(),r=6;break e;case 3:case 2:case 9:case 6:Jt.current===null&&(t=!0);var u=pe;if(pe=0,Yt=null,Ei(e,s,o,u),n&&Qi){r=0;break e}break;default:u=pe,pe=0,Yt=null,Ei(e,s,o,u)}}FE(),r=Ue;break}catch(c){F0(e,c)}while(!0);return t&&e.shellSuspendCounter++,da=Ll=null,ce=a,Q.H=l,Q.A=i,ne===null&&(Te=null,le=0,zu()),r}function FE(){for(;ne!==null;)W0(ne)}function JE(e,t){var n=ce;ce|=2;var a=I0(),l=P0();Te!==e||le!==t?(bu=null,yu=$t()+500,qi(e,t)):Qi=gs(e,t);e:do try{if(pe!==0&&ne!==null){t=ne;var i=Yt;t:switch(pe){case 1:pe=0,Yt=null,Ei(e,t,i,1);break;case 2:case 9:if(Gg(i)){pe=0,Yt=null,hy(t);break}t=function(){pe!==2&&pe!==9||Te!==e||(pe=7),qn(e)},i.then(t,t);break e;case 3:pe=7;break e;case 4:pe=5;break e;case 7:Gg(i)?(pe=0,Yt=null,hy(t)):(pe=0,Yt=null,Ei(e,t,i,7));break;case 5:var r=null;switch(ne.tag){case 26:r=ne.memoizedState;case 5:case 27:var s=ne;if(r?vv(r):s.stateNode.complete){pe=0,Yt=null;var o=s.sibling;if(o!==null)ne=o;else{var u=s.return;u!==null?(ne=u,Vu(u)):ne=null}break t}}pe=0,Yt=null,Ei(e,t,i,5);break;case 6:pe=0,Yt=null,Ei(e,t,i,6);break;case 8:Dh(),Ue=6;break e;default:throw Error(w(462))}}IE();break}catch(c){F0(e,c)}while(!0);return da=Ll=null,Q.H=a,Q.A=l,ce=n,ne!==null?0:(Te=null,le=0,zu(),Ue)}function IE(){for(;ne!==null&&!Sx();)W0(ne)}function W0(e){var t=w0(e.alternate,e,Sa);e.memoizedProps=e.pendingProps,t===null?Vu(e):ne=t}function hy(e){var t=e,n=t.alternate;switch(t.tag){case 15:case 0:t=ry(n,t,t.pendingProps,t.type,void 0,le);break;case 11:t=ry(n,t,t.pendingProps,t.type.render,t.ref,le);break;case 5:yh(t);default:R0(n,t),t=ne=Rb(t,Sa),t=w0(n,t,Sa)}e.memoizedProps=e.pendingProps,t===null?Vu(e):ne=t}function Ei(e,t,n,a){da=Ll=null,yh(t),Oi=null,rs=0;var l=t.return;try{if(qE(e,l,t,n,le)){Ue=1,pu(e,sn(n,e.current)),ne=null;return}}catch(i){if(l!==null)throw ne=l,i;Ue=1,pu(e,sn(n,e.current)),ne=null;return}t.flags&32768?(oe||a===1?e=!0:Qi||(le&536870912)!==0?e=!1:(qa=e=!0,(a===2||a===9||a===3||a===6)&&(a=Jt.current,a!==null&&a.tag===13&&(a.flags|=16384))),ev(t,e)):Vu(t)}function Vu(e){var t=e;do{if((t.flags&32768)!==0){ev(t,qa);return}e=t.return;var n=VE(t.alternate,t,Sa);if(n!==null){ne=n;return}if(t=t.sibling,t!==null){ne=t;return}ne=t=e}while(t!==null);Ue===0&&(Ue=5)}function ev(e,t){do{var n=GE(e.alternate,e);if(n!==null){n.flags&=32767,ne=n;return}if(n=e.return,n!==null&&(n.flags|=32768,n.subtreeFlags=0,n.deletions=null),!t&&(e=e.sibling,e!==null)){ne=e;return}ne=e=n}while(e!==null);Ue=6,ne=null}function py(e,t,n,a,l,i,r,s,o){e.cancelPendingCommit=null;do Gu();while(Fe!==0);if((ce&6)!==0)throw Error(w(327));if(t!==null){if(t===e.current)throw Error(w(177));if(i=t.lanes|t.childLanes,i|=ah,_x(e,n,i,r,s,o),e===Te&&(ne=Te=null,le=0),Bi=t,Za=e,ma=n,Cd=i,Dd=l,Q0=a,(t.subtreeFlags&10256)!==0||(t.flags&10256)!==0?(e.callbackNode=null,e.callbackPriority=0,tk(au,function(){return iv(),null})):(e.callbackNode=null,e.callbackPriority=0),a=(t.flags&13878)!==0,(t.subtreeFlags&13878)!==0||a){a=Q.T,Q.T=null,l=fe.p,fe.p=2,r=ce,ce|=4;try{XE(e,t,n)}finally{ce=r,fe.p=l,Q.T=a}}Fe=1,tv(),nv(),av()}}function tv(){if(Fe===1){Fe=0;var e=Za,t=Bi,n=(t.flags&13878)!==0;if((t.subtreeFlags&13878)!==0||n){n=Q.T,Q.T=null;var a=fe.p;fe.p=2;var l=ce;ce|=4;try{B0(t,e);var i=Hd,r=vb(e.containerInfo),s=i.focusedElem,o=i.selectionRange;if(r!==s&&s&&s.ownerDocument&&bb(s.ownerDocument.documentElement,s)){if(o!==null&&nh(s)){var u=o.start,c=o.end;if(c===void 0&&(c=u),"selectionStart"in s)s.selectionStart=u,s.selectionEnd=Math.min(c,s.value.length);else{var f=s.ownerDocument||document,d=f&&f.defaultView||window;if(d.getSelection){var p=d.getSelection(),S=s.textContent.length,y=Math.min(o.start,S),x=o.end===void 0?y:Math.min(o.end,S);!p.extend&&y>x&&(r=x,x=y,y=r);var h=Ug(s,y),m=Ug(s,x);if(h&&m&&(p.rangeCount!==1||p.anchorNode!==h.node||p.anchorOffset!==h.offset||p.focusNode!==m.node||p.focusOffset!==m.offset)){var b=f.createRange();b.setStart(h.node,h.offset),p.removeAllRanges(),y>x?(p.addRange(b),p.extend(m.node,m.offset)):(b.setEnd(m.node,m.offset),p.addRange(b))}}}}for(f=[],p=s;p=p.parentNode;)p.nodeType===1&&f.push({element:p,left:p.scrollLeft,top:p.scrollTop});for(typeof s.focus=="function"&&s.focus(),s=0;s<f.length;s++){var v=f[s];v.element.scrollLeft=v.left,v.element.scrollTop=v.top}}Ru=!!Ud,Hd=Ud=null}finally{ce=l,fe.p=a,Q.T=n}}e.current=t,Fe=2}}function nv(){if(Fe===2){Fe=0;var e=Za,t=Bi,n=(t.flags&8772)!==0;if((t.subtreeFlags&8772)!==0||n){n=Q.T,Q.T=null;var a=fe.p;fe.p=2;var l=ce;ce|=4;try{z0(e,t.alternate,t)}finally{ce=l,fe.p=a,Q.T=n}}Fe=3}}function av(){if(Fe===4||Fe===3){Fe=0,Tx();var e=Za,t=Bi,n=ma,a=Q0;(t.subtreeFlags&10256)!==0||(t.flags&10256)!==0?Fe=5:(Fe=0,Bi=Za=null,lv(e,e.pendingLanes));var l=e.pendingLanes;if(l===0&&(Qa=null),Fd(n),t=t.stateNode,Qt&&typeof Qt.onCommitFiberRoot=="function")try{Qt.onCommitFiberRoot(ms,t,void 0,(t.current.flags&128)===128)}catch(o){}if(a!==null){t=Q.T,l=fe.p,fe.p=2,Q.T=null;try{for(var i=e.onRecoverableError,r=0;r<a.length;r++){var s=a[r];i(s.value,{componentStack:s.stack})}}finally{Q.T=t,fe.p=l}}(ma&3)!==0&&Gu(),qn(e),l=e.pendingLanes,(n&261930)!==0&&(l&42)!==0?e===zd?Pr++:(Pr=0,zd=e):Pr=0,Es(0,!1)}}function lv(e,t){(e.pooledCacheLanes&=t)===0&&(t=e.pooledCache,t!=null&&(e.pooledCache=null,Ss(t)))}function Gu(){return tv(),nv(),av(),iv()}function iv(){if(Fe!==5)return!1;var e=Za,t=Cd;Cd=0;var n=Fd(ma),a=Q.T,l=fe.p;try{fe.p=32>n?32:n,Q.T=null,n=Dd,Dd=null;var i=Za,r=ma;if(Fe=0,Bi=Za=null,ma=0,(ce&6)!==0)throw Error(w(331));var s=ce;if(ce|=4,G0(i.current),j0(i,i.current,r,n),ce=s,Es(0,!1),Qt&&typeof Qt.onPostCommitFiberRoot=="function")try{Qt.onPostCommitFiberRoot(ms,i)}catch(o){}return!0}finally{fe.p=l,Q.T=a,lv(e,t)}}function my(e,t,n){t=sn(n,t),t=wd(e.stateNode,t,2),e=$a(e,t,2),e!==null&&(ys(e,2),qn(e))}function me(e,t,n){if(e.tag===3)my(e,e,n);else for(;t!==null;){if(t.tag===3){my(t,e,n);break}else if(t.tag===1){var a=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof a.componentDidCatch=="function"&&(Qa===null||!Qa.has(a))){e=sn(n,e),n=S0(2),a=$a(t,n,2),a!==null&&(T0(n,a,t,e),ys(a,2),qn(a));break}}t=t.return}}function Xf(e,t,n){var a=e.pingCache;if(a===null){a=e.pingCache=new ZE;var l=new Set;a.set(t,l)}else l=a.get(t),l===void 0&&(l=new Set,a.set(t,l));l.has(n)||(_h=!0,l.add(n),e=PE.bind(null,e,t,n),t.then(e,e))}function PE(e,t,n){var a=e.pingCache;a!==null&&a.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,Te===e&&(le&n)===n&&(Ue===4||Ue===3&&(le&62914560)===le&&300>$t()-ju?(ce&2)===0&&qi(e,0):Ch|=n,Hi===le&&(Hi=0)),qn(e)}function rv(e,t){t===0&&(t=Iy()),e=Ml(e,t),e!==null&&(ys(e,t),qn(e))}function WE(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),rv(e,n)}function ek(e,t){var n=0;switch(e.tag){case 31:case 13:var a=e.stateNode,l=e.memoizedState;l!==null&&(n=l.retryLane);break;case 19:a=e.stateNode;break;case 22:a=e.stateNode._retryCache;break;default:throw Error(w(314))}a!==null&&a.delete(t),rv(e,n)}function tk(e,t){return Zd(e,t)}var Su=null,fi=null,Md=!1,Tu=!1,$f=!1,Ya=0;function qn(e){e!==fi&&e.next===null&&(fi===null?Su=fi=e:fi=fi.next=e),Tu=!0,Md||(Md=!0,ak())}function Es(e,t){if(!$f&&Tu){$f=!0;do for(var n=!1,a=Su;a!==null;){if(!t)if(e!==0){var l=a.pendingLanes;if(l===0)var i=0;else{var r=a.suspendedLanes,s=a.pingedLanes;i=(1<<31-Zt(42|e)+1)-1,i&=l&~(r&~s),i=i&201326741?i&201326741|1:i?i|2:0}i!==0&&(n=!0,gy(a,i))}else i=le,i=Nu(a,a===Te?i:0,a.cancelPendingCommit!==null||a.timeoutHandle!==-1),(i&3)===0||gs(a,i)||(n=!0,gy(a,i));a=a.next}while(n);$f=!1}}function nk(){sv()}function sv(){Tu=Md=!1;var e=0;Ya!==0&&fk()&&(e=Ya);for(var t=$t(),n=null,a=Su;a!==null;){var l=a.next,i=ov(a,t);i===0?(a.next=null,n===null?Su=l:n.next=l,l===null&&(fi=n)):(n=a,(e!==0||(i&3)!==0)&&(Tu=!0)),a=l}Fe!==0&&Fe!==5||Es(e,!1),Ya!==0&&(Ya=0)}function ov(e,t){for(var n=e.suspendedLanes,a=e.pingedLanes,l=e.expirationTimes,i=e.pendingLanes&-62914561;0<i;){var r=31-Zt(i),s=1<<r,o=l[r];o===-1?((s&n)===0||(s&a)!==0)&&(l[r]=Nx(s,t)):o<=t&&(e.expiredLanes|=s),i&=~s}if(t=Te,n=le,n=Nu(e,e===t?n:0,e.cancelPendingCommit!==null||e.timeoutHandle!==-1),a=e.callbackNode,n===0||e===t&&(pe===2||pe===9)||e.cancelPendingCommit!==null)return a!==null&&a!==null&&Sf(a),e.callbackNode=null,e.callbackPriority=0;if((n&3)===0||gs(e,n)){if(t=n&-n,t===e.callbackPriority)return t;switch(a!==null&&Sf(a),Fd(n)){case 2:case 8:n=Fy;break;case 32:n=au;break;case 268435456:n=Jy;break;default:n=au}return a=uv.bind(null,e),n=Zd(n,a),e.callbackPriority=t,e.callbackNode=n,t}return a!==null&&a!==null&&Sf(a),e.callbackPriority=2,e.callbackNode=null,2}function uv(e,t){if(Fe!==0&&Fe!==5)return e.callbackNode=null,e.callbackPriority=0,null;var n=e.callbackNode;if(Gu()&&e.callbackNode!==n)return null;var a=le;return a=Nu(e,e===Te?a:0,e.cancelPendingCommit!==null||e.timeoutHandle!==-1),a===0?null:(K0(e,a,t),ov(e,$t()),e.callbackNode!=null&&e.callbackNode===n?uv.bind(null,e):null)}function gy(e,t){if(Gu())return null;K0(e,t,!0)}function ak(){hk(function(){(ce&6)!==0?Zd(Ky,nk):sv()})}function zh(){if(Ya===0){var e=Mi;e===0&&(e=xo,xo<<=1,(xo&261888)===0&&(xo=256)),Ya=e}return Ya}function yy(e){return e==null||typeof e=="symbol"||typeof e=="boolean"?null:typeof e=="function"?e:jo(""+e)}function by(e,t){var n=t.ownerDocument.createElement("input");return n.name=t.name,n.value=t.value,e.id&&n.setAttribute("form",e.id),t.parentNode.insertBefore(n,t),e=new FormData(e),n.parentNode.removeChild(n),e}function lk(e,t,n,a,l){if(t==="submit"&&n&&n.stateNode===l){var i=yy((l[_t]||null).action),r=a.submitter;r&&(t=(t=r[_t]||null)?yy(t.formAction):r.getAttribute("formAction"),t!==null&&(i=t,r=null));var s=new _u("action","action",null,a,l);e.push({event:s,listeners:[{instance:null,listener:function(){if(a.defaultPrevented){if(Ya!==0){var o=r?by(l,r):new FormData(l);kd(n,{pending:!0,data:o,method:l.method,action:i},null,o)}}else typeof i=="function"&&(s.preventDefault(),o=r?by(l,r):new FormData(l),kd(n,{pending:!0,data:o,method:l.method,action:i},i,o))},currentTarget:l}]})}}for(Mo=0;Mo<dd.length;Mo++)Lo=dd[Mo],vy=Lo.toLowerCase(),Sy=Lo[0].toUpperCase()+Lo.slice(1),En(vy,"on"+Sy);var Lo,vy,Sy,Mo;En(Tb,"onAnimationEnd");En(xb,"onAnimationIteration");En(Eb,"onAnimationStart");En("dblclick","onDoubleClick");En("focusin","onFocus");En("focusout","onBlur");En(xE,"onTransitionRun");En(EE,"onTransitionStart");En(kE,"onTransitionCancel");En(kb,"onTransitionEnd");Di("onMouseEnter",["mouseout","mouseover"]);Di("onMouseLeave",["mouseout","mouseover"]);Di("onPointerEnter",["pointerout","pointerover"]);Di("onPointerLeave",["pointerout","pointerover"]);Cl("onChange","change click focusin focusout input keydown keyup selectionchange".split(" "));Cl("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" "));Cl("onBeforeInput",["compositionend","keypress","textInput","paste"]);Cl("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" "));Cl("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" "));Cl("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var us="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),ik=new Set("beforetoggle cancel close invalid load scroll scrollend toggle".split(" ").concat(us));function cv(e,t){t=(t&4)!==0;for(var n=0;n<e.length;n++){var a=e[n],l=a.event;a=a.listeners;e:{var i=void 0;if(t)for(var r=a.length-1;0<=r;r--){var s=a[r],o=s.instance,u=s.currentTarget;if(s=s.listener,o!==i&&l.isPropagationStopped())break e;i=s,l.currentTarget=u;try{i(l)}catch(c){iu(c)}l.currentTarget=null,i=o}else for(r=0;r<a.length;r++){if(s=a[r],o=s.instance,u=s.currentTarget,s=s.listener,o!==i&&l.isPropagationStopped())break e;i=s,l.currentTarget=u;try{i(l)}catch(c){iu(c)}l.currentTarget=null,i=o}}}}function te(e,t){var n=t[ld];n===void 0&&(n=t[ld]=new Set);var a=e+"__bubble";n.has(a)||(fv(t,e,2,!1),n.add(a))}function Qf(e,t,n){var a=0;t&&(a|=4),fv(n,e,a,t)}var Uo="_reactListening"+Math.random().toString(36).slice(2);function Mh(e){if(!e[Uo]){e[Uo]=!0,nb.forEach(function(n){n!=="selectionchange"&&(ik.has(n)||Qf(n,!1,e),Qf(n,!0,e))});var t=e.nodeType===9?e:e.ownerDocument;t===null||t[Uo]||(t[Uo]=!0,Qf("selectionchange",!1,t))}}function fv(e,t,n,a){switch(kv(t)){case 2:var l=zk;break;case 8:l=Mk;break;default:l=Bh}n=l.bind(null,t,n,e),l=void 0,!ud||t!=="touchstart"&&t!=="touchmove"&&t!=="wheel"||(l=!0),a?l!==void 0?e.addEventListener(t,n,{capture:!0,passive:l}):e.addEventListener(t,n,!0):l!==void 0?e.addEventListener(t,n,{passive:l}):e.addEventListener(t,n,!1)}function Zf(e,t,n,a,l){var i=a;if((t&1)===0&&(t&2)===0&&a!==null)e:for(;;){if(a===null)return;var r=a.tag;if(r===3||r===4){var s=a.stateNode.containerInfo;if(s===l)break;if(r===4)for(r=a.return;r!==null;){var o=r.tag;if((o===3||o===4)&&r.stateNode.containerInfo===l)return;r=r.return}for(;s!==null;){if(r=pi(s),r===null)return;if(o=r.tag,o===5||o===6||o===26||o===27){a=i=r;continue e}s=s.parentNode}}a=a.return}cb(function(){var u=i,c=Pd(n),f=[];e:{var d=Ab.get(e);if(d!==void 0){var p=_u,S=e;switch(e){case"keypress":if(Vo(n)===0)break e;case"keydown":case"keyup":p=eE;break;case"focusin":S="focus",p=Af;break;case"focusout":S="blur",p=Af;break;case"beforeblur":case"afterblur":p=Af;break;case"click":if(n.button===2)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":p=Rg;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":p=Vx;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":p=aE;break;case Tb:case xb:case Eb:p=$x;break;case kb:p=iE;break;case"scroll":case"scrollend":p=jx;break;case"wheel":p=sE;break;case"copy":case"cut":case"paste":p=Zx;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":p=Ng;break;case"toggle":case"beforetoggle":p=uE}var y=(t&4)!==0,x=!y&&(e==="scroll"||e==="scrollend"),h=y?d!==null?d+"Capture":null:d;y=[];for(var m=u,b;m!==null;){var v=m;if(b=v.stateNode,v=v.tag,v!==5&&v!==26&&v!==27||b===null||h===null||(v=ts(m,h),v!=null&&y.push(cs(m,v,b))),x)break;m=m.return}0<y.length&&(d=new p(d,S,null,n,c),f.push({event:d,listeners:y}))}}if((t&7)===0){e:{if(d=e==="mouseover"||e==="pointerover",p=e==="mouseout"||e==="pointerout",d&&n!==od&&(S=n.relatedTarget||n.fromElement)&&(pi(S)||S[Vi]))break e;if((p||d)&&(d=c.window===c?c:(d=c.ownerDocument)?d.defaultView||d.parentWindow:window,p?(S=n.relatedTarget||n.toElement,p=u,S=S?pi(S):null,S!==null&&(x=ps(S),y=S.tag,S!==x||y!==5&&y!==27&&y!==6)&&(S=null)):(p=null,S=u),p!==S)){if(y=Rg,v="onMouseLeave",h="onMouseEnter",m="mouse",(e==="pointerout"||e==="pointerover")&&(y=Ng,v="onPointerLeave",h="onPointerEnter",m="pointer"),x=p==null?d:Br(p),b=S==null?d:Br(S),d=new y(v,m+"leave",p,n,c),d.target=x,d.relatedTarget=b,v=null,pi(c)===u&&(y=new y(h,m+"enter",S,n,c),y.target=b,y.relatedTarget=x,v=y),x=v,p&&S)t:{for(y=rk,h=p,m=S,b=0,v=h;v;v=y(v))b++;v=0;for(var E=m;E;E=y(E))v++;for(;0<b-v;)h=y(h),b--;for(;0<v-b;)m=y(m),v--;for(;b--;){if(h===m||m!==null&&h===m.alternate){y=h;break t}h=y(h),m=y(m)}y=null}else y=null;p!==null&&Ty(f,d,p,y,!1),S!==null&&x!==null&&Ty(f,x,S,y,!0)}}e:{if(d=u?Br(u):window,p=d.nodeName&&d.nodeName.toLowerCase(),p==="select"||p==="input"&&d.type==="file")var N=zg;else if(Dg(d))if(gb)N=vE;else{N=yE;var R=gE}else p=d.nodeName,!p||p.toLowerCase()!=="input"||d.type!=="checkbox"&&d.type!=="radio"?u&&Id(u.elementType)&&(N=zg):N=bE;if(N&&(N=N(e,u))){mb(f,N,n,c);break e}R&&R(e,d,u),e==="focusout"&&u&&d.type==="number"&&u.memoizedProps.value!=null&&sd(d,"number",d.value)}switch(R=u?Br(u):window,e){case"focusin":(Dg(R)||R.contentEditable==="true")&&(yi=R,cd=u,Gr=null);break;case"focusout":Gr=cd=yi=null;break;case"mousedown":fd=!0;break;case"contextmenu":case"mouseup":case"dragend":fd=!1,Hg(f,n,c);break;case"selectionchange":if(TE)break;case"keydown":case"keyup":Hg(f,n,c)}var C;if(th)e:{switch(e){case"compositionstart":var L="onCompositionStart";break e;case"compositionend":L="onCompositionEnd";break e;case"compositionupdate":L="onCompositionUpdate";break e}L=void 0}else gi?hb(e,n)&&(L="onCompositionEnd"):e==="keydown"&&n.keyCode===229&&(L="onCompositionStart");L&&(db&&n.locale!=="ko"&&(gi||L!=="onCompositionStart"?L==="onCompositionEnd"&&gi&&(C=fb()):(Ba=c,Wd="value"in Ba?Ba.value:Ba.textContent,gi=!0)),R=xu(u,L),0<R.length&&(L=new Og(L,e,null,n,c),f.push({event:L,listeners:R}),C?L.data=C:(C=pb(n),C!==null&&(L.data=C)))),(C=fE?dE(e,n):hE(e,n))&&(L=xu(u,"onBeforeInput"),0<L.length&&(R=new Og("onBeforeInput","beforeinput",null,n,c),f.push({event:R,listeners:L}),R.data=C)),lk(f,e,u,n,c)}cv(f,t)})}function cs(e,t,n){return{instance:e,listener:t,currentTarget:n}}function xu(e,t){for(var n=t+"Capture",a=[];e!==null;){var l=e,i=l.stateNode;if(l=l.tag,l!==5&&l!==26&&l!==27||i===null||(l=ts(e,n),l!=null&&a.unshift(cs(e,l,i)),l=ts(e,t),l!=null&&a.push(cs(e,l,i))),e.tag===3)return a;e=e.return}return[]}function rk(e){if(e===null)return null;do e=e.return;while(e&&e.tag!==5&&e.tag!==27);return e||null}function Ty(e,t,n,a,l){for(var i=t._reactName,r=[];n!==null&&n!==a;){var s=n,o=s.alternate,u=s.stateNode;if(s=s.tag,o!==null&&o===a)break;s!==5&&s!==26&&s!==27||u===null||(o=u,l?(u=ts(n,i),u!=null&&r.unshift(cs(n,u,o))):l||(u=ts(n,i),u!=null&&r.push(cs(n,u,o)))),n=n.return}r.length!==0&&e.push({event:t,listeners:r})}var sk=/\r\n?/g,ok=/\u0000|\uFFFD/g;function xy(e){return(typeof e=="string"?e:""+e).replace(sk,"\n").replace(ok,"")}function dv(e,t){return t=xy(t),xy(e)===t}function be(e,t,n,a,l,i){switch(n){case"children":typeof a=="string"?t==="body"||t==="textarea"&&a===""||zi(e,a):(typeof a=="number"||typeof a=="bigint")&&t!=="body"&&zi(e,""+a);break;case"className":Ao(e,"class",a);break;case"tabIndex":Ao(e,"tabindex",a);break;case"dir":case"role":case"viewBox":case"width":case"height":Ao(e,n,a);break;case"style":ub(e,a,i);break;case"data":if(t!=="object"){Ao(e,"data",a);break}case"src":case"href":if(a===""&&(t!=="a"||n!=="href")){e.removeAttribute(n);break}if(a==null||typeof a=="function"||typeof a=="symbol"||typeof a=="boolean"){e.removeAttribute(n);break}a=jo(""+a),e.setAttribute(n,a);break;case"action":case"formAction":if(typeof a=="function"){e.setAttribute(n,"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')");break}else typeof i=="function"&&(n==="formAction"?(t!=="input"&&be(e,t,"name",l.name,l,null),be(e,t,"formEncType",l.formEncType,l,null),be(e,t,"formMethod",l.formMethod,l,null),be(e,t,"formTarget",l.formTarget,l,null)):(be(e,t,"encType",l.encType,l,null),be(e,t,"method",l.method,l,null),be(e,t,"target",l.target,l,null)));if(a==null||typeof a=="symbol"||typeof a=="boolean"){e.removeAttribute(n);break}a=jo(""+a),e.setAttribute(n,a);break;case"onClick":a!=null&&(e.onclick=fa);break;case"onScroll":a!=null&&te("scroll",e);break;case"onScrollEnd":a!=null&&te("scrollend",e);break;case"dangerouslySetInnerHTML":if(a!=null){if(typeof a!="object"||!("__html"in a))throw Error(w(61));if(n=a.__html,n!=null){if(l.children!=null)throw Error(w(60));e.innerHTML=n}}break;case"multiple":e.multiple=a&&typeof a!="function"&&typeof a!="symbol";break;case"muted":e.muted=a&&typeof a!="function"&&typeof a!="symbol";break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"defaultValue":case"defaultChecked":case"innerHTML":case"ref":break;case"autoFocus":break;case"xlinkHref":if(a==null||typeof a=="function"||typeof a=="boolean"||typeof a=="symbol"){e.removeAttribute("xlink:href");break}n=jo(""+a),e.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",n);break;case"contentEditable":case"spellCheck":case"draggable":case"value":case"autoReverse":case"externalResourcesRequired":case"focusable":case"preserveAlpha":a!=null&&typeof a!="function"&&typeof a!="symbol"?e.setAttribute(n,""+a):e.removeAttribute(n);break;case"inert":case"allowFullScreen":case"async":case"autoPlay":case"controls":case"default":case"defer":case"disabled":case"disablePictureInPicture":case"disableRemotePlayback":case"formNoValidate":case"hidden":case"loop":case"noModule":case"noValidate":case"open":case"playsInline":case"readOnly":case"required":case"reversed":case"scoped":case"seamless":case"itemScope":a&&typeof a!="function"&&typeof a!="symbol"?e.setAttribute(n,""):e.removeAttribute(n);break;case"capture":case"download":a===!0?e.setAttribute(n,""):a!==!1&&a!=null&&typeof a!="function"&&typeof a!="symbol"?e.setAttribute(n,a):e.removeAttribute(n);break;case"cols":case"rows":case"size":case"span":a!=null&&typeof a!="function"&&typeof a!="symbol"&&!isNaN(a)&&1<=a?e.setAttribute(n,a):e.removeAttribute(n);break;case"rowSpan":case"start":a==null||typeof a=="function"||typeof a=="symbol"||isNaN(a)?e.removeAttribute(n):e.setAttribute(n,a);break;case"popover":te("beforetoggle",e),te("toggle",e),qo(e,"popover",a);break;case"xlinkActuate":aa(e,"http://www.w3.org/1999/xlink","xlink:actuate",a);break;case"xlinkArcrole":aa(e,"http://www.w3.org/1999/xlink","xlink:arcrole",a);break;case"xlinkRole":aa(e,"http://www.w3.org/1999/xlink","xlink:role",a);break;case"xlinkShow":aa(e,"http://www.w3.org/1999/xlink","xlink:show",a);break;case"xlinkTitle":aa(e,"http://www.w3.org/1999/xlink","xlink:title",a);break;case"xlinkType":aa(e,"http://www.w3.org/1999/xlink","xlink:type",a);break;case"xmlBase":aa(e,"http://www.w3.org/XML/1998/namespace","xml:base",a);break;case"xmlLang":aa(e,"http://www.w3.org/XML/1998/namespace","xml:lang",a);break;case"xmlSpace":aa(e,"http://www.w3.org/XML/1998/namespace","xml:space",a);break;case"is":qo(e,"is",a);break;case"innerText":case"textContent":break;default:(!(2<n.length)||n[0]!=="o"&&n[0]!=="O"||n[1]!=="n"&&n[1]!=="N")&&(n=Bx.get(n)||n,qo(e,n,a))}}function Ld(e,t,n,a,l,i){switch(n){case"style":ub(e,a,i);break;case"dangerouslySetInnerHTML":if(a!=null){if(typeof a!="object"||!("__html"in a))throw Error(w(61));if(n=a.__html,n!=null){if(l.children!=null)throw Error(w(60));e.innerHTML=n}}break;case"children":typeof a=="string"?zi(e,a):(typeof a=="number"||typeof a=="bigint")&&zi(e,""+a);break;case"onScroll":a!=null&&te("scroll",e);break;case"onScrollEnd":a!=null&&te("scrollend",e);break;case"onClick":a!=null&&(e.onclick=fa);break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"innerHTML":case"ref":break;case"innerText":case"textContent":break;default:if(!ab.hasOwnProperty(n))e:{if(n[0]==="o"&&n[1]==="n"&&(l=n.endsWith("Capture"),t=n.slice(2,l?n.length-7:void 0),i=e[_t]||null,i=i!=null?i[n]:null,typeof i=="function"&&e.removeEventListener(t,i,l),typeof a=="function")){typeof i!="function"&&i!==null&&(n in e?e[n]=null:e.hasAttribute(n)&&e.removeAttribute(n)),e.addEventListener(t,a,l);break e}n in e?e[n]=a:a===!0?e.setAttribute(n,""):qo(e,n,a)}}}function ct(e,t,n){switch(t){case"div":case"span":case"svg":case"path":case"a":case"g":case"p":case"li":break;case"img":te("error",e),te("load",e);var a=!1,l=!1,i;for(i in n)if(n.hasOwnProperty(i)){var r=n[i];if(r!=null)switch(i){case"src":a=!0;break;case"srcSet":l=!0;break;case"children":case"dangerouslySetInnerHTML":throw Error(w(137,t));default:be(e,t,i,r,n,null)}}l&&be(e,t,"srcSet",n.srcSet,n,null),a&&be(e,t,"src",n.src,n,null);return;case"input":te("invalid",e);var s=i=r=l=null,o=null,u=null;for(a in n)if(n.hasOwnProperty(a)){var c=n[a];if(c!=null)switch(a){case"name":l=c;break;case"type":r=c;break;case"checked":o=c;break;case"defaultChecked":u=c;break;case"value":i=c;break;case"defaultValue":s=c;break;case"children":case"dangerouslySetInnerHTML":if(c!=null)throw Error(w(137,t));break;default:be(e,t,a,c,n,null)}}rb(e,i,s,o,u,r,l,!1);return;case"select":te("invalid",e),a=r=i=null;for(l in n)if(n.hasOwnProperty(l)&&(s=n[l],s!=null))switch(l){case"value":i=s;break;case"defaultValue":r=s;break;case"multiple":a=s;default:be(e,t,l,s,n,null)}t=i,n=r,e.multiple=!!a,t!=null?Ai(e,!!a,t,!1):n!=null&&Ai(e,!!a,n,!0);return;case"textarea":te("invalid",e),i=l=a=null;for(r in n)if(n.hasOwnProperty(r)&&(s=n[r],s!=null))switch(r){case"value":a=s;break;case"defaultValue":l=s;break;case"children":i=s;break;case"dangerouslySetInnerHTML":if(s!=null)throw Error(w(91));break;default:be(e,t,r,s,n,null)}ob(e,a,l,i);return;case"option":for(o in n)n.hasOwnProperty(o)&&(a=n[o],a!=null)&&(o==="selected"?e.selected=a&&typeof a!="function"&&typeof a!="symbol":be(e,t,o,a,n,null));return;case"dialog":te("beforetoggle",e),te("toggle",e),te("cancel",e),te("close",e);break;case"iframe":case"object":te("load",e);break;case"video":case"audio":for(a=0;a<us.length;a++)te(us[a],e);break;case"image":te("error",e),te("load",e);break;case"details":te("toggle",e);break;case"embed":case"source":case"link":te("error",e),te("load",e);case"area":case"base":case"br":case"col":case"hr":case"keygen":case"meta":case"param":case"track":case"wbr":case"menuitem":for(u in n)if(n.hasOwnProperty(u)&&(a=n[u],a!=null))switch(u){case"children":case"dangerouslySetInnerHTML":throw Error(w(137,t));default:be(e,t,u,a,n,null)}return;default:if(Id(t)){for(c in n)n.hasOwnProperty(c)&&(a=n[c],a!==void 0&&Ld(e,t,c,a,n,void 0));return}}for(s in n)n.hasOwnProperty(s)&&(a=n[s],a!=null&&be(e,t,s,a,n,null))}function uk(e,t,n,a){switch(t){case"div":case"span":case"svg":case"path":case"a":case"g":case"p":case"li":break;case"input":var l=null,i=null,r=null,s=null,o=null,u=null,c=null;for(p in n){var f=n[p];if(n.hasOwnProperty(p)&&f!=null)switch(p){case"checked":break;case"value":break;case"defaultValue":o=f;default:a.hasOwnProperty(p)||be(e,t,p,null,a,f)}}for(var d in a){var p=a[d];if(f=n[d],a.hasOwnProperty(d)&&(p!=null||f!=null))switch(d){case"type":i=p;break;case"name":l=p;break;case"checked":u=p;break;case"defaultChecked":c=p;break;case"value":r=p;break;case"defaultValue":s=p;break;case"children":case"dangerouslySetInnerHTML":if(p!=null)throw Error(w(137,t));break;default:p!==f&&be(e,t,d,p,a,f)}}rd(e,r,s,o,u,c,i,l);return;case"select":p=r=s=d=null;for(i in n)if(o=n[i],n.hasOwnProperty(i)&&o!=null)switch(i){case"value":break;case"multiple":p=o;default:a.hasOwnProperty(i)||be(e,t,i,null,a,o)}for(l in a)if(i=a[l],o=n[l],a.hasOwnProperty(l)&&(i!=null||o!=null))switch(l){case"value":d=i;break;case"defaultValue":s=i;break;case"multiple":r=i;default:i!==o&&be(e,t,l,i,a,o)}t=s,n=r,a=p,d!=null?Ai(e,!!n,d,!1):!!a!=!!n&&(t!=null?Ai(e,!!n,t,!0):Ai(e,!!n,n?[]:"",!1));return;case"textarea":p=d=null;for(s in n)if(l=n[s],n.hasOwnProperty(s)&&l!=null&&!a.hasOwnProperty(s))switch(s){case"value":break;case"children":break;default:be(e,t,s,null,a,l)}for(r in a)if(l=a[r],i=n[r],a.hasOwnProperty(r)&&(l!=null||i!=null))switch(r){case"value":d=l;break;case"defaultValue":p=l;break;case"children":break;case"dangerouslySetInnerHTML":if(l!=null)throw Error(w(91));break;default:l!==i&&be(e,t,r,l,a,i)}sb(e,d,p);return;case"option":for(var S in n)d=n[S],n.hasOwnProperty(S)&&d!=null&&!a.hasOwnProperty(S)&&(S==="selected"?e.selected=!1:be(e,t,S,null,a,d));for(o in a)d=a[o],p=n[o],a.hasOwnProperty(o)&&d!==p&&(d!=null||p!=null)&&(o==="selected"?e.selected=d&&typeof d!="function"&&typeof d!="symbol":be(e,t,o,d,a,p));return;case"img":case"link":case"area":case"base":case"br":case"col":case"embed":case"hr":case"keygen":case"meta":case"param":case"source":case"track":case"wbr":case"menuitem":for(var y in n)d=n[y],n.hasOwnProperty(y)&&d!=null&&!a.hasOwnProperty(y)&&be(e,t,y,null,a,d);for(u in a)if(d=a[u],p=n[u],a.hasOwnProperty(u)&&d!==p&&(d!=null||p!=null))switch(u){case"children":case"dangerouslySetInnerHTML":if(d!=null)throw Error(w(137,t));break;default:be(e,t,u,d,a,p)}return;default:if(Id(t)){for(var x in n)d=n[x],n.hasOwnProperty(x)&&d!==void 0&&!a.hasOwnProperty(x)&&Ld(e,t,x,void 0,a,d);for(c in a)d=a[c],p=n[c],!a.hasOwnProperty(c)||d===p||d===void 0&&p===void 0||Ld(e,t,c,d,a,p);return}}for(var h in n)d=n[h],n.hasOwnProperty(h)&&d!=null&&!a.hasOwnProperty(h)&&be(e,t,h,null,a,d);for(f in a)d=a[f],p=n[f],!a.hasOwnProperty(f)||d===p||d==null&&p==null||be(e,t,f,d,a,p)}function Ey(e){switch(e){case"css":case"script":case"font":case"img":case"image":case"input":case"link":return!0;default:return!1}}function ck(){if(typeof performance.getEntriesByType=="function"){for(var e=0,t=0,n=performance.getEntriesByType("resource"),a=0;a<n.length;a++){var l=n[a],i=l.transferSize,r=l.initiatorType,s=l.duration;if(i&&s&&Ey(r)){for(r=0,s=l.responseEnd,a+=1;a<n.length;a++){var o=n[a],u=o.startTime;if(u>s)break;var c=o.transferSize,f=o.initiatorType;c&&Ey(f)&&(o=o.responseEnd,r+=c*(o<s?1:(s-u)/(o-u)))}if(--a,t+=8*(i+r)/(l.duration/1e3),e++,10<e)break}}if(0<e)return t/e/1e6}return navigator.connection&&(e=navigator.connection.downlink,typeof e=="number")?e:5}var Ud=null,Hd=null;function Eu(e){return e.nodeType===9?e:e.ownerDocument}function ky(e){switch(e){case"http://www.w3.org/2000/svg":return 1;case"http://www.w3.org/1998/Math/MathML":return 2;default:return 0}}function hv(e,t){if(e===0)switch(t){case"svg":return 1;case"math":return 2;default:return 0}return e===1&&t==="foreignObject"?0:e}function Bd(e,t){return e==="textarea"||e==="noscript"||typeof t.children=="string"||typeof t.children=="number"||typeof t.children=="bigint"||typeof t.dangerouslySetInnerHTML=="object"&&t.dangerouslySetInnerHTML!==null&&t.dangerouslySetInnerHTML.__html!=null}var Kf=null;function fk(){var e=window.event;return e&&e.type==="popstate"?e===Kf?!1:(Kf=e,!0):(Kf=null,!1)}var pv=typeof setTimeout=="function"?setTimeout:void 0,dk=typeof clearTimeout=="function"?clearTimeout:void 0,Ay=typeof Promise=="function"?Promise:void 0,hk=typeof queueMicrotask=="function"?queueMicrotask:typeof Ay<"u"?function(e){return Ay.resolve(null).then(e).catch(pk)}:pv;function pk(e){setTimeout(function(){throw e})}function nl(e){return e==="head"}function wy(e,t){var n=t,a=0;do{var l=n.nextSibling;if(e.removeChild(n),l&&l.nodeType===8)if(n=l.data,n==="/$"||n==="/&"){if(a===0){e.removeChild(l),Yi(t);return}a--}else if(n==="$"||n==="$?"||n==="$~"||n==="$!"||n==="&")a++;else if(n==="html")Wr(e.ownerDocument.documentElement);else if(n==="head"){n=e.ownerDocument.head,Wr(n);for(var i=n.firstChild;i;){var r=i.nextSibling,s=i.nodeName;i[bs]||s==="SCRIPT"||s==="STYLE"||s==="LINK"&&i.rel.toLowerCase()==="stylesheet"||n.removeChild(i),i=r}}else n==="body"&&Wr(e.ownerDocument.body);n=l}while(n);Yi(t)}function Ry(e,t){var n=e;e=0;do{var a=n.nextSibling;if(n.nodeType===1?t?(n._stashedDisplay=n.style.display,n.style.display="none"):(n.style.display=n._stashedDisplay||"",n.getAttribute("style")===""&&n.removeAttribute("style")):n.nodeType===3&&(t?(n._stashedText=n.nodeValue,n.nodeValue=""):n.nodeValue=n._stashedText||""),a&&a.nodeType===8)if(n=a.data,n==="/$"){if(e===0)break;e--}else n!=="$"&&n!=="$?"&&n!=="$~"&&n!=="$!"||e++;n=a}while(n)}function qd(e){var t=e.firstChild;for(t&&t.nodeType===10&&(t=t.nextSibling);t;){var n=t;switch(t=t.nextSibling,n.nodeName){case"HTML":case"HEAD":case"BODY":qd(n),Jd(n);continue;case"SCRIPT":case"STYLE":continue;case"LINK":if(n.rel.toLowerCase()==="stylesheet")continue}e.removeChild(n)}}function mk(e,t,n,a){for(;e.nodeType===1;){var l=n;if(e.nodeName.toLowerCase()!==t.toLowerCase()){if(!a&&(e.nodeName!=="INPUT"||e.type!=="hidden"))break}else if(a){if(!e[bs])switch(t){case"meta":if(!e.hasAttribute("itemprop"))break;return e;case"link":if(i=e.getAttribute("rel"),i==="stylesheet"&&e.hasAttribute("data-precedence"))break;if(i!==l.rel||e.getAttribute("href")!==(l.href==null||l.href===""?null:l.href)||e.getAttribute("crossorigin")!==(l.crossOrigin==null?null:l.crossOrigin)||e.getAttribute("title")!==(l.title==null?null:l.title))break;return e;case"style":if(e.hasAttribute("data-precedence"))break;return e;case"script":if(i=e.getAttribute("src"),(i!==(l.src==null?null:l.src)||e.getAttribute("type")!==(l.type==null?null:l.type)||e.getAttribute("crossorigin")!==(l.crossOrigin==null?null:l.crossOrigin))&&i&&e.hasAttribute("async")&&!e.hasAttribute("itemprop"))break;return e;default:return e}}else if(t==="input"&&e.type==="hidden"){var i=l.name==null?null:""+l.name;if(l.type==="hidden"&&e.getAttribute("name")===i)return e}else return e;if(e=cn(e.nextSibling),e===null)break}return null}function gk(e,t,n){if(t==="")return null;for(;e.nodeType!==3;)if((e.nodeType!==1||e.nodeName!=="INPUT"||e.type!=="hidden")&&!n||(e=cn(e.nextSibling),e===null))return null;return e}function mv(e,t){for(;e.nodeType!==8;)if((e.nodeType!==1||e.nodeName!=="INPUT"||e.type!=="hidden")&&!t||(e=cn(e.nextSibling),e===null))return null;return e}function jd(e){return e.data==="$?"||e.data==="$~"}function Yd(e){return e.data==="$!"||e.data==="$?"&&e.ownerDocument.readyState!=="loading"}function yk(e,t){var n=e.ownerDocument;if(e.data==="$~")e._reactRetry=t;else if(e.data!=="$?"||n.readyState!=="loading")t();else{var a=function(){t(),n.removeEventListener("DOMContentLoaded",a)};n.addEventListener("DOMContentLoaded",a),e._reactRetry=a}}function cn(e){for(;e!=null;e=e.nextSibling){var t=e.nodeType;if(t===1||t===3)break;if(t===8){if(t=e.data,t==="$"||t==="$!"||t==="$?"||t==="$~"||t==="&"||t==="F!"||t==="F")break;if(t==="/$"||t==="/&")return null}}return e}var Vd=null;function Oy(e){e=e.nextSibling;for(var t=0;e;){if(e.nodeType===8){var n=e.data;if(n==="/$"||n==="/&"){if(t===0)return cn(e.nextSibling);t--}else n!=="$"&&n!=="$!"&&n!=="$?"&&n!=="$~"&&n!=="&"||t++}e=e.nextSibling}return null}function Ny(e){e=e.previousSibling;for(var t=0;e;){if(e.nodeType===8){var n=e.data;if(n==="$"||n==="$!"||n==="$?"||n==="$~"||n==="&"){if(t===0)return e;t--}else n!=="/$"&&n!=="/&"||t++}e=e.previousSibling}return null}function gv(e,t,n){switch(t=Eu(n),e){case"html":if(e=t.documentElement,!e)throw Error(w(452));return e;case"head":if(e=t.head,!e)throw Error(w(453));return e;case"body":if(e=t.body,!e)throw Error(w(454));return e;default:throw Error(w(451))}}function Wr(e){for(var t=e.attributes;t.length;)e.removeAttributeNode(t[0]);Jd(e)}var fn=new Map,_y=new Set;function ku(e){return typeof e.getRootNode=="function"?e.getRootNode():e.nodeType===9?e:e.ownerDocument}var Ta=fe.d;fe.d={f:bk,r:vk,D:Sk,C:Tk,L:xk,m:Ek,X:Ak,S:kk,M:wk};function bk(){var e=Ta.f(),t=Yu();return e||t}function vk(e){var t=Gi(e);t!==null&&t.tag===5&&t.type==="form"?u0(t):Ta.r(e)}var Zi=typeof document>"u"?null:document;function yv(e,t,n){var a=Zi;if(a&&typeof t=="string"&&t){var l=rn(t);l='link[rel="'+e+'"][href="'+l+'"]',typeof n=="string"&&(l+='[crossorigin="'+n+'"]'),_y.has(l)||(_y.add(l),e={rel:e,crossOrigin:n,href:t},a.querySelector(l)===null&&(t=a.createElement("link"),ct(t,"link",e),nt(t),a.head.appendChild(t)))}}function Sk(e){Ta.D(e),yv("dns-prefetch",e,null)}function Tk(e,t){Ta.C(e,t),yv("preconnect",e,t)}function xk(e,t,n){Ta.L(e,t,n);var a=Zi;if(a&&e&&t){var l='link[rel="preload"][as="'+rn(t)+'"]';t==="image"&&n&&n.imageSrcSet?(l+='[imagesrcset="'+rn(n.imageSrcSet)+'"]',typeof n.imageSizes=="string"&&(l+='[imagesizes="'+rn(n.imageSizes)+'"]')):l+='[href="'+rn(e)+'"]';var i=l;switch(t){case"style":i=ji(e);break;case"script":i=Ki(e)}fn.has(i)||(e=Ne({rel:"preload",href:t==="image"&&n&&n.imageSrcSet?void 0:e,as:t},n),fn.set(i,e),a.querySelector(l)!==null||t==="style"&&a.querySelector(ks(i))||t==="script"&&a.querySelector(As(i))||(t=a.createElement("link"),ct(t,"link",e),nt(t),a.head.appendChild(t)))}}function Ek(e,t){Ta.m(e,t);var n=Zi;if(n&&e){var a=t&&typeof t.as=="string"?t.as:"script",l='link[rel="modulepreload"][as="'+rn(a)+'"][href="'+rn(e)+'"]',i=l;switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":i=Ki(e)}if(!fn.has(i)&&(e=Ne({rel:"modulepreload",href:e},t),fn.set(i,e),n.querySelector(l)===null)){switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(n.querySelector(As(i)))return}a=n.createElement("link"),ct(a,"link",e),nt(a),n.head.appendChild(a)}}}function kk(e,t,n){Ta.S(e,t,n);var a=Zi;if(a&&e){var l=ki(a).hoistableStyles,i=ji(e);t=t||"default";var r=l.get(i);if(!r){var s={loading:0,preload:null};if(r=a.querySelector(ks(i)))s.loading=5;else{e=Ne({rel:"stylesheet",href:e,"data-precedence":t},n),(n=fn.get(i))&&Lh(e,n);var o=r=a.createElement("link");nt(o),ct(o,"link",e),o._p=new Promise(function(u,c){o.onload=u,o.onerror=c}),o.addEventListener("load",function(){s.loading|=1}),o.addEventListener("error",function(){s.loading|=2}),s.loading|=4,Jo(r,t,a)}r={type:"stylesheet",instance:r,count:1,state:s},l.set(i,r)}}}function Ak(e,t){Ta.X(e,t);var n=Zi;if(n&&e){var a=ki(n).hoistableScripts,l=Ki(e),i=a.get(l);i||(i=n.querySelector(As(l)),i||(e=Ne({src:e,async:!0},t),(t=fn.get(l))&&Uh(e,t),i=n.createElement("script"),nt(i),ct(i,"link",e),n.head.appendChild(i)),i={type:"script",instance:i,count:1,state:null},a.set(l,i))}}function wk(e,t){Ta.M(e,t);var n=Zi;if(n&&e){var a=ki(n).hoistableScripts,l=Ki(e),i=a.get(l);i||(i=n.querySelector(As(l)),i||(e=Ne({src:e,async:!0,type:"module"},t),(t=fn.get(l))&&Uh(e,t),i=n.createElement("script"),nt(i),ct(i,"link",e),n.head.appendChild(i)),i={type:"script",instance:i,count:1,state:null},a.set(l,i))}}function Cy(e,t,n,a){var l=(l=Va.current)?ku(l):null;if(!l)throw Error(w(446));switch(e){case"meta":case"title":return null;case"style":return typeof n.precedence=="string"&&typeof n.href=="string"?(t=ji(n.href),n=ki(l).hoistableStyles,a=n.get(t),a||(a={type:"style",instance:null,count:0,state:null},n.set(t,a)),a):{type:"void",instance:null,count:0,state:null};case"link":if(n.rel==="stylesheet"&&typeof n.href=="string"&&typeof n.precedence=="string"){e=ji(n.href);var i=ki(l).hoistableStyles,r=i.get(e);if(r||(l=l.ownerDocument||l,r={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},i.set(e,r),(i=l.querySelector(ks(e)))&&!i._p&&(r.instance=i,r.state.loading=5),fn.has(e)||(n={rel:"preload",as:"style",href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},fn.set(e,n),i||Rk(l,e,n,r.state))),t&&a===null)throw Error(w(528,""));return r}if(t&&a!==null)throw Error(w(529,""));return null;case"script":return t=n.async,n=n.src,typeof n=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(t=Ki(n),n=ki(l).hoistableScripts,a=n.get(t),a||(a={type:"script",instance:null,count:0,state:null},n.set(t,a)),a):{type:"void",instance:null,count:0,state:null};default:throw Error(w(444,e))}}function ji(e){return'href="'+rn(e)+'"'}function ks(e){return'link[rel="stylesheet"]['+e+"]"}function bv(e){return Ne({},e,{"data-precedence":e.precedence,precedence:null})}function Rk(e,t,n,a){e.querySelector('link[rel="preload"][as="style"]['+t+"]")?a.loading=1:(t=e.createElement("link"),a.preload=t,t.addEventListener("load",function(){return a.loading|=1}),t.addEventListener("error",function(){return a.loading|=2}),ct(t,"link",n),nt(t),e.head.appendChild(t))}function Ki(e){return'[src="'+rn(e)+'"]'}function As(e){return"script[async]"+e}function Dy(e,t,n){if(t.count++,t.instance===null)switch(t.type){case"style":var a=e.querySelector('style[data-href~="'+rn(n.href)+'"]');if(a)return t.instance=a,nt(a),a;var l=Ne({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return a=(e.ownerDocument||e).createElement("style"),nt(a),ct(a,"style",l),Jo(a,n.precedence,e),t.instance=a;case"stylesheet":l=ji(n.href);var i=e.querySelector(ks(l));if(i)return t.state.loading|=4,t.instance=i,nt(i),i;a=bv(n),(l=fn.get(l))&&Lh(a,l),i=(e.ownerDocument||e).createElement("link"),nt(i);var r=i;return r._p=new Promise(function(s,o){r.onload=s,r.onerror=o}),ct(i,"link",a),t.state.loading|=4,Jo(i,n.precedence,e),t.instance=i;case"script":return i=Ki(n.src),(l=e.querySelector(As(i)))?(t.instance=l,nt(l),l):(a=n,(l=fn.get(i))&&(a=Ne({},n),Uh(a,l)),e=e.ownerDocument||e,l=e.createElement("script"),nt(l),ct(l,"link",a),e.head.appendChild(l),t.instance=l);case"void":return null;default:throw Error(w(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(a=t.instance,t.state.loading|=4,Jo(a,n.precedence,e));return t.instance}function Jo(e,t,n){for(var a=n.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),l=a.length?a[a.length-1]:null,i=l,r=0;r<a.length;r++){var s=a[r];if(s.dataset.precedence===t)i=s;else if(i!==l)break}i?i.parentNode.insertBefore(e,i.nextSibling):(t=n.nodeType===9?n.head:n,t.insertBefore(e,t.firstChild))}function Lh(e,t){e.crossOrigin==null&&(e.crossOrigin=t.crossOrigin),e.referrerPolicy==null&&(e.referrerPolicy=t.referrerPolicy),e.title==null&&(e.title=t.title)}function Uh(e,t){e.crossOrigin==null&&(e.crossOrigin=t.crossOrigin),e.referrerPolicy==null&&(e.referrerPolicy=t.referrerPolicy),e.integrity==null&&(e.integrity=t.integrity)}var Io=null;function zy(e,t,n){if(Io===null){var a=new Map,l=Io=new Map;l.set(n,a)}else l=Io,a=l.get(n),a||(a=new Map,l.set(n,a));if(a.has(e))return a;for(a.set(e,null),n=n.getElementsByTagName(e),l=0;l<n.length;l++){var i=n[l];if(!(i[bs]||i[st]||e==="link"&&i.getAttribute("rel")==="stylesheet")&&i.namespaceURI!=="http://www.w3.org/2000/svg"){var r=i.getAttribute(t)||"";r=e+r;var s=a.get(r);s?s.push(i):a.set(r,[i])}}return a}function My(e,t,n){e=e.ownerDocument||e,e.head.insertBefore(n,t==="title"?e.querySelector("head > title"):null)}function Ok(e,t,n){if(n===1||t.itemProp!=null)return!1;switch(e){case"meta":case"title":return!0;case"style":if(typeof t.precedence!="string"||typeof t.href!="string"||t.href==="")break;return!0;case"link":if(typeof t.rel!="string"||typeof t.href!="string"||t.href===""||t.onLoad||t.onError)break;return t.rel==="stylesheet"?(e=t.disabled,typeof t.precedence=="string"&&e==null):!0;case"script":if(t.async&&typeof t.async!="function"&&typeof t.async!="symbol"&&!t.onLoad&&!t.onError&&t.src&&typeof t.src=="string")return!0}return!1}function vv(e){return!(e.type==="stylesheet"&&(e.state.loading&3)===0)}function Nk(e,t,n,a){if(n.type==="stylesheet"&&(typeof a.media!="string"||matchMedia(a.media).matches!==!1)&&(n.state.loading&4)===0){if(n.instance===null){var l=ji(a.href),i=t.querySelector(ks(l));if(i){t=i._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(e.count++,e=Au.bind(e),t.then(e,e)),n.state.loading|=4,n.instance=i,nt(i);return}i=t.ownerDocument||t,a=bv(a),(l=fn.get(l))&&Lh(a,l),i=i.createElement("link"),nt(i);var r=i;r._p=new Promise(function(s,o){r.onload=s,r.onerror=o}),ct(i,"link",a),n.instance=i}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(n,t),(t=n.state.preload)&&(n.state.loading&3)===0&&(e.count++,n=Au.bind(e),t.addEventListener("load",n),t.addEventListener("error",n))}}var Ff=0;function _k(e,t){return e.stylesheets&&e.count===0&&Po(e,e.stylesheets),0<e.count||0<e.imgCount?function(n){var a=setTimeout(function(){if(e.stylesheets&&Po(e,e.stylesheets),e.unsuspend){var i=e.unsuspend;e.unsuspend=null,i()}},6e4+t);0<e.imgBytes&&Ff===0&&(Ff=62500*ck());var l=setTimeout(function(){if(e.waitingForImages=!1,e.count===0&&(e.stylesheets&&Po(e,e.stylesheets),e.unsuspend)){var i=e.unsuspend;e.unsuspend=null,i()}},(e.imgBytes>Ff?50:800)+t);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(a),clearTimeout(l)}}:null}function Au(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Po(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var wu=null;function Po(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,wu=new Map,t.forEach(Ck,e),wu=null,Au.call(e))}function Ck(e,t){if(!(t.state.loading&4)){var n=wu.get(e);if(n)var a=n.get(null);else{n=new Map,wu.set(e,n);for(var l=e.querySelectorAll("link[data-precedence],style[data-precedence]"),i=0;i<l.length;i++){var r=l[i];(r.nodeName==="LINK"||r.getAttribute("media")!=="not all")&&(n.set(r.dataset.precedence,r),a=r)}a&&n.set(null,a)}l=t.instance,r=l.getAttribute("data-precedence"),i=n.get(r)||a,i===a&&n.set(null,l),n.set(r,l),this.count++,a=Au.bind(this),l.addEventListener("load",a),l.addEventListener("error",a),i?i.parentNode.insertBefore(l,i.nextSibling):(e=e.nodeType===9?e.head:e,e.insertBefore(l,e.firstChild)),t.state.loading|=4}}var fs={$$typeof:ca,Provider:null,Consumer:null,_currentValue:Tl,_currentValue2:Tl,_threadCount:0};function Dk(e,t,n,a,l,i,r,s,o){this.tag=1,this.containerInfo=e,this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.next=this.pendingContext=this.context=this.cancelPendingCommit=null,this.callbackPriority=0,this.expirationTimes=Tf(-1),this.entangledLanes=this.shellSuspendCounter=this.errorRecoveryDisabledLanes=this.expiredLanes=this.warmLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Tf(0),this.hiddenUpdates=Tf(null),this.identifierPrefix=a,this.onUncaughtError=l,this.onCaughtError=i,this.onRecoverableError=r,this.pooledCache=null,this.pooledCacheLanes=0,this.formState=o,this.incompleteTransitions=new Map}function Sv(e,t,n,a,l,i,r,s,o,u,c,f){return e=new Dk(e,t,n,r,o,u,c,f,s),t=1,i===!0&&(t|=24),i=Gt(3,null,null,t),e.current=i,i.stateNode=e,t=oh(),t.refCount++,e.pooledCache=t,t.refCount++,i.memoizedState={element:a,isDehydrated:n,cache:t},fh(i),e}function Tv(e){return e?(e=Si,e):Si}function xv(e,t,n,a,l,i){l=Tv(l),a.context===null?a.context=l:a.pendingContext=l,a=Xa(t),a.payload={element:n},i=i===void 0?null:i,i!==null&&(a.callback=i),n=$a(e,a,t),n!==null&&(Nt(n,e,t),$r(n,e,t))}function Ly(e,t){if(e=e.memoizedState,e!==null&&e.dehydrated!==null){var n=e.retryLane;e.retryLane=n!==0&&n<t?n:t}}function Hh(e,t){Ly(e,t),(e=e.alternate)&&Ly(e,t)}function Ev(e){if(e.tag===13||e.tag===31){var t=Ml(e,67108864);t!==null&&Nt(t,e,67108864),Hh(e,67108864)}}function Uy(e){if(e.tag===13||e.tag===31){var t=Kt();t=Kd(t);var n=Ml(e,t);n!==null&&Nt(n,e,t),Hh(e,t)}}var Ru=!0;function zk(e,t,n,a){var l=Q.T;Q.T=null;var i=fe.p;try{fe.p=2,Bh(e,t,n,a)}finally{fe.p=i,Q.T=l}}function Mk(e,t,n,a){var l=Q.T;Q.T=null;var i=fe.p;try{fe.p=8,Bh(e,t,n,a)}finally{fe.p=i,Q.T=l}}function Bh(e,t,n,a){if(Ru){var l=Gd(a);if(l===null)Zf(e,t,a,Ou,n),Hy(e,a);else if(Uk(l,e,t,n,a))a.stopPropagation();else if(Hy(e,a),t&4&&-1<Lk.indexOf(e)){for(;l!==null;){var i=Gi(l);if(i!==null)switch(i.tag){case 3:if(i=i.stateNode,i.current.memoizedState.isDehydrated){var r=bl(i.pendingLanes);if(r!==0){var s=i;for(s.pendingLanes|=2,s.entangledLanes|=2;r;){var o=1<<31-Zt(r);s.entanglements[1]|=o,r&=~o}qn(i),(ce&6)===0&&(yu=$t()+500,Es(0,!1))}}break;case 31:case 13:s=Ml(i,2),s!==null&&Nt(s,i,2),Yu(),Hh(i,2)}if(i=Gd(a),i===null&&Zf(e,t,a,Ou,n),i===l)break;l=i}l!==null&&a.stopPropagation()}else Zf(e,t,a,null,n)}}function Gd(e){return e=Pd(e),qh(e)}var Ou=null;function qh(e){if(Ou=null,e=pi(e),e!==null){var t=ps(e);if(t===null)e=null;else{var n=t.tag;if(n===13){if(e=Gy(t),e!==null)return e;e=null}else if(n===31){if(e=Xy(t),e!==null)return e;e=null}else if(n===3){if(t.stateNode.current.memoizedState.isDehydrated)return t.tag===3?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null)}}return Ou=e,null}function kv(e){switch(e){case"beforetoggle":case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"toggle":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 2;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 8;case"message":switch(xx()){case Ky:return 2;case Fy:return 8;case au:case Ex:return 32;case Jy:return 268435456;default:return 32}default:return 32}}var Xd=!1,Ka=null,Fa=null,Ja=null,ds=new Map,hs=new Map,Ua=[],Lk="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset".split(" ");function Hy(e,t){switch(e){case"focusin":case"focusout":Ka=null;break;case"dragenter":case"dragleave":Fa=null;break;case"mouseover":case"mouseout":Ja=null;break;case"pointerover":case"pointerout":ds.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":hs.delete(t.pointerId)}}function Mr(e,t,n,a,l,i){return e===null||e.nativeEvent!==i?(e={blockedOn:t,domEventName:n,eventSystemFlags:a,nativeEvent:i,targetContainers:[l]},t!==null&&(t=Gi(t),t!==null&&Ev(t)),e):(e.eventSystemFlags|=a,t=e.targetContainers,l!==null&&t.indexOf(l)===-1&&t.push(l),e)}function Uk(e,t,n,a,l){switch(t){case"focusin":return Ka=Mr(Ka,e,t,n,a,l),!0;case"dragenter":return Fa=Mr(Fa,e,t,n,a,l),!0;case"mouseover":return Ja=Mr(Ja,e,t,n,a,l),!0;case"pointerover":var i=l.pointerId;return ds.set(i,Mr(ds.get(i)||null,e,t,n,a,l)),!0;case"gotpointercapture":return i=l.pointerId,hs.set(i,Mr(hs.get(i)||null,e,t,n,a,l)),!0}return!1}function Av(e){var t=pi(e.target);if(t!==null){var n=ps(t);if(n!==null){if(t=n.tag,t===13){if(t=Gy(n),t!==null){e.blockedOn=t,Sg(e.priority,function(){Uy(n)});return}}else if(t===31){if(t=Xy(n),t!==null){e.blockedOn=t,Sg(e.priority,function(){Uy(n)});return}}else if(t===3&&n.stateNode.current.memoizedState.isDehydrated){e.blockedOn=n.tag===3?n.stateNode.containerInfo:null;return}}}e.blockedOn=null}function Wo(e){if(e.blockedOn!==null)return!1;for(var t=e.targetContainers;0<t.length;){var n=Gd(e.nativeEvent);if(n===null){n=e.nativeEvent;var a=new n.constructor(n.type,n);od=a,n.target.dispatchEvent(a),od=null}else return t=Gi(n),t!==null&&Ev(t),e.blockedOn=n,!1;t.shift()}return!0}function By(e,t,n){Wo(e)&&n.delete(t)}function Hk(){Xd=!1,Ka!==null&&Wo(Ka)&&(Ka=null),Fa!==null&&Wo(Fa)&&(Fa=null),Ja!==null&&Wo(Ja)&&(Ja=null),ds.forEach(By),hs.forEach(By)}function Ho(e,t){e.blockedOn===t&&(e.blockedOn=null,Xd||(Xd=!0,Je.unstable_scheduleCallback(Je.unstable_NormalPriority,Hk)))}var Bo=null;function qy(e){Bo!==e&&(Bo=e,Je.unstable_scheduleCallback(Je.unstable_NormalPriority,function(){Bo===e&&(Bo=null);for(var t=0;t<e.length;t+=3){var n=e[t],a=e[t+1],l=e[t+2];if(typeof a!="function"){if(qh(a||n)===null)continue;break}var i=Gi(n);i!==null&&(e.splice(t,3),t-=3,kd(i,{pending:!0,data:l,method:n.method,action:a},a,l))}}))}function Yi(e){function t(o){return Ho(o,e)}Ka!==null&&Ho(Ka,e),Fa!==null&&Ho(Fa,e),Ja!==null&&Ho(Ja,e),ds.forEach(t),hs.forEach(t);for(var n=0;n<Ua.length;n++){var a=Ua[n];a.blockedOn===e&&(a.blockedOn=null)}for(;0<Ua.length&&(n=Ua[0],n.blockedOn===null);)Av(n),n.blockedOn===null&&Ua.shift();if(n=(e.ownerDocument||e).$$reactFormReplay,n!=null)for(a=0;a<n.length;a+=3){var l=n[a],i=n[a+1],r=l[_t]||null;if(typeof i=="function")r||qy(n);else if(r){var s=null;if(i&&i.hasAttribute("formAction")){if(l=i,r=i[_t]||null)s=r.formAction;else if(qh(l)!==null)continue}else s=r.action;typeof s=="function"?n[a+1]=s:(n.splice(a,3),a-=3),qy(n)}}}function wv(){function e(i){i.canIntercept&&i.info==="react-transition"&&i.intercept({handler:function(){return new Promise(function(r){return l=r})},focusReset:"manual",scroll:"manual"})}function t(){l!==null&&(l(),l=null),a||setTimeout(n,20)}function n(){if(!a&&!navigation.transition){var i=navigation.currentEntry;i&&i.url!=null&&navigation.navigate(i.url,{state:i.getState(),info:"react-transition",history:"replace"})}}if(typeof navigation=="object"){var a=!1,l=null;return navigation.addEventListener("navigate",e),navigation.addEventListener("navigatesuccess",t),navigation.addEventListener("navigateerror",t),setTimeout(n,100),function(){a=!0,navigation.removeEventListener("navigate",e),navigation.removeEventListener("navigatesuccess",t),navigation.removeEventListener("navigateerror",t),l!==null&&(l(),l=null)}}}function jh(e){this._internalRoot=e}Xu.prototype.render=jh.prototype.render=function(e){var t=this._internalRoot;if(t===null)throw Error(w(409));var n=t.current,a=Kt();xv(n,a,e,t,null,null)};Xu.prototype.unmount=jh.prototype.unmount=function(){var e=this._internalRoot;if(e!==null){this._internalRoot=null;var t=e.containerInfo;xv(e.current,2,null,e,null,null),Yu(),t[Vi]=null}};function Xu(e){this._internalRoot=e}Xu.prototype.unstable_scheduleHydration=function(e){if(e){var t=tb();e={blockedOn:null,target:e,priority:t};for(var n=0;n<Ua.length&&t!==0&&t<Ua[n].priority;n++);Ua.splice(n,0,e),n===0&&Av(e)}};var jy=Yy.version;if(jy!=="19.2.6")throw Error(w(527,jy,"19.2.6"));fe.findDOMNode=function(e){var t=e._reactInternals;if(t===void 0)throw typeof e.render=="function"?Error(w(188)):(e=Object.keys(e).join(","),Error(w(268,e)));return e=mx(t),e=e!==null?$y(e):null,e=e===null?null:e.stateNode,e};var Bk={bundleType:0,version:"19.2.6",rendererPackageName:"react-dom",currentDispatcherRef:Q,reconcilerVersion:"19.2.6"};if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&(Lr=__REACT_DEVTOOLS_GLOBAL_HOOK__,!Lr.isDisabled&&Lr.supportsFiber))try{ms=Lr.inject(Bk),Qt=Lr}catch(e){}var Lr;$u.createRoot=function(e,t){if(!Vy(e))throw Error(w(299));var n=!1,a="",l=y0,i=b0,r=v0;return t!=null&&(t.unstable_strictMode===!0&&(n=!0),t.identifierPrefix!==void 0&&(a=t.identifierPrefix),t.onUncaughtError!==void 0&&(l=t.onUncaughtError),t.onCaughtError!==void 0&&(i=t.onCaughtError),t.onRecoverableError!==void 0&&(r=t.onRecoverableError)),t=Sv(e,1,!1,null,null,n,a,null,l,i,r,wv),e[Vi]=t.current,Mh(e),new jh(t)};$u.hydrateRoot=function(e,t,n){if(!Vy(e))throw Error(w(299));var a=!1,l="",i=y0,r=b0,s=v0,o=null;return n!=null&&(n.unstable_strictMode===!0&&(a=!0),n.identifierPrefix!==void 0&&(l=n.identifierPrefix),n.onUncaughtError!==void 0&&(i=n.onUncaughtError),n.onCaughtError!==void 0&&(r=n.onCaughtError),n.onRecoverableError!==void 0&&(s=n.onRecoverableError),n.formState!==void 0&&(o=n.formState)),t=Sv(e,1,!0,t,n!=null?n:null,a,l,o,i,r,s,wv),t.context=Tv(null),n=t.current,a=Kt(),a=Kd(a),l=Xa(a),l.callback=null,$a(n,l,a),n=a,t.current.lanes=n,ys(t,n),qn(t),e[Vi]=t.current,Mh(e),new Xu(t)};$u.version="19.2.6"});var _v=qt((CN,Nv)=>{"use strict";function Ov(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Ov)}catch(e){console.error(e)}}Ov(),Nv.exports=Rv()});var ES=qt(uc=>{"use strict";var sA=Symbol.for("react.transitional.element"),oA=Symbol.for("react.fragment");function xS(e,t,n){var a=null;if(n!==void 0&&(a=""+n),t.key!==void 0&&(a=""+t.key),"key"in t){n={};for(var l in t)l!=="key"&&(n[l]=t[l])}else n=t;return t=n.ref,{$$typeof:sA,type:e,key:a,ref:t!==void 0?t:null,props:n}}uc.Fragment=oA;uc.jsx=xS;uc.jsxs=xS});var Me=qt(($2,kS)=>{"use strict";kS.exports=ES()});var Z=e=>typeof e=="string",mr=()=>{let e,t,n=new Promise((a,l)=>{e=a,t=l});return n.resolve=e,n.reject=t,n},Gp=e=>e==null?"":String(e),j1=(e,t,n)=>{e.forEach(a=>{t[a]&&(n[a]=t[a])})},Y1=/###/g,Xp=e=>e&&e.includes("###")?e.replace(Y1,"."):e,$p=e=>!e||Z(e),gr=(e,t,n)=>{let a=Z(t)?t.split("."):t,l=0;for(;l<a.length-1;){if($p(e))return{};let i=Xp(a[l]);!e[i]&&n&&(e[i]=new n),Object.prototype.hasOwnProperty.call(e,i)?e=e[i]:e={},++l}return $p(e)?{}:{obj:e,k:Xp(a[l])}},Qp=(e,t,n)=>{let{obj:a,k:l}=gr(e,t,Object);if(a!==void 0||t.length===1){a[l]=n;return}let i=t[t.length-1],r=t.slice(0,t.length-1),s=gr(e,r,Object);for(;s.obj===void 0&&r.length;)i="".concat(r[r.length-1],".").concat(i),r=r.slice(0,r.length-1),s=gr(e,r,Object),s!=null&&s.obj&&typeof s.obj["".concat(s.k,".").concat(i)]<"u"&&(s.obj=void 0);s.obj["".concat(s.k,".").concat(i)]=n},V1=(e,t,n,a)=>{let{obj:l,k:i}=gr(e,t,Object);l[i]=l[i]||[],l[i].push(n)},Ws=(e,t)=>{let{obj:n,k:a}=gr(e,t);if(n&&Object.prototype.hasOwnProperty.call(n,a))return n[a]},G1=(e,t,n)=>{let a=Ws(e,n);return a!==void 0?a:Ws(t,n)},Pp=(e,t,n)=>{for(let a in t)a!=="__proto__"&&a!=="constructor"&&(a in e?Z(e[a])||e[a]instanceof String||Z(t[a])||t[a]instanceof String?n&&(e[a]=t[a]):Pp(e[a],t[a],n):e[a]=t[a]);return e},ea=e=>e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&"),X1={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"},$1=e=>Z(e)?e.replace(/[&<>"'\/]/g,t=>X1[t]):e,Hc=class{constructor(t){this.capacity=t,this.regExpMap=new Map,this.regExpQueue=[]}getRegExp(t){let n=this.regExpMap.get(t);if(n!==void 0)return n;let a=new RegExp(t);return this.regExpQueue.length===this.capacity&&this.regExpMap.delete(this.regExpQueue.shift()),this.regExpMap.set(t,a),this.regExpQueue.push(t),a}},Q1=[" ",",","?","!",";"],Z1=new Hc(20),K1=(e,t,n)=>{t=t||"",n=n||"";let a=Q1.filter(r=>!t.includes(r)&&!n.includes(r));if(a.length===0)return!0;let l=Z1.getRegExp("(".concat(a.map(r=>r==="?"?"\\?":r).join("|"),")")),i=!l.test(e);if(!i){let r=e.indexOf(n);r>0&&!l.test(e.substring(0,r))&&(i=!0)}return i},Bc=(e,t,n=".")=>{if(!e)return;if(e[t])return Object.prototype.hasOwnProperty.call(e,t)?e[t]:void 0;let a=t.split(n),l=e;for(let i=0;i<a.length;){if(!l||typeof l!="object")return;let r,s="";for(let o=i;o<a.length;++o)if(o!==i&&(s+=n),s+=a[o],r=l[s],r!==void 0){if(["string","number","boolean"].includes(typeof r)&&o<a.length-1)continue;i+=o-i+1;break}l=r}return l},yr=e=>e==null?void 0:e.replace(/_/g,"-"),F1={type:"logger",log(e){this.output("log",e)},warn(e){this.output("warn",e)},error(e){this.output("error",e)},output(e,t){var n,a;(a=(n=console==null?void 0:console[e])==null?void 0:n.apply)==null||a.call(n,console,t)}},qc=class e{constructor(t,n={}){this.init(t,n)}init(t,n={}){this.prefix=n.prefix||"i18next:",this.logger=t||F1,this.options=n,this.debug=n.debug}log(...t){return this.forward(t,"log","",!0)}warn(...t){return this.forward(t,"warn","",!0)}error(...t){return this.forward(t,"error","")}deprecate(...t){return this.forward(t,"warn","WARNING DEPRECATED: ",!0)}forward(t,n,a,l){return l&&!this.debug?null:(t=t.map(i=>Z(i)?i.replace(/[\r\n\x00-\x1F\x7F]/g," "):i),Z(t[0])&&(t[0]="".concat(a).concat(this.prefix," ").concat(t[0])),this.logger[n](t))}create(t){return new e(this.logger,T({prefix:"".concat(this.prefix,":").concat(t,":")},this.options))}clone(t){return t=t||this.options,t.prefix=t.prefix||this.prefix,new e(this.logger,t)}},Cn=new qc,Il=class{constructor(){this.observers={}}on(t,n){return t.split(" ").forEach(a=>{this.observers[a]||(this.observers[a]=new Map);let l=this.observers[a].get(n)||0;this.observers[a].set(n,l+1)}),this}off(t,n){if(this.observers[t]){if(!n){delete this.observers[t];return}this.observers[t].delete(n)}}once(t,n){let a=(...l)=>{n(...l),this.off(t,a)};return this.on(t,a),this}emit(t,...n){this.observers[t]&&Array.from(this.observers[t].entries()).forEach(([l,i])=>{for(let r=0;r<i;r++)l(...n)}),this.observers["*"]&&Array.from(this.observers["*"].entries()).forEach(([l,i])=>{for(let r=0;r<i;r++)l(t,...n)})}},eo=class extends Il{constructor(t,n={ns:["translation"],defaultNS:"translation"}){super(),this.data=t||{},this.options=n,this.options.keySeparator===void 0&&(this.options.keySeparator="."),this.options.ignoreJSONStructure===void 0&&(this.options.ignoreJSONStructure=!0)}addNamespaces(t){this.options.ns.includes(t)||this.options.ns.push(t)}removeNamespaces(t){let n=this.options.ns.indexOf(t);n>-1&&this.options.ns.splice(n,1)}getResource(t,n,a,l={}){var u,c;let i=l.keySeparator!==void 0?l.keySeparator:this.options.keySeparator,r=l.ignoreJSONStructure!==void 0?l.ignoreJSONStructure:this.options.ignoreJSONStructure,s;t.includes(".")?s=t.split("."):(s=[t,n],a&&(Array.isArray(a)?s.push(...a):Z(a)&&i?s.push(...a.split(i)):s.push(a)));let o=Ws(this.data,s);return!o&&!n&&!a&&t.includes(".")&&(t=s[0],n=s[1],a=s.slice(2).join(".")),o||!r||!Z(a)?o:Bc((c=(u=this.data)==null?void 0:u[t])==null?void 0:c[n],a,i)}addResource(t,n,a,l,i={silent:!1}){let r=i.keySeparator!==void 0?i.keySeparator:this.options.keySeparator,s=[t,n];a&&(s=s.concat(r?a.split(r):a)),t.includes(".")&&(s=t.split("."),l=n,n=s[1]),this.addNamespaces(n),Qp(this.data,s,l),i.silent||this.emit("added",t,n,a,l)}addResources(t,n,a,l={silent:!1}){for(let i in a)(Z(a[i])||Array.isArray(a[i]))&&this.addResource(t,n,i,a[i],{silent:!0});l.silent||this.emit("added",t,n,a)}addResourceBundle(t,n,a,l,i,r={silent:!1,skipCopy:!1}){let s=[t,n];t.includes(".")&&(s=t.split("."),l=a,a=n,n=s[1]),this.addNamespaces(n);let o=Ws(this.data,s)||{};r.skipCopy||(a=JSON.parse(JSON.stringify(a))),l?Pp(o,a,i):o=T(T({},o),a),Qp(this.data,s,o),r.silent||this.emit("added",t,n,a)}removeResourceBundle(t,n){this.hasResourceBundle(t,n)&&delete this.data[t][n],this.removeNamespaces(n),this.emit("removed",t,n)}hasResourceBundle(t,n){return this.getResource(t,n)!==void 0}getResourceBundle(t,n){return n||(n=this.options.defaultNS),this.getResource(t,n)}getDataByLanguage(t){return this.data[t]}hasLanguageSomeTranslations(t){let n=this.getDataByLanguage(t);return!!(n&&Object.keys(n)||[]).find(l=>n[l]&&Object.keys(n[l]).length>0)}toJSON(){return this.data}},Wp={processors:{},addPostProcessor(e){this.processors[e.name]=e},handle(e,t,n,a,l){return e.forEach(i=>{var r,s;t=(s=(r=this.processors[i])==null?void 0:r.process(t,n,a,l))!=null?s:t}),t}},em=Symbol("i18next/PATH_KEY");function J1(){let e=[],t=Object.create(null),n;return t.get=(a,l)=>{var i;return(i=n==null?void 0:n.revoke)==null||i.call(n),l===em?e:(e.push(l),n=Proxy.revocable(a,t),n.proxy)},Proxy.revocable(Object.create(null),t).proxy}function dl(e,t){var r,s;let{[em]:n}=e(J1()),a=(r=t==null?void 0:t.keySeparator)!=null?r:".",l=(s=t==null?void 0:t.nsSeparator)!=null?s:":",i=(t==null?void 0:t.enableSelector)==="strict";if(n.length>1&&l){let o=t==null?void 0:t.ns,u=i?Array.isArray(o)?o:o?[o]:null:Array.isArray(o)?o:null;if(u&&(i?u:u.length>1?u.slice(1):[]).includes(n[0]))return"".concat(n[0]).concat(l).concat(n.slice(1).join(a))}return n.join(a)}var Mc=e=>!Z(e)&&typeof e!="boolean"&&typeof e!="number",to=class e extends Il{constructor(t,n={}){super(),j1(["resourceStore","languageUtils","pluralResolver","interpolator","backendConnector","i18nFormat","utils"],t,this),this.options=n,this.options.keySeparator===void 0&&(this.options.keySeparator="."),this.logger=Cn.create("translator"),this.checkedLoadedFor={}}changeLanguage(t){t&&(this.language=t)}exists(t,n={interpolation:{}}){let a=T({},n);if(t==null)return!1;let l=this.resolve(t,a);if((l==null?void 0:l.res)===void 0)return!1;let i=Mc(l.res);return!(a.returnObjects===!1&&i)}extractFromKey(t,n){let a=n.nsSeparator!==void 0?n.nsSeparator:this.options.nsSeparator;a===void 0&&(a=":");let l=n.keySeparator!==void 0?n.keySeparator:this.options.keySeparator,i=n.ns||this.options.defaultNS||[],r=a&&t.includes(a),s=!this.options.userDefinedKeySeparator&&!n.keySeparator&&!this.options.userDefinedNsSeparator&&!n.nsSeparator&&!K1(t,a,l);if(r&&!s){let o=t.match(this.interpolator.nestingRegexp);if(o&&o.length>0)return{key:t,namespaces:Z(i)?[i]:i};let u=t.split(a);(a!==l||a===l&&this.options.ns.includes(u[0]))&&(i=u.shift()),t=u.join(l)}return{key:t,namespaces:Z(i)?[i]:i}}translate(t,n,a){let l=typeof n=="object"?T({},n):n;if(typeof l!="object"&&this.options.overloadTranslationOptionHandler&&(l=this.options.overloadTranslationOptionHandler(arguments)),typeof l=="object"&&(l=T({},l)),l||(l={}),t==null)return"";typeof t=="function"&&(t=dl(t,T(T({},this.options),l))),Array.isArray(t)||(t=[String(t)]),t=t.map(D=>typeof D=="function"?dl(D,T(T({},this.options),l)):String(D));let i=l.returnDetails!==void 0?l.returnDetails:this.options.returnDetails,r=l.keySeparator!==void 0?l.keySeparator:this.options.keySeparator,{key:s,namespaces:o}=this.extractFromKey(t[t.length-1],l),u=o[o.length-1],c=l.nsSeparator!==void 0?l.nsSeparator:this.options.nsSeparator;c===void 0&&(c=":");let f=l.lng||this.language,d=l.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if((f==null?void 0:f.toLowerCase())==="cimode")return d?i?{res:"".concat(u).concat(c).concat(s),usedKey:s,exactUsedKey:s,usedLng:f,usedNS:u,usedParams:this.getUsedParamsDetails(l)}:"".concat(u).concat(c).concat(s):i?{res:s,usedKey:s,exactUsedKey:s,usedLng:f,usedNS:u,usedParams:this.getUsedParamsDetails(l)}:s;let p=this.resolve(t,l),S=p==null?void 0:p.res,y=(p==null?void 0:p.usedKey)||s,x=(p==null?void 0:p.exactUsedKey)||s,h=["[object Number]","[object Function]","[object RegExp]"],m=l.joinArrays!==void 0?l.joinArrays:this.options.joinArrays,b=!this.i18nFormat||this.i18nFormat.handleAsObject,v=l.count!==void 0&&!Z(l.count),E=e.hasDefaultValue(l),N=v?this.pluralResolver.getSuffix(f,l.count,l):"",R=l.ordinal&&v?this.pluralResolver.getSuffix(f,l.count,{ordinal:!1}):"",C=v&&!l.ordinal&&l.count===0,L=C&&l["defaultValue".concat(this.options.pluralSeparator,"zero")]||l["defaultValue".concat(N)]||l["defaultValue".concat(R)]||l.defaultValue,U=S;b&&!S&&E&&(U=L);let Se=Mc(U),X=Object.prototype.toString.apply(U);if(b&&U&&Se&&!h.includes(X)&&!(Z(m)&&Array.isArray(U))){if(!l.returnObjects&&!this.options.returnObjects){this.options.returnedObjectHandler||this.logger.warn("accessing an object - but returnObjects options is not enabled!");let D=this.options.returnedObjectHandler?this.options.returnedObjectHandler(y,U,M(T({},l),{ns:o})):"key '".concat(s," (").concat(this.language,")' returned an object instead of string.");return i?(p.res=D,p.usedParams=this.getUsedParamsDetails(l),p):D}if(r){let D=Array.isArray(U),z=D?[]:{},P=D?x:y;for(let ie in U)if(Object.prototype.hasOwnProperty.call(U,ie)){let re="".concat(P).concat(r).concat(ie);E&&!S?z[ie]=this.translate(re,M(T({},l),{defaultValue:Mc(L)?L[ie]:void 0,joinArrays:!1,ns:o})):z[ie]=this.translate(re,M(T({},l),{joinArrays:!1,ns:o})),z[ie]===re&&(z[ie]=U[ie])}S=z}}else if(b&&Z(m)&&Array.isArray(S))S=S.join(m),S&&(S=this.extendTranslation(S,t,l,a));else{let D=!1,z=!1;!this.isValidLookup(S)&&E&&(D=!0,S=L),this.isValidLookup(S)||(z=!0,S=s);let ie=(l.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey)&&z?void 0:S,re=E&&L!==S&&this.options.updateMissing;if(z||D||re){if(this.logger.log(re?"updateKey":"missingKey",f,u,v&&!re?"".concat(s).concat(this.pluralResolver.getSuffix(f,l.count,l)):s,re?L:S),r){let qe=this.resolve(s,M(T({},l),{keySeparator:!1}));qe&&qe.res&&this.logger.warn("Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.")}let Pe=[],Lt=this.languageUtils.getFallbackCodes(this.options.fallbackLng,l.lng||this.language);if(this.options.saveMissingTo==="fallback"&&Lt&&Lt[0])for(let qe=0;qe<Lt.length;qe++)Pe.push(Lt[qe]);else this.options.saveMissingTo==="all"?Pe=this.languageUtils.toResolveHierarchy(l.lng||this.language):Pe.push(l.lng||this.language);let Zn=(qe,Ut,It)=>{var pn;let ge=E&&It!==S?It:ie;this.options.missingKeyHandler?this.options.missingKeyHandler(qe,u,Ut,ge,re,l):(pn=this.backendConnector)!=null&&pn.saveMissing&&this.backendConnector.saveMissing(qe,u,Ut,ge,re,l),this.emit("missingKey",qe,u,Ut,S)};this.options.saveMissing&&(this.options.saveMissingPlurals&&v?Pe.forEach(qe=>{let Ut=this.pluralResolver.getSuffixes(qe,l);C&&l["defaultValue".concat(this.options.pluralSeparator,"zero")]&&!Ut.includes("".concat(this.options.pluralSeparator,"zero"))&&Ut.push("".concat(this.options.pluralSeparator,"zero")),Ut.forEach(It=>{Zn([qe],s+It,l["defaultValue".concat(It)]||L)})}):Zn(Pe,s,L))}S=this.extendTranslation(S,t,l,p,a),z&&S===s&&this.options.appendNamespaceToMissingKey&&(S="".concat(u).concat(c).concat(s)),(z||D)&&this.options.parseMissingKeyHandler&&(S=this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey?"".concat(u).concat(c).concat(s):s,D?S:void 0,l))}return i?(p.res=S,p.usedParams=this.getUsedParamsDetails(l),p):S}extendTranslation(t,n,a,l,i){var o,u;if((o=this.i18nFormat)!=null&&o.parse)t=this.i18nFormat.parse(t,T(T({},this.options.interpolation.defaultVariables),a),a.lng||this.language||l.usedLng,l.usedNS,l.usedKey,{resolved:l});else if(!a.skipInterpolation){a.interpolation&&this.interpolator.init(M(T({},a),{interpolation:T(T({},this.options.interpolation),a.interpolation)}));let c=Z(t)&&(((u=a==null?void 0:a.interpolation)==null?void 0:u.skipOnVariables)!==void 0?a.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables),f;if(c){let p=t.match(this.interpolator.nestingRegexp);f=p&&p.length}let d=a.replace&&!Z(a.replace)?a.replace:a;if(this.options.interpolation.defaultVariables&&(d=T(T({},this.options.interpolation.defaultVariables),d)),t=this.interpolator.interpolate(t,d,a.lng||this.language||l.usedLng,a),c){let p=t.match(this.interpolator.nestingRegexp),S=p&&p.length;f<S&&(a.nest=!1)}!a.lng&&l&&l.res&&(a.lng=this.language||l.usedLng),a.nest!==!1&&(t=this.interpolator.nest(t,(...p)=>(i==null?void 0:i[0])===p[0]&&!a.context?(this.logger.warn("It seems you are nesting recursively key: ".concat(p[0]," in key: ").concat(n[0])),null):this.translate(...p,n),a)),a.interpolation&&this.interpolator.reset()}let r=a.postProcess||this.options.postProcess,s=Z(r)?[r]:r;return t!=null&&(s!=null&&s.length)&&a.applyPostProcessor!==!1&&(t=Wp.handle(s,t,n,this.options&&this.options.postProcessPassResolved?T({i18nResolved:M(T({},l),{usedParams:this.getUsedParamsDetails(a)})},a):a,this)),t}resolve(t,n={}){let a,l,i,r,s;return Z(t)&&(t=[t]),Array.isArray(t)&&(t=t.map(o=>typeof o=="function"?dl(o,T(T({},this.options),n)):o)),t.forEach(o=>{if(this.isValidLookup(a))return;let u=this.extractFromKey(o,n),c=u.key;l=c;let f=u.namespaces;this.options.fallbackNS&&(f=f.concat(this.options.fallbackNS));let d=n.count!==void 0&&!Z(n.count),p=d&&!n.ordinal&&n.count===0,S=n.context!==void 0&&(Z(n.context)||typeof n.context=="number")&&n.context!=="",y=n.lngs?n.lngs:this.languageUtils.toResolveHierarchy(n.lng||this.language,n.fallbackLng);f.forEach(x=>{var h,m;this.isValidLookup(a)||(s=x,!this.checkedLoadedFor["".concat(y[0],"-").concat(x)]&&((h=this.utils)!=null&&h.hasLoadedNamespace)&&!((m=this.utils)!=null&&m.hasLoadedNamespace(s))&&(this.checkedLoadedFor["".concat(y[0],"-").concat(x)]=!0,this.logger.warn('key "'.concat(l,'" for languages "').concat(y.join(", "),'" won\'t get resolved as namespace "').concat(s,'" was not yet loaded'),"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!")),y.forEach(b=>{var N;if(this.isValidLookup(a))return;r=b;let v=[c];if((N=this.i18nFormat)!=null&&N.addLookupKeys)this.i18nFormat.addLookupKeys(v,c,b,x,n);else{let R;d&&(R=this.pluralResolver.getSuffix(b,n.count,n));let C="".concat(this.options.pluralSeparator,"zero"),L="".concat(this.options.pluralSeparator,"ordinal").concat(this.options.pluralSeparator);if(d&&(n.ordinal&&R.startsWith(L)&&v.push(c+R.replace(L,this.options.pluralSeparator)),v.push(c+R),p&&v.push(c+C)),S){let U="".concat(c).concat(this.options.contextSeparator||"_").concat(n.context);v.push(U),d&&(n.ordinal&&R.startsWith(L)&&v.push(U+R.replace(L,this.options.pluralSeparator)),v.push(U+R),p&&v.push(U+C))}}let E;for(;E=v.pop();)this.isValidLookup(a)||(i=E,a=this.getResource(b,x,E,n))}))})}),{res:a,usedKey:l,exactUsedKey:i,usedLng:r,usedNS:s}}isValidLookup(t){return t!==void 0&&!(!this.options.returnNull&&t===null)&&!(!this.options.returnEmptyString&&t==="")}getResource(t,n,a,l={}){var i;return(i=this.i18nFormat)!=null&&i.getResource?this.i18nFormat.getResource(t,n,a,l):this.resourceStore.getResource(t,n,a,l)}getUsedParamsDetails(t={}){let n=["defaultValue","ordinal","context","replace","lng","lngs","fallbackLng","ns","keySeparator","nsSeparator","returnObjects","returnDetails","joinArrays","postProcess","interpolation"],a=t.replace&&!Z(t.replace),l=a?t.replace:t;if(a&&typeof t.count<"u"&&(l.count=t.count),this.options.interpolation.defaultVariables&&(l=T(T({},this.options.interpolation.defaultVariables),l)),!a){l=T({},l);for(let i of n)delete l[i]}return l}static hasDefaultValue(t){let n="defaultValue";for(let a in t)if(Object.prototype.hasOwnProperty.call(t,a)&&a.startsWith(n)&&t[a]!==void 0)return!0;return!1}},no=class{constructor(t){this.options=t,this.supportedLngs=this.options.supportedLngs||!1,this.logger=Cn.create("languageUtils")}getScriptPartFromCode(t){if(t=yr(t),!t||!t.includes("-"))return null;let n=t.split("-");return n.length===2||(n.pop(),n[n.length-1].toLowerCase()==="x")?null:this.formatLanguageCode(n.join("-"))}getLanguagePartFromCode(t){if(t=yr(t),!t||!t.includes("-"))return t;let n=t.split("-");return this.formatLanguageCode(n[0])}formatLanguageCode(t){if(Z(t)&&t.includes("-")){let n;try{n=Intl.getCanonicalLocales(t)[0]}catch(a){}return n&&this.options.lowerCaseLng&&(n=n.toLowerCase()),n||(this.options.lowerCaseLng?t.toLowerCase():t)}return this.options.cleanCode||this.options.lowerCaseLng?t.toLowerCase():t}isSupportedCode(t){return(this.options.load==="languageOnly"||this.options.nonExplicitSupportedLngs)&&(t=this.getLanguagePartFromCode(t)),!this.supportedLngs||!this.supportedLngs.length||this.supportedLngs.includes(t)}getBestMatchFromCodes(t){if(!t)return null;let n;return t.forEach(a=>{if(n)return;let l=this.formatLanguageCode(a);(!this.options.supportedLngs||this.isSupportedCode(l))&&(n=l)}),!n&&this.options.supportedLngs&&t.forEach(a=>{if(n)return;let l=this.getScriptPartFromCode(a);if(this.isSupportedCode(l))return n=l;let i=this.getLanguagePartFromCode(a);if(this.isSupportedCode(i))return n=i;n=this.options.supportedLngs.find(r=>r===i?!0:!r.includes("-")&&!i.includes("-")?!1:!!(r.includes("-")&&!i.includes("-")&&r.slice(0,r.indexOf("-"))===i||r.startsWith(i)&&i.length>1))}),n||(n=this.getFallbackCodes(this.options.fallbackLng)[0]),n}getFallbackCodes(t,n){if(!t)return[];if(typeof t=="function"&&(t=t(n)),Z(t)&&(t=[t]),Array.isArray(t))return t;if(!n)return t.default||[];let a=t[n];return a||(a=t[this.getScriptPartFromCode(n)]),a||(a=t[this.formatLanguageCode(n)]),a||(a=t[this.getLanguagePartFromCode(n)]),a||(a=t.default),a||[]}toResolveHierarchy(t,n){let a=this.getFallbackCodes((n===!1?[]:n)||this.options.fallbackLng||[],t),l=[],i=r=>{r&&(this.isSupportedCode(r)?l.push(r):this.logger.warn("rejecting language code not found in supportedLngs: ".concat(r)))};return Z(t)&&(t.includes("-")||t.includes("_"))?(this.options.load!=="languageOnly"&&i(this.formatLanguageCode(t)),this.options.load!=="languageOnly"&&this.options.load!=="currentOnly"&&i(this.getScriptPartFromCode(t)),this.options.load!=="currentOnly"&&i(this.getLanguagePartFromCode(t))):Z(t)&&i(this.formatLanguageCode(t)),a.forEach(r=>{l.includes(r)||i(this.formatLanguageCode(r))}),l}},Zp={zero:0,one:1,two:2,few:3,many:4,other:5},Kp={select:e=>e===1?"one":"other",resolvedOptions:()=>({pluralCategories:["one","other"]})},jc=class{constructor(t,n={}){this.languageUtils=t,this.options=n,this.logger=Cn.create("pluralResolver"),this.pluralRulesCache={}}clearCache(){this.pluralRulesCache={}}getRule(t,n={}){let a=yr(t==="dev"?"en":t),l=n.ordinal?"ordinal":"cardinal",i=JSON.stringify({cleanedCode:a,type:l});if(i in this.pluralRulesCache)return this.pluralRulesCache[i];let r;try{r=new Intl.PluralRules(a,{type:l})}catch(s){if(typeof Intl>"u")return this.logger.error("No Intl support, please use an Intl polyfill!"),Kp;if(!t.match(/-|_/))return Kp;let o=this.languageUtils.getLanguagePartFromCode(t);r=this.getRule(o,n)}return this.pluralRulesCache[i]=r,r}needsPlural(t,n={}){let a=this.getRule(t,n);return a||(a=this.getRule("dev",n)),(a==null?void 0:a.resolvedOptions().pluralCategories.length)>1}getPluralFormsOfKey(t,n,a={}){return this.getSuffixes(t,a).map(l=>"".concat(n).concat(l))}getSuffixes(t,n={}){let a=this.getRule(t,n);return a||(a=this.getRule("dev",n)),a?a.resolvedOptions().pluralCategories.sort((l,i)=>Zp[l]-Zp[i]).map(l=>"".concat(this.options.prepend).concat(n.ordinal?"ordinal".concat(this.options.prepend):"").concat(l)):[]}getSuffix(t,n,a={}){let l=this.getRule(t,a);return l?"".concat(this.options.prepend).concat(a.ordinal?"ordinal".concat(this.options.prepend):"").concat(l.select(n)):(this.logger.warn("no plural rule found for: ".concat(t)),this.getSuffix("dev",n,a))}},Fp=(e,t,n,a=".",l=!0)=>{let i=G1(e,t,n);return!i&&l&&Z(n)&&(i=Bc(e,n,a),i===void 0&&(i=Bc(t,n,a))),i},Lc=e=>e.replace(/\$/g,"$$$$"),ao=class{constructor(t={}){var n;this.logger=Cn.create("interpolator"),this.options=t,this.format=((n=t==null?void 0:t.interpolation)==null?void 0:n.format)||(a=>a),this.init(t)}init(t={}){t.interpolation||(t.interpolation={escapeValue:!0});let{escape:n,escapeValue:a,useRawValueToEscape:l,prefix:i,prefixEscaped:r,suffix:s,suffixEscaped:o,formatSeparator:u,unescapeSuffix:c,unescapePrefix:f,nestingPrefix:d,nestingPrefixEscaped:p,nestingSuffix:S,nestingSuffixEscaped:y,nestingOptionsSeparator:x,maxReplaces:h,alwaysFormat:m}=t.interpolation;this.escape=n!==void 0?n:$1,this.escapeValue=a!==void 0?a:!0,this.useRawValueToEscape=l!==void 0?l:!1,this.prefix=i?ea(i):r||"{{",this.suffix=s?ea(s):o||"}}",this.formatSeparator=u||",",this.unescapePrefix=c?"":f?ea(f):"-",this.unescapeSuffix=this.unescapePrefix?"":c?ea(c):"",this.nestingPrefix=d?ea(d):p||ea("$t("),this.nestingSuffix=S?ea(S):y||ea(")"),this.nestingOptionsSeparator=x||",",this.maxReplaces=h||1e3,this.alwaysFormat=m!==void 0?m:!1,this.resetRegExp()}reset(){this.options&&this.init(this.options)}resetRegExp(){let t=(n,a)=>(n==null?void 0:n.source)===a?(n.lastIndex=0,n):new RegExp(a,"g");this.regexp=t(this.regexp,"".concat(this.prefix,"(.+?)").concat(this.suffix)),this.regexpUnescape=t(this.regexpUnescape,"".concat(this.prefix).concat(this.unescapePrefix,"(.+?)").concat(this.unescapeSuffix).concat(this.suffix)),this.nestingRegexp=t(this.nestingRegexp,"".concat(this.nestingPrefix,"((?:[^()\"']+|\"[^\"]*\"|'[^']*'|\\((?:[^()]|\"[^\"]*\"|'[^']*')*\\))*?)").concat(this.nestingSuffix))}interpolate(t,n,a,l){var p;let i,r,s,o=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{},u=S=>{if(!S.includes(this.formatSeparator)){let m=Fp(n,o,S,this.options.keySeparator,this.options.ignoreJSONStructure);return this.alwaysFormat?this.format(m,void 0,a,M(T(T({},l),n),{interpolationkey:S})):m}let y=S.split(this.formatSeparator),x=y.shift().trim(),h=y.join(this.formatSeparator).trim();return this.format(Fp(n,o,x,this.options.keySeparator,this.options.ignoreJSONStructure),h,a,M(T(T({},l),n),{interpolationkey:x}))};this.resetRegExp(),!this.escapeValue&&typeof t=="string"&&/\$t\([^)]*\{[^}]*\{\{/.test(t)&&this.logger.warn("nesting options string contains interpolated variables with escapeValue: false \u2014 if any of those values are attacker-controlled they can inject additional nesting options (e.g. redirect lng/ns). Sanitise untrusted input before passing it to t(), or keep escapeValue: true.");let c=(l==null?void 0:l.missingInterpolationHandler)||this.options.missingInterpolationHandler,f=((p=l==null?void 0:l.interpolation)==null?void 0:p.skipOnVariables)!==void 0?l.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables;return[{regex:this.regexpUnescape,safeValue:S=>Lc(S)},{regex:this.regexp,safeValue:S=>this.escapeValue?Lc(this.escape(S)):Lc(S)}].forEach(S=>{for(s=0;i=S.regex.exec(t);){let y=i[1].trim();if(r=u(y),r===void 0)if(typeof c=="function"){let h=c(t,i,l);r=Z(h)?h:""}else if(l&&Object.prototype.hasOwnProperty.call(l,y))r="";else if(f){r=i[0];continue}else this.logger.warn("missed to pass in variable ".concat(y," for interpolating ").concat(t)),r="";else!Z(r)&&!this.useRawValueToEscape&&(r=Gp(r));let x=S.safeValue(r);if(t=t.replace(i[0],x),f?(S.regex.lastIndex+=r.length,S.regex.lastIndex-=i[0].length):S.regex.lastIndex=0,s++,s>=this.maxReplaces)break}}),t}nest(t,n,a={}){let l,i,r,s=(o,u)=>{var y,x;let c=this.nestingOptionsSeparator;if(!o.includes(c))return o;let f=o.split(new RegExp("".concat(ea(c),"[ ]*{"))),d="{".concat(f[1]);o=f[0],d=this.interpolate(d,r);let p=d.match(/'/g),S=d.match(/"/g);(((y=p==null?void 0:p.length)!=null?y:0)%2===0&&!S||((x=S==null?void 0:S.length)!=null?x:0)%2!==0)&&(d=d.replace(/'/g,'"'));try{r=JSON.parse(d),u&&(r=T(T({},u),r))}catch(h){return this.logger.warn("failed parsing options string in nesting for key ".concat(o),h),"".concat(o).concat(c).concat(d)}return r.defaultValue&&r.defaultValue.includes(this.prefix)&&delete r.defaultValue,o};for(;l=this.nestingRegexp.exec(t);){let o=[];r=T({},a),r=r.replace&&!Z(r.replace)?r.replace:r,r.applyPostProcessor=!1,delete r.defaultValue;let u=/{.*}/.test(l[1])?l[1].lastIndexOf("}")+1:l[1].indexOf(this.formatSeparator);if(u!==-1&&(o=l[1].slice(u).split(this.formatSeparator).map(c=>c.trim()).filter(Boolean),l[1]=l[1].slice(0,u)),i=n(s.call(this,l[1].trim(),r),r),i&&l[0]===t&&!Z(i))return i;Z(i)||(i=Gp(i)),i||(this.logger.warn("missed to resolve ".concat(l[1]," for nesting ").concat(t)),i=""),o.length&&(i=o.reduce((c,f)=>this.format(c,f,a.lng,M(T({},a),{interpolationkey:l[1].trim()})),i.trim())),t=t.replace(l[0],i),this.regexp.lastIndex=0}return t}},I1=e=>{let t=e.toLowerCase().trim(),n={};if(e.includes("(")){let a=e.split("(");t=a[0].toLowerCase().trim();let l=a[1].slice(0,-1);t==="currency"&&!l.includes(":")?n.currency||(n.currency=l.trim()):t==="relativetime"&&!l.includes(":")?n.range||(n.range=l.trim()):l.split(";").forEach(r=>{if(r){let[s,...o]=r.split(":"),u=o.join(":").trim().replace(/^'+|'+$/g,""),c=s.trim();n[c]||(n[c]=u),u==="false"&&(n[c]=!1),u==="true"&&(n[c]=!0),isNaN(u)||(n[c]=parseInt(u,10))}})}return{formatName:t,formatOptions:n}},Jp=e=>{let t={};return(n,a,l)=>{let i=l;l&&l.interpolationkey&&l.formatParams&&l.formatParams[l.interpolationkey]&&l[l.interpolationkey]&&(i=M(T({},i),{[l.interpolationkey]:void 0}));let r=a+JSON.stringify(i),s=t[r];return s||(s=e(yr(a),l),t[r]=s),s(n)}},P1=e=>(t,n,a)=>e(yr(n),a)(t),Yc=class{constructor(t={}){this.logger=Cn.create("formatter"),this.options=t,this.init(t)}init(t,n={interpolation:{}}){this.formatSeparator=n.interpolation.formatSeparator||",";let a=n.cacheInBuiltFormats?Jp:P1;this.formats={number:a((l,i)=>{let r=new Intl.NumberFormat(l,T({},i));return s=>r.format(s)}),currency:a((l,i)=>{let r=new Intl.NumberFormat(l,M(T({},i),{style:"currency"}));return s=>r.format(s)}),datetime:a((l,i)=>{let r=new Intl.DateTimeFormat(l,T({},i));return s=>r.format(s)}),relativetime:a((l,i)=>{let r=new Intl.RelativeTimeFormat(l,T({},i));return s=>r.format(s,i.range||"day")}),list:a((l,i)=>{let r=new Intl.ListFormat(l,T({},i));return s=>r.format(s)})}}add(t,n){this.formats[t.toLowerCase().trim()]=n}addCached(t,n){this.formats[t.toLowerCase().trim()]=Jp(n)}format(t,n,a,l={}){if(!n||t==null)return t;let i=n.split(this.formatSeparator);if(i.length>1&&i[0].indexOf("(")>1&&!i[0].includes(")")&&i.find(s=>s.includes(")"))){let s=i.findIndex(o=>o.includes(")"));i[0]=[i[0],...i.splice(1,s)].join(this.formatSeparator)}return i.reduce((s,o)=>{var f;let{formatName:u,formatOptions:c}=I1(o);if(this.formats[u]){let d=s;try{let p=((f=l==null?void 0:l.formatParams)==null?void 0:f[l.interpolationkey])||{},S=p.locale||p.lng||l.locale||l.lng||a;d=this.formats[u](s,S,T(T(T({},c),l),p))}catch(p){this.logger.warn(p)}return d}else this.logger.warn("there was no format function for ".concat(u));return s},t)}},W1=(e,t)=>{e.pending[t]!==void 0&&(delete e.pending[t],e.pendingCount--)},Vc=class extends Il{constructor(t,n,a,l={}){var i,r;super(),this.backend=t,this.store=n,this.services=a,this.languageUtils=a.languageUtils,this.options=l,this.logger=Cn.create("backendConnector"),this.waitingReads=[],this.maxParallelReads=l.maxParallelReads||10,this.readingCalls=0,this.maxRetries=l.maxRetries>=0?l.maxRetries:5,this.retryTimeout=l.retryTimeout>=1?l.retryTimeout:350,this.state={},this.queue=[],(r=(i=this.backend)==null?void 0:i.init)==null||r.call(i,a,l.backend,l)}queueLoad(t,n,a,l){let i={},r={},s={},o={};return t.forEach(u=>{let c=!0;n.forEach(f=>{let d="".concat(u,"|").concat(f);!a.reload&&this.store.hasResourceBundle(u,f)?this.state[d]=2:this.state[d]<0||(this.state[d]===1?r[d]===void 0&&(r[d]=!0):(this.state[d]=1,c=!1,r[d]===void 0&&(r[d]=!0),i[d]===void 0&&(i[d]=!0),o[f]===void 0&&(o[f]=!0)))}),c||(s[u]=!0)}),(Object.keys(i).length||Object.keys(r).length)&&this.queue.push({pending:r,pendingCount:Object.keys(r).length,loaded:{},errors:[],callback:l}),{toLoad:Object.keys(i),pending:Object.keys(r),toLoadLanguages:Object.keys(s),toLoadNamespaces:Object.keys(o)}}loaded(t,n,a){let l=t.split("|"),i=l[0],r=l[1];n&&this.emit("failedLoading",i,r,n),!n&&a&&this.store.addResourceBundle(i,r,a,void 0,void 0,{skipCopy:!0}),this.state[t]=n?-1:2,n&&a&&(this.state[t]=0);let s={};this.queue.forEach(o=>{V1(o.loaded,[i],r),W1(o,t),n&&o.errors.push(n),o.pendingCount===0&&!o.done&&(Object.keys(o.loaded).forEach(u=>{s[u]||(s[u]={});let c=o.loaded[u];c.length&&c.forEach(f=>{s[u][f]===void 0&&(s[u][f]=!0)})}),o.done=!0,o.errors.length?o.callback(o.errors):o.callback())}),this.emit("loaded",s),this.queue=this.queue.filter(o=>!o.done)}read(t,n,a,l=0,i=this.retryTimeout,r){if(!t.length)return r(null,{});if(this.readingCalls>=this.maxParallelReads){this.waitingReads.push({lng:t,ns:n,fcName:a,tried:l,wait:i,callback:r});return}this.readingCalls++;let s=(u,c)=>{if(this.readingCalls--,this.waitingReads.length>0){let f=this.waitingReads.shift();this.read(f.lng,f.ns,f.fcName,f.tried,f.wait,f.callback)}if(u&&c&&l<this.maxRetries){setTimeout(()=>{this.read(t,n,a,l+1,i*2,r)},i);return}r(u,c)},o=this.backend[a].bind(this.backend);if(o.length===2){try{let u=o(t,n);u&&typeof u.then=="function"?u.then(c=>s(null,c)).catch(s):s(null,u)}catch(u){s(u)}return}return o(t,n,s)}prepareLoading(t,n,a={},l){if(!this.backend)return this.logger.warn("No backend was added via i18next.use. Will not load resources."),l&&l();Z(t)&&(t=this.languageUtils.toResolveHierarchy(t)),Z(n)&&(n=[n]);let i=this.queueLoad(t,n,a,l);if(!i.toLoad.length)return i.pending.length||l(),null;i.toLoad.forEach(r=>{this.loadOne(r)})}load(t,n,a){this.prepareLoading(t,n,{},a)}reload(t,n,a){this.prepareLoading(t,n,{reload:!0},a)}loadOne(t,n=""){let a=t.split("|"),l=a[0],i=a[1];this.read(l,i,"read",void 0,void 0,(r,s)=>{r&&this.logger.warn("".concat(n,"loading namespace ").concat(i," for language ").concat(l," failed"),r),!r&&s&&this.logger.log("".concat(n,"loaded namespace ").concat(i," for language ").concat(l),s),this.loaded(t,r,s)})}saveMissing(t,n,a,l,i,r={},s=()=>{}){var o,u,c,f,d;if((u=(o=this.services)==null?void 0:o.utils)!=null&&u.hasLoadedNamespace&&!((f=(c=this.services)==null?void 0:c.utils)!=null&&f.hasLoadedNamespace(n))){this.logger.warn('did not save key "'.concat(a,'" as the namespace "').concat(n,'" was not yet loaded'),"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!");return}if(!(a==null||a==="")){if((d=this.backend)!=null&&d.create){let p=M(T({},r),{isUpdate:i}),S=this.backend.create.bind(this.backend);if(S.length<6)try{let y;S.length===5?y=S(t,n,a,l,p):y=S(t,n,a,l),y&&typeof y.then=="function"?y.then(x=>s(null,x)).catch(s):s(null,y)}catch(y){s(y)}else S(t,n,a,l,s,p)}!t||!t[0]||this.store.addResource(t[0],n,a,l)}}},Uc=()=>({debug:!1,initAsync:!0,ns:["translation"],defaultNS:["translation"],fallbackLng:["dev"],fallbackNS:!1,supportedLngs:!1,nonExplicitSupportedLngs:!1,load:"all",preload:!1,keySeparator:".",nsSeparator:":",pluralSeparator:"_",contextSeparator:"_",enableSelector:!1,partialBundledLanguages:!1,saveMissing:!1,updateMissing:!1,saveMissingTo:"fallback",saveMissingPlurals:!0,missingKeyHandler:!1,missingInterpolationHandler:!1,postProcess:!1,postProcessPassResolved:!1,returnNull:!1,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:!1,parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:e=>{let t={};if(typeof e[1]=="object"&&(t=e[1]),Z(e[1])&&(t.defaultValue=e[1]),Z(e[2])&&(t.tDescription=e[2]),typeof e[2]=="object"||typeof e[3]=="object"){let n=e[3]||e[2];Object.keys(n).forEach(a=>{t[a]=n[a]})}return t},interpolation:{escapeValue:!0,prefix:"{{",suffix:"}}",formatSeparator:",",unescapePrefix:"-",nestingPrefix:"$t(",nestingSuffix:")",nestingOptionsSeparator:",",maxReplaces:1e3,skipOnVariables:!0},cacheInBuiltFormats:!0}),Ip=e=>(Z(e.ns)&&(e.ns=[e.ns]),Z(e.fallbackLng)&&(e.fallbackLng=[e.fallbackLng]),Z(e.fallbackNS)&&(e.fallbackNS=[e.fallbackNS]),e.supportedLngs&&!e.supportedLngs.includes("cimode")&&(e.supportedLngs=e.supportedLngs.concat(["cimode"])),e),Ps=()=>{},eT=e=>{Object.getOwnPropertyNames(Object.getPrototypeOf(e)).forEach(n=>{typeof e[n]=="function"&&(e[n]=e[n].bind(e))})},Gc=class e extends Il{constructor(t={},n){if(super(),this.options=Ip(t),this.services={},this.logger=Cn,this.modules={external:[]},eT(this),n&&!this.isInitialized&&!t.isClone){if(!this.options.initAsync)return this.init(t,n),this;setTimeout(()=>{this.init(t,n)},0)}}init(t={},n){this.isInitializing=!0,typeof t=="function"&&(n=t,t={}),t.defaultNS==null&&t.ns&&(Z(t.ns)?t.defaultNS=t.ns:t.ns.includes("translation")||(t.defaultNS=t.ns[0]));let a=Uc();this.options=T(T(T({},a),this.options),Ip(t)),this.options.interpolation=T(T({},a.interpolation),this.options.interpolation),t.keySeparator!==void 0&&(this.options.userDefinedKeySeparator=t.keySeparator),t.nsSeparator!==void 0&&(this.options.userDefinedNsSeparator=t.nsSeparator),typeof this.options.overloadTranslationOptionHandler!="function"&&(this.options.overloadTranslationOptionHandler=a.overloadTranslationOptionHandler);let l=u=>u?typeof u=="function"?new u:u:null;if(!this.options.isClone){this.modules.logger?Cn.init(l(this.modules.logger),this.options):Cn.init(null,this.options);let u;this.modules.formatter?u=this.modules.formatter:u=Yc;let c=new no(this.options);this.store=new eo(this.options.resources,this.options);let f=this.services;f.logger=Cn,f.resourceStore=this.store,f.languageUtils=c,f.pluralResolver=new jc(c,{prepend:this.options.pluralSeparator}),u&&(f.formatter=l(u),f.formatter.init&&f.formatter.init(f,this.options),this.options.interpolation.format=f.formatter.format.bind(f.formatter)),f.interpolator=new ao(this.options),f.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},f.backendConnector=new Vc(l(this.modules.backend),f.resourceStore,f,this.options),f.backendConnector.on("*",(d,...p)=>{this.emit(d,...p)}),this.modules.languageDetector&&(f.languageDetector=l(this.modules.languageDetector),f.languageDetector.init&&f.languageDetector.init(f,this.options.detection,this.options)),this.modules.i18nFormat&&(f.i18nFormat=l(this.modules.i18nFormat),f.i18nFormat.init&&f.i18nFormat.init(this)),this.translator=new to(this.services,this.options),this.translator.on("*",(d,...p)=>{this.emit(d,...p)}),this.modules.external.forEach(d=>{d.init&&d.init(this)})}if(this.format=this.options.interpolation.format,n||(n=Ps),this.options.fallbackLng&&!this.services.languageDetector&&!this.options.lng){let u=this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);u.length>0&&u[0]!=="dev"&&(this.options.lng=u[0])}!this.services.languageDetector&&!this.options.lng&&this.logger.warn("init: no languageDetector is used and no lng is defined"),["getResource","hasResourceBundle","getResourceBundle","getDataByLanguage"].forEach(u=>{this[u]=(...c)=>this.store[u](...c)}),["addResource","addResources","addResourceBundle","removeResourceBundle"].forEach(u=>{this[u]=(...c)=>(this.store[u](...c),this)});let s=mr(),o=()=>{let u=(c,f)=>{this.isInitializing=!1,this.isInitialized&&!this.initializedStoreOnce&&this.logger.warn("init: i18next is already initialized. You should call init just once!"),this.isInitialized=!0,this.options.isClone||this.logger.log("initialized",this.options),this.emit("initialized",this.options),s.resolve(f),n(c,f)};if((this.languages||this.isLanguageChangingTo)&&!this.isInitialized)return u(null,this.t.bind(this));this.changeLanguage(this.options.lng,u)};return this.options.resources||!this.options.initAsync?o():setTimeout(o,0),s}loadResources(t,n=Ps){var i,r;let a=n,l=Z(t)?t:this.language;if(typeof t=="function"&&(a=t),!this.options.resources||this.options.partialBundledLanguages){if((l==null?void 0:l.toLowerCase())==="cimode"&&(!this.options.preload||this.options.preload.length===0))return a();let s=[],o=u=>{if(!u||u==="cimode")return;this.services.languageUtils.toResolveHierarchy(u).forEach(f=>{f!=="cimode"&&(s.includes(f)||s.push(f))})};l?o(l):this.services.languageUtils.getFallbackCodes(this.options.fallbackLng).forEach(c=>o(c)),(r=(i=this.options.preload)==null?void 0:i.forEach)==null||r.call(i,u=>o(u)),this.services.backendConnector.load(s,this.options.ns,u=>{!u&&!this.resolvedLanguage&&this.language&&this.setResolvedLanguage(this.language),a(u)})}else a(null)}reloadResources(t,n,a){let l=mr();return typeof t=="function"&&(a=t,t=void 0),typeof n=="function"&&(a=n,n=void 0),t||(t=this.languages),n||(n=this.options.ns),a||(a=Ps),this.services.backendConnector.reload(t,n,i=>{l.resolve(),a(i)}),l}use(t){if(!t)throw new Error("You are passing an undefined module! Please check the object you are passing to i18next.use()");if(!t.type)throw new Error("You are passing a wrong module! Please check the object you are passing to i18next.use()");return t.type==="backend"&&(this.modules.backend=t),(t.type==="logger"||t.log&&t.warn&&t.error)&&(this.modules.logger=t),t.type==="languageDetector"&&(this.modules.languageDetector=t),t.type==="i18nFormat"&&(this.modules.i18nFormat=t),t.type==="postProcessor"&&Wp.addPostProcessor(t),t.type==="formatter"&&(this.modules.formatter=t),t.type==="3rdParty"&&this.modules.external.push(t),this}setResolvedLanguage(t){if(!(!t||!this.languages)&&!["cimode","dev"].includes(t)){for(let n=0;n<this.languages.length;n++){let a=this.languages[n];if(!["cimode","dev"].includes(a)&&this.store.hasLanguageSomeTranslations(a)){this.resolvedLanguage=a;break}}!this.resolvedLanguage&&!this.languages.includes(t)&&this.store.hasLanguageSomeTranslations(t)&&(this.resolvedLanguage=t,this.languages.unshift(t))}}changeLanguage(t,n){this.isLanguageChangingTo=t;let a=mr();this.emit("languageChanging",t);let l=s=>{this.language=s,this.languages=this.services.languageUtils.toResolveHierarchy(s),this.resolvedLanguage=void 0,this.setResolvedLanguage(s)},i=(s,o)=>{o?this.isLanguageChangingTo===t&&(l(o),this.translator.changeLanguage(o),this.isLanguageChangingTo=void 0,this.emit("languageChanged",o),this.logger.log("languageChanged",o)):this.isLanguageChangingTo=void 0,a.resolve((...u)=>this.t(...u)),n&&n(s,(...u)=>this.t(...u))},r=s=>{var c,f;!t&&!s&&this.services.languageDetector&&(s=[]);let o=Z(s)?s:s&&s[0],u=this.store.hasLanguageSomeTranslations(o)?o:this.services.languageUtils.getBestMatchFromCodes(Z(s)?[s]:s);u&&(this.language||l(u),this.translator.language||this.translator.changeLanguage(u),(f=(c=this.services.languageDetector)==null?void 0:c.cacheUserLanguage)==null||f.call(c,u)),this.loadResources(u,d=>{i(d,u)})};return!t&&this.services.languageDetector&&!this.services.languageDetector.async?r(this.services.languageDetector.detect()):!t&&this.services.languageDetector&&this.services.languageDetector.async?this.services.languageDetector.detect.length===0?this.services.languageDetector.detect().then(r):this.services.languageDetector.detect(r):r(t),a}getFixedT(t,n,a,l){let i=l==null?void 0:l.scopeNs,r=(s,o,...u)=>{let c;typeof o!="object"?c=this.options.overloadTranslationOptionHandler([s,o].concat(u)):c=T({},o),c.lng=c.lng||r.lng,c.lngs=c.lngs||r.lngs;let f=c.ns!==void 0&&c.ns!==null;c.ns=c.ns||r.ns,c.keyPrefix!==""&&(c.keyPrefix=c.keyPrefix||a||r.keyPrefix);let d=T(T({},this.options),c);Array.isArray(i)&&!f&&(d.ns=i),typeof c.keyPrefix=="function"&&(c.keyPrefix=dl(c.keyPrefix,d));let p=this.options.keySeparator||".",S;return c.keyPrefix&&Array.isArray(s)?S=s.map(y=>(typeof y=="function"&&(y=dl(y,d)),"".concat(c.keyPrefix).concat(p).concat(y))):(typeof s=="function"&&(s=dl(s,d)),S=c.keyPrefix?"".concat(c.keyPrefix).concat(p).concat(s):s),this.t(S,c)};return Z(t)?r.lng=t:r.lngs=t,r.ns=n,r.keyPrefix=a,r}t(...t){var n;return(n=this.translator)==null?void 0:n.translate(...t)}exists(...t){var n;return(n=this.translator)==null?void 0:n.exists(...t)}setDefaultNamespace(t){this.options.defaultNS=t}hasLoadedNamespace(t,n={}){if(!this.isInitialized)return this.logger.warn("hasLoadedNamespace: i18next was not initialized",this.languages),!1;if(!this.languages||!this.languages.length)return this.logger.warn("hasLoadedNamespace: i18n.languages were undefined or empty",this.languages),!1;let a=n.lng||this.resolvedLanguage||this.languages[0],l=this.options?this.options.fallbackLng:!1,i=this.languages[this.languages.length-1];if(a.toLowerCase()==="cimode")return!0;let r=(s,o)=>{let u=this.services.backendConnector.state["".concat(s,"|").concat(o)];return u===-1||u===0||u===2};if(n.precheck){let s=n.precheck(this,r);if(s!==void 0)return s}return!!(this.hasResourceBundle(a,t)||!this.services.backendConnector.backend||this.options.resources&&!this.options.partialBundledLanguages||r(a,t)&&(!l||r(i,t)))}loadNamespaces(t,n){let a=mr();return this.options.ns?(Z(t)&&(t=[t]),t.forEach(l=>{this.options.ns.includes(l)||this.options.ns.push(l)}),this.loadResources(l=>{a.resolve(),n&&n(l)}),a):(n&&n(),Promise.resolve())}loadLanguages(t,n){let a=mr();Z(t)&&(t=[t]);let l=this.options.preload||[],i=t.filter(r=>!l.includes(r)&&this.services.languageUtils.isSupportedCode(r));return i.length?(this.options.preload=l.concat(i),this.loadResources(r=>{a.resolve(),n&&n(r)}),a):(n&&n(),Promise.resolve())}dir(t){var l,i;if(t||(t=this.resolvedLanguage||(((l=this.languages)==null?void 0:l.length)>0?this.languages[0]:this.language)),!t)return"rtl";try{let r=new Intl.Locale(t);if(r&&r.getTextInfo){let s=r.getTextInfo();if(s&&s.direction)return s.direction}}catch(r){}let n=["ar","shu","sqr","ssh","xaa","yhd","yud","aao","abh","abv","acm","acq","acw","acx","acy","adf","ads","aeb","aec","afb","ajp","apc","apd","arb","arq","ars","ary","arz","auz","avl","ayh","ayl","ayn","ayp","bbz","pga","he","iw","ps","pbt","pbu","pst","prp","prd","ug","ur","ydd","yds","yih","ji","yi","hbo","men","xmn","fa","jpr","peo","pes","prs","dv","sam","ckb"],a=((i=this.services)==null?void 0:i.languageUtils)||new no(Uc());return t.toLowerCase().indexOf("-latn")>1?"ltr":n.includes(a.getLanguagePartFromCode(t))||t.toLowerCase().indexOf("-arab")>1?"rtl":"ltr"}static createInstance(t={},n){let a=new e(t,n);return a.createInstance=e.createInstance,a}cloneInstance(t={},n=Ps){let a=t.forkResourceStore;a&&delete t.forkResourceStore;let l=M(T(T({},this.options),t),{isClone:!0}),i=new e(l);if((t.debug!==void 0||t.prefix!==void 0)&&(i.logger=i.logger.clone(t)),["store","services","language"].forEach(s=>{i[s]=this[s]}),i.services=T({},this.services),i.services.utils={hasLoadedNamespace:i.hasLoadedNamespace.bind(i)},a){let s=Object.keys(this.store.data).reduce((o,u)=>(o[u]=T({},this.store.data[u]),o[u]=Object.keys(o[u]).reduce((c,f)=>(c[f]=T({},o[u][f]),c),o[u]),o),{});i.store=new eo(s,l),i.services.resourceStore=i.store}if(t.interpolation){let s=Uc(),o=T(T(T({},s.interpolation),this.options.interpolation),t.interpolation),u=M(T({},l),{interpolation:o});i.services.interpolator=new ao(u)}return i.translator=new to(i.services,l),i.translator.on("*",(s,...o)=>{i.emit(s,...o)}),i.init(l,n),i.translator.options=l,i.translator.backendConnector.services.utils={hasLoadedNamespace:i.hasLoadedNamespace.bind(i)},i}toJSON(){return{options:this.options,store:this.store,language:this.language,languages:this.languages,resolvedLanguage:this.resolvedLanguage}}},mt=Gc.createInstance(),Yw=mt.createInstance,Vw=mt.dir,Gw=mt.init,Xw=mt.loadResources,$w=mt.reloadResources,Qw=mt.use,Zw=mt.changeLanguage,Kw=mt.getFixedT,Fw=mt.t,Jw=mt.exists,Iw=mt.setDefaultNamespace,Pw=mt.hasLoadedNamespace,Ww=mt.loadNamespaces,eR=mt.loadLanguages;function br(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function hl(e){"@babel/helpers - typeof";return hl=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},hl(e)}function tm(e,t){if(hl(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var a=n.call(e,t||"default");if(hl(a)!="object")return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function lo(e){var t=tm(e,"string");return hl(t)=="symbol"?t:t+""}function nm(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,lo(a.key),a)}}function vr(e,t,n){return t&&nm(e.prototype,t),n&&nm(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}var lm=[],tT=lm.forEach,nT=lm.slice;function aT(e){return tT.call(nT.call(arguments,1),function(t){if(t)for(var n in t)e[n]===void 0&&(e[n]=t[n])}),e}function lT(e){return e?typeof e=="function"?new e:e:null}function iT(){return{handleEmptyResourcesAsFailed:!0,cacheHitMode:"none",retryOnFailure:!1}}function am(e,t,n,a){var l=e.read.bind(e);if(l.length===2){try{var i=l(t,n);i&&typeof i.then=="function"?i.then(function(r){return a(null,r)}).catch(a):a(null,i)}catch(r){a(r)}return}l(t,n,a)}var Xc=(function(){function e(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};br(this,e),this.backends=[],this.type="backend",this.allOptions=a,this.init(t,n)}return vr(e,[{key:"init",value:function(n){var a=this,l=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};this.services=n,this.options=aT(l,this.options||{},iT()),this.allOptions=i,this.options.backends&&this.options.backends.length>1&&(this.allOptions.saveMissing||this.allOptions.updateMissing)&&this.services&&this.services.logger&&this.services.logger.warn("i18next-chained-backend: Using multiple backends in combination with saveMissing/updateMissing is not recommended, as it may trigger based on stale data."),this.options.backends&&this.options.backends.forEach(function(r,s){a.backends[s]=a.backends[s]||lT(r),a.backends[s].init(n,a.options.backendOptions&&a.options.backendOptions[s]||{},i)}),this.services&&this.options.reloadInterval&&setInterval(function(){return a.reload()},this.options.reloadInterval)}},{key:"read",value:function(n,a,l){var i=this,r=this.backends.length,s=function(c){if(c>=r)return l(new Error("non of the backend loaded data"),i.options.retryOnFailure);var f=c===r-1,d=i.options.handleEmptyResourcesAsFailed&&!f?0:-1,p=i.backends[c];p.read?am(p,n,a,function(S,y,x){if(!S&&y&&Object.keys(y).length>d){if(l(null,y,c),o(c-1,y),p.save&&i.options.cacheHitMode&&["refresh","refreshAndUpdateStore"].indexOf(i.options.cacheHitMode)>-1){if(x&&i.options.refreshExpirationTime&&x+i.options.refreshExpirationTime>Date.now())return;var h=i.backends[c+1];h&&h.read&&am(h,n,a,function(m,b){m||b&&(Object.keys(b).length<=d||(o(c,b),i.options.cacheHitMode==="refreshAndUpdateStore"&&i.services&&i.services.resourceStore&&i.services.resourceStore.addResourceBundle(n,a,b)))})}}else s(c+1)}):s(c+1)},o=function(c,f){if(!(c<0)){var d=i.backends[c];d.save&&d.save(n,a,f),o(c-1,f)}};s(0)}},{key:"create",value:function(n,a,l,i){var r=arguments.length>4&&arguments[4]!==void 0?arguments[4]:function(){},s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:{};this.backends.forEach(function(o){if(o.create){var u=o.create.bind(o);if(u.length<6){try{var c;u.length===5?c=u(n,a,l,i,s):c=u(n,a,l,i),c&&typeof c.then=="function"?c.then(function(f){return r(null,f)}).catch(r):r(null,c)}catch(f){r(f)}return}u(n,a,l,i,r,s)}})}},{key:"reload",value:function(){var n=this,a=this.services,l=a.backendConnector,i=a.languageUtils,r=a.logger,s=l.language;if(!(s&&s.toLowerCase()==="cimode")){var o=[],u=function(f){var d=i.toResolveHierarchy(f);d.forEach(function(p){o.indexOf(p)<0&&o.push(p)})};u(s),this.allOptions.preload&&this.allOptions.preload.forEach(function(c){return u(c)}),o.forEach(function(c){n.allOptions.ns.forEach(function(f){l.read(c,f,"read",null,null,function(d,p){d&&r.warn("loading namespace ".concat(f," for language ").concat(c," failed"),d),!d&&p&&r.log("loaded namespace ".concat(f," for language ").concat(c),p),l.loaded("".concat(c,"|").concat(f),d,p)})})})}}}])})();Xc.type="backend";var om=[];om.forEach;om.slice;var um=["__proto__","constructor","prototype"];function cm(e){return!(typeof e!="string"||e.length===0||e.length>128||um.indexOf(e)>-1||e.indexOf("..")>-1||e.indexOf("\\")>-1||/[?#%\s@]/.test(e)||/[\x00-\x1F\x7F]/.test(e))}function fm(e){return!(!cm(e)||e.indexOf("/")>-1)}function rT(e){return cm(e)}var sT={lng:fm,ns:rT};function io(e){return typeof e!="string"?e:e.replace(/[\r\n\x00-\x1F\x7F]/g," ")}function oT(e){if(typeof e!="string"||e.length===0)return e;try{let t=new URL(e);return t.username||t.password?(t.username="",t.password="",t.toString()):e}catch(t){return e.replace(/(\/\/)[^/@\s]+@/g,"$1")}}function dm(){return typeof XMLHttpRequest=="function"||typeof XMLHttpRequest=="object"}function uT(e){return!!e&&typeof e.then=="function"}function cT(e){return uT(e)?e:Promise.resolve(e)}var fT=/\{\{(.+?)\}\}/g;function im(e,t){let n=!1,a=e.replace(fT,(l,i)=>{let r=i.trim();if(um.indexOf(r)>-1)return l;let s=t[r];if(s==null)return l;let o=sT[r]||fm,u=String(s).split("+");for(let c of u)if(!o(c))return n=!0,l;return u.join("+")});return n?null:a}var pl=typeof globalThis<"u"?globalThis:typeof global<"u"?global:typeof window<"u"?window:void 0,ro;typeof fetch=="function"?ro=fetch:pl&&typeof pl.fetch=="function"&&(ro=pl.fetch);var rm=dm()&&pl?pl.XMLHttpRequest:void 0,dT=typeof ActiveXObject=="function"&&pl?pl.ActiveXObject:void 0,hm=["__proto__","constructor","prototype"],$c=(e,t)=>{if(t&&typeof t=="object"){let n="";for(let a of Object.keys(t))hm.indexOf(a)>-1||(n+="&"+encodeURIComponent(a)+"="+encodeURIComponent(t[a]));if(!n)return e;e=e+(e.indexOf("?")!==-1?"&":"?")+n.slice(1)}return e},sm=(e,t,n,a)=>{let l=i=>{if(!i.ok)return n(i.statusText||"Error",{status:i.status});i.text().then(r=>{n(null,{status:i.status,data:r})}).catch(n)};if(a){let i=a(e,t);if(i instanceof Promise){i.then(l).catch(n);return}}typeof fetch=="function"?fetch(e,t).then(l).catch(n):ro(e,t).then(l).catch(n)},hT=(e,t,n,a)=>{e.queryStringParams&&(t=$c(t,e.queryStringParams));let l=T({},typeof e.customHeaders=="function"?e.customHeaders():e.customHeaders);typeof window>"u"&&typeof global<"u"&&typeof global.process<"u"&&global.process.versions&&global.process.versions.node&&(l["User-Agent"]="i18next-http-backend (node/".concat(global.process.version,"; ").concat(global.process.platform," ").concat(global.process.arch,")")),n&&(l["Content-Type"]="application/json");let i=typeof e.requestOptions=="function"?e.requestOptions(n):e.requestOptions,r=T({method:n?"POST":"GET",body:n?e.stringify(n):void 0,headers:l},e._omitFetchOptions?{}:i),s=typeof e.alternateFetch=="function"&&e.alternateFetch.length>=1?e.alternateFetch:void 0;try{sm(t,r,a,s)}catch(o){if(!i||Object.keys(i).length===0||!o.message||o.message.indexOf("not implemented")<0)return a(o);try{Object.keys(i).forEach(u=>{delete r[u]}),sm(t,r,a,s),e._omitFetchOptions=!0}catch(u){a(u)}}},pT=(e,t,n,a)=>{n&&typeof n=="object"&&(n=$c("",n).slice(1)),e.queryStringParams&&(t=$c(t,e.queryStringParams));try{let l=rm?new rm:new dT("MSXML2.XMLHTTP.3.0");l.open(n?"POST":"GET",t,1),e.crossDomain||l.setRequestHeader("X-Requested-With","XMLHttpRequest"),l.withCredentials=!!e.withCredentials,n&&l.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),l.overrideMimeType&&l.overrideMimeType("application/json");let i=e.customHeaders;if(i=typeof i=="function"?i():i,i)for(let r of Object.keys(i))hm.indexOf(r)>-1||l.setRequestHeader(r,i[r]);l.onreadystatechange=()=>{l.readyState>3&&a(l.status>=400?l.statusText:null,{status:l.status,data:l.responseText})},l.send(n)}catch(l){console&&console.log(l)}},mT=(e,t,n,a)=>{if(typeof n=="function"&&(a=n,n=void 0),a=a||(()=>{}),ro&&t.indexOf("file:")!==0)return hT(e,t,n,a);if(dm()||typeof ActiveXObject=="function")return pT(e,t,n,a);a(new Error("No fetch and no xhr implementation found!"))},gT=()=>({loadPath:"/locales/{{lng}}/{{ns}}.json",addPath:"/locales/add/{{lng}}/{{ns}}",parse:e=>JSON.parse(e),stringify:JSON.stringify,parsePayload:(e,t,n)=>({[t]:n||""}),parseLoadPayload:(e,t)=>{},request:mT,reloadInterval:typeof window<"u"?!1:3600*1e3,customHeaders:{},queryStringParams:{},crossDomain:!1,withCredentials:!1,overrideMimeType:!1,requestOptions:{mode:"cors",credentials:"same-origin",cache:"default"}}),Qc=class{constructor(e,t={},n={}){this.services=e,this.options=t,this.allOptions=n,this.type="backend",this.init(e,t,n)}init(e,t={},n={}){if(this.services=e,this.options=T(T(T({},gT()),this.options||{}),t),this.allOptions=n,this.services&&this.options.reloadInterval){let a=setInterval(()=>this.reload(),this.options.reloadInterval);typeof a=="object"&&typeof a.unref=="function"&&a.unref()}}readMulti(e,t,n){this._readAny(e,e,t,t,n)}read(e,t,n){this._readAny([e],e,[t],t,n)}_readAny(e,t,n,a,l){let i=this.options.loadPath;typeof this.options.loadPath=="function"&&(i=this.options.loadPath(e,n)),i=cT(i),i.then(r=>{if(!r)return l(null,{});let s=im(r,{lng:e.join("+"),ns:n.join("+")});if(s==null){let o=e.map(io).join(", "),u=n.map(io).join(", ");return l(new Error("i18next-http-backend: unsafe lng/ns value \u2014 refusing to build request URL for languages=["+o+"] namespaces=["+u+"]"),!1)}this.loadUrl(s,l,t,a)})}loadUrl(e,t,n,a){let l=typeof n=="string"?[n]:n,i=typeof a=="string"?[a]:a,r=this.options.parseLoadPayload(l,i),s=io(oT(e));this.options.request(this.options,e,r,(o,u)=>{if(u&&(u.status>=500&&u.status<600||!u.status))return t("failed loading "+s+"; status code: "+u.status,!0);if(u&&u.status>=400&&u.status<500)return t("failed loading "+s+"; status code: "+u.status,!1);if(!u&&o&&o.message){let d=o.message.toLowerCase();if(["failed","fetch","network","load"].find(p=>d.indexOf(p)>-1))return t("failed loading "+s+": "+io(o.message),!0)}if(o)return t(o,!1);let c,f;try{typeof u.data=="string"?c=this.options.parse(u.data,n,a):c=u.data}catch(d){f="failed parsing "+s+" to json"}if(f)return t(f,!1);t(null,c)})}create(e,t,n,a,l){if(!this.options.addPath)return;typeof e=="string"&&(e=[e]);let i=this.options.parsePayload(t,n,a),r=0,s=[],o=[];e.forEach(u=>{let c=this.options.addPath;typeof this.options.addPath=="function"&&(c=this.options.addPath(u,t));let f=im(c,{lng:u,ns:t});if(f==null){r+=1,l&&r===e.length&&l(s,o);return}this.options.request(this.options,f,i,(d,p)=>{r+=1,s.push(d),o.push(p),r===e.length&&typeof l=="function"&&l(s,o)})})}reload(){let{backendConnector:e,languageUtils:t,logger:n}=this.services,a=e.language;if(a&&a.toLowerCase()==="cimode")return;let l=[],i=r=>{t.toResolveHierarchy(r).forEach(s=>{l.indexOf(s)<0&&l.push(s)})};i(a),this.allOptions.preload&&this.allOptions.preload.forEach(r=>i(r)),l.forEach(r=>{this.allOptions.ns.forEach(s=>{e.read(r,s,"read",null,null,(o,u)=>{o&&n.warn("loading namespace ".concat(s," for language ").concat(r," failed"),o),!o&&u&&n.log("loaded namespace ".concat(s," for language ").concat(r),u),e.loaded("".concat(r,"|").concat(s),o,u)})})})}};Qc.type="backend";function pm(e,t,n){return(t=lo(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function mm(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(l){return Object.getOwnPropertyDescriptor(e,l).enumerable})),n.push.apply(n,a)}return n}function Zc(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?mm(Object(n),!0).forEach(function(a){pm(e,a,n[a])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):mm(Object(n)).forEach(function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(n,a))})}return e}var yT=(function(){function e(t){br(this,e),this.store=t.store}return vr(e,[{key:"setItem",value:function(n,a){if(this.store)try{this.store.setItem(n,a)}catch(l){}}},{key:"getItem",value:function(n,a){if(this.store)try{return this.store.getItem(n,a)}catch(l){}}}])})();function bT(){var e=null;try{e=window.localStorage}catch(t){typeof window<"u"&&console.log("Failed to load local storage.",t)}return{prefix:"i18next_res_",expirationTime:10080*60*1e3,defaultVersion:void 0,getVersion:void 0,versions:{},store:e}}var Kc=(function(){function e(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};br(this,e),this.init(t,n),this.type="backend"}return vr(e,[{key:"init",value:function(n){var a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.services=n,this.options=Zc(Zc(Zc({},bT()),this.options),a),this.storage=new yT(this.options)}},{key:"read",value:function(n,a,l){var i=Date.now();if(!this.storage.store)return l(null,null);var r=this.storage.getItem("".concat(this.options.prefix).concat(n,"-").concat(a));if(r){r=JSON.parse(r);var s=this.getVersion(n,a);if(r.i18nStamp&&r.i18nStamp+this.options.expirationTime>i&&s===r.i18nVersion){var o=r.i18nStamp;return delete r.i18nVersion,delete r.i18nStamp,l(null,r,o)}}return l(null,null)}},{key:"save",value:function(n,a,l){if(this.storage.store){l.i18nStamp=Date.now();var i=this.getVersion(n,a);i&&(l.i18nVersion=i),this.storage.setItem("".concat(this.options.prefix).concat(n,"-").concat(a),JSON.stringify(l))}}},{key:"getVersion",value:function(n,a){var l,i;return((l=(i=this.options).getVersion)===null||l===void 0?void 0:l.call(i,n,a))||this.options.versions[n]||this.options.defaultVersion}}])})();Kc.type="backend";var YT=$(ye(),1);var Tr=$(ye(),1);var LT=$(Nm());var oo=(e,t,n,a)=>{var i,r,s,o;let l=[n,T({code:t},a||{})];if((r=(i=e==null?void 0:e.services)==null?void 0:i.logger)!=null&&r.forward)return e.services.logger.forward(l,"warn","react-i18next::",!0);vn(l[0])&&(l[0]="react-i18next:: ".concat(l[0])),(o=(s=e==null?void 0:e.services)==null?void 0:s.logger)!=null&&o.warn?e.services.logger.warn(...l):console!=null&&console.warn&&console.warn(...l)},_m={},wa=(e,t,n,a)=>{vn(n)&&_m[n]||(vn(n)&&(_m[n]=new Date),oo(e,t,n,a))},Cm=(e,t)=>()=>{if(e.isInitialized)t();else{let n=()=>{setTimeout(()=>{e.off("initialized",n)},0),t()};e.on("initialized",n)}},uo=(e,t,n)=>{e.loadNamespaces(t,Cm(e,n))},nf=(e,t,n,a)=>{if(vn(n)&&(n=[n]),e.options.preload&&e.options.preload.indexOf(t)>-1)return uo(e,n,a);n.forEach(l=>{e.options.ns.indexOf(l)<0&&e.options.ns.push(l)}),e.loadLanguages(t,Cm(e,a))},Dm=(e,t,n={})=>!t.languages||!t.languages.length?(wa(t,"NO_LANGUAGES","i18n.languages were undefined or empty",{languages:t.languages}),!0):t.hasLoadedNamespace(e,{lng:n.lng,precheck:(a,l)=>{if(n.bindI18n&&n.bindI18n.indexOf("languageChanging")>-1&&a.services.backendConnector.backend&&a.isLanguageChangingTo&&!l(a.isLanguageChangingTo,e))return!1}});var vn=e=>typeof e=="string",af=e=>typeof e=="object"&&e!==null;var UT=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,HT={"&":"&","&":"&","<":"<","<":"<",">":">",">":">","'":"'","'":"'",""":'"',""":'"'," ":" "," ":" ","©":"\xA9","©":"\xA9","®":"\xAE","®":"\xAE","…":"\u2026","…":"\u2026","/":"/","/":"/"},BT=e=>HT[e],lf=e=>e.replace(UT,BT);var rf={bindI18n:"languageChanged",bindI18nStore:"",transEmptyNodeValue:"",transSupportBasicHtmlNodes:!0,transWrapTextNodes:"",transKeepBasicHtmlNodesFor:["br","strong","i","p"],useSuspense:!0,unescape:lf,transDefaultProps:void 0},co=(e={})=>{rf=T(T({},rf),e)},Sr=()=>rf;var zm,fo=e=>{zm=e},Sn=()=>zm;var Mm=$(ye(),1);var ho={type:"3rdParty",init(e){co(e.options.react),fo(e)}};var Ra=(0,Mm.createContext)(),po=class{constructor(){this.usedNamespaces={}}addUsedNamespaces(t){t.forEach(n=>{this.usedNamespaces[n]||(this.usedNamespaces[n]=!0)})}getUsedNamespaces(){return Object.keys(this.usedNamespaces)}};var qm=$(ye(),1);var ml=$(ye(),1);var ei=class e extends Error{constructor(t,n,a){super(t),this.name="TranslationParserError",this.position=n,this.translationString=a,Error.captureStackTrace&&Error.captureStackTrace(this,e)}};var Lm={" ":"\xA0","&":"&","<":"<",">":">",""":'"',"'":"'","©":"\xA9","®":"\xAE","™":"\u2122","…":"\u2026","–":"\u2013","—":"\u2014","‘":"\u2018","’":"\u2019","‚":"\u201A","“":"\u201C","”":"\u201D","„":"\u201E","†":"\u2020","‡":"\u2021","•":"\u2022","′":"\u2032","″":"\u2033","‹":"\u2039","›":"\u203A","§":"\xA7","¶":"\xB6","·":"\xB7"," ":"\u2002"," ":"\u2003"," ":"\u2009","€":"\u20AC","£":"\xA3","¥":"\xA5","¢":"\xA2","¤":"\xA4","×":"\xD7","÷":"\xF7","−":"\u2212","±":"\xB1","≠":"\u2260","≤":"\u2264","≥":"\u2265","≈":"\u2248","≡":"\u2261","∞":"\u221E","∫":"\u222B","∑":"\u2211","∏":"\u220F","√":"\u221A","∂":"\u2202","‰":"\u2030","°":"\xB0","µ":"\xB5","←":"\u2190","↑":"\u2191","→":"\u2192","↓":"\u2193","↔":"\u2194","↵":"\u21B5","⇐":"\u21D0","⇑":"\u21D1","⇒":"\u21D2","⇓":"\u21D3","⇔":"\u21D4","α":"\u03B1","β":"\u03B2","γ":"\u03B3","δ":"\u03B4","ε":"\u03B5","ζ":"\u03B6","η":"\u03B7","θ":"\u03B8","ι":"\u03B9","κ":"\u03BA","λ":"\u03BB","μ":"\u03BC","ν":"\u03BD","ξ":"\u03BE","ο":"\u03BF","π":"\u03C0","ρ":"\u03C1","σ":"\u03C3","τ":"\u03C4","υ":"\u03C5","φ":"\u03C6","χ":"\u03C7","ψ":"\u03C8","ω":"\u03C9","Α":"\u0391","Β":"\u0392","Γ":"\u0393","Δ":"\u0394","Ε":"\u0395","Ζ":"\u0396","Η":"\u0397","Θ":"\u0398","Ι":"\u0399","Κ":"\u039A","Λ":"\u039B","Μ":"\u039C","Ν":"\u039D","Ξ":"\u039E","Ο":"\u039F","Π":"\u03A0","Ρ":"\u03A1","Σ":"\u03A3","Τ":"\u03A4","Υ":"\u03A5","Φ":"\u03A6","Χ":"\u03A7","Ψ":"\u03A8","Ω":"\u03A9","À":"\xC0","Á":"\xC1","Â":"\xC2","Ã":"\xC3","Ä":"\xC4","Å":"\xC5","Æ":"\xC6","Ç":"\xC7","È":"\xC8","É":"\xC9","Ê":"\xCA","Ë":"\xCB","Ì":"\xCC","Í":"\xCD","Î":"\xCE","Ï":"\xCF","Ð":"\xD0","Ñ":"\xD1","Ò":"\xD2","Ó":"\xD3","Ô":"\xD4","Õ":"\xD5","Ö":"\xD6","Ø":"\xD8","Ù":"\xD9","Ú":"\xDA","Û":"\xDB","Ü":"\xDC","Ý":"\xDD","Þ":"\xDE","ß":"\xDF","à":"\xE0","á":"\xE1","â":"\xE2","ã":"\xE3","ä":"\xE4","å":"\xE5","æ":"\xE6","ç":"\xE7","è":"\xE8","é":"\xE9","ê":"\xEA","ë":"\xEB","ì":"\xEC","í":"\xED","î":"\xEE","ï":"\xEF","ð":"\xF0","ñ":"\xF1","ò":"\xF2","ó":"\xF3","ô":"\xF4","õ":"\xF5","ö":"\xF6","ø":"\xF8","ù":"\xF9","ú":"\xFA","û":"\xFB","ü":"\xFC","ý":"\xFD","þ":"\xFE","ÿ":"\xFF","¡":"\xA1","¿":"\xBF","ƒ":"\u0192","ˆ":"\u02C6","˜":"\u02DC","Œ":"\u0152","œ":"\u0153","Š":"\u0160","š":"\u0161","Ÿ":"\u0178","ª":"\xAA","º":"\xBA","¯":"\xAF","´":"\xB4","¸":"\xB8","¹":"\xB9","²":"\xB2","³":"\xB3","¼":"\xBC","½":"\xBD","¾":"\xBE","♠":"\u2660","♣":"\u2663","♥":"\u2665","♦":"\u2666","◊":"\u25CA","‾":"\u203E","⁄":"\u2044","℘":"\u2118","ℑ":"\u2111","ℜ":"\u211C","ℵ":"\u2135"},VT=new RegExp(Object.keys(Lm).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|"),"g"),Um=e=>e.replace(VT,t=>Lm[t]).replace(/&#(\d+);/g,(t,n)=>String.fromCharCode(parseInt(n,10))).replace(/&#x([0-9a-fA-F]+);/g,(t,n)=>String.fromCharCode(parseInt(n,16)));var Hm=e=>{let t=[],n=0,a="",l=()=>{a&&(t.push({type:"Text",value:a,position:n-a.length}),a="")};for(;n<e.length;){let i=e[n];if(i==="<"){let r=e.slice(n).match(/^<(\d+)>/);if(r)l(),t.push({type:"TagOpen",value:r[0],position:n,tagNumber:parseInt(r[1],10)}),n+=r[0].length;else{let s=e.slice(n).match(/^<\/(\d+)>/);s?(l(),t.push({type:"TagClose",value:s[0],position:n,tagNumber:parseInt(s[1],10)}),n+=s[0].length):(a+=i,n+=1)}}else a+=i,n+=1}return l(),t};var xr=$(ye(),1);var GT=(e,t,n)=>{let{type:a,props:l={}}=e;if(l.children&&Array.isArray(l.children)&&n){let i=l,{children:r}=i,s=Wn(i,["children"]);return xr.default.createElement(a,s,...t)}return t.length===0?xr.default.createElement(a,l):t.length===1?xr.default.createElement(a,l,t[0]):xr.default.createElement(a,l,...t)},Bm=(e,t=[])=>{if(!e)return[];let n=Hm(e),a=[],l=[],i=new Set,r=()=>{var o;if(l.length===0)return t;let s=l[l.length-1];return(o=s.declaration.props)!=null&&o.children&&Array.isArray(s.declaration.props.children)?s.declaration.props.children:s.declarations};if(n.forEach(s=>{switch(s.type){case"Text":{let o=Um(s.value);(l.length>0?l[l.length-1].children:a).push(o)}break;case"TagOpen":{let{tagNumber:o}=s,u=r(),c=u[o];if(!c){i.add(o);let f="<".concat(o,">");(l.length>0?l[l.length-1].children:a).push(f);break}l.push({tagNumber:o,children:[],position:s.position,declaration:c,declarations:u})}break;case"TagClose":{let{tagNumber:o}=s;if(i.has(o)){let d="</".concat(o,">");(l.length>0?l[l.length-1].children:a).push(d),i.delete(o);break}if(l.length===0)throw new ei("Unexpected closing tag </".concat(o,"> at position ").concat(s.position),s.position,e);let u=l.pop();if(u.tagNumber!==o)throw new ei("Mismatched tags: expected </".concat(u.tagNumber,"> but got </").concat(o,"> at position ").concat(s.position),s.position,e);let c=GT(u.declaration,u.children,u.declarations);(l.length>0?l[l.length-1].children:a).push(c)}break}}),l.length>0){let s=l[l.length-1];throw new ei("Unclosed tag <".concat(s.tagNumber,"> at position ").concat(s.position),s.position,e)}return a};function mo({i18nKey:e,defaultTranslation:t,content:n,ns:a,values:l={},i18n:i,t:r}){var d,p,S,y;let s=i||Sn();if(!s)return wa(s,"NO_I18NEXT_INSTANCE","IcuTrans: You need to pass in an i18next instance using i18nextReactModule",{i18nKey:e}),ml.default.createElement(ml.default.Fragment,{},t);let o=r||((d=s.t)==null?void 0:d.bind(s))||(x=>x),u=a||o.ns||((p=s.options)==null?void 0:p.defaultNS);u=vn(u)?[u]:u||["translation"];let c=l;(y=(S=s.options)==null?void 0:S.interpolation)!=null&&y.defaultVariables&&(c=l&&Object.keys(l).length>0?T(T({},l),s.options.interpolation.defaultVariables):T({},s.options.interpolation.defaultVariables));let f=o(e,M(T({defaultValue:t},c),{ns:u}));try{let x=Bm(f,n);return ml.default.createElement(ml.default.Fragment,{},...x)}catch(x){return oo(s,"ICU_TRANS_RENDER_ERROR",'IcuTrans component error for key "'.concat(e,'": ').concat(x.message),{i18nKey:e,error:x}),ml.default.createElement(ml.default.Fragment,{},f)}}mo.displayName="IcuTransWithoutContext";function jm({i18nKey:e,defaultTranslation:t,content:n,ns:a,values:l={},i18n:i,t:r}){var f;let{i18n:s,defaultNS:o}=(0,qm.useContext)(Ra)||{},u=i||s||Sn(),c=r||(u==null?void 0:u.t.bind(u));return mo({i18nKey:e,defaultTranslation:t,content:n,ns:a||(c==null?void 0:c.ns)||o||((f=u==null?void 0:u.options)==null?void 0:f.defaultNS),values:l,i18n:u,t:r})}jm.displayName="IcuTrans";var et=$(ye(),1),$m=$(Xm(),1);var WT=(e,t)=>{if(vn(t))return t;if(af(t)&&vn(t.defaultValue))return t.defaultValue;if(typeof e=="function")return"";if(Array.isArray(e)){let n=e[e.length-1];return typeof n=="function"?"":n}return e},ex={t:WT,ready:!1},tx=()=>()=>{},it=(e,t={})=>{var L,U,Se;let{i18n:n}=t,{i18n:a,defaultNS:l}=(0,et.useContext)(Ra)||{},i=n||a||Sn();i&&!i.reportNamespaces&&(i.reportNamespaces=new po),i||wa(i,"NO_I18NEXT_INSTANCE","useTranslation: You will need to pass in an i18next instance by using initReactI18next");let r=(0,et.useMemo)(()=>{var X;return T(T(T({},Sr()),(X=i==null?void 0:i.options)==null?void 0:X.react),t)},[i,t]),{useSuspense:s,keyPrefix:o}=r,u=e||l||((L=i==null?void 0:i.options)==null?void 0:L.defaultNS),c=vn(u)?[u]:u||["translation"],f=(0,et.useMemo)(()=>c,c);(Se=(U=i==null?void 0:i.reportNamespaces)==null?void 0:U.addUsedNamespaces)==null||Se.call(U,f);let d=(0,et.useRef)(0),p=(0,et.useCallback)(X=>{if(!i)return tx;let{bindI18n:D,bindI18nStore:z}=r,P=()=>{d.current+=1,X()};return D&&i.on(D,P),z&&i.store.on(z,P),()=>{D&&D.split(" ").forEach(ie=>i.off(ie,P)),z&&z.split(" ").forEach(ie=>i.store.off(ie,P))}},[i,r]),S=(0,et.useRef)(),y=(0,et.useCallback)(()=>{if(!i)return ex;let X=!!(i.isInitialized||i.initializedStoreOnce)&&f.every(Pe=>Dm(Pe,i,r)),D=t.lng||i.language,z=d.current,P=S.current;if(P&&P.ready===X&&P.lng===D&&P.keyPrefix===o&&P.revision===z)return P;let re={t:i.getFixedT(D,r.nsMode==="fallback"?f:f[0],o,{scopeNs:f}),ready:X,lng:D,keyPrefix:o,revision:z};return S.current=re,re},[i,f,o,r,t.lng]),[x,h]=(0,et.useState)(0),{t:m,ready:b}=(0,$m.useSyncExternalStore)(p,y,y);(0,et.useEffect)(()=>{if(i&&!b&&!s){let X=()=>h(D=>D+1);t.lng?nf(i,t.lng,f,X):uo(i,f,X)}},[i,t.lng,f,b,s,x]);let v=i||{},E=(0,et.useRef)(null),N=(0,et.useRef)(),R=X=>{let D=Object.getOwnPropertyDescriptors(X);D.__original&&delete D.__original;let z=Object.create(Object.getPrototypeOf(X),D);if(!Object.prototype.hasOwnProperty.call(z,"__original"))try{Object.defineProperty(z,"__original",{value:X,writable:!1,enumerable:!1,configurable:!1})}catch(P){}return z},C=(0,et.useMemo)(()=>{let X=v,D=X==null?void 0:X.language,z=X;X&&(E.current&&E.current.__original===X?N.current!==D?(z=R(X),E.current=z,N.current=D):z=E.current:(z=R(X),E.current=z,N.current=D));let P=!b&&!s?(...re)=>(wa(i,"USE_T_BEFORE_READY","useTranslation: t was called before ready. When using useSuspense: false, make sure to check the ready flag before using t."),m(...re)):m,ie=[P,z,b];return ie.t=P,ie.i18n=z,ie.ready=b,ie},[m,v,b,v.resolvedLanguage,v.language,v.languages]);if(i&&s&&!b)throw new Promise(X=>{let D=()=>X();t.lng?nf(i,t.lng,f,D):uo(i,f,D)});return C};var Qm=$(ye(),1);var Zm=$(ye(),1);var rx=$(ye(),1);var ax=$(ye(),1);var Km={auth:{invalidUsernamePass:"Invalid username/password combination",incorrectOldPassword:"Incorrect Old Password",passwordTooShort:"Password must be at least 6 characters long",passUpdated:"Password updated",missingRequiredFields:"Missing Required Fields"},error:{notFound:"Not Found",internalError:"Internal Server Error",invalidArgs:"Invalid Arguments",badMethod:"Bad Method",notAuthenticated:"Not Authenticated",permissionDenied:"Permission Denied",error:"error: {{status}}",errorWithMsg:"error {{status}}: {{msg}}",requestTimedOut:"request timed out",networkError:"network error"},nav:{privateProfileEnabled:"private profile enabled",darkMode:"dark mode",lightMode:"light mode",addUrl:"add url",addNote:"add note",notes:"notes",settings:"settings",logout:"log out",login:"log in"},footer:{sourceCode:"Source Code"},login:{pageTitle:"Log In",username:"Username",password:"Password",submit:"Log In"},changePassword:{oldPassword:"Old Password",newPassword:"New Password",submit:"Save Changes"},settings:{serverDefault:"Server Default",bookmarklet:"add url bookmarklet",changePassword:"Change Password",accountTitle:"Account Settings",archiveDefault:"Archive new non-Private bookmarks by default",privateDefault:"Default new bookmarks to Private",suggestTags:"Enable tag suggestions",privacyLock:"Privacy Lock (Private Account)",publicTagCloud:"Public Tag Cloud (visible to visitors)",archivingDisabled:"Archiving Disabled",language:"Language"},rss:"RSS",filter:{all:"all",private:"private",public:"public",unread:"unread",untagged:"untagged",starred:"starred"},pagination:{perPage:"per page:"},pager:{earlier:"\xAB earlier",later:"later \xBB"},notes:{youHave_one:"You have 1 note:",youHave_other:"You have {{count}} notes:",found_one:"Found 1 note:",found_other:"Found {{count}} notes:"},search:{placeholder:"search",clearTitle:"clear search results",submitTitle:"submit search",syntaxTitle:"search syntax"},noTitle:"[no title]",edit:"edit",delete:"delete",cancel:"cancel",destroy:"destroy",save:"save",fetch:"fetch",archive:"archive",archiving:"archiving",bmark:{archiveLinkTitle:"archive link",markAsRead:"mark as read",viewInContext:"view in context",url:"url",title:"title",description:"description",tags:"tags",private:"private",toread:"to-read"},note:{killed:"you killed this note",titleLabel:"title:",descriptionLabel:"description:",useMarkdown:"use markdown?",publicLabel:"public?"},addForm:{previouslySaved:"previously saved",url:"URL",archive:"archive",archiveUnavailable:"archiving is unavailable for private bookmarks",readLater:"read later",update:"update bookmark",add:"add bookmark",killed:"you killed this bookmark"},tagCloud:{relatedTags:"Related Tags",topTags:"Top Tags",topTagsTitle:"show a cloud of your most-used tags",allTitle:"show all tags",min2Title:"show tags with at least 2 bookmarks",min5Title:"show tags with at least 5 bookmarks",min10Title:"show tags with at least 10 bookmarks",min20Title:"show tags with at least 20 bookmarks",hide:"hide",show:"show"},bulkEdit:{edit:"edit",select:"select:",oneBookmarkSelected:"1 bookmark selected",bookmarksSelected:"{{count}} bookmarks selected",thisPage:"this page",allPages:"all pages",action:"action:",markAsRead:"mark as read",unread:"unread",addStars:"add stars",removeStars:"remove stars",makePrivate:"make private",makePublic:"make public",removeTags:"remove tags:",addTags:"add tags:",submitting:"submitting\u2026",submit:"submit",destroyOne:"destroy 1 bookmark?",destroyMany:"destroy {{count}} bookmarks?",publicOne:"make 1 bookmark public?",publicMany:"make {{count}} bookmarks public?",pleaseAddSelection:"please add a bookmark selection",pleaseChooseAction:"please choose an action or enter tags",tooManyTags:"cannot add more than 10 tags at the same time when over 20,000 bookmarks would be affected",pageMismatch:"page bookmark count mismatch",editedCount_one:"edited {{editedCount}} bookmark",editedCount_other:"edited {{editedCount}} bookmarks",editedCountMismatch_one:"selection count was {{selectionCount}}, but edited {{editedCount}} bookmark, due to matching bookmark data having changed",editedCountMismatch_other:"selection count was {{selectionCount}}, but edited {{editedCount}} bookmarks, due to matching bookmark data having changed"},docs:{title:"Understanding the Search Syntax",pageFilters:"Page filters",pageFiltersDesc:"Searches are scoped to the currently selected page filter.",soGiven:"So, given the possible page filters",if:"If",isCurrentlySelectedIncludes:"is currently selected, the search includes",bookmarks:"bookmarks",isCurrentlySelectedOnly:"is currently selected, the search only includes",bookmarksEtc:"bookmarks, etc..",combineAnd:"Combine Searches (AND)",separateBySpace:"Separate terms by a space.",forExample:"For example,",combineOr:"Combine Searches (OR)",put:"Put",betweenQuery:"between each search query.",excludeWords:"Exclude words from your search",inFrontWord:"in front of a word you want to leave out.",exactMatch:"Search for an exact match",putInQuotes:"Put a word or phrase inside quotes.",specificField:"Search on a specific field",inFrontTerm:"in front of the term,",where:"where",isOneOfOptions:"is one of the options below",bookmarkSearch:"Bookmark Search",noteSearch:"Note Search",fieldHeader:"FIELD",exampleHeader:"EXAMPLE",complexExamples:"More Complex Examples",complexExample1Desc:'"youtube" in url, and title of "haskell" or title of "python" and after 12/31/2017',complexExample2Desc:'"hacker news" not in title, and "news", "cnn", "npr" anywhere, or "the guardian" in the description'}};function Ke(){return globalThis.app}function Fm(){let e=globalThis.app.tagCloudR;if(!e)return"api/tagcloud";try{let t=new URL(e,window.location.origin),n="".concat(t.pathname).concat(t.search).concat(t.hash);return n.startsWith("/")?n.slice(1):n}catch(t){return e.replace(/^\/+/,"")}}function ni(e=navigator.language,t){let a=(t instanceof Date?t.getTime():new Date(t).getTime())-Date.now(),l=Math.abs(a),i=[["year",365*24*60*60*1e3],["month",720*60*60*1e3],["day",1440*60*1e3],["hour",3600*1e3],["minute",60*1e3],["second",1e3]],r=new Intl.RelativeTimeFormat(e,{numeric:"auto"});for(let[s,o]of i)if(l>=o||s==="second")return r.format(Math.round(a/o),s);return""}function Oa(e,t){return new Date(t).toLocaleString(e,{dateStyle:"full",timeStyle:"long"})}function Jm(e,t){return new Date(t).toLocaleDateString(e,{year:"numeric",month:"short",day:"numeric"})}function ai(e){e.close()}function go(e){var t;(t=document.getElementById(e))==null||t.focus()}function ox(e){return decodeURIComponent(e)}function ux(e){var r;let t=e.slice(0,1),a=(t==="#"||t==="?"?e.slice(1):e).split("&").filter(s=>s!==""),l=s=>ox(s.replace(/\+/g," ")),i=[];for(let s of a){let[o,...u]=s.split("=");o&&(u.length===0?i.push([l(o),null]):u.length===1&&i.push([l(o),l((r=u[0])!=null?r:"")]))}return i}function Er(){return ux(window.location.search)}function kr(e,t){for(let[n,a]of e)if(n===t)return a;return null}function li(e){return encodeURIComponent(e.replace(/\+/g,"%2B"))}function Dn(e){return e!=null?e:""}function ta(e){var t;return(t=e==null?void 0:e.replace(/,/g," ").replace(/\s+/g," ").trim())!=null?t:""}function jt(e,t,n){let a=n.trim();return!a.includes("\n")&&!a.includes("doctype html")&&a.length>0?e("error.errorWithMsg",{status:t,msg:a}):e("error.error",{status:t})}function Im(e){let t=5381,n=e.length;for(;n;)t=t*33^e.charCodeAt(--n);return(t>>>0).toString(36)}var Pm="translation";var of=Ke();mt.use(Xc).use(ho).init({lng:of.lang,fallbackLng:"en",defaultNS:Pm,ns:[Pm],partialBundledLanguages:!0,resources:{en:{translation:Km}},backend:{backends:[Kc,Qc],backendOptions:[{prefix:"i18next_res_".concat(Im(of.i18nR),"_"),expirationTime:10080*60*1e3},{loadPath:"".concat(of.i18nR,"/{{lng}}/{{ns}}.json")}]},interpolation:{escapeValue:!1},load:"currentOnly"});var k1=$(ye()),Ap=$(_v());var jn=class extends Error{constructor(){super(...arguments);V(this,"name","KyError")}get isKyError(){return!0}};var Fi=class extends jn{constructor(n,a,l){var u;let i=n.status||n.status===0?n.status:"",r=(u=n.statusText)!=null?u:"",s="".concat(i," ").concat(r).trim(),o=s?"status code ".concat(s):"an unknown error";super("Request failed with ".concat(o,": ").concat(a.method," ").concat(a.url));V(this,"name","HTTPError");V(this,"response");V(this,"request");V(this,"options");V(this,"data");this.response=n,this.request=a,this.options=l}};var Ji=class extends jn{constructor(n,a){super("Request failed due to a network error: ".concat(n.method," ").concat(n.url),a);V(this,"name","NetworkError");V(this,"request");this.request=n}};var Ii=class extends Error{constructor(n){let a="Non-error value was thrown";try{typeof n=="string"?a=n:n&&typeof n=="object"&&"message"in n&&typeof n.message=="string"&&(a=n.message)}catch(l){}super(a);V(this,"name","NonError");V(this,"value");this.value=n}};var Ul=class extends jn{constructor(n){let a=n!=null&&n.cause?n.cause instanceof Error?n.cause:new Ii(n.cause):void 0;super(n!=null&&n.code?"Forced retry: ".concat(n.code):"Forced retry",a?{cause:a}:void 0);V(this,"name","ForceRetryError");V(this,"customDelay");V(this,"code");V(this,"customRequest");this.customDelay=n==null?void 0:n.delay,this.code=n==null?void 0:n.code,this.customRequest=n==null?void 0:n.request}};var Qu=class extends Error{constructor(n){super("Response schema validation failed");V(this,"name","SchemaValidationError");V(this,"issues");this.issues=n}};var _e=class extends jn{constructor(n){super("Request timed out: ".concat(n.method," ").concat(n.url));V(this,"name","TimeoutError");V(this,"request");this.request=n}};var Yh=(()=>{let e=!1,t=!1,n=typeof globalThis.ReadableStream=="function",a=typeof globalThis.Request=="function";if(n&&a)try{t=new globalThis.Request("https://empty.invalid",{body:new globalThis.ReadableStream,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type")}catch(l){if(l instanceof Error&&l.message==="unsupported BodyInit type")return!1;throw l}return e&&!t})(),Cv=typeof globalThis.AbortController=="function",Zu=typeof globalThis.AbortSignal=="function"&&typeof globalThis.AbortSignal.any=="function",Dv=typeof globalThis.ReadableStream=="function",zv=typeof globalThis.FormData=="function",Ku=["get","post","put","patch","head","delete"],qk=()=>{};qk();var Mv={json:"application/json",text:"text/*",formData:"multipart/form-data",arrayBuffer:"*/*",blob:"*/*",bytes:"*/*"},Pi=2147483647,Lv=40,Fu=Symbol("stop"),ws=class{constructor(t){V(this,"options");this.options=t}},Uv=e=>new ws(e),Hv={json:!0,parseJson:!0,stringifyJson:!0,searchParams:!0,baseUrl:!0,prefix:!0,retry:!0,timeout:!0,totalTimeout:!0,hooks:!0,throwHttpErrors:!0,onDownloadProgress:!0,onUploadProgress:!0,fetch:!0,context:!0},Bv={method:!0,headers:!0,body:!0,mode:!0,credentials:!0,cache:!0,redirect:!0,referrer:!0,referrerPolicy:!0,integrity:!0,keepalive:!0,signal:!0,window:!0,duplex:!0};var Ju=new TextEncoder,jk=e=>{if(!e)return 0;if(e instanceof FormData){let t=0;for(let[n,a]of e)t+=Lv,t+=Ju.encode('Content-Disposition: form-data; name="'.concat(n,'"')).byteLength,t+=typeof a=="string"?Ju.encode(a).byteLength:a.size;return t}return e instanceof Blob?e.size:e instanceof ArrayBuffer||ArrayBuffer.isView(e)?e.byteLength:typeof e=="string"?Ju.encode(e).byteLength:e instanceof URLSearchParams?Ju.encode(e.toString()).byteLength:0},qv=(e,t,n)=>{let a,l=0;return e.pipeThrough(new TransformStream({transform(i,r){if(r.enqueue(i),a){l+=a.byteLength;let s=t===0?0:l/t;s>=1&&(s=1-Number.EPSILON),n==null||n({percent:s,totalBytes:Math.max(t,l),transferredBytes:l},a)}a=i},flush(){a&&(l+=a.byteLength,n==null||n({percent:1,totalBytes:Math.max(t,l),transferredBytes:l},a))}}))},jv=(e,t)=>{if(!e.body)return e;let n={status:e.status,statusText:e.statusText,headers:e.headers};if(e.status===204)return new Response(null,n);let a=Math.max(0,Number(e.headers.get("content-length"))||0);return new Response(qv(e.body,a,t),n)},Yv=(e,t,n)=>{if(!e.body)return e;let a=jk(n!=null?n:e.body);return new Request(e,{duplex:"half",body:qv(e.body,a,t)})};var Yn=e=>e!==null&&typeof e=="object";var Yk=Symbol("replaceOption"),Vh=e=>Yn(e)&&e[Yk]===!0?{isReplace:!0,value:e.value}:{isReplace:!1,value:e};var Os=(...e)=>{for(let t of e)if((!Yn(t)||Array.isArray(t))&&t!==void 0)throw new TypeError("The `options` argument must be an object");return $h({},...e)},Xh=(e={},t={})=>{let n=new globalThis.Headers(e),a=t instanceof globalThis.Headers,l=new globalThis.Headers(t);for(let[i,r]of l.entries())a&&r==="undefined"||r===void 0?n.delete(i):n.set(i,r);return n},Gh=e=>{if(!Yn(e)||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null},Wi=e=>{if(e instanceof URLSearchParams){let t=new URLSearchParams(e),n=e[al];return n&&(t[al]=new Set(n)),t}return e instanceof globalThis.Headers?new globalThis.Headers(e):Array.isArray(e)?[...e]:Gh(e)?T({},e):e},Vk=e=>Object.fromEntries(Object.entries(e).filter(t=>t[1]!==void 0)),Gk=(e,t)=>Gh(e)&&Gh(t)?Vk(T(T({},e),t)):Xh(e,t);function Rs(e,t,n){var a,l;return Object.hasOwn(t,n)&&t[n]===void 0?[]:$h((a=e[n])!=null?a:[],(l=t[n])!=null?l:[])}var Iu=(e={},t={})=>({init:Rs(e,t,"init"),beforeRequest:Rs(e,t,"beforeRequest"),beforeRetry:Rs(e,t,"beforeRetry"),beforeError:Rs(e,t,"beforeError"),afterResponse:Rs(e,t,"afterResponse")}),al=Symbol("deletedParameters"),Xk=(e,t)=>{let n=new URLSearchParams,a=new Set;for(let l of[e,t])if(l!==void 0)if(l instanceof URLSearchParams){for(let[r,s]of l.entries())n.append(r,s),a.delete(r);let i=l[al];if(i)for(let r of i)n.delete(r),a.add(r)}else if(Array.isArray(l))for(let i of l){if(!Array.isArray(i)||i.length!==2)throw new TypeError("Array search parameters must be provided in [[key, value], ...] format");n.append(String(i[0]),String(i[1])),a.delete(String(i[0]))}else if(Yn(l))for(let[i,r]of Object.entries(l))r===void 0?(n.delete(i),a.add(i)):(n.append(i,String(r)),a.delete(i));else{let i=new URLSearchParams(l);for(let[r,s]of i.entries())n.append(r,s),a.delete(r)}return a.size>0&&(n[al]=a),n},$h=(...e)=>{let t={},n={},a={},l,i=[];for(let r of e)if(Array.isArray(r))Array.isArray(t)||(t=[]),t=[...t,...r];else if(Yn(r)){for(let[s,o]of Object.entries(r)){if(s==="signal"&&o instanceof globalThis.AbortSignal){i.push(o);continue}let u=Vh(o),{isReplace:c}=u;if(o=u.value,s==="context"){if(o!=null&&(!Yn(o)||Array.isArray(o)))throw new TypeError("The `context` option must be an object");t=M(T({},t),{context:o==null?{}:T(c?{}:T({},t.context),o)});continue}if(s==="searchParams"){o==null?l=void 0:c?l=o:l=l===void 0?o:Xk(l,o);continue}Yn(o)&&!c&&s in t&&(o=$h(t[s],o)),t=M(T({},t),{[s]:o})}if(Yn(r.hooks)){let{value:s,isReplace:o}=Vh(r.hooks);a=Iu(o?{}:a,s),t.hooks=a}if(Yn(r.headers)){let{value:s,isReplace:o}=Vh(r.headers);n=o?Wi(s):Gk(n,s),t.headers=n}}return l!==void 0&&(t.searchParams=l),i.length>0&&(i.length===1?t.signal=i[0]:Zu?t.signal=AbortSignal.any(i):t.signal=i.at(-1)),t};var Gv=e=>Ku.includes(e)?e.toUpperCase():e,$k=["get","put","head","delete","options","trace"],Qk=[408,413,429,500,502,503,504],Zk=[413,429,503],Vv={limit:2,methods:$k,statusCodes:Qk,afterStatusCodes:Zk,maxRetryAfter:Number.POSITIVE_INFINITY,backoffLimit:Number.POSITIVE_INFINITY,delay:e=>.3*2**(e-1)*1e3,jitter:void 0,retryOnTimeout:!1},Xv=(e={})=>{var n;if(typeof e=="number")return M(T({},Vv),{limit:e});if(e.methods&&!Array.isArray(e.methods))throw new Error("retry.methods must be an array");if(e.statusCodes&&!Array.isArray(e.statusCodes))throw new Error("retry.statusCodes must be an array");let t=Object.fromEntries(Object.entries(M(T({},e),{methods:(n=e.methods)==null?void 0:n.map(a=>a.toLowerCase())})).filter(([,a])=>a!==void 0));return T(T({},Vv),t)};async function Qh(e,t,n,a){return new Promise((l,i)=>{let r=setTimeout(()=>{n&&n.abort(),i(new _e(e))},a.timeout);a.fetch(e,t).then(l).catch(i).then(()=>{clearTimeout(r)})})}async function Pu(e,{signal:t}){return new Promise((n,a)=>{t&&(t.throwIfAborted(),t.addEventListener("abort",l,{once:!0}));function l(){clearTimeout(i),a(t.reason)}let i=setTimeout(()=>{t==null||t.removeEventListener("abort",l),n()},e)})}var $v=e=>{let t={};for(let n in e)Object.hasOwn(e,n)&&!(n in Bv)&&!(n in Hv)&&(t[n]=e[n]);return t},Qv=e=>{var t;return e===void 0?!1:Array.isArray(e)?e.length>0:e instanceof URLSearchParams?e.size>0||!!((t=e[al])!=null&&t.size):typeof e=="object"?Object.keys(e).length>0:typeof e=="string"?e.trim().length>0:!!e};var Kk=Object.prototype.toString,Fk=e=>Kk.call(e)==="[object Error]",Jk=new Set(["network error","NetworkError when attempting to fetch resource.","The Internet connection appears to be offline.","Network request failed","fetch failed","terminated"," A network error occurred.","Network connection lost"]);function Zh(e){if(!(e&&Fk(e)&&e.name==="TypeError"&&typeof e.message=="string"))return!1;let{message:n,stack:a}=e;return n==="Load failed"?a===void 0||"__sentry_captured__"in e:n.startsWith("error sending request for url")||n==="Failed to fetch"||n.startsWith("Failed to fetch (")&&n.endsWith(")")?!0:Jk.has(n)}var Kh=(e,t)=>e instanceof t||(e==null?void 0:e.name)===t.name;function Zv(e){return Kh(e,Fi)}function Kv(e){return Kh(e,Ji)}function Fv(e){return Kh(e,_e)}var Ik=10*1024*1024,Pk="The `prefixUrl` option has been renamed `prefix` in v2 and enhanced to allow slashes in input. See also the new `baseUrl` option for improved flexibility with standard URL resolution: https://github.com/sindresorhus/ky#baseurl",Ns=Symbol("timedOutResponseData"),Wk=e=>{var a;let t=/;\s*charset\s*=\s*(?:"([^"]+)"|([^;,\s]+))/i.exec(e),n=(a=t==null?void 0:t[1])!=null?a:t==null?void 0:t[2];if(n)try{return new TextDecoder(n)}catch(l){}return new TextDecoder},Jv="The `schema` argument must follow the Standard Schema specification",eA=e=>typeof e!="object"?e:T(T(T(T({},e),e.methods&&{methods:[...e.methods]}),e.statusCodes&&{statusCodes:[...e.statusCodes]}),e.afterStatusCodes&&{afterStatusCodes:[...e.afterStatusCodes]}),Wv=Object.prototype.toString,Iv=e=>e instanceof globalThis.Request||Wv.call(e)==="[object Request]",_s=e=>e instanceof globalThis.Response||Wv.call(e)==="[object Response]",tA=e=>Array.isArray(e)?e.map(t=>[...t]):Wi(e);function nA(e){let t=M(T({},e),{json:Wi(e.json),context:Wi(e.context),headers:Wi(e.headers),searchParams:tA(e.searchParams)});return e.retry!==void 0&&(t.retry=eA(e.retry)),t}var Pv=async(e,t)=>{if(typeof t!="object"&&typeof t!="function"||t===null)throw new TypeError(Jv);let n=t["~standard"];if(typeof n!="object"||n===null||typeof n.validate!="function")throw new TypeError(Jv);let a=await n.validate(e);if(a.issues)throw new Qu(a.issues);return a.value},ic,eS,xa,kn,lt,_,Ls,Bl,Us,ql,nr,jl,Hs,O,Hl,tS,Fh,nS,Jh,aS,lS,iS,Wu,ll,Ih,Cs,rS,sS,Ph,ec,tc,nc,Ds,Wh,er,ac,tr,lc,oS,zs=class zs{constructor(t,n={}){kt(this,O);V(this,"request");kt(this,xa);kt(this,kn,0);kt(this,lt);kt(this,_);kt(this,Ls);kt(this,Bl);kt(this,Us,new WeakSet);kt(this,ql);kt(this,nr);kt(this,jl,!1);kt(this,Hs,new WeakMap);var l,i,r,s,o,u,c,f,d,p,S,y,x,h;if(pt(this,lt,t),Object.hasOwn(n,"prefixUrl"))throw new Error(Pk);if(pt(this,_,M(T({},n),{headers:Xh(k(this,lt).headers,n.headers),hooks:Iu({},n.hooks),method:Gv((i=(l=n.method)!=null?l:k(this,lt).method)!=null?i:"GET"),prefix:String(n.prefix||""),retry:Xv(n.retry),throwHttpErrors:(r=n.throwHttpErrors)!=null?r:!0,timeout:(s=n.timeout)!=null?s:1e4,totalTimeout:(o=n.totalTimeout)!=null?o:!1,fetch:(u=n.fetch)!=null?u:globalThis.fetch.bind(globalThis),context:(c=n.context)!=null?c:{}})),typeof k(this,lt)!="string"&&!(k(this,lt)instanceof URL||k(this,lt)instanceof globalThis.Request))throw new TypeError("`input` must be a string, URL, or Request");if(typeof k(this,lt)=="string"){if(k(this,_).prefix){let m=k(this,_).prefix.replace(/\/+$/,""),b=k(this,lt).replace(/^\/+/,"");pt(this,lt,"".concat(m,"/").concat(b))}if(k(this,_).baseUrl){let m;try{m=new URL(k(this,lt))}catch(b){}m||pt(this,lt,new URL(k(this,lt),new Request(k(this,_).baseUrl).url))}}Cv&&Zu&&(pt(this,Bl,(f=k(this,_).signal)!=null?f:k(this,lt).signal),pt(this,xa,new globalThis.AbortController),k(this,_).signal=B(this,O,Ih).call(this)),Yh&&(k(this,_).duplex="half"),k(this,_).json!==void 0&&(k(this,_).body=(S=(p=(d=k(this,_)).stringifyJson)==null?void 0:p.call(d,k(this,_).json))!=null?S:JSON.stringify(k(this,_).json),k(this,_).headers.set("content-type",(y=k(this,_).headers.get("content-type"))!=null?y:"application/json"));let a=n.headers&&new globalThis.Headers(n.headers).has("content-type");if(k(this,lt)instanceof globalThis.Request&&(zv&&k(this,_).body instanceof globalThis.FormData||k(this,_).body instanceof URLSearchParams)&&!a&&k(this,_).headers.delete("content-type"),this.request=new globalThis.Request(k(this,lt),k(this,_)),Qv(k(this,_).searchParams)){let m=new URL(this.request.url),b=(x=k(this,_).searchParams)==null?void 0:x[al];if(b)for(let v of b)m.searchParams.delete(v);if(typeof k(this,_).searchParams=="string"){let v=k(this,_).searchParams.replace(/^\?/,"");v!==""&&(m.search=m.search?"".concat(m.search,"&").concat(v):"?".concat(v))}else{let v=new URLSearchParams(B(h=zs,ic,eS).call(h,k(this,_).searchParams));for(let[E,N]of v.entries())m.searchParams.append(E,N)}if(k(this,_).searchParams&&typeof k(this,_).searchParams=="object"&&!Array.isArray(k(this,_).searchParams)&&!(k(this,_).searchParams instanceof URLSearchParams))for(let[v,E]of Object.entries(k(this,_).searchParams))E===void 0&&m.searchParams.delete(v);this.request=new globalThis.Request(m,k(this,_))}if(k(this,_).onUploadProgress&&typeof k(this,_).onUploadProgress!="function")throw new TypeError("The `onUploadProgress` option must be a function");pt(this,nr,typeof k(this,_).totalTimeout=="number"?B(this,O,Wh).call(this):void 0)}static create(t,n){var o,u,c,f;let a=(u=(o=n.hooks)==null?void 0:o.init)!=null?u:[],l=a.length>0?nA(n):n;for(let d of a)d(l);let i=new zs(t,l),r=async()=>{var y,x,h,m,b,v,E,N,R,C,L,U,Se;if(typeof k(i,_).timeout=="number"&&k(i,_).timeout>Pi)throw new RangeError("The `timeout` option cannot be greater than ".concat(Pi));if(typeof k(i,_).totalTimeout=="number"&&k(i,_).totalTimeout>Pi)throw new RangeError("The `totalTimeout` option cannot be greater than ".concat(Pi));await Promise.resolve();let d=await B(y=i,O,rS).call(y),p=d!=null?d:await B(x=i,O,Ph).call(x,async()=>{var X;return B(X=i,O,nc).call(X)}),S=d!==void 0||B(h=i,O,tc).call(h);for(;;){if(p===void 0)return p;if(_s(p))try{p=await B(m=i,O,sS).call(m,p)}catch(D){if(!(D instanceof Ul))throw D;let z=await B(b=i,O,ec).call(b,D,async()=>{var P;return B(P=i,O,nc).call(P)});if(z===void 0)return z;p=z,S=B(v=i,O,tc).call(v);continue}let X=p;if(!X.ok&&X.type!=="opaque"&&(typeof k(i,_).throwHttpErrors=="function"?k(i,_).throwHttpErrors(X.status):k(i,_).throwHttpErrors)){let D=new Fi(X,B(E=i,O,tr).call(E,X),B(N=i,O,er).call(N)),z=D;if(D.data=await B(R=i,O,nS).call(R,X),S)throw z;let P=await B(C=i,O,ec).call(C,D,async()=>{var ie;return B(ie=i,O,nc).call(ie)});if(P===void 0)return P;p=P,S=B(L=i,O,tc).call(L);continue}break}if(!_s(p))return p;if(B(U=i,O,Fh).call(U,p),k(i,_).onDownloadProgress){if(typeof k(i,_).onDownloadProgress!="function")throw new TypeError("The `onDownloadProgress` option must be a function");if(!Dv)throw new Error("Streams are not supported in your environment. `ReadableStream` is missing.");let X=p.clone();return B(Se=i,O,ll).call(Se,p),jv(X,k(i,_).onDownloadProgress)}return p},s=(async()=>{var d,p,S,y,x;try{return await r()}catch(h){if(!(h instanceof Error)||k(i,Us).has(h))throw h;let m=h;for(let b of k(i,_).hooks.beforeError){let v=await b({request:i.request,options:B(d=i,O,er).call(d),error:m,retryCount:k(i,kn)});v instanceof Error&&(m=v)}throw m}finally{let h=k(i,Ls);B(S=i,O,Wu).call(S,(p=h==null?void 0:h.body)!=null?p:void 0),i.request!==h&&B(x=i,O,Wu).call(x,(y=i.request.body)!=null?y:void 0)}})();for(let[d,p]of Object.entries(Mv))d==="bytes"&&typeof((f=(c=globalThis.Response)==null?void 0:c.prototype)==null?void 0:f.bytes)!="function"||(s[d]=async S=>{var m;i.request.headers.set("accept",i.request.headers.get("accept")||p);let y=await s;if(d!=="json")return y[d]();let x=await y.text();if(x==="")return S!==void 0?Pv(void 0,S):JSON.parse(x);let h=l.parseJson?await l.parseJson(x,{request:B(m=i,O,tr).call(m,y),response:y}):JSON.parse(x);return S===void 0?h:Pv(h,S)});return s}};ic=new WeakSet,eS=function(t){return t&&typeof t=="object"&&!Array.isArray(t)&&!(t instanceof URLSearchParams)?Object.fromEntries(Object.entries(t).filter(([,n])=>n!==void 0)):t},xa=new WeakMap,kn=new WeakMap,lt=new WeakMap,_=new WeakMap,Ls=new WeakMap,Bl=new WeakMap,Us=new WeakMap,ql=new WeakMap,nr=new WeakMap,jl=new WeakMap,Hs=new WeakMap,O=new WeakSet,Hl=function(){let t=k(this,_).retry.delay(k(this,kn)+1),n=t;return k(this,_).retry.jitter===!0?n=Math.random()*t:typeof k(this,_).retry.jitter=="function"&&(n=k(this,_).retry.jitter(t),(!Number.isFinite(n)||n<0)&&(n=t)),Math.min(k(this,_).retry.backoffLimit,n)},tS=async function(t){var a,l,i,r,s;if(k(this,kn)>=k(this,_).retry.limit)throw t;let n=t instanceof Error?t:new Ii(t);if(n instanceof Ul)return(a=n.customDelay)!=null?a:B(this,O,Hl).call(this);if(!k(this,_).retry.methods.includes(this.request.method.toLowerCase()))throw t;if(k(this,_).retry.shouldRetry!==void 0){let o=await k(this,_).retry.shouldRetry({error:n,retryCount:k(this,kn)+1});if(o===!1)throw t;if(o===!0)return B(this,O,Hl).call(this)}if(Fv(t)){if(!k(this,_).retry.retryOnTimeout)throw t;return B(this,O,Hl).call(this)}if(Zv(t)){if(!k(this,_).retry.statusCodes.includes(t.response.status))throw t;let o=(s=(r=(i=(l=t.response.headers.get("Retry-After"))!=null?l:t.response.headers.get("RateLimit-Reset"))!=null?i:t.response.headers.get("X-RateLimit-Retry-After"))!=null?r:t.response.headers.get("X-RateLimit-Reset"))!=null?s:t.response.headers.get("X-Rate-Limit-Reset");if(o&&k(this,_).retry.afterStatusCodes.includes(t.response.status)){let u=Number(o)*1e3;return Number.isNaN(u)?u=Date.parse(o)-Date.now():u>=Date.parse("2024-01-01")&&(u-=Date.now()),Number.isFinite(u)?(u=Math.max(0,u),Math.min(k(this,_).retry.maxRetryAfter,u)):Math.min(k(this,_).retry.maxRetryAfter,B(this,O,Hl).call(this))}if(t.response.status===413)throw t;return B(this,O,Hl).call(this)}if(!Kv(t))throw t;return B(this,O,Hl).call(this)},Fh=function(t){let n=B(this,O,tr).call(this,t);return k(this,_).parseJson&&(t.json=async()=>{let a=await t.text();return a===""?JSON.parse(a):k(this,_).parseJson(a,{request:n,response:t})}),t},nS=async function(t){var l;let n=await B(this,O,lS).call(this,t,B(this,O,Jh).call(this));if(n===Ns){B(this,O,Cs).call(this);return}if(!n)return;if(!B(this,O,aS).call(this,(l=t.headers.get("content-type"))!=null?l:""))return n;let a=await B(this,O,iS).call(this,n,t,B(this,O,Jh).call(this),B(this,O,tr).call(this,t));if(a===Ns){B(this,O,Cs).call(this);return}return a},Jh=function(){let t=k(this,_).timeout===!1?1e4:k(this,_).timeout,n=B(this,O,Ds).call(this);if(n===void 0)return t;if(n<=0)throw new _e(this.request);return Math.min(t,n)},aS=function(t){var a;let n=((a=t.split(";",1)[0])!=null?a:"").trim().toLowerCase();return/\/(?:.*[.+-])?json$/.test(n)},lS=async function(t,n){var f;let{body:a}=t;if(!a)try{return await t.text()}catch(d){return}let l;try{l=a.getReader()}catch(d){return}let i=Wk((f=t.headers.get("content-type"))!=null?f:""),r=[],s=0,o=(async()=>{try{for(;;){let{done:d,value:p}=await l.read();if(d)break;if(s+=p.byteLength,s>Ik){l.cancel().catch(()=>{});return}r.push(i.decode(p,{stream:!0}))}}catch(d){return}return r.push(i.decode()),r.join("")})(),u=new Promise(d=>{let p=setTimeout(()=>{d(Ns)},n);o.finally(()=>{clearTimeout(p)})}),c=await Promise.race([o,u]);return c===Ns&&l.cancel().catch(()=>{}),c},iS=async function(t,n,a,l){let i;try{return await Promise.race([Promise.resolve().then(()=>k(this,_).parseJson?k(this,_).parseJson(t,{request:l,response:n}):JSON.parse(t)),new Promise(r=>{i=setTimeout(()=>{r(Ns)},a)})])}catch(r){return}finally{clearTimeout(i)}},Wu=function(t){t&&t.cancel().catch(()=>{})},ll=function(t){var n;B(this,O,Wu).call(this,(n=t.body)!=null?n:void 0)},Ih=function(){return k(this,Bl)?AbortSignal.any([k(this,Bl),k(this,xa).signal]):k(this,xa).signal},Cs=function(){let t=B(this,O,Ds).call(this);if(t!==void 0&&t<=0)throw new _e(this.request)},rS=async function(){for(let t of k(this,_).hooks.beforeRequest){let n=await t({request:this.request,options:B(this,O,er).call(this),retryCount:0});if(Iv(n))B(this,O,ac).call(this,n);else if(_s(n))return n}},sS=async function(t){let n=B(this,O,tr).call(this,t);for(let a of k(this,_).hooks.afterResponse){let l=B(this,O,lc).call(this,t.clone(),n);B(this,O,Fh).call(this,l);let i;try{i=await a({request:this.request,options:B(this,O,er).call(this),response:l,retryCount:k(this,kn)})}catch(s){throw l!==t&&B(this,O,ll).call(this,l),B(this,O,ll).call(this,t),s}if(i instanceof ws)throw l!==t&&B(this,O,ll).call(this,l),B(this,O,ll).call(this,t),new Ul(i.options);let r=_s(i)?B(this,O,lc).call(this,i,n):t;l!==t&&l!==r&&l.body!==r.body&&B(this,O,ll).call(this,l),t!==r&&t.body!==r.body&&B(this,O,ll).call(this,t),t=r}return t},Ph=async function(t){try{return await t()}catch(n){return B(this,O,ec).call(this,n,t)}},ec=async function(t,n){pt(this,jl,!1);let a=Math.min(await B(this,O,tS).call(this,t),Pi),l={signal:k(this,Bl)},i=B(this,O,Ds).call(this);if(i!==void 0){if(i<=0)throw new _e(this.request);if(a>=i)throw await Pu(i,l),new _e(this.request)}if(await Pu(a,l),B(this,O,Cs).call(this),t instanceof Ul&&t.customRequest){let r=new globalThis.Request(t.customRequest,k(this,_).signal?{signal:k(this,_).signal}:void 0);B(this,O,ac).call(this,r)}for(let r of k(this,_).hooks.beforeRetry){let s;try{s=await r({request:this.request,options:B(this,O,er).call(this),error:t,retryCount:k(this,kn)+1})}catch(o){throw o instanceof Error&&o!==t&&k(this,Us).add(o),o}if(Iv(s)){B(this,O,ac).call(this,s);break}if(_s(s))return pt(this,jl,!0),zc(this,kn)._++,s;if(s===Fu)return}return B(this,O,Cs).call(this),zc(this,kn)._++,B(this,O,Ph).call(this,n)},tc=function(){let t=k(this,jl);return pt(this,jl,!1),t},nc=async function(){var l,i;(l=k(this,xa))!=null&&l.signal.aborted&&(pt(this,xa,new globalThis.AbortController),k(this,_).signal=B(this,O,Ih).call(this),this.request=new globalThis.Request(this.request,{signal:k(this,_).signal}));let t=$v(k(this,_)),n=k(this,_).retry.limit>0?this.request.clone():void 0,a=B(this,O,oS).call(this,this.request,(i=k(this,_).body)!=null?i:void 0);pt(this,Ls,a),n&&(this.request=n);try{let r=B(this,O,Ds).call(this);if(r!==void 0&&r<=0)throw new _e(this.request);let s=k(this,_).timeout===!1?r:r===void 0?k(this,_).timeout:Math.min(k(this,_).timeout,r),o=s===void 0?await k(this,_).fetch(a,t):await Qh(a,t,k(this,xa),{timeout:s,fetch:k(this,_).fetch});return B(this,O,lc).call(this,o,a)}catch(r){throw Zh(r)?new Ji(this.request,{cause:r}):r}},Ds=function(){if(k(this,nr)===void 0)return;let t=B(this,O,Wh).call(this)-k(this,nr);return Math.max(0,k(this,_).totalTimeout-t)},Wh=function(){var t,n;return(n=(t=globalThis.performance)==null?void 0:t.now())!=null?n:Date.now()},er=function(){if(!k(this,ql)){let t=k(this,_),{hooks:n,json:a,parseJson:l,stringifyJson:i,searchParams:r,timeout:s,totalTimeout:o,throwHttpErrors:u,fetch:c}=t,f=Wn(t,["hooks","json","parseJson","stringifyJson","searchParams","timeout","totalTimeout","throwHttpErrors","fetch"]);pt(this,ql,Object.freeze(f))}return k(this,ql)},ac=function(t){pt(this,ql,void 0),this.request=t},tr=function(t){var n;return(n=k(this,Hs).get(t))!=null?n:this.request},lc=function(t,n){return k(this,Hs).set(t,n),t},oS=function(t,n){var a;return!k(this,_).onUploadProgress||!t.body||!Yh?t:Yv(t,k(this,_).onUploadProgress,(a=n!=null?n:k(this,_).body)!=null?a:void 0)},kt(zs,ic);var Ms=zs;var ep=e=>{let t=(n,a)=>Ms.create(n,Os(e,a));for(let n of Ku)t[n]=(a,l)=>Ms.create(a,Os(e,l,{method:n}));return t.create=n=>ep(Os(n)),t.extend=n=>(typeof n=="function"&&(n=n(e!=null?e:{})),ep(Os(e,n))),t.stop=Fu,t.retry=Uv,t},aA=ep(),uS=aA;function lA(e){let t=Ke(),n=new Headers(e);return n.set(t.csrfHeaderName,t.csrfToken),n}function iA(e){return"".concat(Ke().homeR).concat(e)}function cS(e){try{let t=new URL(e,window.location.origin),n="".concat(t.pathname).concat(t.search).concat(t.hash);return n.startsWith("/")?n.slice(1):n}catch(t){return e.replace(/^\/+/,"")}}async function Dt(e,t,n={}){var l;return await uS(iA(t),{method:e,headers:lA(n.headers),body:(l=n.body)!=null?l:void 0,throwHttpErrors:!1,timeout:n.timeout})}async function fS(e,t){let n=await Dt("PATCH","api/bm/".concat(e.toString(),"/").concat(t),{headers:{"content-type":"application/x-www-form-urlencoded"}});return{ok:n.ok,status:n.status,bodyText:await n.text()}}async function dS(e){let t=await Dt("PATCH","api/bm/".concat(e.toString(),"/read"),{headers:{"content-type":"application/x-www-form-urlencoded"}});return{ok:t.ok,status:t.status,bodyText:await t.text()}}async function rc(e){let t=await Dt("DELETE","api/bm/".concat(e.toString()),{headers:{"content-type":"application/x-www-form-urlencoded"}});return{ok:t.ok,status:t.status,bodyText:await t.text()}}async function hS(e){var i;let t=await Dt("POST","api/bm/bulk",{headers:{"content-type":"application/json"},body:JSON.stringify(e),timeout:3e5}),n=(i=t.headers.get("content-type"))!=null?i:"",a,l;if(n.includes("application/json"))try{l=await t.json()}catch(r){l=void 0}else a=await t.text();return{ok:t.ok,status:t.status,bodyText:a,data:l}}async function pS(e){let t=await Dt("POST","api/bm/".concat(e.toString(),"/archive"),{headers:{"content-type":"application/x-www-form-urlencoded"}});return{ok:t.ok,status:t.status,bodyText:await t.text()}}async function sc(e){let t=await Dt("POST","api/add",{headers:{"content-type":"application/json"},body:JSON.stringify(e)});return{ok:t.ok,status:t.status,bodyText:await t.text()}}async function mS(e){let t=await Dt("POST","api/note/add",{headers:{"content-type":"application/json"},body:JSON.stringify(e)});return{ok:t.ok,status:t.status,bodyText:await t.text()}}async function oc(e){let t=await Dt("POST","api/lookuptitle",{headers:{"content-type":"application/json"},body:JSON.stringify(e)});return t.status===200?await t.text():null}async function gS(e){let t=await Dt("POST",cS(Fm()),{headers:{"content-type":"application/json"},body:JSON.stringify(e)});if(!t.ok)return null;try{return await t.json()}catch(n){return null}}async function yS(e){await Dt("POST","api/tagcloudmode",{headers:{"content-type":"application/json"},body:JSON.stringify(e)})}async function bS(e){let t=await Dt("POST","api/tagSuggestions",{headers:{"content-type":"application/json"},body:JSON.stringify(e)});if(!t.ok)return null;try{return await t.json()}catch(n){return null}}async function vS(e){let t=await Dt("DELETE","api/note/".concat(e.toString()),{headers:{"content-type":"application/x-www-form-urlencoded"}});return{ok:t.ok,status:t.status,bodyText:await t.text()}}async function SS(e){let t=await Dt("POST","api/accountSettings",{headers:{"content-type":"application/json"},body:JSON.stringify(e)});return{ok:t.ok,status:t.status,bodyText:await t.text()}}async function TS(){let e=Ke();await Dt("POST",cS(e.authRlogoutR)),window.location.reload()}var tp=$(ye());var ee=$(Me());function AS({initial:e}){var u;let{t}=it(),[n,a]=tp.default.useState(e),[l,i]=tp.default.useState(null),r=!n.archiveBackendEnabled,s=r?t("settings.archivingDisabled"):void 0;async function o(c){try{let f=await SS(c);if(!f.ok)return i(jt(t,f.status,f.bodyText)),!1;i(null),a(c);let d=document.getElementById("privacy-lock-icon");return d&&(d.style.display=c.privacyLock?"":"none"),!0}catch(f){return i(f instanceof _e?t("error.requestTimedOut"):t("error.networkError")),!1}}return(0,ee.jsxs)("div",{className:"settings-form",children:[(0,ee.jsx)("div",{className:"fw7 mb2",children:t("settings.accountTitle")}),(0,ee.jsxs)("div",{className:"flex items-center mb2",children:[(0,ee.jsx)("label",{htmlFor:"language",className:"lh-copy mr2",children:t("settings.language")}),(0,ee.jsxs)("select",{id:"language",name:"language",className:"pointer",value:(u=n.language)!=null?u:"",onChange:c=>{let f=M(T({},n),{language:c.target.value===""?null:c.target.value});o(f).then(d=>{d&&window.location.reload()})},children:[(0,ee.jsx)("option",{value:"",children:t("settings.serverDefault")}),(0,ee.jsx)("option",{value:"en",children:"English"}),(0,ee.jsx)("option",{value:"de",children:"Deutsch"}),(0,ee.jsx)("option",{value:"es",children:"Espa\xF1ol"}),(0,ee.jsx)("option",{value:"fr",children:"Fran\xE7ais"}),(0,ee.jsx)("option",{value:"it",children:"Italiano"}),(0,ee.jsx)("option",{value:"ja",children:"\u65E5\u672C\u8A9E"}),(0,ee.jsx)("option",{value:"ko",children:"\uD55C\uAD6D\uC5B4"}),(0,ee.jsx)("option",{value:"pl",children:"Polski"}),(0,ee.jsx)("option",{value:"pt-BR",children:"Portugu\xEAs (Brasil)"}),(0,ee.jsx)("option",{value:"ru",children:"\u0420\u0443\u0441\u0441\u043A\u0438\u0439"}),(0,ee.jsx)("option",{value:"tr",children:"T\xFCrk\xE7e"}),(0,ee.jsx)("option",{value:"uk",children:"\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430"}),(0,ee.jsx)("option",{value:"zh-Hans",children:"\u7B80\u4F53\u4E2D\u6587"}),(0,ee.jsx)("option",{value:"zh-Hant",children:"\u7E41\u9AD4\u4E2D\u6587"})]})]}),(0,ee.jsxs)("div",{className:"flex items-center mb2".concat(r?" o-50":""),title:s,children:[(0,ee.jsx)("input",{type:"checkbox",className:"mr2".concat(r?"":" pointer"),id:"archiveDefault",name:"archiveDefault",checked:n.archiveDefault,disabled:r,title:s,onChange:c=>{o(M(T({},n),{archiveDefault:c.target.checked}))}}),(0,ee.jsx)("label",{htmlFor:"archiveDefault",className:"lh-copy".concat(r?" thm-text-tertiary":""),title:s,children:t("settings.archiveDefault")})]}),(0,ee.jsxs)("div",{className:"flex items-center mb2",children:[(0,ee.jsx)("input",{type:"checkbox",className:"pointer mr2",id:"suggestTags",name:"suggestTags",checked:n.suggestTags,onChange:c=>{o(M(T({},n),{suggestTags:c.target.checked}))}}),(0,ee.jsx)("label",{htmlFor:"suggestTags",className:"lh-copy",children:t("settings.suggestTags")})]}),(0,ee.jsxs)("div",{className:"flex items-center mb2",children:[(0,ee.jsx)("input",{type:"checkbox",className:"pointer mr2",id:"privateDefault",name:"privateDefault",checked:n.privateDefault,onChange:c=>{o(M(T({},n),{privateDefault:c.target.checked}))}}),(0,ee.jsx)("label",{htmlFor:"privateDefault",className:"lh-copy",children:t("settings.privateDefault")})]}),(0,ee.jsxs)("div",{className:"flex items-center mb2",children:[(0,ee.jsx)("input",{type:"checkbox",className:"pointer mr2",id:"publicTagCloud",name:"publicTagCloud",checked:n.publicTagCloud,onChange:c=>{o(M(T({},n),{publicTagCloud:c.target.checked}))}}),(0,ee.jsx)("label",{htmlFor:"publicTagCloud",className:"lh-copy",children:t("settings.publicTagCloud")})]}),(0,ee.jsxs)("div",{className:"flex items-center mb2",children:[(0,ee.jsx)("input",{type:"checkbox",className:"pointer mr2",id:"privacyLock",name:"privacyLock",checked:n.privacyLock,onChange:c=>{o(M(T({},n),{privacyLock:c.target.checked}))}}),(0,ee.jsx)("label",{htmlFor:"privacyLock",className:"lh-copy",children:t("settings.privacyLock")})]}),l?(0,ee.jsx)("div",{className:"thm-text-error f7 mt2",children:l}):null]})}var il=$(ye());var zt=$(ye());var uA=180;function Yl({enabled:e,tags:t,onTagsUpdate:n,maxSuggestions:a=10}){let[l,i]=zt.default.useState(null),r=zt.default.useRef(0),s=zt.default.useRef(null),o=zt.default.useRef(null),u=zt.default.useCallback(()=>{s.current!=null&&(window.clearTimeout(s.current),s.current=null),r.current+=1},[]),c=zt.default.useCallback(()=>{u(),i(null)},[u]);zt.default.useEffect(()=>()=>{u()},[u]),zt.default.useEffect(()=>{e||c()},[e,c]);let f=zt.default.useCallback(x=>{let{value:h,selectionStart:m,selectionEnd:b}=x.target;if(n(h),!e){c();return}if(m==null||b==null||m!==b){c();return}if(dA(t,h)){c();return}let v=wS(h,m);if(v==null||v.token.length<2){c();return}let E=hA(h),N=v.token.toLowerCase(),C=E.filter(U=>U===N).length>1,L={query:v.token,currentTags:Array.from(new Set(E.filter(U=>C||U!==N)))};u(),s.current=window.setTimeout(()=>{let U=r.current+1;r.current=U,(async()=>{let Se=await bS(L);if(U!==r.current||Se==null||o.current==null)return;let X=Se.suggestions.slice(0,a);if(X.length===0){c();return}let D=cA(o.current,m);i({items:X,selectedIndex:0,tokenRange:v,anchorLeft:D.left,anchorTop:D.top})})()},uA)},[u,c,e,a,n]),d=zt.default.useCallback(x=>{let h=o.current;if(h==null||l==null)return;let m=fA(t,l.tokenRange,x);n(m.value),c(),requestAnimationFrame(()=>{h.focus(),h.setSelectionRange(m.caret,m.caret)})},[c,n,l,t]),p=zt.default.useCallback(x=>{if(x.key==="Escape"){l!=null&&(x.preventDefault(),c());return}if(x.key===" "){c();return}if(l!=null){if(x.key==="ArrowDown"){x.preventDefault(),i(h=>h==null?h:M(T({},h),{selectedIndex:(h.selectedIndex+1)%h.items.length}));return}if(x.key==="ArrowUp"){x.preventDefault(),i(h=>h==null?h:M(T({},h),{selectedIndex:(h.selectedIndex-1+h.items.length)%h.items.length}));return}if(x.key==="Enter"||x.key==="Tab"){x.preventDefault();let h=l.items[l.selectedIndex];d(h.term)}}},[d,c,l]),S=zt.default.useCallback(x=>{if(l==null)return;let h=x.currentTarget,{selectionStart:m,selectionEnd:b,value:v}=h;if(m==null||b==null||m!==b){c();return}let E=wS(v,m);if(E==null){c();return}E.start!==l.tokenRange.start&&c()},[c,l]),y=zt.default.useCallback(x=>{i(h=>h==null?h:M(T({},h),{selectedIndex:x}))},[]);return{tagInputRef:o,suggestionState:l,closeSuggestions:c,onTagsChange:f,onTagsKeyDown:p,onTagsSelect:S,onSuggestionHover:y,onSuggestionPick:d}}function wS(e,t){let n=Math.max(0,Math.min(t,e.length)),a=n;for(;a>0&&e[a-1]!==" ";)a-=1;let l=n;for(;l<e.length&&e[l]!==" ";)l+=1;let i=e.slice(a,l).trim();return i===""?null:{token:i,start:a,end:l}}function cA(e,t){let n=window.getComputedStyle(e),a=document.createElement("div");a.style.position="absolute",a.style.visibility="hidden",a.style.whiteSpace="pre",a.style.top="0",a.style.left="0",a.style.font=n.font,a.style.fontKerning=n.fontKerning,a.style.fontFeatureSettings=n.fontFeatureSettings,a.style.fontVariantLigatures=n.fontVariantLigatures,a.style.letterSpacing=n.letterSpacing,a.style.textTransform=n.textTransform,a.style.textIndent=n.textIndent,a.style.boxSizing=n.boxSizing,a.style.padding=n.padding,a.style.border=n.border,a.style.width="".concat(String(e.clientWidth),"px");let l=document.createElement("span");l.textContent=e.value.slice(0,t),a.appendChild(l);let i=document.createElement("span");i.textContent="\u200B",a.appendChild(i),document.body.appendChild(a);let r=i.offsetLeft-e.scrollLeft+1,s=i.offsetTop-e.scrollTop+e.offsetHeight+4;return document.body.removeChild(a),{left:r,top:s}}function fA(e,t,n){let a=e.slice(0,t.start),l=e.slice(t.end).replace(/^ /,""),i="".concat(n," ");return{value:"".concat(a).concat(i).concat(l),caret:a.length+i.length}}function dA(e,t){if(e===t)return!1;let n=0;for(;n<e.length&&n<t.length&&e[n]===t[n];)n+=1;let a=e.length,l=t.length;for(;a>n&&l>n&&e[a-1]===t[l-1];)a-=1,l-=1;let i=e.slice(n,a),r=t.slice(n,l);return i===""&&r===""?!1:RS(i)&&RS(r)}function RS(e){return e===""||/^ *$/.test(e)}function hA(e){return e.split(" ").map(t=>t.trim().toLowerCase()).filter(t=>t!=="")}var t_=$(ye()),Vn=$(Me()),OS=80;function Vl({suggestionState:e,onHover:t,onPick:n}){return(0,Vn.jsx)("div",{className:"absolute z-5 thm-bg-secondary thm-text-primary ba thm-border-default br2 shadow-4 overflow-hidden f6",style:{left:e.anchorLeft,top:e.anchorTop,width:"max-content",maxWidth:"22rem"},children:e.items.map((a,l)=>{let i=l===e.selectedIndex,r=mA(a.term);return(0,Vn.jsxs)("button",{type:"button",className:"flex items-center justify-between w-100 bn bg-transparent tl ph2 pv1 pointer nowrap thm-text-primary thm-hover-link-color ".concat(i?"thm-bg-selected thm-text-selected":""),onMouseEnter:()=>{t(l)},onMouseDown:s=>{s.preventDefault()},onClick:()=>{n(a.term)},title:a.term,children:[(0,Vn.jsx)("span",{className:"mr2",children:pA(r,e.tokenRange.token)}),(0,Vn.jsx)("span",{className:"thm-text-tertiary f6 tr",style:{minWidth:"3ch"},children:a.count})]},"".concat(a.term,"-").concat(a.count.toString()))})})}function pA(e,t){let n=e.toLocaleLowerCase(),a=t.toLocaleLowerCase(),l=n.indexOf(a);if(l<0)return e;let i=e.slice(0,l),r=e.slice(l,l+t.length),s=e.slice(l+t.length);return(0,Vn.jsxs)(Vn.Fragment,{children:[i,(0,Vn.jsx)("strong",{children:r}),s]})}function mA(e){return e.length<=OS?e:"".concat(e.slice(0,OS),"...")}var j=$(Me());function NS({initial:e}){var X;let{t}=it(),n=Ke(),[a,l]=il.default.useState(e),[i,r]=il.default.useState(e),[s,o]=il.default.useState(!1),[u,c]=il.default.useState(!1),[f,d]=il.default.useState(!1),[p,S]=il.default.useState(null),y=n.dat.suggestTags===!0,x=il.default.useMemo(()=>ni(n.lang,a.time),[n.lang,a.time]),{tagInputRef:h,suggestionState:m,closeSuggestions:b,onTagsChange:v,onTagsKeyDown:E,onTagsSelect:N,onSuggestionHover:R,onSuggestionPick:C}=Yl({enabled:y,tags:i.tags,maxSuggestions:4,onTagsUpdate:D=>{r(z=>M(T({},z),{tags:D}))}});async function L(){c(!0);try{let D=await oc(i);D!=null&&r(z=>M(T({},z),{title:D}))}finally{c(!1)}}async function U(){let D=await rc(a.bid);if(!D.ok){S(D.bodyText);return}d(!0)}let Se=async D=>{D.preventDefault(),S(null);let z=M(T({},i),{tags:ta(i.tags)}),P=await sc(z);if(P.ok&&P.status>=200&&P.status<300){l(z);let ie=Er(),re=kr(ie,"next"),Pe=document.referrer,Lt=window.location.origin;re==="closeWindow"?ai(window):re==="back"?Pe.startsWith(Lt)?window.location.href=Pe:window.location.href=Lt:ai(window)}else S(P.bodyText)};return f?(0,j.jsx)("p",{className:"thm-text-killed",children:t("addForm.killed")}):(0,j.jsx)("form",{onSubmit:D=>{Se(D)},children:(0,j.jsx)("table",{className:"w-100",children:(0,j.jsxs)("tbody",{children:[(0,j.jsxs)("tr",{children:[(0,j.jsx)("td",{className:"w1"}),(0,j.jsxs)("td",{children:[a.bid>0?(0,j.jsxs)("div",{className:"alert",children:[t("addForm.previouslySaved"),"\xA0",(0,j.jsx)("span",{className:"link f7 dib thm-text-tertiary thm-hover-link-color pr3","data-time":a.time,title:Oa(n.lang,a.time),children:x}),(0,j.jsx)("div",{className:"edit_links dib ml1",children:(0,j.jsxs)("div",{className:"delete_link di",children:[(0,j.jsx)("button",{type:"button",onClick:()=>{o(!0)},className:"delete",hidden:s,children:t("delete")}),(0,j.jsxs)("span",{className:"confirm thm-text-error",hidden:!s,children:[(0,j.jsxs)("button",{type:"button",onClick:()=>{o(!1)},children:[t("cancel"),"\xA0/\xA0"]}),(0,j.jsx)("button",{type:"button",onClick:()=>{U()},className:"thm-text-error",children:t("destroy")})]})]})})]}):null,p?(0,j.jsx)("div",{className:"alert alert-err",children:p}):null]})]}),(0,j.jsxs)("tr",{children:[(0,j.jsx)("td",{children:(0,j.jsx)("label",{htmlFor:"url",children:t("addForm.url")})}),(0,j.jsx)("td",{children:(0,j.jsx)("input",{type:"url",id:"url",className:"w-100 mv1",required:!0,name:"url",autoFocus:a.url==="",value:i.url,onChange:D=>{r(z=>M(T({},z),{url:D.target.value}))}})})]}),(0,j.jsxs)("tr",{children:[(0,j.jsx)("td",{children:(0,j.jsx)("label",{htmlFor:"title",children:t("bmark.title")})}),(0,j.jsxs)("td",{className:"flex",children:[(0,j.jsx)("input",{type:"text",id:"title",className:"w-100 mv1 flex-auto",name:"title",value:i.title,onChange:D=>{r(z=>M(T({},z),{title:D.target.value}))}}),(0,j.jsx)("button",{disabled:u,type:"button",onClick:()=>{L()},className:"ml2 input-reset ba thm-border-primary pointer f6 di dim pa1 ma1 mr0".concat(u?" thm-bg-disabled":""),children:t("fetch")})]})]}),(0,j.jsxs)("tr",{children:[(0,j.jsx)("td",{children:(0,j.jsx)("label",{htmlFor:"description",children:t("bmark.description")})}),(0,j.jsx)("td",{children:(0,j.jsx)("textarea",{className:"w-100 mt1 thm-text-secondary",id:"description",name:"description",rows:4,value:i.description,onChange:D=>{r(z=>M(T({},z),{description:D.target.value}))}})})]}),(0,j.jsxs)("tr",{children:[(0,j.jsx)("td",{children:(0,j.jsx)("label",{htmlFor:"tags",children:t("bmark.tags")})}),(0,j.jsx)("td",{children:(0,j.jsxs)("div",{className:"relative",children:[(0,j.jsx)("input",{ref:h,type:"text",id:"tags",className:"w-100 mv1",name:"tags",autoComplete:"off",autoCapitalize:"off",autoFocus:a.url!=="",value:i.tags,onChange:v,onKeyDown:E,onClick:N,onSelect:N,onBlur:()=>{window.setTimeout(()=>{b()},0)}}),m!=null?(0,j.jsx)(Vl,{suggestionState:m,onHover:R,onPick:C}):null]})})]}),(0,j.jsxs)("tr",{children:[(0,j.jsx)("td",{children:(0,j.jsx)("label",{htmlFor:"private",children:t("bmark.private")})}),(0,j.jsxs)("td",{children:[(0,j.jsx)("div",{className:"mr4 dib",children:(0,j.jsx)("input",{type:"checkbox",id:"private",className:"private pointer",name:"private",checked:i.private,onChange:D=>{r(z=>T(M(T({},z),{private:D.target.checked}),n.dat.archiveBackendEnabled&&i.archiveRequested&&D.target.checked?{archiveRequested:!1}:{}))}})}),!(a.bid>0)&&n.dat.archiveBackendEnabled?(0,j.jsxs)("div",{className:"dib ".concat(i.private?"o-50":""),title:i.private?t("addForm.archiveUnavailable"):void 0,children:[(0,j.jsx)("label",{className:"mr2 di",htmlFor:"archiveRequested",children:t("archive")}),(0,j.jsx)("input",{type:"checkbox",id:"archiveRequested",className:"archive pointer ml2",name:"archiveRequested",disabled:i.private,checked:(X=i.archiveRequested)!=null?X:!1,onChange:D=>{r(z=>M(T({},z),{archiveRequested:D.target.checked}))}})]}):null]})]}),(0,j.jsxs)("tr",{children:[(0,j.jsx)("td",{children:(0,j.jsx)("label",{htmlFor:"toread",children:t("addForm.readLater")})}),(0,j.jsx)("td",{children:(0,j.jsx)("input",{type:"checkbox",id:"toread",className:"toread pointer",name:"toread",checked:i.toread,onChange:D=>{r(z=>M(T({},z),{toread:D.target.checked}))}})})]}),(0,j.jsxs)("tr",{children:[(0,j.jsx)("td",{}),(0,j.jsx)("td",{children:(0,j.jsx)("input",{type:"submit",className:"ph3 pv2 input-reset thm-text-strong ba thm-border-primary bg-transparent pointer f6 dib mt1 dim",value:a.bid>0?t("addForm.update"):t("addForm.add")})})]})]})})})}var Tp=$(ye());var _S=e=>{let t,n=new Set,a=(u,c)=>{let f=typeof u=="function"?u(t):u;if(!Object.is(f,t)){let d=t;t=(c!=null?c:typeof f!="object"||f===null)?f:Object.assign({},t,f),n.forEach(p=>p(t,d))}},l=()=>t,s={setState:a,getState:l,getInitialState:()=>o,subscribe:u=>(n.add(u),()=>n.delete(u))},o=t=e(a,l,s);return s},CS=(e=>e?_S(e):_S);var Bs=$(ye(),1);var gA=e=>e;function yA(e,t=gA){let n=Bs.default.useSyncExternalStore(e.subscribe,Bs.default.useCallback(()=>t(e.getState()),[e,t]),Bs.default.useCallback(()=>t(e.getInitialState()),[e,t]));return Bs.default.useDebugValue(n),n}var DS=e=>{let t=CS(e),n=a=>yA(t,a);return Object.assign(n,t),n},cc=(e=>e?DS(e):DS);var Gl=cc(e=>({bmarks:[],setAll:t=>{e({bmarks:t})},removeById:t=>{e(n=>({bmarks:n.bmarks.filter(a=>a.bid!==t)}))},upsert:t=>{e(n=>({bmarks:n.bmarks.map(a=>a.bid===t.bid?t:a)}))}}));var hn=$(ye());function zS(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}function bA(e){if(Array.isArray(e))return e}function vA(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var a,l,i,r,s=[],o=!0,u=!1;try{if(i=(n=n.call(e)).next,t!==0)for(;!(o=(a=i.call(n)).done)&&(s.push(a.value),s.length!==t);o=!0);}catch(c){u=!0,l=c}finally{try{if(!o&&n.return!=null&&(r=n.return(),Object(r)!==r))return}finally{if(u)throw l}}return s}}function SA(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function TA(e,t){return bA(e)||vA(e,t)||xA(e,t)||SA()}function xA(e,t){if(e){if(typeof e=="string")return zS(e,t);var n={}.toString.call(e).slice(8,-1);return n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set"?Array.from(e):n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?zS(e,t):void 0}}var QS=Object.entries,MS=Object.setPrototypeOf,EA=Object.isFrozen,kA=Object.getPrototypeOf,AA=Object.getOwnPropertyDescriptor,Et=Object.freeze,dn=Object.seal,rr=Object.create,ZS=typeof Reflect<"u"&&Reflect,sp=ZS.apply,op=ZS.construct;Et||(Et=function(t){return t});dn||(dn=function(t){return t});sp||(sp=function(t,n){for(var a=arguments.length,l=new Array(a>2?a-2:0),i=2;i<a;i++)l[i-2]=arguments[i];return t.apply(n,l)});op||(op=function(t){for(var n=arguments.length,a=new Array(n>1?n-1:0),l=1;l<n;l++)a[l-1]=arguments[l];return new t(...a)});var ar=Ze(Array.prototype.forEach),wA=Ze(Array.prototype.lastIndexOf),LS=Ze(Array.prototype.pop),lr=Ze(Array.prototype.push),RA=Ze(Array.prototype.splice),xt=Array.isArray,Ys=Ze(String.prototype.toLowerCase),np=Ze(String.prototype.toString),US=Ze(String.prototype.match),ir=Ze(String.prototype.replace),HS=Ze(String.prototype.indexOf),OA=Ze(String.prototype.trim),NA=Ze(Number.prototype.toString),_A=Ze(Boolean.prototype.toString),BS=typeof BigInt>"u"?null:Ze(BigInt.prototype.toString),qS=typeof Symbol>"u"?null:Ze(Symbol.prototype.toString),He=Ze(Object.prototype.hasOwnProperty),qs=Ze(Object.prototype.toString),ft=Ze(RegExp.prototype.test),js=CA(TypeError);function Ze(e){return function(t){t instanceof RegExp&&(t.lastIndex=0);for(var n=arguments.length,a=new Array(n>1?n-1:0),l=1;l<n;l++)a[l-1]=arguments[l];return sp(e,t,a)}}function CA(e){return function(){for(var t=arguments.length,n=new Array(t),a=0;a<t;a++)n[a]=arguments[a];return op(e,n)}}function I(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:Ys;if(MS&&MS(e,null),!xt(t))return e;let a=t.length;for(;a--;){let l=t[a];if(typeof l=="string"){let i=n(l);i!==l&&(EA(t)||(t[a]=i),l=i)}e[l]=!0}return e}function DA(e){for(let t=0;t<e.length;t++)He(e,t)||(e[t]=null);return e}function yt(e){let t=rr(null);for(let a of QS(e)){var n=TA(a,2);let l=n[0],i=n[1];He(e,l)&&(xt(i)?t[l]=DA(i):i&&typeof i=="object"&&i.constructor===Object?t[l]=yt(i):t[l]=i)}return t}function zA(e){switch(typeof e){case"string":return e;case"number":return NA(e);case"boolean":return _A(e);case"bigint":return BS?BS(e):"0";case"symbol":return qS?qS(e):"Symbol()";case"undefined":return qs(e);case"function":case"object":{if(e===null)return qs(e);let t=e,n=Xn(t,"toString");if(typeof n=="function"){let a=n(t);return typeof a=="string"?a:qs(a)}return qs(e)}default:return qs(e)}}function Xn(e,t){for(;e!==null;){let a=AA(e,t);if(a){if(a.get)return Ze(a.get);if(typeof a.value=="function")return Ze(a.value)}e=kA(e)}function n(){return null}return n}function MA(e){try{return ft(e,""),!0}catch(t){return!1}}var jS=Et(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","search","section","select","shadow","slot","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),ap=Et(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","enterkeyhint","exportparts","filter","font","g","glyph","glyphref","hkern","image","inputmode","line","lineargradient","marker","mask","metadata","mpath","part","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),lp=Et(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),LA=Et(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),ip=Et(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),UA=Et(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),YS=Et(["#text"]),VS=Et(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","command","commandfor","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","exportparts","face","for","headers","height","hidden","high","href","hreflang","id","inert","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","part","pattern","placeholder","playsinline","popover","popovertarget","popovertargetaction","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","slot","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","wrap","xmlns"]),rp=Et(["accent-height","accumulate","additive","alignment-baseline","amplitude","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","exponent","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","intercept","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","mask-type","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","slope","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","tablevalues","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),GS=Et(["accent","accentunder","align","bevelled","close","columnalign","columnlines","columnspacing","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lquote","lspace","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),fc=Et(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),HA=dn(/{{[\w\W]*|^[\w\W]*}}/g),BA=dn(/<%[\w\W]*|^[\w\W]*%>/g),qA=dn(/\${[\w\W]*/g),jA=dn(/^data-[\-\w.\u00B7-\uFFFF]+$/),YA=dn(/^aria-[\-\w]+$/),XS=dn(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),VA=dn(/^(?:\w+script|data):/i),GA=dn(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),XA=dn(/^html$/i),$A=dn(/^[a-z][.\w]*(-[.\w]+)+$/i),Gn={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,progressingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},QA=function(){return typeof window>"u"?null:window},ZA=function(t,n){if(typeof t!="object"||typeof t.createPolicy!="function")return null;let a=null,l="data-tt-policy-suffix";n&&n.hasAttribute(l)&&(a=n.getAttribute(l));let i="dompurify"+(a?"#"+a:"");try{return t.createPolicy(i,{createHTML(r){return r},createScriptURL(r){return r}})}catch(r){return console.warn("TrustedTypes policy "+i+" could not be created."),null}},$S=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}};function KS(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:QA(),t=q=>KS(q);if(t.version="3.4.7",t.removed=[],!e||!e.document||e.document.nodeType!==Gn.document||!e.Element)return t.isSupported=!1,t;let n=e.document,a=n,l=a.currentScript;e.DocumentFragment;let i=e.HTMLTemplateElement,r=e.Node,s=e.Element,o=e.NodeFilter,u=e.NamedNodeMap;u===void 0&&(e.NamedNodeMap||e.MozNamedAttrMap),e.HTMLFormElement;let c=e.DOMParser,f=e.trustedTypes,d=s.prototype,p=Xn(d,"cloneNode"),S=Xn(d,"remove"),y=Xn(d,"nextSibling"),x=Xn(d,"childNodes"),h=Xn(d,"parentNode"),m=Xn(d,"shadowRoot"),b=Xn(d,"attributes"),v=r&&r.prototype?Xn(r.prototype,"nodeType"):null,E=r&&r.prototype?Xn(r.prototype,"nodeName"):null;if(typeof i=="function"){let q=n.createElement("template");q.content&&q.content.ownerDocument&&(n=q.content.ownerDocument)}let N,R="",C=n,L=C.implementation,U=C.createNodeIterator,Se=C.createDocumentFragment,X=C.getElementsByTagName,D=a.importNode,z=$S();t.isSupported=typeof QS=="function"&&typeof h=="function"&&L&&L.createHTMLDocument!==void 0;let P=HA,ie=BA,re=qA,Pe=jA,Lt=YA,Zn=VA,qe=GA,Ut=$A,It=XS,ge=null,pn=I({},[...jS,...ap,...lp,...ip,...YS]),Ee=null,ol=I({},[...VS,...rp,...GS,...fc]),ke=Object.seal(rr(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),Rn=null,Kn=null,Ht=Object.seal(rr(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}})),Y=!0,se=!0,dt=!1,Zl=!0,Pt=!1,Aa=!0,Bt=!1,fr=!1,mn=!1,Fn=!1,ul=!1,cl=!1,dr=!0,Ce=!1,gn="user-content-",Jn=!0,On=!1,In={},ht=null,Tc=I({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),wp=null,Rp=I({},["audio","video","img","source","image","track"]),xc=null,Op=I({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Qs="http://www.w3.org/1998/Math/MathML",Zs="http://www.w3.org/2000/svg",Nn="http://www.w3.org/1999/xhtml",Kl=Nn,Ec=!1,kc=null,w1=I({},[Qs,Zs,Nn],np),Ac=I({},["mi","mo","mn","ms","mtext"]),wc=I({},["annotation-xml"]),R1=I({},["title","style","font","a","script"]),hr=null,O1=["application/xhtml+xml","text/html"],N1="text/html",je=null,Fl=null,_1=n.createElement("form"),Np=function(g){return g instanceof RegExp||g instanceof Function},Rc=function(){let g=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(Fl&&Fl===g)return;(!g||typeof g!="object")&&(g={}),g=yt(g),hr=O1.indexOf(g.PARSER_MEDIA_TYPE)===-1?N1:g.PARSER_MEDIA_TYPE,je=hr==="application/xhtml+xml"?np:Ys,ge=He(g,"ALLOWED_TAGS")&&xt(g.ALLOWED_TAGS)?I({},g.ALLOWED_TAGS,je):pn,Ee=He(g,"ALLOWED_ATTR")&&xt(g.ALLOWED_ATTR)?I({},g.ALLOWED_ATTR,je):ol,kc=He(g,"ALLOWED_NAMESPACES")&&xt(g.ALLOWED_NAMESPACES)?I({},g.ALLOWED_NAMESPACES,np):w1,xc=He(g,"ADD_URI_SAFE_ATTR")&&xt(g.ADD_URI_SAFE_ATTR)?I(yt(Op),g.ADD_URI_SAFE_ATTR,je):Op,wp=He(g,"ADD_DATA_URI_TAGS")&&xt(g.ADD_DATA_URI_TAGS)?I(yt(Rp),g.ADD_DATA_URI_TAGS,je):Rp,ht=He(g,"FORBID_CONTENTS")&&xt(g.FORBID_CONTENTS)?I({},g.FORBID_CONTENTS,je):Tc,Rn=He(g,"FORBID_TAGS")&&xt(g.FORBID_TAGS)?I({},g.FORBID_TAGS,je):yt({}),Kn=He(g,"FORBID_ATTR")&&xt(g.FORBID_ATTR)?I({},g.FORBID_ATTR,je):yt({}),In=He(g,"USE_PROFILES")?g.USE_PROFILES&&typeof g.USE_PROFILES=="object"?yt(g.USE_PROFILES):g.USE_PROFILES:!1,Y=g.ALLOW_ARIA_ATTR!==!1,se=g.ALLOW_DATA_ATTR!==!1,dt=g.ALLOW_UNKNOWN_PROTOCOLS||!1,Zl=g.ALLOW_SELF_CLOSE_IN_ATTR!==!1,Pt=g.SAFE_FOR_TEMPLATES||!1,Aa=g.SAFE_FOR_XML!==!1,Bt=g.WHOLE_DOCUMENT||!1,Fn=g.RETURN_DOM||!1,ul=g.RETURN_DOM_FRAGMENT||!1,cl=g.RETURN_TRUSTED_TYPE||!1,mn=g.FORCE_BODY||!1,dr=g.SANITIZE_DOM!==!1,Ce=g.SANITIZE_NAMED_PROPS||!1,Jn=g.KEEP_CONTENT!==!1,On=g.IN_PLACE||!1,It=MA(g.ALLOWED_URI_REGEXP)?g.ALLOWED_URI_REGEXP:XS,Kl=typeof g.NAMESPACE=="string"?g.NAMESPACE:Nn,Ac=He(g,"MATHML_TEXT_INTEGRATION_POINTS")&&g.MATHML_TEXT_INTEGRATION_POINTS&&typeof g.MATHML_TEXT_INTEGRATION_POINTS=="object"?yt(g.MATHML_TEXT_INTEGRATION_POINTS):I({},["mi","mo","mn","ms","mtext"]),wc=He(g,"HTML_INTEGRATION_POINTS")&&g.HTML_INTEGRATION_POINTS&&typeof g.HTML_INTEGRATION_POINTS=="object"?yt(g.HTML_INTEGRATION_POINTS):I({},["annotation-xml"]);let A=He(g,"CUSTOM_ELEMENT_HANDLING")&&g.CUSTOM_ELEMENT_HANDLING&&typeof g.CUSTOM_ELEMENT_HANDLING=="object"?yt(g.CUSTOM_ELEMENT_HANDLING):rr(null);if(ke=rr(null),He(A,"tagNameCheck")&&Np(A.tagNameCheck)&&(ke.tagNameCheck=A.tagNameCheck),He(A,"attributeNameCheck")&&Np(A.attributeNameCheck)&&(ke.attributeNameCheck=A.attributeNameCheck),He(A,"allowCustomizedBuiltInElements")&&typeof A.allowCustomizedBuiltInElements=="boolean"&&(ke.allowCustomizedBuiltInElements=A.allowCustomizedBuiltInElements),Pt&&(se=!1),ul&&(Fn=!0),In&&(ge=I({},YS),Ee=rr(null),In.html===!0&&(I(ge,jS),I(Ee,VS)),In.svg===!0&&(I(ge,ap),I(Ee,rp),I(Ee,fc)),In.svgFilters===!0&&(I(ge,lp),I(Ee,rp),I(Ee,fc)),In.mathMl===!0&&(I(ge,ip),I(Ee,GS),I(Ee,fc))),Ht.tagCheck=null,Ht.attributeCheck=null,He(g,"ADD_TAGS")&&(typeof g.ADD_TAGS=="function"?Ht.tagCheck=g.ADD_TAGS:xt(g.ADD_TAGS)&&(ge===pn&&(ge=yt(ge)),I(ge,g.ADD_TAGS,je))),He(g,"ADD_ATTR")&&(typeof g.ADD_ATTR=="function"?Ht.attributeCheck=g.ADD_ATTR:xt(g.ADD_ATTR)&&(Ee===ol&&(Ee=yt(Ee)),I(Ee,g.ADD_ATTR,je))),He(g,"ADD_URI_SAFE_ATTR")&&xt(g.ADD_URI_SAFE_ATTR)&&I(xc,g.ADD_URI_SAFE_ATTR,je),He(g,"FORBID_CONTENTS")&&xt(g.FORBID_CONTENTS)&&(ht===Tc&&(ht=yt(ht)),I(ht,g.FORBID_CONTENTS,je)),He(g,"ADD_FORBID_CONTENTS")&&xt(g.ADD_FORBID_CONTENTS)&&(ht===Tc&&(ht=yt(ht)),I(ht,g.ADD_FORBID_CONTENTS,je)),Jn&&(ge["#text"]=!0),Bt&&I(ge,["html","head","body"]),ge.table&&(I(ge,["tbody"]),delete Rn.tbody),g.TRUSTED_TYPES_POLICY){if(typeof g.TRUSTED_TYPES_POLICY.createHTML!="function")throw js('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof g.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw js('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');N=g.TRUSTED_TYPES_POLICY,R=N.createHTML("")}else N===void 0&&(N=ZA(f,l)),N!==null&&typeof R=="string"&&(R=N.createHTML(""));(z.uponSanitizeElement.length>0||z.uponSanitizeAttribute.length>0)&&ge===pn&&(ge=yt(ge)),z.uponSanitizeAttribute.length>0&&Ee===ol&&(Ee=yt(Ee)),Et&&Et(g),Fl=g},_p=I({},[...ap,...lp,...LA]),Cp=I({},[...ip,...UA]),C1=function(g){let A=h(g);(!A||!A.tagName)&&(A={namespaceURI:Kl,tagName:"template"});let H=Ys(g.tagName),he=Ys(A.tagName);return kc[g.namespaceURI]?g.namespaceURI===Zs?A.namespaceURI===Nn?H==="svg":A.namespaceURI===Qs?H==="svg"&&(he==="annotation-xml"||Ac[he]):!!_p[H]:g.namespaceURI===Qs?A.namespaceURI===Nn?H==="math":A.namespaceURI===Zs?H==="math"&&wc[he]:!!Cp[H]:g.namespaceURI===Nn?A.namespaceURI===Zs&&!wc[he]||A.namespaceURI===Qs&&!Ac[he]?!1:!Cp[H]&&(R1[H]||!_p[H]):!!(hr==="application/xhtml+xml"&&kc[g.namespaceURI]):!1},yn=function(g){lr(t.removed,{element:g});try{h(g).removeChild(g)}catch(A){S(g)}},fl=function(g,A){try{lr(t.removed,{attribute:A.getAttributeNode(g),from:A})}catch(H){lr(t.removed,{attribute:null,from:A})}if(A.removeAttribute(g),g==="is")if(Fn||ul)try{yn(A)}catch(H){}else try{A.setAttribute(g,"")}catch(H){}},Dp=function(g){let A=null,H=null;if(mn)g="<remove></remove>"+g;else{let Ae=US(g,/^[\r\n\t ]+/);H=Ae&&Ae[0]}hr==="application/xhtml+xml"&&Kl===Nn&&(g='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+g+"</body></html>");let he=N?N.createHTML(g):g;if(Kl===Nn)try{A=new c().parseFromString(he,hr)}catch(Ae){}if(!A||!A.documentElement){A=L.createDocument(Kl,"template",null);try{A.documentElement.innerHTML=Ec?R:he}catch(Ae){}}let ae=A.body||A.documentElement;return g&&H&&ae.insertBefore(n.createTextNode(H),ae.childNodes[0]||null),Kl===Nn?X.call(A,Bt?"html":"body")[0]:Bt?A.documentElement:ae},zp=function(g){return U.call(g.ownerDocument||g,g,o.SHOW_ELEMENT|o.SHOW_COMMENT|o.SHOW_TEXT|o.SHOW_PROCESSING_INSTRUCTION|o.SHOW_CDATA_SECTION,null)},Mp=function(g){g.normalize();let A=U.call(g.ownerDocument||g,g,o.SHOW_TEXT|o.SHOW_COMMENT|o.SHOW_CDATA_SECTION|o.SHOW_PROCESSING_INSTRUCTION,null),H=A.nextNode();for(;H;){let he=H.data;ar([P,ie,re],ae=>{he=ir(he,ae," ")}),H.data=he,H=A.nextNode()}},Ks=function(g){let A=E?E(g):null;return typeof A!="string"||je(A)!=="form"?!1:typeof g.nodeName!="string"||typeof g.textContent!="string"||typeof g.removeChild!="function"||g.attributes!==b(g)||typeof g.removeAttribute!="function"||typeof g.setAttribute!="function"||typeof g.namespaceURI!="string"||typeof g.insertBefore!="function"||typeof g.hasChildNodes!="function"||g.nodeType!==v(g)||g.childNodes!==x(g)},pr=function(g){if(!v||typeof g!="object"||g===null)return!1;try{return v(g)===Gn.documentFragment}catch(A){return!1}},Fs=function(g){if(!v||typeof g!="object"||g===null)return!1;try{return typeof v(g)=="number"}catch(A){return!1}};function Pn(q,g,A){ar(q,H=>{H.call(t,g,A,Fl)})}let Lp=function(g){let A=null;if(Pn(z.beforeSanitizeElements,g,null),Ks(g))return yn(g),!0;let H=je(g.nodeName);if(Pn(z.uponSanitizeElement,g,{tagName:H,allowedTags:ge}),Aa&&g.hasChildNodes()&&!Fs(g.firstElementChild)&&ft(/<[/\w!]/g,g.innerHTML)&&ft(/<[/\w!]/g,g.textContent)||Aa&&g.namespaceURI===Nn&&H==="style"&&Fs(g.firstElementChild)||g.nodeType===Gn.progressingInstruction||Aa&&g.nodeType===Gn.comment&&ft(/<[/\w]/g,g.data))return yn(g),!0;if(Rn[H]||!(Ht.tagCheck instanceof Function&&Ht.tagCheck(H))&&!ge[H]){if(!Rn[H]&&Hp(H)&&(ke.tagNameCheck instanceof RegExp&&ft(ke.tagNameCheck,H)||ke.tagNameCheck instanceof Function&&ke.tagNameCheck(H)))return!1;if(Jn&&!ht[H]){let ae=h(g),Ae=x(g);if(Ae&&ae){let Wt=Ae.length;for(let _n=Wt-1;_n>=0;--_n){let bn=p(Ae[_n],!0);ae.insertBefore(bn,y(g))}}}return yn(g),!0}return(v?v(g):g.nodeType)===Gn.element&&!C1(g)||(H==="noscript"||H==="noembed"||H==="noframes")&&ft(/<\/no(script|embed|frames)/i,g.innerHTML)?(yn(g),!0):(Pt&&g.nodeType===Gn.text&&(A=g.textContent,ar([P,ie,re],ae=>{A=ir(A,ae," ")}),g.textContent!==A&&(lr(t.removed,{element:g.cloneNode()}),g.textContent=A)),Pn(z.afterSanitizeElements,g,null),!1)},Up=function(g,A,H){if(Kn[A]||dr&&(A==="id"||A==="name")&&(H in n||H in _1))return!1;let he=Ee[A]||Ht.attributeCheck instanceof Function&&Ht.attributeCheck(A,g);if(!(se&&!Kn[A]&&ft(Pe,A))){if(!(Y&&ft(Lt,A))){if(!he||Kn[A]){if(!(Hp(g)&&(ke.tagNameCheck instanceof RegExp&&ft(ke.tagNameCheck,g)||ke.tagNameCheck instanceof Function&&ke.tagNameCheck(g))&&(ke.attributeNameCheck instanceof RegExp&&ft(ke.attributeNameCheck,A)||ke.attributeNameCheck instanceof Function&&ke.attributeNameCheck(A,g))||A==="is"&&ke.allowCustomizedBuiltInElements&&(ke.tagNameCheck instanceof RegExp&&ft(ke.tagNameCheck,H)||ke.tagNameCheck instanceof Function&&ke.tagNameCheck(H))))return!1}else if(!xc[A]){if(!ft(It,ir(H,qe,""))){if(!((A==="src"||A==="xlink:href"||A==="href")&&g!=="script"&&HS(H,"data:")===0&&wp[g])){if(!(dt&&!ft(Zn,ir(H,qe,"")))){if(H)return!1}}}}}}return!0},D1=I({},["annotation-xml","color-profile","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","missing-glyph"]),Hp=function(g){return!D1[Ys(g)]&&ft(Ut,g)},Bp=function(g){Pn(z.beforeSanitizeAttributes,g,null);let A=g.attributes;if(!A||Ks(g))return;let H={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Ee,forceKeepAttr:void 0},he=A.length;for(;he--;){let ae=A[he],Ae=ae.name,Wt=ae.namespaceURI,_n=ae.value,bn=je(Ae),Oc=_n,We=Ae==="value"?Oc:OA(Oc);if(H.attrName=bn,H.attrValue=We,H.keepAttr=!0,H.forceKeepAttr=void 0,Pn(z.uponSanitizeAttribute,g,H),We=H.attrValue,Ce&&(bn==="id"||bn==="name")&&HS(We,gn)!==0&&(fl(Ae,g),We=gn+We),Aa&&ft(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,We)){fl(Ae,g);continue}if(bn==="attributename"&&US(We,"href")){fl(Ae,g);continue}if(H.forceKeepAttr)continue;if(!H.keepAttr){fl(Ae,g);continue}if(!Zl&&ft(/\/>/i,We)){fl(Ae,g);continue}Pt&&ar([P,ie,re],jp=>{We=ir(We,jp," ")});let qp=je(g.nodeName);if(!Up(qp,bn,We)){fl(Ae,g);continue}if(N&&typeof f=="object"&&typeof f.getAttributeType=="function"&&!Wt)switch(f.getAttributeType(qp,bn)){case"TrustedHTML":{We=N.createHTML(We);break}case"TrustedScriptURL":{We=N.createScriptURL(We);break}}if(We!==Oc)try{Wt?g.setAttributeNS(Wt,Ae,We):g.setAttribute(Ae,We),Ks(g)?yn(g):LS(t.removed)}catch(jp){fl(Ae,g)}}Pn(z.afterSanitizeAttributes,g,null)},Js=function(g){let A=null,H=zp(g);for(Pn(z.beforeSanitizeShadowDOM,g,null);A=H.nextNode();)if(Pn(z.uponSanitizeShadowNode,A,null),Lp(A),Bp(A),pr(A.content)&&Js(A.content),(v?v(A):A.nodeType)===Gn.element){let ae=m?m(A):A.shadowRoot;pr(ae)&&(Jl(ae),Js(ae))}Pn(z.afterSanitizeShadowDOM,g,null)},Jl=function(g){let A=v?v(g):g.nodeType;if(A===Gn.element){let ae=m?m(g):g.shadowRoot;pr(ae)&&(Jl(ae),Js(ae))}let H=x?x(g):g.childNodes;if(!H)return;let he=[];ar(H,ae=>{lr(he,ae)});for(let ae of he)Jl(ae);if(A===Gn.element){let ae=E?E(g):null;if(typeof ae=="string"&&je(ae)==="template"){let Ae=g.content;pr(Ae)&&Jl(Ae)}}};return t.sanitize=function(q){let g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},A=null,H=null,he=null,ae=null;if(Ec=!q,Ec&&(q="<!-->"),typeof q!="string"&&!Fs(q)&&(q=zA(q),typeof q!="string"))throw js("dirty is not a string, aborting");if(!t.isSupported)return q;if(fr||Rc(g),t.removed=[],typeof q=="string"&&(On=!1),On){let _n=E?E(q):q.nodeName;if(typeof _n=="string"){let bn=je(_n);if(!ge[bn]||Rn[bn])throw js("root node is forbidden and cannot be sanitized in-place")}if(Ks(q))throw js("root node is clobbered and cannot be sanitized in-place");Jl(q)}else if(Fs(q))A=Dp("<!---->"),H=A.ownerDocument.importNode(q,!0),H.nodeType===Gn.element&&H.nodeName==="BODY"||H.nodeName==="HTML"?A=H:A.appendChild(H),Jl(H);else{if(!Fn&&!Pt&&!Bt&&q.indexOf("<")===-1)return N&&cl?N.createHTML(q):q;if(A=Dp(q),!A)return Fn?null:cl?R:""}A&&mn&&yn(A.firstChild);let Ae=zp(On?q:A);for(;he=Ae.nextNode();)Lp(he),Bp(he),pr(he.content)&&Js(he.content);if(On)return Pt&&Mp(q),q;if(Fn){if(Pt&&Mp(A),ul)for(ae=Se.call(A.ownerDocument);A.firstChild;)ae.appendChild(A.firstChild);else ae=A;return(Ee.shadowroot||Ee.shadowrootmode)&&(ae=D.call(a,ae,!0)),ae}let Wt=Bt?A.outerHTML:A.innerHTML;return Bt&&ge["!doctype"]&&A.ownerDocument&&A.ownerDocument.doctype&&A.ownerDocument.doctype.name&&ft(XA,A.ownerDocument.doctype.name)&&(Wt="<!DOCTYPE "+A.ownerDocument.doctype.name+">\n"+Wt),Pt&&ar([P,ie,re],_n=>{Wt=ir(Wt,_n," ")}),N&&cl?N.createHTML(Wt):Wt},t.setConfig=function(){let q=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Rc(q),fr=!0},t.clearConfig=function(){Fl=null,fr=!1},t.isValidAttribute=function(q,g,A){Fl||Rc({});let H=je(q),he=je(g);return Up(H,he,A)},t.addHook=function(q,g){typeof g=="function"&&lr(z[q],g)},t.removeHook=function(q,g){if(g!==void 0){let A=wA(z[q],g);return A===-1?void 0:RA(z[q],A,1)[0]}return LS(z[q])},t.removeHooks=function(q){z[q]=[]},t.removeAllHooks=function(){z=$S()},t}var FS=KS();function dp(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var Ql=dp();function a1(e){Ql=e}var Xl={exec:()=>null};function sr(e){let t=[];return n=>{let a=Math.max(0,Math.min(3,n-1)),l=t[a];return l||(l=e(a),t[a]=l),l}}function ue(e,t=""){let n=typeof e=="string"?e:e.source,a={replace:(l,i)=>{let r=typeof i=="string"?i:i.source;return r=r.replace(bt.caret,"$1"),n=n.replace(l,r),a},getRegex:()=>new RegExp(n,t)};return a}var KA=((e="")=>{try{return!!new RegExp("(?<=1)(?<!1)"+e)}catch(t){return!1}})(),bt={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] +\S/,listReplaceTask:/^\[[ xX]\] +/,listTaskCheckbox:/\[[ xX]\]/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:e=>new RegExp("^( {0,3}".concat(e,")((?:[ ][^\\n]*)?(?:\\n|$))")),nextBulletRegex:sr(e=>new RegExp("^ {0,".concat(e,"}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))"))),hrRegex:sr(e=>new RegExp("^ {0,".concat(e,"}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)"))),fencesBeginRegex:sr(e=>new RegExp("^ {0,".concat(e,"}(?:```|~~~)"))),headingBeginRegex:sr(e=>new RegExp("^ {0,".concat(e,"}#"))),htmlBeginRegex:sr(e=>new RegExp("^ {0,".concat(e,"}<(?:[a-z].*>|!--)"),"i")),blockquoteBeginRegex:sr(e=>new RegExp("^ {0,".concat(e,"}>")))},FA=/^(?:[ \t]*(?:\n|$))+/,JA=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,IA=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,Xs=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,PA=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,hp=/ {0,3}(?:[*+-]|\d{1,9}[.)])/,l1=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,i1=ue(l1).replace(/bull/g,hp).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),WA=ue(l1).replace(/bull/g,hp).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),pp=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,ew=/^[^\n]+/,mp=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,tw=ue(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",mp).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),nw=ue(/^(bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,hp).getRegex(),yc="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",gp=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,aw=ue("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",gp).replace("tag",yc).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),r1=ue(pp).replace("hr",Xs).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",yc).getRegex(),lw=ue(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",r1).getRegex(),yp={blockquote:lw,code:JA,def:tw,fences:IA,heading:PA,hr:Xs,html:aw,lheading:i1,list:nw,newline:FA,paragraph:r1,table:Xl,text:ew},JS=ue("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",Xs).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",yc).getRegex(),iw=M(T({},yp),{lheading:WA,table:JS,paragraph:ue(pp).replace("hr",Xs).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",JS).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",yc).getRegex()}),rw=M(T({},yp),{html:ue("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",gp).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:Xl,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:ue(pp).replace("hr",Xs).replace("heading"," *#{1,6} *[^\n]").replace("lheading",i1).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()}),sw=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,ow=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,s1=/^( {2,}|\\)\n(?!\s*$)/,uw=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,or=/[\p{P}\p{S}]/u,bc=/[\s\p{P}\p{S}]/u,bp=/[^\s\p{P}\p{S}]/u,cw=ue(/^((?![*_])punctSpace)/,"u").replace(/punctSpace/g,bc).getRegex(),o1=/(?!~)[\p{P}\p{S}]/u,fw=/(?!~)[\s\p{P}\p{S}]/u,dw=/(?:[^\s\p{P}\p{S}]|~)/u,hw=ue(/link|precode-code|html/,"g").replace("link",new RegExp("\\[(?:[^\\[\\]`]|(?<a>`+)[^`]+\\k<a>(?!`))*?\\]\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)]|\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)])*\\))*\\)")).replace("precode-",KA?"(?<!`)()":"(^^|[^`])").replace("code",new RegExp("(?<b>`+)[^`]+\\k<b>(?!`)")).replace("html",/<(?! )[^<>]*?>/).getRegex(),u1=/^(?:\*+(?:((?!\*)punct)|([^\s*]))?)|^_+(?:((?!_)punct)|([^\s_]))?/,pw=ue(u1,"u").replace(/punct/g,or).getRegex(),mw=ue(u1,"u").replace(/punct/g,o1).getRegex(),c1="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",gw=ue(c1,"gu").replace(/notPunctSpace/g,bp).replace(/punctSpace/g,bc).replace(/punct/g,or).getRegex(),yw=ue(c1,"gu").replace(/notPunctSpace/g,dw).replace(/punctSpace/g,fw).replace(/punct/g,o1).getRegex(),bw=ue("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,bp).replace(/punctSpace/g,bc).replace(/punct/g,or).getRegex(),vw=ue(/^~~?(?:((?!~)punct)|[^\s~])/,"u").replace(/punct/g,or).getRegex(),Sw="^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)",Tw=ue(Sw,"gu").replace(/notPunctSpace/g,bp).replace(/punctSpace/g,bc).replace(/punct/g,or).getRegex(),xw=ue(/\\(punct)/,"gu").replace(/punct/g,or).getRegex(),Ew=ue(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),kw=ue(gp).replace("(?:-->|$)","-->").getRegex(),Aw=ue("^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>").replace("comment",kw).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),pc=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\])|[^\[\]\\`])*?/,ww=ue(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?\s*\)/).replace("label",pc).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),f1=ue(/^!?\[(label)\]\[(ref)\]/).replace("label",pc).replace("ref",mp).getRegex(),d1=ue(/^!?\[(ref)\](?:\[\])?/).replace("ref",mp).getRegex(),Rw=ue("reflink|nolink(?!\\()","g").replace("reflink",f1).replace("nolink",d1).getRegex(),IS=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,vp={_backpedal:Xl,anyPunctuation:xw,autolink:Ew,blockSkip:hw,br:s1,code:ow,del:Xl,delLDelim:Xl,delRDelim:Xl,emStrongLDelim:pw,emStrongRDelimAst:gw,emStrongRDelimUnd:bw,escape:sw,link:ww,nolink:d1,punctuation:cw,reflink:f1,reflinkSearch:Rw,tag:Aw,text:uw,url:Xl},Ow=M(T({},vp),{link:ue(/^!?\[(label)\]\((.*?)\)/).replace("label",pc).getRegex(),reflink:ue(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",pc).getRegex()}),up=M(T({},vp),{emStrongRDelimAst:yw,emStrongLDelim:mw,delLDelim:vw,delRDelim:Tw,url:ue(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol",IS).replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:ue(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/).replace("protocol",IS).getRegex()}),Nw=M(T({},up),{br:ue(s1).replace("{2,}","*").getRegex(),text:ue(up.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()}),dc={normal:yp,gfm:iw,pedantic:rw},Vs={normal:vp,gfm:up,breaks:Nw,pedantic:Ow},_w={"&":"&","<":"<",">":">",'"':""","'":"'"},PS=e=>_w[e];function $n(e,t){if(t){if(bt.escapeTest.test(e))return e.replace(bt.escapeReplace,PS)}else if(bt.escapeTestNoEncode.test(e))return e.replace(bt.escapeReplaceNoEncode,PS);return e}function WS(e){try{e=encodeURI(e).replace(bt.percentDecode,"%")}catch(t){return null}return e}function e1(e,t){var i;let n=e.replace(bt.findPipe,(r,s,o)=>{let u=!1,c=s;for(;--c>=0&&o[c]==="\\";)u=!u;return u?"|":" |"}),a=n.split(bt.splitPipe),l=0;if(a[0].trim()||a.shift(),a.length>0&&!((i=a.at(-1))!=null&&i.trim())&&a.pop(),t)if(a.length>t)a.splice(t);else for(;a.length<t;)a.push("");for(;l<a.length;l++)a[l]=a[l].trim().replace(bt.slashPipe,"|");return a}function rl(e,t,n){let a=e.length;if(a===0)return"";let l=0;for(;l<a;){let i=e.charAt(a-l-1);if(i===t&&!n)l++;else if(i!==t&&n)l++;else break}return e.slice(0,a-l)}function t1(e){let t=e.split("\n"),n=t.length-1;for(;n>=0&&bt.blankLine.test(t[n]);)n--;return t.length-n<=2?e:t.slice(0,n+1).join("\n")}function Cw(e,t){if(e.indexOf(t[1])===-1)return-1;let n=0;for(let a=0;a<e.length;a++)if(e[a]==="\\")a++;else if(e[a]===t[0])n++;else if(e[a]===t[1]&&(n--,n<0))return a;return n>0?-2:-1}function Dw(e,t=0){let n=t,a="";for(let l of e)if(l===" "){let i=4-n%4;a+=" ".repeat(i),n+=i}else a+=l,n++;return a}function n1(e,t,n,a,l){let i=t.href,r=t.title||null,s=e[1].replace(l.other.outputLinkReplace,"$1");a.state.inLink=!0;let o={type:e[0].charAt(0)==="!"?"image":"link",raw:n,href:i,title:r,text:s,tokens:a.inlineTokens(s)};return a.state.inLink=!1,o}function zw(e,t,n){let a=e.match(n.other.indentCodeCompensation);if(a===null)return t;let l=a[1];return t.split("\n").map(i=>{let r=i.match(n.other.beginningSpace);if(r===null)return i;let[s]=r;return s.length>=l.length?i.slice(l.length):i}).join("\n")}var mc=class{constructor(e){V(this,"options");V(this,"rules");V(this,"lexer");this.options=e||Ql}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:"space",raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let n=this.options.pedantic?t[0]:t1(t[0]),a=n.replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:n,codeBlockStyle:"indented",text:a}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let n=t[0],a=zw(n,t[3]||"",this.rules);return{type:"code",raw:n,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):t[2],text:a}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let n=t[2].trim();if(this.rules.other.endingHash.test(n)){let a=rl(n,"#");(this.options.pedantic||!a||this.rules.other.endingSpaceChar.test(a))&&(n=a.trim())}return{type:"heading",raw:rl(t[0],"\n"),depth:t[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:rl(t[0],"\n")}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let n=rl(t[0],"\n").split("\n"),a="",l="",i=[];for(;n.length>0;){let r=!1,s=[],o;for(o=0;o<n.length;o++)if(this.rules.other.blockquoteStart.test(n[o]))s.push(n[o]),r=!0;else if(!r)s.push(n[o]);else break;n=n.slice(o);let u=s.join("\n"),c=u.replace(this.rules.other.blockquoteSetextReplace,"\n $1").replace(this.rules.other.blockquoteSetextReplace2,"");a=a?"".concat(a,"\n").concat(u):u,l=l?"".concat(l,"\n").concat(c):c;let f=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(c,i,!0),this.lexer.state.top=f,n.length===0)break;let d=i.at(-1);if((d==null?void 0:d.type)==="code")break;if((d==null?void 0:d.type)==="blockquote"){let p=d,S=p.raw+"\n"+n.join("\n"),y=this.blockquote(S);i[i.length-1]=y,a=a.substring(0,a.length-p.raw.length)+y.raw,l=l.substring(0,l.length-p.text.length)+y.text;break}else if((d==null?void 0:d.type)==="list"){let p=d,S=p.raw+"\n"+n.join("\n"),y=this.list(S);i[i.length-1]=y,a=a.substring(0,a.length-d.raw.length)+y.raw,l=l.substring(0,l.length-p.raw.length)+y.raw,n=S.substring(i.at(-1).raw.length).split("\n");continue}}return{type:"blockquote",raw:a,tokens:i,text:l}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim(),a=n.length>1,l={type:"list",raw:"",ordered:a,start:a?+n.slice(0,-1):"",loose:!1,items:[]};n=a?"\\d{1,9}\\".concat(n.slice(-1)):"\\".concat(n),this.options.pedantic&&(n=a?n:"[*+-]");let i=this.rules.other.listItemRegex(n),r=!1;for(;e;){let o=!1,u="",c="";if(!(t=i.exec(e))||this.rules.block.hr.test(e))break;u=t[0],e=e.substring(u.length);let f=Dw(t[2].split("\n",1)[0],t[1].length),d=e.split("\n",1)[0],p=!f.trim(),S=0;if(this.options.pedantic?(S=2,c=f.trimStart()):p?S=t[1].length+1:(S=f.search(this.rules.other.nonSpaceChar),S=S>4?1:S,c=f.slice(S),S+=t[1].length),p&&this.rules.other.blankLine.test(d)&&(u+=d+"\n",e=e.substring(d.length+1),o=!0),!o){let y=this.rules.other.nextBulletRegex(S),x=this.rules.other.hrRegex(S),h=this.rules.other.fencesBeginRegex(S),m=this.rules.other.headingBeginRegex(S),b=this.rules.other.htmlBeginRegex(S),v=this.rules.other.blockquoteBeginRegex(S);for(;e;){let E=e.split("\n",1)[0],N;if(d=E,this.options.pedantic?(d=d.replace(this.rules.other.listReplaceNesting," "),N=d):N=d.replace(this.rules.other.tabCharGlobal," "),h.test(d)||m.test(d)||b.test(d)||v.test(d)||y.test(d)||x.test(d))break;if(N.search(this.rules.other.nonSpaceChar)>=S||!d.trim())c+="\n"+N.slice(S);else{if(p||f.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||h.test(f)||m.test(f)||x.test(f))break;c+="\n"+d}p=!d.trim(),u+=E+"\n",e=e.substring(E.length+1),f=N.slice(S)}}l.loose||(r?l.loose=!0:this.rules.other.doubleBlankLine.test(u)&&(r=!0)),l.items.push({type:"list_item",raw:u,task:!!this.options.gfm&&this.rules.other.listIsTask.test(c),loose:!1,text:c,tokens:[]}),l.raw+=u}let s=l.items.at(-1);if(s)s.raw=s.raw.trimEnd(),s.text=s.text.trimEnd();else return;l.raw=l.raw.trimEnd();for(let o of l.items){this.lexer.state.top=!1,o.tokens=this.lexer.blockTokens(o.text,[]);let u=o.tokens[0];if(o.task&&((u==null?void 0:u.type)==="text"||(u==null?void 0:u.type)==="paragraph")){o.text=o.text.replace(this.rules.other.listReplaceTask,""),u.raw=u.raw.replace(this.rules.other.listReplaceTask,""),u.text=u.text.replace(this.rules.other.listReplaceTask,"");for(let f=this.lexer.inlineQueue.length-1;f>=0;f--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[f].src)){this.lexer.inlineQueue[f].src=this.lexer.inlineQueue[f].src.replace(this.rules.other.listReplaceTask,"");break}let c=this.rules.other.listTaskCheckbox.exec(o.raw);if(c){let f={type:"checkbox",raw:c[0]+" ",checked:c[0]!=="[ ]"};o.checked=f.checked,l.loose?o.tokens[0]&&["paragraph","text"].includes(o.tokens[0].type)&&"tokens"in o.tokens[0]&&o.tokens[0].tokens?(o.tokens[0].raw=f.raw+o.tokens[0].raw,o.tokens[0].text=f.raw+o.tokens[0].text,o.tokens[0].tokens.unshift(f)):o.tokens.unshift({type:"paragraph",raw:f.raw,text:f.raw,tokens:[f]}):o.tokens.unshift(f)}}else o.task&&(o.task=!1);if(!l.loose){let c=o.tokens.filter(d=>d.type==="space"),f=c.length>0&&c.some(d=>this.rules.other.anyLine.test(d.raw));l.loose=f}}if(l.loose)for(let o of l.items){o.loose=!0;for(let u of o.tokens)u.type==="text"&&(u.type="paragraph")}return l}}html(e){let t=this.rules.block.html.exec(e);if(t){let n=t1(t[0]);return{type:"html",block:!0,raw:n,pre:t[1]==="pre"||t[1]==="script"||t[1]==="style",text:n}}}def(e){let t=this.rules.block.def.exec(e);if(t){let n=t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal," "),a=t[2]?t[2].replace(this.rules.other.hrefBrackets,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",l=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):t[3];return{type:"def",tag:n,raw:rl(t[0],"\n"),href:a,title:l}}}table(e){var r;let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let n=e1(t[1]),a=t[2].replace(this.rules.other.tableAlignChars,"").split("|"),l=(r=t[3])!=null&&r.trim()?t[3].replace(this.rules.other.tableRowBlankLine,"").split("\n"):[],i={type:"table",raw:rl(t[0],"\n"),header:[],align:[],rows:[]};if(n.length===a.length){for(let s of a)this.rules.other.tableAlignRight.test(s)?i.align.push("right"):this.rules.other.tableAlignCenter.test(s)?i.align.push("center"):this.rules.other.tableAlignLeft.test(s)?i.align.push("left"):i.align.push(null);for(let s=0;s<n.length;s++)i.header.push({text:n[s],tokens:this.lexer.inline(n[s]),header:!0,align:i.align[s]});for(let s of l)i.rows.push(e1(s,i.header.length).map((o,u)=>({text:o,tokens:this.lexer.inline(o),header:!1,align:i.align[u]})));return i}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t){let n=t[1].trim();return{type:"heading",raw:rl(t[0],"\n"),depth:t[2].charAt(0)==="="?1:2,text:n,tokens:this.lexer.inline(n)}}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let n=t[1].charAt(t[1].length-1)==="\n"?t[1].slice(0,-1):t[1];return{type:"paragraph",raw:t[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let n=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let i=rl(n.slice(0,-1),"\\");if((n.length-i.length)%2===0)return}else{let i=Cw(t[2],"()");if(i===-2)return;if(i>-1){let r=(t[0].indexOf("!")===0?5:4)+t[1].length+i;t[2]=t[2].substring(0,i),t[0]=t[0].substring(0,r).trim(),t[3]=""}}let a=t[2],l="";if(this.options.pedantic){let i=this.rules.other.pedanticHrefTitle.exec(a);i&&(a=i[1],l=i[3])}else l=t[3]?t[3].slice(1,-1):"";return a=a.trim(),this.rules.other.startAngleBracket.test(a)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?a=a.slice(1):a=a.slice(1,-1)),n1(t,{href:a&&a.replace(this.rules.inline.anyPunctuation,"$1"),title:l&&l.replace(this.rules.inline.anyPunctuation,"$1")},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let a=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal," "),l=t[a.toLowerCase()];if(!l){let i=n[0].charAt(0);return{type:"text",raw:i,text:i}}return n1(n,l,n[0],this.lexer,this.rules)}}emStrong(e,t,n=""){let a=this.rules.inline.emStrongLDelim.exec(e);if(!(!a||!a[1]&&!a[2]&&!a[3]&&!a[4]||a[4]&&n.match(this.rules.other.unicodeAlphaNumeric))&&(!(a[1]||a[3])||!n||this.rules.inline.punctuation.exec(n))){let l=[...a[0]].length-1,i,r,s=l,o=0,u=a[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(u.lastIndex=0,t=t.slice(-1*e.length+l);(a=u.exec(t))!==null;){if(i=a[1]||a[2]||a[3]||a[4]||a[5]||a[6],!i)continue;if(r=[...i].length,a[3]||a[4]){s+=r;continue}else if((a[5]||a[6])&&l%3&&!((l+r)%3)){o+=r;continue}if(s-=r,s>0)continue;r=Math.min(r,r+s+o);let c=[...a[0]][0].length,f=e.slice(0,l+a.index+c+r);if(Math.min(l,r)%2){let p=f.slice(1,-1);return{type:"em",raw:f,text:p,tokens:this.lexer.inlineTokens(p)}}let d=f.slice(2,-2);return{type:"strong",raw:f,text:d,tokens:this.lexer.inlineTokens(d)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let n=t[2].replace(this.rules.other.newLineCharGlobal," "),a=this.rules.other.nonSpaceChar.test(n),l=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return a&&l&&(n=n.substring(1,n.length-1)),{type:"codespan",raw:t[0],text:n}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e,t,n=""){let a=this.rules.inline.delLDelim.exec(e);if(a&&(!a[1]||!n||this.rules.inline.punctuation.exec(n))){let l=[...a[0]].length-1,i,r,s=l,o=this.rules.inline.delRDelim;for(o.lastIndex=0,t=t.slice(-1*e.length+l);(a=o.exec(t))!==null;){if(i=a[1]||a[2]||a[3]||a[4]||a[5]||a[6],!i||(r=[...i].length,r!==l))continue;if(a[3]||a[4]){s+=r;continue}if(s-=r,s>0)continue;r=Math.min(r,r+s);let u=[...a[0]][0].length,c=e.slice(0,l+a.index+u+r),f=c.slice(l,-l);return{type:"del",raw:c,text:f,tokens:this.lexer.inlineTokens(f)}}}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let n,a;return t[2]==="@"?(n=t[1],a="mailto:"+n):(n=t[1],a=n),{type:"link",raw:t[0],text:n,href:a,tokens:[{type:"text",raw:n,text:n}]}}}url(e){var n,a;let t;if(t=this.rules.inline.url.exec(e)){let l,i;if(t[2]==="@")l=t[0],i="mailto:"+l;else{let r;do r=t[0],t[0]=(a=(n=this.rules.inline._backpedal.exec(t[0]))==null?void 0:n[0])!=null?a:"";while(r!==t[0]);l=t[0],t[1]==="www."?i="http://"+t[0]:i=t[0]}return{type:"link",raw:t[0],text:l,href:i,tokens:[{type:"text",raw:l,text:l}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let n=this.lexer.state.inRawBlock;return{type:"text",raw:t[0],text:t[0],escaped:n}}}},An=class cp{constructor(t){V(this,"tokens");V(this,"options");V(this,"state");V(this,"inlineQueue");V(this,"tokenizer");this.tokens=[],this.tokens.links=Object.create(null),this.options=t||Ql,this.options.tokenizer=this.options.tokenizer||new mc,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let n={other:bt,block:dc.normal,inline:Vs.normal};this.options.pedantic?(n.block=dc.pedantic,n.inline=Vs.pedantic):this.options.gfm&&(n.block=dc.gfm,this.options.breaks?n.inline=Vs.breaks:n.inline=Vs.gfm),this.tokenizer.rules=n}static get rules(){return{block:dc,inline:Vs}}static lex(t,n){return new cp(n).lex(t)}static lexInline(t,n){return new cp(n).inlineTokens(t)}lex(t){t=t.replace(bt.carriageReturn,"\n"),this.blockTokens(t,this.tokens);for(let n=0;n<this.inlineQueue.length;n++){let a=this.inlineQueue[n];this.inlineTokens(a.src,a.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(t,n=[],a=!1){var i,r,s;this.tokenizer.lexer=this,this.options.pedantic&&(t=t.replace(bt.tabCharGlobal," ").replace(bt.spaceLine,""));let l=1/0;for(;t;){if(t.length<l)l=t.length;else{this.infiniteLoopError(t.charCodeAt(0));break}let o;if((r=(i=this.options.extensions)==null?void 0:i.block)!=null&&r.some(c=>(o=c.call({lexer:this},t,n))?(t=t.substring(o.raw.length),n.push(o),!0):!1))continue;if(o=this.tokenizer.space(t)){t=t.substring(o.raw.length);let c=n.at(-1);o.raw.length===1&&c!==void 0?c.raw+="\n":n.push(o);continue}if(o=this.tokenizer.code(t)){t=t.substring(o.raw.length);let c=n.at(-1);(c==null?void 0:c.type)==="paragraph"||(c==null?void 0:c.type)==="text"?(c.raw+=(c.raw.endsWith("\n")?"":"\n")+o.raw,c.text+="\n"+o.text,this.inlineQueue.at(-1).src=c.text):n.push(o);continue}if(o=this.tokenizer.fences(t)){t=t.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.heading(t)){t=t.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.hr(t)){t=t.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.blockquote(t)){t=t.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.list(t)){t=t.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.html(t)){t=t.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.def(t)){t=t.substring(o.raw.length);let c=n.at(-1);(c==null?void 0:c.type)==="paragraph"||(c==null?void 0:c.type)==="text"?(c.raw+=(c.raw.endsWith("\n")?"":"\n")+o.raw,c.text+="\n"+o.raw,this.inlineQueue.at(-1).src=c.text):this.tokens.links[o.tag]||(this.tokens.links[o.tag]={href:o.href,title:o.title},n.push(o));continue}if(o=this.tokenizer.table(t)){t=t.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.lheading(t)){t=t.substring(o.raw.length),n.push(o);continue}let u=t;if((s=this.options.extensions)!=null&&s.startBlock){let c=1/0,f=t.slice(1),d;this.options.extensions.startBlock.forEach(p=>{d=p.call({lexer:this},f),typeof d=="number"&&d>=0&&(c=Math.min(c,d))}),c<1/0&&c>=0&&(u=t.substring(0,c+1))}if(this.state.top&&(o=this.tokenizer.paragraph(u))){let c=n.at(-1);a&&(c==null?void 0:c.type)==="paragraph"?(c.raw+=(c.raw.endsWith("\n")?"":"\n")+o.raw,c.text+="\n"+o.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=c.text):n.push(o),a=u.length!==t.length,t=t.substring(o.raw.length);continue}if(o=this.tokenizer.text(t)){t=t.substring(o.raw.length);let c=n.at(-1);(c==null?void 0:c.type)==="text"?(c.raw+=(c.raw.endsWith("\n")?"":"\n")+o.raw,c.text+="\n"+o.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=c.text):n.push(o);continue}if(t){this.infiniteLoopError(t.charCodeAt(0));break}}return this.state.top=!0,n}inline(t,n=[]){return this.inlineQueue.push({src:t,tokens:n}),n}inlineTokens(t,n=[]){var u,c,f,d,p,S;this.tokenizer.lexer=this;let a=t,l=null;if(this.tokens.links){let y=Object.keys(this.tokens.links);if(y.length>0)for(;(l=this.tokenizer.rules.inline.reflinkSearch.exec(a))!==null;)y.includes(l[0].slice(l[0].lastIndexOf("[")+1,-1))&&(a=a.slice(0,l.index)+"["+"a".repeat(l[0].length-2)+"]"+a.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(l=this.tokenizer.rules.inline.anyPunctuation.exec(a))!==null;)a=a.slice(0,l.index)+"++"+a.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let i;for(;(l=this.tokenizer.rules.inline.blockSkip.exec(a))!==null;)i=l[2]?l[2].length:0,a=a.slice(0,l.index+i)+"["+"a".repeat(l[0].length-i-2)+"]"+a.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);a=(f=(c=(u=this.options.hooks)==null?void 0:u.emStrongMask)==null?void 0:c.call({lexer:this},a))!=null?f:a;let r=!1,s="",o=1/0;for(;t;){if(t.length<o)o=t.length;else{this.infiniteLoopError(t.charCodeAt(0));break}r||(s=""),r=!1;let y;if((p=(d=this.options.extensions)==null?void 0:d.inline)!=null&&p.some(h=>(y=h.call({lexer:this},t,n))?(t=t.substring(y.raw.length),n.push(y),!0):!1))continue;if(y=this.tokenizer.escape(t)){t=t.substring(y.raw.length),n.push(y);continue}if(y=this.tokenizer.tag(t)){t=t.substring(y.raw.length),n.push(y);continue}if(y=this.tokenizer.link(t)){t=t.substring(y.raw.length),n.push(y);continue}if(y=this.tokenizer.reflink(t,this.tokens.links)){t=t.substring(y.raw.length);let h=n.at(-1);y.type==="text"&&(h==null?void 0:h.type)==="text"?(h.raw+=y.raw,h.text+=y.text):n.push(y);continue}if(y=this.tokenizer.emStrong(t,a,s)){t=t.substring(y.raw.length),n.push(y);continue}if(y=this.tokenizer.codespan(t)){t=t.substring(y.raw.length),n.push(y);continue}if(y=this.tokenizer.br(t)){t=t.substring(y.raw.length),n.push(y);continue}if(y=this.tokenizer.del(t,a,s)){t=t.substring(y.raw.length),n.push(y);continue}if(y=this.tokenizer.autolink(t)){t=t.substring(y.raw.length),n.push(y);continue}if(!this.state.inLink&&(y=this.tokenizer.url(t))){t=t.substring(y.raw.length),n.push(y);continue}let x=t;if((S=this.options.extensions)!=null&&S.startInline){let h=1/0,m=t.slice(1),b;this.options.extensions.startInline.forEach(v=>{b=v.call({lexer:this},m),typeof b=="number"&&b>=0&&(h=Math.min(h,b))}),h<1/0&&h>=0&&(x=t.substring(0,h+1))}if(y=this.tokenizer.inlineText(x)){t=t.substring(y.raw.length),y.raw.slice(-1)!=="_"&&(s=y.raw.slice(-1)),r=!0;let h=n.at(-1);(h==null?void 0:h.type)==="text"?(h.raw+=y.raw,h.text+=y.text):n.push(y);continue}if(t){this.infiniteLoopError(t.charCodeAt(0));break}}return n}infiniteLoopError(t){let n="Infinite loop on byte: "+t;if(this.options.silent)console.error(n);else throw new Error(n)}},gc=class{constructor(e){V(this,"options");V(this,"parser");this.options=e||Ql}space(e){return""}code({text:e,lang:t,escaped:n}){var i;let a=(i=(t||"").match(bt.notSpaceStart))==null?void 0:i[0],l=e.replace(bt.endingNewline,"")+"\n";return a?'<pre><code class="language-'+$n(a)+'">'+(n?l:$n(l,!0))+"</code></pre>\n":"<pre><code>"+(n?l:$n(l,!0))+"</code></pre>\n"}blockquote({tokens:e}){return"<blockquote>\n".concat(this.parser.parse(e),"</blockquote>\n")}html({text:e}){return e}def(e){return""}heading({tokens:e,depth:t}){return"<h".concat(t,">").concat(this.parser.parseInline(e),"</h").concat(t,">\n")}hr(e){return"<hr>\n"}list(e){let t=e.ordered,n=e.start,a="";for(let r=0;r<e.items.length;r++){let s=e.items[r];a+=this.listitem(s)}let l=t?"ol":"ul",i=t&&n!==1?' start="'+n+'"':"";return"<"+l+i+">\n"+a+"</"+l+">\n"}listitem(e){return"<li>".concat(this.parser.parse(e.tokens),"</li>\n")}checkbox({checked:e}){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox"> '}paragraph({tokens:e}){return"<p>".concat(this.parser.parseInline(e),"</p>\n")}table(e){let t="",n="";for(let l=0;l<e.header.length;l++)n+=this.tablecell(e.header[l]);t+=this.tablerow({text:n});let a="";for(let l=0;l<e.rows.length;l++){let i=e.rows[l];n="";for(let r=0;r<i.length;r++)n+=this.tablecell(i[r]);a+=this.tablerow({text:n})}return a&&(a="<tbody>".concat(a,"</tbody>")),"<table>\n<thead>\n"+t+"</thead>\n"+a+"</table>\n"}tablerow({text:e}){return"<tr>\n".concat(e,"</tr>\n")}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?"th":"td";return(e.align?"<".concat(n,' align="').concat(e.align,'">'):"<".concat(n,">"))+t+"</".concat(n,">\n")}strong({tokens:e}){return"<strong>".concat(this.parser.parseInline(e),"</strong>")}em({tokens:e}){return"<em>".concat(this.parser.parseInline(e),"</em>")}codespan({text:e}){return"<code>".concat($n(e,!0),"</code>")}br(e){return"<br>"}del({tokens:e}){return"<del>".concat(this.parser.parseInline(e),"</del>")}link({href:e,title:t,tokens:n}){let a=this.parser.parseInline(n),l=WS(e);if(l===null)return a;e=l;let i='<a href="'+e+'"';return t&&(i+=' title="'+$n(t)+'"'),i+=">"+a+"</a>",i}image({href:e,title:t,text:n,tokens:a}){a&&(n=this.parser.parseInline(a,this.parser.textRenderer));let l=WS(e);if(l===null)return $n(n);e=l;let i='<img src="'.concat(e,'" alt="').concat($n(n),'"');return t&&(i+=' title="'.concat($n(t),'"')),i+=">",i}text(e){return"tokens"in e&&e.tokens?this.parser.parseInline(e.tokens):"escaped"in e&&e.escaped?e.text:$n(e.text)}},Sp=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return""+e}image({text:e}){return""+e}br(){return""}checkbox({raw:e}){return e}},wn=class fp{constructor(t){V(this,"options");V(this,"renderer");V(this,"textRenderer");this.options=t||Ql,this.options.renderer=this.options.renderer||new gc,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new Sp}static parse(t,n){return new fp(n).parse(t)}static parseInline(t,n){return new fp(n).parseInline(t)}parse(t){var a,l;this.renderer.parser=this;let n="";for(let i=0;i<t.length;i++){let r=t[i];if((l=(a=this.options.extensions)==null?void 0:a.renderers)!=null&&l[r.type]){let o=r,u=this.options.extensions.renderers[o.type].call({parser:this},o);if(u!==!1||!["space","hr","heading","code","table","blockquote","list","html","def","paragraph","text"].includes(o.type)){n+=u||"";continue}}let s=r;switch(s.type){case"space":{n+=this.renderer.space(s);break}case"hr":{n+=this.renderer.hr(s);break}case"heading":{n+=this.renderer.heading(s);break}case"code":{n+=this.renderer.code(s);break}case"table":{n+=this.renderer.table(s);break}case"blockquote":{n+=this.renderer.blockquote(s);break}case"list":{n+=this.renderer.list(s);break}case"checkbox":{n+=this.renderer.checkbox(s);break}case"html":{n+=this.renderer.html(s);break}case"def":{n+=this.renderer.def(s);break}case"paragraph":{n+=this.renderer.paragraph(s);break}case"text":{n+=this.renderer.text(s);break}default:{let o='Token with "'+s.type+'" type was not found.';if(this.options.silent)return console.error(o),"";throw new Error(o)}}}return n}parseInline(t,n=this.renderer){var l,i;this.renderer.parser=this;let a="";for(let r=0;r<t.length;r++){let s=t[r];if((i=(l=this.options.extensions)==null?void 0:l.renderers)!=null&&i[s.type]){let u=this.options.extensions.renderers[s.type].call({parser:this},s);if(u!==!1||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(s.type)){a+=u||"";continue}}let o=s;switch(o.type){case"escape":{a+=n.text(o);break}case"html":{a+=n.html(o);break}case"link":{a+=n.link(o);break}case"image":{a+=n.image(o);break}case"checkbox":{a+=n.checkbox(o);break}case"strong":{a+=n.strong(o);break}case"em":{a+=n.em(o);break}case"codespan":{a+=n.codespan(o);break}case"br":{a+=n.br(o);break}case"del":{a+=n.del(o);break}case"text":{a+=n.text(o);break}default:{let u='Token with "'+o.type+'" type was not found.';if(this.options.silent)return console.error(u),"";throw new Error(u)}}}return a}},hc,Gs=(hc=class{constructor(e){V(this,"options");V(this,"block");this.options=e||Ql}preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(e=this.block){return e?An.lex:An.lexInline}provideParser(e=this.block){return e?wn.parse:wn.parseInline}},V(hc,"passThroughHooks",new Set(["preprocess","postprocess","processAllTokens","emStrongMask"])),V(hc,"passThroughHooksRespectAsync",new Set(["preprocess","postprocess","processAllTokens"])),hc),Mw=class{constructor(...e){V(this,"defaults",dp());V(this,"options",this.setOptions);V(this,"parse",this.parseMarkdown(!0));V(this,"parseInline",this.parseMarkdown(!1));V(this,"Parser",wn);V(this,"Renderer",gc);V(this,"TextRenderer",Sp);V(this,"Lexer",An);V(this,"Tokenizer",mc);V(this,"Hooks",Gs);this.use(...e)}walkTokens(e,t){var a,l;let n=[];for(let i of e)switch(n=n.concat(t.call(this,i)),i.type){case"table":{let r=i;for(let s of r.header)n=n.concat(this.walkTokens(s.tokens,t));for(let s of r.rows)for(let o of s)n=n.concat(this.walkTokens(o.tokens,t));break}case"list":{let r=i;n=n.concat(this.walkTokens(r.items,t));break}default:{let r=i;(l=(a=this.defaults.extensions)==null?void 0:a.childTokens)!=null&&l[r.type]?this.defaults.extensions.childTokens[r.type].forEach(s=>{let o=r[s].flat(1/0);n=n.concat(this.walkTokens(o,t))}):r.tokens&&(n=n.concat(this.walkTokens(r.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let a=T({},n);if(a.async=this.defaults.async||a.async||!1,n.extensions&&(n.extensions.forEach(l=>{if(!l.name)throw new Error("extension name required");if("renderer"in l){let i=t.renderers[l.name];i?t.renderers[l.name]=function(...r){let s=l.renderer.apply(this,r);return s===!1&&(s=i.apply(this,r)),s}:t.renderers[l.name]=l.renderer}if("tokenizer"in l){if(!l.level||l.level!=="block"&&l.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let i=t[l.level];i?i.unshift(l.tokenizer):t[l.level]=[l.tokenizer],l.start&&(l.level==="block"?t.startBlock?t.startBlock.push(l.start):t.startBlock=[l.start]:l.level==="inline"&&(t.startInline?t.startInline.push(l.start):t.startInline=[l.start]))}"childTokens"in l&&l.childTokens&&(t.childTokens[l.name]=l.childTokens)}),a.extensions=t),n.renderer){let l=this.defaults.renderer||new gc(this.defaults);for(let i in n.renderer){if(!(i in l))throw new Error("renderer '".concat(i,"' does not exist"));if(["options","parser"].includes(i))continue;let r=i,s=n.renderer[r],o=l[r];l[r]=(...u)=>{let c=s.apply(l,u);return c===!1&&(c=o.apply(l,u)),c||""}}a.renderer=l}if(n.tokenizer){let l=this.defaults.tokenizer||new mc(this.defaults);for(let i in n.tokenizer){if(!(i in l))throw new Error("tokenizer '".concat(i,"' does not exist"));if(["options","rules","lexer"].includes(i))continue;let r=i,s=n.tokenizer[r],o=l[r];l[r]=(...u)=>{let c=s.apply(l,u);return c===!1&&(c=o.apply(l,u)),c}}a.tokenizer=l}if(n.hooks){let l=this.defaults.hooks||new Gs;for(let i in n.hooks){if(!(i in l))throw new Error("hook '".concat(i,"' does not exist"));if(["options","block"].includes(i))continue;let r=i,s=n.hooks[r],o=l[r];Gs.passThroughHooks.has(i)?l[r]=u=>{if(this.defaults.async&&Gs.passThroughHooksRespectAsync.has(i))return(async()=>{let f=await s.call(l,u);return o.call(l,f)})();let c=s.call(l,u);return o.call(l,c)}:l[r]=(...u)=>{if(this.defaults.async)return(async()=>{let f=await s.apply(l,u);return f===!1&&(f=await o.apply(l,u)),f})();let c=s.apply(l,u);return c===!1&&(c=o.apply(l,u)),c}}a.hooks=l}if(n.walkTokens){let l=this.defaults.walkTokens,i=n.walkTokens;a.walkTokens=function(r){let s=[];return s.push(i.call(this,r)),l&&(s=s.concat(l.call(this,r))),s}}this.defaults=T(T({},this.defaults),a)}),this}setOptions(e){return this.defaults=T(T({},this.defaults),e),this}lexer(e,t){return An.lex(e,t!=null?t:this.defaults)}parser(e,t){return wn.parse(e,t!=null?t:this.defaults)}parseMarkdown(e){return(t,n)=>{let a=T({},n),l=T(T({},this.defaults),a),i=this.onError(!!l.silent,!!l.async);if(this.defaults.async===!0&&a.async===!1)return i(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof t>"u"||t===null)return i(new Error("marked(): input parameter is undefined or null"));if(typeof t!="string")return i(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(t)+", string expected"));if(l.hooks&&(l.hooks.options=l,l.hooks.block=e),l.async)return(async()=>{let r=l.hooks?await l.hooks.preprocess(t):t,s=await(l.hooks?await l.hooks.provideLexer(e):e?An.lex:An.lexInline)(r,l),o=l.hooks?await l.hooks.processAllTokens(s):s;l.walkTokens&&await Promise.all(this.walkTokens(o,l.walkTokens));let u=await(l.hooks?await l.hooks.provideParser(e):e?wn.parse:wn.parseInline)(o,l);return l.hooks?await l.hooks.postprocess(u):u})().catch(i);try{l.hooks&&(t=l.hooks.preprocess(t));let r=(l.hooks?l.hooks.provideLexer(e):e?An.lex:An.lexInline)(t,l);l.hooks&&(r=l.hooks.processAllTokens(r)),l.walkTokens&&this.walkTokens(r,l.walkTokens);let s=(l.hooks?l.hooks.provideParser(e):e?wn.parse:wn.parseInline)(r,l);return l.hooks&&(s=l.hooks.postprocess(s)),s}catch(r){return i(r)}}}onError(e,t){return n=>{if(n.message+="\nPlease report this to https://github.com/markedjs/marked.",e){let a="<p>An error occurred:</p><pre>"+$n(n.message+"",!0)+"</pre>";return t?Promise.resolve(a):a}if(t)return Promise.reject(n);throw n}}},$l=new Mw;function de(e,t){return $l.parse(e,t)}de.options=de.setOptions=function(e){return $l.setOptions(e),de.defaults=$l.defaults,a1(de.defaults),de};de.getDefaults=dp;de.defaults=Ql;de.use=function(...e){return $l.use(...e),de.defaults=$l.defaults,a1(de.defaults),de};de.walkTokens=function(e,t){return $l.walkTokens(e,t)};de.parseInline=$l.parseInline;de.Parser=wn;de.parser=wn.parse;de.Renderer=gc;de.TextRenderer=Sp;de.Lexer=An;de.lexer=An.lex;de.Tokenizer=mc;de.Hooks=Gs;de.parse=de;var b_=de.options,v_=de.setOptions,S_=de.use,T_=de.walkTokens,x_=de.parseInline;var E_=wn.parse,k_=An.lex;var h1=$(ye()),p1=$(Me());de.setOptions({pedantic:!1,gfm:!0});function vc({text:e,className:t}){let n=h1.default.useMemo(()=>{if(!e)return"";let a=de.parse(e,{async:!1});return FS.sanitize(typeof a=="string"?a:"")},[e]);return(0,p1.jsx)("div",{className:t,dangerouslySetInnerHTML:{__html:n}})}var G=$(Me());function m1({initial:e,onNotifyRemove:t,onUpdated:n}){var Ht;let{t:a}=it(),l=Ke(),[i,r]=hn.default.useState(e),[s,o]=hn.default.useState(e),[u,c]=hn.default.useState(!1),[f,d]=hn.default.useState(!1),[p,S]=hn.default.useState(!1),[y,x]=hn.default.useState(!1),[h,m]=hn.default.useState(null),[b,v]=hn.default.useState(!1),E=hn.default.useRef(null),N=hn.default.useRef(null);hn.default.useEffect(()=>()=>{E.current!==null&&window.clearTimeout(E.current),N.current!==null&&window.clearTimeout(N.current)},[]);function R(){E.current!==null&&(window.clearTimeout(E.current),E.current=null),N.current!==null&&(window.clearTimeout(N.current),N.current=null)}function C(Y){R(),v(!1),m(Y),E.current=window.setTimeout(()=>{E.current=null,v(!0),N.current=window.setTimeout(()=>{m(null),v(!1),N.current=null},5e3)},3e3)}let L="".concat(i.bid.toString(),"_tags"),U="".concat(Dn(l.userR),"/b:").concat(i.slug),Se=Y=>"".concat(Dn(l.userR),"/t:").concat(li(Y)),X=Y=>{let se=new Date(Y);return new Date(se.getTime()+2).toISOString()},D="".concat(Dn(l.userR),"?before=").concat(encodeURIComponent(X(new Date(i.time)))),z=l.dat.suggestTags===!0,{tagInputRef:P,suggestionState:ie,closeSuggestions:re,onTagsChange:Pe,onTagsKeyDown:Lt,onTagsSelect:Zn,onSuggestionHover:qe,onSuggestionPick:Ut}=Yl({enabled:z,tags:s.tags,onTagsUpdate:Y=>{o(se=>M(T({},se),{tags:Y}))}});async function It(Y){try{let se=await fS(i.bid,Y?"star":"unstar");if(!se.ok){C(jt(a,se.status,se.bodyText));return}R(),m(null);let dt=M(T({},i),{selected:Y});r(dt),o(Zl=>M(T({},Zl),{selected:Y})),n(dt)}catch(se){C(se instanceof _e?a("error.requestTimedOut"):a("error.networkError"))}}async function ge(){try{let Y=await rc(i.bid);if(!Y.ok){C(jt(a,Y.status,Y.bodyText));return}t()}catch(Y){C(Y instanceof _e?a("error.requestTimedOut"):a("error.networkError"))}}async function pn(){try{let Y=await dS(i.bid);if(!Y.ok){C(jt(a,Y.status,Y.bodyText));return}R(),m(null);let se=M(T({},i),{toread:!1});r(se),n(se)}catch(Y){C(Y instanceof _e?a("error.requestTimedOut"):a("error.networkError"))}}function Ee(Y){o(i),d(Y),R(),m(null),v(!1),x(!1),re(),Y&&go(L)}async function ol(){S(!0);try{let Y=await oc(s);Y!=null&&o(se=>M(T({},se),{title:Y}))}finally{S(!1)}}async function ke(){x(!0);try{let Y=await pS(i.bid);if(!Y.ok){C(jt(a,Y.status,Y.bodyText));return}}finally{x(!1)}}let Rn=async Y=>{Y.preventDefault(),R(),m(null),v(!1);let se=M(T({},s),{tags:ta(s.tags)});try{let dt=await sc(se);dt.ok&&dt.status>=200&&dt.status<300?(r(se),d(!1),n(se)):C(jt(a,dt.status,dt.bodyText))}catch(dt){C(dt instanceof _e?a("error.requestTimedOut"):a("error.networkError"))}},Kn=y||s.private||i.url!==s.url;return(0,G.jsxs)("div",{id:String(i.bid),className:"bookmark w-100 mw7 pa1 mb3".concat(i.private?" private":""),children:[l.dat.isowner?(0,G.jsx)("div",{className:"star fl pointer".concat(i.selected?" selected":""),children:(0,G.jsx)("button",{className:"thm-text-border",onClick:()=>{It(!i.selected)},type:"button",children:"\u272D"})}):null,f?null:(0,G.jsxs)("div",{className:"display",children:[(0,G.jsx)("a",{href:i.url,target:"_blank",rel:"noreferrer",className:"link f5 lh-title".concat(i.toread?" unread":""),children:i.title===""?a("noTitle"):i.title}),(0,G.jsx)("br",{}),(0,G.jsx)("a",{href:i.url,className:"link f7 thm-text-tertiary thm-hover-link-color",children:i.url}),i.archiveUrl?(0,G.jsx)("a",{href:i.archiveUrl,className:"link f7 thm-text-tertiary thm-hover-link-color ml2 thm-text-success",target:"_blank",rel:"noreferrer",title:a("bmark.archiveLinkTitle"),children:"\u2611"}):null,(0,G.jsx)("br",{}),(0,G.jsx)("div",{className:"description mt1 thm-text-secondary",children:(0,G.jsx)(vc,{text:i.description})}),(0,G.jsx)("div",{className:"tags",children:i.tags!==""?i.tags.split(" ").map(Y=>(0,G.jsx)("a",{className:"link tag mr1".concat(Y.slice(0,1)==="."?" private":""),href:Se(Y),children:Y},Y)):null}),(0,G.jsxs)("div",{children:[(0,G.jsx)("a",{className:"link f7 di mr5 thm-text-tertiary",href:U,"data-time":i.time,title:Oa(l.lang,i.time),children:Jm(l.lang,i.time)}),l.dat.isowner?(0,G.jsxs)("div",{className:"edit_links di",children:[(0,G.jsxs)("button",{type:"button",onClick:()=>{Ee(!0)},className:"edit thm-text-muted thm-hover-link-color",children:[a("edit"),"\xA0\xA0"]}),(0,G.jsxs)("div",{className:"delete_link di",children:[(0,G.jsx)("button",{type:"button",onClick:()=>{c(!0)},className:"delete thm-text-muted thm-hover-link-color".concat(u?" dn":""),children:a("delete")}),(0,G.jsxs)("span",{className:"confirm thm-text-error".concat(u?"":" dn"),children:[(0,G.jsxs)("button",{type:"button",onClick:()=>{c(!1)},children:[a("cancel"),"\xA0/\xA0"]}),(0,G.jsx)("button",{type:"button",onClick:()=>{ge()},className:"thm-text-error",children:a("destroy")})]})]})]}):null,l.dat.isowner&&i.toread?(0,G.jsxs)("div",{className:"read di",children:["\xA0\xA0",(0,G.jsx)("button",{onClick:()=>{pn()},className:"mark_read",type:"button",children:a("bmark.markAsRead")})]}):null]}),((Ht=l.dat.filter)==null?void 0:Ht.tag)=="FilterSingle"?(0,G.jsx)("div",{className:"mt2",children:(0,G.jsx)("a",{className:"link f7 di mr5",href:D,children:a("bmark.viewInContext")})}):null]}),f?(0,G.jsx)("div",{className:"edit_bookmark_form pa2 pt0 thm-bg-surface",children:(0,G.jsxs)("form",{onSubmit:Y=>{Rn(Y)},children:[(0,G.jsx)("div",{children:a("bmark.url")}),(0,G.jsx)("input",{type:"url",className:"url w-100 mb2 pt1 edit_form_input",required:!0,name:"url",value:s.url,onChange:Y=>{o(se=>M(T({},se),{url:Y.target.value}))}}),(0,G.jsx)("div",{children:a("bmark.title")}),(0,G.jsxs)("div",{className:"flex",children:[(0,G.jsx)("input",{type:"text",className:"title w-100 mb2 pt1 edit_form_input",name:"title",value:s.title,onChange:Y=>{o(se=>M(T({},se),{title:Y.target.value}))}}),(0,G.jsx)("button",{disabled:p,type:"button",onClick:()=>{ol()},className:"ml1 pa1 mb2 thm-text-primary ba thm-border-default thm-bg-secondary pointer rdim f7".concat(p?" thm-bg-disabled":""),children:a("fetch")})]}),(0,G.jsx)("div",{children:a("bmark.description")}),(0,G.jsx)("textarea",{className:"description w-100 mb1 pt1 edit_form_input",name:"description",rows:5,value:s.description,onChange:Y=>{o(se=>M(T({},se),{description:Y.target.value}))}}),(0,G.jsxs)("div",{id:"tags_input_box",children:[(0,G.jsx)("div",{children:a("bmark.tags")}),(0,G.jsxs)("div",{className:"relative",children:[(0,G.jsx)("input",{id:L,ref:P,type:"text",className:"tags w-100 mb1 pt1 edit_form_input",name:"tags",autoComplete:"off",autoCapitalize:"off",value:s.tags,onChange:Pe,onKeyDown:Lt,onClick:Zn,onSelect:Zn,onBlur:()=>{window.setTimeout(()=>{re()},0)}}),ie!=null?(0,G.jsx)(Vl,{suggestionState:ie,onHover:qe,onPick:Ut}):null]})]}),(0,G.jsxs)("div",{className:"edit_form_checkboxes mv3",children:[(0,G.jsx)("input",{type:"checkbox",className:"private pointer",id:"edit_private",name:"private",checked:s.private,onChange:Y=>{o(se=>M(T({},se),{private:Y.target.checked}))}})," ",(0,G.jsx)("label",{htmlFor:"edit_private",className:"mr2",children:a("bmark.private")})," ",(0,G.jsx)("input",{type:"checkbox",className:"toread pointer",id:"edit_toread",name:"toread",checked:s.toread,onChange:Y=>{o(se=>M(T({},se),{toread:Y.target.checked}))}})," ",(0,G.jsx)("label",{htmlFor:"edit_toread",children:a("bmark.toread")})]}),(0,G.jsxs)("div",{className:"flex justify-between items-center",children:[(0,G.jsxs)("div",{children:[(0,G.jsx)("input",{type:"submit",className:"mr1 pv1 ph2 thm-text-primary ba thm-border-default thm-bg-secondary pointer rdim",value:a("save")})," ",(0,G.jsx)("input",{type:"reset",className:"pv1 ph2 thm-text-primary ba thm-border-default thm-bg-secondary pointer rdim",value:a("cancel"),onClick:()=>{Ee(!1)}})]}),l.dat.archiveBackendEnabled?(0,G.jsx)("button",{type:"button",disabled:Kn,onClick:()=>{ke()},className:"pv1 ph2 thm-text-primary ba thm-border-default thm-bg-secondary".concat(y?" thm-bg-disabled":"").concat(Kn?" not-allowed o-20":""),children:a(y?"archiving":"archive")}):null]})]})}):null,h!=null?(0,G.jsx)("span",{className:"thm-text-error f7 db mt1",style:{opacity:b?0:1,transition:b?"opacity 5s":"none"},children:h}):null]})}var xp=$(Me());function g1({initial:e}){let[t,n]=Tp.default.useState(!1),a=Gl(o=>o.bmarks),l=Gl(o=>o.setAll),i=Gl(o=>o.removeById),r=Gl(o=>o.upsert);return Tp.default.useLayoutEffect(()=>{l(e),n(!0)},[e,l]),(0,xp.jsx)("div",{children:(t?a:e).map(o=>(0,xp.jsx)(m1,{initial:o,onNotifyRemove:()=>{i(o.bid)},onUpdated:u=>{r(u)}},o.bid))})}var Ie=$(ye());var W=$(Me());function y1(e,t,n,a,l){return e===null?"bulkEdit.pleaseAddSelection":!t&&!n.trim()&&!a.trim()?"bulkEdit.pleaseChooseAction":l>2e4&&n.trim().split(/\s+/).filter(Boolean).length>10?"bulkEdit.tooManyTags":null}function Ea(e,t,n,a){return(0,W.jsx)("a",{href:"#",className:"dib mt1 link".concat(e===t?" nav-active":" silver hover-alt"),onClick:l=>{l.preventDefault(),a(t)},children:n})}function b1({bcount:e}){var Fn,ul,cl,dr;let{t}=it(),[n,a]=(0,Ie.useState)(!1),[l,i]=(0,Ie.useState)(null),[r,s]=(0,Ie.useState)(null),[o,u]=(0,Ie.useState)(""),[c,f]=(0,Ie.useState)(""),[d,p]=(0,Ie.useState)(!1),[S,y]=(0,Ie.useState)(!1),[x,h]=(0,Ie.useState)(!1),[m,b]=(0,Ie.useState)(null),[v,E]=(0,Ie.useState)(!1),N=(0,Ie.useRef)(null),R=(0,Ie.useRef)(null),C=Ke(),L=C.dat.suggestTags===!0,U=(Fn=C.dat.filter)!=null?Fn:{tag:"FilterAll"},Se=(ul=C.dat.sharedp)!=null?ul:"all",X=(cl=C.dat.tags)!=null?cl:[],D=(dr=C.dat.query)!=null?dr:null,P=Gl(Ce=>Ce.bmarks).map(Ce=>Ce.bid),ie=P.length,re=l===null?0:l==="page"?ie:e,Pe=y1(l,r,o,c,e),Lt=d||Pe!==null||S||x,{tagInputRef:Zn,suggestionState:qe,closeSuggestions:Ut,onTagsChange:It,onTagsKeyDown:ge,onTagsSelect:pn,onSuggestionHover:Ee,onSuggestionPick:ol}=Yl({enabled:L&&r!=="delete",tags:c,onTagsUpdate:f}),{tagInputRef:ke,suggestionState:Rn,closeSuggestions:Kn,onTagsChange:Ht,onTagsKeyDown:Y,onTagsSelect:se,onSuggestionHover:dt,onSuggestionPick:Zl}=Yl({enabled:L&&r!=="delete",tags:o,onTagsUpdate:u}),Pt=()=>{N.current!==null&&(window.clearTimeout(N.current),N.current=null),R.current!==null&&(window.clearTimeout(R.current),R.current=null)},Aa=()=>{i(null),s(null),u(""),f(""),y(!1),h(!1),b(null),E(!1),Pt()};(0,Ie.useEffect)(()=>{let Ce=document.getElementById("bulk-edit-toggle");if(!Ce)return;let gn=Jn=>{Jn.preventDefault(),Aa(),a(On=>!On)};return Ce.addEventListener("click",gn),()=>{Ce.removeEventListener("click",gn)}},[]),(0,Ie.useEffect)(()=>{let Ce=document.getElementById("bulk-edit-toggle");Ce&&(Ce.classList.toggle("nav-active",n),Ce.classList.toggle("silver",!n))},[n]),(0,Ie.useEffect)(()=>{y(!1),h(!1),b(null),E(!1)},[r,l]),(0,Ie.useEffect)(()=>()=>{Pt()},[]);let Bt=Ce=>{Pt(),E(!1),b(Ce),N.current=window.setTimeout(()=>{N.current=null,E(!0),R.current=window.setTimeout(()=>{b(null),E(!1),R.current=null},5e3)},3e3)},fr=async Ce=>{var In;Ce.preventDefault(),b(null),E(!1);let gn=ta(o),Jn=ta(c),On=y1(l,r,gn,Jn,e);if(On!==null){Bt(t(On));return}if(r==="delete"&&!S){y(!0);return}if(r==="public"&&!x){h(!0);return}y(!1),h(!1),p(!0);try{if(l===null)return;let ht=await hS(l==="page"?{selection:"page",bids:P,action:r,addTags:gn,removeTags:Jn,selectionCount:re}:{selection:"all",filter:U,sharedp:Se,tags:X,query:D,action:r,addTags:gn,removeTags:Jn,selectionCount:re});ht.ok?window.location.reload():Bt(jt(t,ht.status,(In=ht.bodyText)!=null?In:""))}catch(ht){ht instanceof _e?Bt(t("error.requestTimedOut")):Bt(t("error.networkError"))}finally{p(!1)}};if(!n)return null;let mn=Ce=>{s(gn=>gn===Ce?null:Ce),Ce==="delete"&&(u(""),f(""))};return(0,W.jsxs)("form",{onSubmit:Ce=>{fr(Ce)},className:"w-100 mw7 pa2 bulk_bookmark_form mt1",children:[(0,W.jsxs)("div",{className:"mb2",children:[(0,W.jsxs)("div",{children:[(0,W.jsx)("span",{className:"fw7",children:t("bulkEdit.select")}),l!==null&&(0,W.jsx)("span",{className:"ml2",children:re===1?t("bulkEdit.oneBookmarkSelected"):t("bulkEdit.bookmarksSelected",{count:re})})]}),(0,W.jsxs)("div",{children:[Ea(l,"page",t("bulkEdit.thisPage"),i)," \u2027 ",Ea(l,"all",t("bulkEdit.allPages"),i)]})]}),(0,W.jsxs)("div",{className:"mb2",children:[(0,W.jsx)("div",{children:(0,W.jsx)("span",{className:"fw7",children:t("bulkEdit.action")})}),(0,W.jsxs)("div",{children:[Ea(r,"private",t("bulkEdit.makePrivate"),mn)," \u2027 ",Ea(r,"public",t("bulkEdit.makePublic"),mn)," \u2027 ",Ea(r,"read",t("bulkEdit.markAsRead"),mn)," \u2027 ",Ea(r,"unread",t("bulkEdit.unread"),mn)," \u2027 ",Ea(r,"star",t("bulkEdit.addStars"),mn)," \u2027 ",Ea(r,"unstar",t("bulkEdit.removeStars"),mn)," \u2027 ",Ea(r,"delete",t("delete"),mn)]})]}),(0,W.jsxs)("div",{className:"mb2",children:[(0,W.jsx)("div",{children:(0,W.jsx)("span",{className:"fw7".concat(ta(c)?" nav-active":""),children:t("bulkEdit.removeTags")})}),(0,W.jsxs)("div",{className:"relative",children:[(0,W.jsx)("input",{ref:Zn,type:"text",className:"tags w-100 mb1 pt1 edit_form_input".concat(r==="delete"?" o-50 not-allowed":""),disabled:r==="delete",autoComplete:"off",autoCapitalize:"off",value:c,onChange:It,onKeyDown:ge,onClick:pn,onSelect:pn,onBlur:()=>{window.setTimeout(()=>{Ut()},0)}}),qe!=null?(0,W.jsx)(Vl,{suggestionState:qe,onHover:Ee,onPick:ol}):null]})]}),(0,W.jsxs)("div",{className:"mb2",children:[(0,W.jsx)("div",{children:(0,W.jsx)("span",{className:"fw7".concat(ta(o)?" nav-active":""),children:t("bulkEdit.addTags")})}),(0,W.jsxs)("div",{className:"relative",children:[(0,W.jsx)("input",{ref:ke,type:"text",className:"tags w-100 mb1 pt1 edit_form_input".concat(r==="delete"?" o-50 not-allowed":""),disabled:r==="delete",autoComplete:"off",autoCapitalize:"off",value:o,onChange:Ht,onKeyDown:Y,onClick:se,onSelect:se,onBlur:()=>{window.setTimeout(()=>{Kn()},0)}}),Rn!=null?(0,W.jsx)(Vl,{suggestionState:Rn,onHover:dt,onPick:Zl}):null]})]}),(0,W.jsxs)("div",{className:"flex items-center",children:[(0,W.jsx)("button",{type:"submit",disabled:d||S||x,className:"mr2 pv1 ph2 thm-text-primary ba thm-border-default rdim".concat(Lt?" thm-bg-disabled not-allowed":" thm-bg-secondary pointer"),onClick:()=>{Pe!==null&&Bt(t(Pe))},children:t(d?"bulkEdit.submitting":"bulkEdit.submit")})," ",(0,W.jsx)("button",{type:"button",className:"pv1 ph2 thm-text-primary ba thm-border-default thm-bg-secondary pointer rdim",onClick:()=>{Aa(),a(!1)},children:t("cancel")}),m!=null&&(0,W.jsx)("span",{className:"thm-text-error f6 ml2",style:{opacity:v?0:1,transition:v?"opacity 5s":"none"},children:m}),S&&(0,W.jsxs)("span",{className:"f6 ml2",children:[(0,W.jsx)("span",{className:"mr2",children:re===1?t("bulkEdit.destroyOne"):t("bulkEdit.destroyMany",{count:re})}),(0,W.jsxs)("span",{className:"nowrap",children:[(0,W.jsx)("button",{type:"button",onClick:()=>{y(!1)},children:t("cancel")})," / ",(0,W.jsx)("button",{type:"submit",className:"thm-text-error",children:t("destroy")})]})]}),x&&(0,W.jsxs)("span",{className:"f6 ml2",children:[(0,W.jsx)("span",{className:"mr2",children:re===1?t("bulkEdit.publicOne"):t("bulkEdit.publicMany",{count:re})}),(0,W.jsxs)("span",{className:"nowrap",children:[(0,W.jsx)("button",{type:"button",onClick:()=>{h(!1)},children:t("cancel")})," / ",(0,W.jsx)("button",{type:"submit",className:"thm-text-error",children:t("bulkEdit.makePublic")})]})]})]})]})}var Ep=$(ye());var Mt=$(Me());function Lw(e){let t=e.split("\n");return(0,Mt.jsxs)(Mt.Fragment,{children:[t[0],t.slice(1).map((n,a)=>(0,Mt.jsxs)(Ep.default.Fragment,{children:[(0,Mt.jsx)("br",{}),n]},a))]})}function v1({initial:e}){let{t}=it(),n=Ke(),a=l=>"".concat(Dn(n.userR),"/notes/").concat(l);return(0,Mt.jsx)("div",{children:e.map(l=>{let i=Ep.default.useMemo(()=>ni(n.lang,l.created),[n.lang,l.created]);return(0,Mt.jsx)("div",{id:String(l.id),className:"note w-100 mw7 pa1 mb2".concat(l.shared?"":" private"),children:(0,Mt.jsxs)("div",{className:"display",children:[(0,Mt.jsx)("a",{href:a(l.slug),className:"link f5 lh-title",children:l.title===""?t("noTitle"):l.title}),(0,Mt.jsx)("br",{}),(0,Mt.jsx)("div",{className:"description mt1 thm-text-secondary",children:Lw(l.text.slice(0,200))}),(0,Mt.jsx)("a",{className:"link f7 dib thm-text-tertiary w4","data-created":l.created,title:Oa(n.lang,l.created),href:a(l.slug),children:i})]})},l.id)})})}var sl=$(ye());var K=$(Me());function Uw(e){let t=e.split("\n");return(0,K.jsxs)(K.Fragment,{children:[t[0],t.slice(1).map((n,a)=>(0,K.jsxs)(sl.default.Fragment,{children:[(0,K.jsx)("br",{}),n]},a))]})}function S1({initial:e}){let{t}=it(),n=Ke(),[a,l]=sl.default.useState(e),[i,r]=sl.default.useState(e),[s,o]=sl.default.useState(!1),[u,c]=sl.default.useState(e.id<=0),[f,d]=sl.default.useState(!1),[p,S]=sl.default.useState(null),y=ni(n.lang,a.created),x="".concat(a.id.toString(),"_text");function h(v){r(a),c(v);let E=Er(),N=kr(E,"next");!v&&N==="closeWindow"?ai(window):v&&go(x)}async function m(){try{let v=await vS(a.id);if(!v.ok){S(jt(t,v.status,v.bodyText));return}d(!0)}catch(v){S(v instanceof _e?t("error.requestTimedOut"):t("error.networkError"))}}let b=async v=>{v.preventDefault(),S(null);try{let E=await mS(i);if(E.ok&&E.status>=200&&E.status<300){let N=Er(),R=kr(N,"next"),C=document.referrer,L=window.location.origin;R==="closeWindow"?ai(window):R==="back"?C.startsWith(L)?window.location.href=C:window.location.href=L:i.id===0?window.location.href=Dn(n.noteR):(l(i),c(!1))}else S(jt(t,E.status,E.bodyText))}catch(E){S(E instanceof _e?t("error.requestTimedOut"):t("error.networkError"))}};return f?(0,K.jsx)("p",{className:"thm-text-error",children:t("note.killed")}):(0,K.jsxs)("div",{id:String(a.id),className:"note w-100 mw7 pa1 mb2",children:[p?(0,K.jsx)("div",{className:"alert alert-err mb2",children:p}):null,u?(0,K.jsxs)("form",{onSubmit:v=>{b(v)},children:[(0,K.jsx)("p",{className:"mt2 mb1",children:t("note.titleLabel")}),(0,K.jsx)("input",{type:"text",className:"title w-100 mb1 pt1 edit_form_input",name:"title",value:i.title,onChange:v=>{r(E=>M(T({},E),{title:v.target.value}))},autoFocus:i.title===""}),(0,K.jsx)("br",{}),(0,K.jsx)("p",{className:"mt2 mb1",children:t("note.descriptionLabel")}),(0,K.jsx)("textarea",{id:x,className:"description w-100 mb1 pt1 edit_form_input",name:"text",rows:25,value:i.text,onChange:v=>{r(E=>M(T({},E),{text:v.target.value}))}}),(0,K.jsxs)("div",{className:"edit_form_checkboxes mb3",children:[(0,K.jsx)("input",{type:"checkbox",className:"is-markdown pointer",id:"edit_ismarkdown",name:"ismarkdown",checked:i.isMarkdown,onChange:v=>{r(E=>M(T({},E),{isMarkdown:v.target.checked}))}})," ",(0,K.jsx)("label",{htmlFor:"edit_ismarkdown",className:"mr2",children:t("note.useMarkdown")}),(0,K.jsx)("br",{})]}),(0,K.jsxs)("div",{className:"edit_form_checkboxes mb3",children:[(0,K.jsx)("input",{type:"checkbox",className:"is-markdown pointer",id:"edit_shared",name:"shared",checked:i.shared,onChange:v=>{r(E=>M(T({},E),{shared:v.target.checked}))}})," ",(0,K.jsx)("label",{htmlFor:"edit_shared",className:"mr2",children:t("note.publicLabel")}),(0,K.jsx)("br",{})]}),(0,K.jsx)("input",{type:"submit",className:"mr1 pv1 ph2 thm-text-primary ba thm-border-default thm-bg-secondary pointer rdim",value:t("save")})," ",(0,K.jsx)("input",{type:"reset",className:"pv1 ph2 thm-text-primary ba thm-border-default thm-bg-secondary pointer rdim",value:t("cancel"),onClick:()=>{h(!1)}})]}):(0,K.jsxs)(K.Fragment,{children:[(0,K.jsxs)("div",{className:"display",children:[(0,K.jsx)("div",{className:"link f5 lh-title",children:a.title===""?t("noTitle"):a.title}),(0,K.jsx)("br",{}),a.isMarkdown?(0,K.jsx)("div",{className:"description mt1",children:(0,K.jsx)(vc,{text:a.text})}):(0,K.jsx)("div",{className:"description mt1 thm-text-secondary",children:Uw(a.text)}),(0,K.jsxs)("div",{className:"link f7 mt2 dib thm-text-tertiary w4",children:[(0,K.jsx)("span",{"data-created":a.created,title:Oa(n.lang,a.created),children:y})," - ",(0,K.jsx)("span",{className:"thm-text-tertiary",children:a.shared?t("filter.public"):t("filter.private")})]})]}),n.dat.isowner?(0,K.jsxs)("div",{className:"edit_links db mt3",children:[(0,K.jsxs)("button",{type:"button",onClick:()=>{h(!0)},className:"edit thm-text-muted thm-hover-link-color",children:[t("edit"),"\xA0\xA0"]}),(0,K.jsxs)("div",{className:"delete_link di",children:[(0,K.jsx)("button",{type:"button",onClick:()=>{o(!0)},className:"delete thm-text-muted thm-hover-link-color".concat(s?" dn":""),children:t("delete")}),(0,K.jsxs)("span",{className:"confirm thm-text-error".concat(s?"":" dn"),children:[(0,K.jsxs)("button",{type:"button",onClick:()=>{o(!1)},children:[t("cancel"),"\xA0/\xA0"]}),(0,K.jsx)("button",{type:"button",onClick:()=>{m()},className:"thm-text-error",children:t("destroy")})]})]})]}):null]})]})}var ur=$(ye());var $s=cc(e=>({mode:{kind:"none"},tagcloud:{},setMode:t=>{e({mode:t})},setTagCloud:t=>{e({tagcloud:t})}}));function T1(e){switch(e.mode){case"top":return{kind:"top",expanded:e.expanded};case"lowerBound":{let t=typeof e.value=="number"?e.value:Number(e.value);return Number.isFinite(t)?{kind:"lowerBound",expanded:e.expanded,value:t}:{kind:"none"}}case"related":{let t=typeof e.value=="string"?e.value:"",n=t?t.split(" "):[];return{kind:"related",expanded:e.expanded,value:n}}case"relatedLowerBound":{let t=typeof e.value=="string"?e.value:"",n=t?t.split(" "):[],a=typeof e.lowerBound=="number"&&e.lowerBound>0?e.lowerBound:1;return{kind:"relatedLowerBound",expanded:e.expanded,value:n,lowerBound:a}}default:return{kind:"none"}}}function kp(e){switch(e.kind){case"top":return{mode:"top",value:null,expanded:e.expanded};case"lowerBound":return{mode:"lowerBound",value:e.value,expanded:e.expanded};case"related":return{mode:"related",value:e.value.join(" "),expanded:e.expanded};case"relatedLowerBound":return{mode:"relatedLowerBound",value:e.value.join(" "),expanded:e.expanded,lowerBound:e.lowerBound};case"none":return{mode:"none",value:"",expanded:!1}}}function Qn(e){return e.kind==="none"?!1:e.expanded}function Sc(e,t){return e.kind==="none"?e:M(T({},e),{expanded:t})}var Be=$(Me());function E1({initialMode:e}){let{t}=it(),n=$s(y=>y.mode),a=$s(y=>y.tagcloud),l=$s(y=>y.setMode),i=$s(y=>y.setTagCloud);if(ur.default.useEffect(()=>{l(e)},[e]),ur.default.useEffect(()=>{async function y(x){if(x.kind==="none")return;let h=await gS(kp(x));i(h!=null?h:{})}y(n)},[n,i]),n.kind==="none")return(0,Be.jsx)("div",{className:"tag_cloud"});let r=y=>({kind:"lowerBound",expanded:Qn(n),value:y}),s=n.kind==="related"||n.kind==="relatedLowerBound"?n.value:[],o=()=>({kind:"related",expanded:Qn(n),value:s}),u=y=>({kind:"relatedLowerBound",expanded:Qn(n),value:s,lowerBound:y});async function c(y){let x=Sc(n,y);l(x),Ke().dat.isowner&&await yS(kp(x))}async function f(y){y.kind==="top"&&n.kind==="top"||y.kind==="lowerBound"&&n.kind==="lowerBound"&&n.value===y.value?await c(!Qn(n)):l(Sc(y,!0))}function d(y){y.kind==="related"&&n.kind==="related"||y.kind==="relatedLowerBound"&&n.kind==="relatedLowerBound"&&n.lowerBound===y.lowerBound?c(!Qn(n)):l(Sc(y,!0))}let p=n.kind==="related"||n.kind==="relatedLowerBound",S=n.kind==="relatedLowerBound"?n.lowerBound:0;return(0,Be.jsxs)("div",{className:"tag_cloud mv3",children:[(0,Be.jsxs)("div",{className:"tag_cloud_header mb2",children:[p?(0,Be.jsxs)(Be.Fragment,{children:[(0,Be.jsx)("button",{type:"button",className:"pa1 f7 link thm-hover-link-color mr1".concat(n.kind==="related"?" b":""),title:t("tagCloud.topTagsTitle"),onClick:()=>{d(o())},children:t("tagCloud.relatedTags")}),[[1,"tagCloud.allTitle"],[2,"tagCloud.min2Title"],[5,"tagCloud.min5Title"],[10,"tagCloud.min10Title"],[20,"tagCloud.min20Title"]].map(([y,x])=>(0,Be.jsxs)(ur.default.Fragment,{children:[y!==1&&"\u2027",(0,Be.jsx)("button",{type:"button",className:"pa1 f7 link thm-hover-link-color".concat(y===1?" ml2":"").concat(S===y?" b":""),title:t(x),onClick:()=>{d(u(y))},children:y===1?t("filter.all"):y})]},y))]}):(0,Be.jsxs)(Be.Fragment,{children:[(0,Be.jsx)("button",{type:"button",className:"pa1 f7 link thm-hover-link-color mr1".concat(n.kind==="top"?" b":""),title:t("tagCloud.topTagsTitle"),onClick:()=>{f({kind:"top",expanded:Qn(n)})},children:t("tagCloud.topTags")}),[[1,"tagCloud.allTitle"],[2,"tagCloud.min2Title"],[5,"tagCloud.min5Title"],[10,"tagCloud.min10Title"],[20,"tagCloud.min20Title"]].map(([y,x])=>(0,Be.jsxs)(ur.default.Fragment,{children:[y!==1&&"\u2027",(0,Be.jsx)("button",{type:"button",className:"pa1 f7 link thm-hover-link-color".concat(y===1?" ml2":"").concat(n.kind==="lowerBound"&&n.value===y?" b":""),title:t(x),onClick:()=>{f(r(y))},children:y===1?t("filter.all"):y})]},y))]}),(0,Be.jsx)("button",{type:"button",className:"pa1 ml2 f7 link thm-text-faded thm-hover-link-color",onClick:()=>{c(!Qn(n))},children:Qn(n)?t("tagCloud.hide"):t("tagCloud.show")})]}),Qn(n)?(0,Be.jsx)("div",{className:"tag_cloud_body",children:Hw(p?n.value:[],a)}):null]})}function Hw(e,t){let n=Ke(),a=e.map(o=>o.toLowerCase()),l=o=>"".concat(Dn(n.userR)).concat(o===""?"":"/t:".concat(o)),i=Object.values(t),r=i.length?Math.min(...i):1,s=i.length?Math.max(...i):1;return Object.entries(t).sort((o,u)=>o[0].toLowerCase().localeCompare(u[0].toLowerCase())).map(([o,u])=>{let c=o.toLowerCase(),f=x1(y=>Math.log(1+y),u,r,s,100,133),d=x1(y=>Math.log(1+y),u,r,s,.6,1),p={fontSize:"".concat(f.toString(),"%"),opacity:d},S=a.length===0?null:a.includes(c)?(0,Be.jsx)("a",{href:l(a.filter(y=>y!==c).map(li).join("+")),className:"link mr2 tag-exclude",children:"\u2296"}):(0,Be.jsx)("a",{href:l(a.concat([c]).map(li).join("+")),className:"link mr2 tag-include",children:"\u2295"});return(0,Be.jsxs)(ur.default.Fragment,{children:[(0,Be.jsx)("a",{href:l(li(o)),className:"link tag mr1",style:p,children:o}),S]},o)})}function x1(e,t,n,a,l,i){let r=e(a-n);return(a-n<.01||r===0?1:e(t-n)/r)*(i-l)+l}var ka=$(Me());function A1(e){return document.querySelector(e)}function Bw(){let e=document.querySelector("#content");e&&e.setAttribute("view-rendered","")}function qw({children:e}){return(0,k1.useLayoutEffect)(()=>{Bw()},[]),e}function cr(e,t){let n=A1(e);n&&(0,Ap.createRoot)(n).render((0,ka.jsx)(qw,{children:t}))}var UC=e=>()=>{e.preventDefault(),TS()},HC=e=>t=>()=>{cr(e,(0,ka.jsx)(g1,{initial:t}))},BC=e=>t=>()=>{cr(e,(0,ka.jsx)(b1,{bcount:t}))},qC=e=>t=>()=>{let n=A1(e);n&&(0,Ap.createRoot)(n).render((0,ka.jsx)(E1,{initialMode:T1(t)}))},jC=e=>t=>()=>{cr(e,(0,ka.jsx)(NS,{initial:t}))},YC=e=>t=>()=>{cr(e,(0,ka.jsx)(v1,{initial:t}))},VC=e=>t=>()=>{cr(e,(0,ka.jsx)(S1,{initial:t}))},GC=e=>t=>()=>{cr(e,(0,ka.jsx)(AS,{initial:t}))};function XC(){function e(r){return r==="light"||r==="dark"}function t(){let r=document.documentElement.dataset.colorScheme;return r==="light"||r==="dark"?r:window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}function n(r){document.documentElement.dataset.colorScheme=r}let a="espial-color-scheme",l=window.localStorage.getItem(a);e(l)&&n(l);let i=document.querySelector("#color-scheme-toggle");i&&i.addEventListener("click",r=>{r.preventDefault();let s=t()==="dark"?"light":"dark";n(s),window.localStorage.setItem(a,s)})}export{XC as initColorSchemeToggle,UC as logoutE,GC as renderAccountSettings,jC as renderAddForm,HC as renderBookmarks,BC as renderBulkEdit,VC as renderNote,YC as renderNotes,qC as renderTagCloud}; +/*! Bundled license information: + +react/cjs/react.production.js: + (** + * @license React + * react.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) + +use-sync-external-store/cjs/use-sync-external-store-shim.production.js: + (** + * @license React + * use-sync-external-store-shim.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) + +scheduler/cjs/scheduler.production.js: + (** + * @license React + * scheduler.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) + +react-dom/cjs/react-dom.production.js: + (** + * @license React + * react-dom.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) + +react-dom/cjs/react-dom-client.production.js: + (** + * @license React + * react-dom-client.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) + +react/cjs/react-jsx-runtime.production.js: + (** + * @license React + * react-jsx-runtime.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) + +ky/distribution/index.js: + (*! MIT License © Sindre Sorhus *) + +dompurify/dist/purify.es.mjs: + (*! @license DOMPurify 3.4.7 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.4.7/LICENSE *) +*/ +//# sourceMappingURL=app-SAXM5TAE.min.js.map
+ static/js/app-SAXM5TAE.min.js.gz view
binary file changed (absent → 129964 bytes)
+ static/js/app-SAXM5TAE.min.js.map view
@@ -0,0 +1,7 @@+{ + "version": 3, + "sources": ["../node_modules/react/cjs/react.production.js", "../node_modules/react/index.js", "../node_modules/void-elements/index.js", "../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js", "../node_modules/use-sync-external-store/shim/index.js", "../node_modules/scheduler/cjs/scheduler.production.js", "../node_modules/scheduler/index.js", "../node_modules/react-dom/cjs/react-dom.production.js", "../node_modules/react-dom/index.js", "../node_modules/react-dom/cjs/react-dom-client.production.js", "../node_modules/react-dom/client.js", "../node_modules/react/cjs/react-jsx-runtime.production.js", "../node_modules/react/jsx-runtime.js", "../node_modules/i18next/dist/esm/i18next.js", "../node_modules/@babel/runtime/helpers/esm/classCallCheck.js", "../node_modules/@babel/runtime/helpers/esm/typeof.js", "../node_modules/@babel/runtime/helpers/esm/toPrimitive.js", "../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js", "../node_modules/@babel/runtime/helpers/esm/createClass.js", "../node_modules/i18next-chained-backend/dist/esm/index.js", "../node_modules/i18next-http-backend/esm/index.js", "../node_modules/@babel/runtime/helpers/esm/defineProperty.js", "../node_modules/i18next-localstorage-backend/dist/esm/i18nextLocalStorageBackend.js", "../node_modules/react-i18next/dist/es/Trans.js", "../node_modules/react-i18next/dist/es/TransWithoutContext.js", "../node_modules/react-i18next/dist/es/utils.js", "../node_modules/react-i18next/dist/es/unescape.js", "../node_modules/react-i18next/dist/es/defaults.js", "../node_modules/react-i18next/dist/es/i18nInstance.js", "../node_modules/react-i18next/dist/es/context.js", "../node_modules/react-i18next/dist/es/initReactI18next.js", "../node_modules/react-i18next/dist/es/IcuTrans.js", "../node_modules/react-i18next/dist/es/IcuTransWithoutContext.js", "../node_modules/react-i18next/dist/es/IcuTransUtils/TranslationParserError.js", "../node_modules/react-i18next/dist/es/IcuTransUtils/htmlEntityDecoder.js", "../node_modules/react-i18next/dist/es/IcuTransUtils/tokenizer.js", "../node_modules/react-i18next/dist/es/IcuTransUtils/renderTranslation.js", "../node_modules/react-i18next/dist/es/useTranslation.js", "../node_modules/react-i18next/dist/es/withTranslation.js", "../node_modules/react-i18next/dist/es/I18nextProvider.js", "../node_modules/react-i18next/dist/es/withSSR.js", "../node_modules/react-i18next/dist/es/useSSR.js", "../../static/locales/en/translation.json", "../src/globals.ts", "../src/util.ts", "../src/i18n.ts", "../src/index.tsx", "../node_modules/ky/source/errors/KyError.ts", "../node_modules/ky/source/errors/HTTPError.ts", "../node_modules/ky/source/errors/NetworkError.ts", "../node_modules/ky/source/errors/NonError.ts", "../node_modules/ky/source/errors/ForceRetryError.ts", "../node_modules/ky/source/errors/SchemaValidationError.ts", "../node_modules/ky/source/errors/TimeoutError.ts", "../node_modules/ky/source/core/constants.ts", "../node_modules/ky/source/utils/body.ts", "../node_modules/ky/source/utils/is.ts", "../node_modules/ky/source/utils/merge.ts", "../node_modules/ky/source/utils/normalize.ts", "../node_modules/ky/source/utils/timeout.ts", "../node_modules/ky/source/utils/delay.ts", "../node_modules/ky/source/utils/options.ts", "../node_modules/ky/source/utils/is-network-error.ts", "../node_modules/ky/source/utils/type-guards.ts", "../node_modules/ky/source/core/Ky.ts", "../node_modules/ky/source/index.ts", "../src/api.ts", "../src/components/AccountSettings.tsx", "../src/components/AddForm.tsx", "../src/hooks/useTagSuggestions.ts", "../src/components/TagSuggestionsDropdown.tsx", "../src/components/BList.tsx", "../node_modules/zustand/esm/vanilla.mjs", "../node_modules/zustand/esm/react.mjs", "../src/stores/bookmarksStore.ts", "../src/components/BMark.tsx", "../node_modules/dompurify/src/utils.ts", "../node_modules/dompurify/src/tags.ts", "../node_modules/dompurify/src/attrs.ts", "../node_modules/dompurify/src/regexp.ts", "../node_modules/dompurify/src/purify.ts", "../node_modules/marked/src/defaults.ts", "../node_modules/marked/src/rules.ts", "../node_modules/marked/src/helpers.ts", "../node_modules/marked/src/Tokenizer.ts", "../node_modules/marked/src/Lexer.ts", "../node_modules/marked/src/Renderer.ts", "../node_modules/marked/src/TextRenderer.ts", "../node_modules/marked/src/Parser.ts", "../node_modules/marked/src/Hooks.ts", "../node_modules/marked/src/Instance.ts", "../node_modules/marked/src/marked.ts", "../src/components/Markdown.tsx", "../src/components/BulkEdit.tsx", "../src/components/NList.tsx", "../src/components/NNote.tsx", "../src/components/TagCloud.tsx", "../src/stores/tagCloudStore.ts", "../src/types.ts"], + "sourcesContent": ["/**\n * @license React\n * react.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n maybeIterable =\n (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n maybeIterable[\"@@iterator\"];\n return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar ReactNoopUpdateQueue = {\n isMounted: function () {\n return !1;\n },\n enqueueForceUpdate: function () {},\n enqueueReplaceState: function () {},\n enqueueSetState: function () {}\n },\n assign = Object.assign,\n emptyObject = {};\nfunction Component(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n}\nComponent.prototype.isReactComponent = {};\nComponent.prototype.setState = function (partialState, callback) {\n if (\n \"object\" !== typeof partialState &&\n \"function\" !== typeof partialState &&\n null != partialState\n )\n throw Error(\n \"takes an object of state variables to update or a function which returns an object of state variables.\"\n );\n this.updater.enqueueSetState(this, partialState, callback, \"setState\");\n};\nComponent.prototype.forceUpdate = function (callback) {\n this.updater.enqueueForceUpdate(this, callback, \"forceUpdate\");\n};\nfunction ComponentDummy() {}\nComponentDummy.prototype = Component.prototype;\nfunction PureComponent(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n}\nvar pureComponentPrototype = (PureComponent.prototype = new ComponentDummy());\npureComponentPrototype.constructor = PureComponent;\nassign(pureComponentPrototype, Component.prototype);\npureComponentPrototype.isPureReactComponent = !0;\nvar isArrayImpl = Array.isArray;\nfunction noop() {}\nvar ReactSharedInternals = { H: null, A: null, T: null, S: null },\n hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction ReactElement(type, key, props) {\n var refProp = props.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== refProp ? refProp : null,\n props: props\n };\n}\nfunction cloneAndReplaceKey(oldElement, newKey) {\n return ReactElement(oldElement.type, newKey, oldElement.props);\n}\nfunction isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n}\nfunction escape(key) {\n var escaperLookup = { \"=\": \"=0\", \":\": \"=2\" };\n return (\n \"$\" +\n key.replace(/[=:]/g, function (match) {\n return escaperLookup[match];\n })\n );\n}\nvar userProvidedKeyEscapeRegex = /\\/+/g;\nfunction getElementKey(element, index) {\n return \"object\" === typeof element && null !== element && null != element.key\n ? escape(\"\" + element.key)\n : index.toString(36);\n}\nfunction resolveThenable(thenable) {\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n default:\n switch (\n (\"string\" === typeof thenable.status\n ? thenable.then(noop, noop)\n : ((thenable.status = \"pending\"),\n thenable.then(\n function (fulfilledValue) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"fulfilled\"),\n (thenable.value = fulfilledValue));\n },\n function (error) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"rejected\"), (thenable.reason = error));\n }\n )),\n thenable.status)\n ) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n }\n }\n throw thenable;\n}\nfunction mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {\n var type = typeof children;\n if (\"undefined\" === type || \"boolean\" === type) children = null;\n var invokeCallback = !1;\n if (null === children) invokeCallback = !0;\n else\n switch (type) {\n case \"bigint\":\n case \"string\":\n case \"number\":\n invokeCallback = !0;\n break;\n case \"object\":\n switch (children.$$typeof) {\n case REACT_ELEMENT_TYPE:\n case REACT_PORTAL_TYPE:\n invokeCallback = !0;\n break;\n case REACT_LAZY_TYPE:\n return (\n (invokeCallback = children._init),\n mapIntoArray(\n invokeCallback(children._payload),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n )\n );\n }\n }\n if (invokeCallback)\n return (\n (callback = callback(children)),\n (invokeCallback =\n \"\" === nameSoFar ? \".\" + getElementKey(children, 0) : nameSoFar),\n isArrayImpl(callback)\n ? ((escapedPrefix = \"\"),\n null != invokeCallback &&\n (escapedPrefix =\n invokeCallback.replace(userProvidedKeyEscapeRegex, \"$&/\") + \"/\"),\n mapIntoArray(callback, array, escapedPrefix, \"\", function (c) {\n return c;\n }))\n : null != callback &&\n (isValidElement(callback) &&\n (callback = cloneAndReplaceKey(\n callback,\n escapedPrefix +\n (null == callback.key ||\n (children && children.key === callback.key)\n ? \"\"\n : (\"\" + callback.key).replace(\n userProvidedKeyEscapeRegex,\n \"$&/\"\n ) + \"/\") +\n invokeCallback\n )),\n array.push(callback)),\n 1\n );\n invokeCallback = 0;\n var nextNamePrefix = \"\" === nameSoFar ? \".\" : nameSoFar + \":\";\n if (isArrayImpl(children))\n for (var i = 0; i < children.length; i++)\n (nameSoFar = children[i]),\n (type = nextNamePrefix + getElementKey(nameSoFar, i)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (((i = getIteratorFn(children)), \"function\" === typeof i))\n for (\n children = i.call(children), i = 0;\n !(nameSoFar = children.next()).done;\n\n )\n (nameSoFar = nameSoFar.value),\n (type = nextNamePrefix + getElementKey(nameSoFar, i++)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (\"object\" === type) {\n if (\"function\" === typeof children.then)\n return mapIntoArray(\n resolveThenable(children),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n );\n array = String(children);\n throw Error(\n \"Objects are not valid as a React child (found: \" +\n (\"[object Object]\" === array\n ? \"object with keys {\" + Object.keys(children).join(\", \") + \"}\"\n : array) +\n \"). If you meant to render a collection of children, use an array instead.\"\n );\n }\n return invokeCallback;\n}\nfunction mapChildren(children, func, context) {\n if (null == children) return children;\n var result = [],\n count = 0;\n mapIntoArray(children, result, \"\", \"\", function (child) {\n return func.call(context, child, count++);\n });\n return result;\n}\nfunction lazyInitializer(payload) {\n if (-1 === payload._status) {\n var ctor = payload._result;\n ctor = ctor();\n ctor.then(\n function (moduleObject) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 1), (payload._result = moduleObject);\n },\n function (error) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 2), (payload._result = error);\n }\n );\n -1 === payload._status && ((payload._status = 0), (payload._result = ctor));\n }\n if (1 === payload._status) return payload._result.default;\n throw payload._result;\n}\nvar reportGlobalError =\n \"function\" === typeof reportError\n ? reportError\n : function (error) {\n if (\n \"object\" === typeof window &&\n \"function\" === typeof window.ErrorEvent\n ) {\n var event = new window.ErrorEvent(\"error\", {\n bubbles: !0,\n cancelable: !0,\n message:\n \"object\" === typeof error &&\n null !== error &&\n \"string\" === typeof error.message\n ? String(error.message)\n : String(error),\n error: error\n });\n if (!window.dispatchEvent(event)) return;\n } else if (\n \"object\" === typeof process &&\n \"function\" === typeof process.emit\n ) {\n process.emit(\"uncaughtException\", error);\n return;\n }\n console.error(error);\n },\n Children = {\n map: mapChildren,\n forEach: function (children, forEachFunc, forEachContext) {\n mapChildren(\n children,\n function () {\n forEachFunc.apply(this, arguments);\n },\n forEachContext\n );\n },\n count: function (children) {\n var n = 0;\n mapChildren(children, function () {\n n++;\n });\n return n;\n },\n toArray: function (children) {\n return (\n mapChildren(children, function (child) {\n return child;\n }) || []\n );\n },\n only: function (children) {\n if (!isValidElement(children))\n throw Error(\n \"React.Children.only expected to receive a single React element child.\"\n );\n return children;\n }\n };\nexports.Activity = REACT_ACTIVITY_TYPE;\nexports.Children = Children;\nexports.Component = Component;\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.Profiler = REACT_PROFILER_TYPE;\nexports.PureComponent = PureComponent;\nexports.StrictMode = REACT_STRICT_MODE_TYPE;\nexports.Suspense = REACT_SUSPENSE_TYPE;\nexports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n ReactSharedInternals;\nexports.__COMPILER_RUNTIME = {\n __proto__: null,\n c: function (size) {\n return ReactSharedInternals.H.useMemoCache(size);\n }\n};\nexports.cache = function (fn) {\n return function () {\n return fn.apply(null, arguments);\n };\n};\nexports.cacheSignal = function () {\n return null;\n};\nexports.cloneElement = function (element, config, children) {\n if (null === element || void 0 === element)\n throw Error(\n \"The argument must be a React element, but you passed \" + element + \".\"\n );\n var props = assign({}, element.props),\n key = element.key;\n if (null != config)\n for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n !hasOwnProperty.call(config, propName) ||\n \"key\" === propName ||\n \"__self\" === propName ||\n \"__source\" === propName ||\n (\"ref\" === propName && void 0 === config.ref) ||\n (props[propName] = config[propName]);\n var propName = arguments.length - 2;\n if (1 === propName) props.children = children;\n else if (1 < propName) {\n for (var childArray = Array(propName), i = 0; i < propName; i++)\n childArray[i] = arguments[i + 2];\n props.children = childArray;\n }\n return ReactElement(element.type, key, props);\n};\nexports.createContext = function (defaultValue) {\n defaultValue = {\n $$typeof: REACT_CONTEXT_TYPE,\n _currentValue: defaultValue,\n _currentValue2: defaultValue,\n _threadCount: 0,\n Provider: null,\n Consumer: null\n };\n defaultValue.Provider = defaultValue;\n defaultValue.Consumer = {\n $$typeof: REACT_CONSUMER_TYPE,\n _context: defaultValue\n };\n return defaultValue;\n};\nexports.createElement = function (type, config, children) {\n var propName,\n props = {},\n key = null;\n if (null != config)\n for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n hasOwnProperty.call(config, propName) &&\n \"key\" !== propName &&\n \"__self\" !== propName &&\n \"__source\" !== propName &&\n (props[propName] = config[propName]);\n var childrenLength = arguments.length - 2;\n if (1 === childrenLength) props.children = children;\n else if (1 < childrenLength) {\n for (var childArray = Array(childrenLength), i = 0; i < childrenLength; i++)\n childArray[i] = arguments[i + 2];\n props.children = childArray;\n }\n if (type && type.defaultProps)\n for (propName in ((childrenLength = type.defaultProps), childrenLength))\n void 0 === props[propName] &&\n (props[propName] = childrenLength[propName]);\n return ReactElement(type, key, props);\n};\nexports.createRef = function () {\n return { current: null };\n};\nexports.forwardRef = function (render) {\n return { $$typeof: REACT_FORWARD_REF_TYPE, render: render };\n};\nexports.isValidElement = isValidElement;\nexports.lazy = function (ctor) {\n return {\n $$typeof: REACT_LAZY_TYPE,\n _payload: { _status: -1, _result: ctor },\n _init: lazyInitializer\n };\n};\nexports.memo = function (type, compare) {\n return {\n $$typeof: REACT_MEMO_TYPE,\n type: type,\n compare: void 0 === compare ? null : compare\n };\n};\nexports.startTransition = function (scope) {\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n ReactSharedInternals.T = currentTransition;\n try {\n var returnValue = scope(),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n \"object\" === typeof returnValue &&\n null !== returnValue &&\n \"function\" === typeof returnValue.then &&\n returnValue.then(noop, reportGlobalError);\n } catch (error) {\n reportGlobalError(error);\n } finally {\n null !== prevTransition &&\n null !== currentTransition.types &&\n (prevTransition.types = currentTransition.types),\n (ReactSharedInternals.T = prevTransition);\n }\n};\nexports.unstable_useCacheRefresh = function () {\n return ReactSharedInternals.H.useCacheRefresh();\n};\nexports.use = function (usable) {\n return ReactSharedInternals.H.use(usable);\n};\nexports.useActionState = function (action, initialState, permalink) {\n return ReactSharedInternals.H.useActionState(action, initialState, permalink);\n};\nexports.useCallback = function (callback, deps) {\n return ReactSharedInternals.H.useCallback(callback, deps);\n};\nexports.useContext = function (Context) {\n return ReactSharedInternals.H.useContext(Context);\n};\nexports.useDebugValue = function () {};\nexports.useDeferredValue = function (value, initialValue) {\n return ReactSharedInternals.H.useDeferredValue(value, initialValue);\n};\nexports.useEffect = function (create, deps) {\n return ReactSharedInternals.H.useEffect(create, deps);\n};\nexports.useEffectEvent = function (callback) {\n return ReactSharedInternals.H.useEffectEvent(callback);\n};\nexports.useId = function () {\n return ReactSharedInternals.H.useId();\n};\nexports.useImperativeHandle = function (ref, create, deps) {\n return ReactSharedInternals.H.useImperativeHandle(ref, create, deps);\n};\nexports.useInsertionEffect = function (create, deps) {\n return ReactSharedInternals.H.useInsertionEffect(create, deps);\n};\nexports.useLayoutEffect = function (create, deps) {\n return ReactSharedInternals.H.useLayoutEffect(create, deps);\n};\nexports.useMemo = function (create, deps) {\n return ReactSharedInternals.H.useMemo(create, deps);\n};\nexports.useOptimistic = function (passthrough, reducer) {\n return ReactSharedInternals.H.useOptimistic(passthrough, reducer);\n};\nexports.useReducer = function (reducer, initialArg, init) {\n return ReactSharedInternals.H.useReducer(reducer, initialArg, init);\n};\nexports.useRef = function (initialValue) {\n return ReactSharedInternals.H.useRef(initialValue);\n};\nexports.useState = function (initialState) {\n return ReactSharedInternals.H.useState(initialState);\n};\nexports.useSyncExternalStore = function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n) {\n return ReactSharedInternals.H.useSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n};\nexports.useTransition = function () {\n return ReactSharedInternals.H.useTransition();\n};\nexports.version = \"19.2.6\";\n", "'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n", "/**\n * This file automatically generated from `pre-publish.js`.\n * Do not manually edit.\n */\n\nmodule.exports = {\n \"area\": true,\n \"base\": true,\n \"br\": true,\n \"col\": true,\n \"embed\": true,\n \"hr\": true,\n \"img\": true,\n \"input\": true,\n \"link\": true,\n \"meta\": true,\n \"param\": true,\n \"source\": true,\n \"track\": true,\n \"wbr\": true\n};\n", "/**\n * @license React\n * use-sync-external-store-shim.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue;\nfunction useSyncExternalStore$2(subscribe, getSnapshot) {\n var value = getSnapshot(),\n _useState = useState({ inst: { value: value, getSnapshot: getSnapshot } }),\n inst = _useState[0].inst,\n forceUpdate = _useState[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n}\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n}\nfunction useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n}\nvar shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\nexports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n", "'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n", "/**\n * @license React\n * scheduler.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nfunction push(heap, node) {\n var index = heap.length;\n heap.push(node);\n a: for (; 0 < index; ) {\n var parentIndex = (index - 1) >>> 1,\n parent = heap[parentIndex];\n if (0 < compare(parent, node))\n (heap[parentIndex] = node), (heap[index] = parent), (index = parentIndex);\n else break a;\n }\n}\nfunction peek(heap) {\n return 0 === heap.length ? null : heap[0];\n}\nfunction pop(heap) {\n if (0 === heap.length) return null;\n var first = heap[0],\n last = heap.pop();\n if (last !== first) {\n heap[0] = last;\n a: for (\n var index = 0, length = heap.length, halfLength = length >>> 1;\n index < halfLength;\n\n ) {\n var leftIndex = 2 * (index + 1) - 1,\n left = heap[leftIndex],\n rightIndex = leftIndex + 1,\n right = heap[rightIndex];\n if (0 > compare(left, last))\n rightIndex < length && 0 > compare(right, left)\n ? ((heap[index] = right),\n (heap[rightIndex] = last),\n (index = rightIndex))\n : ((heap[index] = left),\n (heap[leftIndex] = last),\n (index = leftIndex));\n else if (rightIndex < length && 0 > compare(right, last))\n (heap[index] = right), (heap[rightIndex] = last), (index = rightIndex);\n else break a;\n }\n }\n return first;\n}\nfunction compare(a, b) {\n var diff = a.sortIndex - b.sortIndex;\n return 0 !== diff ? diff : a.id - b.id;\n}\nexports.unstable_now = void 0;\nif (\"object\" === typeof performance && \"function\" === typeof performance.now) {\n var localPerformance = performance;\n exports.unstable_now = function () {\n return localPerformance.now();\n };\n} else {\n var localDate = Date,\n initialTime = localDate.now();\n exports.unstable_now = function () {\n return localDate.now() - initialTime;\n };\n}\nvar taskQueue = [],\n timerQueue = [],\n taskIdCounter = 1,\n currentTask = null,\n currentPriorityLevel = 3,\n isPerformingWork = !1,\n isHostCallbackScheduled = !1,\n isHostTimeoutScheduled = !1,\n needsPaint = !1,\n localSetTimeout = \"function\" === typeof setTimeout ? setTimeout : null,\n localClearTimeout = \"function\" === typeof clearTimeout ? clearTimeout : null,\n localSetImmediate = \"undefined\" !== typeof setImmediate ? setImmediate : null;\nfunction advanceTimers(currentTime) {\n for (var timer = peek(timerQueue); null !== timer; ) {\n if (null === timer.callback) pop(timerQueue);\n else if (timer.startTime <= currentTime)\n pop(timerQueue),\n (timer.sortIndex = timer.expirationTime),\n push(taskQueue, timer);\n else break;\n timer = peek(timerQueue);\n }\n}\nfunction handleTimeout(currentTime) {\n isHostTimeoutScheduled = !1;\n advanceTimers(currentTime);\n if (!isHostCallbackScheduled)\n if (null !== peek(taskQueue))\n (isHostCallbackScheduled = !0),\n isMessageLoopRunning ||\n ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline());\n else {\n var firstTimer = peek(timerQueue);\n null !== firstTimer &&\n requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);\n }\n}\nvar isMessageLoopRunning = !1,\n taskTimeoutID = -1,\n frameInterval = 5,\n startTime = -1;\nfunction shouldYieldToHost() {\n return needsPaint\n ? !0\n : exports.unstable_now() - startTime < frameInterval\n ? !1\n : !0;\n}\nfunction performWorkUntilDeadline() {\n needsPaint = !1;\n if (isMessageLoopRunning) {\n var currentTime = exports.unstable_now();\n startTime = currentTime;\n var hasMoreWork = !0;\n try {\n a: {\n isHostCallbackScheduled = !1;\n isHostTimeoutScheduled &&\n ((isHostTimeoutScheduled = !1),\n localClearTimeout(taskTimeoutID),\n (taskTimeoutID = -1));\n isPerformingWork = !0;\n var previousPriorityLevel = currentPriorityLevel;\n try {\n b: {\n advanceTimers(currentTime);\n for (\n currentTask = peek(taskQueue);\n null !== currentTask &&\n !(\n currentTask.expirationTime > currentTime && shouldYieldToHost()\n );\n\n ) {\n var callback = currentTask.callback;\n if (\"function\" === typeof callback) {\n currentTask.callback = null;\n currentPriorityLevel = currentTask.priorityLevel;\n var continuationCallback = callback(\n currentTask.expirationTime <= currentTime\n );\n currentTime = exports.unstable_now();\n if (\"function\" === typeof continuationCallback) {\n currentTask.callback = continuationCallback;\n advanceTimers(currentTime);\n hasMoreWork = !0;\n break b;\n }\n currentTask === peek(taskQueue) && pop(taskQueue);\n advanceTimers(currentTime);\n } else pop(taskQueue);\n currentTask = peek(taskQueue);\n }\n if (null !== currentTask) hasMoreWork = !0;\n else {\n var firstTimer = peek(timerQueue);\n null !== firstTimer &&\n requestHostTimeout(\n handleTimeout,\n firstTimer.startTime - currentTime\n );\n hasMoreWork = !1;\n }\n }\n break a;\n } finally {\n (currentTask = null),\n (currentPriorityLevel = previousPriorityLevel),\n (isPerformingWork = !1);\n }\n hasMoreWork = void 0;\n }\n } finally {\n hasMoreWork\n ? schedulePerformWorkUntilDeadline()\n : (isMessageLoopRunning = !1);\n }\n }\n}\nvar schedulePerformWorkUntilDeadline;\nif (\"function\" === typeof localSetImmediate)\n schedulePerformWorkUntilDeadline = function () {\n localSetImmediate(performWorkUntilDeadline);\n };\nelse if (\"undefined\" !== typeof MessageChannel) {\n var channel = new MessageChannel(),\n port = channel.port2;\n channel.port1.onmessage = performWorkUntilDeadline;\n schedulePerformWorkUntilDeadline = function () {\n port.postMessage(null);\n };\n} else\n schedulePerformWorkUntilDeadline = function () {\n localSetTimeout(performWorkUntilDeadline, 0);\n };\nfunction requestHostTimeout(callback, ms) {\n taskTimeoutID = localSetTimeout(function () {\n callback(exports.unstable_now());\n }, ms);\n}\nexports.unstable_IdlePriority = 5;\nexports.unstable_ImmediatePriority = 1;\nexports.unstable_LowPriority = 4;\nexports.unstable_NormalPriority = 3;\nexports.unstable_Profiling = null;\nexports.unstable_UserBlockingPriority = 2;\nexports.unstable_cancelCallback = function (task) {\n task.callback = null;\n};\nexports.unstable_forceFrameRate = function (fps) {\n 0 > fps || 125 < fps\n ? console.error(\n \"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"\n )\n : (frameInterval = 0 < fps ? Math.floor(1e3 / fps) : 5);\n};\nexports.unstable_getCurrentPriorityLevel = function () {\n return currentPriorityLevel;\n};\nexports.unstable_next = function (eventHandler) {\n switch (currentPriorityLevel) {\n case 1:\n case 2:\n case 3:\n var priorityLevel = 3;\n break;\n default:\n priorityLevel = currentPriorityLevel;\n }\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = priorityLevel;\n try {\n return eventHandler();\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n};\nexports.unstable_requestPaint = function () {\n needsPaint = !0;\n};\nexports.unstable_runWithPriority = function (priorityLevel, eventHandler) {\n switch (priorityLevel) {\n case 1:\n case 2:\n case 3:\n case 4:\n case 5:\n break;\n default:\n priorityLevel = 3;\n }\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = priorityLevel;\n try {\n return eventHandler();\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n};\nexports.unstable_scheduleCallback = function (\n priorityLevel,\n callback,\n options\n) {\n var currentTime = exports.unstable_now();\n \"object\" === typeof options && null !== options\n ? ((options = options.delay),\n (options =\n \"number\" === typeof options && 0 < options\n ? currentTime + options\n : currentTime))\n : (options = currentTime);\n switch (priorityLevel) {\n case 1:\n var timeout = -1;\n break;\n case 2:\n timeout = 250;\n break;\n case 5:\n timeout = 1073741823;\n break;\n case 4:\n timeout = 1e4;\n break;\n default:\n timeout = 5e3;\n }\n timeout = options + timeout;\n priorityLevel = {\n id: taskIdCounter++,\n callback: callback,\n priorityLevel: priorityLevel,\n startTime: options,\n expirationTime: timeout,\n sortIndex: -1\n };\n options > currentTime\n ? ((priorityLevel.sortIndex = options),\n push(timerQueue, priorityLevel),\n null === peek(taskQueue) &&\n priorityLevel === peek(timerQueue) &&\n (isHostTimeoutScheduled\n ? (localClearTimeout(taskTimeoutID), (taskTimeoutID = -1))\n : (isHostTimeoutScheduled = !0),\n requestHostTimeout(handleTimeout, options - currentTime)))\n : ((priorityLevel.sortIndex = timeout),\n push(taskQueue, priorityLevel),\n isHostCallbackScheduled ||\n isPerformingWork ||\n ((isHostCallbackScheduled = !0),\n isMessageLoopRunning ||\n ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline())));\n return priorityLevel;\n};\nexports.unstable_shouldYield = shouldYieldToHost;\nexports.unstable_wrapCallback = function (callback) {\n var parentPriorityLevel = currentPriorityLevel;\n return function () {\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = parentPriorityLevel;\n try {\n return callback.apply(this, arguments);\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n };\n};\n", "'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n", "/**\n * @license React\n * react-dom.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction formatProdErrorMessage(code) {\n var url = \"https://react.dev/errors/\" + code;\n if (1 < arguments.length) {\n url += \"?args[]=\" + encodeURIComponent(arguments[1]);\n for (var i = 2; i < arguments.length; i++)\n url += \"&args[]=\" + encodeURIComponent(arguments[i]);\n }\n return (\n \"Minified React error #\" +\n code +\n \"; visit \" +\n url +\n \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"\n );\n}\nfunction noop() {}\nvar Internals = {\n d: {\n f: noop,\n r: function () {\n throw Error(formatProdErrorMessage(522));\n },\n D: noop,\n C: noop,\n L: noop,\n m: noop,\n X: noop,\n S: noop,\n M: noop\n },\n p: 0,\n findDOMNode: null\n },\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\");\nfunction createPortal$1(children, containerInfo, implementation) {\n var key =\n 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null;\n return {\n $$typeof: REACT_PORTAL_TYPE,\n key: null == key ? null : \"\" + key,\n children: children,\n containerInfo: containerInfo,\n implementation: implementation\n };\n}\nvar ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;\nfunction getCrossOriginStringAs(as, input) {\n if (\"font\" === as) return \"\";\n if (\"string\" === typeof input)\n return \"use-credentials\" === input ? input : \"\";\n}\nexports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n Internals;\nexports.createPortal = function (children, container) {\n var key =\n 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null;\n if (\n !container ||\n (1 !== container.nodeType &&\n 9 !== container.nodeType &&\n 11 !== container.nodeType)\n )\n throw Error(formatProdErrorMessage(299));\n return createPortal$1(children, container, null, key);\n};\nexports.flushSync = function (fn) {\n var previousTransition = ReactSharedInternals.T,\n previousUpdatePriority = Internals.p;\n try {\n if (((ReactSharedInternals.T = null), (Internals.p = 2), fn)) return fn();\n } finally {\n (ReactSharedInternals.T = previousTransition),\n (Internals.p = previousUpdatePriority),\n Internals.d.f();\n }\n};\nexports.preconnect = function (href, options) {\n \"string\" === typeof href &&\n (options\n ? ((options = options.crossOrigin),\n (options =\n \"string\" === typeof options\n ? \"use-credentials\" === options\n ? options\n : \"\"\n : void 0))\n : (options = null),\n Internals.d.C(href, options));\n};\nexports.prefetchDNS = function (href) {\n \"string\" === typeof href && Internals.d.D(href);\n};\nexports.preinit = function (href, options) {\n if (\"string\" === typeof href && options && \"string\" === typeof options.as) {\n var as = options.as,\n crossOrigin = getCrossOriginStringAs(as, options.crossOrigin),\n integrity =\n \"string\" === typeof options.integrity ? options.integrity : void 0,\n fetchPriority =\n \"string\" === typeof options.fetchPriority\n ? options.fetchPriority\n : void 0;\n \"style\" === as\n ? Internals.d.S(\n href,\n \"string\" === typeof options.precedence ? options.precedence : void 0,\n {\n crossOrigin: crossOrigin,\n integrity: integrity,\n fetchPriority: fetchPriority\n }\n )\n : \"script\" === as &&\n Internals.d.X(href, {\n crossOrigin: crossOrigin,\n integrity: integrity,\n fetchPriority: fetchPriority,\n nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n });\n }\n};\nexports.preinitModule = function (href, options) {\n if (\"string\" === typeof href)\n if (\"object\" === typeof options && null !== options) {\n if (null == options.as || \"script\" === options.as) {\n var crossOrigin = getCrossOriginStringAs(\n options.as,\n options.crossOrigin\n );\n Internals.d.M(href, {\n crossOrigin: crossOrigin,\n integrity:\n \"string\" === typeof options.integrity ? options.integrity : void 0,\n nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n });\n }\n } else null == options && Internals.d.M(href);\n};\nexports.preload = function (href, options) {\n if (\n \"string\" === typeof href &&\n \"object\" === typeof options &&\n null !== options &&\n \"string\" === typeof options.as\n ) {\n var as = options.as,\n crossOrigin = getCrossOriginStringAs(as, options.crossOrigin);\n Internals.d.L(href, as, {\n crossOrigin: crossOrigin,\n integrity:\n \"string\" === typeof options.integrity ? options.integrity : void 0,\n nonce: \"string\" === typeof options.nonce ? options.nonce : void 0,\n type: \"string\" === typeof options.type ? options.type : void 0,\n fetchPriority:\n \"string\" === typeof options.fetchPriority\n ? options.fetchPriority\n : void 0,\n referrerPolicy:\n \"string\" === typeof options.referrerPolicy\n ? options.referrerPolicy\n : void 0,\n imageSrcSet:\n \"string\" === typeof options.imageSrcSet ? options.imageSrcSet : void 0,\n imageSizes:\n \"string\" === typeof options.imageSizes ? options.imageSizes : void 0,\n media: \"string\" === typeof options.media ? options.media : void 0\n });\n }\n};\nexports.preloadModule = function (href, options) {\n if (\"string\" === typeof href)\n if (options) {\n var crossOrigin = getCrossOriginStringAs(options.as, options.crossOrigin);\n Internals.d.m(href, {\n as:\n \"string\" === typeof options.as && \"script\" !== options.as\n ? options.as\n : void 0,\n crossOrigin: crossOrigin,\n integrity:\n \"string\" === typeof options.integrity ? options.integrity : void 0\n });\n } else Internals.d.m(href);\n};\nexports.requestFormReset = function (form) {\n Internals.d.r(form);\n};\nexports.unstable_batchedUpdates = function (fn, a) {\n return fn(a);\n};\nexports.useFormState = function (action, initialState, permalink) {\n return ReactSharedInternals.H.useFormState(action, initialState, permalink);\n};\nexports.useFormStatus = function () {\n return ReactSharedInternals.H.useHostTransitionStatus();\n};\nexports.version = \"19.2.6\";\n", "'use strict';\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (process.env.NODE_ENV === 'production') {\n // DCE check should happen before ReactDOM bundle executes so that\n // DevTools can report bad minification during injection.\n checkDCE();\n module.exports = require('./cjs/react-dom.production.js');\n} else {\n module.exports = require('./cjs/react-dom.development.js');\n}\n", "/**\n * @license React\n * react-dom-client.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n\"use strict\";\nvar Scheduler = require(\"scheduler\"),\n React = require(\"react\"),\n ReactDOM = require(\"react-dom\");\nfunction formatProdErrorMessage(code) {\n var url = \"https://react.dev/errors/\" + code;\n if (1 < arguments.length) {\n url += \"?args[]=\" + encodeURIComponent(arguments[1]);\n for (var i = 2; i < arguments.length; i++)\n url += \"&args[]=\" + encodeURIComponent(arguments[i]);\n }\n return (\n \"Minified React error #\" +\n code +\n \"; visit \" +\n url +\n \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"\n );\n}\nfunction isValidContainer(node) {\n return !(\n !node ||\n (1 !== node.nodeType && 9 !== node.nodeType && 11 !== node.nodeType)\n );\n}\nfunction getNearestMountedFiber(fiber) {\n var node = fiber,\n nearestMounted = fiber;\n if (fiber.alternate) for (; node.return; ) node = node.return;\n else {\n fiber = node;\n do\n (node = fiber),\n 0 !== (node.flags & 4098) && (nearestMounted = node.return),\n (fiber = node.return);\n while (fiber);\n }\n return 3 === node.tag ? nearestMounted : null;\n}\nfunction getSuspenseInstanceFromFiber(fiber) {\n if (13 === fiber.tag) {\n var suspenseState = fiber.memoizedState;\n null === suspenseState &&\n ((fiber = fiber.alternate),\n null !== fiber && (suspenseState = fiber.memoizedState));\n if (null !== suspenseState) return suspenseState.dehydrated;\n }\n return null;\n}\nfunction getActivityInstanceFromFiber(fiber) {\n if (31 === fiber.tag) {\n var activityState = fiber.memoizedState;\n null === activityState &&\n ((fiber = fiber.alternate),\n null !== fiber && (activityState = fiber.memoizedState));\n if (null !== activityState) return activityState.dehydrated;\n }\n return null;\n}\nfunction assertIsMounted(fiber) {\n if (getNearestMountedFiber(fiber) !== fiber)\n throw Error(formatProdErrorMessage(188));\n}\nfunction findCurrentFiberUsingSlowPath(fiber) {\n var alternate = fiber.alternate;\n if (!alternate) {\n alternate = getNearestMountedFiber(fiber);\n if (null === alternate) throw Error(formatProdErrorMessage(188));\n return alternate !== fiber ? null : fiber;\n }\n for (var a = fiber, b = alternate; ; ) {\n var parentA = a.return;\n if (null === parentA) break;\n var parentB = parentA.alternate;\n if (null === parentB) {\n b = parentA.return;\n if (null !== b) {\n a = b;\n continue;\n }\n break;\n }\n if (parentA.child === parentB.child) {\n for (parentB = parentA.child; parentB; ) {\n if (parentB === a) return assertIsMounted(parentA), fiber;\n if (parentB === b) return assertIsMounted(parentA), alternate;\n parentB = parentB.sibling;\n }\n throw Error(formatProdErrorMessage(188));\n }\n if (a.return !== b.return) (a = parentA), (b = parentB);\n else {\n for (var didFindChild = !1, child$0 = parentA.child; child$0; ) {\n if (child$0 === a) {\n didFindChild = !0;\n a = parentA;\n b = parentB;\n break;\n }\n if (child$0 === b) {\n didFindChild = !0;\n b = parentA;\n a = parentB;\n break;\n }\n child$0 = child$0.sibling;\n }\n if (!didFindChild) {\n for (child$0 = parentB.child; child$0; ) {\n if (child$0 === a) {\n didFindChild = !0;\n a = parentB;\n b = parentA;\n break;\n }\n if (child$0 === b) {\n didFindChild = !0;\n b = parentB;\n a = parentA;\n break;\n }\n child$0 = child$0.sibling;\n }\n if (!didFindChild) throw Error(formatProdErrorMessage(189));\n }\n }\n if (a.alternate !== b) throw Error(formatProdErrorMessage(190));\n }\n if (3 !== a.tag) throw Error(formatProdErrorMessage(188));\n return a.stateNode.current === a ? fiber : alternate;\n}\nfunction findCurrentHostFiberImpl(node) {\n var tag = node.tag;\n if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return node;\n for (node = node.child; null !== node; ) {\n tag = findCurrentHostFiberImpl(node);\n if (null !== tag) return tag;\n node = node.sibling;\n }\n return null;\n}\nvar assign = Object.assign,\n REACT_LEGACY_ELEMENT_TYPE = Symbol.for(\"react.element\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\nSymbol.for(\"react.scope\");\nvar REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\");\nSymbol.for(\"react.legacy_hidden\");\nSymbol.for(\"react.tracing_marker\");\nvar REACT_MEMO_CACHE_SENTINEL = Symbol.for(\"react.memo_cache_sentinel\");\nSymbol.for(\"react.view_transition\");\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n maybeIterable =\n (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n maybeIterable[\"@@iterator\"];\n return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\");\nfunction getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (type.$$typeof) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return type.displayName || \"Context\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n}\nvar isArrayImpl = Array.isArray,\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n ReactDOMSharedInternals =\n ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n sharedNotPendingObject = {\n pending: !1,\n data: null,\n method: null,\n action: null\n },\n valueStack = [],\n index = -1;\nfunction createCursor(defaultValue) {\n return { current: defaultValue };\n}\nfunction pop(cursor) {\n 0 > index ||\n ((cursor.current = valueStack[index]), (valueStack[index] = null), index--);\n}\nfunction push(cursor, value) {\n index++;\n valueStack[index] = cursor.current;\n cursor.current = value;\n}\nvar contextStackCursor = createCursor(null),\n contextFiberStackCursor = createCursor(null),\n rootInstanceStackCursor = createCursor(null),\n hostTransitionProviderCursor = createCursor(null);\nfunction pushHostContainer(fiber, nextRootInstance) {\n push(rootInstanceStackCursor, nextRootInstance);\n push(contextFiberStackCursor, fiber);\n push(contextStackCursor, null);\n switch (nextRootInstance.nodeType) {\n case 9:\n case 11:\n fiber = (fiber = nextRootInstance.documentElement)\n ? (fiber = fiber.namespaceURI)\n ? getOwnHostContext(fiber)\n : 0\n : 0;\n break;\n default:\n if (\n ((fiber = nextRootInstance.tagName),\n (nextRootInstance = nextRootInstance.namespaceURI))\n )\n (nextRootInstance = getOwnHostContext(nextRootInstance)),\n (fiber = getChildHostContextProd(nextRootInstance, fiber));\n else\n switch (fiber) {\n case \"svg\":\n fiber = 1;\n break;\n case \"math\":\n fiber = 2;\n break;\n default:\n fiber = 0;\n }\n }\n pop(contextStackCursor);\n push(contextStackCursor, fiber);\n}\nfunction popHostContainer() {\n pop(contextStackCursor);\n pop(contextFiberStackCursor);\n pop(rootInstanceStackCursor);\n}\nfunction pushHostContext(fiber) {\n null !== fiber.memoizedState && push(hostTransitionProviderCursor, fiber);\n var context = contextStackCursor.current;\n var JSCompiler_inline_result = getChildHostContextProd(context, fiber.type);\n context !== JSCompiler_inline_result &&\n (push(contextFiberStackCursor, fiber),\n push(contextStackCursor, JSCompiler_inline_result));\n}\nfunction popHostContext(fiber) {\n contextFiberStackCursor.current === fiber &&\n (pop(contextStackCursor), pop(contextFiberStackCursor));\n hostTransitionProviderCursor.current === fiber &&\n (pop(hostTransitionProviderCursor),\n (HostTransitionContext._currentValue = sharedNotPendingObject));\n}\nvar prefix, suffix;\nfunction describeBuiltInComponentFrame(name) {\n if (void 0 === prefix)\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = (match && match[1]) || \"\";\n suffix =\n -1 < x.stack.indexOf(\"\\n at\")\n ? \" (<anonymous>)\"\n : -1 < x.stack.indexOf(\"@\")\n ? \"@unknown:0:0\"\n : \"\";\n }\n return \"\\n\" + prefix + name + suffix;\n}\nvar reentry = !1;\nfunction describeNativeComponentFrame(fn, construct) {\n if (!fn || reentry) return \"\";\n reentry = !0;\n var previousPrepareStackTrace = Error.prepareStackTrace;\n Error.prepareStackTrace = void 0;\n try {\n var RunInRootFrame = {\n DetermineComponentFrameRoot: function () {\n try {\n if (construct) {\n var Fake = function () {\n throw Error();\n };\n Object.defineProperty(Fake.prototype, \"props\", {\n set: function () {\n throw Error();\n }\n });\n if (\"object\" === typeof Reflect && Reflect.construct) {\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n var control = x;\n }\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x$1) {\n control = x$1;\n }\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x$2) {\n control = x$2;\n }\n (Fake = fn()) &&\n \"function\" === typeof Fake.catch &&\n Fake.catch(function () {});\n }\n } catch (sample) {\n if (sample && control && \"string\" === typeof sample.stack)\n return [sample.stack, control.stack];\n }\n return [null, null];\n }\n };\n RunInRootFrame.DetermineComponentFrameRoot.displayName =\n \"DetermineComponentFrameRoot\";\n var namePropDescriptor = Object.getOwnPropertyDescriptor(\n RunInRootFrame.DetermineComponentFrameRoot,\n \"name\"\n );\n namePropDescriptor &&\n namePropDescriptor.configurable &&\n Object.defineProperty(\n RunInRootFrame.DetermineComponentFrameRoot,\n \"name\",\n { value: \"DetermineComponentFrameRoot\" }\n );\n var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),\n sampleStack = _RunInRootFrame$Deter[0],\n controlStack = _RunInRootFrame$Deter[1];\n if (sampleStack && controlStack) {\n var sampleLines = sampleStack.split(\"\\n\"),\n controlLines = controlStack.split(\"\\n\");\n for (\n namePropDescriptor = RunInRootFrame = 0;\n RunInRootFrame < sampleLines.length &&\n !sampleLines[RunInRootFrame].includes(\"DetermineComponentFrameRoot\");\n\n )\n RunInRootFrame++;\n for (\n ;\n namePropDescriptor < controlLines.length &&\n !controlLines[namePropDescriptor].includes(\n \"DetermineComponentFrameRoot\"\n );\n\n )\n namePropDescriptor++;\n if (\n RunInRootFrame === sampleLines.length ||\n namePropDescriptor === controlLines.length\n )\n for (\n RunInRootFrame = sampleLines.length - 1,\n namePropDescriptor = controlLines.length - 1;\n 1 <= RunInRootFrame &&\n 0 <= namePropDescriptor &&\n sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor];\n\n )\n namePropDescriptor--;\n for (\n ;\n 1 <= RunInRootFrame && 0 <= namePropDescriptor;\n RunInRootFrame--, namePropDescriptor--\n )\n if (sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor]) {\n if (1 !== RunInRootFrame || 1 !== namePropDescriptor) {\n do\n if (\n (RunInRootFrame--,\n namePropDescriptor--,\n 0 > namePropDescriptor ||\n sampleLines[RunInRootFrame] !==\n controlLines[namePropDescriptor])\n ) {\n var frame =\n \"\\n\" +\n sampleLines[RunInRootFrame].replace(\" at new \", \" at \");\n fn.displayName &&\n frame.includes(\"<anonymous>\") &&\n (frame = frame.replace(\"<anonymous>\", fn.displayName));\n return frame;\n }\n while (1 <= RunInRootFrame && 0 <= namePropDescriptor);\n }\n break;\n }\n }\n } finally {\n (reentry = !1), (Error.prepareStackTrace = previousPrepareStackTrace);\n }\n return (previousPrepareStackTrace = fn ? fn.displayName || fn.name : \"\")\n ? describeBuiltInComponentFrame(previousPrepareStackTrace)\n : \"\";\n}\nfunction describeFiber(fiber, childFiber) {\n switch (fiber.tag) {\n case 26:\n case 27:\n case 5:\n return describeBuiltInComponentFrame(fiber.type);\n case 16:\n return describeBuiltInComponentFrame(\"Lazy\");\n case 13:\n return fiber.child !== childFiber && null !== childFiber\n ? describeBuiltInComponentFrame(\"Suspense Fallback\")\n : describeBuiltInComponentFrame(\"Suspense\");\n case 19:\n return describeBuiltInComponentFrame(\"SuspenseList\");\n case 0:\n case 15:\n return describeNativeComponentFrame(fiber.type, !1);\n case 11:\n return describeNativeComponentFrame(fiber.type.render, !1);\n case 1:\n return describeNativeComponentFrame(fiber.type, !0);\n case 31:\n return describeBuiltInComponentFrame(\"Activity\");\n default:\n return \"\";\n }\n}\nfunction getStackByFiberInDevAndProd(workInProgress) {\n try {\n var info = \"\",\n previous = null;\n do\n (info += describeFiber(workInProgress, previous)),\n (previous = workInProgress),\n (workInProgress = workInProgress.return);\n while (workInProgress);\n return info;\n } catch (x) {\n return \"\\nError generating stack: \" + x.message + \"\\n\" + x.stack;\n }\n}\nvar hasOwnProperty = Object.prototype.hasOwnProperty,\n scheduleCallback$3 = Scheduler.unstable_scheduleCallback,\n cancelCallback$1 = Scheduler.unstable_cancelCallback,\n shouldYield = Scheduler.unstable_shouldYield,\n requestPaint = Scheduler.unstable_requestPaint,\n now = Scheduler.unstable_now,\n getCurrentPriorityLevel = Scheduler.unstable_getCurrentPriorityLevel,\n ImmediatePriority = Scheduler.unstable_ImmediatePriority,\n UserBlockingPriority = Scheduler.unstable_UserBlockingPriority,\n NormalPriority$1 = Scheduler.unstable_NormalPriority,\n LowPriority = Scheduler.unstable_LowPriority,\n IdlePriority = Scheduler.unstable_IdlePriority,\n log$1 = Scheduler.log,\n unstable_setDisableYieldValue = Scheduler.unstable_setDisableYieldValue,\n rendererID = null,\n injectedHook = null;\nfunction setIsStrictModeForDevtools(newIsStrictMode) {\n \"function\" === typeof log$1 && unstable_setDisableYieldValue(newIsStrictMode);\n if (injectedHook && \"function\" === typeof injectedHook.setStrictMode)\n try {\n injectedHook.setStrictMode(rendererID, newIsStrictMode);\n } catch (err) {}\n}\nvar clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,\n log = Math.log,\n LN2 = Math.LN2;\nfunction clz32Fallback(x) {\n x >>>= 0;\n return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0;\n}\nvar nextTransitionUpdateLane = 256,\n nextTransitionDeferredLane = 262144,\n nextRetryLane = 4194304;\nfunction getHighestPriorityLanes(lanes) {\n var pendingSyncLanes = lanes & 42;\n if (0 !== pendingSyncLanes) return pendingSyncLanes;\n switch (lanes & -lanes) {\n case 1:\n return 1;\n case 2:\n return 2;\n case 4:\n return 4;\n case 8:\n return 8;\n case 16:\n return 16;\n case 32:\n return 32;\n case 64:\n return 64;\n case 128:\n return 128;\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n return lanes & 261888;\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n return lanes & 3932160;\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n return lanes & 62914560;\n case 67108864:\n return 67108864;\n case 134217728:\n return 134217728;\n case 268435456:\n return 268435456;\n case 536870912:\n return 536870912;\n case 1073741824:\n return 0;\n default:\n return lanes;\n }\n}\nfunction getNextLanes(root, wipLanes, rootHasPendingCommit) {\n var pendingLanes = root.pendingLanes;\n if (0 === pendingLanes) return 0;\n var nextLanes = 0,\n suspendedLanes = root.suspendedLanes,\n pingedLanes = root.pingedLanes;\n root = root.warmLanes;\n var nonIdlePendingLanes = pendingLanes & 134217727;\n 0 !== nonIdlePendingLanes\n ? ((pendingLanes = nonIdlePendingLanes & ~suspendedLanes),\n 0 !== pendingLanes\n ? (nextLanes = getHighestPriorityLanes(pendingLanes))\n : ((pingedLanes &= nonIdlePendingLanes),\n 0 !== pingedLanes\n ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n : rootHasPendingCommit ||\n ((rootHasPendingCommit = nonIdlePendingLanes & ~root),\n 0 !== rootHasPendingCommit &&\n (nextLanes = getHighestPriorityLanes(rootHasPendingCommit)))))\n : ((nonIdlePendingLanes = pendingLanes & ~suspendedLanes),\n 0 !== nonIdlePendingLanes\n ? (nextLanes = getHighestPriorityLanes(nonIdlePendingLanes))\n : 0 !== pingedLanes\n ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n : rootHasPendingCommit ||\n ((rootHasPendingCommit = pendingLanes & ~root),\n 0 !== rootHasPendingCommit &&\n (nextLanes = getHighestPriorityLanes(rootHasPendingCommit))));\n return 0 === nextLanes\n ? 0\n : 0 !== wipLanes &&\n wipLanes !== nextLanes &&\n 0 === (wipLanes & suspendedLanes) &&\n ((suspendedLanes = nextLanes & -nextLanes),\n (rootHasPendingCommit = wipLanes & -wipLanes),\n suspendedLanes >= rootHasPendingCommit ||\n (32 === suspendedLanes && 0 !== (rootHasPendingCommit & 4194048)))\n ? wipLanes\n : nextLanes;\n}\nfunction checkIfRootIsPrerendering(root, renderLanes) {\n return (\n 0 ===\n (root.pendingLanes &\n ~(root.suspendedLanes & ~root.pingedLanes) &\n renderLanes)\n );\n}\nfunction computeExpirationTime(lane, currentTime) {\n switch (lane) {\n case 1:\n case 2:\n case 4:\n case 8:\n case 64:\n return currentTime + 250;\n case 16:\n case 32:\n case 128:\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n return currentTime + 5e3;\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n return -1;\n case 67108864:\n case 134217728:\n case 268435456:\n case 536870912:\n case 1073741824:\n return -1;\n default:\n return -1;\n }\n}\nfunction claimNextRetryLane() {\n var lane = nextRetryLane;\n nextRetryLane <<= 1;\n 0 === (nextRetryLane & 62914560) && (nextRetryLane = 4194304);\n return lane;\n}\nfunction createLaneMap(initial) {\n for (var laneMap = [], i = 0; 31 > i; i++) laneMap.push(initial);\n return laneMap;\n}\nfunction markRootUpdated$1(root, updateLane) {\n root.pendingLanes |= updateLane;\n 268435456 !== updateLane &&\n ((root.suspendedLanes = 0), (root.pingedLanes = 0), (root.warmLanes = 0));\n}\nfunction markRootFinished(\n root,\n finishedLanes,\n remainingLanes,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes\n) {\n var previouslyPendingLanes = root.pendingLanes;\n root.pendingLanes = remainingLanes;\n root.suspendedLanes = 0;\n root.pingedLanes = 0;\n root.warmLanes = 0;\n root.expiredLanes &= remainingLanes;\n root.entangledLanes &= remainingLanes;\n root.errorRecoveryDisabledLanes &= remainingLanes;\n root.shellSuspendCounter = 0;\n var entanglements = root.entanglements,\n expirationTimes = root.expirationTimes,\n hiddenUpdates = root.hiddenUpdates;\n for (\n remainingLanes = previouslyPendingLanes & ~remainingLanes;\n 0 < remainingLanes;\n\n ) {\n var index$7 = 31 - clz32(remainingLanes),\n lane = 1 << index$7;\n entanglements[index$7] = 0;\n expirationTimes[index$7] = -1;\n var hiddenUpdatesForLane = hiddenUpdates[index$7];\n if (null !== hiddenUpdatesForLane)\n for (\n hiddenUpdates[index$7] = null, index$7 = 0;\n index$7 < hiddenUpdatesForLane.length;\n index$7++\n ) {\n var update = hiddenUpdatesForLane[index$7];\n null !== update && (update.lane &= -536870913);\n }\n remainingLanes &= ~lane;\n }\n 0 !== spawnedLane && markSpawnedDeferredLane(root, spawnedLane, 0);\n 0 !== suspendedRetryLanes &&\n 0 === updatedLanes &&\n 0 !== root.tag &&\n (root.suspendedLanes |=\n suspendedRetryLanes & ~(previouslyPendingLanes & ~finishedLanes));\n}\nfunction markSpawnedDeferredLane(root, spawnedLane, entangledLanes) {\n root.pendingLanes |= spawnedLane;\n root.suspendedLanes &= ~spawnedLane;\n var spawnedLaneIndex = 31 - clz32(spawnedLane);\n root.entangledLanes |= spawnedLane;\n root.entanglements[spawnedLaneIndex] =\n root.entanglements[spawnedLaneIndex] |\n 1073741824 |\n (entangledLanes & 261930);\n}\nfunction markRootEntangled(root, entangledLanes) {\n var rootEntangledLanes = (root.entangledLanes |= entangledLanes);\n for (root = root.entanglements; rootEntangledLanes; ) {\n var index$8 = 31 - clz32(rootEntangledLanes),\n lane = 1 << index$8;\n (lane & entangledLanes) | (root[index$8] & entangledLanes) &&\n (root[index$8] |= entangledLanes);\n rootEntangledLanes &= ~lane;\n }\n}\nfunction getBumpedLaneForHydration(root, renderLanes) {\n var renderLane = renderLanes & -renderLanes;\n renderLane =\n 0 !== (renderLane & 42) ? 1 : getBumpedLaneForHydrationByLane(renderLane);\n return 0 !== (renderLane & (root.suspendedLanes | renderLanes))\n ? 0\n : renderLane;\n}\nfunction getBumpedLaneForHydrationByLane(lane) {\n switch (lane) {\n case 2:\n lane = 1;\n break;\n case 8:\n lane = 4;\n break;\n case 32:\n lane = 16;\n break;\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n lane = 128;\n break;\n case 268435456:\n lane = 134217728;\n break;\n default:\n lane = 0;\n }\n return lane;\n}\nfunction lanesToEventPriority(lanes) {\n lanes &= -lanes;\n return 2 < lanes\n ? 8 < lanes\n ? 0 !== (lanes & 134217727)\n ? 32\n : 268435456\n : 8\n : 2;\n}\nfunction resolveUpdatePriority() {\n var updatePriority = ReactDOMSharedInternals.p;\n if (0 !== updatePriority) return updatePriority;\n updatePriority = window.event;\n return void 0 === updatePriority ? 32 : getEventPriority(updatePriority.type);\n}\nfunction runWithPriority(priority, fn) {\n var previousPriority = ReactDOMSharedInternals.p;\n try {\n return (ReactDOMSharedInternals.p = priority), fn();\n } finally {\n ReactDOMSharedInternals.p = previousPriority;\n }\n}\nvar randomKey = Math.random().toString(36).slice(2),\n internalInstanceKey = \"__reactFiber$\" + randomKey,\n internalPropsKey = \"__reactProps$\" + randomKey,\n internalContainerInstanceKey = \"__reactContainer$\" + randomKey,\n internalEventHandlersKey = \"__reactEvents$\" + randomKey,\n internalEventHandlerListenersKey = \"__reactListeners$\" + randomKey,\n internalEventHandlesSetKey = \"__reactHandles$\" + randomKey,\n internalRootNodeResourcesKey = \"__reactResources$\" + randomKey,\n internalHoistableMarker = \"__reactMarker$\" + randomKey;\nfunction detachDeletedInstance(node) {\n delete node[internalInstanceKey];\n delete node[internalPropsKey];\n delete node[internalEventHandlersKey];\n delete node[internalEventHandlerListenersKey];\n delete node[internalEventHandlesSetKey];\n}\nfunction getClosestInstanceFromNode(targetNode) {\n var targetInst = targetNode[internalInstanceKey];\n if (targetInst) return targetInst;\n for (var parentNode = targetNode.parentNode; parentNode; ) {\n if (\n (targetInst =\n parentNode[internalContainerInstanceKey] ||\n parentNode[internalInstanceKey])\n ) {\n parentNode = targetInst.alternate;\n if (\n null !== targetInst.child ||\n (null !== parentNode && null !== parentNode.child)\n )\n for (\n targetNode = getParentHydrationBoundary(targetNode);\n null !== targetNode;\n\n ) {\n if ((parentNode = targetNode[internalInstanceKey])) return parentNode;\n targetNode = getParentHydrationBoundary(targetNode);\n }\n return targetInst;\n }\n targetNode = parentNode;\n parentNode = targetNode.parentNode;\n }\n return null;\n}\nfunction getInstanceFromNode(node) {\n if (\n (node = node[internalInstanceKey] || node[internalContainerInstanceKey])\n ) {\n var tag = node.tag;\n if (\n 5 === tag ||\n 6 === tag ||\n 13 === tag ||\n 31 === tag ||\n 26 === tag ||\n 27 === tag ||\n 3 === tag\n )\n return node;\n }\n return null;\n}\nfunction getNodeFromInstance(inst) {\n var tag = inst.tag;\n if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return inst.stateNode;\n throw Error(formatProdErrorMessage(33));\n}\nfunction getResourcesFromRoot(root) {\n var resources = root[internalRootNodeResourcesKey];\n resources ||\n (resources = root[internalRootNodeResourcesKey] =\n { hoistableStyles: new Map(), hoistableScripts: new Map() });\n return resources;\n}\nfunction markNodeAsHoistable(node) {\n node[internalHoistableMarker] = !0;\n}\nvar allNativeEvents = new Set(),\n registrationNameDependencies = {};\nfunction registerTwoPhaseEvent(registrationName, dependencies) {\n registerDirectEvent(registrationName, dependencies);\n registerDirectEvent(registrationName + \"Capture\", dependencies);\n}\nfunction registerDirectEvent(registrationName, dependencies) {\n registrationNameDependencies[registrationName] = dependencies;\n for (\n registrationName = 0;\n registrationName < dependencies.length;\n registrationName++\n )\n allNativeEvents.add(dependencies[registrationName]);\n}\nvar VALID_ATTRIBUTE_NAME_REGEX = RegExp(\n \"^[:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD][:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"\n ),\n illegalAttributeNameCache = {},\n validatedAttributeNameCache = {};\nfunction isAttributeNameSafe(attributeName) {\n if (hasOwnProperty.call(validatedAttributeNameCache, attributeName))\n return !0;\n if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) return !1;\n if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName))\n return (validatedAttributeNameCache[attributeName] = !0);\n illegalAttributeNameCache[attributeName] = !0;\n return !1;\n}\nfunction setValueForAttribute(node, name, value) {\n if (isAttributeNameSafe(name))\n if (null === value) node.removeAttribute(name);\n else {\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n node.removeAttribute(name);\n return;\n case \"boolean\":\n var prefix$10 = name.toLowerCase().slice(0, 5);\n if (\"data-\" !== prefix$10 && \"aria-\" !== prefix$10) {\n node.removeAttribute(name);\n return;\n }\n }\n node.setAttribute(name, \"\" + value);\n }\n}\nfunction setValueForKnownAttribute(node, name, value) {\n if (null === value) node.removeAttribute(name);\n else {\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n node.removeAttribute(name);\n return;\n }\n node.setAttribute(name, \"\" + value);\n }\n}\nfunction setValueForNamespacedAttribute(node, namespace, name, value) {\n if (null === value) node.removeAttribute(name);\n else {\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n node.removeAttribute(name);\n return;\n }\n node.setAttributeNS(namespace, name, \"\" + value);\n }\n}\nfunction getToStringValue(value) {\n switch (typeof value) {\n case \"bigint\":\n case \"boolean\":\n case \"number\":\n case \"string\":\n case \"undefined\":\n return value;\n case \"object\":\n return value;\n default:\n return \"\";\n }\n}\nfunction isCheckable(elem) {\n var type = elem.type;\n return (\n (elem = elem.nodeName) &&\n \"input\" === elem.toLowerCase() &&\n (\"checkbox\" === type || \"radio\" === type)\n );\n}\nfunction trackValueOnNode(node, valueField, currentValue) {\n var descriptor = Object.getOwnPropertyDescriptor(\n node.constructor.prototype,\n valueField\n );\n if (\n !node.hasOwnProperty(valueField) &&\n \"undefined\" !== typeof descriptor &&\n \"function\" === typeof descriptor.get &&\n \"function\" === typeof descriptor.set\n ) {\n var get = descriptor.get,\n set = descriptor.set;\n Object.defineProperty(node, valueField, {\n configurable: !0,\n get: function () {\n return get.call(this);\n },\n set: function (value) {\n currentValue = \"\" + value;\n set.call(this, value);\n }\n });\n Object.defineProperty(node, valueField, {\n enumerable: descriptor.enumerable\n });\n return {\n getValue: function () {\n return currentValue;\n },\n setValue: function (value) {\n currentValue = \"\" + value;\n },\n stopTracking: function () {\n node._valueTracker = null;\n delete node[valueField];\n }\n };\n }\n}\nfunction track(node) {\n if (!node._valueTracker) {\n var valueField = isCheckable(node) ? \"checked\" : \"value\";\n node._valueTracker = trackValueOnNode(\n node,\n valueField,\n \"\" + node[valueField]\n );\n }\n}\nfunction updateValueIfChanged(node) {\n if (!node) return !1;\n var tracker = node._valueTracker;\n if (!tracker) return !0;\n var lastValue = tracker.getValue();\n var value = \"\";\n node &&\n (value = isCheckable(node)\n ? node.checked\n ? \"true\"\n : \"false\"\n : node.value);\n node = value;\n return node !== lastValue ? (tracker.setValue(node), !0) : !1;\n}\nfunction getActiveElement(doc) {\n doc = doc || (\"undefined\" !== typeof document ? document : void 0);\n if (\"undefined\" === typeof doc) return null;\n try {\n return doc.activeElement || doc.body;\n } catch (e) {\n return doc.body;\n }\n}\nvar escapeSelectorAttributeValueInsideDoubleQuotesRegex = /[\\n\"\\\\]/g;\nfunction escapeSelectorAttributeValueInsideDoubleQuotes(value) {\n return value.replace(\n escapeSelectorAttributeValueInsideDoubleQuotesRegex,\n function (ch) {\n return \"\\\\\" + ch.charCodeAt(0).toString(16) + \" \";\n }\n );\n}\nfunction updateInput(\n element,\n value,\n defaultValue,\n lastDefaultValue,\n checked,\n defaultChecked,\n type,\n name\n) {\n element.name = \"\";\n null != type &&\n \"function\" !== typeof type &&\n \"symbol\" !== typeof type &&\n \"boolean\" !== typeof type\n ? (element.type = type)\n : element.removeAttribute(\"type\");\n if (null != value)\n if (\"number\" === type) {\n if ((0 === value && \"\" === element.value) || element.value != value)\n element.value = \"\" + getToStringValue(value);\n } else\n element.value !== \"\" + getToStringValue(value) &&\n (element.value = \"\" + getToStringValue(value));\n else\n (\"submit\" !== type && \"reset\" !== type) || element.removeAttribute(\"value\");\n null != value\n ? setDefaultValue(element, type, getToStringValue(value))\n : null != defaultValue\n ? setDefaultValue(element, type, getToStringValue(defaultValue))\n : null != lastDefaultValue && element.removeAttribute(\"value\");\n null == checked &&\n null != defaultChecked &&\n (element.defaultChecked = !!defaultChecked);\n null != checked &&\n (element.checked =\n checked && \"function\" !== typeof checked && \"symbol\" !== typeof checked);\n null != name &&\n \"function\" !== typeof name &&\n \"symbol\" !== typeof name &&\n \"boolean\" !== typeof name\n ? (element.name = \"\" + getToStringValue(name))\n : element.removeAttribute(\"name\");\n}\nfunction initInput(\n element,\n value,\n defaultValue,\n checked,\n defaultChecked,\n type,\n name,\n isHydrating\n) {\n null != type &&\n \"function\" !== typeof type &&\n \"symbol\" !== typeof type &&\n \"boolean\" !== typeof type &&\n (element.type = type);\n if (null != value || null != defaultValue) {\n if (\n !(\n (\"submit\" !== type && \"reset\" !== type) ||\n (void 0 !== value && null !== value)\n )\n ) {\n track(element);\n return;\n }\n defaultValue =\n null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n value = null != value ? \"\" + getToStringValue(value) : defaultValue;\n isHydrating || value === element.value || (element.value = value);\n element.defaultValue = value;\n }\n checked = null != checked ? checked : defaultChecked;\n checked =\n \"function\" !== typeof checked && \"symbol\" !== typeof checked && !!checked;\n element.checked = isHydrating ? element.checked : !!checked;\n element.defaultChecked = !!checked;\n null != name &&\n \"function\" !== typeof name &&\n \"symbol\" !== typeof name &&\n \"boolean\" !== typeof name &&\n (element.name = name);\n track(element);\n}\nfunction setDefaultValue(node, type, value) {\n (\"number\" === type && getActiveElement(node.ownerDocument) === node) ||\n node.defaultValue === \"\" + value ||\n (node.defaultValue = \"\" + value);\n}\nfunction updateOptions(node, multiple, propValue, setDefaultSelected) {\n node = node.options;\n if (multiple) {\n multiple = {};\n for (var i = 0; i < propValue.length; i++)\n multiple[\"$\" + propValue[i]] = !0;\n for (propValue = 0; propValue < node.length; propValue++)\n (i = multiple.hasOwnProperty(\"$\" + node[propValue].value)),\n node[propValue].selected !== i && (node[propValue].selected = i),\n i && setDefaultSelected && (node[propValue].defaultSelected = !0);\n } else {\n propValue = \"\" + getToStringValue(propValue);\n multiple = null;\n for (i = 0; i < node.length; i++) {\n if (node[i].value === propValue) {\n node[i].selected = !0;\n setDefaultSelected && (node[i].defaultSelected = !0);\n return;\n }\n null !== multiple || node[i].disabled || (multiple = node[i]);\n }\n null !== multiple && (multiple.selected = !0);\n }\n}\nfunction updateTextarea(element, value, defaultValue) {\n if (\n null != value &&\n ((value = \"\" + getToStringValue(value)),\n value !== element.value && (element.value = value),\n null == defaultValue)\n ) {\n element.defaultValue !== value && (element.defaultValue = value);\n return;\n }\n element.defaultValue =\n null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n}\nfunction initTextarea(element, value, defaultValue, children) {\n if (null == value) {\n if (null != children) {\n if (null != defaultValue) throw Error(formatProdErrorMessage(92));\n if (isArrayImpl(children)) {\n if (1 < children.length) throw Error(formatProdErrorMessage(93));\n children = children[0];\n }\n defaultValue = children;\n }\n null == defaultValue && (defaultValue = \"\");\n value = defaultValue;\n }\n defaultValue = getToStringValue(value);\n element.defaultValue = defaultValue;\n children = element.textContent;\n children === defaultValue &&\n \"\" !== children &&\n null !== children &&\n (element.value = children);\n track(element);\n}\nfunction setTextContent(node, text) {\n if (text) {\n var firstChild = node.firstChild;\n if (\n firstChild &&\n firstChild === node.lastChild &&\n 3 === firstChild.nodeType\n ) {\n firstChild.nodeValue = text;\n return;\n }\n }\n node.textContent = text;\n}\nvar unitlessNumbers = new Set(\n \"animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp\".split(\n \" \"\n )\n);\nfunction setValueForStyle(style, styleName, value) {\n var isCustomProperty = 0 === styleName.indexOf(\"--\");\n null == value || \"boolean\" === typeof value || \"\" === value\n ? isCustomProperty\n ? style.setProperty(styleName, \"\")\n : \"float\" === styleName\n ? (style.cssFloat = \"\")\n : (style[styleName] = \"\")\n : isCustomProperty\n ? style.setProperty(styleName, value)\n : \"number\" !== typeof value ||\n 0 === value ||\n unitlessNumbers.has(styleName)\n ? \"float\" === styleName\n ? (style.cssFloat = value)\n : (style[styleName] = (\"\" + value).trim())\n : (style[styleName] = value + \"px\");\n}\nfunction setValueForStyles(node, styles, prevStyles) {\n if (null != styles && \"object\" !== typeof styles)\n throw Error(formatProdErrorMessage(62));\n node = node.style;\n if (null != prevStyles) {\n for (var styleName in prevStyles)\n !prevStyles.hasOwnProperty(styleName) ||\n (null != styles && styles.hasOwnProperty(styleName)) ||\n (0 === styleName.indexOf(\"--\")\n ? node.setProperty(styleName, \"\")\n : \"float\" === styleName\n ? (node.cssFloat = \"\")\n : (node[styleName] = \"\"));\n for (var styleName$16 in styles)\n (styleName = styles[styleName$16]),\n styles.hasOwnProperty(styleName$16) &&\n prevStyles[styleName$16] !== styleName &&\n setValueForStyle(node, styleName$16, styleName);\n } else\n for (var styleName$17 in styles)\n styles.hasOwnProperty(styleName$17) &&\n setValueForStyle(node, styleName$17, styles[styleName$17]);\n}\nfunction isCustomElement(tagName) {\n if (-1 === tagName.indexOf(\"-\")) return !1;\n switch (tagName) {\n case \"annotation-xml\":\n case \"color-profile\":\n case \"font-face\":\n case \"font-face-src\":\n case \"font-face-uri\":\n case \"font-face-format\":\n case \"font-face-name\":\n case \"missing-glyph\":\n return !1;\n default:\n return !0;\n }\n}\nvar aliases = new Map([\n [\"acceptCharset\", \"accept-charset\"],\n [\"htmlFor\", \"for\"],\n [\"httpEquiv\", \"http-equiv\"],\n [\"crossOrigin\", \"crossorigin\"],\n [\"accentHeight\", \"accent-height\"],\n [\"alignmentBaseline\", \"alignment-baseline\"],\n [\"arabicForm\", \"arabic-form\"],\n [\"baselineShift\", \"baseline-shift\"],\n [\"capHeight\", \"cap-height\"],\n [\"clipPath\", \"clip-path\"],\n [\"clipRule\", \"clip-rule\"],\n [\"colorInterpolation\", \"color-interpolation\"],\n [\"colorInterpolationFilters\", \"color-interpolation-filters\"],\n [\"colorProfile\", \"color-profile\"],\n [\"colorRendering\", \"color-rendering\"],\n [\"dominantBaseline\", \"dominant-baseline\"],\n [\"enableBackground\", \"enable-background\"],\n [\"fillOpacity\", \"fill-opacity\"],\n [\"fillRule\", \"fill-rule\"],\n [\"floodColor\", \"flood-color\"],\n [\"floodOpacity\", \"flood-opacity\"],\n [\"fontFamily\", \"font-family\"],\n [\"fontSize\", \"font-size\"],\n [\"fontSizeAdjust\", \"font-size-adjust\"],\n [\"fontStretch\", \"font-stretch\"],\n [\"fontStyle\", \"font-style\"],\n [\"fontVariant\", \"font-variant\"],\n [\"fontWeight\", \"font-weight\"],\n [\"glyphName\", \"glyph-name\"],\n [\"glyphOrientationHorizontal\", \"glyph-orientation-horizontal\"],\n [\"glyphOrientationVertical\", \"glyph-orientation-vertical\"],\n [\"horizAdvX\", \"horiz-adv-x\"],\n [\"horizOriginX\", \"horiz-origin-x\"],\n [\"imageRendering\", \"image-rendering\"],\n [\"letterSpacing\", \"letter-spacing\"],\n [\"lightingColor\", \"lighting-color\"],\n [\"markerEnd\", \"marker-end\"],\n [\"markerMid\", \"marker-mid\"],\n [\"markerStart\", \"marker-start\"],\n [\"overlinePosition\", \"overline-position\"],\n [\"overlineThickness\", \"overline-thickness\"],\n [\"paintOrder\", \"paint-order\"],\n [\"panose-1\", \"panose-1\"],\n [\"pointerEvents\", \"pointer-events\"],\n [\"renderingIntent\", \"rendering-intent\"],\n [\"shapeRendering\", \"shape-rendering\"],\n [\"stopColor\", \"stop-color\"],\n [\"stopOpacity\", \"stop-opacity\"],\n [\"strikethroughPosition\", \"strikethrough-position\"],\n [\"strikethroughThickness\", \"strikethrough-thickness\"],\n [\"strokeDasharray\", \"stroke-dasharray\"],\n [\"strokeDashoffset\", \"stroke-dashoffset\"],\n [\"strokeLinecap\", \"stroke-linecap\"],\n [\"strokeLinejoin\", \"stroke-linejoin\"],\n [\"strokeMiterlimit\", \"stroke-miterlimit\"],\n [\"strokeOpacity\", \"stroke-opacity\"],\n [\"strokeWidth\", \"stroke-width\"],\n [\"textAnchor\", \"text-anchor\"],\n [\"textDecoration\", \"text-decoration\"],\n [\"textRendering\", \"text-rendering\"],\n [\"transformOrigin\", \"transform-origin\"],\n [\"underlinePosition\", \"underline-position\"],\n [\"underlineThickness\", \"underline-thickness\"],\n [\"unicodeBidi\", \"unicode-bidi\"],\n [\"unicodeRange\", \"unicode-range\"],\n [\"unitsPerEm\", \"units-per-em\"],\n [\"vAlphabetic\", \"v-alphabetic\"],\n [\"vHanging\", \"v-hanging\"],\n [\"vIdeographic\", \"v-ideographic\"],\n [\"vMathematical\", \"v-mathematical\"],\n [\"vectorEffect\", \"vector-effect\"],\n [\"vertAdvY\", \"vert-adv-y\"],\n [\"vertOriginX\", \"vert-origin-x\"],\n [\"vertOriginY\", \"vert-origin-y\"],\n [\"wordSpacing\", \"word-spacing\"],\n [\"writingMode\", \"writing-mode\"],\n [\"xmlnsXlink\", \"xmlns:xlink\"],\n [\"xHeight\", \"x-height\"]\n ]),\n isJavaScriptProtocol =\n /^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*:/i;\nfunction sanitizeURL(url) {\n return isJavaScriptProtocol.test(\"\" + url)\n ? \"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')\"\n : url;\n}\nfunction noop$1() {}\nvar currentReplayingEvent = null;\nfunction getEventTarget(nativeEvent) {\n nativeEvent = nativeEvent.target || nativeEvent.srcElement || window;\n nativeEvent.correspondingUseElement &&\n (nativeEvent = nativeEvent.correspondingUseElement);\n return 3 === nativeEvent.nodeType ? nativeEvent.parentNode : nativeEvent;\n}\nvar restoreTarget = null,\n restoreQueue = null;\nfunction restoreStateOfTarget(target) {\n var internalInstance = getInstanceFromNode(target);\n if (internalInstance && (target = internalInstance.stateNode)) {\n var props = target[internalPropsKey] || null;\n a: switch (((target = internalInstance.stateNode), internalInstance.type)) {\n case \"input\":\n updateInput(\n target,\n props.value,\n props.defaultValue,\n props.defaultValue,\n props.checked,\n props.defaultChecked,\n props.type,\n props.name\n );\n internalInstance = props.name;\n if (\"radio\" === props.type && null != internalInstance) {\n for (props = target; props.parentNode; ) props = props.parentNode;\n props = props.querySelectorAll(\n 'input[name=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(\n \"\" + internalInstance\n ) +\n '\"][type=\"radio\"]'\n );\n for (\n internalInstance = 0;\n internalInstance < props.length;\n internalInstance++\n ) {\n var otherNode = props[internalInstance];\n if (otherNode !== target && otherNode.form === target.form) {\n var otherProps = otherNode[internalPropsKey] || null;\n if (!otherProps) throw Error(formatProdErrorMessage(90));\n updateInput(\n otherNode,\n otherProps.value,\n otherProps.defaultValue,\n otherProps.defaultValue,\n otherProps.checked,\n otherProps.defaultChecked,\n otherProps.type,\n otherProps.name\n );\n }\n }\n for (\n internalInstance = 0;\n internalInstance < props.length;\n internalInstance++\n )\n (otherNode = props[internalInstance]),\n otherNode.form === target.form && updateValueIfChanged(otherNode);\n }\n break a;\n case \"textarea\":\n updateTextarea(target, props.value, props.defaultValue);\n break a;\n case \"select\":\n (internalInstance = props.value),\n null != internalInstance &&\n updateOptions(target, !!props.multiple, internalInstance, !1);\n }\n }\n}\nvar isInsideEventHandler = !1;\nfunction batchedUpdates$1(fn, a, b) {\n if (isInsideEventHandler) return fn(a, b);\n isInsideEventHandler = !0;\n try {\n var JSCompiler_inline_result = fn(a);\n return JSCompiler_inline_result;\n } finally {\n if (\n ((isInsideEventHandler = !1),\n null !== restoreTarget || null !== restoreQueue)\n )\n if (\n (flushSyncWork$1(),\n restoreTarget &&\n ((a = restoreTarget),\n (fn = restoreQueue),\n (restoreQueue = restoreTarget = null),\n restoreStateOfTarget(a),\n fn))\n )\n for (a = 0; a < fn.length; a++) restoreStateOfTarget(fn[a]);\n }\n}\nfunction getListener(inst, registrationName) {\n var stateNode = inst.stateNode;\n if (null === stateNode) return null;\n var props = stateNode[internalPropsKey] || null;\n if (null === props) return null;\n stateNode = props[registrationName];\n a: switch (registrationName) {\n case \"onClick\":\n case \"onClickCapture\":\n case \"onDoubleClick\":\n case \"onDoubleClickCapture\":\n case \"onMouseDown\":\n case \"onMouseDownCapture\":\n case \"onMouseMove\":\n case \"onMouseMoveCapture\":\n case \"onMouseUp\":\n case \"onMouseUpCapture\":\n case \"onMouseEnter\":\n (props = !props.disabled) ||\n ((inst = inst.type),\n (props = !(\n \"button\" === inst ||\n \"input\" === inst ||\n \"select\" === inst ||\n \"textarea\" === inst\n )));\n inst = !props;\n break a;\n default:\n inst = !1;\n }\n if (inst) return null;\n if (stateNode && \"function\" !== typeof stateNode)\n throw Error(\n formatProdErrorMessage(231, registrationName, typeof stateNode)\n );\n return stateNode;\n}\nvar canUseDOM = !(\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ),\n passiveBrowserEventsSupported = !1;\nif (canUseDOM)\n try {\n var options = {};\n Object.defineProperty(options, \"passive\", {\n get: function () {\n passiveBrowserEventsSupported = !0;\n }\n });\n window.addEventListener(\"test\", options, options);\n window.removeEventListener(\"test\", options, options);\n } catch (e) {\n passiveBrowserEventsSupported = !1;\n }\nvar root = null,\n startText = null,\n fallbackText = null;\nfunction getData() {\n if (fallbackText) return fallbackText;\n var start,\n startValue = startText,\n startLength = startValue.length,\n end,\n endValue = \"value\" in root ? root.value : root.textContent,\n endLength = endValue.length;\n for (\n start = 0;\n start < startLength && startValue[start] === endValue[start];\n start++\n );\n var minEnd = startLength - start;\n for (\n end = 1;\n end <= minEnd &&\n startValue[startLength - end] === endValue[endLength - end];\n end++\n );\n return (fallbackText = endValue.slice(start, 1 < end ? 1 - end : void 0));\n}\nfunction getEventCharCode(nativeEvent) {\n var keyCode = nativeEvent.keyCode;\n \"charCode\" in nativeEvent\n ? ((nativeEvent = nativeEvent.charCode),\n 0 === nativeEvent && 13 === keyCode && (nativeEvent = 13))\n : (nativeEvent = keyCode);\n 10 === nativeEvent && (nativeEvent = 13);\n return 32 <= nativeEvent || 13 === nativeEvent ? nativeEvent : 0;\n}\nfunction functionThatReturnsTrue() {\n return !0;\n}\nfunction functionThatReturnsFalse() {\n return !1;\n}\nfunction createSyntheticEvent(Interface) {\n function SyntheticBaseEvent(\n reactName,\n reactEventType,\n targetInst,\n nativeEvent,\n nativeEventTarget\n ) {\n this._reactName = reactName;\n this._targetInst = targetInst;\n this.type = reactEventType;\n this.nativeEvent = nativeEvent;\n this.target = nativeEventTarget;\n this.currentTarget = null;\n for (var propName in Interface)\n Interface.hasOwnProperty(propName) &&\n ((reactName = Interface[propName]),\n (this[propName] = reactName\n ? reactName(nativeEvent)\n : nativeEvent[propName]));\n this.isDefaultPrevented = (\n null != nativeEvent.defaultPrevented\n ? nativeEvent.defaultPrevented\n : !1 === nativeEvent.returnValue\n )\n ? functionThatReturnsTrue\n : functionThatReturnsFalse;\n this.isPropagationStopped = functionThatReturnsFalse;\n return this;\n }\n assign(SyntheticBaseEvent.prototype, {\n preventDefault: function () {\n this.defaultPrevented = !0;\n var event = this.nativeEvent;\n event &&\n (event.preventDefault\n ? event.preventDefault()\n : \"unknown\" !== typeof event.returnValue && (event.returnValue = !1),\n (this.isDefaultPrevented = functionThatReturnsTrue));\n },\n stopPropagation: function () {\n var event = this.nativeEvent;\n event &&\n (event.stopPropagation\n ? event.stopPropagation()\n : \"unknown\" !== typeof event.cancelBubble &&\n (event.cancelBubble = !0),\n (this.isPropagationStopped = functionThatReturnsTrue));\n },\n persist: function () {},\n isPersistent: functionThatReturnsTrue\n });\n return SyntheticBaseEvent;\n}\nvar EventInterface = {\n eventPhase: 0,\n bubbles: 0,\n cancelable: 0,\n timeStamp: function (event) {\n return event.timeStamp || Date.now();\n },\n defaultPrevented: 0,\n isTrusted: 0\n },\n SyntheticEvent = createSyntheticEvent(EventInterface),\n UIEventInterface = assign({}, EventInterface, { view: 0, detail: 0 }),\n SyntheticUIEvent = createSyntheticEvent(UIEventInterface),\n lastMovementX,\n lastMovementY,\n lastMouseEvent,\n MouseEventInterface = assign({}, UIEventInterface, {\n screenX: 0,\n screenY: 0,\n clientX: 0,\n clientY: 0,\n pageX: 0,\n pageY: 0,\n ctrlKey: 0,\n shiftKey: 0,\n altKey: 0,\n metaKey: 0,\n getModifierState: getEventModifierState,\n button: 0,\n buttons: 0,\n relatedTarget: function (event) {\n return void 0 === event.relatedTarget\n ? event.fromElement === event.srcElement\n ? event.toElement\n : event.fromElement\n : event.relatedTarget;\n },\n movementX: function (event) {\n if (\"movementX\" in event) return event.movementX;\n event !== lastMouseEvent &&\n (lastMouseEvent && \"mousemove\" === event.type\n ? ((lastMovementX = event.screenX - lastMouseEvent.screenX),\n (lastMovementY = event.screenY - lastMouseEvent.screenY))\n : (lastMovementY = lastMovementX = 0),\n (lastMouseEvent = event));\n return lastMovementX;\n },\n movementY: function (event) {\n return \"movementY\" in event ? event.movementY : lastMovementY;\n }\n }),\n SyntheticMouseEvent = createSyntheticEvent(MouseEventInterface),\n DragEventInterface = assign({}, MouseEventInterface, { dataTransfer: 0 }),\n SyntheticDragEvent = createSyntheticEvent(DragEventInterface),\n FocusEventInterface = assign({}, UIEventInterface, { relatedTarget: 0 }),\n SyntheticFocusEvent = createSyntheticEvent(FocusEventInterface),\n AnimationEventInterface = assign({}, EventInterface, {\n animationName: 0,\n elapsedTime: 0,\n pseudoElement: 0\n }),\n SyntheticAnimationEvent = createSyntheticEvent(AnimationEventInterface),\n ClipboardEventInterface = assign({}, EventInterface, {\n clipboardData: function (event) {\n return \"clipboardData\" in event\n ? event.clipboardData\n : window.clipboardData;\n }\n }),\n SyntheticClipboardEvent = createSyntheticEvent(ClipboardEventInterface),\n CompositionEventInterface = assign({}, EventInterface, { data: 0 }),\n SyntheticCompositionEvent = createSyntheticEvent(CompositionEventInterface),\n normalizeKey = {\n Esc: \"Escape\",\n Spacebar: \" \",\n Left: \"ArrowLeft\",\n Up: \"ArrowUp\",\n Right: \"ArrowRight\",\n Down: \"ArrowDown\",\n Del: \"Delete\",\n Win: \"OS\",\n Menu: \"ContextMenu\",\n Apps: \"ContextMenu\",\n Scroll: \"ScrollLock\",\n MozPrintableKey: \"Unidentified\"\n },\n translateToKey = {\n 8: \"Backspace\",\n 9: \"Tab\",\n 12: \"Clear\",\n 13: \"Enter\",\n 16: \"Shift\",\n 17: \"Control\",\n 18: \"Alt\",\n 19: \"Pause\",\n 20: \"CapsLock\",\n 27: \"Escape\",\n 32: \" \",\n 33: \"PageUp\",\n 34: \"PageDown\",\n 35: \"End\",\n 36: \"Home\",\n 37: \"ArrowLeft\",\n 38: \"ArrowUp\",\n 39: \"ArrowRight\",\n 40: \"ArrowDown\",\n 45: \"Insert\",\n 46: \"Delete\",\n 112: \"F1\",\n 113: \"F2\",\n 114: \"F3\",\n 115: \"F4\",\n 116: \"F5\",\n 117: \"F6\",\n 118: \"F7\",\n 119: \"F8\",\n 120: \"F9\",\n 121: \"F10\",\n 122: \"F11\",\n 123: \"F12\",\n 144: \"NumLock\",\n 145: \"ScrollLock\",\n 224: \"Meta\"\n },\n modifierKeyToProp = {\n Alt: \"altKey\",\n Control: \"ctrlKey\",\n Meta: \"metaKey\",\n Shift: \"shiftKey\"\n };\nfunction modifierStateGetter(keyArg) {\n var nativeEvent = this.nativeEvent;\n return nativeEvent.getModifierState\n ? nativeEvent.getModifierState(keyArg)\n : (keyArg = modifierKeyToProp[keyArg])\n ? !!nativeEvent[keyArg]\n : !1;\n}\nfunction getEventModifierState() {\n return modifierStateGetter;\n}\nvar KeyboardEventInterface = assign({}, UIEventInterface, {\n key: function (nativeEvent) {\n if (nativeEvent.key) {\n var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\n if (\"Unidentified\" !== key) return key;\n }\n return \"keypress\" === nativeEvent.type\n ? ((nativeEvent = getEventCharCode(nativeEvent)),\n 13 === nativeEvent ? \"Enter\" : String.fromCharCode(nativeEvent))\n : \"keydown\" === nativeEvent.type || \"keyup\" === nativeEvent.type\n ? translateToKey[nativeEvent.keyCode] || \"Unidentified\"\n : \"\";\n },\n code: 0,\n location: 0,\n ctrlKey: 0,\n shiftKey: 0,\n altKey: 0,\n metaKey: 0,\n repeat: 0,\n locale: 0,\n getModifierState: getEventModifierState,\n charCode: function (event) {\n return \"keypress\" === event.type ? getEventCharCode(event) : 0;\n },\n keyCode: function (event) {\n return \"keydown\" === event.type || \"keyup\" === event.type\n ? event.keyCode\n : 0;\n },\n which: function (event) {\n return \"keypress\" === event.type\n ? getEventCharCode(event)\n : \"keydown\" === event.type || \"keyup\" === event.type\n ? event.keyCode\n : 0;\n }\n }),\n SyntheticKeyboardEvent = createSyntheticEvent(KeyboardEventInterface),\n PointerEventInterface = assign({}, MouseEventInterface, {\n pointerId: 0,\n width: 0,\n height: 0,\n pressure: 0,\n tangentialPressure: 0,\n tiltX: 0,\n tiltY: 0,\n twist: 0,\n pointerType: 0,\n isPrimary: 0\n }),\n SyntheticPointerEvent = createSyntheticEvent(PointerEventInterface),\n TouchEventInterface = assign({}, UIEventInterface, {\n touches: 0,\n targetTouches: 0,\n changedTouches: 0,\n altKey: 0,\n metaKey: 0,\n ctrlKey: 0,\n shiftKey: 0,\n getModifierState: getEventModifierState\n }),\n SyntheticTouchEvent = createSyntheticEvent(TouchEventInterface),\n TransitionEventInterface = assign({}, EventInterface, {\n propertyName: 0,\n elapsedTime: 0,\n pseudoElement: 0\n }),\n SyntheticTransitionEvent = createSyntheticEvent(TransitionEventInterface),\n WheelEventInterface = assign({}, MouseEventInterface, {\n deltaX: function (event) {\n return \"deltaX\" in event\n ? event.deltaX\n : \"wheelDeltaX\" in event\n ? -event.wheelDeltaX\n : 0;\n },\n deltaY: function (event) {\n return \"deltaY\" in event\n ? event.deltaY\n : \"wheelDeltaY\" in event\n ? -event.wheelDeltaY\n : \"wheelDelta\" in event\n ? -event.wheelDelta\n : 0;\n },\n deltaZ: 0,\n deltaMode: 0\n }),\n SyntheticWheelEvent = createSyntheticEvent(WheelEventInterface),\n ToggleEventInterface = assign({}, EventInterface, {\n newState: 0,\n oldState: 0\n }),\n SyntheticToggleEvent = createSyntheticEvent(ToggleEventInterface),\n END_KEYCODES = [9, 13, 27, 32],\n canUseCompositionEvent = canUseDOM && \"CompositionEvent\" in window,\n documentMode = null;\ncanUseDOM &&\n \"documentMode\" in document &&\n (documentMode = document.documentMode);\nvar canUseTextInputEvent = canUseDOM && \"TextEvent\" in window && !documentMode,\n useFallbackCompositionData =\n canUseDOM &&\n (!canUseCompositionEvent ||\n (documentMode && 8 < documentMode && 11 >= documentMode)),\n SPACEBAR_CHAR = String.fromCharCode(32),\n hasSpaceKeypress = !1;\nfunction isFallbackCompositionEnd(domEventName, nativeEvent) {\n switch (domEventName) {\n case \"keyup\":\n return -1 !== END_KEYCODES.indexOf(nativeEvent.keyCode);\n case \"keydown\":\n return 229 !== nativeEvent.keyCode;\n case \"keypress\":\n case \"mousedown\":\n case \"focusout\":\n return !0;\n default:\n return !1;\n }\n}\nfunction getDataFromCustomEvent(nativeEvent) {\n nativeEvent = nativeEvent.detail;\n return \"object\" === typeof nativeEvent && \"data\" in nativeEvent\n ? nativeEvent.data\n : null;\n}\nvar isComposing = !1;\nfunction getNativeBeforeInputChars(domEventName, nativeEvent) {\n switch (domEventName) {\n case \"compositionend\":\n return getDataFromCustomEvent(nativeEvent);\n case \"keypress\":\n if (32 !== nativeEvent.which) return null;\n hasSpaceKeypress = !0;\n return SPACEBAR_CHAR;\n case \"textInput\":\n return (\n (domEventName = nativeEvent.data),\n domEventName === SPACEBAR_CHAR && hasSpaceKeypress ? null : domEventName\n );\n default:\n return null;\n }\n}\nfunction getFallbackBeforeInputChars(domEventName, nativeEvent) {\n if (isComposing)\n return \"compositionend\" === domEventName ||\n (!canUseCompositionEvent &&\n isFallbackCompositionEnd(domEventName, nativeEvent))\n ? ((domEventName = getData()),\n (fallbackText = startText = root = null),\n (isComposing = !1),\n domEventName)\n : null;\n switch (domEventName) {\n case \"paste\":\n return null;\n case \"keypress\":\n if (\n !(nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) ||\n (nativeEvent.ctrlKey && nativeEvent.altKey)\n ) {\n if (nativeEvent.char && 1 < nativeEvent.char.length)\n return nativeEvent.char;\n if (nativeEvent.which) return String.fromCharCode(nativeEvent.which);\n }\n return null;\n case \"compositionend\":\n return useFallbackCompositionData && \"ko\" !== nativeEvent.locale\n ? null\n : nativeEvent.data;\n default:\n return null;\n }\n}\nvar supportedInputTypes = {\n color: !0,\n date: !0,\n datetime: !0,\n \"datetime-local\": !0,\n email: !0,\n month: !0,\n number: !0,\n password: !0,\n range: !0,\n search: !0,\n tel: !0,\n text: !0,\n time: !0,\n url: !0,\n week: !0\n};\nfunction isTextInputElement(elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n return \"input\" === nodeName\n ? !!supportedInputTypes[elem.type]\n : \"textarea\" === nodeName\n ? !0\n : !1;\n}\nfunction createAndAccumulateChangeEvent(\n dispatchQueue,\n inst,\n nativeEvent,\n target\n) {\n restoreTarget\n ? restoreQueue\n ? restoreQueue.push(target)\n : (restoreQueue = [target])\n : (restoreTarget = target);\n inst = accumulateTwoPhaseListeners(inst, \"onChange\");\n 0 < inst.length &&\n ((nativeEvent = new SyntheticEvent(\n \"onChange\",\n \"change\",\n null,\n nativeEvent,\n target\n )),\n dispatchQueue.push({ event: nativeEvent, listeners: inst }));\n}\nvar activeElement$1 = null,\n activeElementInst$1 = null;\nfunction runEventInBatch(dispatchQueue) {\n processDispatchQueue(dispatchQueue, 0);\n}\nfunction getInstIfValueChanged(targetInst) {\n var targetNode = getNodeFromInstance(targetInst);\n if (updateValueIfChanged(targetNode)) return targetInst;\n}\nfunction getTargetInstForChangeEvent(domEventName, targetInst) {\n if (\"change\" === domEventName) return targetInst;\n}\nvar isInputEventSupported = !1;\nif (canUseDOM) {\n var JSCompiler_inline_result$jscomp$286;\n if (canUseDOM) {\n var isSupported$jscomp$inline_427 = \"oninput\" in document;\n if (!isSupported$jscomp$inline_427) {\n var element$jscomp$inline_428 = document.createElement(\"div\");\n element$jscomp$inline_428.setAttribute(\"oninput\", \"return;\");\n isSupported$jscomp$inline_427 =\n \"function\" === typeof element$jscomp$inline_428.oninput;\n }\n JSCompiler_inline_result$jscomp$286 = isSupported$jscomp$inline_427;\n } else JSCompiler_inline_result$jscomp$286 = !1;\n isInputEventSupported =\n JSCompiler_inline_result$jscomp$286 &&\n (!document.documentMode || 9 < document.documentMode);\n}\nfunction stopWatchingForValueChange() {\n activeElement$1 &&\n (activeElement$1.detachEvent(\"onpropertychange\", handlePropertyChange),\n (activeElementInst$1 = activeElement$1 = null));\n}\nfunction handlePropertyChange(nativeEvent) {\n if (\n \"value\" === nativeEvent.propertyName &&\n getInstIfValueChanged(activeElementInst$1)\n ) {\n var dispatchQueue = [];\n createAndAccumulateChangeEvent(\n dispatchQueue,\n activeElementInst$1,\n nativeEvent,\n getEventTarget(nativeEvent)\n );\n batchedUpdates$1(runEventInBatch, dispatchQueue);\n }\n}\nfunction handleEventsForInputEventPolyfill(domEventName, target, targetInst) {\n \"focusin\" === domEventName\n ? (stopWatchingForValueChange(),\n (activeElement$1 = target),\n (activeElementInst$1 = targetInst),\n activeElement$1.attachEvent(\"onpropertychange\", handlePropertyChange))\n : \"focusout\" === domEventName && stopWatchingForValueChange();\n}\nfunction getTargetInstForInputEventPolyfill(domEventName) {\n if (\n \"selectionchange\" === domEventName ||\n \"keyup\" === domEventName ||\n \"keydown\" === domEventName\n )\n return getInstIfValueChanged(activeElementInst$1);\n}\nfunction getTargetInstForClickEvent(domEventName, targetInst) {\n if (\"click\" === domEventName) return getInstIfValueChanged(targetInst);\n}\nfunction getTargetInstForInputOrChangeEvent(domEventName, targetInst) {\n if (\"input\" === domEventName || \"change\" === domEventName)\n return getInstIfValueChanged(targetInst);\n}\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is;\nfunction shallowEqual(objA, objB) {\n if (objectIs(objA, objB)) return !0;\n if (\n \"object\" !== typeof objA ||\n null === objA ||\n \"object\" !== typeof objB ||\n null === objB\n )\n return !1;\n var keysA = Object.keys(objA),\n keysB = Object.keys(objB);\n if (keysA.length !== keysB.length) return !1;\n for (keysB = 0; keysB < keysA.length; keysB++) {\n var currentKey = keysA[keysB];\n if (\n !hasOwnProperty.call(objB, currentKey) ||\n !objectIs(objA[currentKey], objB[currentKey])\n )\n return !1;\n }\n return !0;\n}\nfunction getLeafNode(node) {\n for (; node && node.firstChild; ) node = node.firstChild;\n return node;\n}\nfunction getNodeForCharacterOffset(root, offset) {\n var node = getLeafNode(root);\n root = 0;\n for (var nodeEnd; node; ) {\n if (3 === node.nodeType) {\n nodeEnd = root + node.textContent.length;\n if (root <= offset && nodeEnd >= offset)\n return { node: node, offset: offset - root };\n root = nodeEnd;\n }\n a: {\n for (; node; ) {\n if (node.nextSibling) {\n node = node.nextSibling;\n break a;\n }\n node = node.parentNode;\n }\n node = void 0;\n }\n node = getLeafNode(node);\n }\n}\nfunction containsNode(outerNode, innerNode) {\n return outerNode && innerNode\n ? outerNode === innerNode\n ? !0\n : outerNode && 3 === outerNode.nodeType\n ? !1\n : innerNode && 3 === innerNode.nodeType\n ? containsNode(outerNode, innerNode.parentNode)\n : \"contains\" in outerNode\n ? outerNode.contains(innerNode)\n : outerNode.compareDocumentPosition\n ? !!(outerNode.compareDocumentPosition(innerNode) & 16)\n : !1\n : !1;\n}\nfunction getActiveElementDeep(containerInfo) {\n containerInfo =\n null != containerInfo &&\n null != containerInfo.ownerDocument &&\n null != containerInfo.ownerDocument.defaultView\n ? containerInfo.ownerDocument.defaultView\n : window;\n for (\n var element = getActiveElement(containerInfo.document);\n element instanceof containerInfo.HTMLIFrameElement;\n\n ) {\n try {\n var JSCompiler_inline_result =\n \"string\" === typeof element.contentWindow.location.href;\n } catch (err) {\n JSCompiler_inline_result = !1;\n }\n if (JSCompiler_inline_result) containerInfo = element.contentWindow;\n else break;\n element = getActiveElement(containerInfo.document);\n }\n return element;\n}\nfunction hasSelectionCapabilities(elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n return (\n nodeName &&\n ((\"input\" === nodeName &&\n (\"text\" === elem.type ||\n \"search\" === elem.type ||\n \"tel\" === elem.type ||\n \"url\" === elem.type ||\n \"password\" === elem.type)) ||\n \"textarea\" === nodeName ||\n \"true\" === elem.contentEditable)\n );\n}\nvar skipSelectionChangeEvent =\n canUseDOM && \"documentMode\" in document && 11 >= document.documentMode,\n activeElement = null,\n activeElementInst = null,\n lastSelection = null,\n mouseDown = !1;\nfunction constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget) {\n var doc =\n nativeEventTarget.window === nativeEventTarget\n ? nativeEventTarget.document\n : 9 === nativeEventTarget.nodeType\n ? nativeEventTarget\n : nativeEventTarget.ownerDocument;\n mouseDown ||\n null == activeElement ||\n activeElement !== getActiveElement(doc) ||\n ((doc = activeElement),\n \"selectionStart\" in doc && hasSelectionCapabilities(doc)\n ? (doc = { start: doc.selectionStart, end: doc.selectionEnd })\n : ((doc = (\n (doc.ownerDocument && doc.ownerDocument.defaultView) ||\n window\n ).getSelection()),\n (doc = {\n anchorNode: doc.anchorNode,\n anchorOffset: doc.anchorOffset,\n focusNode: doc.focusNode,\n focusOffset: doc.focusOffset\n })),\n (lastSelection && shallowEqual(lastSelection, doc)) ||\n ((lastSelection = doc),\n (doc = accumulateTwoPhaseListeners(activeElementInst, \"onSelect\")),\n 0 < doc.length &&\n ((nativeEvent = new SyntheticEvent(\n \"onSelect\",\n \"select\",\n null,\n nativeEvent,\n nativeEventTarget\n )),\n dispatchQueue.push({ event: nativeEvent, listeners: doc }),\n (nativeEvent.target = activeElement))));\n}\nfunction makePrefixMap(styleProp, eventName) {\n var prefixes = {};\n prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n prefixes[\"Webkit\" + styleProp] = \"webkit\" + eventName;\n prefixes[\"Moz\" + styleProp] = \"moz\" + eventName;\n return prefixes;\n}\nvar vendorPrefixes = {\n animationend: makePrefixMap(\"Animation\", \"AnimationEnd\"),\n animationiteration: makePrefixMap(\"Animation\", \"AnimationIteration\"),\n animationstart: makePrefixMap(\"Animation\", \"AnimationStart\"),\n transitionrun: makePrefixMap(\"Transition\", \"TransitionRun\"),\n transitionstart: makePrefixMap(\"Transition\", \"TransitionStart\"),\n transitioncancel: makePrefixMap(\"Transition\", \"TransitionCancel\"),\n transitionend: makePrefixMap(\"Transition\", \"TransitionEnd\")\n },\n prefixedEventNames = {},\n style = {};\ncanUseDOM &&\n ((style = document.createElement(\"div\").style),\n \"AnimationEvent\" in window ||\n (delete vendorPrefixes.animationend.animation,\n delete vendorPrefixes.animationiteration.animation,\n delete vendorPrefixes.animationstart.animation),\n \"TransitionEvent\" in window ||\n delete vendorPrefixes.transitionend.transition);\nfunction getVendorPrefixedEventName(eventName) {\n if (prefixedEventNames[eventName]) return prefixedEventNames[eventName];\n if (!vendorPrefixes[eventName]) return eventName;\n var prefixMap = vendorPrefixes[eventName],\n styleProp;\n for (styleProp in prefixMap)\n if (prefixMap.hasOwnProperty(styleProp) && styleProp in style)\n return (prefixedEventNames[eventName] = prefixMap[styleProp]);\n return eventName;\n}\nvar ANIMATION_END = getVendorPrefixedEventName(\"animationend\"),\n ANIMATION_ITERATION = getVendorPrefixedEventName(\"animationiteration\"),\n ANIMATION_START = getVendorPrefixedEventName(\"animationstart\"),\n TRANSITION_RUN = getVendorPrefixedEventName(\"transitionrun\"),\n TRANSITION_START = getVendorPrefixedEventName(\"transitionstart\"),\n TRANSITION_CANCEL = getVendorPrefixedEventName(\"transitioncancel\"),\n TRANSITION_END = getVendorPrefixedEventName(\"transitionend\"),\n topLevelEventsToReactNames = new Map(),\n simpleEventPluginEvents =\n \"abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel\".split(\n \" \"\n );\nsimpleEventPluginEvents.push(\"scrollEnd\");\nfunction registerSimpleEvent(domEventName, reactName) {\n topLevelEventsToReactNames.set(domEventName, reactName);\n registerTwoPhaseEvent(reactName, [domEventName]);\n}\nvar reportGlobalError =\n \"function\" === typeof reportError\n ? reportError\n : function (error) {\n if (\n \"object\" === typeof window &&\n \"function\" === typeof window.ErrorEvent\n ) {\n var event = new window.ErrorEvent(\"error\", {\n bubbles: !0,\n cancelable: !0,\n message:\n \"object\" === typeof error &&\n null !== error &&\n \"string\" === typeof error.message\n ? String(error.message)\n : String(error),\n error: error\n });\n if (!window.dispatchEvent(event)) return;\n } else if (\n \"object\" === typeof process &&\n \"function\" === typeof process.emit\n ) {\n process.emit(\"uncaughtException\", error);\n return;\n }\n console.error(error);\n },\n concurrentQueues = [],\n concurrentQueuesIndex = 0,\n concurrentlyUpdatedLanes = 0;\nfunction finishQueueingConcurrentUpdates() {\n for (\n var endIndex = concurrentQueuesIndex,\n i = (concurrentlyUpdatedLanes = concurrentQueuesIndex = 0);\n i < endIndex;\n\n ) {\n var fiber = concurrentQueues[i];\n concurrentQueues[i++] = null;\n var queue = concurrentQueues[i];\n concurrentQueues[i++] = null;\n var update = concurrentQueues[i];\n concurrentQueues[i++] = null;\n var lane = concurrentQueues[i];\n concurrentQueues[i++] = null;\n if (null !== queue && null !== update) {\n var pending = queue.pending;\n null === pending\n ? (update.next = update)\n : ((update.next = pending.next), (pending.next = update));\n queue.pending = update;\n }\n 0 !== lane && markUpdateLaneFromFiberToRoot(fiber, update, lane);\n }\n}\nfunction enqueueUpdate$1(fiber, queue, update, lane) {\n concurrentQueues[concurrentQueuesIndex++] = fiber;\n concurrentQueues[concurrentQueuesIndex++] = queue;\n concurrentQueues[concurrentQueuesIndex++] = update;\n concurrentQueues[concurrentQueuesIndex++] = lane;\n concurrentlyUpdatedLanes |= lane;\n fiber.lanes |= lane;\n fiber = fiber.alternate;\n null !== fiber && (fiber.lanes |= lane);\n}\nfunction enqueueConcurrentHookUpdate(fiber, queue, update, lane) {\n enqueueUpdate$1(fiber, queue, update, lane);\n return getRootForUpdatedFiber(fiber);\n}\nfunction enqueueConcurrentRenderForLane(fiber, lane) {\n enqueueUpdate$1(fiber, null, null, lane);\n return getRootForUpdatedFiber(fiber);\n}\nfunction markUpdateLaneFromFiberToRoot(sourceFiber, update, lane) {\n sourceFiber.lanes |= lane;\n var alternate = sourceFiber.alternate;\n null !== alternate && (alternate.lanes |= lane);\n for (var isHidden = !1, parent = sourceFiber.return; null !== parent; )\n (parent.childLanes |= lane),\n (alternate = parent.alternate),\n null !== alternate && (alternate.childLanes |= lane),\n 22 === parent.tag &&\n ((sourceFiber = parent.stateNode),\n null === sourceFiber || sourceFiber._visibility & 1 || (isHidden = !0)),\n (sourceFiber = parent),\n (parent = parent.return);\n return 3 === sourceFiber.tag\n ? ((parent = sourceFiber.stateNode),\n isHidden &&\n null !== update &&\n ((isHidden = 31 - clz32(lane)),\n (sourceFiber = parent.hiddenUpdates),\n (alternate = sourceFiber[isHidden]),\n null === alternate\n ? (sourceFiber[isHidden] = [update])\n : alternate.push(update),\n (update.lane = lane | 536870912)),\n parent)\n : null;\n}\nfunction getRootForUpdatedFiber(sourceFiber) {\n if (50 < nestedUpdateCount)\n throw (\n ((nestedUpdateCount = 0),\n (rootWithNestedUpdates = null),\n Error(formatProdErrorMessage(185)))\n );\n for (var parent = sourceFiber.return; null !== parent; )\n (sourceFiber = parent), (parent = sourceFiber.return);\n return 3 === sourceFiber.tag ? sourceFiber.stateNode : null;\n}\nvar emptyContextObject = {};\nfunction FiberNode(tag, pendingProps, key, mode) {\n this.tag = tag;\n this.key = key;\n this.sibling =\n this.child =\n this.return =\n this.stateNode =\n this.type =\n this.elementType =\n null;\n this.index = 0;\n this.refCleanup = this.ref = null;\n this.pendingProps = pendingProps;\n this.dependencies =\n this.memoizedState =\n this.updateQueue =\n this.memoizedProps =\n null;\n this.mode = mode;\n this.subtreeFlags = this.flags = 0;\n this.deletions = null;\n this.childLanes = this.lanes = 0;\n this.alternate = null;\n}\nfunction createFiberImplClass(tag, pendingProps, key, mode) {\n return new FiberNode(tag, pendingProps, key, mode);\n}\nfunction shouldConstruct(Component) {\n Component = Component.prototype;\n return !(!Component || !Component.isReactComponent);\n}\nfunction createWorkInProgress(current, pendingProps) {\n var workInProgress = current.alternate;\n null === workInProgress\n ? ((workInProgress = createFiberImplClass(\n current.tag,\n pendingProps,\n current.key,\n current.mode\n )),\n (workInProgress.elementType = current.elementType),\n (workInProgress.type = current.type),\n (workInProgress.stateNode = current.stateNode),\n (workInProgress.alternate = current),\n (current.alternate = workInProgress))\n : ((workInProgress.pendingProps = pendingProps),\n (workInProgress.type = current.type),\n (workInProgress.flags = 0),\n (workInProgress.subtreeFlags = 0),\n (workInProgress.deletions = null));\n workInProgress.flags = current.flags & 65011712;\n workInProgress.childLanes = current.childLanes;\n workInProgress.lanes = current.lanes;\n workInProgress.child = current.child;\n workInProgress.memoizedProps = current.memoizedProps;\n workInProgress.memoizedState = current.memoizedState;\n workInProgress.updateQueue = current.updateQueue;\n pendingProps = current.dependencies;\n workInProgress.dependencies =\n null === pendingProps\n ? null\n : { lanes: pendingProps.lanes, firstContext: pendingProps.firstContext };\n workInProgress.sibling = current.sibling;\n workInProgress.index = current.index;\n workInProgress.ref = current.ref;\n workInProgress.refCleanup = current.refCleanup;\n return workInProgress;\n}\nfunction resetWorkInProgress(workInProgress, renderLanes) {\n workInProgress.flags &= 65011714;\n var current = workInProgress.alternate;\n null === current\n ? ((workInProgress.childLanes = 0),\n (workInProgress.lanes = renderLanes),\n (workInProgress.child = null),\n (workInProgress.subtreeFlags = 0),\n (workInProgress.memoizedProps = null),\n (workInProgress.memoizedState = null),\n (workInProgress.updateQueue = null),\n (workInProgress.dependencies = null),\n (workInProgress.stateNode = null))\n : ((workInProgress.childLanes = current.childLanes),\n (workInProgress.lanes = current.lanes),\n (workInProgress.child = current.child),\n (workInProgress.subtreeFlags = 0),\n (workInProgress.deletions = null),\n (workInProgress.memoizedProps = current.memoizedProps),\n (workInProgress.memoizedState = current.memoizedState),\n (workInProgress.updateQueue = current.updateQueue),\n (workInProgress.type = current.type),\n (renderLanes = current.dependencies),\n (workInProgress.dependencies =\n null === renderLanes\n ? null\n : {\n lanes: renderLanes.lanes,\n firstContext: renderLanes.firstContext\n }));\n return workInProgress;\n}\nfunction createFiberFromTypeAndProps(\n type,\n key,\n pendingProps,\n owner,\n mode,\n lanes\n) {\n var fiberTag = 0;\n owner = type;\n if (\"function\" === typeof type) shouldConstruct(type) && (fiberTag = 1);\n else if (\"string\" === typeof type)\n fiberTag = isHostHoistableType(\n type,\n pendingProps,\n contextStackCursor.current\n )\n ? 26\n : \"html\" === type || \"head\" === type || \"body\" === type\n ? 27\n : 5;\n else\n a: switch (type) {\n case REACT_ACTIVITY_TYPE:\n return (\n (type = createFiberImplClass(31, pendingProps, key, mode)),\n (type.elementType = REACT_ACTIVITY_TYPE),\n (type.lanes = lanes),\n type\n );\n case REACT_FRAGMENT_TYPE:\n return createFiberFromFragment(pendingProps.children, mode, lanes, key);\n case REACT_STRICT_MODE_TYPE:\n fiberTag = 8;\n mode |= 24;\n break;\n case REACT_PROFILER_TYPE:\n return (\n (type = createFiberImplClass(12, pendingProps, key, mode | 2)),\n (type.elementType = REACT_PROFILER_TYPE),\n (type.lanes = lanes),\n type\n );\n case REACT_SUSPENSE_TYPE:\n return (\n (type = createFiberImplClass(13, pendingProps, key, mode)),\n (type.elementType = REACT_SUSPENSE_TYPE),\n (type.lanes = lanes),\n type\n );\n case REACT_SUSPENSE_LIST_TYPE:\n return (\n (type = createFiberImplClass(19, pendingProps, key, mode)),\n (type.elementType = REACT_SUSPENSE_LIST_TYPE),\n (type.lanes = lanes),\n type\n );\n default:\n if (\"object\" === typeof type && null !== type)\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n fiberTag = 10;\n break a;\n case REACT_CONSUMER_TYPE:\n fiberTag = 9;\n break a;\n case REACT_FORWARD_REF_TYPE:\n fiberTag = 11;\n break a;\n case REACT_MEMO_TYPE:\n fiberTag = 14;\n break a;\n case REACT_LAZY_TYPE:\n fiberTag = 16;\n owner = null;\n break a;\n }\n fiberTag = 29;\n pendingProps = Error(\n formatProdErrorMessage(130, null === type ? \"null\" : typeof type, \"\")\n );\n owner = null;\n }\n key = createFiberImplClass(fiberTag, pendingProps, key, mode);\n key.elementType = type;\n key.type = owner;\n key.lanes = lanes;\n return key;\n}\nfunction createFiberFromFragment(elements, mode, lanes, key) {\n elements = createFiberImplClass(7, elements, key, mode);\n elements.lanes = lanes;\n return elements;\n}\nfunction createFiberFromText(content, mode, lanes) {\n content = createFiberImplClass(6, content, null, mode);\n content.lanes = lanes;\n return content;\n}\nfunction createFiberFromDehydratedFragment(dehydratedNode) {\n var fiber = createFiberImplClass(18, null, null, 0);\n fiber.stateNode = dehydratedNode;\n return fiber;\n}\nfunction createFiberFromPortal(portal, mode, lanes) {\n mode = createFiberImplClass(\n 4,\n null !== portal.children ? portal.children : [],\n portal.key,\n mode\n );\n mode.lanes = lanes;\n mode.stateNode = {\n containerInfo: portal.containerInfo,\n pendingChildren: null,\n implementation: portal.implementation\n };\n return mode;\n}\nvar CapturedStacks = new WeakMap();\nfunction createCapturedValueAtFiber(value, source) {\n if (\"object\" === typeof value && null !== value) {\n var existing = CapturedStacks.get(value);\n if (void 0 !== existing) return existing;\n source = {\n value: value,\n source: source,\n stack: getStackByFiberInDevAndProd(source)\n };\n CapturedStacks.set(value, source);\n return source;\n }\n return {\n value: value,\n source: source,\n stack: getStackByFiberInDevAndProd(source)\n };\n}\nvar forkStack = [],\n forkStackIndex = 0,\n treeForkProvider = null,\n treeForkCount = 0,\n idStack = [],\n idStackIndex = 0,\n treeContextProvider = null,\n treeContextId = 1,\n treeContextOverflow = \"\";\nfunction pushTreeFork(workInProgress, totalChildren) {\n forkStack[forkStackIndex++] = treeForkCount;\n forkStack[forkStackIndex++] = treeForkProvider;\n treeForkProvider = workInProgress;\n treeForkCount = totalChildren;\n}\nfunction pushTreeId(workInProgress, totalChildren, index) {\n idStack[idStackIndex++] = treeContextId;\n idStack[idStackIndex++] = treeContextOverflow;\n idStack[idStackIndex++] = treeContextProvider;\n treeContextProvider = workInProgress;\n var baseIdWithLeadingBit = treeContextId;\n workInProgress = treeContextOverflow;\n var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1;\n baseIdWithLeadingBit &= ~(1 << baseLength);\n index += 1;\n var length = 32 - clz32(totalChildren) + baseLength;\n if (30 < length) {\n var numberOfOverflowBits = baseLength - (baseLength % 5);\n length = (\n baseIdWithLeadingBit &\n ((1 << numberOfOverflowBits) - 1)\n ).toString(32);\n baseIdWithLeadingBit >>= numberOfOverflowBits;\n baseLength -= numberOfOverflowBits;\n treeContextId =\n (1 << (32 - clz32(totalChildren) + baseLength)) |\n (index << baseLength) |\n baseIdWithLeadingBit;\n treeContextOverflow = length + workInProgress;\n } else\n (treeContextId =\n (1 << length) | (index << baseLength) | baseIdWithLeadingBit),\n (treeContextOverflow = workInProgress);\n}\nfunction pushMaterializedTreeId(workInProgress) {\n null !== workInProgress.return &&\n (pushTreeFork(workInProgress, 1), pushTreeId(workInProgress, 1, 0));\n}\nfunction popTreeContext(workInProgress) {\n for (; workInProgress === treeForkProvider; )\n (treeForkProvider = forkStack[--forkStackIndex]),\n (forkStack[forkStackIndex] = null),\n (treeForkCount = forkStack[--forkStackIndex]),\n (forkStack[forkStackIndex] = null);\n for (; workInProgress === treeContextProvider; )\n (treeContextProvider = idStack[--idStackIndex]),\n (idStack[idStackIndex] = null),\n (treeContextOverflow = idStack[--idStackIndex]),\n (idStack[idStackIndex] = null),\n (treeContextId = idStack[--idStackIndex]),\n (idStack[idStackIndex] = null);\n}\nfunction restoreSuspendedTreeContext(workInProgress, suspendedContext) {\n idStack[idStackIndex++] = treeContextId;\n idStack[idStackIndex++] = treeContextOverflow;\n idStack[idStackIndex++] = treeContextProvider;\n treeContextId = suspendedContext.id;\n treeContextOverflow = suspendedContext.overflow;\n treeContextProvider = workInProgress;\n}\nvar hydrationParentFiber = null,\n nextHydratableInstance = null,\n isHydrating = !1,\n hydrationErrors = null,\n rootOrSingletonContext = !1,\n HydrationMismatchException = Error(formatProdErrorMessage(519));\nfunction throwOnHydrationMismatch(fiber) {\n var error = Error(\n formatProdErrorMessage(\n 418,\n 1 < arguments.length && void 0 !== arguments[1] && arguments[1]\n ? \"text\"\n : \"HTML\",\n \"\"\n )\n );\n queueHydrationError(createCapturedValueAtFiber(error, fiber));\n throw HydrationMismatchException;\n}\nfunction prepareToHydrateHostInstance(fiber) {\n var instance = fiber.stateNode,\n type = fiber.type,\n props = fiber.memoizedProps;\n instance[internalInstanceKey] = fiber;\n instance[internalPropsKey] = props;\n switch (type) {\n case \"dialog\":\n listenToNonDelegatedEvent(\"cancel\", instance);\n listenToNonDelegatedEvent(\"close\", instance);\n break;\n case \"iframe\":\n case \"object\":\n case \"embed\":\n listenToNonDelegatedEvent(\"load\", instance);\n break;\n case \"video\":\n case \"audio\":\n for (type = 0; type < mediaEventTypes.length; type++)\n listenToNonDelegatedEvent(mediaEventTypes[type], instance);\n break;\n case \"source\":\n listenToNonDelegatedEvent(\"error\", instance);\n break;\n case \"img\":\n case \"image\":\n case \"link\":\n listenToNonDelegatedEvent(\"error\", instance);\n listenToNonDelegatedEvent(\"load\", instance);\n break;\n case \"details\":\n listenToNonDelegatedEvent(\"toggle\", instance);\n break;\n case \"input\":\n listenToNonDelegatedEvent(\"invalid\", instance);\n initInput(\n instance,\n props.value,\n props.defaultValue,\n props.checked,\n props.defaultChecked,\n props.type,\n props.name,\n !0\n );\n break;\n case \"select\":\n listenToNonDelegatedEvent(\"invalid\", instance);\n break;\n case \"textarea\":\n listenToNonDelegatedEvent(\"invalid\", instance),\n initTextarea(instance, props.value, props.defaultValue, props.children);\n }\n type = props.children;\n (\"string\" !== typeof type &&\n \"number\" !== typeof type &&\n \"bigint\" !== typeof type) ||\n instance.textContent === \"\" + type ||\n !0 === props.suppressHydrationWarning ||\n checkForUnmatchedText(instance.textContent, type)\n ? (null != props.popover &&\n (listenToNonDelegatedEvent(\"beforetoggle\", instance),\n listenToNonDelegatedEvent(\"toggle\", instance)),\n null != props.onScroll && listenToNonDelegatedEvent(\"scroll\", instance),\n null != props.onScrollEnd &&\n listenToNonDelegatedEvent(\"scrollend\", instance),\n null != props.onClick && (instance.onclick = noop$1),\n (instance = !0))\n : (instance = !1);\n instance || throwOnHydrationMismatch(fiber, !0);\n}\nfunction popToNextHostParent(fiber) {\n for (hydrationParentFiber = fiber.return; hydrationParentFiber; )\n switch (hydrationParentFiber.tag) {\n case 5:\n case 31:\n case 13:\n rootOrSingletonContext = !1;\n return;\n case 27:\n case 3:\n rootOrSingletonContext = !0;\n return;\n default:\n hydrationParentFiber = hydrationParentFiber.return;\n }\n}\nfunction popHydrationState(fiber) {\n if (fiber !== hydrationParentFiber) return !1;\n if (!isHydrating) return popToNextHostParent(fiber), (isHydrating = !0), !1;\n var tag = fiber.tag,\n JSCompiler_temp;\n if ((JSCompiler_temp = 3 !== tag && 27 !== tag)) {\n if ((JSCompiler_temp = 5 === tag))\n (JSCompiler_temp = fiber.type),\n (JSCompiler_temp =\n !(\"form\" !== JSCompiler_temp && \"button\" !== JSCompiler_temp) ||\n shouldSetTextContent(fiber.type, fiber.memoizedProps));\n JSCompiler_temp = !JSCompiler_temp;\n }\n JSCompiler_temp && nextHydratableInstance && throwOnHydrationMismatch(fiber);\n popToNextHostParent(fiber);\n if (13 === tag) {\n fiber = fiber.memoizedState;\n fiber = null !== fiber ? fiber.dehydrated : null;\n if (!fiber) throw Error(formatProdErrorMessage(317));\n nextHydratableInstance =\n getNextHydratableInstanceAfterHydrationBoundary(fiber);\n } else if (31 === tag) {\n fiber = fiber.memoizedState;\n fiber = null !== fiber ? fiber.dehydrated : null;\n if (!fiber) throw Error(formatProdErrorMessage(317));\n nextHydratableInstance =\n getNextHydratableInstanceAfterHydrationBoundary(fiber);\n } else\n 27 === tag\n ? ((tag = nextHydratableInstance),\n isSingletonScope(fiber.type)\n ? ((fiber = previousHydratableOnEnteringScopedSingleton),\n (previousHydratableOnEnteringScopedSingleton = null),\n (nextHydratableInstance = fiber))\n : (nextHydratableInstance = tag))\n : (nextHydratableInstance = hydrationParentFiber\n ? getNextHydratable(fiber.stateNode.nextSibling)\n : null);\n return !0;\n}\nfunction resetHydrationState() {\n nextHydratableInstance = hydrationParentFiber = null;\n isHydrating = !1;\n}\nfunction upgradeHydrationErrorsToRecoverable() {\n var queuedErrors = hydrationErrors;\n null !== queuedErrors &&\n (null === workInProgressRootRecoverableErrors\n ? (workInProgressRootRecoverableErrors = queuedErrors)\n : workInProgressRootRecoverableErrors.push.apply(\n workInProgressRootRecoverableErrors,\n queuedErrors\n ),\n (hydrationErrors = null));\n return queuedErrors;\n}\nfunction queueHydrationError(error) {\n null === hydrationErrors\n ? (hydrationErrors = [error])\n : hydrationErrors.push(error);\n}\nvar valueCursor = createCursor(null),\n currentlyRenderingFiber$1 = null,\n lastContextDependency = null;\nfunction pushProvider(providerFiber, context, nextValue) {\n push(valueCursor, context._currentValue);\n context._currentValue = nextValue;\n}\nfunction popProvider(context) {\n context._currentValue = valueCursor.current;\n pop(valueCursor);\n}\nfunction scheduleContextWorkOnParentPath(parent, renderLanes, propagationRoot) {\n for (; null !== parent; ) {\n var alternate = parent.alternate;\n (parent.childLanes & renderLanes) !== renderLanes\n ? ((parent.childLanes |= renderLanes),\n null !== alternate && (alternate.childLanes |= renderLanes))\n : null !== alternate &&\n (alternate.childLanes & renderLanes) !== renderLanes &&\n (alternate.childLanes |= renderLanes);\n if (parent === propagationRoot) break;\n parent = parent.return;\n }\n}\nfunction propagateContextChanges(\n workInProgress,\n contexts,\n renderLanes,\n forcePropagateEntireTree\n) {\n var fiber = workInProgress.child;\n null !== fiber && (fiber.return = workInProgress);\n for (; null !== fiber; ) {\n var list = fiber.dependencies;\n if (null !== list) {\n var nextFiber = fiber.child;\n list = list.firstContext;\n a: for (; null !== list; ) {\n var dependency = list;\n list = fiber;\n for (var i = 0; i < contexts.length; i++)\n if (dependency.context === contexts[i]) {\n list.lanes |= renderLanes;\n dependency = list.alternate;\n null !== dependency && (dependency.lanes |= renderLanes);\n scheduleContextWorkOnParentPath(\n list.return,\n renderLanes,\n workInProgress\n );\n forcePropagateEntireTree || (nextFiber = null);\n break a;\n }\n list = dependency.next;\n }\n } else if (18 === fiber.tag) {\n nextFiber = fiber.return;\n if (null === nextFiber) throw Error(formatProdErrorMessage(341));\n nextFiber.lanes |= renderLanes;\n list = nextFiber.alternate;\n null !== list && (list.lanes |= renderLanes);\n scheduleContextWorkOnParentPath(nextFiber, renderLanes, workInProgress);\n nextFiber = null;\n } else nextFiber = fiber.child;\n if (null !== nextFiber) nextFiber.return = fiber;\n else\n for (nextFiber = fiber; null !== nextFiber; ) {\n if (nextFiber === workInProgress) {\n nextFiber = null;\n break;\n }\n fiber = nextFiber.sibling;\n if (null !== fiber) {\n fiber.return = nextFiber.return;\n nextFiber = fiber;\n break;\n }\n nextFiber = nextFiber.return;\n }\n fiber = nextFiber;\n }\n}\nfunction propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n forcePropagateEntireTree\n) {\n current = null;\n for (\n var parent = workInProgress, isInsidePropagationBailout = !1;\n null !== parent;\n\n ) {\n if (!isInsidePropagationBailout)\n if (0 !== (parent.flags & 524288)) isInsidePropagationBailout = !0;\n else if (0 !== (parent.flags & 262144)) break;\n if (10 === parent.tag) {\n var currentParent = parent.alternate;\n if (null === currentParent) throw Error(formatProdErrorMessage(387));\n currentParent = currentParent.memoizedProps;\n if (null !== currentParent) {\n var context = parent.type;\n objectIs(parent.pendingProps.value, currentParent.value) ||\n (null !== current ? current.push(context) : (current = [context]));\n }\n } else if (parent === hostTransitionProviderCursor.current) {\n currentParent = parent.alternate;\n if (null === currentParent) throw Error(formatProdErrorMessage(387));\n currentParent.memoizedState.memoizedState !==\n parent.memoizedState.memoizedState &&\n (null !== current\n ? current.push(HostTransitionContext)\n : (current = [HostTransitionContext]));\n }\n parent = parent.return;\n }\n null !== current &&\n propagateContextChanges(\n workInProgress,\n current,\n renderLanes,\n forcePropagateEntireTree\n );\n workInProgress.flags |= 262144;\n}\nfunction checkIfContextChanged(currentDependencies) {\n for (\n currentDependencies = currentDependencies.firstContext;\n null !== currentDependencies;\n\n ) {\n if (\n !objectIs(\n currentDependencies.context._currentValue,\n currentDependencies.memoizedValue\n )\n )\n return !0;\n currentDependencies = currentDependencies.next;\n }\n return !1;\n}\nfunction prepareToReadContext(workInProgress) {\n currentlyRenderingFiber$1 = workInProgress;\n lastContextDependency = null;\n workInProgress = workInProgress.dependencies;\n null !== workInProgress && (workInProgress.firstContext = null);\n}\nfunction readContext(context) {\n return readContextForConsumer(currentlyRenderingFiber$1, context);\n}\nfunction readContextDuringReconciliation(consumer, context) {\n null === currentlyRenderingFiber$1 && prepareToReadContext(consumer);\n return readContextForConsumer(consumer, context);\n}\nfunction readContextForConsumer(consumer, context) {\n var value = context._currentValue;\n context = { context: context, memoizedValue: value, next: null };\n if (null === lastContextDependency) {\n if (null === consumer) throw Error(formatProdErrorMessage(308));\n lastContextDependency = context;\n consumer.dependencies = { lanes: 0, firstContext: context };\n consumer.flags |= 524288;\n } else lastContextDependency = lastContextDependency.next = context;\n return value;\n}\nvar AbortControllerLocal =\n \"undefined\" !== typeof AbortController\n ? AbortController\n : function () {\n var listeners = [],\n signal = (this.signal = {\n aborted: !1,\n addEventListener: function (type, listener) {\n listeners.push(listener);\n }\n });\n this.abort = function () {\n signal.aborted = !0;\n listeners.forEach(function (listener) {\n return listener();\n });\n };\n },\n scheduleCallback$2 = Scheduler.unstable_scheduleCallback,\n NormalPriority = Scheduler.unstable_NormalPriority,\n CacheContext = {\n $$typeof: REACT_CONTEXT_TYPE,\n Consumer: null,\n Provider: null,\n _currentValue: null,\n _currentValue2: null,\n _threadCount: 0\n };\nfunction createCache() {\n return {\n controller: new AbortControllerLocal(),\n data: new Map(),\n refCount: 0\n };\n}\nfunction releaseCache(cache) {\n cache.refCount--;\n 0 === cache.refCount &&\n scheduleCallback$2(NormalPriority, function () {\n cache.controller.abort();\n });\n}\nvar currentEntangledListeners = null,\n currentEntangledPendingCount = 0,\n currentEntangledLane = 0,\n currentEntangledActionThenable = null;\nfunction entangleAsyncAction(transition, thenable) {\n if (null === currentEntangledListeners) {\n var entangledListeners = (currentEntangledListeners = []);\n currentEntangledPendingCount = 0;\n currentEntangledLane = requestTransitionLane();\n currentEntangledActionThenable = {\n status: \"pending\",\n value: void 0,\n then: function (resolve) {\n entangledListeners.push(resolve);\n }\n };\n }\n currentEntangledPendingCount++;\n thenable.then(pingEngtangledActionScope, pingEngtangledActionScope);\n return thenable;\n}\nfunction pingEngtangledActionScope() {\n if (\n 0 === --currentEntangledPendingCount &&\n null !== currentEntangledListeners\n ) {\n null !== currentEntangledActionThenable &&\n (currentEntangledActionThenable.status = \"fulfilled\");\n var listeners = currentEntangledListeners;\n currentEntangledListeners = null;\n currentEntangledLane = 0;\n currentEntangledActionThenable = null;\n for (var i = 0; i < listeners.length; i++) (0, listeners[i])();\n }\n}\nfunction chainThenableValue(thenable, result) {\n var listeners = [],\n thenableWithOverride = {\n status: \"pending\",\n value: null,\n reason: null,\n then: function (resolve) {\n listeners.push(resolve);\n }\n };\n thenable.then(\n function () {\n thenableWithOverride.status = \"fulfilled\";\n thenableWithOverride.value = result;\n for (var i = 0; i < listeners.length; i++) (0, listeners[i])(result);\n },\n function (error) {\n thenableWithOverride.status = \"rejected\";\n thenableWithOverride.reason = error;\n for (error = 0; error < listeners.length; error++)\n (0, listeners[error])(void 0);\n }\n );\n return thenableWithOverride;\n}\nvar prevOnStartTransitionFinish = ReactSharedInternals.S;\nReactSharedInternals.S = function (transition, returnValue) {\n globalMostRecentTransitionTime = now();\n \"object\" === typeof returnValue &&\n null !== returnValue &&\n \"function\" === typeof returnValue.then &&\n entangleAsyncAction(transition, returnValue);\n null !== prevOnStartTransitionFinish &&\n prevOnStartTransitionFinish(transition, returnValue);\n};\nvar resumedCache = createCursor(null);\nfunction peekCacheFromPool() {\n var cacheResumedFromPreviousRender = resumedCache.current;\n return null !== cacheResumedFromPreviousRender\n ? cacheResumedFromPreviousRender\n : workInProgressRoot.pooledCache;\n}\nfunction pushTransition(offscreenWorkInProgress, prevCachePool) {\n null === prevCachePool\n ? push(resumedCache, resumedCache.current)\n : push(resumedCache, prevCachePool.pool);\n}\nfunction getSuspendedCache() {\n var cacheFromPool = peekCacheFromPool();\n return null === cacheFromPool\n ? null\n : { parent: CacheContext._currentValue, pool: cacheFromPool };\n}\nvar SuspenseException = Error(formatProdErrorMessage(460)),\n SuspenseyCommitException = Error(formatProdErrorMessage(474)),\n SuspenseActionException = Error(formatProdErrorMessage(542)),\n noopSuspenseyCommitThenable = { then: function () {} };\nfunction isThenableResolved(thenable) {\n thenable = thenable.status;\n return \"fulfilled\" === thenable || \"rejected\" === thenable;\n}\nfunction trackUsedThenable(thenableState, thenable, index) {\n index = thenableState[index];\n void 0 === index\n ? thenableState.push(thenable)\n : index !== thenable && (thenable.then(noop$1, noop$1), (thenable = index));\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw (\n ((thenableState = thenable.reason),\n checkIfUseWrappedInAsyncCatch(thenableState),\n thenableState)\n );\n default:\n if (\"string\" === typeof thenable.status) thenable.then(noop$1, noop$1);\n else {\n thenableState = workInProgressRoot;\n if (null !== thenableState && 100 < thenableState.shellSuspendCounter)\n throw Error(formatProdErrorMessage(482));\n thenableState = thenable;\n thenableState.status = \"pending\";\n thenableState.then(\n function (fulfilledValue) {\n if (\"pending\" === thenable.status) {\n var fulfilledThenable = thenable;\n fulfilledThenable.status = \"fulfilled\";\n fulfilledThenable.value = fulfilledValue;\n }\n },\n function (error) {\n if (\"pending\" === thenable.status) {\n var rejectedThenable = thenable;\n rejectedThenable.status = \"rejected\";\n rejectedThenable.reason = error;\n }\n }\n );\n }\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw (\n ((thenableState = thenable.reason),\n checkIfUseWrappedInAsyncCatch(thenableState),\n thenableState)\n );\n }\n suspendedThenable = thenable;\n throw SuspenseException;\n }\n}\nfunction resolveLazy(lazyType) {\n try {\n var init = lazyType._init;\n return init(lazyType._payload);\n } catch (x) {\n if (null !== x && \"object\" === typeof x && \"function\" === typeof x.then)\n throw ((suspendedThenable = x), SuspenseException);\n throw x;\n }\n}\nvar suspendedThenable = null;\nfunction getSuspendedThenable() {\n if (null === suspendedThenable) throw Error(formatProdErrorMessage(459));\n var thenable = suspendedThenable;\n suspendedThenable = null;\n return thenable;\n}\nfunction checkIfUseWrappedInAsyncCatch(rejectedReason) {\n if (\n rejectedReason === SuspenseException ||\n rejectedReason === SuspenseActionException\n )\n throw Error(formatProdErrorMessage(483));\n}\nvar thenableState$1 = null,\n thenableIndexCounter$1 = 0;\nfunction unwrapThenable(thenable) {\n var index = thenableIndexCounter$1;\n thenableIndexCounter$1 += 1;\n null === thenableState$1 && (thenableState$1 = []);\n return trackUsedThenable(thenableState$1, thenable, index);\n}\nfunction coerceRef(workInProgress, element) {\n element = element.props.ref;\n workInProgress.ref = void 0 !== element ? element : null;\n}\nfunction throwOnInvalidObjectTypeImpl(returnFiber, newChild) {\n if (newChild.$$typeof === REACT_LEGACY_ELEMENT_TYPE)\n throw Error(formatProdErrorMessage(525));\n returnFiber = Object.prototype.toString.call(newChild);\n throw Error(\n formatProdErrorMessage(\n 31,\n \"[object Object]\" === returnFiber\n ? \"object with keys {\" + Object.keys(newChild).join(\", \") + \"}\"\n : returnFiber\n )\n );\n}\nfunction createChildReconciler(shouldTrackSideEffects) {\n function deleteChild(returnFiber, childToDelete) {\n if (shouldTrackSideEffects) {\n var deletions = returnFiber.deletions;\n null === deletions\n ? ((returnFiber.deletions = [childToDelete]), (returnFiber.flags |= 16))\n : deletions.push(childToDelete);\n }\n }\n function deleteRemainingChildren(returnFiber, currentFirstChild) {\n if (!shouldTrackSideEffects) return null;\n for (; null !== currentFirstChild; )\n deleteChild(returnFiber, currentFirstChild),\n (currentFirstChild = currentFirstChild.sibling);\n return null;\n }\n function mapRemainingChildren(currentFirstChild) {\n for (var existingChildren = new Map(); null !== currentFirstChild; )\n null !== currentFirstChild.key\n ? existingChildren.set(currentFirstChild.key, currentFirstChild)\n : existingChildren.set(currentFirstChild.index, currentFirstChild),\n (currentFirstChild = currentFirstChild.sibling);\n return existingChildren;\n }\n function useFiber(fiber, pendingProps) {\n fiber = createWorkInProgress(fiber, pendingProps);\n fiber.index = 0;\n fiber.sibling = null;\n return fiber;\n }\n function placeChild(newFiber, lastPlacedIndex, newIndex) {\n newFiber.index = newIndex;\n if (!shouldTrackSideEffects)\n return (newFiber.flags |= 1048576), lastPlacedIndex;\n newIndex = newFiber.alternate;\n if (null !== newIndex)\n return (\n (newIndex = newIndex.index),\n newIndex < lastPlacedIndex\n ? ((newFiber.flags |= 67108866), lastPlacedIndex)\n : newIndex\n );\n newFiber.flags |= 67108866;\n return lastPlacedIndex;\n }\n function placeSingleChild(newFiber) {\n shouldTrackSideEffects &&\n null === newFiber.alternate &&\n (newFiber.flags |= 67108866);\n return newFiber;\n }\n function updateTextNode(returnFiber, current, textContent, lanes) {\n if (null === current || 6 !== current.tag)\n return (\n (current = createFiberFromText(textContent, returnFiber.mode, lanes)),\n (current.return = returnFiber),\n current\n );\n current = useFiber(current, textContent);\n current.return = returnFiber;\n return current;\n }\n function updateElement(returnFiber, current, element, lanes) {\n var elementType = element.type;\n if (elementType === REACT_FRAGMENT_TYPE)\n return updateFragment(\n returnFiber,\n current,\n element.props.children,\n lanes,\n element.key\n );\n if (\n null !== current &&\n (current.elementType === elementType ||\n (\"object\" === typeof elementType &&\n null !== elementType &&\n elementType.$$typeof === REACT_LAZY_TYPE &&\n resolveLazy(elementType) === current.type))\n )\n return (\n (current = useFiber(current, element.props)),\n coerceRef(current, element),\n (current.return = returnFiber),\n current\n );\n current = createFiberFromTypeAndProps(\n element.type,\n element.key,\n element.props,\n null,\n returnFiber.mode,\n lanes\n );\n coerceRef(current, element);\n current.return = returnFiber;\n return current;\n }\n function updatePortal(returnFiber, current, portal, lanes) {\n if (\n null === current ||\n 4 !== current.tag ||\n current.stateNode.containerInfo !== portal.containerInfo ||\n current.stateNode.implementation !== portal.implementation\n )\n return (\n (current = createFiberFromPortal(portal, returnFiber.mode, lanes)),\n (current.return = returnFiber),\n current\n );\n current = useFiber(current, portal.children || []);\n current.return = returnFiber;\n return current;\n }\n function updateFragment(returnFiber, current, fragment, lanes, key) {\n if (null === current || 7 !== current.tag)\n return (\n (current = createFiberFromFragment(\n fragment,\n returnFiber.mode,\n lanes,\n key\n )),\n (current.return = returnFiber),\n current\n );\n current = useFiber(current, fragment);\n current.return = returnFiber;\n return current;\n }\n function createChild(returnFiber, newChild, lanes) {\n if (\n (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n )\n return (\n (newChild = createFiberFromText(\n \"\" + newChild,\n returnFiber.mode,\n lanes\n )),\n (newChild.return = returnFiber),\n newChild\n );\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return (\n (lanes = createFiberFromTypeAndProps(\n newChild.type,\n newChild.key,\n newChild.props,\n null,\n returnFiber.mode,\n lanes\n )),\n coerceRef(lanes, newChild),\n (lanes.return = returnFiber),\n lanes\n );\n case REACT_PORTAL_TYPE:\n return (\n (newChild = createFiberFromPortal(\n newChild,\n returnFiber.mode,\n lanes\n )),\n (newChild.return = returnFiber),\n newChild\n );\n case REACT_LAZY_TYPE:\n return (\n (newChild = resolveLazy(newChild)),\n createChild(returnFiber, newChild, lanes)\n );\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild))\n return (\n (newChild = createFiberFromFragment(\n newChild,\n returnFiber.mode,\n lanes,\n null\n )),\n (newChild.return = returnFiber),\n newChild\n );\n if (\"function\" === typeof newChild.then)\n return createChild(returnFiber, unwrapThenable(newChild), lanes);\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return createChild(\n returnFiber,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n }\n return null;\n }\n function updateSlot(returnFiber, oldFiber, newChild, lanes) {\n var key = null !== oldFiber ? oldFiber.key : null;\n if (\n (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n )\n return null !== key\n ? null\n : updateTextNode(returnFiber, oldFiber, \"\" + newChild, lanes);\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return newChild.key === key\n ? updateElement(returnFiber, oldFiber, newChild, lanes)\n : null;\n case REACT_PORTAL_TYPE:\n return newChild.key === key\n ? updatePortal(returnFiber, oldFiber, newChild, lanes)\n : null;\n case REACT_LAZY_TYPE:\n return (\n (newChild = resolveLazy(newChild)),\n updateSlot(returnFiber, oldFiber, newChild, lanes)\n );\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild))\n return null !== key\n ? null\n : updateFragment(returnFiber, oldFiber, newChild, lanes, null);\n if (\"function\" === typeof newChild.then)\n return updateSlot(\n returnFiber,\n oldFiber,\n unwrapThenable(newChild),\n lanes\n );\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return updateSlot(\n returnFiber,\n oldFiber,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n }\n return null;\n }\n function updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n newChild,\n lanes\n ) {\n if (\n (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n )\n return (\n (existingChildren = existingChildren.get(newIdx) || null),\n updateTextNode(returnFiber, existingChildren, \"\" + newChild, lanes)\n );\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return (\n (existingChildren =\n existingChildren.get(\n null === newChild.key ? newIdx : newChild.key\n ) || null),\n updateElement(returnFiber, existingChildren, newChild, lanes)\n );\n case REACT_PORTAL_TYPE:\n return (\n (existingChildren =\n existingChildren.get(\n null === newChild.key ? newIdx : newChild.key\n ) || null),\n updatePortal(returnFiber, existingChildren, newChild, lanes)\n );\n case REACT_LAZY_TYPE:\n return (\n (newChild = resolveLazy(newChild)),\n updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n newChild,\n lanes\n )\n );\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild))\n return (\n (existingChildren = existingChildren.get(newIdx) || null),\n updateFragment(returnFiber, existingChildren, newChild, lanes, null)\n );\n if (\"function\" === typeof newChild.then)\n return updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n unwrapThenable(newChild),\n lanes\n );\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n }\n return null;\n }\n function reconcileChildrenArray(\n returnFiber,\n currentFirstChild,\n newChildren,\n lanes\n ) {\n for (\n var resultingFirstChild = null,\n previousNewFiber = null,\n oldFiber = currentFirstChild,\n newIdx = (currentFirstChild = 0),\n nextOldFiber = null;\n null !== oldFiber && newIdx < newChildren.length;\n newIdx++\n ) {\n oldFiber.index > newIdx\n ? ((nextOldFiber = oldFiber), (oldFiber = null))\n : (nextOldFiber = oldFiber.sibling);\n var newFiber = updateSlot(\n returnFiber,\n oldFiber,\n newChildren[newIdx],\n lanes\n );\n if (null === newFiber) {\n null === oldFiber && (oldFiber = nextOldFiber);\n break;\n }\n shouldTrackSideEffects &&\n oldFiber &&\n null === newFiber.alternate &&\n deleteChild(returnFiber, oldFiber);\n currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n null === previousNewFiber\n ? (resultingFirstChild = newFiber)\n : (previousNewFiber.sibling = newFiber);\n previousNewFiber = newFiber;\n oldFiber = nextOldFiber;\n }\n if (newIdx === newChildren.length)\n return (\n deleteRemainingChildren(returnFiber, oldFiber),\n isHydrating && pushTreeFork(returnFiber, newIdx),\n resultingFirstChild\n );\n if (null === oldFiber) {\n for (; newIdx < newChildren.length; newIdx++)\n (oldFiber = createChild(returnFiber, newChildren[newIdx], lanes)),\n null !== oldFiber &&\n ((currentFirstChild = placeChild(\n oldFiber,\n currentFirstChild,\n newIdx\n )),\n null === previousNewFiber\n ? (resultingFirstChild = oldFiber)\n : (previousNewFiber.sibling = oldFiber),\n (previousNewFiber = oldFiber));\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n for (\n oldFiber = mapRemainingChildren(oldFiber);\n newIdx < newChildren.length;\n newIdx++\n )\n (nextOldFiber = updateFromMap(\n oldFiber,\n returnFiber,\n newIdx,\n newChildren[newIdx],\n lanes\n )),\n null !== nextOldFiber &&\n (shouldTrackSideEffects &&\n null !== nextOldFiber.alternate &&\n oldFiber.delete(\n null === nextOldFiber.key ? newIdx : nextOldFiber.key\n ),\n (currentFirstChild = placeChild(\n nextOldFiber,\n currentFirstChild,\n newIdx\n )),\n null === previousNewFiber\n ? (resultingFirstChild = nextOldFiber)\n : (previousNewFiber.sibling = nextOldFiber),\n (previousNewFiber = nextOldFiber));\n shouldTrackSideEffects &&\n oldFiber.forEach(function (child) {\n return deleteChild(returnFiber, child);\n });\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n function reconcileChildrenIterator(\n returnFiber,\n currentFirstChild,\n newChildren,\n lanes\n ) {\n if (null == newChildren) throw Error(formatProdErrorMessage(151));\n for (\n var resultingFirstChild = null,\n previousNewFiber = null,\n oldFiber = currentFirstChild,\n newIdx = (currentFirstChild = 0),\n nextOldFiber = null,\n step = newChildren.next();\n null !== oldFiber && !step.done;\n newIdx++, step = newChildren.next()\n ) {\n oldFiber.index > newIdx\n ? ((nextOldFiber = oldFiber), (oldFiber = null))\n : (nextOldFiber = oldFiber.sibling);\n var newFiber = updateSlot(returnFiber, oldFiber, step.value, lanes);\n if (null === newFiber) {\n null === oldFiber && (oldFiber = nextOldFiber);\n break;\n }\n shouldTrackSideEffects &&\n oldFiber &&\n null === newFiber.alternate &&\n deleteChild(returnFiber, oldFiber);\n currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n null === previousNewFiber\n ? (resultingFirstChild = newFiber)\n : (previousNewFiber.sibling = newFiber);\n previousNewFiber = newFiber;\n oldFiber = nextOldFiber;\n }\n if (step.done)\n return (\n deleteRemainingChildren(returnFiber, oldFiber),\n isHydrating && pushTreeFork(returnFiber, newIdx),\n resultingFirstChild\n );\n if (null === oldFiber) {\n for (; !step.done; newIdx++, step = newChildren.next())\n (step = createChild(returnFiber, step.value, lanes)),\n null !== step &&\n ((currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n null === previousNewFiber\n ? (resultingFirstChild = step)\n : (previousNewFiber.sibling = step),\n (previousNewFiber = step));\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n for (\n oldFiber = mapRemainingChildren(oldFiber);\n !step.done;\n newIdx++, step = newChildren.next()\n )\n (step = updateFromMap(oldFiber, returnFiber, newIdx, step.value, lanes)),\n null !== step &&\n (shouldTrackSideEffects &&\n null !== step.alternate &&\n oldFiber.delete(null === step.key ? newIdx : step.key),\n (currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n null === previousNewFiber\n ? (resultingFirstChild = step)\n : (previousNewFiber.sibling = step),\n (previousNewFiber = step));\n shouldTrackSideEffects &&\n oldFiber.forEach(function (child) {\n return deleteChild(returnFiber, child);\n });\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n function reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n ) {\n \"object\" === typeof newChild &&\n null !== newChild &&\n newChild.type === REACT_FRAGMENT_TYPE &&\n null === newChild.key &&\n (newChild = newChild.props.children);\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n a: {\n for (var key = newChild.key; null !== currentFirstChild; ) {\n if (currentFirstChild.key === key) {\n key = newChild.type;\n if (key === REACT_FRAGMENT_TYPE) {\n if (7 === currentFirstChild.tag) {\n deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n );\n lanes = useFiber(\n currentFirstChild,\n newChild.props.children\n );\n lanes.return = returnFiber;\n returnFiber = lanes;\n break a;\n }\n } else if (\n currentFirstChild.elementType === key ||\n (\"object\" === typeof key &&\n null !== key &&\n key.$$typeof === REACT_LAZY_TYPE &&\n resolveLazy(key) === currentFirstChild.type)\n ) {\n deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n );\n lanes = useFiber(currentFirstChild, newChild.props);\n coerceRef(lanes, newChild);\n lanes.return = returnFiber;\n returnFiber = lanes;\n break a;\n }\n deleteRemainingChildren(returnFiber, currentFirstChild);\n break;\n } else deleteChild(returnFiber, currentFirstChild);\n currentFirstChild = currentFirstChild.sibling;\n }\n newChild.type === REACT_FRAGMENT_TYPE\n ? ((lanes = createFiberFromFragment(\n newChild.props.children,\n returnFiber.mode,\n lanes,\n newChild.key\n )),\n (lanes.return = returnFiber),\n (returnFiber = lanes))\n : ((lanes = createFiberFromTypeAndProps(\n newChild.type,\n newChild.key,\n newChild.props,\n null,\n returnFiber.mode,\n lanes\n )),\n coerceRef(lanes, newChild),\n (lanes.return = returnFiber),\n (returnFiber = lanes));\n }\n return placeSingleChild(returnFiber);\n case REACT_PORTAL_TYPE:\n a: {\n for (key = newChild.key; null !== currentFirstChild; ) {\n if (currentFirstChild.key === key)\n if (\n 4 === currentFirstChild.tag &&\n currentFirstChild.stateNode.containerInfo ===\n newChild.containerInfo &&\n currentFirstChild.stateNode.implementation ===\n newChild.implementation\n ) {\n deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n );\n lanes = useFiber(currentFirstChild, newChild.children || []);\n lanes.return = returnFiber;\n returnFiber = lanes;\n break a;\n } else {\n deleteRemainingChildren(returnFiber, currentFirstChild);\n break;\n }\n else deleteChild(returnFiber, currentFirstChild);\n currentFirstChild = currentFirstChild.sibling;\n }\n lanes = createFiberFromPortal(newChild, returnFiber.mode, lanes);\n lanes.return = returnFiber;\n returnFiber = lanes;\n }\n return placeSingleChild(returnFiber);\n case REACT_LAZY_TYPE:\n return (\n (newChild = resolveLazy(newChild)),\n reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n )\n );\n }\n if (isArrayImpl(newChild))\n return reconcileChildrenArray(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n );\n if (getIteratorFn(newChild)) {\n key = getIteratorFn(newChild);\n if (\"function\" !== typeof key) throw Error(formatProdErrorMessage(150));\n newChild = key.call(newChild);\n return reconcileChildrenIterator(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n );\n }\n if (\"function\" === typeof newChild.then)\n return reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n unwrapThenable(newChild),\n lanes\n );\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n }\n return (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n ? ((newChild = \"\" + newChild),\n null !== currentFirstChild && 6 === currentFirstChild.tag\n ? (deleteRemainingChildren(returnFiber, currentFirstChild.sibling),\n (lanes = useFiber(currentFirstChild, newChild)),\n (lanes.return = returnFiber),\n (returnFiber = lanes))\n : (deleteRemainingChildren(returnFiber, currentFirstChild),\n (lanes = createFiberFromText(newChild, returnFiber.mode, lanes)),\n (lanes.return = returnFiber),\n (returnFiber = lanes)),\n placeSingleChild(returnFiber))\n : deleteRemainingChildren(returnFiber, currentFirstChild);\n }\n return function (returnFiber, currentFirstChild, newChild, lanes) {\n try {\n thenableIndexCounter$1 = 0;\n var firstChildFiber = reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n );\n thenableState$1 = null;\n return firstChildFiber;\n } catch (x) {\n if (x === SuspenseException || x === SuspenseActionException) throw x;\n var fiber = createFiberImplClass(29, x, null, returnFiber.mode);\n fiber.lanes = lanes;\n fiber.return = returnFiber;\n return fiber;\n } finally {\n }\n };\n}\nvar reconcileChildFibers = createChildReconciler(!0),\n mountChildFibers = createChildReconciler(!1),\n hasForceUpdate = !1;\nfunction initializeUpdateQueue(fiber) {\n fiber.updateQueue = {\n baseState: fiber.memoizedState,\n firstBaseUpdate: null,\n lastBaseUpdate: null,\n shared: { pending: null, lanes: 0, hiddenCallbacks: null },\n callbacks: null\n };\n}\nfunction cloneUpdateQueue(current, workInProgress) {\n current = current.updateQueue;\n workInProgress.updateQueue === current &&\n (workInProgress.updateQueue = {\n baseState: current.baseState,\n firstBaseUpdate: current.firstBaseUpdate,\n lastBaseUpdate: current.lastBaseUpdate,\n shared: current.shared,\n callbacks: null\n });\n}\nfunction createUpdate(lane) {\n return { lane: lane, tag: 0, payload: null, callback: null, next: null };\n}\nfunction enqueueUpdate(fiber, update, lane) {\n var updateQueue = fiber.updateQueue;\n if (null === updateQueue) return null;\n updateQueue = updateQueue.shared;\n if (0 !== (executionContext & 2)) {\n var pending = updateQueue.pending;\n null === pending\n ? (update.next = update)\n : ((update.next = pending.next), (pending.next = update));\n updateQueue.pending = update;\n update = getRootForUpdatedFiber(fiber);\n markUpdateLaneFromFiberToRoot(fiber, null, lane);\n return update;\n }\n enqueueUpdate$1(fiber, updateQueue, update, lane);\n return getRootForUpdatedFiber(fiber);\n}\nfunction entangleTransitions(root, fiber, lane) {\n fiber = fiber.updateQueue;\n if (null !== fiber && ((fiber = fiber.shared), 0 !== (lane & 4194048))) {\n var queueLanes = fiber.lanes;\n queueLanes &= root.pendingLanes;\n lane |= queueLanes;\n fiber.lanes = lane;\n markRootEntangled(root, lane);\n }\n}\nfunction enqueueCapturedUpdate(workInProgress, capturedUpdate) {\n var queue = workInProgress.updateQueue,\n current = workInProgress.alternate;\n if (\n null !== current &&\n ((current = current.updateQueue), queue === current)\n ) {\n var newFirst = null,\n newLast = null;\n queue = queue.firstBaseUpdate;\n if (null !== queue) {\n do {\n var clone = {\n lane: queue.lane,\n tag: queue.tag,\n payload: queue.payload,\n callback: null,\n next: null\n };\n null === newLast\n ? (newFirst = newLast = clone)\n : (newLast = newLast.next = clone);\n queue = queue.next;\n } while (null !== queue);\n null === newLast\n ? (newFirst = newLast = capturedUpdate)\n : (newLast = newLast.next = capturedUpdate);\n } else newFirst = newLast = capturedUpdate;\n queue = {\n baseState: current.baseState,\n firstBaseUpdate: newFirst,\n lastBaseUpdate: newLast,\n shared: current.shared,\n callbacks: current.callbacks\n };\n workInProgress.updateQueue = queue;\n return;\n }\n workInProgress = queue.lastBaseUpdate;\n null === workInProgress\n ? (queue.firstBaseUpdate = capturedUpdate)\n : (workInProgress.next = capturedUpdate);\n queue.lastBaseUpdate = capturedUpdate;\n}\nvar didReadFromEntangledAsyncAction = !1;\nfunction suspendIfUpdateReadFromEntangledAsyncAction() {\n if (didReadFromEntangledAsyncAction) {\n var entangledActionThenable = currentEntangledActionThenable;\n if (null !== entangledActionThenable) throw entangledActionThenable;\n }\n}\nfunction processUpdateQueue(\n workInProgress$jscomp$0,\n props,\n instance$jscomp$0,\n renderLanes\n) {\n didReadFromEntangledAsyncAction = !1;\n var queue = workInProgress$jscomp$0.updateQueue;\n hasForceUpdate = !1;\n var firstBaseUpdate = queue.firstBaseUpdate,\n lastBaseUpdate = queue.lastBaseUpdate,\n pendingQueue = queue.shared.pending;\n if (null !== pendingQueue) {\n queue.shared.pending = null;\n var lastPendingUpdate = pendingQueue,\n firstPendingUpdate = lastPendingUpdate.next;\n lastPendingUpdate.next = null;\n null === lastBaseUpdate\n ? (firstBaseUpdate = firstPendingUpdate)\n : (lastBaseUpdate.next = firstPendingUpdate);\n lastBaseUpdate = lastPendingUpdate;\n var current = workInProgress$jscomp$0.alternate;\n null !== current &&\n ((current = current.updateQueue),\n (pendingQueue = current.lastBaseUpdate),\n pendingQueue !== lastBaseUpdate &&\n (null === pendingQueue\n ? (current.firstBaseUpdate = firstPendingUpdate)\n : (pendingQueue.next = firstPendingUpdate),\n (current.lastBaseUpdate = lastPendingUpdate)));\n }\n if (null !== firstBaseUpdate) {\n var newState = queue.baseState;\n lastBaseUpdate = 0;\n current = firstPendingUpdate = lastPendingUpdate = null;\n pendingQueue = firstBaseUpdate;\n do {\n var updateLane = pendingQueue.lane & -536870913,\n isHiddenUpdate = updateLane !== pendingQueue.lane;\n if (\n isHiddenUpdate\n ? (workInProgressRootRenderLanes & updateLane) === updateLane\n : (renderLanes & updateLane) === updateLane\n ) {\n 0 !== updateLane &&\n updateLane === currentEntangledLane &&\n (didReadFromEntangledAsyncAction = !0);\n null !== current &&\n (current = current.next =\n {\n lane: 0,\n tag: pendingQueue.tag,\n payload: pendingQueue.payload,\n callback: null,\n next: null\n });\n a: {\n var workInProgress = workInProgress$jscomp$0,\n update = pendingQueue;\n updateLane = props;\n var instance = instance$jscomp$0;\n switch (update.tag) {\n case 1:\n workInProgress = update.payload;\n if (\"function\" === typeof workInProgress) {\n newState = workInProgress.call(instance, newState, updateLane);\n break a;\n }\n newState = workInProgress;\n break a;\n case 3:\n workInProgress.flags = (workInProgress.flags & -65537) | 128;\n case 0:\n workInProgress = update.payload;\n updateLane =\n \"function\" === typeof workInProgress\n ? workInProgress.call(instance, newState, updateLane)\n : workInProgress;\n if (null === updateLane || void 0 === updateLane) break a;\n newState = assign({}, newState, updateLane);\n break a;\n case 2:\n hasForceUpdate = !0;\n }\n }\n updateLane = pendingQueue.callback;\n null !== updateLane &&\n ((workInProgress$jscomp$0.flags |= 64),\n isHiddenUpdate && (workInProgress$jscomp$0.flags |= 8192),\n (isHiddenUpdate = queue.callbacks),\n null === isHiddenUpdate\n ? (queue.callbacks = [updateLane])\n : isHiddenUpdate.push(updateLane));\n } else\n (isHiddenUpdate = {\n lane: updateLane,\n tag: pendingQueue.tag,\n payload: pendingQueue.payload,\n callback: pendingQueue.callback,\n next: null\n }),\n null === current\n ? ((firstPendingUpdate = current = isHiddenUpdate),\n (lastPendingUpdate = newState))\n : (current = current.next = isHiddenUpdate),\n (lastBaseUpdate |= updateLane);\n pendingQueue = pendingQueue.next;\n if (null === pendingQueue)\n if (((pendingQueue = queue.shared.pending), null === pendingQueue))\n break;\n else\n (isHiddenUpdate = pendingQueue),\n (pendingQueue = isHiddenUpdate.next),\n (isHiddenUpdate.next = null),\n (queue.lastBaseUpdate = isHiddenUpdate),\n (queue.shared.pending = null);\n } while (1);\n null === current && (lastPendingUpdate = newState);\n queue.baseState = lastPendingUpdate;\n queue.firstBaseUpdate = firstPendingUpdate;\n queue.lastBaseUpdate = current;\n null === firstBaseUpdate && (queue.shared.lanes = 0);\n workInProgressRootSkippedLanes |= lastBaseUpdate;\n workInProgress$jscomp$0.lanes = lastBaseUpdate;\n workInProgress$jscomp$0.memoizedState = newState;\n }\n}\nfunction callCallback(callback, context) {\n if (\"function\" !== typeof callback)\n throw Error(formatProdErrorMessage(191, callback));\n callback.call(context);\n}\nfunction commitCallbacks(updateQueue, context) {\n var callbacks = updateQueue.callbacks;\n if (null !== callbacks)\n for (\n updateQueue.callbacks = null, updateQueue = 0;\n updateQueue < callbacks.length;\n updateQueue++\n )\n callCallback(callbacks[updateQueue], context);\n}\nvar currentTreeHiddenStackCursor = createCursor(null),\n prevEntangledRenderLanesCursor = createCursor(0);\nfunction pushHiddenContext(fiber, context) {\n fiber = entangledRenderLanes;\n push(prevEntangledRenderLanesCursor, fiber);\n push(currentTreeHiddenStackCursor, context);\n entangledRenderLanes = fiber | context.baseLanes;\n}\nfunction reuseHiddenContextOnStack() {\n push(prevEntangledRenderLanesCursor, entangledRenderLanes);\n push(currentTreeHiddenStackCursor, currentTreeHiddenStackCursor.current);\n}\nfunction popHiddenContext() {\n entangledRenderLanes = prevEntangledRenderLanesCursor.current;\n pop(currentTreeHiddenStackCursor);\n pop(prevEntangledRenderLanesCursor);\n}\nvar suspenseHandlerStackCursor = createCursor(null),\n shellBoundary = null;\nfunction pushPrimaryTreeSuspenseHandler(handler) {\n var current = handler.alternate;\n push(suspenseStackCursor, suspenseStackCursor.current & 1);\n push(suspenseHandlerStackCursor, handler);\n null === shellBoundary &&\n (null === current || null !== currentTreeHiddenStackCursor.current\n ? (shellBoundary = handler)\n : null !== current.memoizedState && (shellBoundary = handler));\n}\nfunction pushDehydratedActivitySuspenseHandler(fiber) {\n push(suspenseStackCursor, suspenseStackCursor.current);\n push(suspenseHandlerStackCursor, fiber);\n null === shellBoundary && (shellBoundary = fiber);\n}\nfunction pushOffscreenSuspenseHandler(fiber) {\n 22 === fiber.tag\n ? (push(suspenseStackCursor, suspenseStackCursor.current),\n push(suspenseHandlerStackCursor, fiber),\n null === shellBoundary && (shellBoundary = fiber))\n : reuseSuspenseHandlerOnStack(fiber);\n}\nfunction reuseSuspenseHandlerOnStack() {\n push(suspenseStackCursor, suspenseStackCursor.current);\n push(suspenseHandlerStackCursor, suspenseHandlerStackCursor.current);\n}\nfunction popSuspenseHandler(fiber) {\n pop(suspenseHandlerStackCursor);\n shellBoundary === fiber && (shellBoundary = null);\n pop(suspenseStackCursor);\n}\nvar suspenseStackCursor = createCursor(0);\nfunction findFirstSuspended(row) {\n for (var node = row; null !== node; ) {\n if (13 === node.tag) {\n var state = node.memoizedState;\n if (\n null !== state &&\n ((state = state.dehydrated),\n null === state ||\n isSuspenseInstancePending(state) ||\n isSuspenseInstanceFallback(state))\n )\n return node;\n } else if (\n 19 === node.tag &&\n (\"forwards\" === node.memoizedProps.revealOrder ||\n \"backwards\" === node.memoizedProps.revealOrder ||\n \"unstable_legacy-backwards\" === node.memoizedProps.revealOrder ||\n \"together\" === node.memoizedProps.revealOrder)\n ) {\n if (0 !== (node.flags & 128)) return node;\n } else if (null !== node.child) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n if (node === row) break;\n for (; null === node.sibling; ) {\n if (null === node.return || node.return === row) return null;\n node = node.return;\n }\n node.sibling.return = node.return;\n node = node.sibling;\n }\n return null;\n}\nvar renderLanes = 0,\n currentlyRenderingFiber = null,\n currentHook = null,\n workInProgressHook = null,\n didScheduleRenderPhaseUpdate = !1,\n didScheduleRenderPhaseUpdateDuringThisPass = !1,\n shouldDoubleInvokeUserFnsInHooksDEV = !1,\n localIdCounter = 0,\n thenableIndexCounter = 0,\n thenableState = null,\n globalClientIdCounter = 0;\nfunction throwInvalidHookError() {\n throw Error(formatProdErrorMessage(321));\n}\nfunction areHookInputsEqual(nextDeps, prevDeps) {\n if (null === prevDeps) return !1;\n for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++)\n if (!objectIs(nextDeps[i], prevDeps[i])) return !1;\n return !0;\n}\nfunction renderWithHooks(\n current,\n workInProgress,\n Component,\n props,\n secondArg,\n nextRenderLanes\n) {\n renderLanes = nextRenderLanes;\n currentlyRenderingFiber = workInProgress;\n workInProgress.memoizedState = null;\n workInProgress.updateQueue = null;\n workInProgress.lanes = 0;\n ReactSharedInternals.H =\n null === current || null === current.memoizedState\n ? HooksDispatcherOnMount\n : HooksDispatcherOnUpdate;\n shouldDoubleInvokeUserFnsInHooksDEV = !1;\n nextRenderLanes = Component(props, secondArg);\n shouldDoubleInvokeUserFnsInHooksDEV = !1;\n didScheduleRenderPhaseUpdateDuringThisPass &&\n (nextRenderLanes = renderWithHooksAgain(\n workInProgress,\n Component,\n props,\n secondArg\n ));\n finishRenderingHooks(current);\n return nextRenderLanes;\n}\nfunction finishRenderingHooks(current) {\n ReactSharedInternals.H = ContextOnlyDispatcher;\n var didRenderTooFewHooks = null !== currentHook && null !== currentHook.next;\n renderLanes = 0;\n workInProgressHook = currentHook = currentlyRenderingFiber = null;\n didScheduleRenderPhaseUpdate = !1;\n thenableIndexCounter = 0;\n thenableState = null;\n if (didRenderTooFewHooks) throw Error(formatProdErrorMessage(300));\n null === current ||\n didReceiveUpdate ||\n ((current = current.dependencies),\n null !== current &&\n checkIfContextChanged(current) &&\n (didReceiveUpdate = !0));\n}\nfunction renderWithHooksAgain(workInProgress, Component, props, secondArg) {\n currentlyRenderingFiber = workInProgress;\n var numberOfReRenders = 0;\n do {\n didScheduleRenderPhaseUpdateDuringThisPass && (thenableState = null);\n thenableIndexCounter = 0;\n didScheduleRenderPhaseUpdateDuringThisPass = !1;\n if (25 <= numberOfReRenders) throw Error(formatProdErrorMessage(301));\n numberOfReRenders += 1;\n workInProgressHook = currentHook = null;\n if (null != workInProgress.updateQueue) {\n var children = workInProgress.updateQueue;\n children.lastEffect = null;\n children.events = null;\n children.stores = null;\n null != children.memoCache && (children.memoCache.index = 0);\n }\n ReactSharedInternals.H = HooksDispatcherOnRerender;\n children = Component(props, secondArg);\n } while (didScheduleRenderPhaseUpdateDuringThisPass);\n return children;\n}\nfunction TransitionAwareHostComponent() {\n var dispatcher = ReactSharedInternals.H,\n maybeThenable = dispatcher.useState()[0];\n maybeThenable =\n \"function\" === typeof maybeThenable.then\n ? useThenable(maybeThenable)\n : maybeThenable;\n dispatcher = dispatcher.useState()[0];\n (null !== currentHook ? currentHook.memoizedState : null) !== dispatcher &&\n (currentlyRenderingFiber.flags |= 1024);\n return maybeThenable;\n}\nfunction checkDidRenderIdHook() {\n var didRenderIdHook = 0 !== localIdCounter;\n localIdCounter = 0;\n return didRenderIdHook;\n}\nfunction bailoutHooks(current, workInProgress, lanes) {\n workInProgress.updateQueue = current.updateQueue;\n workInProgress.flags &= -2053;\n current.lanes &= ~lanes;\n}\nfunction resetHooksOnUnwind(workInProgress) {\n if (didScheduleRenderPhaseUpdate) {\n for (\n workInProgress = workInProgress.memoizedState;\n null !== workInProgress;\n\n ) {\n var queue = workInProgress.queue;\n null !== queue && (queue.pending = null);\n workInProgress = workInProgress.next;\n }\n didScheduleRenderPhaseUpdate = !1;\n }\n renderLanes = 0;\n workInProgressHook = currentHook = currentlyRenderingFiber = null;\n didScheduleRenderPhaseUpdateDuringThisPass = !1;\n thenableIndexCounter = localIdCounter = 0;\n thenableState = null;\n}\nfunction mountWorkInProgressHook() {\n var hook = {\n memoizedState: null,\n baseState: null,\n baseQueue: null,\n queue: null,\n next: null\n };\n null === workInProgressHook\n ? (currentlyRenderingFiber.memoizedState = workInProgressHook = hook)\n : (workInProgressHook = workInProgressHook.next = hook);\n return workInProgressHook;\n}\nfunction updateWorkInProgressHook() {\n if (null === currentHook) {\n var nextCurrentHook = currentlyRenderingFiber.alternate;\n nextCurrentHook =\n null !== nextCurrentHook ? nextCurrentHook.memoizedState : null;\n } else nextCurrentHook = currentHook.next;\n var nextWorkInProgressHook =\n null === workInProgressHook\n ? currentlyRenderingFiber.memoizedState\n : workInProgressHook.next;\n if (null !== nextWorkInProgressHook)\n (workInProgressHook = nextWorkInProgressHook),\n (currentHook = nextCurrentHook);\n else {\n if (null === nextCurrentHook) {\n if (null === currentlyRenderingFiber.alternate)\n throw Error(formatProdErrorMessage(467));\n throw Error(formatProdErrorMessage(310));\n }\n currentHook = nextCurrentHook;\n nextCurrentHook = {\n memoizedState: currentHook.memoizedState,\n baseState: currentHook.baseState,\n baseQueue: currentHook.baseQueue,\n queue: currentHook.queue,\n next: null\n };\n null === workInProgressHook\n ? (currentlyRenderingFiber.memoizedState = workInProgressHook =\n nextCurrentHook)\n : (workInProgressHook = workInProgressHook.next = nextCurrentHook);\n }\n return workInProgressHook;\n}\nfunction createFunctionComponentUpdateQueue() {\n return { lastEffect: null, events: null, stores: null, memoCache: null };\n}\nfunction useThenable(thenable) {\n var index = thenableIndexCounter;\n thenableIndexCounter += 1;\n null === thenableState && (thenableState = []);\n thenable = trackUsedThenable(thenableState, thenable, index);\n index = currentlyRenderingFiber;\n null ===\n (null === workInProgressHook\n ? index.memoizedState\n : workInProgressHook.next) &&\n ((index = index.alternate),\n (ReactSharedInternals.H =\n null === index || null === index.memoizedState\n ? HooksDispatcherOnMount\n : HooksDispatcherOnUpdate));\n return thenable;\n}\nfunction use(usable) {\n if (null !== usable && \"object\" === typeof usable) {\n if (\"function\" === typeof usable.then) return useThenable(usable);\n if (usable.$$typeof === REACT_CONTEXT_TYPE) return readContext(usable);\n }\n throw Error(formatProdErrorMessage(438, String(usable)));\n}\nfunction useMemoCache(size) {\n var memoCache = null,\n updateQueue = currentlyRenderingFiber.updateQueue;\n null !== updateQueue && (memoCache = updateQueue.memoCache);\n if (null == memoCache) {\n var current = currentlyRenderingFiber.alternate;\n null !== current &&\n ((current = current.updateQueue),\n null !== current &&\n ((current = current.memoCache),\n null != current &&\n (memoCache = {\n data: current.data.map(function (array) {\n return array.slice();\n }),\n index: 0\n })));\n }\n null == memoCache && (memoCache = { data: [], index: 0 });\n null === updateQueue &&\n ((updateQueue = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = updateQueue));\n updateQueue.memoCache = memoCache;\n updateQueue = memoCache.data[memoCache.index];\n if (void 0 === updateQueue)\n for (\n updateQueue = memoCache.data[memoCache.index] = Array(size), current = 0;\n current < size;\n current++\n )\n updateQueue[current] = REACT_MEMO_CACHE_SENTINEL;\n memoCache.index++;\n return updateQueue;\n}\nfunction basicStateReducer(state, action) {\n return \"function\" === typeof action ? action(state) : action;\n}\nfunction updateReducer(reducer) {\n var hook = updateWorkInProgressHook();\n return updateReducerImpl(hook, currentHook, reducer);\n}\nfunction updateReducerImpl(hook, current, reducer) {\n var queue = hook.queue;\n if (null === queue) throw Error(formatProdErrorMessage(311));\n queue.lastRenderedReducer = reducer;\n var baseQueue = hook.baseQueue,\n pendingQueue = queue.pending;\n if (null !== pendingQueue) {\n if (null !== baseQueue) {\n var baseFirst = baseQueue.next;\n baseQueue.next = pendingQueue.next;\n pendingQueue.next = baseFirst;\n }\n current.baseQueue = baseQueue = pendingQueue;\n queue.pending = null;\n }\n pendingQueue = hook.baseState;\n if (null === baseQueue) hook.memoizedState = pendingQueue;\n else {\n current = baseQueue.next;\n var newBaseQueueFirst = (baseFirst = null),\n newBaseQueueLast = null,\n update = current,\n didReadFromEntangledAsyncAction$60 = !1;\n do {\n var updateLane = update.lane & -536870913;\n if (\n updateLane !== update.lane\n ? (workInProgressRootRenderLanes & updateLane) === updateLane\n : (renderLanes & updateLane) === updateLane\n ) {\n var revertLane = update.revertLane;\n if (0 === revertLane)\n null !== newBaseQueueLast &&\n (newBaseQueueLast = newBaseQueueLast.next =\n {\n lane: 0,\n revertLane: 0,\n gesture: null,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n }),\n updateLane === currentEntangledLane &&\n (didReadFromEntangledAsyncAction$60 = !0);\n else if ((renderLanes & revertLane) === revertLane) {\n update = update.next;\n revertLane === currentEntangledLane &&\n (didReadFromEntangledAsyncAction$60 = !0);\n continue;\n } else\n (updateLane = {\n lane: 0,\n revertLane: update.revertLane,\n gesture: null,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n }),\n null === newBaseQueueLast\n ? ((newBaseQueueFirst = newBaseQueueLast = updateLane),\n (baseFirst = pendingQueue))\n : (newBaseQueueLast = newBaseQueueLast.next = updateLane),\n (currentlyRenderingFiber.lanes |= revertLane),\n (workInProgressRootSkippedLanes |= revertLane);\n updateLane = update.action;\n shouldDoubleInvokeUserFnsInHooksDEV &&\n reducer(pendingQueue, updateLane);\n pendingQueue = update.hasEagerState\n ? update.eagerState\n : reducer(pendingQueue, updateLane);\n } else\n (revertLane = {\n lane: updateLane,\n revertLane: update.revertLane,\n gesture: update.gesture,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n }),\n null === newBaseQueueLast\n ? ((newBaseQueueFirst = newBaseQueueLast = revertLane),\n (baseFirst = pendingQueue))\n : (newBaseQueueLast = newBaseQueueLast.next = revertLane),\n (currentlyRenderingFiber.lanes |= updateLane),\n (workInProgressRootSkippedLanes |= updateLane);\n update = update.next;\n } while (null !== update && update !== current);\n null === newBaseQueueLast\n ? (baseFirst = pendingQueue)\n : (newBaseQueueLast.next = newBaseQueueFirst);\n if (\n !objectIs(pendingQueue, hook.memoizedState) &&\n ((didReceiveUpdate = !0),\n didReadFromEntangledAsyncAction$60 &&\n ((reducer = currentEntangledActionThenable), null !== reducer))\n )\n throw reducer;\n hook.memoizedState = pendingQueue;\n hook.baseState = baseFirst;\n hook.baseQueue = newBaseQueueLast;\n queue.lastRenderedState = pendingQueue;\n }\n null === baseQueue && (queue.lanes = 0);\n return [hook.memoizedState, queue.dispatch];\n}\nfunction rerenderReducer(reducer) {\n var hook = updateWorkInProgressHook(),\n queue = hook.queue;\n if (null === queue) throw Error(formatProdErrorMessage(311));\n queue.lastRenderedReducer = reducer;\n var dispatch = queue.dispatch,\n lastRenderPhaseUpdate = queue.pending,\n newState = hook.memoizedState;\n if (null !== lastRenderPhaseUpdate) {\n queue.pending = null;\n var update = (lastRenderPhaseUpdate = lastRenderPhaseUpdate.next);\n do (newState = reducer(newState, update.action)), (update = update.next);\n while (update !== lastRenderPhaseUpdate);\n objectIs(newState, hook.memoizedState) || (didReceiveUpdate = !0);\n hook.memoizedState = newState;\n null === hook.baseQueue && (hook.baseState = newState);\n queue.lastRenderedState = newState;\n }\n return [newState, dispatch];\n}\nfunction updateSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {\n var fiber = currentlyRenderingFiber,\n hook = updateWorkInProgressHook(),\n isHydrating$jscomp$0 = isHydrating;\n if (isHydrating$jscomp$0) {\n if (void 0 === getServerSnapshot) throw Error(formatProdErrorMessage(407));\n getServerSnapshot = getServerSnapshot();\n } else getServerSnapshot = getSnapshot();\n var snapshotChanged = !objectIs(\n (currentHook || hook).memoizedState,\n getServerSnapshot\n );\n snapshotChanged &&\n ((hook.memoizedState = getServerSnapshot), (didReceiveUpdate = !0));\n hook = hook.queue;\n updateEffect(subscribeToStore.bind(null, fiber, hook, subscribe), [\n subscribe\n ]);\n if (\n hook.getSnapshot !== getSnapshot ||\n snapshotChanged ||\n (null !== workInProgressHook && workInProgressHook.memoizedState.tag & 1)\n ) {\n fiber.flags |= 2048;\n pushSimpleEffect(\n 9,\n { destroy: void 0 },\n updateStoreInstance.bind(\n null,\n fiber,\n hook,\n getServerSnapshot,\n getSnapshot\n ),\n null\n );\n if (null === workInProgressRoot) throw Error(formatProdErrorMessage(349));\n isHydrating$jscomp$0 ||\n 0 !== (renderLanes & 127) ||\n pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n }\n return getServerSnapshot;\n}\nfunction pushStoreConsistencyCheck(fiber, getSnapshot, renderedSnapshot) {\n fiber.flags |= 16384;\n fiber = { getSnapshot: getSnapshot, value: renderedSnapshot };\n getSnapshot = currentlyRenderingFiber.updateQueue;\n null === getSnapshot\n ? ((getSnapshot = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = getSnapshot),\n (getSnapshot.stores = [fiber]))\n : ((renderedSnapshot = getSnapshot.stores),\n null === renderedSnapshot\n ? (getSnapshot.stores = [fiber])\n : renderedSnapshot.push(fiber));\n}\nfunction updateStoreInstance(fiber, inst, nextSnapshot, getSnapshot) {\n inst.value = nextSnapshot;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n}\nfunction subscribeToStore(fiber, inst, subscribe) {\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n });\n}\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n}\nfunction forceStoreRerender(fiber) {\n var root = enqueueConcurrentRenderForLane(fiber, 2);\n null !== root && scheduleUpdateOnFiber(root, fiber, 2);\n}\nfunction mountStateImpl(initialState) {\n var hook = mountWorkInProgressHook();\n if (\"function\" === typeof initialState) {\n var initialStateInitializer = initialState;\n initialState = initialStateInitializer();\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n initialStateInitializer();\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n }\n hook.memoizedState = hook.baseState = initialState;\n hook.queue = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: initialState\n };\n return hook;\n}\nfunction updateOptimisticImpl(hook, current, passthrough, reducer) {\n hook.baseState = passthrough;\n return updateReducerImpl(\n hook,\n currentHook,\n \"function\" === typeof reducer ? reducer : basicStateReducer\n );\n}\nfunction dispatchActionState(\n fiber,\n actionQueue,\n setPendingState,\n setState,\n payload\n) {\n if (isRenderPhaseUpdate(fiber)) throw Error(formatProdErrorMessage(485));\n fiber = actionQueue.action;\n if (null !== fiber) {\n var actionNode = {\n payload: payload,\n action: fiber,\n next: null,\n isTransition: !0,\n status: \"pending\",\n value: null,\n reason: null,\n listeners: [],\n then: function (listener) {\n actionNode.listeners.push(listener);\n }\n };\n null !== ReactSharedInternals.T\n ? setPendingState(!0)\n : (actionNode.isTransition = !1);\n setState(actionNode);\n setPendingState = actionQueue.pending;\n null === setPendingState\n ? ((actionNode.next = actionQueue.pending = actionNode),\n runActionStateAction(actionQueue, actionNode))\n : ((actionNode.next = setPendingState.next),\n (actionQueue.pending = setPendingState.next = actionNode));\n }\n}\nfunction runActionStateAction(actionQueue, node) {\n var action = node.action,\n payload = node.payload,\n prevState = actionQueue.state;\n if (node.isTransition) {\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n ReactSharedInternals.T = currentTransition;\n try {\n var returnValue = action(prevState, payload),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n handleActionReturnValue(actionQueue, node, returnValue);\n } catch (error) {\n onActionError(actionQueue, node, error);\n } finally {\n null !== prevTransition &&\n null !== currentTransition.types &&\n (prevTransition.types = currentTransition.types),\n (ReactSharedInternals.T = prevTransition);\n }\n } else\n try {\n (prevTransition = action(prevState, payload)),\n handleActionReturnValue(actionQueue, node, prevTransition);\n } catch (error$66) {\n onActionError(actionQueue, node, error$66);\n }\n}\nfunction handleActionReturnValue(actionQueue, node, returnValue) {\n null !== returnValue &&\n \"object\" === typeof returnValue &&\n \"function\" === typeof returnValue.then\n ? returnValue.then(\n function (nextState) {\n onActionSuccess(actionQueue, node, nextState);\n },\n function (error) {\n return onActionError(actionQueue, node, error);\n }\n )\n : onActionSuccess(actionQueue, node, returnValue);\n}\nfunction onActionSuccess(actionQueue, actionNode, nextState) {\n actionNode.status = \"fulfilled\";\n actionNode.value = nextState;\n notifyActionListeners(actionNode);\n actionQueue.state = nextState;\n actionNode = actionQueue.pending;\n null !== actionNode &&\n ((nextState = actionNode.next),\n nextState === actionNode\n ? (actionQueue.pending = null)\n : ((nextState = nextState.next),\n (actionNode.next = nextState),\n runActionStateAction(actionQueue, nextState)));\n}\nfunction onActionError(actionQueue, actionNode, error) {\n var last = actionQueue.pending;\n actionQueue.pending = null;\n if (null !== last) {\n last = last.next;\n do\n (actionNode.status = \"rejected\"),\n (actionNode.reason = error),\n notifyActionListeners(actionNode),\n (actionNode = actionNode.next);\n while (actionNode !== last);\n }\n actionQueue.action = null;\n}\nfunction notifyActionListeners(actionNode) {\n actionNode = actionNode.listeners;\n for (var i = 0; i < actionNode.length; i++) (0, actionNode[i])();\n}\nfunction actionStateReducer(oldState, newState) {\n return newState;\n}\nfunction mountActionState(action, initialStateProp) {\n if (isHydrating) {\n var ssrFormState = workInProgressRoot.formState;\n if (null !== ssrFormState) {\n a: {\n var JSCompiler_inline_result = currentlyRenderingFiber;\n if (isHydrating) {\n if (nextHydratableInstance) {\n b: {\n var JSCompiler_inline_result$jscomp$0 = nextHydratableInstance;\n for (\n var inRootOrSingleton = rootOrSingletonContext;\n 8 !== JSCompiler_inline_result$jscomp$0.nodeType;\n\n ) {\n if (!inRootOrSingleton) {\n JSCompiler_inline_result$jscomp$0 = null;\n break b;\n }\n JSCompiler_inline_result$jscomp$0 = getNextHydratable(\n JSCompiler_inline_result$jscomp$0.nextSibling\n );\n if (null === JSCompiler_inline_result$jscomp$0) {\n JSCompiler_inline_result$jscomp$0 = null;\n break b;\n }\n }\n inRootOrSingleton = JSCompiler_inline_result$jscomp$0.data;\n JSCompiler_inline_result$jscomp$0 =\n \"F!\" === inRootOrSingleton || \"F\" === inRootOrSingleton\n ? JSCompiler_inline_result$jscomp$0\n : null;\n }\n if (JSCompiler_inline_result$jscomp$0) {\n nextHydratableInstance = getNextHydratable(\n JSCompiler_inline_result$jscomp$0.nextSibling\n );\n JSCompiler_inline_result =\n \"F!\" === JSCompiler_inline_result$jscomp$0.data;\n break a;\n }\n }\n throwOnHydrationMismatch(JSCompiler_inline_result);\n }\n JSCompiler_inline_result = !1;\n }\n JSCompiler_inline_result && (initialStateProp = ssrFormState[0]);\n }\n }\n ssrFormState = mountWorkInProgressHook();\n ssrFormState.memoizedState = ssrFormState.baseState = initialStateProp;\n JSCompiler_inline_result = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: actionStateReducer,\n lastRenderedState: initialStateProp\n };\n ssrFormState.queue = JSCompiler_inline_result;\n ssrFormState = dispatchSetState.bind(\n null,\n currentlyRenderingFiber,\n JSCompiler_inline_result\n );\n JSCompiler_inline_result.dispatch = ssrFormState;\n JSCompiler_inline_result = mountStateImpl(!1);\n inRootOrSingleton = dispatchOptimisticSetState.bind(\n null,\n currentlyRenderingFiber,\n !1,\n JSCompiler_inline_result.queue\n );\n JSCompiler_inline_result = mountWorkInProgressHook();\n JSCompiler_inline_result$jscomp$0 = {\n state: initialStateProp,\n dispatch: null,\n action: action,\n pending: null\n };\n JSCompiler_inline_result.queue = JSCompiler_inline_result$jscomp$0;\n ssrFormState = dispatchActionState.bind(\n null,\n currentlyRenderingFiber,\n JSCompiler_inline_result$jscomp$0,\n inRootOrSingleton,\n ssrFormState\n );\n JSCompiler_inline_result$jscomp$0.dispatch = ssrFormState;\n JSCompiler_inline_result.memoizedState = action;\n return [initialStateProp, ssrFormState, !1];\n}\nfunction updateActionState(action) {\n var stateHook = updateWorkInProgressHook();\n return updateActionStateImpl(stateHook, currentHook, action);\n}\nfunction updateActionStateImpl(stateHook, currentStateHook, action) {\n currentStateHook = updateReducerImpl(\n stateHook,\n currentStateHook,\n actionStateReducer\n )[0];\n stateHook = updateReducer(basicStateReducer)[0];\n if (\n \"object\" === typeof currentStateHook &&\n null !== currentStateHook &&\n \"function\" === typeof currentStateHook.then\n )\n try {\n var state = useThenable(currentStateHook);\n } catch (x) {\n if (x === SuspenseException) throw SuspenseActionException;\n throw x;\n }\n else state = currentStateHook;\n currentStateHook = updateWorkInProgressHook();\n var actionQueue = currentStateHook.queue,\n dispatch = actionQueue.dispatch;\n action !== currentStateHook.memoizedState &&\n ((currentlyRenderingFiber.flags |= 2048),\n pushSimpleEffect(\n 9,\n { destroy: void 0 },\n actionStateActionEffect.bind(null, actionQueue, action),\n null\n ));\n return [state, dispatch, stateHook];\n}\nfunction actionStateActionEffect(actionQueue, action) {\n actionQueue.action = action;\n}\nfunction rerenderActionState(action) {\n var stateHook = updateWorkInProgressHook(),\n currentStateHook = currentHook;\n if (null !== currentStateHook)\n return updateActionStateImpl(stateHook, currentStateHook, action);\n updateWorkInProgressHook();\n stateHook = stateHook.memoizedState;\n currentStateHook = updateWorkInProgressHook();\n var dispatch = currentStateHook.queue.dispatch;\n currentStateHook.memoizedState = action;\n return [stateHook, dispatch, !1];\n}\nfunction pushSimpleEffect(tag, inst, create, deps) {\n tag = { tag: tag, create: create, deps: deps, inst: inst, next: null };\n inst = currentlyRenderingFiber.updateQueue;\n null === inst &&\n ((inst = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = inst));\n create = inst.lastEffect;\n null === create\n ? (inst.lastEffect = tag.next = tag)\n : ((deps = create.next),\n (create.next = tag),\n (tag.next = deps),\n (inst.lastEffect = tag));\n return tag;\n}\nfunction updateRef() {\n return updateWorkInProgressHook().memoizedState;\n}\nfunction mountEffectImpl(fiberFlags, hookFlags, create, deps) {\n var hook = mountWorkInProgressHook();\n currentlyRenderingFiber.flags |= fiberFlags;\n hook.memoizedState = pushSimpleEffect(\n 1 | hookFlags,\n { destroy: void 0 },\n create,\n void 0 === deps ? null : deps\n );\n}\nfunction updateEffectImpl(fiberFlags, hookFlags, create, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var inst = hook.memoizedState.inst;\n null !== currentHook &&\n null !== deps &&\n areHookInputsEqual(deps, currentHook.memoizedState.deps)\n ? (hook.memoizedState = pushSimpleEffect(hookFlags, inst, create, deps))\n : ((currentlyRenderingFiber.flags |= fiberFlags),\n (hook.memoizedState = pushSimpleEffect(\n 1 | hookFlags,\n inst,\n create,\n deps\n )));\n}\nfunction mountEffect(create, deps) {\n mountEffectImpl(8390656, 8, create, deps);\n}\nfunction updateEffect(create, deps) {\n updateEffectImpl(2048, 8, create, deps);\n}\nfunction useEffectEventImpl(payload) {\n currentlyRenderingFiber.flags |= 4;\n var componentUpdateQueue = currentlyRenderingFiber.updateQueue;\n if (null === componentUpdateQueue)\n (componentUpdateQueue = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = componentUpdateQueue),\n (componentUpdateQueue.events = [payload]);\n else {\n var events = componentUpdateQueue.events;\n null === events\n ? (componentUpdateQueue.events = [payload])\n : events.push(payload);\n }\n}\nfunction updateEvent(callback) {\n var ref = updateWorkInProgressHook().memoizedState;\n useEffectEventImpl({ ref: ref, nextImpl: callback });\n return function () {\n if (0 !== (executionContext & 2)) throw Error(formatProdErrorMessage(440));\n return ref.impl.apply(void 0, arguments);\n };\n}\nfunction updateInsertionEffect(create, deps) {\n return updateEffectImpl(4, 2, create, deps);\n}\nfunction updateLayoutEffect(create, deps) {\n return updateEffectImpl(4, 4, create, deps);\n}\nfunction imperativeHandleEffect(create, ref) {\n if (\"function\" === typeof ref) {\n create = create();\n var refCleanup = ref(create);\n return function () {\n \"function\" === typeof refCleanup ? refCleanup() : ref(null);\n };\n }\n if (null !== ref && void 0 !== ref)\n return (\n (create = create()),\n (ref.current = create),\n function () {\n ref.current = null;\n }\n );\n}\nfunction updateImperativeHandle(ref, create, deps) {\n deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n updateEffectImpl(4, 4, imperativeHandleEffect.bind(null, create, ref), deps);\n}\nfunction mountDebugValue() {}\nfunction updateCallback(callback, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var prevState = hook.memoizedState;\n if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n return prevState[0];\n hook.memoizedState = [callback, deps];\n return callback;\n}\nfunction updateMemo(nextCreate, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var prevState = hook.memoizedState;\n if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n return prevState[0];\n prevState = nextCreate();\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n nextCreate();\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n hook.memoizedState = [prevState, deps];\n return prevState;\n}\nfunction mountDeferredValueImpl(hook, value, initialValue) {\n if (\n void 0 === initialValue ||\n (0 !== (renderLanes & 1073741824) &&\n 0 === (workInProgressRootRenderLanes & 261930))\n )\n return (hook.memoizedState = value);\n hook.memoizedState = initialValue;\n hook = requestDeferredLane();\n currentlyRenderingFiber.lanes |= hook;\n workInProgressRootSkippedLanes |= hook;\n return initialValue;\n}\nfunction updateDeferredValueImpl(hook, prevValue, value, initialValue) {\n if (objectIs(value, prevValue)) return value;\n if (null !== currentTreeHiddenStackCursor.current)\n return (\n (hook = mountDeferredValueImpl(hook, value, initialValue)),\n objectIs(hook, prevValue) || (didReceiveUpdate = !0),\n hook\n );\n if (\n 0 === (renderLanes & 42) ||\n (0 !== (renderLanes & 1073741824) &&\n 0 === (workInProgressRootRenderLanes & 261930))\n )\n return (didReceiveUpdate = !0), (hook.memoizedState = value);\n hook = requestDeferredLane();\n currentlyRenderingFiber.lanes |= hook;\n workInProgressRootSkippedLanes |= hook;\n return prevValue;\n}\nfunction startTransition(fiber, queue, pendingState, finishedState, callback) {\n var previousPriority = ReactDOMSharedInternals.p;\n ReactDOMSharedInternals.p =\n 0 !== previousPriority && 8 > previousPriority ? previousPriority : 8;\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n ReactSharedInternals.T = currentTransition;\n dispatchOptimisticSetState(fiber, !1, queue, pendingState);\n try {\n var returnValue = callback(),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n if (\n null !== returnValue &&\n \"object\" === typeof returnValue &&\n \"function\" === typeof returnValue.then\n ) {\n var thenableForFinishedState = chainThenableValue(\n returnValue,\n finishedState\n );\n dispatchSetStateInternal(\n fiber,\n queue,\n thenableForFinishedState,\n requestUpdateLane(fiber)\n );\n } else\n dispatchSetStateInternal(\n fiber,\n queue,\n finishedState,\n requestUpdateLane(fiber)\n );\n } catch (error) {\n dispatchSetStateInternal(\n fiber,\n queue,\n { then: function () {}, status: \"rejected\", reason: error },\n requestUpdateLane()\n );\n } finally {\n (ReactDOMSharedInternals.p = previousPriority),\n null !== prevTransition &&\n null !== currentTransition.types &&\n (prevTransition.types = currentTransition.types),\n (ReactSharedInternals.T = prevTransition);\n }\n}\nfunction noop() {}\nfunction startHostTransition(formFiber, pendingState, action, formData) {\n if (5 !== formFiber.tag) throw Error(formatProdErrorMessage(476));\n var queue = ensureFormComponentIsStateful(formFiber).queue;\n startTransition(\n formFiber,\n queue,\n pendingState,\n sharedNotPendingObject,\n null === action\n ? noop\n : function () {\n requestFormReset$1(formFiber);\n return action(formData);\n }\n );\n}\nfunction ensureFormComponentIsStateful(formFiber) {\n var existingStateHook = formFiber.memoizedState;\n if (null !== existingStateHook) return existingStateHook;\n existingStateHook = {\n memoizedState: sharedNotPendingObject,\n baseState: sharedNotPendingObject,\n baseQueue: null,\n queue: {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: sharedNotPendingObject\n },\n next: null\n };\n var initialResetState = {};\n existingStateHook.next = {\n memoizedState: initialResetState,\n baseState: initialResetState,\n baseQueue: null,\n queue: {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: initialResetState\n },\n next: null\n };\n formFiber.memoizedState = existingStateHook;\n formFiber = formFiber.alternate;\n null !== formFiber && (formFiber.memoizedState = existingStateHook);\n return existingStateHook;\n}\nfunction requestFormReset$1(formFiber) {\n var stateHook = ensureFormComponentIsStateful(formFiber);\n null === stateHook.next && (stateHook = formFiber.alternate.memoizedState);\n dispatchSetStateInternal(\n formFiber,\n stateHook.next.queue,\n {},\n requestUpdateLane()\n );\n}\nfunction useHostTransitionStatus() {\n return readContext(HostTransitionContext);\n}\nfunction updateId() {\n return updateWorkInProgressHook().memoizedState;\n}\nfunction updateRefresh() {\n return updateWorkInProgressHook().memoizedState;\n}\nfunction refreshCache(fiber) {\n for (var provider = fiber.return; null !== provider; ) {\n switch (provider.tag) {\n case 24:\n case 3:\n var lane = requestUpdateLane();\n fiber = createUpdate(lane);\n var root$69 = enqueueUpdate(provider, fiber, lane);\n null !== root$69 &&\n (scheduleUpdateOnFiber(root$69, provider, lane),\n entangleTransitions(root$69, provider, lane));\n provider = { cache: createCache() };\n fiber.payload = provider;\n return;\n }\n provider = provider.return;\n }\n}\nfunction dispatchReducerAction(fiber, queue, action) {\n var lane = requestUpdateLane();\n action = {\n lane: lane,\n revertLane: 0,\n gesture: null,\n action: action,\n hasEagerState: !1,\n eagerState: null,\n next: null\n };\n isRenderPhaseUpdate(fiber)\n ? enqueueRenderPhaseUpdate(queue, action)\n : ((action = enqueueConcurrentHookUpdate(fiber, queue, action, lane)),\n null !== action &&\n (scheduleUpdateOnFiber(action, fiber, lane),\n entangleTransitionUpdate(action, queue, lane)));\n}\nfunction dispatchSetState(fiber, queue, action) {\n var lane = requestUpdateLane();\n dispatchSetStateInternal(fiber, queue, action, lane);\n}\nfunction dispatchSetStateInternal(fiber, queue, action, lane) {\n var update = {\n lane: lane,\n revertLane: 0,\n gesture: null,\n action: action,\n hasEagerState: !1,\n eagerState: null,\n next: null\n };\n if (isRenderPhaseUpdate(fiber)) enqueueRenderPhaseUpdate(queue, update);\n else {\n var alternate = fiber.alternate;\n if (\n 0 === fiber.lanes &&\n (null === alternate || 0 === alternate.lanes) &&\n ((alternate = queue.lastRenderedReducer), null !== alternate)\n )\n try {\n var currentState = queue.lastRenderedState,\n eagerState = alternate(currentState, action);\n update.hasEagerState = !0;\n update.eagerState = eagerState;\n if (objectIs(eagerState, currentState))\n return (\n enqueueUpdate$1(fiber, queue, update, 0),\n null === workInProgressRoot && finishQueueingConcurrentUpdates(),\n !1\n );\n } catch (error) {\n } finally {\n }\n action = enqueueConcurrentHookUpdate(fiber, queue, update, lane);\n if (null !== action)\n return (\n scheduleUpdateOnFiber(action, fiber, lane),\n entangleTransitionUpdate(action, queue, lane),\n !0\n );\n }\n return !1;\n}\nfunction dispatchOptimisticSetState(fiber, throwIfDuringRender, queue, action) {\n action = {\n lane: 2,\n revertLane: requestTransitionLane(),\n gesture: null,\n action: action,\n hasEagerState: !1,\n eagerState: null,\n next: null\n };\n if (isRenderPhaseUpdate(fiber)) {\n if (throwIfDuringRender) throw Error(formatProdErrorMessage(479));\n } else\n (throwIfDuringRender = enqueueConcurrentHookUpdate(\n fiber,\n queue,\n action,\n 2\n )),\n null !== throwIfDuringRender &&\n scheduleUpdateOnFiber(throwIfDuringRender, fiber, 2);\n}\nfunction isRenderPhaseUpdate(fiber) {\n var alternate = fiber.alternate;\n return (\n fiber === currentlyRenderingFiber ||\n (null !== alternate && alternate === currentlyRenderingFiber)\n );\n}\nfunction enqueueRenderPhaseUpdate(queue, update) {\n didScheduleRenderPhaseUpdateDuringThisPass = didScheduleRenderPhaseUpdate =\n !0;\n var pending = queue.pending;\n null === pending\n ? (update.next = update)\n : ((update.next = pending.next), (pending.next = update));\n queue.pending = update;\n}\nfunction entangleTransitionUpdate(root, queue, lane) {\n if (0 !== (lane & 4194048)) {\n var queueLanes = queue.lanes;\n queueLanes &= root.pendingLanes;\n lane |= queueLanes;\n queue.lanes = lane;\n markRootEntangled(root, lane);\n }\n}\nvar ContextOnlyDispatcher = {\n readContext: readContext,\n use: use,\n useCallback: throwInvalidHookError,\n useContext: throwInvalidHookError,\n useEffect: throwInvalidHookError,\n useImperativeHandle: throwInvalidHookError,\n useLayoutEffect: throwInvalidHookError,\n useInsertionEffect: throwInvalidHookError,\n useMemo: throwInvalidHookError,\n useReducer: throwInvalidHookError,\n useRef: throwInvalidHookError,\n useState: throwInvalidHookError,\n useDebugValue: throwInvalidHookError,\n useDeferredValue: throwInvalidHookError,\n useTransition: throwInvalidHookError,\n useSyncExternalStore: throwInvalidHookError,\n useId: throwInvalidHookError,\n useHostTransitionStatus: throwInvalidHookError,\n useFormState: throwInvalidHookError,\n useActionState: throwInvalidHookError,\n useOptimistic: throwInvalidHookError,\n useMemoCache: throwInvalidHookError,\n useCacheRefresh: throwInvalidHookError\n};\nContextOnlyDispatcher.useEffectEvent = throwInvalidHookError;\nvar HooksDispatcherOnMount = {\n readContext: readContext,\n use: use,\n useCallback: function (callback, deps) {\n mountWorkInProgressHook().memoizedState = [\n callback,\n void 0 === deps ? null : deps\n ];\n return callback;\n },\n useContext: readContext,\n useEffect: mountEffect,\n useImperativeHandle: function (ref, create, deps) {\n deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n mountEffectImpl(\n 4194308,\n 4,\n imperativeHandleEffect.bind(null, create, ref),\n deps\n );\n },\n useLayoutEffect: function (create, deps) {\n return mountEffectImpl(4194308, 4, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n mountEffectImpl(4, 2, create, deps);\n },\n useMemo: function (nextCreate, deps) {\n var hook = mountWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var nextValue = nextCreate();\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n nextCreate();\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n hook.memoizedState = [nextValue, deps];\n return nextValue;\n },\n useReducer: function (reducer, initialArg, init) {\n var hook = mountWorkInProgressHook();\n if (void 0 !== init) {\n var initialState = init(initialArg);\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n init(initialArg);\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n } else initialState = initialArg;\n hook.memoizedState = hook.baseState = initialState;\n reducer = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: reducer,\n lastRenderedState: initialState\n };\n hook.queue = reducer;\n reducer = reducer.dispatch = dispatchReducerAction.bind(\n null,\n currentlyRenderingFiber,\n reducer\n );\n return [hook.memoizedState, reducer];\n },\n useRef: function (initialValue) {\n var hook = mountWorkInProgressHook();\n initialValue = { current: initialValue };\n return (hook.memoizedState = initialValue);\n },\n useState: function (initialState) {\n initialState = mountStateImpl(initialState);\n var queue = initialState.queue,\n dispatch = dispatchSetState.bind(null, currentlyRenderingFiber, queue);\n queue.dispatch = dispatch;\n return [initialState.memoizedState, dispatch];\n },\n useDebugValue: mountDebugValue,\n useDeferredValue: function (value, initialValue) {\n var hook = mountWorkInProgressHook();\n return mountDeferredValueImpl(hook, value, initialValue);\n },\n useTransition: function () {\n var stateHook = mountStateImpl(!1);\n stateHook = startTransition.bind(\n null,\n currentlyRenderingFiber,\n stateHook.queue,\n !0,\n !1\n );\n mountWorkInProgressHook().memoizedState = stateHook;\n return [!1, stateHook];\n },\n useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {\n var fiber = currentlyRenderingFiber,\n hook = mountWorkInProgressHook();\n if (isHydrating) {\n if (void 0 === getServerSnapshot)\n throw Error(formatProdErrorMessage(407));\n getServerSnapshot = getServerSnapshot();\n } else {\n getServerSnapshot = getSnapshot();\n if (null === workInProgressRoot)\n throw Error(formatProdErrorMessage(349));\n 0 !== (workInProgressRootRenderLanes & 127) ||\n pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n }\n hook.memoizedState = getServerSnapshot;\n var inst = { value: getServerSnapshot, getSnapshot: getSnapshot };\n hook.queue = inst;\n mountEffect(subscribeToStore.bind(null, fiber, inst, subscribe), [\n subscribe\n ]);\n fiber.flags |= 2048;\n pushSimpleEffect(\n 9,\n { destroy: void 0 },\n updateStoreInstance.bind(\n null,\n fiber,\n inst,\n getServerSnapshot,\n getSnapshot\n ),\n null\n );\n return getServerSnapshot;\n },\n useId: function () {\n var hook = mountWorkInProgressHook(),\n identifierPrefix = workInProgressRoot.identifierPrefix;\n if (isHydrating) {\n var JSCompiler_inline_result = treeContextOverflow;\n var idWithLeadingBit = treeContextId;\n JSCompiler_inline_result =\n (\n idWithLeadingBit & ~(1 << (32 - clz32(idWithLeadingBit) - 1))\n ).toString(32) + JSCompiler_inline_result;\n identifierPrefix =\n \"_\" + identifierPrefix + \"R_\" + JSCompiler_inline_result;\n JSCompiler_inline_result = localIdCounter++;\n 0 < JSCompiler_inline_result &&\n (identifierPrefix += \"H\" + JSCompiler_inline_result.toString(32));\n identifierPrefix += \"_\";\n } else\n (JSCompiler_inline_result = globalClientIdCounter++),\n (identifierPrefix =\n \"_\" +\n identifierPrefix +\n \"r_\" +\n JSCompiler_inline_result.toString(32) +\n \"_\");\n return (hook.memoizedState = identifierPrefix);\n },\n useHostTransitionStatus: useHostTransitionStatus,\n useFormState: mountActionState,\n useActionState: mountActionState,\n useOptimistic: function (passthrough) {\n var hook = mountWorkInProgressHook();\n hook.memoizedState = hook.baseState = passthrough;\n var queue = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: null,\n lastRenderedState: null\n };\n hook.queue = queue;\n hook = dispatchOptimisticSetState.bind(\n null,\n currentlyRenderingFiber,\n !0,\n queue\n );\n queue.dispatch = hook;\n return [passthrough, hook];\n },\n useMemoCache: useMemoCache,\n useCacheRefresh: function () {\n return (mountWorkInProgressHook().memoizedState = refreshCache.bind(\n null,\n currentlyRenderingFiber\n ));\n },\n useEffectEvent: function (callback) {\n var hook = mountWorkInProgressHook(),\n ref = { impl: callback };\n hook.memoizedState = ref;\n return function () {\n if (0 !== (executionContext & 2))\n throw Error(formatProdErrorMessage(440));\n return ref.impl.apply(void 0, arguments);\n };\n }\n },\n HooksDispatcherOnUpdate = {\n readContext: readContext,\n use: use,\n useCallback: updateCallback,\n useContext: readContext,\n useEffect: updateEffect,\n useImperativeHandle: updateImperativeHandle,\n useInsertionEffect: updateInsertionEffect,\n useLayoutEffect: updateLayoutEffect,\n useMemo: updateMemo,\n useReducer: updateReducer,\n useRef: updateRef,\n useState: function () {\n return updateReducer(basicStateReducer);\n },\n useDebugValue: mountDebugValue,\n useDeferredValue: function (value, initialValue) {\n var hook = updateWorkInProgressHook();\n return updateDeferredValueImpl(\n hook,\n currentHook.memoizedState,\n value,\n initialValue\n );\n },\n useTransition: function () {\n var booleanOrThenable = updateReducer(basicStateReducer)[0],\n start = updateWorkInProgressHook().memoizedState;\n return [\n \"boolean\" === typeof booleanOrThenable\n ? booleanOrThenable\n : useThenable(booleanOrThenable),\n start\n ];\n },\n useSyncExternalStore: updateSyncExternalStore,\n useId: updateId,\n useHostTransitionStatus: useHostTransitionStatus,\n useFormState: updateActionState,\n useActionState: updateActionState,\n useOptimistic: function (passthrough, reducer) {\n var hook = updateWorkInProgressHook();\n return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n },\n useMemoCache: useMemoCache,\n useCacheRefresh: updateRefresh\n };\nHooksDispatcherOnUpdate.useEffectEvent = updateEvent;\nvar HooksDispatcherOnRerender = {\n readContext: readContext,\n use: use,\n useCallback: updateCallback,\n useContext: readContext,\n useEffect: updateEffect,\n useImperativeHandle: updateImperativeHandle,\n useInsertionEffect: updateInsertionEffect,\n useLayoutEffect: updateLayoutEffect,\n useMemo: updateMemo,\n useReducer: rerenderReducer,\n useRef: updateRef,\n useState: function () {\n return rerenderReducer(basicStateReducer);\n },\n useDebugValue: mountDebugValue,\n useDeferredValue: function (value, initialValue) {\n var hook = updateWorkInProgressHook();\n return null === currentHook\n ? mountDeferredValueImpl(hook, value, initialValue)\n : updateDeferredValueImpl(\n hook,\n currentHook.memoizedState,\n value,\n initialValue\n );\n },\n useTransition: function () {\n var booleanOrThenable = rerenderReducer(basicStateReducer)[0],\n start = updateWorkInProgressHook().memoizedState;\n return [\n \"boolean\" === typeof booleanOrThenable\n ? booleanOrThenable\n : useThenable(booleanOrThenable),\n start\n ];\n },\n useSyncExternalStore: updateSyncExternalStore,\n useId: updateId,\n useHostTransitionStatus: useHostTransitionStatus,\n useFormState: rerenderActionState,\n useActionState: rerenderActionState,\n useOptimistic: function (passthrough, reducer) {\n var hook = updateWorkInProgressHook();\n if (null !== currentHook)\n return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n hook.baseState = passthrough;\n return [passthrough, hook.queue.dispatch];\n },\n useMemoCache: useMemoCache,\n useCacheRefresh: updateRefresh\n};\nHooksDispatcherOnRerender.useEffectEvent = updateEvent;\nfunction applyDerivedStateFromProps(\n workInProgress,\n ctor,\n getDerivedStateFromProps,\n nextProps\n) {\n ctor = workInProgress.memoizedState;\n getDerivedStateFromProps = getDerivedStateFromProps(nextProps, ctor);\n getDerivedStateFromProps =\n null === getDerivedStateFromProps || void 0 === getDerivedStateFromProps\n ? ctor\n : assign({}, ctor, getDerivedStateFromProps);\n workInProgress.memoizedState = getDerivedStateFromProps;\n 0 === workInProgress.lanes &&\n (workInProgress.updateQueue.baseState = getDerivedStateFromProps);\n}\nvar classComponentUpdater = {\n enqueueSetState: function (inst, payload, callback) {\n inst = inst._reactInternals;\n var lane = requestUpdateLane(),\n update = createUpdate(lane);\n update.payload = payload;\n void 0 !== callback && null !== callback && (update.callback = callback);\n payload = enqueueUpdate(inst, update, lane);\n null !== payload &&\n (scheduleUpdateOnFiber(payload, inst, lane),\n entangleTransitions(payload, inst, lane));\n },\n enqueueReplaceState: function (inst, payload, callback) {\n inst = inst._reactInternals;\n var lane = requestUpdateLane(),\n update = createUpdate(lane);\n update.tag = 1;\n update.payload = payload;\n void 0 !== callback && null !== callback && (update.callback = callback);\n payload = enqueueUpdate(inst, update, lane);\n null !== payload &&\n (scheduleUpdateOnFiber(payload, inst, lane),\n entangleTransitions(payload, inst, lane));\n },\n enqueueForceUpdate: function (inst, callback) {\n inst = inst._reactInternals;\n var lane = requestUpdateLane(),\n update = createUpdate(lane);\n update.tag = 2;\n void 0 !== callback && null !== callback && (update.callback = callback);\n callback = enqueueUpdate(inst, update, lane);\n null !== callback &&\n (scheduleUpdateOnFiber(callback, inst, lane),\n entangleTransitions(callback, inst, lane));\n }\n};\nfunction checkShouldComponentUpdate(\n workInProgress,\n ctor,\n oldProps,\n newProps,\n oldState,\n newState,\n nextContext\n) {\n workInProgress = workInProgress.stateNode;\n return \"function\" === typeof workInProgress.shouldComponentUpdate\n ? workInProgress.shouldComponentUpdate(newProps, newState, nextContext)\n : ctor.prototype && ctor.prototype.isPureReactComponent\n ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState)\n : !0;\n}\nfunction callComponentWillReceiveProps(\n workInProgress,\n instance,\n newProps,\n nextContext\n) {\n workInProgress = instance.state;\n \"function\" === typeof instance.componentWillReceiveProps &&\n instance.componentWillReceiveProps(newProps, nextContext);\n \"function\" === typeof instance.UNSAFE_componentWillReceiveProps &&\n instance.UNSAFE_componentWillReceiveProps(newProps, nextContext);\n instance.state !== workInProgress &&\n classComponentUpdater.enqueueReplaceState(instance, instance.state, null);\n}\nfunction resolveClassComponentProps(Component, baseProps) {\n var newProps = baseProps;\n if (\"ref\" in baseProps) {\n newProps = {};\n for (var propName in baseProps)\n \"ref\" !== propName && (newProps[propName] = baseProps[propName]);\n }\n if ((Component = Component.defaultProps)) {\n newProps === baseProps && (newProps = assign({}, newProps));\n for (var propName$73 in Component)\n void 0 === newProps[propName$73] &&\n (newProps[propName$73] = Component[propName$73]);\n }\n return newProps;\n}\nfunction defaultOnUncaughtError(error) {\n reportGlobalError(error);\n}\nfunction defaultOnCaughtError(error) {\n console.error(error);\n}\nfunction defaultOnRecoverableError(error) {\n reportGlobalError(error);\n}\nfunction logUncaughtError(root, errorInfo) {\n try {\n var onUncaughtError = root.onUncaughtError;\n onUncaughtError(errorInfo.value, { componentStack: errorInfo.stack });\n } catch (e$74) {\n setTimeout(function () {\n throw e$74;\n });\n }\n}\nfunction logCaughtError(root, boundary, errorInfo) {\n try {\n var onCaughtError = root.onCaughtError;\n onCaughtError(errorInfo.value, {\n componentStack: errorInfo.stack,\n errorBoundary: 1 === boundary.tag ? boundary.stateNode : null\n });\n } catch (e$75) {\n setTimeout(function () {\n throw e$75;\n });\n }\n}\nfunction createRootErrorUpdate(root, errorInfo, lane) {\n lane = createUpdate(lane);\n lane.tag = 3;\n lane.payload = { element: null };\n lane.callback = function () {\n logUncaughtError(root, errorInfo);\n };\n return lane;\n}\nfunction createClassErrorUpdate(lane) {\n lane = createUpdate(lane);\n lane.tag = 3;\n return lane;\n}\nfunction initializeClassErrorUpdate(update, root, fiber, errorInfo) {\n var getDerivedStateFromError = fiber.type.getDerivedStateFromError;\n if (\"function\" === typeof getDerivedStateFromError) {\n var error = errorInfo.value;\n update.payload = function () {\n return getDerivedStateFromError(error);\n };\n update.callback = function () {\n logCaughtError(root, fiber, errorInfo);\n };\n }\n var inst = fiber.stateNode;\n null !== inst &&\n \"function\" === typeof inst.componentDidCatch &&\n (update.callback = function () {\n logCaughtError(root, fiber, errorInfo);\n \"function\" !== typeof getDerivedStateFromError &&\n (null === legacyErrorBoundariesThatAlreadyFailed\n ? (legacyErrorBoundariesThatAlreadyFailed = new Set([this]))\n : legacyErrorBoundariesThatAlreadyFailed.add(this));\n var stack = errorInfo.stack;\n this.componentDidCatch(errorInfo.value, {\n componentStack: null !== stack ? stack : \"\"\n });\n });\n}\nfunction throwException(\n root,\n returnFiber,\n sourceFiber,\n value,\n rootRenderLanes\n) {\n sourceFiber.flags |= 32768;\n if (\n null !== value &&\n \"object\" === typeof value &&\n \"function\" === typeof value.then\n ) {\n returnFiber = sourceFiber.alternate;\n null !== returnFiber &&\n propagateParentContextChanges(\n returnFiber,\n sourceFiber,\n rootRenderLanes,\n !0\n );\n sourceFiber = suspenseHandlerStackCursor.current;\n if (null !== sourceFiber) {\n switch (sourceFiber.tag) {\n case 31:\n case 13:\n return (\n null === shellBoundary\n ? renderDidSuspendDelayIfPossible()\n : null === sourceFiber.alternate &&\n 0 === workInProgressRootExitStatus &&\n (workInProgressRootExitStatus = 3),\n (sourceFiber.flags &= -257),\n (sourceFiber.flags |= 65536),\n (sourceFiber.lanes = rootRenderLanes),\n value === noopSuspenseyCommitThenable\n ? (sourceFiber.flags |= 16384)\n : ((returnFiber = sourceFiber.updateQueue),\n null === returnFiber\n ? (sourceFiber.updateQueue = new Set([value]))\n : returnFiber.add(value),\n attachPingListener(root, value, rootRenderLanes)),\n !1\n );\n case 22:\n return (\n (sourceFiber.flags |= 65536),\n value === noopSuspenseyCommitThenable\n ? (sourceFiber.flags |= 16384)\n : ((returnFiber = sourceFiber.updateQueue),\n null === returnFiber\n ? ((returnFiber = {\n transitions: null,\n markerInstances: null,\n retryQueue: new Set([value])\n }),\n (sourceFiber.updateQueue = returnFiber))\n : ((sourceFiber = returnFiber.retryQueue),\n null === sourceFiber\n ? (returnFiber.retryQueue = new Set([value]))\n : sourceFiber.add(value)),\n attachPingListener(root, value, rootRenderLanes)),\n !1\n );\n }\n throw Error(formatProdErrorMessage(435, sourceFiber.tag));\n }\n attachPingListener(root, value, rootRenderLanes);\n renderDidSuspendDelayIfPossible();\n return !1;\n }\n if (isHydrating)\n return (\n (returnFiber = suspenseHandlerStackCursor.current),\n null !== returnFiber\n ? (0 === (returnFiber.flags & 65536) && (returnFiber.flags |= 256),\n (returnFiber.flags |= 65536),\n (returnFiber.lanes = rootRenderLanes),\n value !== HydrationMismatchException &&\n ((root = Error(formatProdErrorMessage(422), { cause: value })),\n queueHydrationError(createCapturedValueAtFiber(root, sourceFiber))))\n : (value !== HydrationMismatchException &&\n ((returnFiber = Error(formatProdErrorMessage(423), {\n cause: value\n })),\n queueHydrationError(\n createCapturedValueAtFiber(returnFiber, sourceFiber)\n )),\n (root = root.current.alternate),\n (root.flags |= 65536),\n (rootRenderLanes &= -rootRenderLanes),\n (root.lanes |= rootRenderLanes),\n (value = createCapturedValueAtFiber(value, sourceFiber)),\n (rootRenderLanes = createRootErrorUpdate(\n root.stateNode,\n value,\n rootRenderLanes\n )),\n enqueueCapturedUpdate(root, rootRenderLanes),\n 4 !== workInProgressRootExitStatus &&\n (workInProgressRootExitStatus = 2)),\n !1\n );\n var wrapperError = Error(formatProdErrorMessage(520), { cause: value });\n wrapperError = createCapturedValueAtFiber(wrapperError, sourceFiber);\n null === workInProgressRootConcurrentErrors\n ? (workInProgressRootConcurrentErrors = [wrapperError])\n : workInProgressRootConcurrentErrors.push(wrapperError);\n 4 !== workInProgressRootExitStatus && (workInProgressRootExitStatus = 2);\n if (null === returnFiber) return !0;\n value = createCapturedValueAtFiber(value, sourceFiber);\n sourceFiber = returnFiber;\n do {\n switch (sourceFiber.tag) {\n case 3:\n return (\n (sourceFiber.flags |= 65536),\n (root = rootRenderLanes & -rootRenderLanes),\n (sourceFiber.lanes |= root),\n (root = createRootErrorUpdate(sourceFiber.stateNode, value, root)),\n enqueueCapturedUpdate(sourceFiber, root),\n !1\n );\n case 1:\n if (\n ((returnFiber = sourceFiber.type),\n (wrapperError = sourceFiber.stateNode),\n 0 === (sourceFiber.flags & 128) &&\n (\"function\" === typeof returnFiber.getDerivedStateFromError ||\n (null !== wrapperError &&\n \"function\" === typeof wrapperError.componentDidCatch &&\n (null === legacyErrorBoundariesThatAlreadyFailed ||\n !legacyErrorBoundariesThatAlreadyFailed.has(wrapperError)))))\n )\n return (\n (sourceFiber.flags |= 65536),\n (rootRenderLanes &= -rootRenderLanes),\n (sourceFiber.lanes |= rootRenderLanes),\n (rootRenderLanes = createClassErrorUpdate(rootRenderLanes)),\n initializeClassErrorUpdate(\n rootRenderLanes,\n root,\n sourceFiber,\n value\n ),\n enqueueCapturedUpdate(sourceFiber, rootRenderLanes),\n !1\n );\n }\n sourceFiber = sourceFiber.return;\n } while (null !== sourceFiber);\n return !1;\n}\nvar SelectiveHydrationException = Error(formatProdErrorMessage(461)),\n didReceiveUpdate = !1;\nfunction reconcileChildren(current, workInProgress, nextChildren, renderLanes) {\n workInProgress.child =\n null === current\n ? mountChildFibers(workInProgress, null, nextChildren, renderLanes)\n : reconcileChildFibers(\n workInProgress,\n current.child,\n nextChildren,\n renderLanes\n );\n}\nfunction updateForwardRef(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n Component = Component.render;\n var ref = workInProgress.ref;\n if (\"ref\" in nextProps) {\n var propsWithoutRef = {};\n for (var key in nextProps)\n \"ref\" !== key && (propsWithoutRef[key] = nextProps[key]);\n } else propsWithoutRef = nextProps;\n prepareToReadContext(workInProgress);\n nextProps = renderWithHooks(\n current,\n workInProgress,\n Component,\n propsWithoutRef,\n ref,\n renderLanes\n );\n key = checkDidRenderIdHook();\n if (null !== current && !didReceiveUpdate)\n return (\n bailoutHooks(current, workInProgress, renderLanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n isHydrating && key && pushMaterializedTreeId(workInProgress);\n workInProgress.flags |= 1;\n reconcileChildren(current, workInProgress, nextProps, renderLanes);\n return workInProgress.child;\n}\nfunction updateMemoComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n if (null === current) {\n var type = Component.type;\n if (\n \"function\" === typeof type &&\n !shouldConstruct(type) &&\n void 0 === type.defaultProps &&\n null === Component.compare\n )\n return (\n (workInProgress.tag = 15),\n (workInProgress.type = type),\n updateSimpleMemoComponent(\n current,\n workInProgress,\n type,\n nextProps,\n renderLanes\n )\n );\n current = createFiberFromTypeAndProps(\n Component.type,\n null,\n nextProps,\n workInProgress,\n workInProgress.mode,\n renderLanes\n );\n current.ref = workInProgress.ref;\n current.return = workInProgress;\n return (workInProgress.child = current);\n }\n type = current.child;\n if (!checkScheduledUpdateOrContext(current, renderLanes)) {\n var prevProps = type.memoizedProps;\n Component = Component.compare;\n Component = null !== Component ? Component : shallowEqual;\n if (Component(prevProps, nextProps) && current.ref === workInProgress.ref)\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n }\n workInProgress.flags |= 1;\n current = createWorkInProgress(type, nextProps);\n current.ref = workInProgress.ref;\n current.return = workInProgress;\n return (workInProgress.child = current);\n}\nfunction updateSimpleMemoComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n if (null !== current) {\n var prevProps = current.memoizedProps;\n if (\n shallowEqual(prevProps, nextProps) &&\n current.ref === workInProgress.ref\n )\n if (\n ((didReceiveUpdate = !1),\n (workInProgress.pendingProps = nextProps = prevProps),\n checkScheduledUpdateOrContext(current, renderLanes))\n )\n 0 !== (current.flags & 131072) && (didReceiveUpdate = !0);\n else\n return (\n (workInProgress.lanes = current.lanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n }\n return updateFunctionComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n );\n}\nfunction updateOffscreenComponent(\n current,\n workInProgress,\n renderLanes,\n nextProps\n) {\n var nextChildren = nextProps.children,\n prevState = null !== current ? current.memoizedState : null;\n null === current &&\n null === workInProgress.stateNode &&\n (workInProgress.stateNode = {\n _visibility: 1,\n _pendingMarkers: null,\n _retryCache: null,\n _transitions: null\n });\n if (\"hidden\" === nextProps.mode) {\n if (0 !== (workInProgress.flags & 128)) {\n prevState =\n null !== prevState ? prevState.baseLanes | renderLanes : renderLanes;\n if (null !== current) {\n nextProps = workInProgress.child = current.child;\n for (nextChildren = 0; null !== nextProps; )\n (nextChildren =\n nextChildren | nextProps.lanes | nextProps.childLanes),\n (nextProps = nextProps.sibling);\n nextProps = nextChildren & ~prevState;\n } else (nextProps = 0), (workInProgress.child = null);\n return deferHiddenOffscreenComponent(\n current,\n workInProgress,\n prevState,\n renderLanes,\n nextProps\n );\n }\n if (0 !== (renderLanes & 536870912))\n (workInProgress.memoizedState = { baseLanes: 0, cachePool: null }),\n null !== current &&\n pushTransition(\n workInProgress,\n null !== prevState ? prevState.cachePool : null\n ),\n null !== prevState\n ? pushHiddenContext(workInProgress, prevState)\n : reuseHiddenContextOnStack(),\n pushOffscreenSuspenseHandler(workInProgress);\n else\n return (\n (nextProps = workInProgress.lanes = 536870912),\n deferHiddenOffscreenComponent(\n current,\n workInProgress,\n null !== prevState ? prevState.baseLanes | renderLanes : renderLanes,\n renderLanes,\n nextProps\n )\n );\n } else\n null !== prevState\n ? (pushTransition(workInProgress, prevState.cachePool),\n pushHiddenContext(workInProgress, prevState),\n reuseSuspenseHandlerOnStack(workInProgress),\n (workInProgress.memoizedState = null))\n : (null !== current && pushTransition(workInProgress, null),\n reuseHiddenContextOnStack(),\n reuseSuspenseHandlerOnStack(workInProgress));\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n}\nfunction bailoutOffscreenComponent(current, workInProgress) {\n (null !== current && 22 === current.tag) ||\n null !== workInProgress.stateNode ||\n (workInProgress.stateNode = {\n _visibility: 1,\n _pendingMarkers: null,\n _retryCache: null,\n _transitions: null\n });\n return workInProgress.sibling;\n}\nfunction deferHiddenOffscreenComponent(\n current,\n workInProgress,\n nextBaseLanes,\n renderLanes,\n remainingChildLanes\n) {\n var JSCompiler_inline_result = peekCacheFromPool();\n JSCompiler_inline_result =\n null === JSCompiler_inline_result\n ? null\n : { parent: CacheContext._currentValue, pool: JSCompiler_inline_result };\n workInProgress.memoizedState = {\n baseLanes: nextBaseLanes,\n cachePool: JSCompiler_inline_result\n };\n null !== current && pushTransition(workInProgress, null);\n reuseHiddenContextOnStack();\n pushOffscreenSuspenseHandler(workInProgress);\n null !== current &&\n propagateParentContextChanges(current, workInProgress, renderLanes, !0);\n workInProgress.childLanes = remainingChildLanes;\n return null;\n}\nfunction mountActivityChildren(workInProgress, nextProps) {\n nextProps = mountWorkInProgressOffscreenFiber(\n { mode: nextProps.mode, children: nextProps.children },\n workInProgress.mode\n );\n nextProps.ref = workInProgress.ref;\n workInProgress.child = nextProps;\n nextProps.return = workInProgress;\n return nextProps;\n}\nfunction retryActivityComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n) {\n reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n current = mountActivityChildren(workInProgress, workInProgress.pendingProps);\n current.flags |= 2;\n popSuspenseHandler(workInProgress);\n workInProgress.memoizedState = null;\n return current;\n}\nfunction updateActivityComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps,\n didSuspend = 0 !== (workInProgress.flags & 128);\n workInProgress.flags &= -129;\n if (null === current) {\n if (isHydrating) {\n if (\"hidden\" === nextProps.mode)\n return (\n (current = mountActivityChildren(workInProgress, nextProps)),\n (workInProgress.lanes = 536870912),\n bailoutOffscreenComponent(null, current)\n );\n pushDehydratedActivitySuspenseHandler(workInProgress);\n (current = nextHydratableInstance)\n ? ((current = canHydrateHydrationBoundary(\n current,\n rootOrSingletonContext\n )),\n (current = null !== current && \"&\" === current.data ? current : null),\n null !== current &&\n ((workInProgress.memoizedState = {\n dehydrated: current,\n treeContext:\n null !== treeContextProvider\n ? { id: treeContextId, overflow: treeContextOverflow }\n : null,\n retryLane: 536870912,\n hydrationErrors: null\n }),\n (renderLanes = createFiberFromDehydratedFragment(current)),\n (renderLanes.return = workInProgress),\n (workInProgress.child = renderLanes),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = null)))\n : (current = null);\n if (null === current) throw throwOnHydrationMismatch(workInProgress);\n workInProgress.lanes = 536870912;\n return null;\n }\n return mountActivityChildren(workInProgress, nextProps);\n }\n var prevState = current.memoizedState;\n if (null !== prevState) {\n var dehydrated = prevState.dehydrated;\n pushDehydratedActivitySuspenseHandler(workInProgress);\n if (didSuspend)\n if (workInProgress.flags & 256)\n (workInProgress.flags &= -257),\n (workInProgress = retryActivityComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n ));\n else if (null !== workInProgress.memoizedState)\n (workInProgress.child = current.child),\n (workInProgress.flags |= 128),\n (workInProgress = null);\n else throw Error(formatProdErrorMessage(558));\n else if (\n (didReceiveUpdate ||\n propagateParentContextChanges(current, workInProgress, renderLanes, !1),\n (didSuspend = 0 !== (renderLanes & current.childLanes)),\n didReceiveUpdate || didSuspend)\n ) {\n nextProps = workInProgressRoot;\n if (\n null !== nextProps &&\n ((dehydrated = getBumpedLaneForHydration(nextProps, renderLanes)),\n 0 !== dehydrated && dehydrated !== prevState.retryLane)\n )\n throw (\n ((prevState.retryLane = dehydrated),\n enqueueConcurrentRenderForLane(current, dehydrated),\n scheduleUpdateOnFiber(nextProps, current, dehydrated),\n SelectiveHydrationException)\n );\n renderDidSuspendDelayIfPossible();\n workInProgress = retryActivityComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n );\n } else\n (current = prevState.treeContext),\n (nextHydratableInstance = getNextHydratable(dehydrated.nextSibling)),\n (hydrationParentFiber = workInProgress),\n (isHydrating = !0),\n (hydrationErrors = null),\n (rootOrSingletonContext = !1),\n null !== current &&\n restoreSuspendedTreeContext(workInProgress, current),\n (workInProgress = mountActivityChildren(workInProgress, nextProps)),\n (workInProgress.flags |= 4096);\n return workInProgress;\n }\n current = createWorkInProgress(current.child, {\n mode: nextProps.mode,\n children: nextProps.children\n });\n current.ref = workInProgress.ref;\n workInProgress.child = current;\n current.return = workInProgress;\n return current;\n}\nfunction markRef(current, workInProgress) {\n var ref = workInProgress.ref;\n if (null === ref)\n null !== current &&\n null !== current.ref &&\n (workInProgress.flags |= 4194816);\n else {\n if (\"function\" !== typeof ref && \"object\" !== typeof ref)\n throw Error(formatProdErrorMessage(284));\n if (null === current || current.ref !== ref)\n workInProgress.flags |= 4194816;\n }\n}\nfunction updateFunctionComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n prepareToReadContext(workInProgress);\n Component = renderWithHooks(\n current,\n workInProgress,\n Component,\n nextProps,\n void 0,\n renderLanes\n );\n nextProps = checkDidRenderIdHook();\n if (null !== current && !didReceiveUpdate)\n return (\n bailoutHooks(current, workInProgress, renderLanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n isHydrating && nextProps && pushMaterializedTreeId(workInProgress);\n workInProgress.flags |= 1;\n reconcileChildren(current, workInProgress, Component, renderLanes);\n return workInProgress.child;\n}\nfunction replayFunctionComponent(\n current,\n workInProgress,\n nextProps,\n Component,\n secondArg,\n renderLanes\n) {\n prepareToReadContext(workInProgress);\n workInProgress.updateQueue = null;\n nextProps = renderWithHooksAgain(\n workInProgress,\n Component,\n nextProps,\n secondArg\n );\n finishRenderingHooks(current);\n Component = checkDidRenderIdHook();\n if (null !== current && !didReceiveUpdate)\n return (\n bailoutHooks(current, workInProgress, renderLanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n isHydrating && Component && pushMaterializedTreeId(workInProgress);\n workInProgress.flags |= 1;\n reconcileChildren(current, workInProgress, nextProps, renderLanes);\n return workInProgress.child;\n}\nfunction updateClassComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n prepareToReadContext(workInProgress);\n if (null === workInProgress.stateNode) {\n var context = emptyContextObject,\n contextType = Component.contextType;\n \"object\" === typeof contextType &&\n null !== contextType &&\n (context = readContext(contextType));\n context = new Component(nextProps, context);\n workInProgress.memoizedState =\n null !== context.state && void 0 !== context.state ? context.state : null;\n context.updater = classComponentUpdater;\n workInProgress.stateNode = context;\n context._reactInternals = workInProgress;\n context = workInProgress.stateNode;\n context.props = nextProps;\n context.state = workInProgress.memoizedState;\n context.refs = {};\n initializeUpdateQueue(workInProgress);\n contextType = Component.contextType;\n context.context =\n \"object\" === typeof contextType && null !== contextType\n ? readContext(contextType)\n : emptyContextObject;\n context.state = workInProgress.memoizedState;\n contextType = Component.getDerivedStateFromProps;\n \"function\" === typeof contextType &&\n (applyDerivedStateFromProps(\n workInProgress,\n Component,\n contextType,\n nextProps\n ),\n (context.state = workInProgress.memoizedState));\n \"function\" === typeof Component.getDerivedStateFromProps ||\n \"function\" === typeof context.getSnapshotBeforeUpdate ||\n (\"function\" !== typeof context.UNSAFE_componentWillMount &&\n \"function\" !== typeof context.componentWillMount) ||\n ((contextType = context.state),\n \"function\" === typeof context.componentWillMount &&\n context.componentWillMount(),\n \"function\" === typeof context.UNSAFE_componentWillMount &&\n context.UNSAFE_componentWillMount(),\n contextType !== context.state &&\n classComponentUpdater.enqueueReplaceState(context, context.state, null),\n processUpdateQueue(workInProgress, nextProps, context, renderLanes),\n suspendIfUpdateReadFromEntangledAsyncAction(),\n (context.state = workInProgress.memoizedState));\n \"function\" === typeof context.componentDidMount &&\n (workInProgress.flags |= 4194308);\n nextProps = !0;\n } else if (null === current) {\n context = workInProgress.stateNode;\n var unresolvedOldProps = workInProgress.memoizedProps,\n oldProps = resolveClassComponentProps(Component, unresolvedOldProps);\n context.props = oldProps;\n var oldContext = context.context,\n contextType$jscomp$0 = Component.contextType;\n contextType = emptyContextObject;\n \"object\" === typeof contextType$jscomp$0 &&\n null !== contextType$jscomp$0 &&\n (contextType = readContext(contextType$jscomp$0));\n var getDerivedStateFromProps = Component.getDerivedStateFromProps;\n contextType$jscomp$0 =\n \"function\" === typeof getDerivedStateFromProps ||\n \"function\" === typeof context.getSnapshotBeforeUpdate;\n unresolvedOldProps = workInProgress.pendingProps !== unresolvedOldProps;\n contextType$jscomp$0 ||\n (\"function\" !== typeof context.UNSAFE_componentWillReceiveProps &&\n \"function\" !== typeof context.componentWillReceiveProps) ||\n ((unresolvedOldProps || oldContext !== contextType) &&\n callComponentWillReceiveProps(\n workInProgress,\n context,\n nextProps,\n contextType\n ));\n hasForceUpdate = !1;\n var oldState = workInProgress.memoizedState;\n context.state = oldState;\n processUpdateQueue(workInProgress, nextProps, context, renderLanes);\n suspendIfUpdateReadFromEntangledAsyncAction();\n oldContext = workInProgress.memoizedState;\n unresolvedOldProps || oldState !== oldContext || hasForceUpdate\n ? (\"function\" === typeof getDerivedStateFromProps &&\n (applyDerivedStateFromProps(\n workInProgress,\n Component,\n getDerivedStateFromProps,\n nextProps\n ),\n (oldContext = workInProgress.memoizedState)),\n (oldProps =\n hasForceUpdate ||\n checkShouldComponentUpdate(\n workInProgress,\n Component,\n oldProps,\n nextProps,\n oldState,\n oldContext,\n contextType\n ))\n ? (contextType$jscomp$0 ||\n (\"function\" !== typeof context.UNSAFE_componentWillMount &&\n \"function\" !== typeof context.componentWillMount) ||\n (\"function\" === typeof context.componentWillMount &&\n context.componentWillMount(),\n \"function\" === typeof context.UNSAFE_componentWillMount &&\n context.UNSAFE_componentWillMount()),\n \"function\" === typeof context.componentDidMount &&\n (workInProgress.flags |= 4194308))\n : (\"function\" === typeof context.componentDidMount &&\n (workInProgress.flags |= 4194308),\n (workInProgress.memoizedProps = nextProps),\n (workInProgress.memoizedState = oldContext)),\n (context.props = nextProps),\n (context.state = oldContext),\n (context.context = contextType),\n (nextProps = oldProps))\n : (\"function\" === typeof context.componentDidMount &&\n (workInProgress.flags |= 4194308),\n (nextProps = !1));\n } else {\n context = workInProgress.stateNode;\n cloneUpdateQueue(current, workInProgress);\n contextType = workInProgress.memoizedProps;\n contextType$jscomp$0 = resolveClassComponentProps(Component, contextType);\n context.props = contextType$jscomp$0;\n getDerivedStateFromProps = workInProgress.pendingProps;\n oldState = context.context;\n oldContext = Component.contextType;\n oldProps = emptyContextObject;\n \"object\" === typeof oldContext &&\n null !== oldContext &&\n (oldProps = readContext(oldContext));\n unresolvedOldProps = Component.getDerivedStateFromProps;\n (oldContext =\n \"function\" === typeof unresolvedOldProps ||\n \"function\" === typeof context.getSnapshotBeforeUpdate) ||\n (\"function\" !== typeof context.UNSAFE_componentWillReceiveProps &&\n \"function\" !== typeof context.componentWillReceiveProps) ||\n ((contextType !== getDerivedStateFromProps || oldState !== oldProps) &&\n callComponentWillReceiveProps(\n workInProgress,\n context,\n nextProps,\n oldProps\n ));\n hasForceUpdate = !1;\n oldState = workInProgress.memoizedState;\n context.state = oldState;\n processUpdateQueue(workInProgress, nextProps, context, renderLanes);\n suspendIfUpdateReadFromEntangledAsyncAction();\n var newState = workInProgress.memoizedState;\n contextType !== getDerivedStateFromProps ||\n oldState !== newState ||\n hasForceUpdate ||\n (null !== current &&\n null !== current.dependencies &&\n checkIfContextChanged(current.dependencies))\n ? (\"function\" === typeof unresolvedOldProps &&\n (applyDerivedStateFromProps(\n workInProgress,\n Component,\n unresolvedOldProps,\n nextProps\n ),\n (newState = workInProgress.memoizedState)),\n (contextType$jscomp$0 =\n hasForceUpdate ||\n checkShouldComponentUpdate(\n workInProgress,\n Component,\n contextType$jscomp$0,\n nextProps,\n oldState,\n newState,\n oldProps\n ) ||\n (null !== current &&\n null !== current.dependencies &&\n checkIfContextChanged(current.dependencies)))\n ? (oldContext ||\n (\"function\" !== typeof context.UNSAFE_componentWillUpdate &&\n \"function\" !== typeof context.componentWillUpdate) ||\n (\"function\" === typeof context.componentWillUpdate &&\n context.componentWillUpdate(nextProps, newState, oldProps),\n \"function\" === typeof context.UNSAFE_componentWillUpdate &&\n context.UNSAFE_componentWillUpdate(\n nextProps,\n newState,\n oldProps\n )),\n \"function\" === typeof context.componentDidUpdate &&\n (workInProgress.flags |= 4),\n \"function\" === typeof context.getSnapshotBeforeUpdate &&\n (workInProgress.flags |= 1024))\n : (\"function\" !== typeof context.componentDidUpdate ||\n (contextType === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 4),\n \"function\" !== typeof context.getSnapshotBeforeUpdate ||\n (contextType === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 1024),\n (workInProgress.memoizedProps = nextProps),\n (workInProgress.memoizedState = newState)),\n (context.props = nextProps),\n (context.state = newState),\n (context.context = oldProps),\n (nextProps = contextType$jscomp$0))\n : (\"function\" !== typeof context.componentDidUpdate ||\n (contextType === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 4),\n \"function\" !== typeof context.getSnapshotBeforeUpdate ||\n (contextType === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 1024),\n (nextProps = !1));\n }\n context = nextProps;\n markRef(current, workInProgress);\n nextProps = 0 !== (workInProgress.flags & 128);\n context || nextProps\n ? ((context = workInProgress.stateNode),\n (Component =\n nextProps && \"function\" !== typeof Component.getDerivedStateFromError\n ? null\n : context.render()),\n (workInProgress.flags |= 1),\n null !== current && nextProps\n ? ((workInProgress.child = reconcileChildFibers(\n workInProgress,\n current.child,\n null,\n renderLanes\n )),\n (workInProgress.child = reconcileChildFibers(\n workInProgress,\n null,\n Component,\n renderLanes\n )))\n : reconcileChildren(current, workInProgress, Component, renderLanes),\n (workInProgress.memoizedState = context.state),\n (current = workInProgress.child))\n : (current = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n ));\n return current;\n}\nfunction mountHostRootWithoutHydrating(\n current,\n workInProgress,\n nextChildren,\n renderLanes\n) {\n resetHydrationState();\n workInProgress.flags |= 256;\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n}\nvar SUSPENDED_MARKER = {\n dehydrated: null,\n treeContext: null,\n retryLane: 0,\n hydrationErrors: null\n};\nfunction mountSuspenseOffscreenState(renderLanes) {\n return { baseLanes: renderLanes, cachePool: getSuspendedCache() };\n}\nfunction getRemainingWorkInPrimaryTree(\n current,\n primaryTreeDidDefer,\n renderLanes\n) {\n current = null !== current ? current.childLanes & ~renderLanes : 0;\n primaryTreeDidDefer && (current |= workInProgressDeferredLane);\n return current;\n}\nfunction updateSuspenseComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps,\n showFallback = !1,\n didSuspend = 0 !== (workInProgress.flags & 128),\n JSCompiler_temp;\n (JSCompiler_temp = didSuspend) ||\n (JSCompiler_temp =\n null !== current && null === current.memoizedState\n ? !1\n : 0 !== (suspenseStackCursor.current & 2));\n JSCompiler_temp && ((showFallback = !0), (workInProgress.flags &= -129));\n JSCompiler_temp = 0 !== (workInProgress.flags & 32);\n workInProgress.flags &= -33;\n if (null === current) {\n if (isHydrating) {\n showFallback\n ? pushPrimaryTreeSuspenseHandler(workInProgress)\n : reuseSuspenseHandlerOnStack(workInProgress);\n (current = nextHydratableInstance)\n ? ((current = canHydrateHydrationBoundary(\n current,\n rootOrSingletonContext\n )),\n (current = null !== current && \"&\" !== current.data ? current : null),\n null !== current &&\n ((workInProgress.memoizedState = {\n dehydrated: current,\n treeContext:\n null !== treeContextProvider\n ? { id: treeContextId, overflow: treeContextOverflow }\n : null,\n retryLane: 536870912,\n hydrationErrors: null\n }),\n (renderLanes = createFiberFromDehydratedFragment(current)),\n (renderLanes.return = workInProgress),\n (workInProgress.child = renderLanes),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = null)))\n : (current = null);\n if (null === current) throw throwOnHydrationMismatch(workInProgress);\n isSuspenseInstanceFallback(current)\n ? (workInProgress.lanes = 32)\n : (workInProgress.lanes = 536870912);\n return null;\n }\n var nextPrimaryChildren = nextProps.children;\n nextProps = nextProps.fallback;\n if (showFallback)\n return (\n reuseSuspenseHandlerOnStack(workInProgress),\n (showFallback = workInProgress.mode),\n (nextPrimaryChildren = mountWorkInProgressOffscreenFiber(\n { mode: \"hidden\", children: nextPrimaryChildren },\n showFallback\n )),\n (nextProps = createFiberFromFragment(\n nextProps,\n showFallback,\n renderLanes,\n null\n )),\n (nextPrimaryChildren.return = workInProgress),\n (nextProps.return = workInProgress),\n (nextPrimaryChildren.sibling = nextProps),\n (workInProgress.child = nextPrimaryChildren),\n (nextProps = workInProgress.child),\n (nextProps.memoizedState = mountSuspenseOffscreenState(renderLanes)),\n (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n current,\n JSCompiler_temp,\n renderLanes\n )),\n (workInProgress.memoizedState = SUSPENDED_MARKER),\n bailoutOffscreenComponent(null, nextProps)\n );\n pushPrimaryTreeSuspenseHandler(workInProgress);\n return mountSuspensePrimaryChildren(workInProgress, nextPrimaryChildren);\n }\n var prevState = current.memoizedState;\n if (\n null !== prevState &&\n ((nextPrimaryChildren = prevState.dehydrated), null !== nextPrimaryChildren)\n ) {\n if (didSuspend)\n workInProgress.flags & 256\n ? (pushPrimaryTreeSuspenseHandler(workInProgress),\n (workInProgress.flags &= -257),\n (workInProgress = retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n )))\n : null !== workInProgress.memoizedState\n ? (reuseSuspenseHandlerOnStack(workInProgress),\n (workInProgress.child = current.child),\n (workInProgress.flags |= 128),\n (workInProgress = null))\n : (reuseSuspenseHandlerOnStack(workInProgress),\n (nextPrimaryChildren = nextProps.fallback),\n (showFallback = workInProgress.mode),\n (nextProps = mountWorkInProgressOffscreenFiber(\n { mode: \"visible\", children: nextProps.children },\n showFallback\n )),\n (nextPrimaryChildren = createFiberFromFragment(\n nextPrimaryChildren,\n showFallback,\n renderLanes,\n null\n )),\n (nextPrimaryChildren.flags |= 2),\n (nextProps.return = workInProgress),\n (nextPrimaryChildren.return = workInProgress),\n (nextProps.sibling = nextPrimaryChildren),\n (workInProgress.child = nextProps),\n reconcileChildFibers(\n workInProgress,\n current.child,\n null,\n renderLanes\n ),\n (nextProps = workInProgress.child),\n (nextProps.memoizedState =\n mountSuspenseOffscreenState(renderLanes)),\n (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n current,\n JSCompiler_temp,\n renderLanes\n )),\n (workInProgress.memoizedState = SUSPENDED_MARKER),\n (workInProgress = bailoutOffscreenComponent(null, nextProps)));\n else if (\n (pushPrimaryTreeSuspenseHandler(workInProgress),\n isSuspenseInstanceFallback(nextPrimaryChildren))\n ) {\n JSCompiler_temp =\n nextPrimaryChildren.nextSibling &&\n nextPrimaryChildren.nextSibling.dataset;\n if (JSCompiler_temp) var digest = JSCompiler_temp.dgst;\n JSCompiler_temp = digest;\n nextProps = Error(formatProdErrorMessage(419));\n nextProps.stack = \"\";\n nextProps.digest = JSCompiler_temp;\n queueHydrationError({ value: nextProps, source: null, stack: null });\n workInProgress = retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n );\n } else if (\n (didReceiveUpdate ||\n propagateParentContextChanges(current, workInProgress, renderLanes, !1),\n (JSCompiler_temp = 0 !== (renderLanes & current.childLanes)),\n didReceiveUpdate || JSCompiler_temp)\n ) {\n JSCompiler_temp = workInProgressRoot;\n if (\n null !== JSCompiler_temp &&\n ((nextProps = getBumpedLaneForHydration(JSCompiler_temp, renderLanes)),\n 0 !== nextProps && nextProps !== prevState.retryLane)\n )\n throw (\n ((prevState.retryLane = nextProps),\n enqueueConcurrentRenderForLane(current, nextProps),\n scheduleUpdateOnFiber(JSCompiler_temp, current, nextProps),\n SelectiveHydrationException)\n );\n isSuspenseInstancePending(nextPrimaryChildren) ||\n renderDidSuspendDelayIfPossible();\n workInProgress = retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n );\n } else\n isSuspenseInstancePending(nextPrimaryChildren)\n ? ((workInProgress.flags |= 192),\n (workInProgress.child = current.child),\n (workInProgress = null))\n : ((current = prevState.treeContext),\n (nextHydratableInstance = getNextHydratable(\n nextPrimaryChildren.nextSibling\n )),\n (hydrationParentFiber = workInProgress),\n (isHydrating = !0),\n (hydrationErrors = null),\n (rootOrSingletonContext = !1),\n null !== current &&\n restoreSuspendedTreeContext(workInProgress, current),\n (workInProgress = mountSuspensePrimaryChildren(\n workInProgress,\n nextProps.children\n )),\n (workInProgress.flags |= 4096));\n return workInProgress;\n }\n if (showFallback)\n return (\n reuseSuspenseHandlerOnStack(workInProgress),\n (nextPrimaryChildren = nextProps.fallback),\n (showFallback = workInProgress.mode),\n (prevState = current.child),\n (digest = prevState.sibling),\n (nextProps = createWorkInProgress(prevState, {\n mode: \"hidden\",\n children: nextProps.children\n })),\n (nextProps.subtreeFlags = prevState.subtreeFlags & 65011712),\n null !== digest\n ? (nextPrimaryChildren = createWorkInProgress(\n digest,\n nextPrimaryChildren\n ))\n : ((nextPrimaryChildren = createFiberFromFragment(\n nextPrimaryChildren,\n showFallback,\n renderLanes,\n null\n )),\n (nextPrimaryChildren.flags |= 2)),\n (nextPrimaryChildren.return = workInProgress),\n (nextProps.return = workInProgress),\n (nextProps.sibling = nextPrimaryChildren),\n (workInProgress.child = nextProps),\n bailoutOffscreenComponent(null, nextProps),\n (nextProps = workInProgress.child),\n (nextPrimaryChildren = current.child.memoizedState),\n null === nextPrimaryChildren\n ? (nextPrimaryChildren = mountSuspenseOffscreenState(renderLanes))\n : ((showFallback = nextPrimaryChildren.cachePool),\n null !== showFallback\n ? ((prevState = CacheContext._currentValue),\n (showFallback =\n showFallback.parent !== prevState\n ? { parent: prevState, pool: prevState }\n : showFallback))\n : (showFallback = getSuspendedCache()),\n (nextPrimaryChildren = {\n baseLanes: nextPrimaryChildren.baseLanes | renderLanes,\n cachePool: showFallback\n })),\n (nextProps.memoizedState = nextPrimaryChildren),\n (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n current,\n JSCompiler_temp,\n renderLanes\n )),\n (workInProgress.memoizedState = SUSPENDED_MARKER),\n bailoutOffscreenComponent(current.child, nextProps)\n );\n pushPrimaryTreeSuspenseHandler(workInProgress);\n renderLanes = current.child;\n current = renderLanes.sibling;\n renderLanes = createWorkInProgress(renderLanes, {\n mode: \"visible\",\n children: nextProps.children\n });\n renderLanes.return = workInProgress;\n renderLanes.sibling = null;\n null !== current &&\n ((JSCompiler_temp = workInProgress.deletions),\n null === JSCompiler_temp\n ? ((workInProgress.deletions = [current]), (workInProgress.flags |= 16))\n : JSCompiler_temp.push(current));\n workInProgress.child = renderLanes;\n workInProgress.memoizedState = null;\n return renderLanes;\n}\nfunction mountSuspensePrimaryChildren(workInProgress, primaryChildren) {\n primaryChildren = mountWorkInProgressOffscreenFiber(\n { mode: \"visible\", children: primaryChildren },\n workInProgress.mode\n );\n primaryChildren.return = workInProgress;\n return (workInProgress.child = primaryChildren);\n}\nfunction mountWorkInProgressOffscreenFiber(offscreenProps, mode) {\n offscreenProps = createFiberImplClass(22, offscreenProps, null, mode);\n offscreenProps.lanes = 0;\n return offscreenProps;\n}\nfunction retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n) {\n reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n current = mountSuspensePrimaryChildren(\n workInProgress,\n workInProgress.pendingProps.children\n );\n current.flags |= 2;\n workInProgress.memoizedState = null;\n return current;\n}\nfunction scheduleSuspenseWorkOnFiber(fiber, renderLanes, propagationRoot) {\n fiber.lanes |= renderLanes;\n var alternate = fiber.alternate;\n null !== alternate && (alternate.lanes |= renderLanes);\n scheduleContextWorkOnParentPath(fiber.return, renderLanes, propagationRoot);\n}\nfunction initSuspenseListRenderState(\n workInProgress,\n isBackwards,\n tail,\n lastContentRow,\n tailMode,\n treeForkCount\n) {\n var renderState = workInProgress.memoizedState;\n null === renderState\n ? (workInProgress.memoizedState = {\n isBackwards: isBackwards,\n rendering: null,\n renderingStartTime: 0,\n last: lastContentRow,\n tail: tail,\n tailMode: tailMode,\n treeForkCount: treeForkCount\n })\n : ((renderState.isBackwards = isBackwards),\n (renderState.rendering = null),\n (renderState.renderingStartTime = 0),\n (renderState.last = lastContentRow),\n (renderState.tail = tail),\n (renderState.tailMode = tailMode),\n (renderState.treeForkCount = treeForkCount));\n}\nfunction updateSuspenseListComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps,\n revealOrder = nextProps.revealOrder,\n tailMode = nextProps.tail;\n nextProps = nextProps.children;\n var suspenseContext = suspenseStackCursor.current,\n shouldForceFallback = 0 !== (suspenseContext & 2);\n shouldForceFallback\n ? ((suspenseContext = (suspenseContext & 1) | 2),\n (workInProgress.flags |= 128))\n : (suspenseContext &= 1);\n push(suspenseStackCursor, suspenseContext);\n reconcileChildren(current, workInProgress, nextProps, renderLanes);\n nextProps = isHydrating ? treeForkCount : 0;\n if (!shouldForceFallback && null !== current && 0 !== (current.flags & 128))\n a: for (current = workInProgress.child; null !== current; ) {\n if (13 === current.tag)\n null !== current.memoizedState &&\n scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n else if (19 === current.tag)\n scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n else if (null !== current.child) {\n current.child.return = current;\n current = current.child;\n continue;\n }\n if (current === workInProgress) break a;\n for (; null === current.sibling; ) {\n if (null === current.return || current.return === workInProgress)\n break a;\n current = current.return;\n }\n current.sibling.return = current.return;\n current = current.sibling;\n }\n switch (revealOrder) {\n case \"forwards\":\n renderLanes = workInProgress.child;\n for (revealOrder = null; null !== renderLanes; )\n (current = renderLanes.alternate),\n null !== current &&\n null === findFirstSuspended(current) &&\n (revealOrder = renderLanes),\n (renderLanes = renderLanes.sibling);\n renderLanes = revealOrder;\n null === renderLanes\n ? ((revealOrder = workInProgress.child), (workInProgress.child = null))\n : ((revealOrder = renderLanes.sibling), (renderLanes.sibling = null));\n initSuspenseListRenderState(\n workInProgress,\n !1,\n revealOrder,\n renderLanes,\n tailMode,\n nextProps\n );\n break;\n case \"backwards\":\n case \"unstable_legacy-backwards\":\n renderLanes = null;\n revealOrder = workInProgress.child;\n for (workInProgress.child = null; null !== revealOrder; ) {\n current = revealOrder.alternate;\n if (null !== current && null === findFirstSuspended(current)) {\n workInProgress.child = revealOrder;\n break;\n }\n current = revealOrder.sibling;\n revealOrder.sibling = renderLanes;\n renderLanes = revealOrder;\n revealOrder = current;\n }\n initSuspenseListRenderState(\n workInProgress,\n !0,\n renderLanes,\n null,\n tailMode,\n nextProps\n );\n break;\n case \"together\":\n initSuspenseListRenderState(\n workInProgress,\n !1,\n null,\n null,\n void 0,\n nextProps\n );\n break;\n default:\n workInProgress.memoizedState = null;\n }\n return workInProgress.child;\n}\nfunction bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes) {\n null !== current && (workInProgress.dependencies = current.dependencies);\n workInProgressRootSkippedLanes |= workInProgress.lanes;\n if (0 === (renderLanes & workInProgress.childLanes))\n if (null !== current) {\n if (\n (propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n !1\n ),\n 0 === (renderLanes & workInProgress.childLanes))\n )\n return null;\n } else return null;\n if (null !== current && workInProgress.child !== current.child)\n throw Error(formatProdErrorMessage(153));\n if (null !== workInProgress.child) {\n current = workInProgress.child;\n renderLanes = createWorkInProgress(current, current.pendingProps);\n workInProgress.child = renderLanes;\n for (renderLanes.return = workInProgress; null !== current.sibling; )\n (current = current.sibling),\n (renderLanes = renderLanes.sibling =\n createWorkInProgress(current, current.pendingProps)),\n (renderLanes.return = workInProgress);\n renderLanes.sibling = null;\n }\n return workInProgress.child;\n}\nfunction checkScheduledUpdateOrContext(current, renderLanes) {\n if (0 !== (current.lanes & renderLanes)) return !0;\n current = current.dependencies;\n return null !== current && checkIfContextChanged(current) ? !0 : !1;\n}\nfunction attemptEarlyBailoutIfNoScheduledUpdate(\n current,\n workInProgress,\n renderLanes\n) {\n switch (workInProgress.tag) {\n case 3:\n pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n pushProvider(workInProgress, CacheContext, current.memoizedState.cache);\n resetHydrationState();\n break;\n case 27:\n case 5:\n pushHostContext(workInProgress);\n break;\n case 4:\n pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n break;\n case 10:\n pushProvider(\n workInProgress,\n workInProgress.type,\n workInProgress.memoizedProps.value\n );\n break;\n case 31:\n if (null !== workInProgress.memoizedState)\n return (\n (workInProgress.flags |= 128),\n pushDehydratedActivitySuspenseHandler(workInProgress),\n null\n );\n break;\n case 13:\n var state$102 = workInProgress.memoizedState;\n if (null !== state$102) {\n if (null !== state$102.dehydrated)\n return (\n pushPrimaryTreeSuspenseHandler(workInProgress),\n (workInProgress.flags |= 128),\n null\n );\n if (0 !== (renderLanes & workInProgress.child.childLanes))\n return updateSuspenseComponent(current, workInProgress, renderLanes);\n pushPrimaryTreeSuspenseHandler(workInProgress);\n current = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n );\n return null !== current ? current.sibling : null;\n }\n pushPrimaryTreeSuspenseHandler(workInProgress);\n break;\n case 19:\n var didSuspendBefore = 0 !== (current.flags & 128);\n state$102 = 0 !== (renderLanes & workInProgress.childLanes);\n state$102 ||\n (propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n !1\n ),\n (state$102 = 0 !== (renderLanes & workInProgress.childLanes)));\n if (didSuspendBefore) {\n if (state$102)\n return updateSuspenseListComponent(\n current,\n workInProgress,\n renderLanes\n );\n workInProgress.flags |= 128;\n }\n didSuspendBefore = workInProgress.memoizedState;\n null !== didSuspendBefore &&\n ((didSuspendBefore.rendering = null),\n (didSuspendBefore.tail = null),\n (didSuspendBefore.lastEffect = null));\n push(suspenseStackCursor, suspenseStackCursor.current);\n if (state$102) break;\n else return null;\n case 22:\n return (\n (workInProgress.lanes = 0),\n updateOffscreenComponent(\n current,\n workInProgress,\n renderLanes,\n workInProgress.pendingProps\n )\n );\n case 24:\n pushProvider(workInProgress, CacheContext, current.memoizedState.cache);\n }\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n}\nfunction beginWork(current, workInProgress, renderLanes) {\n if (null !== current)\n if (current.memoizedProps !== workInProgress.pendingProps)\n didReceiveUpdate = !0;\n else {\n if (\n !checkScheduledUpdateOrContext(current, renderLanes) &&\n 0 === (workInProgress.flags & 128)\n )\n return (\n (didReceiveUpdate = !1),\n attemptEarlyBailoutIfNoScheduledUpdate(\n current,\n workInProgress,\n renderLanes\n )\n );\n didReceiveUpdate = 0 !== (current.flags & 131072) ? !0 : !1;\n }\n else\n (didReceiveUpdate = !1),\n isHydrating &&\n 0 !== (workInProgress.flags & 1048576) &&\n pushTreeId(workInProgress, treeForkCount, workInProgress.index);\n workInProgress.lanes = 0;\n switch (workInProgress.tag) {\n case 16:\n a: {\n var props = workInProgress.pendingProps;\n current = resolveLazy(workInProgress.elementType);\n workInProgress.type = current;\n if (\"function\" === typeof current)\n shouldConstruct(current)\n ? ((props = resolveClassComponentProps(current, props)),\n (workInProgress.tag = 1),\n (workInProgress = updateClassComponent(\n null,\n workInProgress,\n current,\n props,\n renderLanes\n )))\n : ((workInProgress.tag = 0),\n (workInProgress = updateFunctionComponent(\n null,\n workInProgress,\n current,\n props,\n renderLanes\n )));\n else {\n if (void 0 !== current && null !== current) {\n var $$typeof = current.$$typeof;\n if ($$typeof === REACT_FORWARD_REF_TYPE) {\n workInProgress.tag = 11;\n workInProgress = updateForwardRef(\n null,\n workInProgress,\n current,\n props,\n renderLanes\n );\n break a;\n } else if ($$typeof === REACT_MEMO_TYPE) {\n workInProgress.tag = 14;\n workInProgress = updateMemoComponent(\n null,\n workInProgress,\n current,\n props,\n renderLanes\n );\n break a;\n }\n }\n workInProgress = getComponentNameFromType(current) || current;\n throw Error(formatProdErrorMessage(306, workInProgress, \"\"));\n }\n }\n return workInProgress;\n case 0:\n return updateFunctionComponent(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 1:\n return (\n (props = workInProgress.type),\n ($$typeof = resolveClassComponentProps(\n props,\n workInProgress.pendingProps\n )),\n updateClassComponent(\n current,\n workInProgress,\n props,\n $$typeof,\n renderLanes\n )\n );\n case 3:\n a: {\n pushHostContainer(\n workInProgress,\n workInProgress.stateNode.containerInfo\n );\n if (null === current) throw Error(formatProdErrorMessage(387));\n props = workInProgress.pendingProps;\n var prevState = workInProgress.memoizedState;\n $$typeof = prevState.element;\n cloneUpdateQueue(current, workInProgress);\n processUpdateQueue(workInProgress, props, null, renderLanes);\n var nextState = workInProgress.memoizedState;\n props = nextState.cache;\n pushProvider(workInProgress, CacheContext, props);\n props !== prevState.cache &&\n propagateContextChanges(\n workInProgress,\n [CacheContext],\n renderLanes,\n !0\n );\n suspendIfUpdateReadFromEntangledAsyncAction();\n props = nextState.element;\n if (prevState.isDehydrated)\n if (\n ((prevState = {\n element: props,\n isDehydrated: !1,\n cache: nextState.cache\n }),\n (workInProgress.updateQueue.baseState = prevState),\n (workInProgress.memoizedState = prevState),\n workInProgress.flags & 256)\n ) {\n workInProgress = mountHostRootWithoutHydrating(\n current,\n workInProgress,\n props,\n renderLanes\n );\n break a;\n } else if (props !== $$typeof) {\n $$typeof = createCapturedValueAtFiber(\n Error(formatProdErrorMessage(424)),\n workInProgress\n );\n queueHydrationError($$typeof);\n workInProgress = mountHostRootWithoutHydrating(\n current,\n workInProgress,\n props,\n renderLanes\n );\n break a;\n } else {\n current = workInProgress.stateNode.containerInfo;\n switch (current.nodeType) {\n case 9:\n current = current.body;\n break;\n default:\n current =\n \"HTML\" === current.nodeName\n ? current.ownerDocument.body\n : current;\n }\n nextHydratableInstance = getNextHydratable(current.firstChild);\n hydrationParentFiber = workInProgress;\n isHydrating = !0;\n hydrationErrors = null;\n rootOrSingletonContext = !0;\n renderLanes = mountChildFibers(\n workInProgress,\n null,\n props,\n renderLanes\n );\n for (workInProgress.child = renderLanes; renderLanes; )\n (renderLanes.flags = (renderLanes.flags & -3) | 4096),\n (renderLanes = renderLanes.sibling);\n }\n else {\n resetHydrationState();\n if (props === $$typeof) {\n workInProgress = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n );\n break a;\n }\n reconcileChildren(current, workInProgress, props, renderLanes);\n }\n workInProgress = workInProgress.child;\n }\n return workInProgress;\n case 26:\n return (\n markRef(current, workInProgress),\n null === current\n ? (renderLanes = getResource(\n workInProgress.type,\n null,\n workInProgress.pendingProps,\n null\n ))\n ? (workInProgress.memoizedState = renderLanes)\n : isHydrating ||\n ((renderLanes = workInProgress.type),\n (current = workInProgress.pendingProps),\n (props = getOwnerDocumentFromRootContainer(\n rootInstanceStackCursor.current\n ).createElement(renderLanes)),\n (props[internalInstanceKey] = workInProgress),\n (props[internalPropsKey] = current),\n setInitialProperties(props, renderLanes, current),\n markNodeAsHoistable(props),\n (workInProgress.stateNode = props))\n : (workInProgress.memoizedState = getResource(\n workInProgress.type,\n current.memoizedProps,\n workInProgress.pendingProps,\n current.memoizedState\n )),\n null\n );\n case 27:\n return (\n pushHostContext(workInProgress),\n null === current &&\n isHydrating &&\n ((props = workInProgress.stateNode =\n resolveSingletonInstance(\n workInProgress.type,\n workInProgress.pendingProps,\n rootInstanceStackCursor.current\n )),\n (hydrationParentFiber = workInProgress),\n (rootOrSingletonContext = !0),\n ($$typeof = nextHydratableInstance),\n isSingletonScope(workInProgress.type)\n ? ((previousHydratableOnEnteringScopedSingleton = $$typeof),\n (nextHydratableInstance = getNextHydratable(props.firstChild)))\n : (nextHydratableInstance = $$typeof)),\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n markRef(current, workInProgress),\n null === current && (workInProgress.flags |= 4194304),\n workInProgress.child\n );\n case 5:\n if (null === current && isHydrating) {\n if (($$typeof = props = nextHydratableInstance))\n (props = canHydrateInstance(\n props,\n workInProgress.type,\n workInProgress.pendingProps,\n rootOrSingletonContext\n )),\n null !== props\n ? ((workInProgress.stateNode = props),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = getNextHydratable(props.firstChild)),\n (rootOrSingletonContext = !1),\n ($$typeof = !0))\n : ($$typeof = !1);\n $$typeof || throwOnHydrationMismatch(workInProgress);\n }\n pushHostContext(workInProgress);\n $$typeof = workInProgress.type;\n prevState = workInProgress.pendingProps;\n nextState = null !== current ? current.memoizedProps : null;\n props = prevState.children;\n shouldSetTextContent($$typeof, prevState)\n ? (props = null)\n : null !== nextState &&\n shouldSetTextContent($$typeof, nextState) &&\n (workInProgress.flags |= 32);\n null !== workInProgress.memoizedState &&\n (($$typeof = renderWithHooks(\n current,\n workInProgress,\n TransitionAwareHostComponent,\n null,\n null,\n renderLanes\n )),\n (HostTransitionContext._currentValue = $$typeof));\n markRef(current, workInProgress);\n reconcileChildren(current, workInProgress, props, renderLanes);\n return workInProgress.child;\n case 6:\n if (null === current && isHydrating) {\n if ((current = renderLanes = nextHydratableInstance))\n (renderLanes = canHydrateTextInstance(\n renderLanes,\n workInProgress.pendingProps,\n rootOrSingletonContext\n )),\n null !== renderLanes\n ? ((workInProgress.stateNode = renderLanes),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = null),\n (current = !0))\n : (current = !1);\n current || throwOnHydrationMismatch(workInProgress);\n }\n return null;\n case 13:\n return updateSuspenseComponent(current, workInProgress, renderLanes);\n case 4:\n return (\n pushHostContainer(\n workInProgress,\n workInProgress.stateNode.containerInfo\n ),\n (props = workInProgress.pendingProps),\n null === current\n ? (workInProgress.child = reconcileChildFibers(\n workInProgress,\n null,\n props,\n renderLanes\n ))\n : reconcileChildren(current, workInProgress, props, renderLanes),\n workInProgress.child\n );\n case 11:\n return updateForwardRef(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 7:\n return (\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps,\n renderLanes\n ),\n workInProgress.child\n );\n case 8:\n return (\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 12:\n return (\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 10:\n return (\n (props = workInProgress.pendingProps),\n pushProvider(workInProgress, workInProgress.type, props.value),\n reconcileChildren(current, workInProgress, props.children, renderLanes),\n workInProgress.child\n );\n case 9:\n return (\n ($$typeof = workInProgress.type._context),\n (props = workInProgress.pendingProps.children),\n prepareToReadContext(workInProgress),\n ($$typeof = readContext($$typeof)),\n (props = props($$typeof)),\n (workInProgress.flags |= 1),\n reconcileChildren(current, workInProgress, props, renderLanes),\n workInProgress.child\n );\n case 14:\n return updateMemoComponent(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 15:\n return updateSimpleMemoComponent(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 19:\n return updateSuspenseListComponent(current, workInProgress, renderLanes);\n case 31:\n return updateActivityComponent(current, workInProgress, renderLanes);\n case 22:\n return updateOffscreenComponent(\n current,\n workInProgress,\n renderLanes,\n workInProgress.pendingProps\n );\n case 24:\n return (\n prepareToReadContext(workInProgress),\n (props = readContext(CacheContext)),\n null === current\n ? (($$typeof = peekCacheFromPool()),\n null === $$typeof &&\n (($$typeof = workInProgressRoot),\n (prevState = createCache()),\n ($$typeof.pooledCache = prevState),\n prevState.refCount++,\n null !== prevState && ($$typeof.pooledCacheLanes |= renderLanes),\n ($$typeof = prevState)),\n (workInProgress.memoizedState = { parent: props, cache: $$typeof }),\n initializeUpdateQueue(workInProgress),\n pushProvider(workInProgress, CacheContext, $$typeof))\n : (0 !== (current.lanes & renderLanes) &&\n (cloneUpdateQueue(current, workInProgress),\n processUpdateQueue(workInProgress, null, null, renderLanes),\n suspendIfUpdateReadFromEntangledAsyncAction()),\n ($$typeof = current.memoizedState),\n (prevState = workInProgress.memoizedState),\n $$typeof.parent !== props\n ? (($$typeof = { parent: props, cache: props }),\n (workInProgress.memoizedState = $$typeof),\n 0 === workInProgress.lanes &&\n (workInProgress.memoizedState =\n workInProgress.updateQueue.baseState =\n $$typeof),\n pushProvider(workInProgress, CacheContext, props))\n : ((props = prevState.cache),\n pushProvider(workInProgress, CacheContext, props),\n props !== $$typeof.cache &&\n propagateContextChanges(\n workInProgress,\n [CacheContext],\n renderLanes,\n !0\n ))),\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 29:\n throw workInProgress.pendingProps;\n }\n throw Error(formatProdErrorMessage(156, workInProgress.tag));\n}\nfunction markUpdate(workInProgress) {\n workInProgress.flags |= 4;\n}\nfunction preloadInstanceAndSuspendIfNeeded(\n workInProgress,\n type,\n oldProps,\n newProps,\n renderLanes\n) {\n if ((type = 0 !== (workInProgress.mode & 32))) type = !1;\n if (type) {\n if (\n ((workInProgress.flags |= 16777216),\n (renderLanes & 335544128) === renderLanes)\n )\n if (workInProgress.stateNode.complete) workInProgress.flags |= 8192;\n else if (shouldRemainOnPreviousScreen()) workInProgress.flags |= 8192;\n else\n throw (\n ((suspendedThenable = noopSuspenseyCommitThenable),\n SuspenseyCommitException)\n );\n } else workInProgress.flags &= -16777217;\n}\nfunction preloadResourceAndSuspendIfNeeded(workInProgress, resource) {\n if (\"stylesheet\" !== resource.type || 0 !== (resource.state.loading & 4))\n workInProgress.flags &= -16777217;\n else if (((workInProgress.flags |= 16777216), !preloadResource(resource)))\n if (shouldRemainOnPreviousScreen()) workInProgress.flags |= 8192;\n else\n throw (\n ((suspendedThenable = noopSuspenseyCommitThenable),\n SuspenseyCommitException)\n );\n}\nfunction scheduleRetryEffect(workInProgress, retryQueue) {\n null !== retryQueue && (workInProgress.flags |= 4);\n workInProgress.flags & 16384 &&\n ((retryQueue =\n 22 !== workInProgress.tag ? claimNextRetryLane() : 536870912),\n (workInProgress.lanes |= retryQueue),\n (workInProgressSuspendedRetryLanes |= retryQueue));\n}\nfunction cutOffTailIfNeeded(renderState, hasRenderedATailFallback) {\n if (!isHydrating)\n switch (renderState.tailMode) {\n case \"hidden\":\n hasRenderedATailFallback = renderState.tail;\n for (var lastTailNode = null; null !== hasRenderedATailFallback; )\n null !== hasRenderedATailFallback.alternate &&\n (lastTailNode = hasRenderedATailFallback),\n (hasRenderedATailFallback = hasRenderedATailFallback.sibling);\n null === lastTailNode\n ? (renderState.tail = null)\n : (lastTailNode.sibling = null);\n break;\n case \"collapsed\":\n lastTailNode = renderState.tail;\n for (var lastTailNode$106 = null; null !== lastTailNode; )\n null !== lastTailNode.alternate && (lastTailNode$106 = lastTailNode),\n (lastTailNode = lastTailNode.sibling);\n null === lastTailNode$106\n ? hasRenderedATailFallback || null === renderState.tail\n ? (renderState.tail = null)\n : (renderState.tail.sibling = null)\n : (lastTailNode$106.sibling = null);\n }\n}\nfunction bubbleProperties(completedWork) {\n var didBailout =\n null !== completedWork.alternate &&\n completedWork.alternate.child === completedWork.child,\n newChildLanes = 0,\n subtreeFlags = 0;\n if (didBailout)\n for (var child$107 = completedWork.child; null !== child$107; )\n (newChildLanes |= child$107.lanes | child$107.childLanes),\n (subtreeFlags |= child$107.subtreeFlags & 65011712),\n (subtreeFlags |= child$107.flags & 65011712),\n (child$107.return = completedWork),\n (child$107 = child$107.sibling);\n else\n for (child$107 = completedWork.child; null !== child$107; )\n (newChildLanes |= child$107.lanes | child$107.childLanes),\n (subtreeFlags |= child$107.subtreeFlags),\n (subtreeFlags |= child$107.flags),\n (child$107.return = completedWork),\n (child$107 = child$107.sibling);\n completedWork.subtreeFlags |= subtreeFlags;\n completedWork.childLanes = newChildLanes;\n return didBailout;\n}\nfunction completeWork(current, workInProgress, renderLanes) {\n var newProps = workInProgress.pendingProps;\n popTreeContext(workInProgress);\n switch (workInProgress.tag) {\n case 16:\n case 15:\n case 0:\n case 11:\n case 7:\n case 8:\n case 12:\n case 9:\n case 14:\n return bubbleProperties(workInProgress), null;\n case 1:\n return bubbleProperties(workInProgress), null;\n case 3:\n renderLanes = workInProgress.stateNode;\n newProps = null;\n null !== current && (newProps = current.memoizedState.cache);\n workInProgress.memoizedState.cache !== newProps &&\n (workInProgress.flags |= 2048);\n popProvider(CacheContext);\n popHostContainer();\n renderLanes.pendingContext &&\n ((renderLanes.context = renderLanes.pendingContext),\n (renderLanes.pendingContext = null));\n if (null === current || null === current.child)\n popHydrationState(workInProgress)\n ? markUpdate(workInProgress)\n : null === current ||\n (current.memoizedState.isDehydrated &&\n 0 === (workInProgress.flags & 256)) ||\n ((workInProgress.flags |= 1024),\n upgradeHydrationErrorsToRecoverable());\n bubbleProperties(workInProgress);\n return null;\n case 26:\n var type = workInProgress.type,\n nextResource = workInProgress.memoizedState;\n null === current\n ? (markUpdate(workInProgress),\n null !== nextResource\n ? (bubbleProperties(workInProgress),\n preloadResourceAndSuspendIfNeeded(workInProgress, nextResource))\n : (bubbleProperties(workInProgress),\n preloadInstanceAndSuspendIfNeeded(\n workInProgress,\n type,\n null,\n newProps,\n renderLanes\n )))\n : nextResource\n ? nextResource !== current.memoizedState\n ? (markUpdate(workInProgress),\n bubbleProperties(workInProgress),\n preloadResourceAndSuspendIfNeeded(workInProgress, nextResource))\n : (bubbleProperties(workInProgress),\n (workInProgress.flags &= -16777217))\n : ((current = current.memoizedProps),\n current !== newProps && markUpdate(workInProgress),\n bubbleProperties(workInProgress),\n preloadInstanceAndSuspendIfNeeded(\n workInProgress,\n type,\n current,\n newProps,\n renderLanes\n ));\n return null;\n case 27:\n popHostContext(workInProgress);\n renderLanes = rootInstanceStackCursor.current;\n type = workInProgress.type;\n if (null !== current && null != workInProgress.stateNode)\n current.memoizedProps !== newProps && markUpdate(workInProgress);\n else {\n if (!newProps) {\n if (null === workInProgress.stateNode)\n throw Error(formatProdErrorMessage(166));\n bubbleProperties(workInProgress);\n return null;\n }\n current = contextStackCursor.current;\n popHydrationState(workInProgress)\n ? prepareToHydrateHostInstance(workInProgress, current)\n : ((current = resolveSingletonInstance(type, newProps, renderLanes)),\n (workInProgress.stateNode = current),\n markUpdate(workInProgress));\n }\n bubbleProperties(workInProgress);\n return null;\n case 5:\n popHostContext(workInProgress);\n type = workInProgress.type;\n if (null !== current && null != workInProgress.stateNode)\n current.memoizedProps !== newProps && markUpdate(workInProgress);\n else {\n if (!newProps) {\n if (null === workInProgress.stateNode)\n throw Error(formatProdErrorMessage(166));\n bubbleProperties(workInProgress);\n return null;\n }\n nextResource = contextStackCursor.current;\n if (popHydrationState(workInProgress))\n prepareToHydrateHostInstance(workInProgress, nextResource);\n else {\n var ownerDocument = getOwnerDocumentFromRootContainer(\n rootInstanceStackCursor.current\n );\n switch (nextResource) {\n case 1:\n nextResource = ownerDocument.createElementNS(\n \"http://www.w3.org/2000/svg\",\n type\n );\n break;\n case 2:\n nextResource = ownerDocument.createElementNS(\n \"http://www.w3.org/1998/Math/MathML\",\n type\n );\n break;\n default:\n switch (type) {\n case \"svg\":\n nextResource = ownerDocument.createElementNS(\n \"http://www.w3.org/2000/svg\",\n type\n );\n break;\n case \"math\":\n nextResource = ownerDocument.createElementNS(\n \"http://www.w3.org/1998/Math/MathML\",\n type\n );\n break;\n case \"script\":\n nextResource = ownerDocument.createElement(\"div\");\n nextResource.innerHTML = \"<script>\\x3c/script>\";\n nextResource = nextResource.removeChild(\n nextResource.firstChild\n );\n break;\n case \"select\":\n nextResource =\n \"string\" === typeof newProps.is\n ? ownerDocument.createElement(\"select\", {\n is: newProps.is\n })\n : ownerDocument.createElement(\"select\");\n newProps.multiple\n ? (nextResource.multiple = !0)\n : newProps.size && (nextResource.size = newProps.size);\n break;\n default:\n nextResource =\n \"string\" === typeof newProps.is\n ? ownerDocument.createElement(type, { is: newProps.is })\n : ownerDocument.createElement(type);\n }\n }\n nextResource[internalInstanceKey] = workInProgress;\n nextResource[internalPropsKey] = newProps;\n a: for (\n ownerDocument = workInProgress.child;\n null !== ownerDocument;\n\n ) {\n if (5 === ownerDocument.tag || 6 === ownerDocument.tag)\n nextResource.appendChild(ownerDocument.stateNode);\n else if (\n 4 !== ownerDocument.tag &&\n 27 !== ownerDocument.tag &&\n null !== ownerDocument.child\n ) {\n ownerDocument.child.return = ownerDocument;\n ownerDocument = ownerDocument.child;\n continue;\n }\n if (ownerDocument === workInProgress) break a;\n for (; null === ownerDocument.sibling; ) {\n if (\n null === ownerDocument.return ||\n ownerDocument.return === workInProgress\n )\n break a;\n ownerDocument = ownerDocument.return;\n }\n ownerDocument.sibling.return = ownerDocument.return;\n ownerDocument = ownerDocument.sibling;\n }\n workInProgress.stateNode = nextResource;\n a: switch (\n (setInitialProperties(nextResource, type, newProps), type)\n ) {\n case \"button\":\n case \"input\":\n case \"select\":\n case \"textarea\":\n newProps = !!newProps.autoFocus;\n break a;\n case \"img\":\n newProps = !0;\n break a;\n default:\n newProps = !1;\n }\n newProps && markUpdate(workInProgress);\n }\n }\n bubbleProperties(workInProgress);\n preloadInstanceAndSuspendIfNeeded(\n workInProgress,\n workInProgress.type,\n null === current ? null : current.memoizedProps,\n workInProgress.pendingProps,\n renderLanes\n );\n return null;\n case 6:\n if (current && null != workInProgress.stateNode)\n current.memoizedProps !== newProps && markUpdate(workInProgress);\n else {\n if (\"string\" !== typeof newProps && null === workInProgress.stateNode)\n throw Error(formatProdErrorMessage(166));\n current = rootInstanceStackCursor.current;\n if (popHydrationState(workInProgress)) {\n current = workInProgress.stateNode;\n renderLanes = workInProgress.memoizedProps;\n newProps = null;\n type = hydrationParentFiber;\n if (null !== type)\n switch (type.tag) {\n case 27:\n case 5:\n newProps = type.memoizedProps;\n }\n current[internalInstanceKey] = workInProgress;\n current =\n current.nodeValue === renderLanes ||\n (null !== newProps && !0 === newProps.suppressHydrationWarning) ||\n checkForUnmatchedText(current.nodeValue, renderLanes)\n ? !0\n : !1;\n current || throwOnHydrationMismatch(workInProgress, !0);\n } else\n (current =\n getOwnerDocumentFromRootContainer(current).createTextNode(\n newProps\n )),\n (current[internalInstanceKey] = workInProgress),\n (workInProgress.stateNode = current);\n }\n bubbleProperties(workInProgress);\n return null;\n case 31:\n renderLanes = workInProgress.memoizedState;\n if (null === current || null !== current.memoizedState) {\n newProps = popHydrationState(workInProgress);\n if (null !== renderLanes) {\n if (null === current) {\n if (!newProps) throw Error(formatProdErrorMessage(318));\n current = workInProgress.memoizedState;\n current = null !== current ? current.dehydrated : null;\n if (!current) throw Error(formatProdErrorMessage(557));\n current[internalInstanceKey] = workInProgress;\n } else\n resetHydrationState(),\n 0 === (workInProgress.flags & 128) &&\n (workInProgress.memoizedState = null),\n (workInProgress.flags |= 4);\n bubbleProperties(workInProgress);\n current = !1;\n } else\n (renderLanes = upgradeHydrationErrorsToRecoverable()),\n null !== current &&\n null !== current.memoizedState &&\n (current.memoizedState.hydrationErrors = renderLanes),\n (current = !0);\n if (!current) {\n if (workInProgress.flags & 256)\n return popSuspenseHandler(workInProgress), workInProgress;\n popSuspenseHandler(workInProgress);\n return null;\n }\n if (0 !== (workInProgress.flags & 128))\n throw Error(formatProdErrorMessage(558));\n }\n bubbleProperties(workInProgress);\n return null;\n case 13:\n newProps = workInProgress.memoizedState;\n if (\n null === current ||\n (null !== current.memoizedState &&\n null !== current.memoizedState.dehydrated)\n ) {\n type = popHydrationState(workInProgress);\n if (null !== newProps && null !== newProps.dehydrated) {\n if (null === current) {\n if (!type) throw Error(formatProdErrorMessage(318));\n type = workInProgress.memoizedState;\n type = null !== type ? type.dehydrated : null;\n if (!type) throw Error(formatProdErrorMessage(317));\n type[internalInstanceKey] = workInProgress;\n } else\n resetHydrationState(),\n 0 === (workInProgress.flags & 128) &&\n (workInProgress.memoizedState = null),\n (workInProgress.flags |= 4);\n bubbleProperties(workInProgress);\n type = !1;\n } else\n (type = upgradeHydrationErrorsToRecoverable()),\n null !== current &&\n null !== current.memoizedState &&\n (current.memoizedState.hydrationErrors = type),\n (type = !0);\n if (!type) {\n if (workInProgress.flags & 256)\n return popSuspenseHandler(workInProgress), workInProgress;\n popSuspenseHandler(workInProgress);\n return null;\n }\n }\n popSuspenseHandler(workInProgress);\n if (0 !== (workInProgress.flags & 128))\n return (workInProgress.lanes = renderLanes), workInProgress;\n renderLanes = null !== newProps;\n current = null !== current && null !== current.memoizedState;\n renderLanes &&\n ((newProps = workInProgress.child),\n (type = null),\n null !== newProps.alternate &&\n null !== newProps.alternate.memoizedState &&\n null !== newProps.alternate.memoizedState.cachePool &&\n (type = newProps.alternate.memoizedState.cachePool.pool),\n (nextResource = null),\n null !== newProps.memoizedState &&\n null !== newProps.memoizedState.cachePool &&\n (nextResource = newProps.memoizedState.cachePool.pool),\n nextResource !== type && (newProps.flags |= 2048));\n renderLanes !== current &&\n renderLanes &&\n (workInProgress.child.flags |= 8192);\n scheduleRetryEffect(workInProgress, workInProgress.updateQueue);\n bubbleProperties(workInProgress);\n return null;\n case 4:\n return (\n popHostContainer(),\n null === current &&\n listenToAllSupportedEvents(workInProgress.stateNode.containerInfo),\n bubbleProperties(workInProgress),\n null\n );\n case 10:\n return (\n popProvider(workInProgress.type), bubbleProperties(workInProgress), null\n );\n case 19:\n pop(suspenseStackCursor);\n newProps = workInProgress.memoizedState;\n if (null === newProps) return bubbleProperties(workInProgress), null;\n type = 0 !== (workInProgress.flags & 128);\n nextResource = newProps.rendering;\n if (null === nextResource)\n if (type) cutOffTailIfNeeded(newProps, !1);\n else {\n if (\n 0 !== workInProgressRootExitStatus ||\n (null !== current && 0 !== (current.flags & 128))\n )\n for (current = workInProgress.child; null !== current; ) {\n nextResource = findFirstSuspended(current);\n if (null !== nextResource) {\n workInProgress.flags |= 128;\n cutOffTailIfNeeded(newProps, !1);\n current = nextResource.updateQueue;\n workInProgress.updateQueue = current;\n scheduleRetryEffect(workInProgress, current);\n workInProgress.subtreeFlags = 0;\n current = renderLanes;\n for (renderLanes = workInProgress.child; null !== renderLanes; )\n resetWorkInProgress(renderLanes, current),\n (renderLanes = renderLanes.sibling);\n push(\n suspenseStackCursor,\n (suspenseStackCursor.current & 1) | 2\n );\n isHydrating &&\n pushTreeFork(workInProgress, newProps.treeForkCount);\n return workInProgress.child;\n }\n current = current.sibling;\n }\n null !== newProps.tail &&\n now() > workInProgressRootRenderTargetTime &&\n ((workInProgress.flags |= 128),\n (type = !0),\n cutOffTailIfNeeded(newProps, !1),\n (workInProgress.lanes = 4194304));\n }\n else {\n if (!type)\n if (\n ((current = findFirstSuspended(nextResource)), null !== current)\n ) {\n if (\n ((workInProgress.flags |= 128),\n (type = !0),\n (current = current.updateQueue),\n (workInProgress.updateQueue = current),\n scheduleRetryEffect(workInProgress, current),\n cutOffTailIfNeeded(newProps, !0),\n null === newProps.tail &&\n \"hidden\" === newProps.tailMode &&\n !nextResource.alternate &&\n !isHydrating)\n )\n return bubbleProperties(workInProgress), null;\n } else\n 2 * now() - newProps.renderingStartTime >\n workInProgressRootRenderTargetTime &&\n 536870912 !== renderLanes &&\n ((workInProgress.flags |= 128),\n (type = !0),\n cutOffTailIfNeeded(newProps, !1),\n (workInProgress.lanes = 4194304));\n newProps.isBackwards\n ? ((nextResource.sibling = workInProgress.child),\n (workInProgress.child = nextResource))\n : ((current = newProps.last),\n null !== current\n ? (current.sibling = nextResource)\n : (workInProgress.child = nextResource),\n (newProps.last = nextResource));\n }\n if (null !== newProps.tail)\n return (\n (current = newProps.tail),\n (newProps.rendering = current),\n (newProps.tail = current.sibling),\n (newProps.renderingStartTime = now()),\n (current.sibling = null),\n (renderLanes = suspenseStackCursor.current),\n push(\n suspenseStackCursor,\n type ? (renderLanes & 1) | 2 : renderLanes & 1\n ),\n isHydrating && pushTreeFork(workInProgress, newProps.treeForkCount),\n current\n );\n bubbleProperties(workInProgress);\n return null;\n case 22:\n case 23:\n return (\n popSuspenseHandler(workInProgress),\n popHiddenContext(),\n (newProps = null !== workInProgress.memoizedState),\n null !== current\n ? (null !== current.memoizedState) !== newProps &&\n (workInProgress.flags |= 8192)\n : newProps && (workInProgress.flags |= 8192),\n newProps\n ? 0 !== (renderLanes & 536870912) &&\n 0 === (workInProgress.flags & 128) &&\n (bubbleProperties(workInProgress),\n workInProgress.subtreeFlags & 6 && (workInProgress.flags |= 8192))\n : bubbleProperties(workInProgress),\n (renderLanes = workInProgress.updateQueue),\n null !== renderLanes &&\n scheduleRetryEffect(workInProgress, renderLanes.retryQueue),\n (renderLanes = null),\n null !== current &&\n null !== current.memoizedState &&\n null !== current.memoizedState.cachePool &&\n (renderLanes = current.memoizedState.cachePool.pool),\n (newProps = null),\n null !== workInProgress.memoizedState &&\n null !== workInProgress.memoizedState.cachePool &&\n (newProps = workInProgress.memoizedState.cachePool.pool),\n newProps !== renderLanes && (workInProgress.flags |= 2048),\n null !== current && pop(resumedCache),\n null\n );\n case 24:\n return (\n (renderLanes = null),\n null !== current && (renderLanes = current.memoizedState.cache),\n workInProgress.memoizedState.cache !== renderLanes &&\n (workInProgress.flags |= 2048),\n popProvider(CacheContext),\n bubbleProperties(workInProgress),\n null\n );\n case 25:\n return null;\n case 30:\n return null;\n }\n throw Error(formatProdErrorMessage(156, workInProgress.tag));\n}\nfunction unwindWork(current, workInProgress) {\n popTreeContext(workInProgress);\n switch (workInProgress.tag) {\n case 1:\n return (\n (current = workInProgress.flags),\n current & 65536\n ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n : null\n );\n case 3:\n return (\n popProvider(CacheContext),\n popHostContainer(),\n (current = workInProgress.flags),\n 0 !== (current & 65536) && 0 === (current & 128)\n ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n : null\n );\n case 26:\n case 27:\n case 5:\n return popHostContext(workInProgress), null;\n case 31:\n if (null !== workInProgress.memoizedState) {\n popSuspenseHandler(workInProgress);\n if (null === workInProgress.alternate)\n throw Error(formatProdErrorMessage(340));\n resetHydrationState();\n }\n current = workInProgress.flags;\n return current & 65536\n ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n : null;\n case 13:\n popSuspenseHandler(workInProgress);\n current = workInProgress.memoizedState;\n if (null !== current && null !== current.dehydrated) {\n if (null === workInProgress.alternate)\n throw Error(formatProdErrorMessage(340));\n resetHydrationState();\n }\n current = workInProgress.flags;\n return current & 65536\n ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n : null;\n case 19:\n return pop(suspenseStackCursor), null;\n case 4:\n return popHostContainer(), null;\n case 10:\n return popProvider(workInProgress.type), null;\n case 22:\n case 23:\n return (\n popSuspenseHandler(workInProgress),\n popHiddenContext(),\n null !== current && pop(resumedCache),\n (current = workInProgress.flags),\n current & 65536\n ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n : null\n );\n case 24:\n return popProvider(CacheContext), null;\n case 25:\n return null;\n default:\n return null;\n }\n}\nfunction unwindInterruptedWork(current, interruptedWork) {\n popTreeContext(interruptedWork);\n switch (interruptedWork.tag) {\n case 3:\n popProvider(CacheContext);\n popHostContainer();\n break;\n case 26:\n case 27:\n case 5:\n popHostContext(interruptedWork);\n break;\n case 4:\n popHostContainer();\n break;\n case 31:\n null !== interruptedWork.memoizedState &&\n popSuspenseHandler(interruptedWork);\n break;\n case 13:\n popSuspenseHandler(interruptedWork);\n break;\n case 19:\n pop(suspenseStackCursor);\n break;\n case 10:\n popProvider(interruptedWork.type);\n break;\n case 22:\n case 23:\n popSuspenseHandler(interruptedWork);\n popHiddenContext();\n null !== current && pop(resumedCache);\n break;\n case 24:\n popProvider(CacheContext);\n }\n}\nfunction commitHookEffectListMount(flags, finishedWork) {\n try {\n var updateQueue = finishedWork.updateQueue,\n lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;\n if (null !== lastEffect) {\n var firstEffect = lastEffect.next;\n updateQueue = firstEffect;\n do {\n if ((updateQueue.tag & flags) === flags) {\n lastEffect = void 0;\n var create = updateQueue.create,\n inst = updateQueue.inst;\n lastEffect = create();\n inst.destroy = lastEffect;\n }\n updateQueue = updateQueue.next;\n } while (updateQueue !== firstEffect);\n }\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n}\nfunction commitHookEffectListUnmount(\n flags,\n finishedWork,\n nearestMountedAncestor$jscomp$0\n) {\n try {\n var updateQueue = finishedWork.updateQueue,\n lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;\n if (null !== lastEffect) {\n var firstEffect = lastEffect.next;\n updateQueue = firstEffect;\n do {\n if ((updateQueue.tag & flags) === flags) {\n var inst = updateQueue.inst,\n destroy = inst.destroy;\n if (void 0 !== destroy) {\n inst.destroy = void 0;\n lastEffect = finishedWork;\n var nearestMountedAncestor = nearestMountedAncestor$jscomp$0,\n destroy_ = destroy;\n try {\n destroy_();\n } catch (error) {\n captureCommitPhaseError(\n lastEffect,\n nearestMountedAncestor,\n error\n );\n }\n }\n }\n updateQueue = updateQueue.next;\n } while (updateQueue !== firstEffect);\n }\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n}\nfunction commitClassCallbacks(finishedWork) {\n var updateQueue = finishedWork.updateQueue;\n if (null !== updateQueue) {\n var instance = finishedWork.stateNode;\n try {\n commitCallbacks(updateQueue, instance);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n}\nfunction safelyCallComponentWillUnmount(\n current,\n nearestMountedAncestor,\n instance\n) {\n instance.props = resolveClassComponentProps(\n current.type,\n current.memoizedProps\n );\n instance.state = current.memoizedState;\n try {\n instance.componentWillUnmount();\n } catch (error) {\n captureCommitPhaseError(current, nearestMountedAncestor, error);\n }\n}\nfunction safelyAttachRef(current, nearestMountedAncestor) {\n try {\n var ref = current.ref;\n if (null !== ref) {\n switch (current.tag) {\n case 26:\n case 27:\n case 5:\n var instanceToUse = current.stateNode;\n break;\n case 30:\n instanceToUse = current.stateNode;\n break;\n default:\n instanceToUse = current.stateNode;\n }\n \"function\" === typeof ref\n ? (current.refCleanup = ref(instanceToUse))\n : (ref.current = instanceToUse);\n }\n } catch (error) {\n captureCommitPhaseError(current, nearestMountedAncestor, error);\n }\n}\nfunction safelyDetachRef(current, nearestMountedAncestor) {\n var ref = current.ref,\n refCleanup = current.refCleanup;\n if (null !== ref)\n if (\"function\" === typeof refCleanup)\n try {\n refCleanup();\n } catch (error) {\n captureCommitPhaseError(current, nearestMountedAncestor, error);\n } finally {\n (current.refCleanup = null),\n (current = current.alternate),\n null != current && (current.refCleanup = null);\n }\n else if (\"function\" === typeof ref)\n try {\n ref(null);\n } catch (error$140) {\n captureCommitPhaseError(current, nearestMountedAncestor, error$140);\n }\n else ref.current = null;\n}\nfunction commitHostMount(finishedWork) {\n var type = finishedWork.type,\n props = finishedWork.memoizedProps,\n instance = finishedWork.stateNode;\n try {\n a: switch (type) {\n case \"button\":\n case \"input\":\n case \"select\":\n case \"textarea\":\n props.autoFocus && instance.focus();\n break a;\n case \"img\":\n props.src\n ? (instance.src = props.src)\n : props.srcSet && (instance.srcset = props.srcSet);\n }\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n}\nfunction commitHostUpdate(finishedWork, newProps, oldProps) {\n try {\n var domElement = finishedWork.stateNode;\n updateProperties(domElement, finishedWork.type, oldProps, newProps);\n domElement[internalPropsKey] = newProps;\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n}\nfunction isHostParent(fiber) {\n return (\n 5 === fiber.tag ||\n 3 === fiber.tag ||\n 26 === fiber.tag ||\n (27 === fiber.tag && isSingletonScope(fiber.type)) ||\n 4 === fiber.tag\n );\n}\nfunction getHostSibling(fiber) {\n a: for (;;) {\n for (; null === fiber.sibling; ) {\n if (null === fiber.return || isHostParent(fiber.return)) return null;\n fiber = fiber.return;\n }\n fiber.sibling.return = fiber.return;\n for (\n fiber = fiber.sibling;\n 5 !== fiber.tag && 6 !== fiber.tag && 18 !== fiber.tag;\n\n ) {\n if (27 === fiber.tag && isSingletonScope(fiber.type)) continue a;\n if (fiber.flags & 2) continue a;\n if (null === fiber.child || 4 === fiber.tag) continue a;\n else (fiber.child.return = fiber), (fiber = fiber.child);\n }\n if (!(fiber.flags & 2)) return fiber.stateNode;\n }\n}\nfunction insertOrAppendPlacementNodeIntoContainer(node, before, parent) {\n var tag = node.tag;\n if (5 === tag || 6 === tag)\n (node = node.stateNode),\n before\n ? (9 === parent.nodeType\n ? parent.body\n : \"HTML\" === parent.nodeName\n ? parent.ownerDocument.body\n : parent\n ).insertBefore(node, before)\n : ((before =\n 9 === parent.nodeType\n ? parent.body\n : \"HTML\" === parent.nodeName\n ? parent.ownerDocument.body\n : parent),\n before.appendChild(node),\n (parent = parent._reactRootContainer),\n (null !== parent && void 0 !== parent) ||\n null !== before.onclick ||\n (before.onclick = noop$1));\n else if (\n 4 !== tag &&\n (27 === tag &&\n isSingletonScope(node.type) &&\n ((parent = node.stateNode), (before = null)),\n (node = node.child),\n null !== node)\n )\n for (\n insertOrAppendPlacementNodeIntoContainer(node, before, parent),\n node = node.sibling;\n null !== node;\n\n )\n insertOrAppendPlacementNodeIntoContainer(node, before, parent),\n (node = node.sibling);\n}\nfunction insertOrAppendPlacementNode(node, before, parent) {\n var tag = node.tag;\n if (5 === tag || 6 === tag)\n (node = node.stateNode),\n before ? parent.insertBefore(node, before) : parent.appendChild(node);\n else if (\n 4 !== tag &&\n (27 === tag && isSingletonScope(node.type) && (parent = node.stateNode),\n (node = node.child),\n null !== node)\n )\n for (\n insertOrAppendPlacementNode(node, before, parent), node = node.sibling;\n null !== node;\n\n )\n insertOrAppendPlacementNode(node, before, parent), (node = node.sibling);\n}\nfunction commitHostSingletonAcquisition(finishedWork) {\n var singleton = finishedWork.stateNode,\n props = finishedWork.memoizedProps;\n try {\n for (\n var type = finishedWork.type, attributes = singleton.attributes;\n attributes.length;\n\n )\n singleton.removeAttributeNode(attributes[0]);\n setInitialProperties(singleton, type, props);\n singleton[internalInstanceKey] = finishedWork;\n singleton[internalPropsKey] = props;\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n}\nvar offscreenSubtreeIsHidden = !1,\n offscreenSubtreeWasHidden = !1,\n needsFormReset = !1,\n PossiblyWeakSet = \"function\" === typeof WeakSet ? WeakSet : Set,\n nextEffect = null;\nfunction commitBeforeMutationEffects(root, firstChild) {\n root = root.containerInfo;\n eventsEnabled = _enabled;\n root = getActiveElementDeep(root);\n if (hasSelectionCapabilities(root)) {\n if (\"selectionStart\" in root)\n var JSCompiler_temp = {\n start: root.selectionStart,\n end: root.selectionEnd\n };\n else\n a: {\n JSCompiler_temp =\n ((JSCompiler_temp = root.ownerDocument) &&\n JSCompiler_temp.defaultView) ||\n window;\n var selection =\n JSCompiler_temp.getSelection && JSCompiler_temp.getSelection();\n if (selection && 0 !== selection.rangeCount) {\n JSCompiler_temp = selection.anchorNode;\n var anchorOffset = selection.anchorOffset,\n focusNode = selection.focusNode;\n selection = selection.focusOffset;\n try {\n JSCompiler_temp.nodeType, focusNode.nodeType;\n } catch (e$20) {\n JSCompiler_temp = null;\n break a;\n }\n var length = 0,\n start = -1,\n end = -1,\n indexWithinAnchor = 0,\n indexWithinFocus = 0,\n node = root,\n parentNode = null;\n b: for (;;) {\n for (var next; ; ) {\n node !== JSCompiler_temp ||\n (0 !== anchorOffset && 3 !== node.nodeType) ||\n (start = length + anchorOffset);\n node !== focusNode ||\n (0 !== selection && 3 !== node.nodeType) ||\n (end = length + selection);\n 3 === node.nodeType && (length += node.nodeValue.length);\n if (null === (next = node.firstChild)) break;\n parentNode = node;\n node = next;\n }\n for (;;) {\n if (node === root) break b;\n parentNode === JSCompiler_temp &&\n ++indexWithinAnchor === anchorOffset &&\n (start = length);\n parentNode === focusNode &&\n ++indexWithinFocus === selection &&\n (end = length);\n if (null !== (next = node.nextSibling)) break;\n node = parentNode;\n parentNode = node.parentNode;\n }\n node = next;\n }\n JSCompiler_temp =\n -1 === start || -1 === end ? null : { start: start, end: end };\n } else JSCompiler_temp = null;\n }\n JSCompiler_temp = JSCompiler_temp || { start: 0, end: 0 };\n } else JSCompiler_temp = null;\n selectionInformation = { focusedElem: root, selectionRange: JSCompiler_temp };\n _enabled = !1;\n for (nextEffect = firstChild; null !== nextEffect; )\n if (\n ((firstChild = nextEffect),\n (root = firstChild.child),\n 0 !== (firstChild.subtreeFlags & 1028) && null !== root)\n )\n (root.return = firstChild), (nextEffect = root);\n else\n for (; null !== nextEffect; ) {\n firstChild = nextEffect;\n focusNode = firstChild.alternate;\n root = firstChild.flags;\n switch (firstChild.tag) {\n case 0:\n if (\n 0 !== (root & 4) &&\n ((root = firstChild.updateQueue),\n (root = null !== root ? root.events : null),\n null !== root)\n )\n for (\n JSCompiler_temp = 0;\n JSCompiler_temp < root.length;\n JSCompiler_temp++\n )\n (anchorOffset = root[JSCompiler_temp]),\n (anchorOffset.ref.impl = anchorOffset.nextImpl);\n break;\n case 11:\n case 15:\n break;\n case 1:\n if (0 !== (root & 1024) && null !== focusNode) {\n root = void 0;\n JSCompiler_temp = firstChild;\n anchorOffset = focusNode.memoizedProps;\n focusNode = focusNode.memoizedState;\n selection = JSCompiler_temp.stateNode;\n try {\n var resolvedPrevProps = resolveClassComponentProps(\n JSCompiler_temp.type,\n anchorOffset\n );\n root = selection.getSnapshotBeforeUpdate(\n resolvedPrevProps,\n focusNode\n );\n selection.__reactInternalSnapshotBeforeUpdate = root;\n } catch (error) {\n captureCommitPhaseError(\n JSCompiler_temp,\n JSCompiler_temp.return,\n error\n );\n }\n }\n break;\n case 3:\n if (0 !== (root & 1024))\n if (\n ((root = firstChild.stateNode.containerInfo),\n (JSCompiler_temp = root.nodeType),\n 9 === JSCompiler_temp)\n )\n clearContainerSparingly(root);\n else if (1 === JSCompiler_temp)\n switch (root.nodeName) {\n case \"HEAD\":\n case \"HTML\":\n case \"BODY\":\n clearContainerSparingly(root);\n break;\n default:\n root.textContent = \"\";\n }\n break;\n case 5:\n case 26:\n case 27:\n case 6:\n case 4:\n case 17:\n break;\n default:\n if (0 !== (root & 1024)) throw Error(formatProdErrorMessage(163));\n }\n root = firstChild.sibling;\n if (null !== root) {\n root.return = firstChild.return;\n nextEffect = root;\n break;\n }\n nextEffect = firstChild.return;\n }\n}\nfunction commitLayoutEffectOnFiber(finishedRoot, current, finishedWork) {\n var flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n flags & 4 && commitHookEffectListMount(5, finishedWork);\n break;\n case 1:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n if (flags & 4)\n if (((finishedRoot = finishedWork.stateNode), null === current))\n try {\n finishedRoot.componentDidMount();\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n else {\n var prevProps = resolveClassComponentProps(\n finishedWork.type,\n current.memoizedProps\n );\n current = current.memoizedState;\n try {\n finishedRoot.componentDidUpdate(\n prevProps,\n current,\n finishedRoot.__reactInternalSnapshotBeforeUpdate\n );\n } catch (error$139) {\n captureCommitPhaseError(\n finishedWork,\n finishedWork.return,\n error$139\n );\n }\n }\n flags & 64 && commitClassCallbacks(finishedWork);\n flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n break;\n case 3:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n if (\n flags & 64 &&\n ((finishedRoot = finishedWork.updateQueue), null !== finishedRoot)\n ) {\n current = null;\n if (null !== finishedWork.child)\n switch (finishedWork.child.tag) {\n case 27:\n case 5:\n current = finishedWork.child.stateNode;\n break;\n case 1:\n current = finishedWork.child.stateNode;\n }\n try {\n commitCallbacks(finishedRoot, current);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n break;\n case 27:\n null === current &&\n flags & 4 &&\n commitHostSingletonAcquisition(finishedWork);\n case 26:\n case 5:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n null === current && flags & 4 && commitHostMount(finishedWork);\n flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n break;\n case 12:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n break;\n case 31:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n flags & 4 && commitActivityHydrationCallbacks(finishedRoot, finishedWork);\n break;\n case 13:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n flags & 4 && commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n flags & 64 &&\n ((finishedRoot = finishedWork.memoizedState),\n null !== finishedRoot &&\n ((finishedRoot = finishedRoot.dehydrated),\n null !== finishedRoot &&\n ((finishedWork = retryDehydratedSuspenseBoundary.bind(\n null,\n finishedWork\n )),\n registerSuspenseInstanceRetry(finishedRoot, finishedWork))));\n break;\n case 22:\n flags = null !== finishedWork.memoizedState || offscreenSubtreeIsHidden;\n if (!flags) {\n current =\n (null !== current && null !== current.memoizedState) ||\n offscreenSubtreeWasHidden;\n prevProps = offscreenSubtreeIsHidden;\n var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n offscreenSubtreeIsHidden = flags;\n (offscreenSubtreeWasHidden = current) && !prevOffscreenSubtreeWasHidden\n ? recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n 0 !== (finishedWork.subtreeFlags & 8772)\n )\n : recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n offscreenSubtreeIsHidden = prevProps;\n offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n }\n break;\n case 30:\n break;\n default:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n }\n}\nfunction detachFiberAfterEffects(fiber) {\n var alternate = fiber.alternate;\n null !== alternate &&\n ((fiber.alternate = null), detachFiberAfterEffects(alternate));\n fiber.child = null;\n fiber.deletions = null;\n fiber.sibling = null;\n 5 === fiber.tag &&\n ((alternate = fiber.stateNode),\n null !== alternate && detachDeletedInstance(alternate));\n fiber.stateNode = null;\n fiber.return = null;\n fiber.dependencies = null;\n fiber.memoizedProps = null;\n fiber.memoizedState = null;\n fiber.pendingProps = null;\n fiber.stateNode = null;\n fiber.updateQueue = null;\n}\nvar hostParent = null,\n hostParentIsContainer = !1;\nfunction recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n parent\n) {\n for (parent = parent.child; null !== parent; )\n commitDeletionEffectsOnFiber(finishedRoot, nearestMountedAncestor, parent),\n (parent = parent.sibling);\n}\nfunction commitDeletionEffectsOnFiber(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n) {\n if (injectedHook && \"function\" === typeof injectedHook.onCommitFiberUnmount)\n try {\n injectedHook.onCommitFiberUnmount(rendererID, deletedFiber);\n } catch (err) {}\n switch (deletedFiber.tag) {\n case 26:\n offscreenSubtreeWasHidden ||\n safelyDetachRef(deletedFiber, nearestMountedAncestor);\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n deletedFiber.memoizedState\n ? deletedFiber.memoizedState.count--\n : deletedFiber.stateNode &&\n ((deletedFiber = deletedFiber.stateNode),\n deletedFiber.parentNode.removeChild(deletedFiber));\n break;\n case 27:\n offscreenSubtreeWasHidden ||\n safelyDetachRef(deletedFiber, nearestMountedAncestor);\n var prevHostParent = hostParent,\n prevHostParentIsContainer = hostParentIsContainer;\n isSingletonScope(deletedFiber.type) &&\n ((hostParent = deletedFiber.stateNode), (hostParentIsContainer = !1));\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n releaseSingletonInstance(deletedFiber.stateNode);\n hostParent = prevHostParent;\n hostParentIsContainer = prevHostParentIsContainer;\n break;\n case 5:\n offscreenSubtreeWasHidden ||\n safelyDetachRef(deletedFiber, nearestMountedAncestor);\n case 6:\n prevHostParent = hostParent;\n prevHostParentIsContainer = hostParentIsContainer;\n hostParent = null;\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n hostParent = prevHostParent;\n hostParentIsContainer = prevHostParentIsContainer;\n if (null !== hostParent)\n if (hostParentIsContainer)\n try {\n (9 === hostParent.nodeType\n ? hostParent.body\n : \"HTML\" === hostParent.nodeName\n ? hostParent.ownerDocument.body\n : hostParent\n ).removeChild(deletedFiber.stateNode);\n } catch (error) {\n captureCommitPhaseError(\n deletedFiber,\n nearestMountedAncestor,\n error\n );\n }\n else\n try {\n hostParent.removeChild(deletedFiber.stateNode);\n } catch (error) {\n captureCommitPhaseError(\n deletedFiber,\n nearestMountedAncestor,\n error\n );\n }\n break;\n case 18:\n null !== hostParent &&\n (hostParentIsContainer\n ? ((finishedRoot = hostParent),\n clearHydrationBoundary(\n 9 === finishedRoot.nodeType\n ? finishedRoot.body\n : \"HTML\" === finishedRoot.nodeName\n ? finishedRoot.ownerDocument.body\n : finishedRoot,\n deletedFiber.stateNode\n ),\n retryIfBlockedOn(finishedRoot))\n : clearHydrationBoundary(hostParent, deletedFiber.stateNode));\n break;\n case 4:\n prevHostParent = hostParent;\n prevHostParentIsContainer = hostParentIsContainer;\n hostParent = deletedFiber.stateNode.containerInfo;\n hostParentIsContainer = !0;\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n hostParent = prevHostParent;\n hostParentIsContainer = prevHostParentIsContainer;\n break;\n case 0:\n case 11:\n case 14:\n case 15:\n commitHookEffectListUnmount(2, deletedFiber, nearestMountedAncestor);\n offscreenSubtreeWasHidden ||\n commitHookEffectListUnmount(4, deletedFiber, nearestMountedAncestor);\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n break;\n case 1:\n offscreenSubtreeWasHidden ||\n (safelyDetachRef(deletedFiber, nearestMountedAncestor),\n (prevHostParent = deletedFiber.stateNode),\n \"function\" === typeof prevHostParent.componentWillUnmount &&\n safelyCallComponentWillUnmount(\n deletedFiber,\n nearestMountedAncestor,\n prevHostParent\n ));\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n break;\n case 21:\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n break;\n case 22:\n offscreenSubtreeWasHidden =\n (prevHostParent = offscreenSubtreeWasHidden) ||\n null !== deletedFiber.memoizedState;\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n offscreenSubtreeWasHidden = prevHostParent;\n break;\n default:\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n }\n}\nfunction commitActivityHydrationCallbacks(finishedRoot, finishedWork) {\n if (\n null === finishedWork.memoizedState &&\n ((finishedRoot = finishedWork.alternate),\n null !== finishedRoot &&\n ((finishedRoot = finishedRoot.memoizedState), null !== finishedRoot))\n ) {\n finishedRoot = finishedRoot.dehydrated;\n try {\n retryIfBlockedOn(finishedRoot);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n}\nfunction commitSuspenseHydrationCallbacks(finishedRoot, finishedWork) {\n if (\n null === finishedWork.memoizedState &&\n ((finishedRoot = finishedWork.alternate),\n null !== finishedRoot &&\n ((finishedRoot = finishedRoot.memoizedState),\n null !== finishedRoot &&\n ((finishedRoot = finishedRoot.dehydrated), null !== finishedRoot)))\n )\n try {\n retryIfBlockedOn(finishedRoot);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n}\nfunction getRetryCache(finishedWork) {\n switch (finishedWork.tag) {\n case 31:\n case 13:\n case 19:\n var retryCache = finishedWork.stateNode;\n null === retryCache &&\n (retryCache = finishedWork.stateNode = new PossiblyWeakSet());\n return retryCache;\n case 22:\n return (\n (finishedWork = finishedWork.stateNode),\n (retryCache = finishedWork._retryCache),\n null === retryCache &&\n (retryCache = finishedWork._retryCache = new PossiblyWeakSet()),\n retryCache\n );\n default:\n throw Error(formatProdErrorMessage(435, finishedWork.tag));\n }\n}\nfunction attachSuspenseRetryListeners(finishedWork, wakeables) {\n var retryCache = getRetryCache(finishedWork);\n wakeables.forEach(function (wakeable) {\n if (!retryCache.has(wakeable)) {\n retryCache.add(wakeable);\n var retry = resolveRetryWakeable.bind(null, finishedWork, wakeable);\n wakeable.then(retry, retry);\n }\n });\n}\nfunction recursivelyTraverseMutationEffects(root$jscomp$0, parentFiber) {\n var deletions = parentFiber.deletions;\n if (null !== deletions)\n for (var i = 0; i < deletions.length; i++) {\n var childToDelete = deletions[i],\n root = root$jscomp$0,\n returnFiber = parentFiber,\n parent = returnFiber;\n a: for (; null !== parent; ) {\n switch (parent.tag) {\n case 27:\n if (isSingletonScope(parent.type)) {\n hostParent = parent.stateNode;\n hostParentIsContainer = !1;\n break a;\n }\n break;\n case 5:\n hostParent = parent.stateNode;\n hostParentIsContainer = !1;\n break a;\n case 3:\n case 4:\n hostParent = parent.stateNode.containerInfo;\n hostParentIsContainer = !0;\n break a;\n }\n parent = parent.return;\n }\n if (null === hostParent) throw Error(formatProdErrorMessage(160));\n commitDeletionEffectsOnFiber(root, returnFiber, childToDelete);\n hostParent = null;\n hostParentIsContainer = !1;\n root = childToDelete.alternate;\n null !== root && (root.return = null);\n childToDelete.return = null;\n }\n if (parentFiber.subtreeFlags & 13886)\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n commitMutationEffectsOnFiber(parentFiber, root$jscomp$0),\n (parentFiber = parentFiber.sibling);\n}\nvar currentHoistableRoot = null;\nfunction commitMutationEffectsOnFiber(finishedWork, root) {\n var current = finishedWork.alternate,\n flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 14:\n case 15:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 4 &&\n (commitHookEffectListUnmount(3, finishedWork, finishedWork.return),\n commitHookEffectListMount(3, finishedWork),\n commitHookEffectListUnmount(5, finishedWork, finishedWork.return));\n break;\n case 1:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 512 &&\n (offscreenSubtreeWasHidden ||\n null === current ||\n safelyDetachRef(current, current.return));\n flags & 64 &&\n offscreenSubtreeIsHidden &&\n ((finishedWork = finishedWork.updateQueue),\n null !== finishedWork &&\n ((flags = finishedWork.callbacks),\n null !== flags &&\n ((current = finishedWork.shared.hiddenCallbacks),\n (finishedWork.shared.hiddenCallbacks =\n null === current ? flags : current.concat(flags)))));\n break;\n case 26:\n var hoistableRoot = currentHoistableRoot;\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 512 &&\n (offscreenSubtreeWasHidden ||\n null === current ||\n safelyDetachRef(current, current.return));\n if (flags & 4) {\n var currentResource = null !== current ? current.memoizedState : null;\n flags = finishedWork.memoizedState;\n if (null === current)\n if (null === flags)\n if (null === finishedWork.stateNode) {\n a: {\n flags = finishedWork.type;\n current = finishedWork.memoizedProps;\n hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n b: switch (flags) {\n case \"title\":\n currentResource =\n hoistableRoot.getElementsByTagName(\"title\")[0];\n if (\n !currentResource ||\n currentResource[internalHoistableMarker] ||\n currentResource[internalInstanceKey] ||\n \"http://www.w3.org/2000/svg\" ===\n currentResource.namespaceURI ||\n currentResource.hasAttribute(\"itemprop\")\n )\n (currentResource = hoistableRoot.createElement(flags)),\n hoistableRoot.head.insertBefore(\n currentResource,\n hoistableRoot.querySelector(\"head > title\")\n );\n setInitialProperties(currentResource, flags, current);\n currentResource[internalInstanceKey] = finishedWork;\n markNodeAsHoistable(currentResource);\n flags = currentResource;\n break a;\n case \"link\":\n var maybeNodes = getHydratableHoistableCache(\n \"link\",\n \"href\",\n hoistableRoot\n ).get(flags + (current.href || \"\"));\n if (maybeNodes)\n for (var i = 0; i < maybeNodes.length; i++)\n if (\n ((currentResource = maybeNodes[i]),\n currentResource.getAttribute(\"href\") ===\n (null == current.href || \"\" === current.href\n ? null\n : current.href) &&\n currentResource.getAttribute(\"rel\") ===\n (null == current.rel ? null : current.rel) &&\n currentResource.getAttribute(\"title\") ===\n (null == current.title ? null : current.title) &&\n currentResource.getAttribute(\"crossorigin\") ===\n (null == current.crossOrigin\n ? null\n : current.crossOrigin))\n ) {\n maybeNodes.splice(i, 1);\n break b;\n }\n currentResource = hoistableRoot.createElement(flags);\n setInitialProperties(currentResource, flags, current);\n hoistableRoot.head.appendChild(currentResource);\n break;\n case \"meta\":\n if (\n (maybeNodes = getHydratableHoistableCache(\n \"meta\",\n \"content\",\n hoistableRoot\n ).get(flags + (current.content || \"\")))\n )\n for (i = 0; i < maybeNodes.length; i++)\n if (\n ((currentResource = maybeNodes[i]),\n currentResource.getAttribute(\"content\") ===\n (null == current.content\n ? null\n : \"\" + current.content) &&\n currentResource.getAttribute(\"name\") ===\n (null == current.name ? null : current.name) &&\n currentResource.getAttribute(\"property\") ===\n (null == current.property\n ? null\n : current.property) &&\n currentResource.getAttribute(\"http-equiv\") ===\n (null == current.httpEquiv\n ? null\n : current.httpEquiv) &&\n currentResource.getAttribute(\"charset\") ===\n (null == current.charSet\n ? null\n : current.charSet))\n ) {\n maybeNodes.splice(i, 1);\n break b;\n }\n currentResource = hoistableRoot.createElement(flags);\n setInitialProperties(currentResource, flags, current);\n hoistableRoot.head.appendChild(currentResource);\n break;\n default:\n throw Error(formatProdErrorMessage(468, flags));\n }\n currentResource[internalInstanceKey] = finishedWork;\n markNodeAsHoistable(currentResource);\n flags = currentResource;\n }\n finishedWork.stateNode = flags;\n } else\n mountHoistable(\n hoistableRoot,\n finishedWork.type,\n finishedWork.stateNode\n );\n else\n finishedWork.stateNode = acquireResource(\n hoistableRoot,\n flags,\n finishedWork.memoizedProps\n );\n else\n currentResource !== flags\n ? (null === currentResource\n ? null !== current.stateNode &&\n ((current = current.stateNode),\n current.parentNode.removeChild(current))\n : currentResource.count--,\n null === flags\n ? mountHoistable(\n hoistableRoot,\n finishedWork.type,\n finishedWork.stateNode\n )\n : acquireResource(\n hoistableRoot,\n flags,\n finishedWork.memoizedProps\n ))\n : null === flags &&\n null !== finishedWork.stateNode &&\n commitHostUpdate(\n finishedWork,\n finishedWork.memoizedProps,\n current.memoizedProps\n );\n }\n break;\n case 27:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 512 &&\n (offscreenSubtreeWasHidden ||\n null === current ||\n safelyDetachRef(current, current.return));\n null !== current &&\n flags & 4 &&\n commitHostUpdate(\n finishedWork,\n finishedWork.memoizedProps,\n current.memoizedProps\n );\n break;\n case 5:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 512 &&\n (offscreenSubtreeWasHidden ||\n null === current ||\n safelyDetachRef(current, current.return));\n if (finishedWork.flags & 32) {\n hoistableRoot = finishedWork.stateNode;\n try {\n setTextContent(hoistableRoot, \"\");\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n flags & 4 &&\n null != finishedWork.stateNode &&\n ((hoistableRoot = finishedWork.memoizedProps),\n commitHostUpdate(\n finishedWork,\n hoistableRoot,\n null !== current ? current.memoizedProps : hoistableRoot\n ));\n flags & 1024 && (needsFormReset = !0);\n break;\n case 6:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n if (flags & 4) {\n if (null === finishedWork.stateNode)\n throw Error(formatProdErrorMessage(162));\n flags = finishedWork.memoizedProps;\n current = finishedWork.stateNode;\n try {\n current.nodeValue = flags;\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n break;\n case 3:\n tagCaches = null;\n hoistableRoot = currentHoistableRoot;\n currentHoistableRoot = getHoistableRoot(root.containerInfo);\n recursivelyTraverseMutationEffects(root, finishedWork);\n currentHoistableRoot = hoistableRoot;\n commitReconciliationEffects(finishedWork);\n if (flags & 4 && null !== current && current.memoizedState.isDehydrated)\n try {\n retryIfBlockedOn(root.containerInfo);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n needsFormReset &&\n ((needsFormReset = !1), recursivelyResetForms(finishedWork));\n break;\n case 4:\n flags = currentHoistableRoot;\n currentHoistableRoot = getHoistableRoot(\n finishedWork.stateNode.containerInfo\n );\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n currentHoistableRoot = flags;\n break;\n case 12:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n break;\n case 31:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 4 &&\n ((flags = finishedWork.updateQueue),\n null !== flags &&\n ((finishedWork.updateQueue = null),\n attachSuspenseRetryListeners(finishedWork, flags)));\n break;\n case 13:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n finishedWork.child.flags & 8192 &&\n (null !== finishedWork.memoizedState) !==\n (null !== current && null !== current.memoizedState) &&\n (globalMostRecentFallbackTime = now());\n flags & 4 &&\n ((flags = finishedWork.updateQueue),\n null !== flags &&\n ((finishedWork.updateQueue = null),\n attachSuspenseRetryListeners(finishedWork, flags)));\n break;\n case 22:\n hoistableRoot = null !== finishedWork.memoizedState;\n var wasHidden = null !== current && null !== current.memoizedState,\n prevOffscreenSubtreeIsHidden = offscreenSubtreeIsHidden,\n prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden || hoistableRoot;\n offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden || wasHidden;\n recursivelyTraverseMutationEffects(root, finishedWork);\n offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden;\n commitReconciliationEffects(finishedWork);\n if (flags & 8192)\n a: for (\n root = finishedWork.stateNode,\n root._visibility = hoistableRoot\n ? root._visibility & -2\n : root._visibility | 1,\n hoistableRoot &&\n (null === current ||\n wasHidden ||\n offscreenSubtreeIsHidden ||\n offscreenSubtreeWasHidden ||\n recursivelyTraverseDisappearLayoutEffects(finishedWork)),\n current = null,\n root = finishedWork;\n ;\n\n ) {\n if (5 === root.tag || 26 === root.tag) {\n if (null === current) {\n wasHidden = current = root;\n try {\n if (((currentResource = wasHidden.stateNode), hoistableRoot))\n (maybeNodes = currentResource.style),\n \"function\" === typeof maybeNodes.setProperty\n ? maybeNodes.setProperty(\"display\", \"none\", \"important\")\n : (maybeNodes.display = \"none\");\n else {\n i = wasHidden.stateNode;\n var styleProp = wasHidden.memoizedProps.style,\n display =\n void 0 !== styleProp &&\n null !== styleProp &&\n styleProp.hasOwnProperty(\"display\")\n ? styleProp.display\n : null;\n i.style.display =\n null == display || \"boolean\" === typeof display\n ? \"\"\n : (\"\" + display).trim();\n }\n } catch (error) {\n captureCommitPhaseError(wasHidden, wasHidden.return, error);\n }\n }\n } else if (6 === root.tag) {\n if (null === current) {\n wasHidden = root;\n try {\n wasHidden.stateNode.nodeValue = hoistableRoot\n ? \"\"\n : wasHidden.memoizedProps;\n } catch (error) {\n captureCommitPhaseError(wasHidden, wasHidden.return, error);\n }\n }\n } else if (18 === root.tag) {\n if (null === current) {\n wasHidden = root;\n try {\n var instance = wasHidden.stateNode;\n hoistableRoot\n ? hideOrUnhideDehydratedBoundary(instance, !0)\n : hideOrUnhideDehydratedBoundary(wasHidden.stateNode, !1);\n } catch (error) {\n captureCommitPhaseError(wasHidden, wasHidden.return, error);\n }\n }\n } else if (\n ((22 !== root.tag && 23 !== root.tag) ||\n null === root.memoizedState ||\n root === finishedWork) &&\n null !== root.child\n ) {\n root.child.return = root;\n root = root.child;\n continue;\n }\n if (root === finishedWork) break a;\n for (; null === root.sibling; ) {\n if (null === root.return || root.return === finishedWork) break a;\n current === root && (current = null);\n root = root.return;\n }\n current === root && (current = null);\n root.sibling.return = root.return;\n root = root.sibling;\n }\n flags & 4 &&\n ((flags = finishedWork.updateQueue),\n null !== flags &&\n ((current = flags.retryQueue),\n null !== current &&\n ((flags.retryQueue = null),\n attachSuspenseRetryListeners(finishedWork, current))));\n break;\n case 19:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 4 &&\n ((flags = finishedWork.updateQueue),\n null !== flags &&\n ((finishedWork.updateQueue = null),\n attachSuspenseRetryListeners(finishedWork, flags)));\n break;\n case 30:\n break;\n case 21:\n break;\n default:\n recursivelyTraverseMutationEffects(root, finishedWork),\n commitReconciliationEffects(finishedWork);\n }\n}\nfunction commitReconciliationEffects(finishedWork) {\n var flags = finishedWork.flags;\n if (flags & 2) {\n try {\n for (\n var hostParentFiber, parentFiber = finishedWork.return;\n null !== parentFiber;\n\n ) {\n if (isHostParent(parentFiber)) {\n hostParentFiber = parentFiber;\n break;\n }\n parentFiber = parentFiber.return;\n }\n if (null == hostParentFiber) throw Error(formatProdErrorMessage(160));\n switch (hostParentFiber.tag) {\n case 27:\n var parent = hostParentFiber.stateNode,\n before = getHostSibling(finishedWork);\n insertOrAppendPlacementNode(finishedWork, before, parent);\n break;\n case 5:\n var parent$141 = hostParentFiber.stateNode;\n hostParentFiber.flags & 32 &&\n (setTextContent(parent$141, \"\"), (hostParentFiber.flags &= -33));\n var before$142 = getHostSibling(finishedWork);\n insertOrAppendPlacementNode(finishedWork, before$142, parent$141);\n break;\n case 3:\n case 4:\n var parent$143 = hostParentFiber.stateNode.containerInfo,\n before$144 = getHostSibling(finishedWork);\n insertOrAppendPlacementNodeIntoContainer(\n finishedWork,\n before$144,\n parent$143\n );\n break;\n default:\n throw Error(formatProdErrorMessage(161));\n }\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n finishedWork.flags &= -3;\n }\n flags & 4096 && (finishedWork.flags &= -4097);\n}\nfunction recursivelyResetForms(parentFiber) {\n if (parentFiber.subtreeFlags & 1024)\n for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n var fiber = parentFiber;\n recursivelyResetForms(fiber);\n 5 === fiber.tag && fiber.flags & 1024 && fiber.stateNode.reset();\n parentFiber = parentFiber.sibling;\n }\n}\nfunction recursivelyTraverseLayoutEffects(root, parentFiber) {\n if (parentFiber.subtreeFlags & 8772)\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n commitLayoutEffectOnFiber(root, parentFiber.alternate, parentFiber),\n (parentFiber = parentFiber.sibling);\n}\nfunction recursivelyTraverseDisappearLayoutEffects(parentFiber) {\n for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n var finishedWork = parentFiber;\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 14:\n case 15:\n commitHookEffectListUnmount(4, finishedWork, finishedWork.return);\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n break;\n case 1:\n safelyDetachRef(finishedWork, finishedWork.return);\n var instance = finishedWork.stateNode;\n \"function\" === typeof instance.componentWillUnmount &&\n safelyCallComponentWillUnmount(\n finishedWork,\n finishedWork.return,\n instance\n );\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n break;\n case 27:\n releaseSingletonInstance(finishedWork.stateNode);\n case 26:\n case 5:\n safelyDetachRef(finishedWork, finishedWork.return);\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n break;\n case 22:\n null === finishedWork.memoizedState &&\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n break;\n case 30:\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n break;\n default:\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n }\n parentFiber = parentFiber.sibling;\n }\n}\nfunction recursivelyTraverseReappearLayoutEffects(\n finishedRoot$jscomp$0,\n parentFiber,\n includeWorkInProgressEffects\n) {\n includeWorkInProgressEffects =\n includeWorkInProgressEffects && 0 !== (parentFiber.subtreeFlags & 8772);\n for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n var current = parentFiber.alternate,\n finishedRoot = finishedRoot$jscomp$0,\n finishedWork = parentFiber,\n flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n commitHookEffectListMount(4, finishedWork);\n break;\n case 1:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n current = finishedWork;\n finishedRoot = current.stateNode;\n if (\"function\" === typeof finishedRoot.componentDidMount)\n try {\n finishedRoot.componentDidMount();\n } catch (error) {\n captureCommitPhaseError(current, current.return, error);\n }\n current = finishedWork;\n finishedRoot = current.updateQueue;\n if (null !== finishedRoot) {\n var instance = current.stateNode;\n try {\n var hiddenCallbacks = finishedRoot.shared.hiddenCallbacks;\n if (null !== hiddenCallbacks)\n for (\n finishedRoot.shared.hiddenCallbacks = null, finishedRoot = 0;\n finishedRoot < hiddenCallbacks.length;\n finishedRoot++\n )\n callCallback(hiddenCallbacks[finishedRoot], instance);\n } catch (error) {\n captureCommitPhaseError(current, current.return, error);\n }\n }\n includeWorkInProgressEffects &&\n flags & 64 &&\n commitClassCallbacks(finishedWork);\n safelyAttachRef(finishedWork, finishedWork.return);\n break;\n case 27:\n commitHostSingletonAcquisition(finishedWork);\n case 26:\n case 5:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n includeWorkInProgressEffects &&\n null === current &&\n flags & 4 &&\n commitHostMount(finishedWork);\n safelyAttachRef(finishedWork, finishedWork.return);\n break;\n case 12:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n break;\n case 31:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n includeWorkInProgressEffects &&\n flags & 4 &&\n commitActivityHydrationCallbacks(finishedRoot, finishedWork);\n break;\n case 13:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n includeWorkInProgressEffects &&\n flags & 4 &&\n commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n break;\n case 22:\n null === finishedWork.memoizedState &&\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n safelyAttachRef(finishedWork, finishedWork.return);\n break;\n case 30:\n break;\n default:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n }\n parentFiber = parentFiber.sibling;\n }\n}\nfunction commitOffscreenPassiveMountEffects(current, finishedWork) {\n var previousCache = null;\n null !== current &&\n null !== current.memoizedState &&\n null !== current.memoizedState.cachePool &&\n (previousCache = current.memoizedState.cachePool.pool);\n current = null;\n null !== finishedWork.memoizedState &&\n null !== finishedWork.memoizedState.cachePool &&\n (current = finishedWork.memoizedState.cachePool.pool);\n current !== previousCache &&\n (null != current && current.refCount++,\n null != previousCache && releaseCache(previousCache));\n}\nfunction commitCachePassiveMountEffect(current, finishedWork) {\n current = null;\n null !== finishedWork.alternate &&\n (current = finishedWork.alternate.memoizedState.cache);\n finishedWork = finishedWork.memoizedState.cache;\n finishedWork !== current &&\n (finishedWork.refCount++, null != current && releaseCache(current));\n}\nfunction recursivelyTraversePassiveMountEffects(\n root,\n parentFiber,\n committedLanes,\n committedTransitions\n) {\n if (parentFiber.subtreeFlags & 10256)\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n commitPassiveMountOnFiber(\n root,\n parentFiber,\n committedLanes,\n committedTransitions\n ),\n (parentFiber = parentFiber.sibling);\n}\nfunction commitPassiveMountOnFiber(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n) {\n var flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n flags & 2048 && commitHookEffectListMount(9, finishedWork);\n break;\n case 1:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n break;\n case 3:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n flags & 2048 &&\n ((finishedRoot = null),\n null !== finishedWork.alternate &&\n (finishedRoot = finishedWork.alternate.memoizedState.cache),\n (finishedWork = finishedWork.memoizedState.cache),\n finishedWork !== finishedRoot &&\n (finishedWork.refCount++,\n null != finishedRoot && releaseCache(finishedRoot)));\n break;\n case 12:\n if (flags & 2048) {\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n finishedRoot = finishedWork.stateNode;\n try {\n var _finishedWork$memoize2 = finishedWork.memoizedProps,\n id = _finishedWork$memoize2.id,\n onPostCommit = _finishedWork$memoize2.onPostCommit;\n \"function\" === typeof onPostCommit &&\n onPostCommit(\n id,\n null === finishedWork.alternate ? \"mount\" : \"update\",\n finishedRoot.passiveEffectDuration,\n -0\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n } else\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n break;\n case 31:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n break;\n case 13:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n break;\n case 23:\n break;\n case 22:\n _finishedWork$memoize2 = finishedWork.stateNode;\n id = finishedWork.alternate;\n null !== finishedWork.memoizedState\n ? _finishedWork$memoize2._visibility & 2\n ? recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n )\n : recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork)\n : _finishedWork$memoize2._visibility & 2\n ? recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n )\n : ((_finishedWork$memoize2._visibility |= 2),\n recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n 0 !== (finishedWork.subtreeFlags & 10256) || !1\n ));\n flags & 2048 && commitOffscreenPassiveMountEffects(id, finishedWork);\n break;\n case 24:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n flags & 2048 &&\n commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n break;\n default:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n }\n}\nfunction recursivelyTraverseReconnectPassiveEffects(\n finishedRoot$jscomp$0,\n parentFiber,\n committedLanes$jscomp$0,\n committedTransitions$jscomp$0,\n includeWorkInProgressEffects\n) {\n includeWorkInProgressEffects =\n includeWorkInProgressEffects &&\n (0 !== (parentFiber.subtreeFlags & 10256) || !1);\n for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n var finishedRoot = finishedRoot$jscomp$0,\n finishedWork = parentFiber,\n committedLanes = committedLanes$jscomp$0,\n committedTransitions = committedTransitions$jscomp$0,\n flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n );\n commitHookEffectListMount(8, finishedWork);\n break;\n case 23:\n break;\n case 22:\n var instance = finishedWork.stateNode;\n null !== finishedWork.memoizedState\n ? instance._visibility & 2\n ? recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n )\n : recursivelyTraverseAtomicPassiveEffects(\n finishedRoot,\n finishedWork\n )\n : ((instance._visibility |= 2),\n recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n ));\n includeWorkInProgressEffects &&\n flags & 2048 &&\n commitOffscreenPassiveMountEffects(\n finishedWork.alternate,\n finishedWork\n );\n break;\n case 24:\n recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n );\n includeWorkInProgressEffects &&\n flags & 2048 &&\n commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n break;\n default:\n recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n );\n }\n parentFiber = parentFiber.sibling;\n }\n}\nfunction recursivelyTraverseAtomicPassiveEffects(\n finishedRoot$jscomp$0,\n parentFiber\n) {\n if (parentFiber.subtreeFlags & 10256)\n for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n var finishedRoot = finishedRoot$jscomp$0,\n finishedWork = parentFiber,\n flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 22:\n recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n flags & 2048 &&\n commitOffscreenPassiveMountEffects(\n finishedWork.alternate,\n finishedWork\n );\n break;\n case 24:\n recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n flags & 2048 &&\n commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n break;\n default:\n recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n }\n parentFiber = parentFiber.sibling;\n }\n}\nvar suspenseyCommitFlag = 8192;\nfunction recursivelyAccumulateSuspenseyCommit(\n parentFiber,\n committedLanes,\n suspendedState\n) {\n if (parentFiber.subtreeFlags & suspenseyCommitFlag)\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n accumulateSuspenseyCommitOnFiber(\n parentFiber,\n committedLanes,\n suspendedState\n ),\n (parentFiber = parentFiber.sibling);\n}\nfunction accumulateSuspenseyCommitOnFiber(\n fiber,\n committedLanes,\n suspendedState\n) {\n switch (fiber.tag) {\n case 26:\n recursivelyAccumulateSuspenseyCommit(\n fiber,\n committedLanes,\n suspendedState\n );\n fiber.flags & suspenseyCommitFlag &&\n null !== fiber.memoizedState &&\n suspendResource(\n suspendedState,\n currentHoistableRoot,\n fiber.memoizedState,\n fiber.memoizedProps\n );\n break;\n case 5:\n recursivelyAccumulateSuspenseyCommit(\n fiber,\n committedLanes,\n suspendedState\n );\n break;\n case 3:\n case 4:\n var previousHoistableRoot = currentHoistableRoot;\n currentHoistableRoot = getHoistableRoot(fiber.stateNode.containerInfo);\n recursivelyAccumulateSuspenseyCommit(\n fiber,\n committedLanes,\n suspendedState\n );\n currentHoistableRoot = previousHoistableRoot;\n break;\n case 22:\n null === fiber.memoizedState &&\n ((previousHoistableRoot = fiber.alternate),\n null !== previousHoistableRoot &&\n null !== previousHoistableRoot.memoizedState\n ? ((previousHoistableRoot = suspenseyCommitFlag),\n (suspenseyCommitFlag = 16777216),\n recursivelyAccumulateSuspenseyCommit(\n fiber,\n committedLanes,\n suspendedState\n ),\n (suspenseyCommitFlag = previousHoistableRoot))\n : recursivelyAccumulateSuspenseyCommit(\n fiber,\n committedLanes,\n suspendedState\n ));\n break;\n default:\n recursivelyAccumulateSuspenseyCommit(\n fiber,\n committedLanes,\n suspendedState\n );\n }\n}\nfunction detachAlternateSiblings(parentFiber) {\n var previousFiber = parentFiber.alternate;\n if (\n null !== previousFiber &&\n ((parentFiber = previousFiber.child), null !== parentFiber)\n ) {\n previousFiber.child = null;\n do\n (previousFiber = parentFiber.sibling),\n (parentFiber.sibling = null),\n (parentFiber = previousFiber);\n while (null !== parentFiber);\n }\n}\nfunction recursivelyTraversePassiveUnmountEffects(parentFiber) {\n var deletions = parentFiber.deletions;\n if (0 !== (parentFiber.flags & 16)) {\n if (null !== deletions)\n for (var i = 0; i < deletions.length; i++) {\n var childToDelete = deletions[i];\n nextEffect = childToDelete;\n commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n childToDelete,\n parentFiber\n );\n }\n detachAlternateSiblings(parentFiber);\n }\n if (parentFiber.subtreeFlags & 10256)\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n commitPassiveUnmountOnFiber(parentFiber),\n (parentFiber = parentFiber.sibling);\n}\nfunction commitPassiveUnmountOnFiber(finishedWork) {\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n recursivelyTraversePassiveUnmountEffects(finishedWork);\n finishedWork.flags & 2048 &&\n commitHookEffectListUnmount(9, finishedWork, finishedWork.return);\n break;\n case 3:\n recursivelyTraversePassiveUnmountEffects(finishedWork);\n break;\n case 12:\n recursivelyTraversePassiveUnmountEffects(finishedWork);\n break;\n case 22:\n var instance = finishedWork.stateNode;\n null !== finishedWork.memoizedState &&\n instance._visibility & 2 &&\n (null === finishedWork.return || 13 !== finishedWork.return.tag)\n ? ((instance._visibility &= -3),\n recursivelyTraverseDisconnectPassiveEffects(finishedWork))\n : recursivelyTraversePassiveUnmountEffects(finishedWork);\n break;\n default:\n recursivelyTraversePassiveUnmountEffects(finishedWork);\n }\n}\nfunction recursivelyTraverseDisconnectPassiveEffects(parentFiber) {\n var deletions = parentFiber.deletions;\n if (0 !== (parentFiber.flags & 16)) {\n if (null !== deletions)\n for (var i = 0; i < deletions.length; i++) {\n var childToDelete = deletions[i];\n nextEffect = childToDelete;\n commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n childToDelete,\n parentFiber\n );\n }\n detachAlternateSiblings(parentFiber);\n }\n for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n deletions = parentFiber;\n switch (deletions.tag) {\n case 0:\n case 11:\n case 15:\n commitHookEffectListUnmount(8, deletions, deletions.return);\n recursivelyTraverseDisconnectPassiveEffects(deletions);\n break;\n case 22:\n i = deletions.stateNode;\n i._visibility & 2 &&\n ((i._visibility &= -3),\n recursivelyTraverseDisconnectPassiveEffects(deletions));\n break;\n default:\n recursivelyTraverseDisconnectPassiveEffects(deletions);\n }\n parentFiber = parentFiber.sibling;\n }\n}\nfunction commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n deletedSubtreeRoot,\n nearestMountedAncestor\n) {\n for (; null !== nextEffect; ) {\n var fiber = nextEffect;\n switch (fiber.tag) {\n case 0:\n case 11:\n case 15:\n commitHookEffectListUnmount(8, fiber, nearestMountedAncestor);\n break;\n case 23:\n case 22:\n if (\n null !== fiber.memoizedState &&\n null !== fiber.memoizedState.cachePool\n ) {\n var cache = fiber.memoizedState.cachePool.pool;\n null != cache && cache.refCount++;\n }\n break;\n case 24:\n releaseCache(fiber.memoizedState.cache);\n }\n cache = fiber.child;\n if (null !== cache) (cache.return = fiber), (nextEffect = cache);\n else\n a: for (fiber = deletedSubtreeRoot; null !== nextEffect; ) {\n cache = nextEffect;\n var sibling = cache.sibling,\n returnFiber = cache.return;\n detachFiberAfterEffects(cache);\n if (cache === fiber) {\n nextEffect = null;\n break a;\n }\n if (null !== sibling) {\n sibling.return = returnFiber;\n nextEffect = sibling;\n break a;\n }\n nextEffect = returnFiber;\n }\n }\n}\nvar DefaultAsyncDispatcher = {\n getCacheForType: function (resourceType) {\n var cache = readContext(CacheContext),\n cacheForType = cache.data.get(resourceType);\n void 0 === cacheForType &&\n ((cacheForType = resourceType()),\n cache.data.set(resourceType, cacheForType));\n return cacheForType;\n },\n cacheSignal: function () {\n return readContext(CacheContext).controller.signal;\n }\n },\n PossiblyWeakMap = \"function\" === typeof WeakMap ? WeakMap : Map,\n executionContext = 0,\n workInProgressRoot = null,\n workInProgress = null,\n workInProgressRootRenderLanes = 0,\n workInProgressSuspendedReason = 0,\n workInProgressThrownValue = null,\n workInProgressRootDidSkipSuspendedSiblings = !1,\n workInProgressRootIsPrerendering = !1,\n workInProgressRootDidAttachPingListener = !1,\n entangledRenderLanes = 0,\n workInProgressRootExitStatus = 0,\n workInProgressRootSkippedLanes = 0,\n workInProgressRootInterleavedUpdatedLanes = 0,\n workInProgressRootPingedLanes = 0,\n workInProgressDeferredLane = 0,\n workInProgressSuspendedRetryLanes = 0,\n workInProgressRootConcurrentErrors = null,\n workInProgressRootRecoverableErrors = null,\n workInProgressRootDidIncludeRecursiveRenderUpdate = !1,\n globalMostRecentFallbackTime = 0,\n globalMostRecentTransitionTime = 0,\n workInProgressRootRenderTargetTime = Infinity,\n workInProgressTransitions = null,\n legacyErrorBoundariesThatAlreadyFailed = null,\n pendingEffectsStatus = 0,\n pendingEffectsRoot = null,\n pendingFinishedWork = null,\n pendingEffectsLanes = 0,\n pendingEffectsRemainingLanes = 0,\n pendingPassiveTransitions = null,\n pendingRecoverableErrors = null,\n nestedUpdateCount = 0,\n rootWithNestedUpdates = null;\nfunction requestUpdateLane() {\n return 0 !== (executionContext & 2) && 0 !== workInProgressRootRenderLanes\n ? workInProgressRootRenderLanes & -workInProgressRootRenderLanes\n : null !== ReactSharedInternals.T\n ? requestTransitionLane()\n : resolveUpdatePriority();\n}\nfunction requestDeferredLane() {\n if (0 === workInProgressDeferredLane)\n if (0 === (workInProgressRootRenderLanes & 536870912) || isHydrating) {\n var lane = nextTransitionDeferredLane;\n nextTransitionDeferredLane <<= 1;\n 0 === (nextTransitionDeferredLane & 3932160) &&\n (nextTransitionDeferredLane = 262144);\n workInProgressDeferredLane = lane;\n } else workInProgressDeferredLane = 536870912;\n lane = suspenseHandlerStackCursor.current;\n null !== lane && (lane.flags |= 32);\n return workInProgressDeferredLane;\n}\nfunction scheduleUpdateOnFiber(root, fiber, lane) {\n if (\n (root === workInProgressRoot &&\n (2 === workInProgressSuspendedReason ||\n 9 === workInProgressSuspendedReason)) ||\n null !== root.cancelPendingCommit\n )\n prepareFreshStack(root, 0),\n markRootSuspended(\n root,\n workInProgressRootRenderLanes,\n workInProgressDeferredLane,\n !1\n );\n markRootUpdated$1(root, lane);\n if (0 === (executionContext & 2) || root !== workInProgressRoot)\n root === workInProgressRoot &&\n (0 === (executionContext & 2) &&\n (workInProgressRootInterleavedUpdatedLanes |= lane),\n 4 === workInProgressRootExitStatus &&\n markRootSuspended(\n root,\n workInProgressRootRenderLanes,\n workInProgressDeferredLane,\n !1\n )),\n ensureRootIsScheduled(root);\n}\nfunction performWorkOnRoot(root$jscomp$0, lanes, forceSync) {\n if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(327));\n var shouldTimeSlice =\n (!forceSync &&\n 0 === (lanes & 127) &&\n 0 === (lanes & root$jscomp$0.expiredLanes)) ||\n checkIfRootIsPrerendering(root$jscomp$0, lanes),\n exitStatus = shouldTimeSlice\n ? renderRootConcurrent(root$jscomp$0, lanes)\n : renderRootSync(root$jscomp$0, lanes, !0),\n renderWasConcurrent = shouldTimeSlice;\n do {\n if (0 === exitStatus) {\n workInProgressRootIsPrerendering &&\n !shouldTimeSlice &&\n markRootSuspended(root$jscomp$0, lanes, 0, !1);\n break;\n } else {\n forceSync = root$jscomp$0.current.alternate;\n if (\n renderWasConcurrent &&\n !isRenderConsistentWithExternalStores(forceSync)\n ) {\n exitStatus = renderRootSync(root$jscomp$0, lanes, !1);\n renderWasConcurrent = !1;\n continue;\n }\n if (2 === exitStatus) {\n renderWasConcurrent = lanes;\n if (root$jscomp$0.errorRecoveryDisabledLanes & renderWasConcurrent)\n var JSCompiler_inline_result = 0;\n else\n (JSCompiler_inline_result = root$jscomp$0.pendingLanes & -536870913),\n (JSCompiler_inline_result =\n 0 !== JSCompiler_inline_result\n ? JSCompiler_inline_result\n : JSCompiler_inline_result & 536870912\n ? 536870912\n : 0);\n if (0 !== JSCompiler_inline_result) {\n lanes = JSCompiler_inline_result;\n a: {\n var root = root$jscomp$0;\n exitStatus = workInProgressRootConcurrentErrors;\n var wasRootDehydrated = root.current.memoizedState.isDehydrated;\n wasRootDehydrated &&\n (prepareFreshStack(root, JSCompiler_inline_result).flags |= 256);\n JSCompiler_inline_result = renderRootSync(\n root,\n JSCompiler_inline_result,\n !1\n );\n if (2 !== JSCompiler_inline_result) {\n if (\n workInProgressRootDidAttachPingListener &&\n !wasRootDehydrated\n ) {\n root.errorRecoveryDisabledLanes |= renderWasConcurrent;\n workInProgressRootInterleavedUpdatedLanes |=\n renderWasConcurrent;\n exitStatus = 4;\n break a;\n }\n renderWasConcurrent = workInProgressRootRecoverableErrors;\n workInProgressRootRecoverableErrors = exitStatus;\n null !== renderWasConcurrent &&\n (null === workInProgressRootRecoverableErrors\n ? (workInProgressRootRecoverableErrors = renderWasConcurrent)\n : workInProgressRootRecoverableErrors.push.apply(\n workInProgressRootRecoverableErrors,\n renderWasConcurrent\n ));\n }\n exitStatus = JSCompiler_inline_result;\n }\n renderWasConcurrent = !1;\n if (2 !== exitStatus) continue;\n }\n }\n if (1 === exitStatus) {\n prepareFreshStack(root$jscomp$0, 0);\n markRootSuspended(root$jscomp$0, lanes, 0, !0);\n break;\n }\n a: {\n shouldTimeSlice = root$jscomp$0;\n renderWasConcurrent = exitStatus;\n switch (renderWasConcurrent) {\n case 0:\n case 1:\n throw Error(formatProdErrorMessage(345));\n case 4:\n if ((lanes & 4194048) !== lanes) break;\n case 6:\n markRootSuspended(\n shouldTimeSlice,\n lanes,\n workInProgressDeferredLane,\n !workInProgressRootDidSkipSuspendedSiblings\n );\n break a;\n case 2:\n workInProgressRootRecoverableErrors = null;\n break;\n case 3:\n case 5:\n break;\n default:\n throw Error(formatProdErrorMessage(329));\n }\n if (\n (lanes & 62914560) === lanes &&\n ((exitStatus = globalMostRecentFallbackTime + 300 - now()),\n 10 < exitStatus)\n ) {\n markRootSuspended(\n shouldTimeSlice,\n lanes,\n workInProgressDeferredLane,\n !workInProgressRootDidSkipSuspendedSiblings\n );\n if (0 !== getNextLanes(shouldTimeSlice, 0, !0)) break a;\n pendingEffectsLanes = lanes;\n shouldTimeSlice.timeoutHandle = scheduleTimeout(\n commitRootWhenReady.bind(\n null,\n shouldTimeSlice,\n forceSync,\n workInProgressRootRecoverableErrors,\n workInProgressTransitions,\n workInProgressRootDidIncludeRecursiveRenderUpdate,\n lanes,\n workInProgressDeferredLane,\n workInProgressRootInterleavedUpdatedLanes,\n workInProgressSuspendedRetryLanes,\n workInProgressRootDidSkipSuspendedSiblings,\n renderWasConcurrent,\n \"Throttled\",\n -0,\n 0\n ),\n exitStatus\n );\n break a;\n }\n commitRootWhenReady(\n shouldTimeSlice,\n forceSync,\n workInProgressRootRecoverableErrors,\n workInProgressTransitions,\n workInProgressRootDidIncludeRecursiveRenderUpdate,\n lanes,\n workInProgressDeferredLane,\n workInProgressRootInterleavedUpdatedLanes,\n workInProgressSuspendedRetryLanes,\n workInProgressRootDidSkipSuspendedSiblings,\n renderWasConcurrent,\n null,\n -0,\n 0\n );\n }\n }\n break;\n } while (1);\n ensureRootIsScheduled(root$jscomp$0);\n}\nfunction commitRootWhenReady(\n root,\n finishedWork,\n recoverableErrors,\n transitions,\n didIncludeRenderPhaseUpdate,\n lanes,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes,\n didSkipSuspendedSiblings,\n exitStatus,\n suspendedCommitReason,\n completedRenderStartTime,\n completedRenderEndTime\n) {\n root.timeoutHandle = -1;\n suspendedCommitReason = finishedWork.subtreeFlags;\n if (\n suspendedCommitReason & 8192 ||\n 16785408 === (suspendedCommitReason & 16785408)\n ) {\n suspendedCommitReason = {\n stylesheets: null,\n count: 0,\n imgCount: 0,\n imgBytes: 0,\n suspenseyImages: [],\n waitingForImages: !0,\n waitingForViewTransition: !1,\n unsuspend: noop$1\n };\n accumulateSuspenseyCommitOnFiber(\n finishedWork,\n lanes,\n suspendedCommitReason\n );\n var timeoutOffset =\n (lanes & 62914560) === lanes\n ? globalMostRecentFallbackTime - now()\n : (lanes & 4194048) === lanes\n ? globalMostRecentTransitionTime - now()\n : 0;\n timeoutOffset = waitForCommitToBeReady(\n suspendedCommitReason,\n timeoutOffset\n );\n if (null !== timeoutOffset) {\n pendingEffectsLanes = lanes;\n root.cancelPendingCommit = timeoutOffset(\n commitRoot.bind(\n null,\n root,\n finishedWork,\n lanes,\n recoverableErrors,\n transitions,\n didIncludeRenderPhaseUpdate,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes,\n exitStatus,\n suspendedCommitReason,\n null,\n completedRenderStartTime,\n completedRenderEndTime\n )\n );\n markRootSuspended(root, lanes, spawnedLane, !didSkipSuspendedSiblings);\n return;\n }\n }\n commitRoot(\n root,\n finishedWork,\n lanes,\n recoverableErrors,\n transitions,\n didIncludeRenderPhaseUpdate,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes\n );\n}\nfunction isRenderConsistentWithExternalStores(finishedWork) {\n for (var node = finishedWork; ; ) {\n var tag = node.tag;\n if (\n (0 === tag || 11 === tag || 15 === tag) &&\n node.flags & 16384 &&\n ((tag = node.updateQueue),\n null !== tag && ((tag = tag.stores), null !== tag))\n )\n for (var i = 0; i < tag.length; i++) {\n var check = tag[i],\n getSnapshot = check.getSnapshot;\n check = check.value;\n try {\n if (!objectIs(getSnapshot(), check)) return !1;\n } catch (error) {\n return !1;\n }\n }\n tag = node.child;\n if (node.subtreeFlags & 16384 && null !== tag)\n (tag.return = node), (node = tag);\n else {\n if (node === finishedWork) break;\n for (; null === node.sibling; ) {\n if (null === node.return || node.return === finishedWork) return !0;\n node = node.return;\n }\n node.sibling.return = node.return;\n node = node.sibling;\n }\n }\n return !0;\n}\nfunction markRootSuspended(\n root,\n suspendedLanes,\n spawnedLane,\n didAttemptEntireTree\n) {\n suspendedLanes &= ~workInProgressRootPingedLanes;\n suspendedLanes &= ~workInProgressRootInterleavedUpdatedLanes;\n root.suspendedLanes |= suspendedLanes;\n root.pingedLanes &= ~suspendedLanes;\n didAttemptEntireTree && (root.warmLanes |= suspendedLanes);\n didAttemptEntireTree = root.expirationTimes;\n for (var lanes = suspendedLanes; 0 < lanes; ) {\n var index$6 = 31 - clz32(lanes),\n lane = 1 << index$6;\n didAttemptEntireTree[index$6] = -1;\n lanes &= ~lane;\n }\n 0 !== spawnedLane &&\n markSpawnedDeferredLane(root, spawnedLane, suspendedLanes);\n}\nfunction flushSyncWork$1() {\n return 0 === (executionContext & 6)\n ? (flushSyncWorkAcrossRoots_impl(0, !1), !1)\n : !0;\n}\nfunction resetWorkInProgressStack() {\n if (null !== workInProgress) {\n if (0 === workInProgressSuspendedReason)\n var interruptedWork = workInProgress.return;\n else\n (interruptedWork = workInProgress),\n (lastContextDependency = currentlyRenderingFiber$1 = null),\n resetHooksOnUnwind(interruptedWork),\n (thenableState$1 = null),\n (thenableIndexCounter$1 = 0),\n (interruptedWork = workInProgress);\n for (; null !== interruptedWork; )\n unwindInterruptedWork(interruptedWork.alternate, interruptedWork),\n (interruptedWork = interruptedWork.return);\n workInProgress = null;\n }\n}\nfunction prepareFreshStack(root, lanes) {\n var timeoutHandle = root.timeoutHandle;\n -1 !== timeoutHandle &&\n ((root.timeoutHandle = -1), cancelTimeout(timeoutHandle));\n timeoutHandle = root.cancelPendingCommit;\n null !== timeoutHandle &&\n ((root.cancelPendingCommit = null), timeoutHandle());\n pendingEffectsLanes = 0;\n resetWorkInProgressStack();\n workInProgressRoot = root;\n workInProgress = timeoutHandle = createWorkInProgress(root.current, null);\n workInProgressRootRenderLanes = lanes;\n workInProgressSuspendedReason = 0;\n workInProgressThrownValue = null;\n workInProgressRootDidSkipSuspendedSiblings = !1;\n workInProgressRootIsPrerendering = checkIfRootIsPrerendering(root, lanes);\n workInProgressRootDidAttachPingListener = !1;\n workInProgressSuspendedRetryLanes =\n workInProgressDeferredLane =\n workInProgressRootPingedLanes =\n workInProgressRootInterleavedUpdatedLanes =\n workInProgressRootSkippedLanes =\n workInProgressRootExitStatus =\n 0;\n workInProgressRootRecoverableErrors = workInProgressRootConcurrentErrors =\n null;\n workInProgressRootDidIncludeRecursiveRenderUpdate = !1;\n 0 !== (lanes & 8) && (lanes |= lanes & 32);\n var allEntangledLanes = root.entangledLanes;\n if (0 !== allEntangledLanes)\n for (\n root = root.entanglements, allEntangledLanes &= lanes;\n 0 < allEntangledLanes;\n\n ) {\n var index$4 = 31 - clz32(allEntangledLanes),\n lane = 1 << index$4;\n lanes |= root[index$4];\n allEntangledLanes &= ~lane;\n }\n entangledRenderLanes = lanes;\n finishQueueingConcurrentUpdates();\n return timeoutHandle;\n}\nfunction handleThrow(root, thrownValue) {\n currentlyRenderingFiber = null;\n ReactSharedInternals.H = ContextOnlyDispatcher;\n thrownValue === SuspenseException || thrownValue === SuspenseActionException\n ? ((thrownValue = getSuspendedThenable()),\n (workInProgressSuspendedReason = 3))\n : thrownValue === SuspenseyCommitException\n ? ((thrownValue = getSuspendedThenable()),\n (workInProgressSuspendedReason = 4))\n : (workInProgressSuspendedReason =\n thrownValue === SelectiveHydrationException\n ? 8\n : null !== thrownValue &&\n \"object\" === typeof thrownValue &&\n \"function\" === typeof thrownValue.then\n ? 6\n : 1);\n workInProgressThrownValue = thrownValue;\n null === workInProgress &&\n ((workInProgressRootExitStatus = 1),\n logUncaughtError(\n root,\n createCapturedValueAtFiber(thrownValue, root.current)\n ));\n}\nfunction shouldRemainOnPreviousScreen() {\n var handler = suspenseHandlerStackCursor.current;\n return null === handler\n ? !0\n : (workInProgressRootRenderLanes & 4194048) ===\n workInProgressRootRenderLanes\n ? null === shellBoundary\n ? !0\n : !1\n : (workInProgressRootRenderLanes & 62914560) ===\n workInProgressRootRenderLanes ||\n 0 !== (workInProgressRootRenderLanes & 536870912)\n ? handler === shellBoundary\n : !1;\n}\nfunction pushDispatcher() {\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = ContextOnlyDispatcher;\n return null === prevDispatcher ? ContextOnlyDispatcher : prevDispatcher;\n}\nfunction pushAsyncDispatcher() {\n var prevAsyncDispatcher = ReactSharedInternals.A;\n ReactSharedInternals.A = DefaultAsyncDispatcher;\n return prevAsyncDispatcher;\n}\nfunction renderDidSuspendDelayIfPossible() {\n workInProgressRootExitStatus = 4;\n workInProgressRootDidSkipSuspendedSiblings ||\n ((workInProgressRootRenderLanes & 4194048) !==\n workInProgressRootRenderLanes &&\n null !== suspenseHandlerStackCursor.current) ||\n (workInProgressRootIsPrerendering = !0);\n (0 === (workInProgressRootSkippedLanes & 134217727) &&\n 0 === (workInProgressRootInterleavedUpdatedLanes & 134217727)) ||\n null === workInProgressRoot ||\n markRootSuspended(\n workInProgressRoot,\n workInProgressRootRenderLanes,\n workInProgressDeferredLane,\n !1\n );\n}\nfunction renderRootSync(root, lanes, shouldYieldForPrerendering) {\n var prevExecutionContext = executionContext;\n executionContext |= 2;\n var prevDispatcher = pushDispatcher(),\n prevAsyncDispatcher = pushAsyncDispatcher();\n if (workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes)\n (workInProgressTransitions = null), prepareFreshStack(root, lanes);\n lanes = !1;\n var exitStatus = workInProgressRootExitStatus;\n a: do\n try {\n if (0 !== workInProgressSuspendedReason && null !== workInProgress) {\n var unitOfWork = workInProgress,\n thrownValue = workInProgressThrownValue;\n switch (workInProgressSuspendedReason) {\n case 8:\n resetWorkInProgressStack();\n exitStatus = 6;\n break a;\n case 3:\n case 2:\n case 9:\n case 6:\n null === suspenseHandlerStackCursor.current && (lanes = !0);\n var reason = workInProgressSuspendedReason;\n workInProgressSuspendedReason = 0;\n workInProgressThrownValue = null;\n throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);\n if (\n shouldYieldForPrerendering &&\n workInProgressRootIsPrerendering\n ) {\n exitStatus = 0;\n break a;\n }\n break;\n default:\n (reason = workInProgressSuspendedReason),\n (workInProgressSuspendedReason = 0),\n (workInProgressThrownValue = null),\n throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);\n }\n }\n workLoopSync();\n exitStatus = workInProgressRootExitStatus;\n break;\n } catch (thrownValue$165) {\n handleThrow(root, thrownValue$165);\n }\n while (1);\n lanes && root.shellSuspendCounter++;\n lastContextDependency = currentlyRenderingFiber$1 = null;\n executionContext = prevExecutionContext;\n ReactSharedInternals.H = prevDispatcher;\n ReactSharedInternals.A = prevAsyncDispatcher;\n null === workInProgress &&\n ((workInProgressRoot = null),\n (workInProgressRootRenderLanes = 0),\n finishQueueingConcurrentUpdates());\n return exitStatus;\n}\nfunction workLoopSync() {\n for (; null !== workInProgress; ) performUnitOfWork(workInProgress);\n}\nfunction renderRootConcurrent(root, lanes) {\n var prevExecutionContext = executionContext;\n executionContext |= 2;\n var prevDispatcher = pushDispatcher(),\n prevAsyncDispatcher = pushAsyncDispatcher();\n workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes\n ? ((workInProgressTransitions = null),\n (workInProgressRootRenderTargetTime = now() + 500),\n prepareFreshStack(root, lanes))\n : (workInProgressRootIsPrerendering = checkIfRootIsPrerendering(\n root,\n lanes\n ));\n a: do\n try {\n if (0 !== workInProgressSuspendedReason && null !== workInProgress) {\n lanes = workInProgress;\n var thrownValue = workInProgressThrownValue;\n b: switch (workInProgressSuspendedReason) {\n case 1:\n workInProgressSuspendedReason = 0;\n workInProgressThrownValue = null;\n throwAndUnwindWorkLoop(root, lanes, thrownValue, 1);\n break;\n case 2:\n case 9:\n if (isThenableResolved(thrownValue)) {\n workInProgressSuspendedReason = 0;\n workInProgressThrownValue = null;\n replaySuspendedUnitOfWork(lanes);\n break;\n }\n lanes = function () {\n (2 !== workInProgressSuspendedReason &&\n 9 !== workInProgressSuspendedReason) ||\n workInProgressRoot !== root ||\n (workInProgressSuspendedReason = 7);\n ensureRootIsScheduled(root);\n };\n thrownValue.then(lanes, lanes);\n break a;\n case 3:\n workInProgressSuspendedReason = 7;\n break a;\n case 4:\n workInProgressSuspendedReason = 5;\n break a;\n case 7:\n isThenableResolved(thrownValue)\n ? ((workInProgressSuspendedReason = 0),\n (workInProgressThrownValue = null),\n replaySuspendedUnitOfWork(lanes))\n : ((workInProgressSuspendedReason = 0),\n (workInProgressThrownValue = null),\n throwAndUnwindWorkLoop(root, lanes, thrownValue, 7));\n break;\n case 5:\n var resource = null;\n switch (workInProgress.tag) {\n case 26:\n resource = workInProgress.memoizedState;\n case 5:\n case 27:\n var hostFiber = workInProgress;\n if (\n resource\n ? preloadResource(resource)\n : hostFiber.stateNode.complete\n ) {\n workInProgressSuspendedReason = 0;\n workInProgressThrownValue = null;\n var sibling = hostFiber.sibling;\n if (null !== sibling) workInProgress = sibling;\n else {\n var returnFiber = hostFiber.return;\n null !== returnFiber\n ? ((workInProgress = returnFiber),\n completeUnitOfWork(returnFiber))\n : (workInProgress = null);\n }\n break b;\n }\n }\n workInProgressSuspendedReason = 0;\n workInProgressThrownValue = null;\n throwAndUnwindWorkLoop(root, lanes, thrownValue, 5);\n break;\n case 6:\n workInProgressSuspendedReason = 0;\n workInProgressThrownValue = null;\n throwAndUnwindWorkLoop(root, lanes, thrownValue, 6);\n break;\n case 8:\n resetWorkInProgressStack();\n workInProgressRootExitStatus = 6;\n break a;\n default:\n throw Error(formatProdErrorMessage(462));\n }\n }\n workLoopConcurrentByScheduler();\n break;\n } catch (thrownValue$167) {\n handleThrow(root, thrownValue$167);\n }\n while (1);\n lastContextDependency = currentlyRenderingFiber$1 = null;\n ReactSharedInternals.H = prevDispatcher;\n ReactSharedInternals.A = prevAsyncDispatcher;\n executionContext = prevExecutionContext;\n if (null !== workInProgress) return 0;\n workInProgressRoot = null;\n workInProgressRootRenderLanes = 0;\n finishQueueingConcurrentUpdates();\n return workInProgressRootExitStatus;\n}\nfunction workLoopConcurrentByScheduler() {\n for (; null !== workInProgress && !shouldYield(); )\n performUnitOfWork(workInProgress);\n}\nfunction performUnitOfWork(unitOfWork) {\n var next = beginWork(unitOfWork.alternate, unitOfWork, entangledRenderLanes);\n unitOfWork.memoizedProps = unitOfWork.pendingProps;\n null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);\n}\nfunction replaySuspendedUnitOfWork(unitOfWork) {\n var next = unitOfWork;\n var current = next.alternate;\n switch (next.tag) {\n case 15:\n case 0:\n next = replayFunctionComponent(\n current,\n next,\n next.pendingProps,\n next.type,\n void 0,\n workInProgressRootRenderLanes\n );\n break;\n case 11:\n next = replayFunctionComponent(\n current,\n next,\n next.pendingProps,\n next.type.render,\n next.ref,\n workInProgressRootRenderLanes\n );\n break;\n case 5:\n resetHooksOnUnwind(next);\n default:\n unwindInterruptedWork(current, next),\n (next = workInProgress =\n resetWorkInProgress(next, entangledRenderLanes)),\n (next = beginWork(current, next, entangledRenderLanes));\n }\n unitOfWork.memoizedProps = unitOfWork.pendingProps;\n null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);\n}\nfunction throwAndUnwindWorkLoop(\n root,\n unitOfWork,\n thrownValue,\n suspendedReason\n) {\n lastContextDependency = currentlyRenderingFiber$1 = null;\n resetHooksOnUnwind(unitOfWork);\n thenableState$1 = null;\n thenableIndexCounter$1 = 0;\n var returnFiber = unitOfWork.return;\n try {\n if (\n throwException(\n root,\n returnFiber,\n unitOfWork,\n thrownValue,\n workInProgressRootRenderLanes\n )\n ) {\n workInProgressRootExitStatus = 1;\n logUncaughtError(\n root,\n createCapturedValueAtFiber(thrownValue, root.current)\n );\n workInProgress = null;\n return;\n }\n } catch (error) {\n if (null !== returnFiber) throw ((workInProgress = returnFiber), error);\n workInProgressRootExitStatus = 1;\n logUncaughtError(\n root,\n createCapturedValueAtFiber(thrownValue, root.current)\n );\n workInProgress = null;\n return;\n }\n if (unitOfWork.flags & 32768) {\n if (isHydrating || 1 === suspendedReason) root = !0;\n else if (\n workInProgressRootIsPrerendering ||\n 0 !== (workInProgressRootRenderLanes & 536870912)\n )\n root = !1;\n else if (\n ((workInProgressRootDidSkipSuspendedSiblings = root = !0),\n 2 === suspendedReason ||\n 9 === suspendedReason ||\n 3 === suspendedReason ||\n 6 === suspendedReason)\n )\n (suspendedReason = suspenseHandlerStackCursor.current),\n null !== suspendedReason &&\n 13 === suspendedReason.tag &&\n (suspendedReason.flags |= 16384);\n unwindUnitOfWork(unitOfWork, root);\n } else completeUnitOfWork(unitOfWork);\n}\nfunction completeUnitOfWork(unitOfWork) {\n var completedWork = unitOfWork;\n do {\n if (0 !== (completedWork.flags & 32768)) {\n unwindUnitOfWork(\n completedWork,\n workInProgressRootDidSkipSuspendedSiblings\n );\n return;\n }\n unitOfWork = completedWork.return;\n var next = completeWork(\n completedWork.alternate,\n completedWork,\n entangledRenderLanes\n );\n if (null !== next) {\n workInProgress = next;\n return;\n }\n completedWork = completedWork.sibling;\n if (null !== completedWork) {\n workInProgress = completedWork;\n return;\n }\n workInProgress = completedWork = unitOfWork;\n } while (null !== completedWork);\n 0 === workInProgressRootExitStatus && (workInProgressRootExitStatus = 5);\n}\nfunction unwindUnitOfWork(unitOfWork, skipSiblings) {\n do {\n var next = unwindWork(unitOfWork.alternate, unitOfWork);\n if (null !== next) {\n next.flags &= 32767;\n workInProgress = next;\n return;\n }\n next = unitOfWork.return;\n null !== next &&\n ((next.flags |= 32768), (next.subtreeFlags = 0), (next.deletions = null));\n if (\n !skipSiblings &&\n ((unitOfWork = unitOfWork.sibling), null !== unitOfWork)\n ) {\n workInProgress = unitOfWork;\n return;\n }\n workInProgress = unitOfWork = next;\n } while (null !== unitOfWork);\n workInProgressRootExitStatus = 6;\n workInProgress = null;\n}\nfunction commitRoot(\n root,\n finishedWork,\n lanes,\n recoverableErrors,\n transitions,\n didIncludeRenderPhaseUpdate,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes\n) {\n root.cancelPendingCommit = null;\n do flushPendingEffects();\n while (0 !== pendingEffectsStatus);\n if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(327));\n if (null !== finishedWork) {\n if (finishedWork === root.current) throw Error(formatProdErrorMessage(177));\n didIncludeRenderPhaseUpdate = finishedWork.lanes | finishedWork.childLanes;\n didIncludeRenderPhaseUpdate |= concurrentlyUpdatedLanes;\n markRootFinished(\n root,\n lanes,\n didIncludeRenderPhaseUpdate,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes\n );\n root === workInProgressRoot &&\n ((workInProgress = workInProgressRoot = null),\n (workInProgressRootRenderLanes = 0));\n pendingFinishedWork = finishedWork;\n pendingEffectsRoot = root;\n pendingEffectsLanes = lanes;\n pendingEffectsRemainingLanes = didIncludeRenderPhaseUpdate;\n pendingPassiveTransitions = transitions;\n pendingRecoverableErrors = recoverableErrors;\n 0 !== (finishedWork.subtreeFlags & 10256) ||\n 0 !== (finishedWork.flags & 10256)\n ? ((root.callbackNode = null),\n (root.callbackPriority = 0),\n scheduleCallback$1(NormalPriority$1, function () {\n flushPassiveEffects();\n return null;\n }))\n : ((root.callbackNode = null), (root.callbackPriority = 0));\n recoverableErrors = 0 !== (finishedWork.flags & 13878);\n if (0 !== (finishedWork.subtreeFlags & 13878) || recoverableErrors) {\n recoverableErrors = ReactSharedInternals.T;\n ReactSharedInternals.T = null;\n transitions = ReactDOMSharedInternals.p;\n ReactDOMSharedInternals.p = 2;\n spawnedLane = executionContext;\n executionContext |= 4;\n try {\n commitBeforeMutationEffects(root, finishedWork, lanes);\n } finally {\n (executionContext = spawnedLane),\n (ReactDOMSharedInternals.p = transitions),\n (ReactSharedInternals.T = recoverableErrors);\n }\n }\n pendingEffectsStatus = 1;\n flushMutationEffects();\n flushLayoutEffects();\n flushSpawnedWork();\n }\n}\nfunction flushMutationEffects() {\n if (1 === pendingEffectsStatus) {\n pendingEffectsStatus = 0;\n var root = pendingEffectsRoot,\n finishedWork = pendingFinishedWork,\n rootMutationHasEffect = 0 !== (finishedWork.flags & 13878);\n if (0 !== (finishedWork.subtreeFlags & 13878) || rootMutationHasEffect) {\n rootMutationHasEffect = ReactSharedInternals.T;\n ReactSharedInternals.T = null;\n var previousPriority = ReactDOMSharedInternals.p;\n ReactDOMSharedInternals.p = 2;\n var prevExecutionContext = executionContext;\n executionContext |= 4;\n try {\n commitMutationEffectsOnFiber(finishedWork, root);\n var priorSelectionInformation = selectionInformation,\n curFocusedElem = getActiveElementDeep(root.containerInfo),\n priorFocusedElem = priorSelectionInformation.focusedElem,\n priorSelectionRange = priorSelectionInformation.selectionRange;\n if (\n curFocusedElem !== priorFocusedElem &&\n priorFocusedElem &&\n priorFocusedElem.ownerDocument &&\n containsNode(\n priorFocusedElem.ownerDocument.documentElement,\n priorFocusedElem\n )\n ) {\n if (\n null !== priorSelectionRange &&\n hasSelectionCapabilities(priorFocusedElem)\n ) {\n var start = priorSelectionRange.start,\n end = priorSelectionRange.end;\n void 0 === end && (end = start);\n if (\"selectionStart\" in priorFocusedElem)\n (priorFocusedElem.selectionStart = start),\n (priorFocusedElem.selectionEnd = Math.min(\n end,\n priorFocusedElem.value.length\n ));\n else {\n var doc = priorFocusedElem.ownerDocument || document,\n win = (doc && doc.defaultView) || window;\n if (win.getSelection) {\n var selection = win.getSelection(),\n length = priorFocusedElem.textContent.length,\n start$jscomp$0 = Math.min(priorSelectionRange.start, length),\n end$jscomp$0 =\n void 0 === priorSelectionRange.end\n ? start$jscomp$0\n : Math.min(priorSelectionRange.end, length);\n !selection.extend &&\n start$jscomp$0 > end$jscomp$0 &&\n ((curFocusedElem = end$jscomp$0),\n (end$jscomp$0 = start$jscomp$0),\n (start$jscomp$0 = curFocusedElem));\n var startMarker = getNodeForCharacterOffset(\n priorFocusedElem,\n start$jscomp$0\n ),\n endMarker = getNodeForCharacterOffset(\n priorFocusedElem,\n end$jscomp$0\n );\n if (\n startMarker &&\n endMarker &&\n (1 !== selection.rangeCount ||\n selection.anchorNode !== startMarker.node ||\n selection.anchorOffset !== startMarker.offset ||\n selection.focusNode !== endMarker.node ||\n selection.focusOffset !== endMarker.offset)\n ) {\n var range = doc.createRange();\n range.setStart(startMarker.node, startMarker.offset);\n selection.removeAllRanges();\n start$jscomp$0 > end$jscomp$0\n ? (selection.addRange(range),\n selection.extend(endMarker.node, endMarker.offset))\n : (range.setEnd(endMarker.node, endMarker.offset),\n selection.addRange(range));\n }\n }\n }\n }\n doc = [];\n for (\n selection = priorFocusedElem;\n (selection = selection.parentNode);\n\n )\n 1 === selection.nodeType &&\n doc.push({\n element: selection,\n left: selection.scrollLeft,\n top: selection.scrollTop\n });\n \"function\" === typeof priorFocusedElem.focus &&\n priorFocusedElem.focus();\n for (\n priorFocusedElem = 0;\n priorFocusedElem < doc.length;\n priorFocusedElem++\n ) {\n var info = doc[priorFocusedElem];\n info.element.scrollLeft = info.left;\n info.element.scrollTop = info.top;\n }\n }\n _enabled = !!eventsEnabled;\n selectionInformation = eventsEnabled = null;\n } finally {\n (executionContext = prevExecutionContext),\n (ReactDOMSharedInternals.p = previousPriority),\n (ReactSharedInternals.T = rootMutationHasEffect);\n }\n }\n root.current = finishedWork;\n pendingEffectsStatus = 2;\n }\n}\nfunction flushLayoutEffects() {\n if (2 === pendingEffectsStatus) {\n pendingEffectsStatus = 0;\n var root = pendingEffectsRoot,\n finishedWork = pendingFinishedWork,\n rootHasLayoutEffect = 0 !== (finishedWork.flags & 8772);\n if (0 !== (finishedWork.subtreeFlags & 8772) || rootHasLayoutEffect) {\n rootHasLayoutEffect = ReactSharedInternals.T;\n ReactSharedInternals.T = null;\n var previousPriority = ReactDOMSharedInternals.p;\n ReactDOMSharedInternals.p = 2;\n var prevExecutionContext = executionContext;\n executionContext |= 4;\n try {\n commitLayoutEffectOnFiber(root, finishedWork.alternate, finishedWork);\n } finally {\n (executionContext = prevExecutionContext),\n (ReactDOMSharedInternals.p = previousPriority),\n (ReactSharedInternals.T = rootHasLayoutEffect);\n }\n }\n pendingEffectsStatus = 3;\n }\n}\nfunction flushSpawnedWork() {\n if (4 === pendingEffectsStatus || 3 === pendingEffectsStatus) {\n pendingEffectsStatus = 0;\n requestPaint();\n var root = pendingEffectsRoot,\n finishedWork = pendingFinishedWork,\n lanes = pendingEffectsLanes,\n recoverableErrors = pendingRecoverableErrors;\n 0 !== (finishedWork.subtreeFlags & 10256) ||\n 0 !== (finishedWork.flags & 10256)\n ? (pendingEffectsStatus = 5)\n : ((pendingEffectsStatus = 0),\n (pendingFinishedWork = pendingEffectsRoot = null),\n releaseRootPooledCache(root, root.pendingLanes));\n var remainingLanes = root.pendingLanes;\n 0 === remainingLanes && (legacyErrorBoundariesThatAlreadyFailed = null);\n lanesToEventPriority(lanes);\n finishedWork = finishedWork.stateNode;\n if (injectedHook && \"function\" === typeof injectedHook.onCommitFiberRoot)\n try {\n injectedHook.onCommitFiberRoot(\n rendererID,\n finishedWork,\n void 0,\n 128 === (finishedWork.current.flags & 128)\n );\n } catch (err) {}\n if (null !== recoverableErrors) {\n finishedWork = ReactSharedInternals.T;\n remainingLanes = ReactDOMSharedInternals.p;\n ReactDOMSharedInternals.p = 2;\n ReactSharedInternals.T = null;\n try {\n for (\n var onRecoverableError = root.onRecoverableError, i = 0;\n i < recoverableErrors.length;\n i++\n ) {\n var recoverableError = recoverableErrors[i];\n onRecoverableError(recoverableError.value, {\n componentStack: recoverableError.stack\n });\n }\n } finally {\n (ReactSharedInternals.T = finishedWork),\n (ReactDOMSharedInternals.p = remainingLanes);\n }\n }\n 0 !== (pendingEffectsLanes & 3) && flushPendingEffects();\n ensureRootIsScheduled(root);\n remainingLanes = root.pendingLanes;\n 0 !== (lanes & 261930) && 0 !== (remainingLanes & 42)\n ? root === rootWithNestedUpdates\n ? nestedUpdateCount++\n : ((nestedUpdateCount = 0), (rootWithNestedUpdates = root))\n : (nestedUpdateCount = 0);\n flushSyncWorkAcrossRoots_impl(0, !1);\n }\n}\nfunction releaseRootPooledCache(root, remainingLanes) {\n 0 === (root.pooledCacheLanes &= remainingLanes) &&\n ((remainingLanes = root.pooledCache),\n null != remainingLanes &&\n ((root.pooledCache = null), releaseCache(remainingLanes)));\n}\nfunction flushPendingEffects() {\n flushMutationEffects();\n flushLayoutEffects();\n flushSpawnedWork();\n return flushPassiveEffects();\n}\nfunction flushPassiveEffects() {\n if (5 !== pendingEffectsStatus) return !1;\n var root = pendingEffectsRoot,\n remainingLanes = pendingEffectsRemainingLanes;\n pendingEffectsRemainingLanes = 0;\n var renderPriority = lanesToEventPriority(pendingEffectsLanes),\n prevTransition = ReactSharedInternals.T,\n previousPriority = ReactDOMSharedInternals.p;\n try {\n ReactDOMSharedInternals.p = 32 > renderPriority ? 32 : renderPriority;\n ReactSharedInternals.T = null;\n renderPriority = pendingPassiveTransitions;\n pendingPassiveTransitions = null;\n var root$jscomp$0 = pendingEffectsRoot,\n lanes = pendingEffectsLanes;\n pendingEffectsStatus = 0;\n pendingFinishedWork = pendingEffectsRoot = null;\n pendingEffectsLanes = 0;\n if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(331));\n var prevExecutionContext = executionContext;\n executionContext |= 4;\n commitPassiveUnmountOnFiber(root$jscomp$0.current);\n commitPassiveMountOnFiber(\n root$jscomp$0,\n root$jscomp$0.current,\n lanes,\n renderPriority\n );\n executionContext = prevExecutionContext;\n flushSyncWorkAcrossRoots_impl(0, !1);\n if (\n injectedHook &&\n \"function\" === typeof injectedHook.onPostCommitFiberRoot\n )\n try {\n injectedHook.onPostCommitFiberRoot(rendererID, root$jscomp$0);\n } catch (err) {}\n return !0;\n } finally {\n (ReactDOMSharedInternals.p = previousPriority),\n (ReactSharedInternals.T = prevTransition),\n releaseRootPooledCache(root, remainingLanes);\n }\n}\nfunction captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) {\n sourceFiber = createCapturedValueAtFiber(error, sourceFiber);\n sourceFiber = createRootErrorUpdate(rootFiber.stateNode, sourceFiber, 2);\n rootFiber = enqueueUpdate(rootFiber, sourceFiber, 2);\n null !== rootFiber &&\n (markRootUpdated$1(rootFiber, 2), ensureRootIsScheduled(rootFiber));\n}\nfunction captureCommitPhaseError(sourceFiber, nearestMountedAncestor, error) {\n if (3 === sourceFiber.tag)\n captureCommitPhaseErrorOnRoot(sourceFiber, sourceFiber, error);\n else\n for (; null !== nearestMountedAncestor; ) {\n if (3 === nearestMountedAncestor.tag) {\n captureCommitPhaseErrorOnRoot(\n nearestMountedAncestor,\n sourceFiber,\n error\n );\n break;\n } else if (1 === nearestMountedAncestor.tag) {\n var instance = nearestMountedAncestor.stateNode;\n if (\n \"function\" ===\n typeof nearestMountedAncestor.type.getDerivedStateFromError ||\n (\"function\" === typeof instance.componentDidCatch &&\n (null === legacyErrorBoundariesThatAlreadyFailed ||\n !legacyErrorBoundariesThatAlreadyFailed.has(instance)))\n ) {\n sourceFiber = createCapturedValueAtFiber(error, sourceFiber);\n error = createClassErrorUpdate(2);\n instance = enqueueUpdate(nearestMountedAncestor, error, 2);\n null !== instance &&\n (initializeClassErrorUpdate(\n error,\n instance,\n nearestMountedAncestor,\n sourceFiber\n ),\n markRootUpdated$1(instance, 2),\n ensureRootIsScheduled(instance));\n break;\n }\n }\n nearestMountedAncestor = nearestMountedAncestor.return;\n }\n}\nfunction attachPingListener(root, wakeable, lanes) {\n var pingCache = root.pingCache;\n if (null === pingCache) {\n pingCache = root.pingCache = new PossiblyWeakMap();\n var threadIDs = new Set();\n pingCache.set(wakeable, threadIDs);\n } else\n (threadIDs = pingCache.get(wakeable)),\n void 0 === threadIDs &&\n ((threadIDs = new Set()), pingCache.set(wakeable, threadIDs));\n threadIDs.has(lanes) ||\n ((workInProgressRootDidAttachPingListener = !0),\n threadIDs.add(lanes),\n (root = pingSuspendedRoot.bind(null, root, wakeable, lanes)),\n wakeable.then(root, root));\n}\nfunction pingSuspendedRoot(root, wakeable, pingedLanes) {\n var pingCache = root.pingCache;\n null !== pingCache && pingCache.delete(wakeable);\n root.pingedLanes |= root.suspendedLanes & pingedLanes;\n root.warmLanes &= ~pingedLanes;\n workInProgressRoot === root &&\n (workInProgressRootRenderLanes & pingedLanes) === pingedLanes &&\n (4 === workInProgressRootExitStatus ||\n (3 === workInProgressRootExitStatus &&\n (workInProgressRootRenderLanes & 62914560) ===\n workInProgressRootRenderLanes &&\n 300 > now() - globalMostRecentFallbackTime)\n ? 0 === (executionContext & 2) && prepareFreshStack(root, 0)\n : (workInProgressRootPingedLanes |= pingedLanes),\n workInProgressSuspendedRetryLanes === workInProgressRootRenderLanes &&\n (workInProgressSuspendedRetryLanes = 0));\n ensureRootIsScheduled(root);\n}\nfunction retryTimedOutBoundary(boundaryFiber, retryLane) {\n 0 === retryLane && (retryLane = claimNextRetryLane());\n boundaryFiber = enqueueConcurrentRenderForLane(boundaryFiber, retryLane);\n null !== boundaryFiber &&\n (markRootUpdated$1(boundaryFiber, retryLane),\n ensureRootIsScheduled(boundaryFiber));\n}\nfunction retryDehydratedSuspenseBoundary(boundaryFiber) {\n var suspenseState = boundaryFiber.memoizedState,\n retryLane = 0;\n null !== suspenseState && (retryLane = suspenseState.retryLane);\n retryTimedOutBoundary(boundaryFiber, retryLane);\n}\nfunction resolveRetryWakeable(boundaryFiber, wakeable) {\n var retryLane = 0;\n switch (boundaryFiber.tag) {\n case 31:\n case 13:\n var retryCache = boundaryFiber.stateNode;\n var suspenseState = boundaryFiber.memoizedState;\n null !== suspenseState && (retryLane = suspenseState.retryLane);\n break;\n case 19:\n retryCache = boundaryFiber.stateNode;\n break;\n case 22:\n retryCache = boundaryFiber.stateNode._retryCache;\n break;\n default:\n throw Error(formatProdErrorMessage(314));\n }\n null !== retryCache && retryCache.delete(wakeable);\n retryTimedOutBoundary(boundaryFiber, retryLane);\n}\nfunction scheduleCallback$1(priorityLevel, callback) {\n return scheduleCallback$3(priorityLevel, callback);\n}\nvar firstScheduledRoot = null,\n lastScheduledRoot = null,\n didScheduleMicrotask = !1,\n mightHavePendingSyncWork = !1,\n isFlushingWork = !1,\n currentEventTransitionLane = 0;\nfunction ensureRootIsScheduled(root) {\n root !== lastScheduledRoot &&\n null === root.next &&\n (null === lastScheduledRoot\n ? (firstScheduledRoot = lastScheduledRoot = root)\n : (lastScheduledRoot = lastScheduledRoot.next = root));\n mightHavePendingSyncWork = !0;\n didScheduleMicrotask ||\n ((didScheduleMicrotask = !0), scheduleImmediateRootScheduleTask());\n}\nfunction flushSyncWorkAcrossRoots_impl(syncTransitionLanes, onlyLegacy) {\n if (!isFlushingWork && mightHavePendingSyncWork) {\n isFlushingWork = !0;\n do {\n var didPerformSomeWork = !1;\n for (var root$170 = firstScheduledRoot; null !== root$170; ) {\n if (!onlyLegacy)\n if (0 !== syncTransitionLanes) {\n var pendingLanes = root$170.pendingLanes;\n if (0 === pendingLanes) var JSCompiler_inline_result = 0;\n else {\n var suspendedLanes = root$170.suspendedLanes,\n pingedLanes = root$170.pingedLanes;\n JSCompiler_inline_result =\n (1 << (31 - clz32(42 | syncTransitionLanes) + 1)) - 1;\n JSCompiler_inline_result &=\n pendingLanes & ~(suspendedLanes & ~pingedLanes);\n JSCompiler_inline_result =\n JSCompiler_inline_result & 201326741\n ? (JSCompiler_inline_result & 201326741) | 1\n : JSCompiler_inline_result\n ? JSCompiler_inline_result | 2\n : 0;\n }\n 0 !== JSCompiler_inline_result &&\n ((didPerformSomeWork = !0),\n performSyncWorkOnRoot(root$170, JSCompiler_inline_result));\n } else\n (JSCompiler_inline_result = workInProgressRootRenderLanes),\n (JSCompiler_inline_result = getNextLanes(\n root$170,\n root$170 === workInProgressRoot ? JSCompiler_inline_result : 0,\n null !== root$170.cancelPendingCommit ||\n -1 !== root$170.timeoutHandle\n )),\n 0 === (JSCompiler_inline_result & 3) ||\n checkIfRootIsPrerendering(root$170, JSCompiler_inline_result) ||\n ((didPerformSomeWork = !0),\n performSyncWorkOnRoot(root$170, JSCompiler_inline_result));\n root$170 = root$170.next;\n }\n } while (didPerformSomeWork);\n isFlushingWork = !1;\n }\n}\nfunction processRootScheduleInImmediateTask() {\n processRootScheduleInMicrotask();\n}\nfunction processRootScheduleInMicrotask() {\n mightHavePendingSyncWork = didScheduleMicrotask = !1;\n var syncTransitionLanes = 0;\n 0 !== currentEventTransitionLane &&\n shouldAttemptEagerTransition() &&\n (syncTransitionLanes = currentEventTransitionLane);\n for (\n var currentTime = now(), prev = null, root = firstScheduledRoot;\n null !== root;\n\n ) {\n var next = root.next,\n nextLanes = scheduleTaskForRootDuringMicrotask(root, currentTime);\n if (0 === nextLanes)\n (root.next = null),\n null === prev ? (firstScheduledRoot = next) : (prev.next = next),\n null === next && (lastScheduledRoot = prev);\n else if (\n ((prev = root), 0 !== syncTransitionLanes || 0 !== (nextLanes & 3))\n )\n mightHavePendingSyncWork = !0;\n root = next;\n }\n (0 !== pendingEffectsStatus && 5 !== pendingEffectsStatus) ||\n flushSyncWorkAcrossRoots_impl(syncTransitionLanes, !1);\n 0 !== currentEventTransitionLane && (currentEventTransitionLane = 0);\n}\nfunction scheduleTaskForRootDuringMicrotask(root, currentTime) {\n for (\n var suspendedLanes = root.suspendedLanes,\n pingedLanes = root.pingedLanes,\n expirationTimes = root.expirationTimes,\n lanes = root.pendingLanes & -62914561;\n 0 < lanes;\n\n ) {\n var index$5 = 31 - clz32(lanes),\n lane = 1 << index$5,\n expirationTime = expirationTimes[index$5];\n if (-1 === expirationTime) {\n if (0 === (lane & suspendedLanes) || 0 !== (lane & pingedLanes))\n expirationTimes[index$5] = computeExpirationTime(lane, currentTime);\n } else expirationTime <= currentTime && (root.expiredLanes |= lane);\n lanes &= ~lane;\n }\n currentTime = workInProgressRoot;\n suspendedLanes = workInProgressRootRenderLanes;\n suspendedLanes = getNextLanes(\n root,\n root === currentTime ? suspendedLanes : 0,\n null !== root.cancelPendingCommit || -1 !== root.timeoutHandle\n );\n pingedLanes = root.callbackNode;\n if (\n 0 === suspendedLanes ||\n (root === currentTime &&\n (2 === workInProgressSuspendedReason ||\n 9 === workInProgressSuspendedReason)) ||\n null !== root.cancelPendingCommit\n )\n return (\n null !== pingedLanes &&\n null !== pingedLanes &&\n cancelCallback$1(pingedLanes),\n (root.callbackNode = null),\n (root.callbackPriority = 0)\n );\n if (\n 0 === (suspendedLanes & 3) ||\n checkIfRootIsPrerendering(root, suspendedLanes)\n ) {\n currentTime = suspendedLanes & -suspendedLanes;\n if (currentTime === root.callbackPriority) return currentTime;\n null !== pingedLanes && cancelCallback$1(pingedLanes);\n switch (lanesToEventPriority(suspendedLanes)) {\n case 2:\n case 8:\n suspendedLanes = UserBlockingPriority;\n break;\n case 32:\n suspendedLanes = NormalPriority$1;\n break;\n case 268435456:\n suspendedLanes = IdlePriority;\n break;\n default:\n suspendedLanes = NormalPriority$1;\n }\n pingedLanes = performWorkOnRootViaSchedulerTask.bind(null, root);\n suspendedLanes = scheduleCallback$3(suspendedLanes, pingedLanes);\n root.callbackPriority = currentTime;\n root.callbackNode = suspendedLanes;\n return currentTime;\n }\n null !== pingedLanes && null !== pingedLanes && cancelCallback$1(pingedLanes);\n root.callbackPriority = 2;\n root.callbackNode = null;\n return 2;\n}\nfunction performWorkOnRootViaSchedulerTask(root, didTimeout) {\n if (0 !== pendingEffectsStatus && 5 !== pendingEffectsStatus)\n return (root.callbackNode = null), (root.callbackPriority = 0), null;\n var originalCallbackNode = root.callbackNode;\n if (flushPendingEffects() && root.callbackNode !== originalCallbackNode)\n return null;\n var workInProgressRootRenderLanes$jscomp$0 = workInProgressRootRenderLanes;\n workInProgressRootRenderLanes$jscomp$0 = getNextLanes(\n root,\n root === workInProgressRoot ? workInProgressRootRenderLanes$jscomp$0 : 0,\n null !== root.cancelPendingCommit || -1 !== root.timeoutHandle\n );\n if (0 === workInProgressRootRenderLanes$jscomp$0) return null;\n performWorkOnRoot(root, workInProgressRootRenderLanes$jscomp$0, didTimeout);\n scheduleTaskForRootDuringMicrotask(root, now());\n return null != root.callbackNode && root.callbackNode === originalCallbackNode\n ? performWorkOnRootViaSchedulerTask.bind(null, root)\n : null;\n}\nfunction performSyncWorkOnRoot(root, lanes) {\n if (flushPendingEffects()) return null;\n performWorkOnRoot(root, lanes, !0);\n}\nfunction scheduleImmediateRootScheduleTask() {\n scheduleMicrotask(function () {\n 0 !== (executionContext & 6)\n ? scheduleCallback$3(\n ImmediatePriority,\n processRootScheduleInImmediateTask\n )\n : processRootScheduleInMicrotask();\n });\n}\nfunction requestTransitionLane() {\n if (0 === currentEventTransitionLane) {\n var actionScopeLane = currentEntangledLane;\n 0 === actionScopeLane &&\n ((actionScopeLane = nextTransitionUpdateLane),\n (nextTransitionUpdateLane <<= 1),\n 0 === (nextTransitionUpdateLane & 261888) &&\n (nextTransitionUpdateLane = 256));\n currentEventTransitionLane = actionScopeLane;\n }\n return currentEventTransitionLane;\n}\nfunction coerceFormActionProp(actionProp) {\n return null == actionProp ||\n \"symbol\" === typeof actionProp ||\n \"boolean\" === typeof actionProp\n ? null\n : \"function\" === typeof actionProp\n ? actionProp\n : sanitizeURL(\"\" + actionProp);\n}\nfunction createFormDataWithSubmitter(form, submitter) {\n var temp = submitter.ownerDocument.createElement(\"input\");\n temp.name = submitter.name;\n temp.value = submitter.value;\n form.id && temp.setAttribute(\"form\", form.id);\n submitter.parentNode.insertBefore(temp, submitter);\n form = new FormData(form);\n temp.parentNode.removeChild(temp);\n return form;\n}\nfunction extractEvents$1(\n dispatchQueue,\n domEventName,\n maybeTargetInst,\n nativeEvent,\n nativeEventTarget\n) {\n if (\n \"submit\" === domEventName &&\n maybeTargetInst &&\n maybeTargetInst.stateNode === nativeEventTarget\n ) {\n var action = coerceFormActionProp(\n (nativeEventTarget[internalPropsKey] || null).action\n ),\n submitter = nativeEvent.submitter;\n submitter &&\n ((domEventName = (domEventName = submitter[internalPropsKey] || null)\n ? coerceFormActionProp(domEventName.formAction)\n : submitter.getAttribute(\"formAction\")),\n null !== domEventName && ((action = domEventName), (submitter = null)));\n var event = new SyntheticEvent(\n \"action\",\n \"action\",\n null,\n nativeEvent,\n nativeEventTarget\n );\n dispatchQueue.push({\n event: event,\n listeners: [\n {\n instance: null,\n listener: function () {\n if (nativeEvent.defaultPrevented) {\n if (0 !== currentEventTransitionLane) {\n var formData = submitter\n ? createFormDataWithSubmitter(nativeEventTarget, submitter)\n : new FormData(nativeEventTarget);\n startHostTransition(\n maybeTargetInst,\n {\n pending: !0,\n data: formData,\n method: nativeEventTarget.method,\n action: action\n },\n null,\n formData\n );\n }\n } else\n \"function\" === typeof action &&\n (event.preventDefault(),\n (formData = submitter\n ? createFormDataWithSubmitter(nativeEventTarget, submitter)\n : new FormData(nativeEventTarget)),\n startHostTransition(\n maybeTargetInst,\n {\n pending: !0,\n data: formData,\n method: nativeEventTarget.method,\n action: action\n },\n action,\n formData\n ));\n },\n currentTarget: nativeEventTarget\n }\n ]\n });\n }\n}\nfor (\n var i$jscomp$inline_1577 = 0;\n i$jscomp$inline_1577 < simpleEventPluginEvents.length;\n i$jscomp$inline_1577++\n) {\n var eventName$jscomp$inline_1578 =\n simpleEventPluginEvents[i$jscomp$inline_1577],\n domEventName$jscomp$inline_1579 =\n eventName$jscomp$inline_1578.toLowerCase(),\n capitalizedEvent$jscomp$inline_1580 =\n eventName$jscomp$inline_1578[0].toUpperCase() +\n eventName$jscomp$inline_1578.slice(1);\n registerSimpleEvent(\n domEventName$jscomp$inline_1579,\n \"on\" + capitalizedEvent$jscomp$inline_1580\n );\n}\nregisterSimpleEvent(ANIMATION_END, \"onAnimationEnd\");\nregisterSimpleEvent(ANIMATION_ITERATION, \"onAnimationIteration\");\nregisterSimpleEvent(ANIMATION_START, \"onAnimationStart\");\nregisterSimpleEvent(\"dblclick\", \"onDoubleClick\");\nregisterSimpleEvent(\"focusin\", \"onFocus\");\nregisterSimpleEvent(\"focusout\", \"onBlur\");\nregisterSimpleEvent(TRANSITION_RUN, \"onTransitionRun\");\nregisterSimpleEvent(TRANSITION_START, \"onTransitionStart\");\nregisterSimpleEvent(TRANSITION_CANCEL, \"onTransitionCancel\");\nregisterSimpleEvent(TRANSITION_END, \"onTransitionEnd\");\nregisterDirectEvent(\"onMouseEnter\", [\"mouseout\", \"mouseover\"]);\nregisterDirectEvent(\"onMouseLeave\", [\"mouseout\", \"mouseover\"]);\nregisterDirectEvent(\"onPointerEnter\", [\"pointerout\", \"pointerover\"]);\nregisterDirectEvent(\"onPointerLeave\", [\"pointerout\", \"pointerover\"]);\nregisterTwoPhaseEvent(\n \"onChange\",\n \"change click focusin focusout input keydown keyup selectionchange\".split(\" \")\n);\nregisterTwoPhaseEvent(\n \"onSelect\",\n \"focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange\".split(\n \" \"\n )\n);\nregisterTwoPhaseEvent(\"onBeforeInput\", [\n \"compositionend\",\n \"keypress\",\n \"textInput\",\n \"paste\"\n]);\nregisterTwoPhaseEvent(\n \"onCompositionEnd\",\n \"compositionend focusout keydown keypress keyup mousedown\".split(\" \")\n);\nregisterTwoPhaseEvent(\n \"onCompositionStart\",\n \"compositionstart focusout keydown keypress keyup mousedown\".split(\" \")\n);\nregisterTwoPhaseEvent(\n \"onCompositionUpdate\",\n \"compositionupdate focusout keydown keypress keyup mousedown\".split(\" \")\n);\nvar mediaEventTypes =\n \"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting\".split(\n \" \"\n ),\n nonDelegatedEvents = new Set(\n \"beforetoggle cancel close invalid load scroll scrollend toggle\"\n .split(\" \")\n .concat(mediaEventTypes)\n );\nfunction processDispatchQueue(dispatchQueue, eventSystemFlags) {\n eventSystemFlags = 0 !== (eventSystemFlags & 4);\n for (var i = 0; i < dispatchQueue.length; i++) {\n var _dispatchQueue$i = dispatchQueue[i],\n event = _dispatchQueue$i.event;\n _dispatchQueue$i = _dispatchQueue$i.listeners;\n a: {\n var previousInstance = void 0;\n if (eventSystemFlags)\n for (\n var i$jscomp$0 = _dispatchQueue$i.length - 1;\n 0 <= i$jscomp$0;\n i$jscomp$0--\n ) {\n var _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0],\n instance = _dispatchListeners$i.instance,\n currentTarget = _dispatchListeners$i.currentTarget;\n _dispatchListeners$i = _dispatchListeners$i.listener;\n if (instance !== previousInstance && event.isPropagationStopped())\n break a;\n previousInstance = _dispatchListeners$i;\n event.currentTarget = currentTarget;\n try {\n previousInstance(event);\n } catch (error) {\n reportGlobalError(error);\n }\n event.currentTarget = null;\n previousInstance = instance;\n }\n else\n for (\n i$jscomp$0 = 0;\n i$jscomp$0 < _dispatchQueue$i.length;\n i$jscomp$0++\n ) {\n _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0];\n instance = _dispatchListeners$i.instance;\n currentTarget = _dispatchListeners$i.currentTarget;\n _dispatchListeners$i = _dispatchListeners$i.listener;\n if (instance !== previousInstance && event.isPropagationStopped())\n break a;\n previousInstance = _dispatchListeners$i;\n event.currentTarget = currentTarget;\n try {\n previousInstance(event);\n } catch (error) {\n reportGlobalError(error);\n }\n event.currentTarget = null;\n previousInstance = instance;\n }\n }\n }\n}\nfunction listenToNonDelegatedEvent(domEventName, targetElement) {\n var JSCompiler_inline_result = targetElement[internalEventHandlersKey];\n void 0 === JSCompiler_inline_result &&\n (JSCompiler_inline_result = targetElement[internalEventHandlersKey] =\n new Set());\n var listenerSetKey = domEventName + \"__bubble\";\n JSCompiler_inline_result.has(listenerSetKey) ||\n (addTrappedEventListener(targetElement, domEventName, 2, !1),\n JSCompiler_inline_result.add(listenerSetKey));\n}\nfunction listenToNativeEvent(domEventName, isCapturePhaseListener, target) {\n var eventSystemFlags = 0;\n isCapturePhaseListener && (eventSystemFlags |= 4);\n addTrappedEventListener(\n target,\n domEventName,\n eventSystemFlags,\n isCapturePhaseListener\n );\n}\nvar listeningMarker = \"_reactListening\" + Math.random().toString(36).slice(2);\nfunction listenToAllSupportedEvents(rootContainerElement) {\n if (!rootContainerElement[listeningMarker]) {\n rootContainerElement[listeningMarker] = !0;\n allNativeEvents.forEach(function (domEventName) {\n \"selectionchange\" !== domEventName &&\n (nonDelegatedEvents.has(domEventName) ||\n listenToNativeEvent(domEventName, !1, rootContainerElement),\n listenToNativeEvent(domEventName, !0, rootContainerElement));\n });\n var ownerDocument =\n 9 === rootContainerElement.nodeType\n ? rootContainerElement\n : rootContainerElement.ownerDocument;\n null === ownerDocument ||\n ownerDocument[listeningMarker] ||\n ((ownerDocument[listeningMarker] = !0),\n listenToNativeEvent(\"selectionchange\", !1, ownerDocument));\n }\n}\nfunction addTrappedEventListener(\n targetContainer,\n domEventName,\n eventSystemFlags,\n isCapturePhaseListener\n) {\n switch (getEventPriority(domEventName)) {\n case 2:\n var listenerWrapper = dispatchDiscreteEvent;\n break;\n case 8:\n listenerWrapper = dispatchContinuousEvent;\n break;\n default:\n listenerWrapper = dispatchEvent;\n }\n eventSystemFlags = listenerWrapper.bind(\n null,\n domEventName,\n eventSystemFlags,\n targetContainer\n );\n listenerWrapper = void 0;\n !passiveBrowserEventsSupported ||\n (\"touchstart\" !== domEventName &&\n \"touchmove\" !== domEventName &&\n \"wheel\" !== domEventName) ||\n (listenerWrapper = !0);\n isCapturePhaseListener\n ? void 0 !== listenerWrapper\n ? targetContainer.addEventListener(domEventName, eventSystemFlags, {\n capture: !0,\n passive: listenerWrapper\n })\n : targetContainer.addEventListener(domEventName, eventSystemFlags, !0)\n : void 0 !== listenerWrapper\n ? targetContainer.addEventListener(domEventName, eventSystemFlags, {\n passive: listenerWrapper\n })\n : targetContainer.addEventListener(domEventName, eventSystemFlags, !1);\n}\nfunction dispatchEventForPluginEventSystem(\n domEventName,\n eventSystemFlags,\n nativeEvent,\n targetInst$jscomp$0,\n targetContainer\n) {\n var ancestorInst = targetInst$jscomp$0;\n if (\n 0 === (eventSystemFlags & 1) &&\n 0 === (eventSystemFlags & 2) &&\n null !== targetInst$jscomp$0\n )\n a: for (;;) {\n if (null === targetInst$jscomp$0) return;\n var nodeTag = targetInst$jscomp$0.tag;\n if (3 === nodeTag || 4 === nodeTag) {\n var container = targetInst$jscomp$0.stateNode.containerInfo;\n if (container === targetContainer) break;\n if (4 === nodeTag)\n for (nodeTag = targetInst$jscomp$0.return; null !== nodeTag; ) {\n var grandTag = nodeTag.tag;\n if (\n (3 === grandTag || 4 === grandTag) &&\n nodeTag.stateNode.containerInfo === targetContainer\n )\n return;\n nodeTag = nodeTag.return;\n }\n for (; null !== container; ) {\n nodeTag = getClosestInstanceFromNode(container);\n if (null === nodeTag) return;\n grandTag = nodeTag.tag;\n if (\n 5 === grandTag ||\n 6 === grandTag ||\n 26 === grandTag ||\n 27 === grandTag\n ) {\n targetInst$jscomp$0 = ancestorInst = nodeTag;\n continue a;\n }\n container = container.parentNode;\n }\n }\n targetInst$jscomp$0 = targetInst$jscomp$0.return;\n }\n batchedUpdates$1(function () {\n var targetInst = ancestorInst,\n nativeEventTarget = getEventTarget(nativeEvent),\n dispatchQueue = [];\n a: {\n var reactName = topLevelEventsToReactNames.get(domEventName);\n if (void 0 !== reactName) {\n var SyntheticEventCtor = SyntheticEvent,\n reactEventType = domEventName;\n switch (domEventName) {\n case \"keypress\":\n if (0 === getEventCharCode(nativeEvent)) break a;\n case \"keydown\":\n case \"keyup\":\n SyntheticEventCtor = SyntheticKeyboardEvent;\n break;\n case \"focusin\":\n reactEventType = \"focus\";\n SyntheticEventCtor = SyntheticFocusEvent;\n break;\n case \"focusout\":\n reactEventType = \"blur\";\n SyntheticEventCtor = SyntheticFocusEvent;\n break;\n case \"beforeblur\":\n case \"afterblur\":\n SyntheticEventCtor = SyntheticFocusEvent;\n break;\n case \"click\":\n if (2 === nativeEvent.button) break a;\n case \"auxclick\":\n case \"dblclick\":\n case \"mousedown\":\n case \"mousemove\":\n case \"mouseup\":\n case \"mouseout\":\n case \"mouseover\":\n case \"contextmenu\":\n SyntheticEventCtor = SyntheticMouseEvent;\n break;\n case \"drag\":\n case \"dragend\":\n case \"dragenter\":\n case \"dragexit\":\n case \"dragleave\":\n case \"dragover\":\n case \"dragstart\":\n case \"drop\":\n SyntheticEventCtor = SyntheticDragEvent;\n break;\n case \"touchcancel\":\n case \"touchend\":\n case \"touchmove\":\n case \"touchstart\":\n SyntheticEventCtor = SyntheticTouchEvent;\n break;\n case ANIMATION_END:\n case ANIMATION_ITERATION:\n case ANIMATION_START:\n SyntheticEventCtor = SyntheticAnimationEvent;\n break;\n case TRANSITION_END:\n SyntheticEventCtor = SyntheticTransitionEvent;\n break;\n case \"scroll\":\n case \"scrollend\":\n SyntheticEventCtor = SyntheticUIEvent;\n break;\n case \"wheel\":\n SyntheticEventCtor = SyntheticWheelEvent;\n break;\n case \"copy\":\n case \"cut\":\n case \"paste\":\n SyntheticEventCtor = SyntheticClipboardEvent;\n break;\n case \"gotpointercapture\":\n case \"lostpointercapture\":\n case \"pointercancel\":\n case \"pointerdown\":\n case \"pointermove\":\n case \"pointerout\":\n case \"pointerover\":\n case \"pointerup\":\n SyntheticEventCtor = SyntheticPointerEvent;\n break;\n case \"toggle\":\n case \"beforetoggle\":\n SyntheticEventCtor = SyntheticToggleEvent;\n }\n var inCapturePhase = 0 !== (eventSystemFlags & 4),\n accumulateTargetOnly =\n !inCapturePhase &&\n (\"scroll\" === domEventName || \"scrollend\" === domEventName),\n reactEventName = inCapturePhase\n ? null !== reactName\n ? reactName + \"Capture\"\n : null\n : reactName;\n inCapturePhase = [];\n for (\n var instance = targetInst, lastHostComponent;\n null !== instance;\n\n ) {\n var _instance = instance;\n lastHostComponent = _instance.stateNode;\n _instance = _instance.tag;\n (5 !== _instance && 26 !== _instance && 27 !== _instance) ||\n null === lastHostComponent ||\n null === reactEventName ||\n ((_instance = getListener(instance, reactEventName)),\n null != _instance &&\n inCapturePhase.push(\n createDispatchListener(instance, _instance, lastHostComponent)\n ));\n if (accumulateTargetOnly) break;\n instance = instance.return;\n }\n 0 < inCapturePhase.length &&\n ((reactName = new SyntheticEventCtor(\n reactName,\n reactEventType,\n null,\n nativeEvent,\n nativeEventTarget\n )),\n dispatchQueue.push({ event: reactName, listeners: inCapturePhase }));\n }\n }\n if (0 === (eventSystemFlags & 7)) {\n a: {\n reactName =\n \"mouseover\" === domEventName || \"pointerover\" === domEventName;\n SyntheticEventCtor =\n \"mouseout\" === domEventName || \"pointerout\" === domEventName;\n if (\n reactName &&\n nativeEvent !== currentReplayingEvent &&\n (reactEventType =\n nativeEvent.relatedTarget || nativeEvent.fromElement) &&\n (getClosestInstanceFromNode(reactEventType) ||\n reactEventType[internalContainerInstanceKey])\n )\n break a;\n if (SyntheticEventCtor || reactName) {\n reactName =\n nativeEventTarget.window === nativeEventTarget\n ? nativeEventTarget\n : (reactName = nativeEventTarget.ownerDocument)\n ? reactName.defaultView || reactName.parentWindow\n : window;\n if (SyntheticEventCtor) {\n if (\n ((reactEventType =\n nativeEvent.relatedTarget || nativeEvent.toElement),\n (SyntheticEventCtor = targetInst),\n (reactEventType = reactEventType\n ? getClosestInstanceFromNode(reactEventType)\n : null),\n null !== reactEventType &&\n ((accumulateTargetOnly =\n getNearestMountedFiber(reactEventType)),\n (inCapturePhase = reactEventType.tag),\n reactEventType !== accumulateTargetOnly ||\n (5 !== inCapturePhase &&\n 27 !== inCapturePhase &&\n 6 !== inCapturePhase)))\n )\n reactEventType = null;\n } else (SyntheticEventCtor = null), (reactEventType = targetInst);\n if (SyntheticEventCtor !== reactEventType) {\n inCapturePhase = SyntheticMouseEvent;\n _instance = \"onMouseLeave\";\n reactEventName = \"onMouseEnter\";\n instance = \"mouse\";\n if (\"pointerout\" === domEventName || \"pointerover\" === domEventName)\n (inCapturePhase = SyntheticPointerEvent),\n (_instance = \"onPointerLeave\"),\n (reactEventName = \"onPointerEnter\"),\n (instance = \"pointer\");\n accumulateTargetOnly =\n null == SyntheticEventCtor\n ? reactName\n : getNodeFromInstance(SyntheticEventCtor);\n lastHostComponent =\n null == reactEventType\n ? reactName\n : getNodeFromInstance(reactEventType);\n reactName = new inCapturePhase(\n _instance,\n instance + \"leave\",\n SyntheticEventCtor,\n nativeEvent,\n nativeEventTarget\n );\n reactName.target = accumulateTargetOnly;\n reactName.relatedTarget = lastHostComponent;\n _instance = null;\n getClosestInstanceFromNode(nativeEventTarget) === targetInst &&\n ((inCapturePhase = new inCapturePhase(\n reactEventName,\n instance + \"enter\",\n reactEventType,\n nativeEvent,\n nativeEventTarget\n )),\n (inCapturePhase.target = lastHostComponent),\n (inCapturePhase.relatedTarget = accumulateTargetOnly),\n (_instance = inCapturePhase));\n accumulateTargetOnly = _instance;\n if (SyntheticEventCtor && reactEventType)\n b: {\n inCapturePhase = getParent;\n reactEventName = SyntheticEventCtor;\n instance = reactEventType;\n lastHostComponent = 0;\n for (\n _instance = reactEventName;\n _instance;\n _instance = inCapturePhase(_instance)\n )\n lastHostComponent++;\n _instance = 0;\n for (var tempB = instance; tempB; tempB = inCapturePhase(tempB))\n _instance++;\n for (; 0 < lastHostComponent - _instance; )\n (reactEventName = inCapturePhase(reactEventName)),\n lastHostComponent--;\n for (; 0 < _instance - lastHostComponent; )\n (instance = inCapturePhase(instance)), _instance--;\n for (; lastHostComponent--; ) {\n if (\n reactEventName === instance ||\n (null !== instance && reactEventName === instance.alternate)\n ) {\n inCapturePhase = reactEventName;\n break b;\n }\n reactEventName = inCapturePhase(reactEventName);\n instance = inCapturePhase(instance);\n }\n inCapturePhase = null;\n }\n else inCapturePhase = null;\n null !== SyntheticEventCtor &&\n accumulateEnterLeaveListenersForEvent(\n dispatchQueue,\n reactName,\n SyntheticEventCtor,\n inCapturePhase,\n !1\n );\n null !== reactEventType &&\n null !== accumulateTargetOnly &&\n accumulateEnterLeaveListenersForEvent(\n dispatchQueue,\n accumulateTargetOnly,\n reactEventType,\n inCapturePhase,\n !0\n );\n }\n }\n }\n a: {\n reactName = targetInst ? getNodeFromInstance(targetInst) : window;\n SyntheticEventCtor =\n reactName.nodeName && reactName.nodeName.toLowerCase();\n if (\n \"select\" === SyntheticEventCtor ||\n (\"input\" === SyntheticEventCtor && \"file\" === reactName.type)\n )\n var getTargetInstFunc = getTargetInstForChangeEvent;\n else if (isTextInputElement(reactName))\n if (isInputEventSupported)\n getTargetInstFunc = getTargetInstForInputOrChangeEvent;\n else {\n getTargetInstFunc = getTargetInstForInputEventPolyfill;\n var handleEventFunc = handleEventsForInputEventPolyfill;\n }\n else\n (SyntheticEventCtor = reactName.nodeName),\n !SyntheticEventCtor ||\n \"input\" !== SyntheticEventCtor.toLowerCase() ||\n (\"checkbox\" !== reactName.type && \"radio\" !== reactName.type)\n ? targetInst &&\n isCustomElement(targetInst.elementType) &&\n (getTargetInstFunc = getTargetInstForChangeEvent)\n : (getTargetInstFunc = getTargetInstForClickEvent);\n if (\n getTargetInstFunc &&\n (getTargetInstFunc = getTargetInstFunc(domEventName, targetInst))\n ) {\n createAndAccumulateChangeEvent(\n dispatchQueue,\n getTargetInstFunc,\n nativeEvent,\n nativeEventTarget\n );\n break a;\n }\n handleEventFunc && handleEventFunc(domEventName, reactName, targetInst);\n \"focusout\" === domEventName &&\n targetInst &&\n \"number\" === reactName.type &&\n null != targetInst.memoizedProps.value &&\n setDefaultValue(reactName, \"number\", reactName.value);\n }\n handleEventFunc = targetInst ? getNodeFromInstance(targetInst) : window;\n switch (domEventName) {\n case \"focusin\":\n if (\n isTextInputElement(handleEventFunc) ||\n \"true\" === handleEventFunc.contentEditable\n )\n (activeElement = handleEventFunc),\n (activeElementInst = targetInst),\n (lastSelection = null);\n break;\n case \"focusout\":\n lastSelection = activeElementInst = activeElement = null;\n break;\n case \"mousedown\":\n mouseDown = !0;\n break;\n case \"contextmenu\":\n case \"mouseup\":\n case \"dragend\":\n mouseDown = !1;\n constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);\n break;\n case \"selectionchange\":\n if (skipSelectionChangeEvent) break;\n case \"keydown\":\n case \"keyup\":\n constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);\n }\n var fallbackData;\n if (canUseCompositionEvent)\n b: {\n switch (domEventName) {\n case \"compositionstart\":\n var eventType = \"onCompositionStart\";\n break b;\n case \"compositionend\":\n eventType = \"onCompositionEnd\";\n break b;\n case \"compositionupdate\":\n eventType = \"onCompositionUpdate\";\n break b;\n }\n eventType = void 0;\n }\n else\n isComposing\n ? isFallbackCompositionEnd(domEventName, nativeEvent) &&\n (eventType = \"onCompositionEnd\")\n : \"keydown\" === domEventName &&\n 229 === nativeEvent.keyCode &&\n (eventType = \"onCompositionStart\");\n eventType &&\n (useFallbackCompositionData &&\n \"ko\" !== nativeEvent.locale &&\n (isComposing || \"onCompositionStart\" !== eventType\n ? \"onCompositionEnd\" === eventType &&\n isComposing &&\n (fallbackData = getData())\n : ((root = nativeEventTarget),\n (startText = \"value\" in root ? root.value : root.textContent),\n (isComposing = !0))),\n (handleEventFunc = accumulateTwoPhaseListeners(targetInst, eventType)),\n 0 < handleEventFunc.length &&\n ((eventType = new SyntheticCompositionEvent(\n eventType,\n domEventName,\n null,\n nativeEvent,\n nativeEventTarget\n )),\n dispatchQueue.push({ event: eventType, listeners: handleEventFunc }),\n fallbackData\n ? (eventType.data = fallbackData)\n : ((fallbackData = getDataFromCustomEvent(nativeEvent)),\n null !== fallbackData && (eventType.data = fallbackData))));\n if (\n (fallbackData = canUseTextInputEvent\n ? getNativeBeforeInputChars(domEventName, nativeEvent)\n : getFallbackBeforeInputChars(domEventName, nativeEvent))\n )\n (eventType = accumulateTwoPhaseListeners(targetInst, \"onBeforeInput\")),\n 0 < eventType.length &&\n ((handleEventFunc = new SyntheticCompositionEvent(\n \"onBeforeInput\",\n \"beforeinput\",\n null,\n nativeEvent,\n nativeEventTarget\n )),\n dispatchQueue.push({\n event: handleEventFunc,\n listeners: eventType\n }),\n (handleEventFunc.data = fallbackData));\n extractEvents$1(\n dispatchQueue,\n domEventName,\n targetInst,\n nativeEvent,\n nativeEventTarget\n );\n }\n processDispatchQueue(dispatchQueue, eventSystemFlags);\n });\n}\nfunction createDispatchListener(instance, listener, currentTarget) {\n return {\n instance: instance,\n listener: listener,\n currentTarget: currentTarget\n };\n}\nfunction accumulateTwoPhaseListeners(targetFiber, reactName) {\n for (\n var captureName = reactName + \"Capture\", listeners = [];\n null !== targetFiber;\n\n ) {\n var _instance2 = targetFiber,\n stateNode = _instance2.stateNode;\n _instance2 = _instance2.tag;\n (5 !== _instance2 && 26 !== _instance2 && 27 !== _instance2) ||\n null === stateNode ||\n ((_instance2 = getListener(targetFiber, captureName)),\n null != _instance2 &&\n listeners.unshift(\n createDispatchListener(targetFiber, _instance2, stateNode)\n ),\n (_instance2 = getListener(targetFiber, reactName)),\n null != _instance2 &&\n listeners.push(\n createDispatchListener(targetFiber, _instance2, stateNode)\n ));\n if (3 === targetFiber.tag) return listeners;\n targetFiber = targetFiber.return;\n }\n return [];\n}\nfunction getParent(inst) {\n if (null === inst) return null;\n do inst = inst.return;\n while (inst && 5 !== inst.tag && 27 !== inst.tag);\n return inst ? inst : null;\n}\nfunction accumulateEnterLeaveListenersForEvent(\n dispatchQueue,\n event,\n target,\n common,\n inCapturePhase\n) {\n for (\n var registrationName = event._reactName, listeners = [];\n null !== target && target !== common;\n\n ) {\n var _instance3 = target,\n alternate = _instance3.alternate,\n stateNode = _instance3.stateNode;\n _instance3 = _instance3.tag;\n if (null !== alternate && alternate === common) break;\n (5 !== _instance3 && 26 !== _instance3 && 27 !== _instance3) ||\n null === stateNode ||\n ((alternate = stateNode),\n inCapturePhase\n ? ((stateNode = getListener(target, registrationName)),\n null != stateNode &&\n listeners.unshift(\n createDispatchListener(target, stateNode, alternate)\n ))\n : inCapturePhase ||\n ((stateNode = getListener(target, registrationName)),\n null != stateNode &&\n listeners.push(\n createDispatchListener(target, stateNode, alternate)\n )));\n target = target.return;\n }\n 0 !== listeners.length &&\n dispatchQueue.push({ event: event, listeners: listeners });\n}\nvar NORMALIZE_NEWLINES_REGEX = /\\r\\n?/g,\n NORMALIZE_NULL_AND_REPLACEMENT_REGEX = /\\u0000|\\uFFFD/g;\nfunction normalizeMarkupForTextOrAttribute(markup) {\n return (\"string\" === typeof markup ? markup : \"\" + markup)\n .replace(NORMALIZE_NEWLINES_REGEX, \"\\n\")\n .replace(NORMALIZE_NULL_AND_REPLACEMENT_REGEX, \"\");\n}\nfunction checkForUnmatchedText(serverText, clientText) {\n clientText = normalizeMarkupForTextOrAttribute(clientText);\n return normalizeMarkupForTextOrAttribute(serverText) === clientText ? !0 : !1;\n}\nfunction setProp(domElement, tag, key, value, props, prevValue) {\n switch (key) {\n case \"children\":\n \"string\" === typeof value\n ? \"body\" === tag ||\n (\"textarea\" === tag && \"\" === value) ||\n setTextContent(domElement, value)\n : (\"number\" === typeof value || \"bigint\" === typeof value) &&\n \"body\" !== tag &&\n setTextContent(domElement, \"\" + value);\n break;\n case \"className\":\n setValueForKnownAttribute(domElement, \"class\", value);\n break;\n case \"tabIndex\":\n setValueForKnownAttribute(domElement, \"tabindex\", value);\n break;\n case \"dir\":\n case \"role\":\n case \"viewBox\":\n case \"width\":\n case \"height\":\n setValueForKnownAttribute(domElement, key, value);\n break;\n case \"style\":\n setValueForStyles(domElement, value, prevValue);\n break;\n case \"data\":\n if (\"object\" !== tag) {\n setValueForKnownAttribute(domElement, \"data\", value);\n break;\n }\n case \"src\":\n case \"href\":\n if (\"\" === value && (\"a\" !== tag || \"href\" !== key)) {\n domElement.removeAttribute(key);\n break;\n }\n if (\n null == value ||\n \"function\" === typeof value ||\n \"symbol\" === typeof value ||\n \"boolean\" === typeof value\n ) {\n domElement.removeAttribute(key);\n break;\n }\n value = sanitizeURL(\"\" + value);\n domElement.setAttribute(key, value);\n break;\n case \"action\":\n case \"formAction\":\n if (\"function\" === typeof value) {\n domElement.setAttribute(\n key,\n \"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')\"\n );\n break;\n } else\n \"function\" === typeof prevValue &&\n (\"formAction\" === key\n ? (\"input\" !== tag &&\n setProp(domElement, tag, \"name\", props.name, props, null),\n setProp(\n domElement,\n tag,\n \"formEncType\",\n props.formEncType,\n props,\n null\n ),\n setProp(\n domElement,\n tag,\n \"formMethod\",\n props.formMethod,\n props,\n null\n ),\n setProp(\n domElement,\n tag,\n \"formTarget\",\n props.formTarget,\n props,\n null\n ))\n : (setProp(domElement, tag, \"encType\", props.encType, props, null),\n setProp(domElement, tag, \"method\", props.method, props, null),\n setProp(domElement, tag, \"target\", props.target, props, null)));\n if (\n null == value ||\n \"symbol\" === typeof value ||\n \"boolean\" === typeof value\n ) {\n domElement.removeAttribute(key);\n break;\n }\n value = sanitizeURL(\"\" + value);\n domElement.setAttribute(key, value);\n break;\n case \"onClick\":\n null != value && (domElement.onclick = noop$1);\n break;\n case \"onScroll\":\n null != value && listenToNonDelegatedEvent(\"scroll\", domElement);\n break;\n case \"onScrollEnd\":\n null != value && listenToNonDelegatedEvent(\"scrollend\", domElement);\n break;\n case \"dangerouslySetInnerHTML\":\n if (null != value) {\n if (\"object\" !== typeof value || !(\"__html\" in value))\n throw Error(formatProdErrorMessage(61));\n key = value.__html;\n if (null != key) {\n if (null != props.children) throw Error(formatProdErrorMessage(60));\n domElement.innerHTML = key;\n }\n }\n break;\n case \"multiple\":\n domElement.multiple =\n value && \"function\" !== typeof value && \"symbol\" !== typeof value;\n break;\n case \"muted\":\n domElement.muted =\n value && \"function\" !== typeof value && \"symbol\" !== typeof value;\n break;\n case \"suppressContentEditableWarning\":\n case \"suppressHydrationWarning\":\n case \"defaultValue\":\n case \"defaultChecked\":\n case \"innerHTML\":\n case \"ref\":\n break;\n case \"autoFocus\":\n break;\n case \"xlinkHref\":\n if (\n null == value ||\n \"function\" === typeof value ||\n \"boolean\" === typeof value ||\n \"symbol\" === typeof value\n ) {\n domElement.removeAttribute(\"xlink:href\");\n break;\n }\n key = sanitizeURL(\"\" + value);\n domElement.setAttributeNS(\n \"http://www.w3.org/1999/xlink\",\n \"xlink:href\",\n key\n );\n break;\n case \"contentEditable\":\n case \"spellCheck\":\n case \"draggable\":\n case \"value\":\n case \"autoReverse\":\n case \"externalResourcesRequired\":\n case \"focusable\":\n case \"preserveAlpha\":\n null != value && \"function\" !== typeof value && \"symbol\" !== typeof value\n ? domElement.setAttribute(key, \"\" + value)\n : domElement.removeAttribute(key);\n break;\n case \"inert\":\n case \"allowFullScreen\":\n case \"async\":\n case \"autoPlay\":\n case \"controls\":\n case \"default\":\n case \"defer\":\n case \"disabled\":\n case \"disablePictureInPicture\":\n case \"disableRemotePlayback\":\n case \"formNoValidate\":\n case \"hidden\":\n case \"loop\":\n case \"noModule\":\n case \"noValidate\":\n case \"open\":\n case \"playsInline\":\n case \"readOnly\":\n case \"required\":\n case \"reversed\":\n case \"scoped\":\n case \"seamless\":\n case \"itemScope\":\n value && \"function\" !== typeof value && \"symbol\" !== typeof value\n ? domElement.setAttribute(key, \"\")\n : domElement.removeAttribute(key);\n break;\n case \"capture\":\n case \"download\":\n !0 === value\n ? domElement.setAttribute(key, \"\")\n : !1 !== value &&\n null != value &&\n \"function\" !== typeof value &&\n \"symbol\" !== typeof value\n ? domElement.setAttribute(key, value)\n : domElement.removeAttribute(key);\n break;\n case \"cols\":\n case \"rows\":\n case \"size\":\n case \"span\":\n null != value &&\n \"function\" !== typeof value &&\n \"symbol\" !== typeof value &&\n !isNaN(value) &&\n 1 <= value\n ? domElement.setAttribute(key, value)\n : domElement.removeAttribute(key);\n break;\n case \"rowSpan\":\n case \"start\":\n null == value ||\n \"function\" === typeof value ||\n \"symbol\" === typeof value ||\n isNaN(value)\n ? domElement.removeAttribute(key)\n : domElement.setAttribute(key, value);\n break;\n case \"popover\":\n listenToNonDelegatedEvent(\"beforetoggle\", domElement);\n listenToNonDelegatedEvent(\"toggle\", domElement);\n setValueForAttribute(domElement, \"popover\", value);\n break;\n case \"xlinkActuate\":\n setValueForNamespacedAttribute(\n domElement,\n \"http://www.w3.org/1999/xlink\",\n \"xlink:actuate\",\n value\n );\n break;\n case \"xlinkArcrole\":\n setValueForNamespacedAttribute(\n domElement,\n \"http://www.w3.org/1999/xlink\",\n \"xlink:arcrole\",\n value\n );\n break;\n case \"xlinkRole\":\n setValueForNamespacedAttribute(\n domElement,\n \"http://www.w3.org/1999/xlink\",\n \"xlink:role\",\n value\n );\n break;\n case \"xlinkShow\":\n setValueForNamespacedAttribute(\n domElement,\n \"http://www.w3.org/1999/xlink\",\n \"xlink:show\",\n value\n );\n break;\n case \"xlinkTitle\":\n setValueForNamespacedAttribute(\n domElement,\n \"http://www.w3.org/1999/xlink\",\n \"xlink:title\",\n value\n );\n break;\n case \"xlinkType\":\n setValueForNamespacedAttribute(\n domElement,\n \"http://www.w3.org/1999/xlink\",\n \"xlink:type\",\n value\n );\n break;\n case \"xmlBase\":\n setValueForNamespacedAttribute(\n domElement,\n \"http://www.w3.org/XML/1998/namespace\",\n \"xml:base\",\n value\n );\n break;\n case \"xmlLang\":\n setValueForNamespacedAttribute(\n domElement,\n \"http://www.w3.org/XML/1998/namespace\",\n \"xml:lang\",\n value\n );\n break;\n case \"xmlSpace\":\n setValueForNamespacedAttribute(\n domElement,\n \"http://www.w3.org/XML/1998/namespace\",\n \"xml:space\",\n value\n );\n break;\n case \"is\":\n setValueForAttribute(domElement, \"is\", value);\n break;\n case \"innerText\":\n case \"textContent\":\n break;\n default:\n if (\n !(2 < key.length) ||\n (\"o\" !== key[0] && \"O\" !== key[0]) ||\n (\"n\" !== key[1] && \"N\" !== key[1])\n )\n (key = aliases.get(key) || key),\n setValueForAttribute(domElement, key, value);\n }\n}\nfunction setPropOnCustomElement(domElement, tag, key, value, props, prevValue) {\n switch (key) {\n case \"style\":\n setValueForStyles(domElement, value, prevValue);\n break;\n case \"dangerouslySetInnerHTML\":\n if (null != value) {\n if (\"object\" !== typeof value || !(\"__html\" in value))\n throw Error(formatProdErrorMessage(61));\n key = value.__html;\n if (null != key) {\n if (null != props.children) throw Error(formatProdErrorMessage(60));\n domElement.innerHTML = key;\n }\n }\n break;\n case \"children\":\n \"string\" === typeof value\n ? setTextContent(domElement, value)\n : (\"number\" === typeof value || \"bigint\" === typeof value) &&\n setTextContent(domElement, \"\" + value);\n break;\n case \"onScroll\":\n null != value && listenToNonDelegatedEvent(\"scroll\", domElement);\n break;\n case \"onScrollEnd\":\n null != value && listenToNonDelegatedEvent(\"scrollend\", domElement);\n break;\n case \"onClick\":\n null != value && (domElement.onclick = noop$1);\n break;\n case \"suppressContentEditableWarning\":\n case \"suppressHydrationWarning\":\n case \"innerHTML\":\n case \"ref\":\n break;\n case \"innerText\":\n case \"textContent\":\n break;\n default:\n if (!registrationNameDependencies.hasOwnProperty(key))\n a: {\n if (\n \"o\" === key[0] &&\n \"n\" === key[1] &&\n ((props = key.endsWith(\"Capture\")),\n (tag = key.slice(2, props ? key.length - 7 : void 0)),\n (prevValue = domElement[internalPropsKey] || null),\n (prevValue = null != prevValue ? prevValue[key] : null),\n \"function\" === typeof prevValue &&\n domElement.removeEventListener(tag, prevValue, props),\n \"function\" === typeof value)\n ) {\n \"function\" !== typeof prevValue &&\n null !== prevValue &&\n (key in domElement\n ? (domElement[key] = null)\n : domElement.hasAttribute(key) &&\n domElement.removeAttribute(key));\n domElement.addEventListener(tag, value, props);\n break a;\n }\n key in domElement\n ? (domElement[key] = value)\n : !0 === value\n ? domElement.setAttribute(key, \"\")\n : setValueForAttribute(domElement, key, value);\n }\n }\n}\nfunction setInitialProperties(domElement, tag, props) {\n switch (tag) {\n case \"div\":\n case \"span\":\n case \"svg\":\n case \"path\":\n case \"a\":\n case \"g\":\n case \"p\":\n case \"li\":\n break;\n case \"img\":\n listenToNonDelegatedEvent(\"error\", domElement);\n listenToNonDelegatedEvent(\"load\", domElement);\n var hasSrc = !1,\n hasSrcSet = !1,\n propKey;\n for (propKey in props)\n if (props.hasOwnProperty(propKey)) {\n var propValue = props[propKey];\n if (null != propValue)\n switch (propKey) {\n case \"src\":\n hasSrc = !0;\n break;\n case \"srcSet\":\n hasSrcSet = !0;\n break;\n case \"children\":\n case \"dangerouslySetInnerHTML\":\n throw Error(formatProdErrorMessage(137, tag));\n default:\n setProp(domElement, tag, propKey, propValue, props, null);\n }\n }\n hasSrcSet &&\n setProp(domElement, tag, \"srcSet\", props.srcSet, props, null);\n hasSrc && setProp(domElement, tag, \"src\", props.src, props, null);\n return;\n case \"input\":\n listenToNonDelegatedEvent(\"invalid\", domElement);\n var defaultValue = (propKey = propValue = hasSrcSet = null),\n checked = null,\n defaultChecked = null;\n for (hasSrc in props)\n if (props.hasOwnProperty(hasSrc)) {\n var propValue$184 = props[hasSrc];\n if (null != propValue$184)\n switch (hasSrc) {\n case \"name\":\n hasSrcSet = propValue$184;\n break;\n case \"type\":\n propValue = propValue$184;\n break;\n case \"checked\":\n checked = propValue$184;\n break;\n case \"defaultChecked\":\n defaultChecked = propValue$184;\n break;\n case \"value\":\n propKey = propValue$184;\n break;\n case \"defaultValue\":\n defaultValue = propValue$184;\n break;\n case \"children\":\n case \"dangerouslySetInnerHTML\":\n if (null != propValue$184)\n throw Error(formatProdErrorMessage(137, tag));\n break;\n default:\n setProp(domElement, tag, hasSrc, propValue$184, props, null);\n }\n }\n initInput(\n domElement,\n propKey,\n defaultValue,\n checked,\n defaultChecked,\n propValue,\n hasSrcSet,\n !1\n );\n return;\n case \"select\":\n listenToNonDelegatedEvent(\"invalid\", domElement);\n hasSrc = propValue = propKey = null;\n for (hasSrcSet in props)\n if (\n props.hasOwnProperty(hasSrcSet) &&\n ((defaultValue = props[hasSrcSet]), null != defaultValue)\n )\n switch (hasSrcSet) {\n case \"value\":\n propKey = defaultValue;\n break;\n case \"defaultValue\":\n propValue = defaultValue;\n break;\n case \"multiple\":\n hasSrc = defaultValue;\n default:\n setProp(domElement, tag, hasSrcSet, defaultValue, props, null);\n }\n tag = propKey;\n props = propValue;\n domElement.multiple = !!hasSrc;\n null != tag\n ? updateOptions(domElement, !!hasSrc, tag, !1)\n : null != props && updateOptions(domElement, !!hasSrc, props, !0);\n return;\n case \"textarea\":\n listenToNonDelegatedEvent(\"invalid\", domElement);\n propKey = hasSrcSet = hasSrc = null;\n for (propValue in props)\n if (\n props.hasOwnProperty(propValue) &&\n ((defaultValue = props[propValue]), null != defaultValue)\n )\n switch (propValue) {\n case \"value\":\n hasSrc = defaultValue;\n break;\n case \"defaultValue\":\n hasSrcSet = defaultValue;\n break;\n case \"children\":\n propKey = defaultValue;\n break;\n case \"dangerouslySetInnerHTML\":\n if (null != defaultValue) throw Error(formatProdErrorMessage(91));\n break;\n default:\n setProp(domElement, tag, propValue, defaultValue, props, null);\n }\n initTextarea(domElement, hasSrc, hasSrcSet, propKey);\n return;\n case \"option\":\n for (checked in props)\n if (\n props.hasOwnProperty(checked) &&\n ((hasSrc = props[checked]), null != hasSrc)\n )\n switch (checked) {\n case \"selected\":\n domElement.selected =\n hasSrc &&\n \"function\" !== typeof hasSrc &&\n \"symbol\" !== typeof hasSrc;\n break;\n default:\n setProp(domElement, tag, checked, hasSrc, props, null);\n }\n return;\n case \"dialog\":\n listenToNonDelegatedEvent(\"beforetoggle\", domElement);\n listenToNonDelegatedEvent(\"toggle\", domElement);\n listenToNonDelegatedEvent(\"cancel\", domElement);\n listenToNonDelegatedEvent(\"close\", domElement);\n break;\n case \"iframe\":\n case \"object\":\n listenToNonDelegatedEvent(\"load\", domElement);\n break;\n case \"video\":\n case \"audio\":\n for (hasSrc = 0; hasSrc < mediaEventTypes.length; hasSrc++)\n listenToNonDelegatedEvent(mediaEventTypes[hasSrc], domElement);\n break;\n case \"image\":\n listenToNonDelegatedEvent(\"error\", domElement);\n listenToNonDelegatedEvent(\"load\", domElement);\n break;\n case \"details\":\n listenToNonDelegatedEvent(\"toggle\", domElement);\n break;\n case \"embed\":\n case \"source\":\n case \"link\":\n listenToNonDelegatedEvent(\"error\", domElement),\n listenToNonDelegatedEvent(\"load\", domElement);\n case \"area\":\n case \"base\":\n case \"br\":\n case \"col\":\n case \"hr\":\n case \"keygen\":\n case \"meta\":\n case \"param\":\n case \"track\":\n case \"wbr\":\n case \"menuitem\":\n for (defaultChecked in props)\n if (\n props.hasOwnProperty(defaultChecked) &&\n ((hasSrc = props[defaultChecked]), null != hasSrc)\n )\n switch (defaultChecked) {\n case \"children\":\n case \"dangerouslySetInnerHTML\":\n throw Error(formatProdErrorMessage(137, tag));\n default:\n setProp(domElement, tag, defaultChecked, hasSrc, props, null);\n }\n return;\n default:\n if (isCustomElement(tag)) {\n for (propValue$184 in props)\n props.hasOwnProperty(propValue$184) &&\n ((hasSrc = props[propValue$184]),\n void 0 !== hasSrc &&\n setPropOnCustomElement(\n domElement,\n tag,\n propValue$184,\n hasSrc,\n props,\n void 0\n ));\n return;\n }\n }\n for (defaultValue in props)\n props.hasOwnProperty(defaultValue) &&\n ((hasSrc = props[defaultValue]),\n null != hasSrc &&\n setProp(domElement, tag, defaultValue, hasSrc, props, null));\n}\nfunction updateProperties(domElement, tag, lastProps, nextProps) {\n switch (tag) {\n case \"div\":\n case \"span\":\n case \"svg\":\n case \"path\":\n case \"a\":\n case \"g\":\n case \"p\":\n case \"li\":\n break;\n case \"input\":\n var name = null,\n type = null,\n value = null,\n defaultValue = null,\n lastDefaultValue = null,\n checked = null,\n defaultChecked = null;\n for (propKey in lastProps) {\n var lastProp = lastProps[propKey];\n if (lastProps.hasOwnProperty(propKey) && null != lastProp)\n switch (propKey) {\n case \"checked\":\n break;\n case \"value\":\n break;\n case \"defaultValue\":\n lastDefaultValue = lastProp;\n default:\n nextProps.hasOwnProperty(propKey) ||\n setProp(domElement, tag, propKey, null, nextProps, lastProp);\n }\n }\n for (var propKey$201 in nextProps) {\n var propKey = nextProps[propKey$201];\n lastProp = lastProps[propKey$201];\n if (\n nextProps.hasOwnProperty(propKey$201) &&\n (null != propKey || null != lastProp)\n )\n switch (propKey$201) {\n case \"type\":\n type = propKey;\n break;\n case \"name\":\n name = propKey;\n break;\n case \"checked\":\n checked = propKey;\n break;\n case \"defaultChecked\":\n defaultChecked = propKey;\n break;\n case \"value\":\n value = propKey;\n break;\n case \"defaultValue\":\n defaultValue = propKey;\n break;\n case \"children\":\n case \"dangerouslySetInnerHTML\":\n if (null != propKey)\n throw Error(formatProdErrorMessage(137, tag));\n break;\n default:\n propKey !== lastProp &&\n setProp(\n domElement,\n tag,\n propKey$201,\n propKey,\n nextProps,\n lastProp\n );\n }\n }\n updateInput(\n domElement,\n value,\n defaultValue,\n lastDefaultValue,\n checked,\n defaultChecked,\n type,\n name\n );\n return;\n case \"select\":\n propKey = value = defaultValue = propKey$201 = null;\n for (type in lastProps)\n if (\n ((lastDefaultValue = lastProps[type]),\n lastProps.hasOwnProperty(type) && null != lastDefaultValue)\n )\n switch (type) {\n case \"value\":\n break;\n case \"multiple\":\n propKey = lastDefaultValue;\n default:\n nextProps.hasOwnProperty(type) ||\n setProp(\n domElement,\n tag,\n type,\n null,\n nextProps,\n lastDefaultValue\n );\n }\n for (name in nextProps)\n if (\n ((type = nextProps[name]),\n (lastDefaultValue = lastProps[name]),\n nextProps.hasOwnProperty(name) &&\n (null != type || null != lastDefaultValue))\n )\n switch (name) {\n case \"value\":\n propKey$201 = type;\n break;\n case \"defaultValue\":\n defaultValue = type;\n break;\n case \"multiple\":\n value = type;\n default:\n type !== lastDefaultValue &&\n setProp(\n domElement,\n tag,\n name,\n type,\n nextProps,\n lastDefaultValue\n );\n }\n tag = defaultValue;\n lastProps = value;\n nextProps = propKey;\n null != propKey$201\n ? updateOptions(domElement, !!lastProps, propKey$201, !1)\n : !!nextProps !== !!lastProps &&\n (null != tag\n ? updateOptions(domElement, !!lastProps, tag, !0)\n : updateOptions(domElement, !!lastProps, lastProps ? [] : \"\", !1));\n return;\n case \"textarea\":\n propKey = propKey$201 = null;\n for (defaultValue in lastProps)\n if (\n ((name = lastProps[defaultValue]),\n lastProps.hasOwnProperty(defaultValue) &&\n null != name &&\n !nextProps.hasOwnProperty(defaultValue))\n )\n switch (defaultValue) {\n case \"value\":\n break;\n case \"children\":\n break;\n default:\n setProp(domElement, tag, defaultValue, null, nextProps, name);\n }\n for (value in nextProps)\n if (\n ((name = nextProps[value]),\n (type = lastProps[value]),\n nextProps.hasOwnProperty(value) && (null != name || null != type))\n )\n switch (value) {\n case \"value\":\n propKey$201 = name;\n break;\n case \"defaultValue\":\n propKey = name;\n break;\n case \"children\":\n break;\n case \"dangerouslySetInnerHTML\":\n if (null != name) throw Error(formatProdErrorMessage(91));\n break;\n default:\n name !== type &&\n setProp(domElement, tag, value, name, nextProps, type);\n }\n updateTextarea(domElement, propKey$201, propKey);\n return;\n case \"option\":\n for (var propKey$217 in lastProps)\n if (\n ((propKey$201 = lastProps[propKey$217]),\n lastProps.hasOwnProperty(propKey$217) &&\n null != propKey$201 &&\n !nextProps.hasOwnProperty(propKey$217))\n )\n switch (propKey$217) {\n case \"selected\":\n domElement.selected = !1;\n break;\n default:\n setProp(\n domElement,\n tag,\n propKey$217,\n null,\n nextProps,\n propKey$201\n );\n }\n for (lastDefaultValue in nextProps)\n if (\n ((propKey$201 = nextProps[lastDefaultValue]),\n (propKey = lastProps[lastDefaultValue]),\n nextProps.hasOwnProperty(lastDefaultValue) &&\n propKey$201 !== propKey &&\n (null != propKey$201 || null != propKey))\n )\n switch (lastDefaultValue) {\n case \"selected\":\n domElement.selected =\n propKey$201 &&\n \"function\" !== typeof propKey$201 &&\n \"symbol\" !== typeof propKey$201;\n break;\n default:\n setProp(\n domElement,\n tag,\n lastDefaultValue,\n propKey$201,\n nextProps,\n propKey\n );\n }\n return;\n case \"img\":\n case \"link\":\n case \"area\":\n case \"base\":\n case \"br\":\n case \"col\":\n case \"embed\":\n case \"hr\":\n case \"keygen\":\n case \"meta\":\n case \"param\":\n case \"source\":\n case \"track\":\n case \"wbr\":\n case \"menuitem\":\n for (var propKey$222 in lastProps)\n (propKey$201 = lastProps[propKey$222]),\n lastProps.hasOwnProperty(propKey$222) &&\n null != propKey$201 &&\n !nextProps.hasOwnProperty(propKey$222) &&\n setProp(domElement, tag, propKey$222, null, nextProps, propKey$201);\n for (checked in nextProps)\n if (\n ((propKey$201 = nextProps[checked]),\n (propKey = lastProps[checked]),\n nextProps.hasOwnProperty(checked) &&\n propKey$201 !== propKey &&\n (null != propKey$201 || null != propKey))\n )\n switch (checked) {\n case \"children\":\n case \"dangerouslySetInnerHTML\":\n if (null != propKey$201)\n throw Error(formatProdErrorMessage(137, tag));\n break;\n default:\n setProp(\n domElement,\n tag,\n checked,\n propKey$201,\n nextProps,\n propKey\n );\n }\n return;\n default:\n if (isCustomElement(tag)) {\n for (var propKey$227 in lastProps)\n (propKey$201 = lastProps[propKey$227]),\n lastProps.hasOwnProperty(propKey$227) &&\n void 0 !== propKey$201 &&\n !nextProps.hasOwnProperty(propKey$227) &&\n setPropOnCustomElement(\n domElement,\n tag,\n propKey$227,\n void 0,\n nextProps,\n propKey$201\n );\n for (defaultChecked in nextProps)\n (propKey$201 = nextProps[defaultChecked]),\n (propKey = lastProps[defaultChecked]),\n !nextProps.hasOwnProperty(defaultChecked) ||\n propKey$201 === propKey ||\n (void 0 === propKey$201 && void 0 === propKey) ||\n setPropOnCustomElement(\n domElement,\n tag,\n defaultChecked,\n propKey$201,\n nextProps,\n propKey\n );\n return;\n }\n }\n for (var propKey$232 in lastProps)\n (propKey$201 = lastProps[propKey$232]),\n lastProps.hasOwnProperty(propKey$232) &&\n null != propKey$201 &&\n !nextProps.hasOwnProperty(propKey$232) &&\n setProp(domElement, tag, propKey$232, null, nextProps, propKey$201);\n for (lastProp in nextProps)\n (propKey$201 = nextProps[lastProp]),\n (propKey = lastProps[lastProp]),\n !nextProps.hasOwnProperty(lastProp) ||\n propKey$201 === propKey ||\n (null == propKey$201 && null == propKey) ||\n setProp(domElement, tag, lastProp, propKey$201, nextProps, propKey);\n}\nfunction isLikelyStaticResource(initiatorType) {\n switch (initiatorType) {\n case \"css\":\n case \"script\":\n case \"font\":\n case \"img\":\n case \"image\":\n case \"input\":\n case \"link\":\n return !0;\n default:\n return !1;\n }\n}\nfunction estimateBandwidth() {\n if (\"function\" === typeof performance.getEntriesByType) {\n for (\n var count = 0,\n bits = 0,\n resourceEntries = performance.getEntriesByType(\"resource\"),\n i = 0;\n i < resourceEntries.length;\n i++\n ) {\n var entry = resourceEntries[i],\n transferSize = entry.transferSize,\n initiatorType = entry.initiatorType,\n duration = entry.duration;\n if (transferSize && duration && isLikelyStaticResource(initiatorType)) {\n initiatorType = 0;\n duration = entry.responseEnd;\n for (i += 1; i < resourceEntries.length; i++) {\n var overlapEntry = resourceEntries[i],\n overlapStartTime = overlapEntry.startTime;\n if (overlapStartTime > duration) break;\n var overlapTransferSize = overlapEntry.transferSize,\n overlapInitiatorType = overlapEntry.initiatorType;\n overlapTransferSize &&\n isLikelyStaticResource(overlapInitiatorType) &&\n ((overlapEntry = overlapEntry.responseEnd),\n (initiatorType +=\n overlapTransferSize *\n (overlapEntry < duration\n ? 1\n : (duration - overlapStartTime) /\n (overlapEntry - overlapStartTime))));\n }\n --i;\n bits += (8 * (transferSize + initiatorType)) / (entry.duration / 1e3);\n count++;\n if (10 < count) break;\n }\n }\n if (0 < count) return bits / count / 1e6;\n }\n return navigator.connection &&\n ((count = navigator.connection.downlink), \"number\" === typeof count)\n ? count\n : 5;\n}\nvar eventsEnabled = null,\n selectionInformation = null;\nfunction getOwnerDocumentFromRootContainer(rootContainerElement) {\n return 9 === rootContainerElement.nodeType\n ? rootContainerElement\n : rootContainerElement.ownerDocument;\n}\nfunction getOwnHostContext(namespaceURI) {\n switch (namespaceURI) {\n case \"http://www.w3.org/2000/svg\":\n return 1;\n case \"http://www.w3.org/1998/Math/MathML\":\n return 2;\n default:\n return 0;\n }\n}\nfunction getChildHostContextProd(parentNamespace, type) {\n if (0 === parentNamespace)\n switch (type) {\n case \"svg\":\n return 1;\n case \"math\":\n return 2;\n default:\n return 0;\n }\n return 1 === parentNamespace && \"foreignObject\" === type\n ? 0\n : parentNamespace;\n}\nfunction shouldSetTextContent(type, props) {\n return (\n \"textarea\" === type ||\n \"noscript\" === type ||\n \"string\" === typeof props.children ||\n \"number\" === typeof props.children ||\n \"bigint\" === typeof props.children ||\n (\"object\" === typeof props.dangerouslySetInnerHTML &&\n null !== props.dangerouslySetInnerHTML &&\n null != props.dangerouslySetInnerHTML.__html)\n );\n}\nvar currentPopstateTransitionEvent = null;\nfunction shouldAttemptEagerTransition() {\n var event = window.event;\n if (event && \"popstate\" === event.type) {\n if (event === currentPopstateTransitionEvent) return !1;\n currentPopstateTransitionEvent = event;\n return !0;\n }\n currentPopstateTransitionEvent = null;\n return !1;\n}\nvar scheduleTimeout = \"function\" === typeof setTimeout ? setTimeout : void 0,\n cancelTimeout = \"function\" === typeof clearTimeout ? clearTimeout : void 0,\n localPromise = \"function\" === typeof Promise ? Promise : void 0,\n scheduleMicrotask =\n \"function\" === typeof queueMicrotask\n ? queueMicrotask\n : \"undefined\" !== typeof localPromise\n ? function (callback) {\n return localPromise\n .resolve(null)\n .then(callback)\n .catch(handleErrorInNextTick);\n }\n : scheduleTimeout;\nfunction handleErrorInNextTick(error) {\n setTimeout(function () {\n throw error;\n });\n}\nfunction isSingletonScope(type) {\n return \"head\" === type;\n}\nfunction clearHydrationBoundary(parentInstance, hydrationInstance) {\n var node = hydrationInstance,\n depth = 0;\n do {\n var nextNode = node.nextSibling;\n parentInstance.removeChild(node);\n if (nextNode && 8 === nextNode.nodeType)\n if (((node = nextNode.data), \"/$\" === node || \"/&\" === node)) {\n if (0 === depth) {\n parentInstance.removeChild(nextNode);\n retryIfBlockedOn(hydrationInstance);\n return;\n }\n depth--;\n } else if (\n \"$\" === node ||\n \"$?\" === node ||\n \"$~\" === node ||\n \"$!\" === node ||\n \"&\" === node\n )\n depth++;\n else if (\"html\" === node)\n releaseSingletonInstance(parentInstance.ownerDocument.documentElement);\n else if (\"head\" === node) {\n node = parentInstance.ownerDocument.head;\n releaseSingletonInstance(node);\n for (var node$jscomp$0 = node.firstChild; node$jscomp$0; ) {\n var nextNode$jscomp$0 = node$jscomp$0.nextSibling,\n nodeName = node$jscomp$0.nodeName;\n node$jscomp$0[internalHoistableMarker] ||\n \"SCRIPT\" === nodeName ||\n \"STYLE\" === nodeName ||\n (\"LINK\" === nodeName &&\n \"stylesheet\" === node$jscomp$0.rel.toLowerCase()) ||\n node.removeChild(node$jscomp$0);\n node$jscomp$0 = nextNode$jscomp$0;\n }\n } else\n \"body\" === node &&\n releaseSingletonInstance(parentInstance.ownerDocument.body);\n node = nextNode;\n } while (node);\n retryIfBlockedOn(hydrationInstance);\n}\nfunction hideOrUnhideDehydratedBoundary(suspenseInstance, isHidden) {\n var node = suspenseInstance;\n suspenseInstance = 0;\n do {\n var nextNode = node.nextSibling;\n 1 === node.nodeType\n ? isHidden\n ? ((node._stashedDisplay = node.style.display),\n (node.style.display = \"none\"))\n : ((node.style.display = node._stashedDisplay || \"\"),\n \"\" === node.getAttribute(\"style\") && node.removeAttribute(\"style\"))\n : 3 === node.nodeType &&\n (isHidden\n ? ((node._stashedText = node.nodeValue), (node.nodeValue = \"\"))\n : (node.nodeValue = node._stashedText || \"\"));\n if (nextNode && 8 === nextNode.nodeType)\n if (((node = nextNode.data), \"/$\" === node))\n if (0 === suspenseInstance) break;\n else suspenseInstance--;\n else\n (\"$\" !== node && \"$?\" !== node && \"$~\" !== node && \"$!\" !== node) ||\n suspenseInstance++;\n node = nextNode;\n } while (node);\n}\nfunction clearContainerSparingly(container) {\n var nextNode = container.firstChild;\n nextNode && 10 === nextNode.nodeType && (nextNode = nextNode.nextSibling);\n for (; nextNode; ) {\n var node = nextNode;\n nextNode = nextNode.nextSibling;\n switch (node.nodeName) {\n case \"HTML\":\n case \"HEAD\":\n case \"BODY\":\n clearContainerSparingly(node);\n detachDeletedInstance(node);\n continue;\n case \"SCRIPT\":\n case \"STYLE\":\n continue;\n case \"LINK\":\n if (\"stylesheet\" === node.rel.toLowerCase()) continue;\n }\n container.removeChild(node);\n }\n}\nfunction canHydrateInstance(instance, type, props, inRootOrSingleton) {\n for (; 1 === instance.nodeType; ) {\n var anyProps = props;\n if (instance.nodeName.toLowerCase() !== type.toLowerCase()) {\n if (\n !inRootOrSingleton &&\n (\"INPUT\" !== instance.nodeName || \"hidden\" !== instance.type)\n )\n break;\n } else if (!inRootOrSingleton)\n if (\"input\" === type && \"hidden\" === instance.type) {\n var name = null == anyProps.name ? null : \"\" + anyProps.name;\n if (\n \"hidden\" === anyProps.type &&\n instance.getAttribute(\"name\") === name\n )\n return instance;\n } else return instance;\n else if (!instance[internalHoistableMarker])\n switch (type) {\n case \"meta\":\n if (!instance.hasAttribute(\"itemprop\")) break;\n return instance;\n case \"link\":\n name = instance.getAttribute(\"rel\");\n if (\"stylesheet\" === name && instance.hasAttribute(\"data-precedence\"))\n break;\n else if (\n name !== anyProps.rel ||\n instance.getAttribute(\"href\") !==\n (null == anyProps.href || \"\" === anyProps.href\n ? null\n : anyProps.href) ||\n instance.getAttribute(\"crossorigin\") !==\n (null == anyProps.crossOrigin ? null : anyProps.crossOrigin) ||\n instance.getAttribute(\"title\") !==\n (null == anyProps.title ? null : anyProps.title)\n )\n break;\n return instance;\n case \"style\":\n if (instance.hasAttribute(\"data-precedence\")) break;\n return instance;\n case \"script\":\n name = instance.getAttribute(\"src\");\n if (\n (name !== (null == anyProps.src ? null : anyProps.src) ||\n instance.getAttribute(\"type\") !==\n (null == anyProps.type ? null : anyProps.type) ||\n instance.getAttribute(\"crossorigin\") !==\n (null == anyProps.crossOrigin ? null : anyProps.crossOrigin)) &&\n name &&\n instance.hasAttribute(\"async\") &&\n !instance.hasAttribute(\"itemprop\")\n )\n break;\n return instance;\n default:\n return instance;\n }\n instance = getNextHydratable(instance.nextSibling);\n if (null === instance) break;\n }\n return null;\n}\nfunction canHydrateTextInstance(instance, text, inRootOrSingleton) {\n if (\"\" === text) return null;\n for (; 3 !== instance.nodeType; ) {\n if (\n (1 !== instance.nodeType ||\n \"INPUT\" !== instance.nodeName ||\n \"hidden\" !== instance.type) &&\n !inRootOrSingleton\n )\n return null;\n instance = getNextHydratable(instance.nextSibling);\n if (null === instance) return null;\n }\n return instance;\n}\nfunction canHydrateHydrationBoundary(instance, inRootOrSingleton) {\n for (; 8 !== instance.nodeType; ) {\n if (\n (1 !== instance.nodeType ||\n \"INPUT\" !== instance.nodeName ||\n \"hidden\" !== instance.type) &&\n !inRootOrSingleton\n )\n return null;\n instance = getNextHydratable(instance.nextSibling);\n if (null === instance) return null;\n }\n return instance;\n}\nfunction isSuspenseInstancePending(instance) {\n return \"$?\" === instance.data || \"$~\" === instance.data;\n}\nfunction isSuspenseInstanceFallback(instance) {\n return (\n \"$!\" === instance.data ||\n (\"$?\" === instance.data && \"loading\" !== instance.ownerDocument.readyState)\n );\n}\nfunction registerSuspenseInstanceRetry(instance, callback) {\n var ownerDocument = instance.ownerDocument;\n if (\"$~\" === instance.data) instance._reactRetry = callback;\n else if (\"$?\" !== instance.data || \"loading\" !== ownerDocument.readyState)\n callback();\n else {\n var listener = function () {\n callback();\n ownerDocument.removeEventListener(\"DOMContentLoaded\", listener);\n };\n ownerDocument.addEventListener(\"DOMContentLoaded\", listener);\n instance._reactRetry = listener;\n }\n}\nfunction getNextHydratable(node) {\n for (; null != node; node = node.nextSibling) {\n var nodeType = node.nodeType;\n if (1 === nodeType || 3 === nodeType) break;\n if (8 === nodeType) {\n nodeType = node.data;\n if (\n \"$\" === nodeType ||\n \"$!\" === nodeType ||\n \"$?\" === nodeType ||\n \"$~\" === nodeType ||\n \"&\" === nodeType ||\n \"F!\" === nodeType ||\n \"F\" === nodeType\n )\n break;\n if (\"/$\" === nodeType || \"/&\" === nodeType) return null;\n }\n }\n return node;\n}\nvar previousHydratableOnEnteringScopedSingleton = null;\nfunction getNextHydratableInstanceAfterHydrationBoundary(hydrationInstance) {\n hydrationInstance = hydrationInstance.nextSibling;\n for (var depth = 0; hydrationInstance; ) {\n if (8 === hydrationInstance.nodeType) {\n var data = hydrationInstance.data;\n if (\"/$\" === data || \"/&\" === data) {\n if (0 === depth)\n return getNextHydratable(hydrationInstance.nextSibling);\n depth--;\n } else\n (\"$\" !== data &&\n \"$!\" !== data &&\n \"$?\" !== data &&\n \"$~\" !== data &&\n \"&\" !== data) ||\n depth++;\n }\n hydrationInstance = hydrationInstance.nextSibling;\n }\n return null;\n}\nfunction getParentHydrationBoundary(targetInstance) {\n targetInstance = targetInstance.previousSibling;\n for (var depth = 0; targetInstance; ) {\n if (8 === targetInstance.nodeType) {\n var data = targetInstance.data;\n if (\n \"$\" === data ||\n \"$!\" === data ||\n \"$?\" === data ||\n \"$~\" === data ||\n \"&\" === data\n ) {\n if (0 === depth) return targetInstance;\n depth--;\n } else (\"/$\" !== data && \"/&\" !== data) || depth++;\n }\n targetInstance = targetInstance.previousSibling;\n }\n return null;\n}\nfunction resolveSingletonInstance(type, props, rootContainerInstance) {\n props = getOwnerDocumentFromRootContainer(rootContainerInstance);\n switch (type) {\n case \"html\":\n type = props.documentElement;\n if (!type) throw Error(formatProdErrorMessage(452));\n return type;\n case \"head\":\n type = props.head;\n if (!type) throw Error(formatProdErrorMessage(453));\n return type;\n case \"body\":\n type = props.body;\n if (!type) throw Error(formatProdErrorMessage(454));\n return type;\n default:\n throw Error(formatProdErrorMessage(451));\n }\n}\nfunction releaseSingletonInstance(instance) {\n for (var attributes = instance.attributes; attributes.length; )\n instance.removeAttributeNode(attributes[0]);\n detachDeletedInstance(instance);\n}\nvar preloadPropsMap = new Map(),\n preconnectsSet = new Set();\nfunction getHoistableRoot(container) {\n return \"function\" === typeof container.getRootNode\n ? container.getRootNode()\n : 9 === container.nodeType\n ? container\n : container.ownerDocument;\n}\nvar previousDispatcher = ReactDOMSharedInternals.d;\nReactDOMSharedInternals.d = {\n f: flushSyncWork,\n r: requestFormReset,\n D: prefetchDNS,\n C: preconnect,\n L: preload,\n m: preloadModule,\n X: preinitScript,\n S: preinitStyle,\n M: preinitModuleScript\n};\nfunction flushSyncWork() {\n var previousWasRendering = previousDispatcher.f(),\n wasRendering = flushSyncWork$1();\n return previousWasRendering || wasRendering;\n}\nfunction requestFormReset(form) {\n var formInst = getInstanceFromNode(form);\n null !== formInst && 5 === formInst.tag && \"form\" === formInst.type\n ? requestFormReset$1(formInst)\n : previousDispatcher.r(form);\n}\nvar globalDocument = \"undefined\" === typeof document ? null : document;\nfunction preconnectAs(rel, href, crossOrigin) {\n var ownerDocument = globalDocument;\n if (ownerDocument && \"string\" === typeof href && href) {\n var limitedEscapedHref =\n escapeSelectorAttributeValueInsideDoubleQuotes(href);\n limitedEscapedHref =\n 'link[rel=\"' + rel + '\"][href=\"' + limitedEscapedHref + '\"]';\n \"string\" === typeof crossOrigin &&\n (limitedEscapedHref += '[crossorigin=\"' + crossOrigin + '\"]');\n preconnectsSet.has(limitedEscapedHref) ||\n (preconnectsSet.add(limitedEscapedHref),\n (rel = { rel: rel, crossOrigin: crossOrigin, href: href }),\n null === ownerDocument.querySelector(limitedEscapedHref) &&\n ((href = ownerDocument.createElement(\"link\")),\n setInitialProperties(href, \"link\", rel),\n markNodeAsHoistable(href),\n ownerDocument.head.appendChild(href)));\n }\n}\nfunction prefetchDNS(href) {\n previousDispatcher.D(href);\n preconnectAs(\"dns-prefetch\", href, null);\n}\nfunction preconnect(href, crossOrigin) {\n previousDispatcher.C(href, crossOrigin);\n preconnectAs(\"preconnect\", href, crossOrigin);\n}\nfunction preload(href, as, options) {\n previousDispatcher.L(href, as, options);\n var ownerDocument = globalDocument;\n if (ownerDocument && href && as) {\n var preloadSelector =\n 'link[rel=\"preload\"][as=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(as) +\n '\"]';\n \"image\" === as\n ? options && options.imageSrcSet\n ? ((preloadSelector +=\n '[imagesrcset=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(\n options.imageSrcSet\n ) +\n '\"]'),\n \"string\" === typeof options.imageSizes &&\n (preloadSelector +=\n '[imagesizes=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(\n options.imageSizes\n ) +\n '\"]'))\n : (preloadSelector +=\n '[href=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n '\"]')\n : (preloadSelector +=\n '[href=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n '\"]');\n var key = preloadSelector;\n switch (as) {\n case \"style\":\n key = getStyleKey(href);\n break;\n case \"script\":\n key = getScriptKey(href);\n }\n preloadPropsMap.has(key) ||\n ((href = assign(\n {\n rel: \"preload\",\n href:\n \"image\" === as && options && options.imageSrcSet ? void 0 : href,\n as: as\n },\n options\n )),\n preloadPropsMap.set(key, href),\n null !== ownerDocument.querySelector(preloadSelector) ||\n (\"style\" === as &&\n ownerDocument.querySelector(getStylesheetSelectorFromKey(key))) ||\n (\"script\" === as &&\n ownerDocument.querySelector(getScriptSelectorFromKey(key))) ||\n ((as = ownerDocument.createElement(\"link\")),\n setInitialProperties(as, \"link\", href),\n markNodeAsHoistable(as),\n ownerDocument.head.appendChild(as)));\n }\n}\nfunction preloadModule(href, options) {\n previousDispatcher.m(href, options);\n var ownerDocument = globalDocument;\n if (ownerDocument && href) {\n var as = options && \"string\" === typeof options.as ? options.as : \"script\",\n preloadSelector =\n 'link[rel=\"modulepreload\"][as=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(as) +\n '\"][href=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n '\"]',\n key = preloadSelector;\n switch (as) {\n case \"audioworklet\":\n case \"paintworklet\":\n case \"serviceworker\":\n case \"sharedworker\":\n case \"worker\":\n case \"script\":\n key = getScriptKey(href);\n }\n if (\n !preloadPropsMap.has(key) &&\n ((href = assign({ rel: \"modulepreload\", href: href }, options)),\n preloadPropsMap.set(key, href),\n null === ownerDocument.querySelector(preloadSelector))\n ) {\n switch (as) {\n case \"audioworklet\":\n case \"paintworklet\":\n case \"serviceworker\":\n case \"sharedworker\":\n case \"worker\":\n case \"script\":\n if (ownerDocument.querySelector(getScriptSelectorFromKey(key)))\n return;\n }\n as = ownerDocument.createElement(\"link\");\n setInitialProperties(as, \"link\", href);\n markNodeAsHoistable(as);\n ownerDocument.head.appendChild(as);\n }\n }\n}\nfunction preinitStyle(href, precedence, options) {\n previousDispatcher.S(href, precedence, options);\n var ownerDocument = globalDocument;\n if (ownerDocument && href) {\n var styles = getResourcesFromRoot(ownerDocument).hoistableStyles,\n key = getStyleKey(href);\n precedence = precedence || \"default\";\n var resource = styles.get(key);\n if (!resource) {\n var state = { loading: 0, preload: null };\n if (\n (resource = ownerDocument.querySelector(\n getStylesheetSelectorFromKey(key)\n ))\n )\n state.loading = 5;\n else {\n href = assign(\n { rel: \"stylesheet\", href: href, \"data-precedence\": precedence },\n options\n );\n (options = preloadPropsMap.get(key)) &&\n adoptPreloadPropsForStylesheet(href, options);\n var link = (resource = ownerDocument.createElement(\"link\"));\n markNodeAsHoistable(link);\n setInitialProperties(link, \"link\", href);\n link._p = new Promise(function (resolve, reject) {\n link.onload = resolve;\n link.onerror = reject;\n });\n link.addEventListener(\"load\", function () {\n state.loading |= 1;\n });\n link.addEventListener(\"error\", function () {\n state.loading |= 2;\n });\n state.loading |= 4;\n insertStylesheet(resource, precedence, ownerDocument);\n }\n resource = {\n type: \"stylesheet\",\n instance: resource,\n count: 1,\n state: state\n };\n styles.set(key, resource);\n }\n }\n}\nfunction preinitScript(src, options) {\n previousDispatcher.X(src, options);\n var ownerDocument = globalDocument;\n if (ownerDocument && src) {\n var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,\n key = getScriptKey(src),\n resource = scripts.get(key);\n resource ||\n ((resource = ownerDocument.querySelector(getScriptSelectorFromKey(key))),\n resource ||\n ((src = assign({ src: src, async: !0 }, options)),\n (options = preloadPropsMap.get(key)) &&\n adoptPreloadPropsForScript(src, options),\n (resource = ownerDocument.createElement(\"script\")),\n markNodeAsHoistable(resource),\n setInitialProperties(resource, \"link\", src),\n ownerDocument.head.appendChild(resource)),\n (resource = {\n type: \"script\",\n instance: resource,\n count: 1,\n state: null\n }),\n scripts.set(key, resource));\n }\n}\nfunction preinitModuleScript(src, options) {\n previousDispatcher.M(src, options);\n var ownerDocument = globalDocument;\n if (ownerDocument && src) {\n var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,\n key = getScriptKey(src),\n resource = scripts.get(key);\n resource ||\n ((resource = ownerDocument.querySelector(getScriptSelectorFromKey(key))),\n resource ||\n ((src = assign({ src: src, async: !0, type: \"module\" }, options)),\n (options = preloadPropsMap.get(key)) &&\n adoptPreloadPropsForScript(src, options),\n (resource = ownerDocument.createElement(\"script\")),\n markNodeAsHoistable(resource),\n setInitialProperties(resource, \"link\", src),\n ownerDocument.head.appendChild(resource)),\n (resource = {\n type: \"script\",\n instance: resource,\n count: 1,\n state: null\n }),\n scripts.set(key, resource));\n }\n}\nfunction getResource(type, currentProps, pendingProps, currentResource) {\n var JSCompiler_inline_result = (JSCompiler_inline_result =\n rootInstanceStackCursor.current)\n ? getHoistableRoot(JSCompiler_inline_result)\n : null;\n if (!JSCompiler_inline_result) throw Error(formatProdErrorMessage(446));\n switch (type) {\n case \"meta\":\n case \"title\":\n return null;\n case \"style\":\n return \"string\" === typeof pendingProps.precedence &&\n \"string\" === typeof pendingProps.href\n ? ((currentProps = getStyleKey(pendingProps.href)),\n (pendingProps = getResourcesFromRoot(\n JSCompiler_inline_result\n ).hoistableStyles),\n (currentResource = pendingProps.get(currentProps)),\n currentResource ||\n ((currentResource = {\n type: \"style\",\n instance: null,\n count: 0,\n state: null\n }),\n pendingProps.set(currentProps, currentResource)),\n currentResource)\n : { type: \"void\", instance: null, count: 0, state: null };\n case \"link\":\n if (\n \"stylesheet\" === pendingProps.rel &&\n \"string\" === typeof pendingProps.href &&\n \"string\" === typeof pendingProps.precedence\n ) {\n type = getStyleKey(pendingProps.href);\n var styles$243 = getResourcesFromRoot(\n JSCompiler_inline_result\n ).hoistableStyles,\n resource$244 = styles$243.get(type);\n resource$244 ||\n ((JSCompiler_inline_result =\n JSCompiler_inline_result.ownerDocument || JSCompiler_inline_result),\n (resource$244 = {\n type: \"stylesheet\",\n instance: null,\n count: 0,\n state: { loading: 0, preload: null }\n }),\n styles$243.set(type, resource$244),\n (styles$243 = JSCompiler_inline_result.querySelector(\n getStylesheetSelectorFromKey(type)\n )) &&\n !styles$243._p &&\n ((resource$244.instance = styles$243),\n (resource$244.state.loading = 5)),\n preloadPropsMap.has(type) ||\n ((pendingProps = {\n rel: \"preload\",\n as: \"style\",\n href: pendingProps.href,\n crossOrigin: pendingProps.crossOrigin,\n integrity: pendingProps.integrity,\n media: pendingProps.media,\n hrefLang: pendingProps.hrefLang,\n referrerPolicy: pendingProps.referrerPolicy\n }),\n preloadPropsMap.set(type, pendingProps),\n styles$243 ||\n preloadStylesheet(\n JSCompiler_inline_result,\n type,\n pendingProps,\n resource$244.state\n )));\n if (currentProps && null === currentResource)\n throw Error(formatProdErrorMessage(528, \"\"));\n return resource$244;\n }\n if (currentProps && null !== currentResource)\n throw Error(formatProdErrorMessage(529, \"\"));\n return null;\n case \"script\":\n return (\n (currentProps = pendingProps.async),\n (pendingProps = pendingProps.src),\n \"string\" === typeof pendingProps &&\n currentProps &&\n \"function\" !== typeof currentProps &&\n \"symbol\" !== typeof currentProps\n ? ((currentProps = getScriptKey(pendingProps)),\n (pendingProps = getResourcesFromRoot(\n JSCompiler_inline_result\n ).hoistableScripts),\n (currentResource = pendingProps.get(currentProps)),\n currentResource ||\n ((currentResource = {\n type: \"script\",\n instance: null,\n count: 0,\n state: null\n }),\n pendingProps.set(currentProps, currentResource)),\n currentResource)\n : { type: \"void\", instance: null, count: 0, state: null }\n );\n default:\n throw Error(formatProdErrorMessage(444, type));\n }\n}\nfunction getStyleKey(href) {\n return 'href=\"' + escapeSelectorAttributeValueInsideDoubleQuotes(href) + '\"';\n}\nfunction getStylesheetSelectorFromKey(key) {\n return 'link[rel=\"stylesheet\"][' + key + \"]\";\n}\nfunction stylesheetPropsFromRawProps(rawProps) {\n return assign({}, rawProps, {\n \"data-precedence\": rawProps.precedence,\n precedence: null\n });\n}\nfunction preloadStylesheet(ownerDocument, key, preloadProps, state) {\n ownerDocument.querySelector('link[rel=\"preload\"][as=\"style\"][' + key + \"]\")\n ? (state.loading = 1)\n : ((key = ownerDocument.createElement(\"link\")),\n (state.preload = key),\n key.addEventListener(\"load\", function () {\n return (state.loading |= 1);\n }),\n key.addEventListener(\"error\", function () {\n return (state.loading |= 2);\n }),\n setInitialProperties(key, \"link\", preloadProps),\n markNodeAsHoistable(key),\n ownerDocument.head.appendChild(key));\n}\nfunction getScriptKey(src) {\n return '[src=\"' + escapeSelectorAttributeValueInsideDoubleQuotes(src) + '\"]';\n}\nfunction getScriptSelectorFromKey(key) {\n return \"script[async]\" + key;\n}\nfunction acquireResource(hoistableRoot, resource, props) {\n resource.count++;\n if (null === resource.instance)\n switch (resource.type) {\n case \"style\":\n var instance = hoistableRoot.querySelector(\n 'style[data-href~=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(props.href) +\n '\"]'\n );\n if (instance)\n return (\n (resource.instance = instance),\n markNodeAsHoistable(instance),\n instance\n );\n var styleProps = assign({}, props, {\n \"data-href\": props.href,\n \"data-precedence\": props.precedence,\n href: null,\n precedence: null\n });\n instance = (hoistableRoot.ownerDocument || hoistableRoot).createElement(\n \"style\"\n );\n markNodeAsHoistable(instance);\n setInitialProperties(instance, \"style\", styleProps);\n insertStylesheet(instance, props.precedence, hoistableRoot);\n return (resource.instance = instance);\n case \"stylesheet\":\n styleProps = getStyleKey(props.href);\n var instance$249 = hoistableRoot.querySelector(\n getStylesheetSelectorFromKey(styleProps)\n );\n if (instance$249)\n return (\n (resource.state.loading |= 4),\n (resource.instance = instance$249),\n markNodeAsHoistable(instance$249),\n instance$249\n );\n instance = stylesheetPropsFromRawProps(props);\n (styleProps = preloadPropsMap.get(styleProps)) &&\n adoptPreloadPropsForStylesheet(instance, styleProps);\n instance$249 = (\n hoistableRoot.ownerDocument || hoistableRoot\n ).createElement(\"link\");\n markNodeAsHoistable(instance$249);\n var linkInstance = instance$249;\n linkInstance._p = new Promise(function (resolve, reject) {\n linkInstance.onload = resolve;\n linkInstance.onerror = reject;\n });\n setInitialProperties(instance$249, \"link\", instance);\n resource.state.loading |= 4;\n insertStylesheet(instance$249, props.precedence, hoistableRoot);\n return (resource.instance = instance$249);\n case \"script\":\n instance$249 = getScriptKey(props.src);\n if (\n (styleProps = hoistableRoot.querySelector(\n getScriptSelectorFromKey(instance$249)\n ))\n )\n return (\n (resource.instance = styleProps),\n markNodeAsHoistable(styleProps),\n styleProps\n );\n instance = props;\n if ((styleProps = preloadPropsMap.get(instance$249)))\n (instance = assign({}, props)),\n adoptPreloadPropsForScript(instance, styleProps);\n hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n styleProps = hoistableRoot.createElement(\"script\");\n markNodeAsHoistable(styleProps);\n setInitialProperties(styleProps, \"link\", instance);\n hoistableRoot.head.appendChild(styleProps);\n return (resource.instance = styleProps);\n case \"void\":\n return null;\n default:\n throw Error(formatProdErrorMessage(443, resource.type));\n }\n else\n \"stylesheet\" === resource.type &&\n 0 === (resource.state.loading & 4) &&\n ((instance = resource.instance),\n (resource.state.loading |= 4),\n insertStylesheet(instance, props.precedence, hoistableRoot));\n return resource.instance;\n}\nfunction insertStylesheet(instance, precedence, root) {\n for (\n var nodes = root.querySelectorAll(\n 'link[rel=\"stylesheet\"][data-precedence],style[data-precedence]'\n ),\n last = nodes.length ? nodes[nodes.length - 1] : null,\n prior = last,\n i = 0;\n i < nodes.length;\n i++\n ) {\n var node = nodes[i];\n if (node.dataset.precedence === precedence) prior = node;\n else if (prior !== last) break;\n }\n prior\n ? prior.parentNode.insertBefore(instance, prior.nextSibling)\n : ((precedence = 9 === root.nodeType ? root.head : root),\n precedence.insertBefore(instance, precedence.firstChild));\n}\nfunction adoptPreloadPropsForStylesheet(stylesheetProps, preloadProps) {\n null == stylesheetProps.crossOrigin &&\n (stylesheetProps.crossOrigin = preloadProps.crossOrigin);\n null == stylesheetProps.referrerPolicy &&\n (stylesheetProps.referrerPolicy = preloadProps.referrerPolicy);\n null == stylesheetProps.title && (stylesheetProps.title = preloadProps.title);\n}\nfunction adoptPreloadPropsForScript(scriptProps, preloadProps) {\n null == scriptProps.crossOrigin &&\n (scriptProps.crossOrigin = preloadProps.crossOrigin);\n null == scriptProps.referrerPolicy &&\n (scriptProps.referrerPolicy = preloadProps.referrerPolicy);\n null == scriptProps.integrity &&\n (scriptProps.integrity = preloadProps.integrity);\n}\nvar tagCaches = null;\nfunction getHydratableHoistableCache(type, keyAttribute, ownerDocument) {\n if (null === tagCaches) {\n var cache = new Map();\n var caches = (tagCaches = new Map());\n caches.set(ownerDocument, cache);\n } else\n (caches = tagCaches),\n (cache = caches.get(ownerDocument)),\n cache || ((cache = new Map()), caches.set(ownerDocument, cache));\n if (cache.has(type)) return cache;\n cache.set(type, null);\n ownerDocument = ownerDocument.getElementsByTagName(type);\n for (caches = 0; caches < ownerDocument.length; caches++) {\n var node = ownerDocument[caches];\n if (\n !(\n node[internalHoistableMarker] ||\n node[internalInstanceKey] ||\n (\"link\" === type && \"stylesheet\" === node.getAttribute(\"rel\"))\n ) &&\n \"http://www.w3.org/2000/svg\" !== node.namespaceURI\n ) {\n var nodeKey = node.getAttribute(keyAttribute) || \"\";\n nodeKey = type + nodeKey;\n var existing = cache.get(nodeKey);\n existing ? existing.push(node) : cache.set(nodeKey, [node]);\n }\n }\n return cache;\n}\nfunction mountHoistable(hoistableRoot, type, instance) {\n hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n hoistableRoot.head.insertBefore(\n instance,\n \"title\" === type ? hoistableRoot.querySelector(\"head > title\") : null\n );\n}\nfunction isHostHoistableType(type, props, hostContext) {\n if (1 === hostContext || null != props.itemProp) return !1;\n switch (type) {\n case \"meta\":\n case \"title\":\n return !0;\n case \"style\":\n if (\n \"string\" !== typeof props.precedence ||\n \"string\" !== typeof props.href ||\n \"\" === props.href\n )\n break;\n return !0;\n case \"link\":\n if (\n \"string\" !== typeof props.rel ||\n \"string\" !== typeof props.href ||\n \"\" === props.href ||\n props.onLoad ||\n props.onError\n )\n break;\n switch (props.rel) {\n case \"stylesheet\":\n return (\n (type = props.disabled),\n \"string\" === typeof props.precedence && null == type\n );\n default:\n return !0;\n }\n case \"script\":\n if (\n props.async &&\n \"function\" !== typeof props.async &&\n \"symbol\" !== typeof props.async &&\n !props.onLoad &&\n !props.onError &&\n props.src &&\n \"string\" === typeof props.src\n )\n return !0;\n }\n return !1;\n}\nfunction preloadResource(resource) {\n return \"stylesheet\" === resource.type && 0 === (resource.state.loading & 3)\n ? !1\n : !0;\n}\nfunction suspendResource(state, hoistableRoot, resource, props) {\n if (\n \"stylesheet\" === resource.type &&\n (\"string\" !== typeof props.media ||\n !1 !== matchMedia(props.media).matches) &&\n 0 === (resource.state.loading & 4)\n ) {\n if (null === resource.instance) {\n var key = getStyleKey(props.href),\n instance = hoistableRoot.querySelector(\n getStylesheetSelectorFromKey(key)\n );\n if (instance) {\n hoistableRoot = instance._p;\n null !== hoistableRoot &&\n \"object\" === typeof hoistableRoot &&\n \"function\" === typeof hoistableRoot.then &&\n (state.count++,\n (state = onUnsuspend.bind(state)),\n hoistableRoot.then(state, state));\n resource.state.loading |= 4;\n resource.instance = instance;\n markNodeAsHoistable(instance);\n return;\n }\n instance = hoistableRoot.ownerDocument || hoistableRoot;\n props = stylesheetPropsFromRawProps(props);\n (key = preloadPropsMap.get(key)) &&\n adoptPreloadPropsForStylesheet(props, key);\n instance = instance.createElement(\"link\");\n markNodeAsHoistable(instance);\n var linkInstance = instance;\n linkInstance._p = new Promise(function (resolve, reject) {\n linkInstance.onload = resolve;\n linkInstance.onerror = reject;\n });\n setInitialProperties(instance, \"link\", props);\n resource.instance = instance;\n }\n null === state.stylesheets && (state.stylesheets = new Map());\n state.stylesheets.set(resource, hoistableRoot);\n (hoistableRoot = resource.state.preload) &&\n 0 === (resource.state.loading & 3) &&\n (state.count++,\n (resource = onUnsuspend.bind(state)),\n hoistableRoot.addEventListener(\"load\", resource),\n hoistableRoot.addEventListener(\"error\", resource));\n }\n}\nvar estimatedBytesWithinLimit = 0;\nfunction waitForCommitToBeReady(state, timeoutOffset) {\n state.stylesheets &&\n 0 === state.count &&\n insertSuspendedStylesheets(state, state.stylesheets);\n return 0 < state.count || 0 < state.imgCount\n ? function (commit) {\n var stylesheetTimer = setTimeout(function () {\n state.stylesheets &&\n insertSuspendedStylesheets(state, state.stylesheets);\n if (state.unsuspend) {\n var unsuspend = state.unsuspend;\n state.unsuspend = null;\n unsuspend();\n }\n }, 6e4 + timeoutOffset);\n 0 < state.imgBytes &&\n 0 === estimatedBytesWithinLimit &&\n (estimatedBytesWithinLimit = 62500 * estimateBandwidth());\n var imgTimer = setTimeout(\n function () {\n state.waitingForImages = !1;\n if (\n 0 === state.count &&\n (state.stylesheets &&\n insertSuspendedStylesheets(state, state.stylesheets),\n state.unsuspend)\n ) {\n var unsuspend = state.unsuspend;\n state.unsuspend = null;\n unsuspend();\n }\n },\n (state.imgBytes > estimatedBytesWithinLimit ? 50 : 800) +\n timeoutOffset\n );\n state.unsuspend = commit;\n return function () {\n state.unsuspend = null;\n clearTimeout(stylesheetTimer);\n clearTimeout(imgTimer);\n };\n }\n : null;\n}\nfunction onUnsuspend() {\n this.count--;\n if (0 === this.count && (0 === this.imgCount || !this.waitingForImages))\n if (this.stylesheets) insertSuspendedStylesheets(this, this.stylesheets);\n else if (this.unsuspend) {\n var unsuspend = this.unsuspend;\n this.unsuspend = null;\n unsuspend();\n }\n}\nvar precedencesByRoot = null;\nfunction insertSuspendedStylesheets(state, resources) {\n state.stylesheets = null;\n null !== state.unsuspend &&\n (state.count++,\n (precedencesByRoot = new Map()),\n resources.forEach(insertStylesheetIntoRoot, state),\n (precedencesByRoot = null),\n onUnsuspend.call(state));\n}\nfunction insertStylesheetIntoRoot(root, resource) {\n if (!(resource.state.loading & 4)) {\n var precedences = precedencesByRoot.get(root);\n if (precedences) var last = precedences.get(null);\n else {\n precedences = new Map();\n precedencesByRoot.set(root, precedences);\n for (\n var nodes = root.querySelectorAll(\n \"link[data-precedence],style[data-precedence]\"\n ),\n i = 0;\n i < nodes.length;\n i++\n ) {\n var node = nodes[i];\n if (\n \"LINK\" === node.nodeName ||\n \"not all\" !== node.getAttribute(\"media\")\n )\n precedences.set(node.dataset.precedence, node), (last = node);\n }\n last && precedences.set(null, last);\n }\n nodes = resource.instance;\n node = nodes.getAttribute(\"data-precedence\");\n i = precedences.get(node) || last;\n i === last && precedences.set(null, nodes);\n precedences.set(node, nodes);\n this.count++;\n last = onUnsuspend.bind(this);\n nodes.addEventListener(\"load\", last);\n nodes.addEventListener(\"error\", last);\n i\n ? i.parentNode.insertBefore(nodes, i.nextSibling)\n : ((root = 9 === root.nodeType ? root.head : root),\n root.insertBefore(nodes, root.firstChild));\n resource.state.loading |= 4;\n }\n}\nvar HostTransitionContext = {\n $$typeof: REACT_CONTEXT_TYPE,\n Provider: null,\n Consumer: null,\n _currentValue: sharedNotPendingObject,\n _currentValue2: sharedNotPendingObject,\n _threadCount: 0\n};\nfunction FiberRootNode(\n containerInfo,\n tag,\n hydrate,\n identifierPrefix,\n onUncaughtError,\n onCaughtError,\n onRecoverableError,\n onDefaultTransitionIndicator,\n formState\n) {\n this.tag = 1;\n this.containerInfo = containerInfo;\n this.pingCache = this.current = this.pendingChildren = null;\n this.timeoutHandle = -1;\n this.callbackNode =\n this.next =\n this.pendingContext =\n this.context =\n this.cancelPendingCommit =\n null;\n this.callbackPriority = 0;\n this.expirationTimes = createLaneMap(-1);\n this.entangledLanes =\n this.shellSuspendCounter =\n this.errorRecoveryDisabledLanes =\n this.expiredLanes =\n this.warmLanes =\n this.pingedLanes =\n this.suspendedLanes =\n this.pendingLanes =\n 0;\n this.entanglements = createLaneMap(0);\n this.hiddenUpdates = createLaneMap(null);\n this.identifierPrefix = identifierPrefix;\n this.onUncaughtError = onUncaughtError;\n this.onCaughtError = onCaughtError;\n this.onRecoverableError = onRecoverableError;\n this.pooledCache = null;\n this.pooledCacheLanes = 0;\n this.formState = formState;\n this.incompleteTransitions = new Map();\n}\nfunction createFiberRoot(\n containerInfo,\n tag,\n hydrate,\n initialChildren,\n hydrationCallbacks,\n isStrictMode,\n identifierPrefix,\n formState,\n onUncaughtError,\n onCaughtError,\n onRecoverableError,\n onDefaultTransitionIndicator\n) {\n containerInfo = new FiberRootNode(\n containerInfo,\n tag,\n hydrate,\n identifierPrefix,\n onUncaughtError,\n onCaughtError,\n onRecoverableError,\n onDefaultTransitionIndicator,\n formState\n );\n tag = 1;\n !0 === isStrictMode && (tag |= 24);\n isStrictMode = createFiberImplClass(3, null, null, tag);\n containerInfo.current = isStrictMode;\n isStrictMode.stateNode = containerInfo;\n tag = createCache();\n tag.refCount++;\n containerInfo.pooledCache = tag;\n tag.refCount++;\n isStrictMode.memoizedState = {\n element: initialChildren,\n isDehydrated: hydrate,\n cache: tag\n };\n initializeUpdateQueue(isStrictMode);\n return containerInfo;\n}\nfunction getContextForSubtree(parentComponent) {\n if (!parentComponent) return emptyContextObject;\n parentComponent = emptyContextObject;\n return parentComponent;\n}\nfunction updateContainerImpl(\n rootFiber,\n lane,\n element,\n container,\n parentComponent,\n callback\n) {\n parentComponent = getContextForSubtree(parentComponent);\n null === container.context\n ? (container.context = parentComponent)\n : (container.pendingContext = parentComponent);\n container = createUpdate(lane);\n container.payload = { element: element };\n callback = void 0 === callback ? null : callback;\n null !== callback && (container.callback = callback);\n element = enqueueUpdate(rootFiber, container, lane);\n null !== element &&\n (scheduleUpdateOnFiber(element, rootFiber, lane),\n entangleTransitions(element, rootFiber, lane));\n}\nfunction markRetryLaneImpl(fiber, retryLane) {\n fiber = fiber.memoizedState;\n if (null !== fiber && null !== fiber.dehydrated) {\n var a = fiber.retryLane;\n fiber.retryLane = 0 !== a && a < retryLane ? a : retryLane;\n }\n}\nfunction markRetryLaneIfNotHydrated(fiber, retryLane) {\n markRetryLaneImpl(fiber, retryLane);\n (fiber = fiber.alternate) && markRetryLaneImpl(fiber, retryLane);\n}\nfunction attemptContinuousHydration(fiber) {\n if (13 === fiber.tag || 31 === fiber.tag) {\n var root = enqueueConcurrentRenderForLane(fiber, 67108864);\n null !== root && scheduleUpdateOnFiber(root, fiber, 67108864);\n markRetryLaneIfNotHydrated(fiber, 67108864);\n }\n}\nfunction attemptHydrationAtCurrentPriority(fiber) {\n if (13 === fiber.tag || 31 === fiber.tag) {\n var lane = requestUpdateLane();\n lane = getBumpedLaneForHydrationByLane(lane);\n var root = enqueueConcurrentRenderForLane(fiber, lane);\n null !== root && scheduleUpdateOnFiber(root, fiber, lane);\n markRetryLaneIfNotHydrated(fiber, lane);\n }\n}\nvar _enabled = !0;\nfunction dispatchDiscreteEvent(\n domEventName,\n eventSystemFlags,\n container,\n nativeEvent\n) {\n var prevTransition = ReactSharedInternals.T;\n ReactSharedInternals.T = null;\n var previousPriority = ReactDOMSharedInternals.p;\n try {\n (ReactDOMSharedInternals.p = 2),\n dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n } finally {\n (ReactDOMSharedInternals.p = previousPriority),\n (ReactSharedInternals.T = prevTransition);\n }\n}\nfunction dispatchContinuousEvent(\n domEventName,\n eventSystemFlags,\n container,\n nativeEvent\n) {\n var prevTransition = ReactSharedInternals.T;\n ReactSharedInternals.T = null;\n var previousPriority = ReactDOMSharedInternals.p;\n try {\n (ReactDOMSharedInternals.p = 8),\n dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n } finally {\n (ReactDOMSharedInternals.p = previousPriority),\n (ReactSharedInternals.T = prevTransition);\n }\n}\nfunction dispatchEvent(\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n) {\n if (_enabled) {\n var blockedOn = findInstanceBlockingEvent(nativeEvent);\n if (null === blockedOn)\n dispatchEventForPluginEventSystem(\n domEventName,\n eventSystemFlags,\n nativeEvent,\n return_targetInst,\n targetContainer\n ),\n clearIfContinuousEvent(domEventName, nativeEvent);\n else if (\n queueIfContinuousEvent(\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )\n )\n nativeEvent.stopPropagation();\n else if (\n (clearIfContinuousEvent(domEventName, nativeEvent),\n eventSystemFlags & 4 &&\n -1 < discreteReplayableEvents.indexOf(domEventName))\n ) {\n for (; null !== blockedOn; ) {\n var fiber = getInstanceFromNode(blockedOn);\n if (null !== fiber)\n switch (fiber.tag) {\n case 3:\n fiber = fiber.stateNode;\n if (fiber.current.memoizedState.isDehydrated) {\n var lanes = getHighestPriorityLanes(fiber.pendingLanes);\n if (0 !== lanes) {\n var root = fiber;\n root.pendingLanes |= 2;\n for (root.entangledLanes |= 2; lanes; ) {\n var lane = 1 << (31 - clz32(lanes));\n root.entanglements[1] |= lane;\n lanes &= ~lane;\n }\n ensureRootIsScheduled(fiber);\n 0 === (executionContext & 6) &&\n ((workInProgressRootRenderTargetTime = now() + 500),\n flushSyncWorkAcrossRoots_impl(0, !1));\n }\n }\n break;\n case 31:\n case 13:\n (root = enqueueConcurrentRenderForLane(fiber, 2)),\n null !== root && scheduleUpdateOnFiber(root, fiber, 2),\n flushSyncWork$1(),\n markRetryLaneIfNotHydrated(fiber, 2);\n }\n fiber = findInstanceBlockingEvent(nativeEvent);\n null === fiber &&\n dispatchEventForPluginEventSystem(\n domEventName,\n eventSystemFlags,\n nativeEvent,\n return_targetInst,\n targetContainer\n );\n if (fiber === blockedOn) break;\n blockedOn = fiber;\n }\n null !== blockedOn && nativeEvent.stopPropagation();\n } else\n dispatchEventForPluginEventSystem(\n domEventName,\n eventSystemFlags,\n nativeEvent,\n null,\n targetContainer\n );\n }\n}\nfunction findInstanceBlockingEvent(nativeEvent) {\n nativeEvent = getEventTarget(nativeEvent);\n return findInstanceBlockingTarget(nativeEvent);\n}\nvar return_targetInst = null;\nfunction findInstanceBlockingTarget(targetNode) {\n return_targetInst = null;\n targetNode = getClosestInstanceFromNode(targetNode);\n if (null !== targetNode) {\n var nearestMounted = getNearestMountedFiber(targetNode);\n if (null === nearestMounted) targetNode = null;\n else {\n var tag = nearestMounted.tag;\n if (13 === tag) {\n targetNode = getSuspenseInstanceFromFiber(nearestMounted);\n if (null !== targetNode) return targetNode;\n targetNode = null;\n } else if (31 === tag) {\n targetNode = getActivityInstanceFromFiber(nearestMounted);\n if (null !== targetNode) return targetNode;\n targetNode = null;\n } else if (3 === tag) {\n if (nearestMounted.stateNode.current.memoizedState.isDehydrated)\n return 3 === nearestMounted.tag\n ? nearestMounted.stateNode.containerInfo\n : null;\n targetNode = null;\n } else nearestMounted !== targetNode && (targetNode = null);\n }\n }\n return_targetInst = targetNode;\n return null;\n}\nfunction getEventPriority(domEventName) {\n switch (domEventName) {\n case \"beforetoggle\":\n case \"cancel\":\n case \"click\":\n case \"close\":\n case \"contextmenu\":\n case \"copy\":\n case \"cut\":\n case \"auxclick\":\n case \"dblclick\":\n case \"dragend\":\n case \"dragstart\":\n case \"drop\":\n case \"focusin\":\n case \"focusout\":\n case \"input\":\n case \"invalid\":\n case \"keydown\":\n case \"keypress\":\n case \"keyup\":\n case \"mousedown\":\n case \"mouseup\":\n case \"paste\":\n case \"pause\":\n case \"play\":\n case \"pointercancel\":\n case \"pointerdown\":\n case \"pointerup\":\n case \"ratechange\":\n case \"reset\":\n case \"resize\":\n case \"seeked\":\n case \"submit\":\n case \"toggle\":\n case \"touchcancel\":\n case \"touchend\":\n case \"touchstart\":\n case \"volumechange\":\n case \"change\":\n case \"selectionchange\":\n case \"textInput\":\n case \"compositionstart\":\n case \"compositionend\":\n case \"compositionupdate\":\n case \"beforeblur\":\n case \"afterblur\":\n case \"beforeinput\":\n case \"blur\":\n case \"fullscreenchange\":\n case \"focus\":\n case \"hashchange\":\n case \"popstate\":\n case \"select\":\n case \"selectstart\":\n return 2;\n case \"drag\":\n case \"dragenter\":\n case \"dragexit\":\n case \"dragleave\":\n case \"dragover\":\n case \"mousemove\":\n case \"mouseout\":\n case \"mouseover\":\n case \"pointermove\":\n case \"pointerout\":\n case \"pointerover\":\n case \"scroll\":\n case \"touchmove\":\n case \"wheel\":\n case \"mouseenter\":\n case \"mouseleave\":\n case \"pointerenter\":\n case \"pointerleave\":\n return 8;\n case \"message\":\n switch (getCurrentPriorityLevel()) {\n case ImmediatePriority:\n return 2;\n case UserBlockingPriority:\n return 8;\n case NormalPriority$1:\n case LowPriority:\n return 32;\n case IdlePriority:\n return 268435456;\n default:\n return 32;\n }\n default:\n return 32;\n }\n}\nvar hasScheduledReplayAttempt = !1,\n queuedFocus = null,\n queuedDrag = null,\n queuedMouse = null,\n queuedPointers = new Map(),\n queuedPointerCaptures = new Map(),\n queuedExplicitHydrationTargets = [],\n discreteReplayableEvents =\n \"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset\".split(\n \" \"\n );\nfunction clearIfContinuousEvent(domEventName, nativeEvent) {\n switch (domEventName) {\n case \"focusin\":\n case \"focusout\":\n queuedFocus = null;\n break;\n case \"dragenter\":\n case \"dragleave\":\n queuedDrag = null;\n break;\n case \"mouseover\":\n case \"mouseout\":\n queuedMouse = null;\n break;\n case \"pointerover\":\n case \"pointerout\":\n queuedPointers.delete(nativeEvent.pointerId);\n break;\n case \"gotpointercapture\":\n case \"lostpointercapture\":\n queuedPointerCaptures.delete(nativeEvent.pointerId);\n }\n}\nfunction accumulateOrCreateContinuousQueuedReplayableEvent(\n existingQueuedEvent,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n) {\n if (\n null === existingQueuedEvent ||\n existingQueuedEvent.nativeEvent !== nativeEvent\n )\n return (\n (existingQueuedEvent = {\n blockedOn: blockedOn,\n domEventName: domEventName,\n eventSystemFlags: eventSystemFlags,\n nativeEvent: nativeEvent,\n targetContainers: [targetContainer]\n }),\n null !== blockedOn &&\n ((blockedOn = getInstanceFromNode(blockedOn)),\n null !== blockedOn && attemptContinuousHydration(blockedOn)),\n existingQueuedEvent\n );\n existingQueuedEvent.eventSystemFlags |= eventSystemFlags;\n blockedOn = existingQueuedEvent.targetContainers;\n null !== targetContainer &&\n -1 === blockedOn.indexOf(targetContainer) &&\n blockedOn.push(targetContainer);\n return existingQueuedEvent;\n}\nfunction queueIfContinuousEvent(\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n) {\n switch (domEventName) {\n case \"focusin\":\n return (\n (queuedFocus = accumulateOrCreateContinuousQueuedReplayableEvent(\n queuedFocus,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )),\n !0\n );\n case \"dragenter\":\n return (\n (queuedDrag = accumulateOrCreateContinuousQueuedReplayableEvent(\n queuedDrag,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )),\n !0\n );\n case \"mouseover\":\n return (\n (queuedMouse = accumulateOrCreateContinuousQueuedReplayableEvent(\n queuedMouse,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )),\n !0\n );\n case \"pointerover\":\n var pointerId = nativeEvent.pointerId;\n queuedPointers.set(\n pointerId,\n accumulateOrCreateContinuousQueuedReplayableEvent(\n queuedPointers.get(pointerId) || null,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )\n );\n return !0;\n case \"gotpointercapture\":\n return (\n (pointerId = nativeEvent.pointerId),\n queuedPointerCaptures.set(\n pointerId,\n accumulateOrCreateContinuousQueuedReplayableEvent(\n queuedPointerCaptures.get(pointerId) || null,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )\n ),\n !0\n );\n }\n return !1;\n}\nfunction attemptExplicitHydrationTarget(queuedTarget) {\n var targetInst = getClosestInstanceFromNode(queuedTarget.target);\n if (null !== targetInst) {\n var nearestMounted = getNearestMountedFiber(targetInst);\n if (null !== nearestMounted)\n if (((targetInst = nearestMounted.tag), 13 === targetInst)) {\n if (\n ((targetInst = getSuspenseInstanceFromFiber(nearestMounted)),\n null !== targetInst)\n ) {\n queuedTarget.blockedOn = targetInst;\n runWithPriority(queuedTarget.priority, function () {\n attemptHydrationAtCurrentPriority(nearestMounted);\n });\n return;\n }\n } else if (31 === targetInst) {\n if (\n ((targetInst = getActivityInstanceFromFiber(nearestMounted)),\n null !== targetInst)\n ) {\n queuedTarget.blockedOn = targetInst;\n runWithPriority(queuedTarget.priority, function () {\n attemptHydrationAtCurrentPriority(nearestMounted);\n });\n return;\n }\n } else if (\n 3 === targetInst &&\n nearestMounted.stateNode.current.memoizedState.isDehydrated\n ) {\n queuedTarget.blockedOn =\n 3 === nearestMounted.tag\n ? nearestMounted.stateNode.containerInfo\n : null;\n return;\n }\n }\n queuedTarget.blockedOn = null;\n}\nfunction attemptReplayContinuousQueuedEvent(queuedEvent) {\n if (null !== queuedEvent.blockedOn) return !1;\n for (\n var targetContainers = queuedEvent.targetContainers;\n 0 < targetContainers.length;\n\n ) {\n var nextBlockedOn = findInstanceBlockingEvent(queuedEvent.nativeEvent);\n if (null === nextBlockedOn) {\n nextBlockedOn = queuedEvent.nativeEvent;\n var nativeEventClone = new nextBlockedOn.constructor(\n nextBlockedOn.type,\n nextBlockedOn\n );\n currentReplayingEvent = nativeEventClone;\n nextBlockedOn.target.dispatchEvent(nativeEventClone);\n currentReplayingEvent = null;\n } else\n return (\n (targetContainers = getInstanceFromNode(nextBlockedOn)),\n null !== targetContainers &&\n attemptContinuousHydration(targetContainers),\n (queuedEvent.blockedOn = nextBlockedOn),\n !1\n );\n targetContainers.shift();\n }\n return !0;\n}\nfunction attemptReplayContinuousQueuedEventInMap(queuedEvent, key, map) {\n attemptReplayContinuousQueuedEvent(queuedEvent) && map.delete(key);\n}\nfunction replayUnblockedEvents() {\n hasScheduledReplayAttempt = !1;\n null !== queuedFocus &&\n attemptReplayContinuousQueuedEvent(queuedFocus) &&\n (queuedFocus = null);\n null !== queuedDrag &&\n attemptReplayContinuousQueuedEvent(queuedDrag) &&\n (queuedDrag = null);\n null !== queuedMouse &&\n attemptReplayContinuousQueuedEvent(queuedMouse) &&\n (queuedMouse = null);\n queuedPointers.forEach(attemptReplayContinuousQueuedEventInMap);\n queuedPointerCaptures.forEach(attemptReplayContinuousQueuedEventInMap);\n}\nfunction scheduleCallbackIfUnblocked(queuedEvent, unblocked) {\n queuedEvent.blockedOn === unblocked &&\n ((queuedEvent.blockedOn = null),\n hasScheduledReplayAttempt ||\n ((hasScheduledReplayAttempt = !0),\n Scheduler.unstable_scheduleCallback(\n Scheduler.unstable_NormalPriority,\n replayUnblockedEvents\n )));\n}\nvar lastScheduledReplayQueue = null;\nfunction scheduleReplayQueueIfNeeded(formReplayingQueue) {\n lastScheduledReplayQueue !== formReplayingQueue &&\n ((lastScheduledReplayQueue = formReplayingQueue),\n Scheduler.unstable_scheduleCallback(\n Scheduler.unstable_NormalPriority,\n function () {\n lastScheduledReplayQueue === formReplayingQueue &&\n (lastScheduledReplayQueue = null);\n for (var i = 0; i < formReplayingQueue.length; i += 3) {\n var form = formReplayingQueue[i],\n submitterOrAction = formReplayingQueue[i + 1],\n formData = formReplayingQueue[i + 2];\n if (\"function\" !== typeof submitterOrAction)\n if (null === findInstanceBlockingTarget(submitterOrAction || form))\n continue;\n else break;\n var formInst = getInstanceFromNode(form);\n null !== formInst &&\n (formReplayingQueue.splice(i, 3),\n (i -= 3),\n startHostTransition(\n formInst,\n {\n pending: !0,\n data: formData,\n method: form.method,\n action: submitterOrAction\n },\n submitterOrAction,\n formData\n ));\n }\n }\n ));\n}\nfunction retryIfBlockedOn(unblocked) {\n function unblock(queuedEvent) {\n return scheduleCallbackIfUnblocked(queuedEvent, unblocked);\n }\n null !== queuedFocus && scheduleCallbackIfUnblocked(queuedFocus, unblocked);\n null !== queuedDrag && scheduleCallbackIfUnblocked(queuedDrag, unblocked);\n null !== queuedMouse && scheduleCallbackIfUnblocked(queuedMouse, unblocked);\n queuedPointers.forEach(unblock);\n queuedPointerCaptures.forEach(unblock);\n for (var i = 0; i < queuedExplicitHydrationTargets.length; i++) {\n var queuedTarget = queuedExplicitHydrationTargets[i];\n queuedTarget.blockedOn === unblocked && (queuedTarget.blockedOn = null);\n }\n for (\n ;\n 0 < queuedExplicitHydrationTargets.length &&\n ((i = queuedExplicitHydrationTargets[0]), null === i.blockedOn);\n\n )\n attemptExplicitHydrationTarget(i),\n null === i.blockedOn && queuedExplicitHydrationTargets.shift();\n i = (unblocked.ownerDocument || unblocked).$$reactFormReplay;\n if (null != i)\n for (queuedTarget = 0; queuedTarget < i.length; queuedTarget += 3) {\n var form = i[queuedTarget],\n submitterOrAction = i[queuedTarget + 1],\n formProps = form[internalPropsKey] || null;\n if (\"function\" === typeof submitterOrAction)\n formProps || scheduleReplayQueueIfNeeded(i);\n else if (formProps) {\n var action = null;\n if (submitterOrAction && submitterOrAction.hasAttribute(\"formAction\"))\n if (\n ((form = submitterOrAction),\n (formProps = submitterOrAction[internalPropsKey] || null))\n )\n action = formProps.formAction;\n else {\n if (null !== findInstanceBlockingTarget(form)) continue;\n }\n else action = formProps.action;\n \"function\" === typeof action\n ? (i[queuedTarget + 1] = action)\n : (i.splice(queuedTarget, 3), (queuedTarget -= 3));\n scheduleReplayQueueIfNeeded(i);\n }\n }\n}\nfunction defaultOnDefaultTransitionIndicator() {\n function handleNavigate(event) {\n event.canIntercept &&\n \"react-transition\" === event.info &&\n event.intercept({\n handler: function () {\n return new Promise(function (resolve) {\n return (pendingResolve = resolve);\n });\n },\n focusReset: \"manual\",\n scroll: \"manual\"\n });\n }\n function handleNavigateComplete() {\n null !== pendingResolve && (pendingResolve(), (pendingResolve = null));\n isCancelled || setTimeout(startFakeNavigation, 20);\n }\n function startFakeNavigation() {\n if (!isCancelled && !navigation.transition) {\n var currentEntry = navigation.currentEntry;\n currentEntry &&\n null != currentEntry.url &&\n navigation.navigate(currentEntry.url, {\n state: currentEntry.getState(),\n info: \"react-transition\",\n history: \"replace\"\n });\n }\n }\n if (\"object\" === typeof navigation) {\n var isCancelled = !1,\n pendingResolve = null;\n navigation.addEventListener(\"navigate\", handleNavigate);\n navigation.addEventListener(\"navigatesuccess\", handleNavigateComplete);\n navigation.addEventListener(\"navigateerror\", handleNavigateComplete);\n setTimeout(startFakeNavigation, 100);\n return function () {\n isCancelled = !0;\n navigation.removeEventListener(\"navigate\", handleNavigate);\n navigation.removeEventListener(\"navigatesuccess\", handleNavigateComplete);\n navigation.removeEventListener(\"navigateerror\", handleNavigateComplete);\n null !== pendingResolve && (pendingResolve(), (pendingResolve = null));\n };\n }\n}\nfunction ReactDOMRoot(internalRoot) {\n this._internalRoot = internalRoot;\n}\nReactDOMHydrationRoot.prototype.render = ReactDOMRoot.prototype.render =\n function (children) {\n var root = this._internalRoot;\n if (null === root) throw Error(formatProdErrorMessage(409));\n var current = root.current,\n lane = requestUpdateLane();\n updateContainerImpl(current, lane, children, root, null, null);\n };\nReactDOMHydrationRoot.prototype.unmount = ReactDOMRoot.prototype.unmount =\n function () {\n var root = this._internalRoot;\n if (null !== root) {\n this._internalRoot = null;\n var container = root.containerInfo;\n updateContainerImpl(root.current, 2, null, root, null, null);\n flushSyncWork$1();\n container[internalContainerInstanceKey] = null;\n }\n };\nfunction ReactDOMHydrationRoot(internalRoot) {\n this._internalRoot = internalRoot;\n}\nReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) {\n if (target) {\n var updatePriority = resolveUpdatePriority();\n target = { blockedOn: null, target: target, priority: updatePriority };\n for (\n var i = 0;\n i < queuedExplicitHydrationTargets.length &&\n 0 !== updatePriority &&\n updatePriority < queuedExplicitHydrationTargets[i].priority;\n i++\n );\n queuedExplicitHydrationTargets.splice(i, 0, target);\n 0 === i && attemptExplicitHydrationTarget(target);\n }\n};\nvar isomorphicReactPackageVersion$jscomp$inline_1840 = React.version;\nif (\n \"19.2.6\" !==\n isomorphicReactPackageVersion$jscomp$inline_1840\n)\n throw Error(\n formatProdErrorMessage(\n 527,\n isomorphicReactPackageVersion$jscomp$inline_1840,\n \"19.2.6\"\n )\n );\nReactDOMSharedInternals.findDOMNode = function (componentOrElement) {\n var fiber = componentOrElement._reactInternals;\n if (void 0 === fiber) {\n if (\"function\" === typeof componentOrElement.render)\n throw Error(formatProdErrorMessage(188));\n componentOrElement = Object.keys(componentOrElement).join(\",\");\n throw Error(formatProdErrorMessage(268, componentOrElement));\n }\n componentOrElement = findCurrentFiberUsingSlowPath(fiber);\n componentOrElement =\n null !== componentOrElement\n ? findCurrentHostFiberImpl(componentOrElement)\n : null;\n componentOrElement =\n null === componentOrElement ? null : componentOrElement.stateNode;\n return componentOrElement;\n};\nvar internals$jscomp$inline_2347 = {\n bundleType: 0,\n version: \"19.2.6\",\n rendererPackageName: \"react-dom\",\n currentDispatcherRef: ReactSharedInternals,\n reconcilerVersion: \"19.2.6\"\n};\nif (\"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {\n var hook$jscomp$inline_2348 = __REACT_DEVTOOLS_GLOBAL_HOOK__;\n if (\n !hook$jscomp$inline_2348.isDisabled &&\n hook$jscomp$inline_2348.supportsFiber\n )\n try {\n (rendererID = hook$jscomp$inline_2348.inject(\n internals$jscomp$inline_2347\n )),\n (injectedHook = hook$jscomp$inline_2348);\n } catch (err) {}\n}\nexports.createRoot = function (container, options) {\n if (!isValidContainer(container)) throw Error(formatProdErrorMessage(299));\n var isStrictMode = !1,\n identifierPrefix = \"\",\n onUncaughtError = defaultOnUncaughtError,\n onCaughtError = defaultOnCaughtError,\n onRecoverableError = defaultOnRecoverableError;\n null !== options &&\n void 0 !== options &&\n (!0 === options.unstable_strictMode && (isStrictMode = !0),\n void 0 !== options.identifierPrefix &&\n (identifierPrefix = options.identifierPrefix),\n void 0 !== options.onUncaughtError &&\n (onUncaughtError = options.onUncaughtError),\n void 0 !== options.onCaughtError && (onCaughtError = options.onCaughtError),\n void 0 !== options.onRecoverableError &&\n (onRecoverableError = options.onRecoverableError));\n options = createFiberRoot(\n container,\n 1,\n !1,\n null,\n null,\n isStrictMode,\n identifierPrefix,\n null,\n onUncaughtError,\n onCaughtError,\n onRecoverableError,\n defaultOnDefaultTransitionIndicator\n );\n container[internalContainerInstanceKey] = options.current;\n listenToAllSupportedEvents(container);\n return new ReactDOMRoot(options);\n};\nexports.hydrateRoot = function (container, initialChildren, options) {\n if (!isValidContainer(container)) throw Error(formatProdErrorMessage(299));\n var isStrictMode = !1,\n identifierPrefix = \"\",\n onUncaughtError = defaultOnUncaughtError,\n onCaughtError = defaultOnCaughtError,\n onRecoverableError = defaultOnRecoverableError,\n formState = null;\n null !== options &&\n void 0 !== options &&\n (!0 === options.unstable_strictMode && (isStrictMode = !0),\n void 0 !== options.identifierPrefix &&\n (identifierPrefix = options.identifierPrefix),\n void 0 !== options.onUncaughtError &&\n (onUncaughtError = options.onUncaughtError),\n void 0 !== options.onCaughtError && (onCaughtError = options.onCaughtError),\n void 0 !== options.onRecoverableError &&\n (onRecoverableError = options.onRecoverableError),\n void 0 !== options.formState && (formState = options.formState));\n initialChildren = createFiberRoot(\n container,\n 1,\n !0,\n initialChildren,\n null != options ? options : null,\n isStrictMode,\n identifierPrefix,\n formState,\n onUncaughtError,\n onCaughtError,\n onRecoverableError,\n defaultOnDefaultTransitionIndicator\n );\n initialChildren.context = getContextForSubtree(null);\n options = initialChildren.current;\n isStrictMode = requestUpdateLane();\n isStrictMode = getBumpedLaneForHydrationByLane(isStrictMode);\n identifierPrefix = createUpdate(isStrictMode);\n identifierPrefix.callback = null;\n enqueueUpdate(options, identifierPrefix, isStrictMode);\n options = isStrictMode;\n initialChildren.current.lanes = options;\n markRootUpdated$1(initialChildren, options);\n ensureRootIsScheduled(initialChildren);\n container[internalContainerInstanceKey] = initialChildren.current;\n listenToAllSupportedEvents(container);\n return new ReactDOMHydrationRoot(initialChildren);\n};\nexports.version = \"19.2.6\";\n", "'use strict';\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (process.env.NODE_ENV === 'production') {\n // DCE check should happen before ReactDOM bundle executes so that\n // DevTools can report bad minification during injection.\n checkDCE();\n module.exports = require('./cjs/react-dom-client.production.js');\n} else {\n module.exports = require('./cjs/react-dom-client.development.js');\n}\n", "/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n", "'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n", "const isString = obj => typeof obj === 'string';\nconst defer = () => {\n let res;\n let rej;\n const promise = new Promise((resolve, reject) => {\n res = resolve;\n rej = reject;\n });\n promise.resolve = res;\n promise.reject = rej;\n return promise;\n};\nconst makeString = object => {\n if (object == null) return '';\n return String(object);\n};\nconst copy = (a, s, t) => {\n a.forEach(m => {\n if (s[m]) t[m] = s[m];\n });\n};\nconst lastOfPathSeparatorRegExp = /###/g;\nconst cleanKey = key => key && key.includes('###') ? key.replace(lastOfPathSeparatorRegExp, '.') : key;\nconst canNotTraverseDeeper = object => !object || isString(object);\nconst getLastOfPath = (object, path, Empty) => {\n const stack = !isString(path) ? path : path.split('.');\n let stackIndex = 0;\n while (stackIndex < stack.length - 1) {\n if (canNotTraverseDeeper(object)) return {};\n const key = cleanKey(stack[stackIndex]);\n if (!object[key] && Empty) object[key] = new Empty();\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n object = object[key];\n } else {\n object = {};\n }\n ++stackIndex;\n }\n if (canNotTraverseDeeper(object)) return {};\n return {\n obj: object,\n k: cleanKey(stack[stackIndex])\n };\n};\nconst setPath = (object, path, newValue) => {\n const {\n obj,\n k\n } = getLastOfPath(object, path, Object);\n if (obj !== undefined || path.length === 1) {\n obj[k] = newValue;\n return;\n }\n let e = path[path.length - 1];\n let p = path.slice(0, path.length - 1);\n let last = getLastOfPath(object, p, Object);\n while (last.obj === undefined && p.length) {\n e = `${p[p.length - 1]}.${e}`;\n p = p.slice(0, p.length - 1);\n last = getLastOfPath(object, p, Object);\n if (last?.obj && typeof last.obj[`${last.k}.${e}`] !== 'undefined') {\n last.obj = undefined;\n }\n }\n last.obj[`${last.k}.${e}`] = newValue;\n};\nconst pushPath = (object, path, newValue, concat) => {\n const {\n obj,\n k\n } = getLastOfPath(object, path, Object);\n obj[k] = obj[k] || [];\n obj[k].push(newValue);\n};\nconst getPath = (object, path) => {\n const {\n obj,\n k\n } = getLastOfPath(object, path);\n if (!obj) return undefined;\n if (!Object.prototype.hasOwnProperty.call(obj, k)) return undefined;\n return obj[k];\n};\nconst getPathWithDefaults = (data, defaultData, key) => {\n const value = getPath(data, key);\n if (value !== undefined) {\n return value;\n }\n return getPath(defaultData, key);\n};\nconst deepExtend = (target, source, overwrite) => {\n for (const prop in source) {\n if (prop !== '__proto__' && prop !== 'constructor') {\n if (prop in target) {\n if (isString(target[prop]) || target[prop] instanceof String || isString(source[prop]) || source[prop] instanceof String) {\n if (overwrite) target[prop] = source[prop];\n } else {\n deepExtend(target[prop], source[prop], overwrite);\n }\n } else {\n target[prop] = source[prop];\n }\n }\n }\n return target;\n};\nconst regexEscape = str => str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\nconst _entityMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/'\n};\nconst escape = data => {\n if (isString(data)) {\n return data.replace(/[&<>\"'\\/]/g, s => _entityMap[s]);\n }\n return data;\n};\nclass RegExpCache {\n constructor(capacity) {\n this.capacity = capacity;\n this.regExpMap = new Map();\n this.regExpQueue = [];\n }\n getRegExp(pattern) {\n const regExpFromCache = this.regExpMap.get(pattern);\n if (regExpFromCache !== undefined) {\n return regExpFromCache;\n }\n const regExpNew = new RegExp(pattern);\n if (this.regExpQueue.length === this.capacity) {\n this.regExpMap.delete(this.regExpQueue.shift());\n }\n this.regExpMap.set(pattern, regExpNew);\n this.regExpQueue.push(pattern);\n return regExpNew;\n }\n}\nconst chars = [' ', ',', '?', '!', ';'];\nconst looksLikeObjectPathRegExpCache = new RegExpCache(20);\nconst looksLikeObjectPath = (key, nsSeparator, keySeparator) => {\n nsSeparator = nsSeparator || '';\n keySeparator = keySeparator || '';\n const possibleChars = chars.filter(c => !nsSeparator.includes(c) && !keySeparator.includes(c));\n if (possibleChars.length === 0) return true;\n const r = looksLikeObjectPathRegExpCache.getRegExp(`(${possibleChars.map(c => c === '?' ? '\\\\?' : c).join('|')})`);\n let matched = !r.test(key);\n if (!matched) {\n const ki = key.indexOf(keySeparator);\n if (ki > 0 && !r.test(key.substring(0, ki))) {\n matched = true;\n }\n }\n return matched;\n};\nconst deepFind = (obj, path, keySeparator = '.') => {\n if (!obj) return undefined;\n if (obj[path]) {\n if (!Object.prototype.hasOwnProperty.call(obj, path)) return undefined;\n return obj[path];\n }\n const tokens = path.split(keySeparator);\n let current = obj;\n for (let i = 0; i < tokens.length;) {\n if (!current || typeof current !== 'object') {\n return undefined;\n }\n let next;\n let nextPath = '';\n for (let j = i; j < tokens.length; ++j) {\n if (j !== i) {\n nextPath += keySeparator;\n }\n nextPath += tokens[j];\n next = current[nextPath];\n if (next !== undefined) {\n if (['string', 'number', 'boolean'].includes(typeof next) && j < tokens.length - 1) {\n continue;\n }\n i += j - i + 1;\n break;\n }\n }\n current = next;\n }\n return current;\n};\nconst getCleanedCode = code => code?.replace(/_/g, '-');\n\nconst consoleLogger = {\n type: 'logger',\n log(args) {\n this.output('log', args);\n },\n warn(args) {\n this.output('warn', args);\n },\n error(args) {\n this.output('error', args);\n },\n output(type, args) {\n console?.[type]?.apply?.(console, args);\n }\n};\nclass Logger {\n constructor(concreteLogger, options = {}) {\n this.init(concreteLogger, options);\n }\n init(concreteLogger, options = {}) {\n this.prefix = options.prefix || 'i18next:';\n this.logger = concreteLogger || consoleLogger;\n this.options = options;\n this.debug = options.debug;\n }\n log(...args) {\n return this.forward(args, 'log', '', true);\n }\n warn(...args) {\n return this.forward(args, 'warn', '', true);\n }\n error(...args) {\n return this.forward(args, 'error', '');\n }\n deprecate(...args) {\n return this.forward(args, 'warn', 'WARNING DEPRECATED: ', true);\n }\n forward(args, lvl, prefix, debugOnly) {\n if (debugOnly && !this.debug) return null;\n args = args.map(a => isString(a) ? a.replace(/[\\r\\n\\x00-\\x1F\\x7F]/g, ' ') : a);\n if (isString(args[0])) args[0] = `${prefix}${this.prefix} ${args[0]}`;\n return this.logger[lvl](args);\n }\n create(moduleName) {\n return new Logger(this.logger, {\n ...{\n prefix: `${this.prefix}:${moduleName}:`\n },\n ...this.options\n });\n }\n clone(options) {\n options = options || this.options;\n options.prefix = options.prefix || this.prefix;\n return new Logger(this.logger, options);\n }\n}\nvar baseLogger = new Logger();\n\nclass EventEmitter {\n constructor() {\n this.observers = {};\n }\n on(events, listener) {\n events.split(' ').forEach(event => {\n if (!this.observers[event]) this.observers[event] = new Map();\n const numListeners = this.observers[event].get(listener) || 0;\n this.observers[event].set(listener, numListeners + 1);\n });\n return this;\n }\n off(event, listener) {\n if (!this.observers[event]) return;\n if (!listener) {\n delete this.observers[event];\n return;\n }\n this.observers[event].delete(listener);\n }\n once(event, listener) {\n const wrapper = (...args) => {\n listener(...args);\n this.off(event, wrapper);\n };\n this.on(event, wrapper);\n return this;\n }\n emit(event, ...args) {\n if (this.observers[event]) {\n const cloned = Array.from(this.observers[event].entries());\n cloned.forEach(([observer, numTimesAdded]) => {\n for (let i = 0; i < numTimesAdded; i++) {\n observer(...args);\n }\n });\n }\n if (this.observers['*']) {\n const cloned = Array.from(this.observers['*'].entries());\n cloned.forEach(([observer, numTimesAdded]) => {\n for (let i = 0; i < numTimesAdded; i++) {\n observer(event, ...args);\n }\n });\n }\n }\n}\n\nclass ResourceStore extends EventEmitter {\n constructor(data, options = {\n ns: ['translation'],\n defaultNS: 'translation'\n }) {\n super();\n this.data = data || {};\n this.options = options;\n if (this.options.keySeparator === undefined) {\n this.options.keySeparator = '.';\n }\n if (this.options.ignoreJSONStructure === undefined) {\n this.options.ignoreJSONStructure = true;\n }\n }\n addNamespaces(ns) {\n if (!this.options.ns.includes(ns)) {\n this.options.ns.push(ns);\n }\n }\n removeNamespaces(ns) {\n const index = this.options.ns.indexOf(ns);\n if (index > -1) {\n this.options.ns.splice(index, 1);\n }\n }\n getResource(lng, ns, key, options = {}) {\n const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n const ignoreJSONStructure = options.ignoreJSONStructure !== undefined ? options.ignoreJSONStructure : this.options.ignoreJSONStructure;\n let path;\n if (lng.includes('.')) {\n path = lng.split('.');\n } else {\n path = [lng, ns];\n if (key) {\n if (Array.isArray(key)) {\n path.push(...key);\n } else if (isString(key) && keySeparator) {\n path.push(...key.split(keySeparator));\n } else {\n path.push(key);\n }\n }\n }\n const result = getPath(this.data, path);\n if (!result && !ns && !key && lng.includes('.')) {\n lng = path[0];\n ns = path[1];\n key = path.slice(2).join('.');\n }\n if (result || !ignoreJSONStructure || !isString(key)) return result;\n return deepFind(this.data?.[lng]?.[ns], key, keySeparator);\n }\n addResource(lng, ns, key, value, options = {\n silent: false\n }) {\n const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n let path = [lng, ns];\n if (key) path = path.concat(keySeparator ? key.split(keySeparator) : key);\n if (lng.includes('.')) {\n path = lng.split('.');\n value = ns;\n ns = path[1];\n }\n this.addNamespaces(ns);\n setPath(this.data, path, value);\n if (!options.silent) this.emit('added', lng, ns, key, value);\n }\n addResources(lng, ns, resources, options = {\n silent: false\n }) {\n for (const m in resources) {\n if (isString(resources[m]) || Array.isArray(resources[m])) this.addResource(lng, ns, m, resources[m], {\n silent: true\n });\n }\n if (!options.silent) this.emit('added', lng, ns, resources);\n }\n addResourceBundle(lng, ns, resources, deep, overwrite, options = {\n silent: false,\n skipCopy: false\n }) {\n let path = [lng, ns];\n if (lng.includes('.')) {\n path = lng.split('.');\n deep = resources;\n resources = ns;\n ns = path[1];\n }\n this.addNamespaces(ns);\n let pack = getPath(this.data, path) || {};\n if (!options.skipCopy) resources = JSON.parse(JSON.stringify(resources));\n if (deep) {\n deepExtend(pack, resources, overwrite);\n } else {\n pack = {\n ...pack,\n ...resources\n };\n }\n setPath(this.data, path, pack);\n if (!options.silent) this.emit('added', lng, ns, resources);\n }\n removeResourceBundle(lng, ns) {\n if (this.hasResourceBundle(lng, ns)) {\n delete this.data[lng][ns];\n }\n this.removeNamespaces(ns);\n this.emit('removed', lng, ns);\n }\n hasResourceBundle(lng, ns) {\n return this.getResource(lng, ns) !== undefined;\n }\n getResourceBundle(lng, ns) {\n if (!ns) ns = this.options.defaultNS;\n return this.getResource(lng, ns);\n }\n getDataByLanguage(lng) {\n return this.data[lng];\n }\n hasLanguageSomeTranslations(lng) {\n const data = this.getDataByLanguage(lng);\n const n = data && Object.keys(data) || [];\n return !!n.find(v => data[v] && Object.keys(data[v]).length > 0);\n }\n toJSON() {\n return this.data;\n }\n}\n\nvar postProcessor = {\n processors: {},\n addPostProcessor(module) {\n this.processors[module.name] = module;\n },\n handle(processors, value, key, options, translator) {\n processors.forEach(processor => {\n value = this.processors[processor]?.process(value, key, options, translator) ?? value;\n });\n return value;\n }\n};\n\nconst PATH_KEY = Symbol('i18next/PATH_KEY');\nfunction createProxy() {\n const state = [];\n const handler = Object.create(null);\n let proxy;\n handler.get = (target, key) => {\n proxy?.revoke?.();\n if (key === PATH_KEY) return state;\n state.push(key);\n proxy = Proxy.revocable(target, handler);\n return proxy.proxy;\n };\n return Proxy.revocable(Object.create(null), handler).proxy;\n}\nfunction keysFromSelector(selector, opts) {\n const {\n [PATH_KEY]: path\n } = selector(createProxy());\n const keySeparator = opts?.keySeparator ?? '.';\n const nsSeparator = opts?.nsSeparator ?? ':';\n const strict = opts?.enableSelector === 'strict';\n if (path.length > 1 && nsSeparator) {\n const ns = opts?.ns;\n const nsList = strict ? Array.isArray(ns) ? ns : ns ? [ns] : null : Array.isArray(ns) ? ns : null;\n if (nsList) {\n const candidates = strict ? nsList : nsList.length > 1 ? nsList.slice(1) : [];\n if (candidates.includes(path[0])) {\n return `${path[0]}${nsSeparator}${path.slice(1).join(keySeparator)}`;\n }\n }\n }\n return path.join(keySeparator);\n}\n\nconst shouldHandleAsObject = res => !isString(res) && typeof res !== 'boolean' && typeof res !== 'number';\nclass Translator extends EventEmitter {\n constructor(services, options = {}) {\n super();\n copy(['resourceStore', 'languageUtils', 'pluralResolver', 'interpolator', 'backendConnector', 'i18nFormat', 'utils'], services, this);\n this.options = options;\n if (this.options.keySeparator === undefined) {\n this.options.keySeparator = '.';\n }\n this.logger = baseLogger.create('translator');\n this.checkedLoadedFor = {};\n }\n changeLanguage(lng) {\n if (lng) this.language = lng;\n }\n exists(key, o = {\n interpolation: {}\n }) {\n const opt = {\n ...o\n };\n if (key == null) return false;\n const resolved = this.resolve(key, opt);\n if (resolved?.res === undefined) return false;\n const isObject = shouldHandleAsObject(resolved.res);\n if (opt.returnObjects === false && isObject) {\n return false;\n }\n return true;\n }\n extractFromKey(key, opt) {\n let nsSeparator = opt.nsSeparator !== undefined ? opt.nsSeparator : this.options.nsSeparator;\n if (nsSeparator === undefined) nsSeparator = ':';\n const keySeparator = opt.keySeparator !== undefined ? opt.keySeparator : this.options.keySeparator;\n let namespaces = opt.ns || this.options.defaultNS || [];\n const wouldCheckForNsInKey = nsSeparator && key.includes(nsSeparator);\n const seemsNaturalLanguage = !this.options.userDefinedKeySeparator && !opt.keySeparator && !this.options.userDefinedNsSeparator && !opt.nsSeparator && !looksLikeObjectPath(key, nsSeparator, keySeparator);\n if (wouldCheckForNsInKey && !seemsNaturalLanguage) {\n const m = key.match(this.interpolator.nestingRegexp);\n if (m && m.length > 0) {\n return {\n key,\n namespaces: isString(namespaces) ? [namespaces] : namespaces\n };\n }\n const parts = key.split(nsSeparator);\n if (nsSeparator !== keySeparator || nsSeparator === keySeparator && this.options.ns.includes(parts[0])) namespaces = parts.shift();\n key = parts.join(keySeparator);\n }\n return {\n key,\n namespaces: isString(namespaces) ? [namespaces] : namespaces\n };\n }\n translate(keys, o, lastKey) {\n let opt = typeof o === 'object' ? {\n ...o\n } : o;\n if (typeof opt !== 'object' && this.options.overloadTranslationOptionHandler) {\n opt = this.options.overloadTranslationOptionHandler(arguments);\n }\n if (typeof opt === 'object') opt = {\n ...opt\n };\n if (!opt) opt = {};\n if (keys == null) return '';\n if (typeof keys === 'function') keys = keysFromSelector(keys, {\n ...this.options,\n ...opt\n });\n if (!Array.isArray(keys)) keys = [String(keys)];\n keys = keys.map(k => typeof k === 'function' ? keysFromSelector(k, {\n ...this.options,\n ...opt\n }) : String(k));\n const returnDetails = opt.returnDetails !== undefined ? opt.returnDetails : this.options.returnDetails;\n const keySeparator = opt.keySeparator !== undefined ? opt.keySeparator : this.options.keySeparator;\n const {\n key,\n namespaces\n } = this.extractFromKey(keys[keys.length - 1], opt);\n const namespace = namespaces[namespaces.length - 1];\n let nsSeparator = opt.nsSeparator !== undefined ? opt.nsSeparator : this.options.nsSeparator;\n if (nsSeparator === undefined) nsSeparator = ':';\n const lng = opt.lng || this.language;\n const appendNamespaceToCIMode = opt.appendNamespaceToCIMode || this.options.appendNamespaceToCIMode;\n if (lng?.toLowerCase() === 'cimode') {\n if (appendNamespaceToCIMode) {\n if (returnDetails) {\n return {\n res: `${namespace}${nsSeparator}${key}`,\n usedKey: key,\n exactUsedKey: key,\n usedLng: lng,\n usedNS: namespace,\n usedParams: this.getUsedParamsDetails(opt)\n };\n }\n return `${namespace}${nsSeparator}${key}`;\n }\n if (returnDetails) {\n return {\n res: key,\n usedKey: key,\n exactUsedKey: key,\n usedLng: lng,\n usedNS: namespace,\n usedParams: this.getUsedParamsDetails(opt)\n };\n }\n return key;\n }\n const resolved = this.resolve(keys, opt);\n let res = resolved?.res;\n const resUsedKey = resolved?.usedKey || key;\n const resExactUsedKey = resolved?.exactUsedKey || key;\n const noObject = ['[object Number]', '[object Function]', '[object RegExp]'];\n const joinArrays = opt.joinArrays !== undefined ? opt.joinArrays : this.options.joinArrays;\n const handleAsObjectInI18nFormat = !this.i18nFormat || this.i18nFormat.handleAsObject;\n const needsPluralHandling = opt.count !== undefined && !isString(opt.count);\n const hasDefaultValue = Translator.hasDefaultValue(opt);\n const defaultValueSuffix = needsPluralHandling ? this.pluralResolver.getSuffix(lng, opt.count, opt) : '';\n const defaultValueSuffixOrdinalFallback = opt.ordinal && needsPluralHandling ? this.pluralResolver.getSuffix(lng, opt.count, {\n ordinal: false\n }) : '';\n const needsZeroSuffixLookup = needsPluralHandling && !opt.ordinal && opt.count === 0;\n const defaultValue = needsZeroSuffixLookup && opt[`defaultValue${this.options.pluralSeparator}zero`] || opt[`defaultValue${defaultValueSuffix}`] || opt[`defaultValue${defaultValueSuffixOrdinalFallback}`] || opt.defaultValue;\n let resForObjHndl = res;\n if (handleAsObjectInI18nFormat && !res && hasDefaultValue) {\n resForObjHndl = defaultValue;\n }\n const handleAsObject = shouldHandleAsObject(resForObjHndl);\n const resType = Object.prototype.toString.apply(resForObjHndl);\n if (handleAsObjectInI18nFormat && resForObjHndl && handleAsObject && !noObject.includes(resType) && !(isString(joinArrays) && Array.isArray(resForObjHndl))) {\n if (!opt.returnObjects && !this.options.returnObjects) {\n if (!this.options.returnedObjectHandler) {\n this.logger.warn('accessing an object - but returnObjects options is not enabled!');\n }\n const r = this.options.returnedObjectHandler ? this.options.returnedObjectHandler(resUsedKey, resForObjHndl, {\n ...opt,\n ns: namespaces\n }) : `key '${key} (${this.language})' returned an object instead of string.`;\n if (returnDetails) {\n resolved.res = r;\n resolved.usedParams = this.getUsedParamsDetails(opt);\n return resolved;\n }\n return r;\n }\n if (keySeparator) {\n const resTypeIsArray = Array.isArray(resForObjHndl);\n const copy = resTypeIsArray ? [] : {};\n const newKeyToUse = resTypeIsArray ? resExactUsedKey : resUsedKey;\n for (const m in resForObjHndl) {\n if (Object.prototype.hasOwnProperty.call(resForObjHndl, m)) {\n const deepKey = `${newKeyToUse}${keySeparator}${m}`;\n if (hasDefaultValue && !res) {\n copy[m] = this.translate(deepKey, {\n ...opt,\n defaultValue: shouldHandleAsObject(defaultValue) ? defaultValue[m] : undefined,\n ...{\n joinArrays: false,\n ns: namespaces\n }\n });\n } else {\n copy[m] = this.translate(deepKey, {\n ...opt,\n ...{\n joinArrays: false,\n ns: namespaces\n }\n });\n }\n if (copy[m] === deepKey) copy[m] = resForObjHndl[m];\n }\n }\n res = copy;\n }\n } else if (handleAsObjectInI18nFormat && isString(joinArrays) && Array.isArray(res)) {\n res = res.join(joinArrays);\n if (res) res = this.extendTranslation(res, keys, opt, lastKey);\n } else {\n let usedDefault = false;\n let usedKey = false;\n if (!this.isValidLookup(res) && hasDefaultValue) {\n usedDefault = true;\n res = defaultValue;\n }\n if (!this.isValidLookup(res)) {\n usedKey = true;\n res = key;\n }\n const missingKeyNoValueFallbackToKey = opt.missingKeyNoValueFallbackToKey || this.options.missingKeyNoValueFallbackToKey;\n const resForMissing = missingKeyNoValueFallbackToKey && usedKey ? undefined : res;\n const updateMissing = hasDefaultValue && defaultValue !== res && this.options.updateMissing;\n if (usedKey || usedDefault || updateMissing) {\n this.logger.log(updateMissing ? 'updateKey' : 'missingKey', lng, namespace, needsPluralHandling && !updateMissing ? `${key}${this.pluralResolver.getSuffix(lng, opt.count, opt)}` : key, updateMissing ? defaultValue : res);\n if (keySeparator) {\n const fk = this.resolve(key, {\n ...opt,\n keySeparator: false\n });\n if (fk && fk.res) this.logger.warn('Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.');\n }\n let lngs = [];\n const fallbackLngs = this.languageUtils.getFallbackCodes(this.options.fallbackLng, opt.lng || this.language);\n if (this.options.saveMissingTo === 'fallback' && fallbackLngs && fallbackLngs[0]) {\n for (let i = 0; i < fallbackLngs.length; i++) {\n lngs.push(fallbackLngs[i]);\n }\n } else if (this.options.saveMissingTo === 'all') {\n lngs = this.languageUtils.toResolveHierarchy(opt.lng || this.language);\n } else {\n lngs.push(opt.lng || this.language);\n }\n const send = (l, k, specificDefaultValue) => {\n const defaultForMissing = hasDefaultValue && specificDefaultValue !== res ? specificDefaultValue : resForMissing;\n if (this.options.missingKeyHandler) {\n this.options.missingKeyHandler(l, namespace, k, defaultForMissing, updateMissing, opt);\n } else if (this.backendConnector?.saveMissing) {\n this.backendConnector.saveMissing(l, namespace, k, defaultForMissing, updateMissing, opt);\n }\n this.emit('missingKey', l, namespace, k, res);\n };\n if (this.options.saveMissing) {\n if (this.options.saveMissingPlurals && needsPluralHandling) {\n lngs.forEach(language => {\n const suffixes = this.pluralResolver.getSuffixes(language, opt);\n if (needsZeroSuffixLookup && opt[`defaultValue${this.options.pluralSeparator}zero`] && !suffixes.includes(`${this.options.pluralSeparator}zero`)) {\n suffixes.push(`${this.options.pluralSeparator}zero`);\n }\n suffixes.forEach(suffix => {\n send([language], key + suffix, opt[`defaultValue${suffix}`] || defaultValue);\n });\n });\n } else {\n send(lngs, key, defaultValue);\n }\n }\n }\n res = this.extendTranslation(res, keys, opt, resolved, lastKey);\n if (usedKey && res === key && this.options.appendNamespaceToMissingKey) {\n res = `${namespace}${nsSeparator}${key}`;\n }\n if ((usedKey || usedDefault) && this.options.parseMissingKeyHandler) {\n res = this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey ? `${namespace}${nsSeparator}${key}` : key, usedDefault ? res : undefined, opt);\n }\n }\n if (returnDetails) {\n resolved.res = res;\n resolved.usedParams = this.getUsedParamsDetails(opt);\n return resolved;\n }\n return res;\n }\n extendTranslation(res, key, opt, resolved, lastKey) {\n if (this.i18nFormat?.parse) {\n res = this.i18nFormat.parse(res, {\n ...this.options.interpolation.defaultVariables,\n ...opt\n }, opt.lng || this.language || resolved.usedLng, resolved.usedNS, resolved.usedKey, {\n resolved\n });\n } else if (!opt.skipInterpolation) {\n if (opt.interpolation) this.interpolator.init({\n ...opt,\n ...{\n interpolation: {\n ...this.options.interpolation,\n ...opt.interpolation\n }\n }\n });\n const skipOnVariables = isString(res) && (opt?.interpolation?.skipOnVariables !== undefined ? opt.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables);\n let nestBef;\n if (skipOnVariables) {\n const nb = res.match(this.interpolator.nestingRegexp);\n nestBef = nb && nb.length;\n }\n let data = opt.replace && !isString(opt.replace) ? opt.replace : opt;\n if (this.options.interpolation.defaultVariables) data = {\n ...this.options.interpolation.defaultVariables,\n ...data\n };\n res = this.interpolator.interpolate(res, data, opt.lng || this.language || resolved.usedLng, opt);\n if (skipOnVariables) {\n const na = res.match(this.interpolator.nestingRegexp);\n const nestAft = na && na.length;\n if (nestBef < nestAft) opt.nest = false;\n }\n if (!opt.lng && resolved && resolved.res) opt.lng = this.language || resolved.usedLng;\n if (opt.nest !== false) res = this.interpolator.nest(res, (...args) => {\n if (lastKey?.[0] === args[0] && !opt.context) {\n this.logger.warn(`It seems you are nesting recursively key: ${args[0]} in key: ${key[0]}`);\n return null;\n }\n return this.translate(...args, key);\n }, opt);\n if (opt.interpolation) this.interpolator.reset();\n }\n const postProcess = opt.postProcess || this.options.postProcess;\n const postProcessorNames = isString(postProcess) ? [postProcess] : postProcess;\n if (res != null && postProcessorNames?.length && opt.applyPostProcessor !== false) {\n res = postProcessor.handle(postProcessorNames, res, key, this.options && this.options.postProcessPassResolved ? {\n i18nResolved: {\n ...resolved,\n usedParams: this.getUsedParamsDetails(opt)\n },\n ...opt\n } : opt, this);\n }\n return res;\n }\n resolve(keys, opt = {}) {\n let found;\n let usedKey;\n let exactUsedKey;\n let usedLng;\n let usedNS;\n if (isString(keys)) keys = [keys];\n if (Array.isArray(keys)) keys = keys.map(k => typeof k === 'function' ? keysFromSelector(k, {\n ...this.options,\n ...opt\n }) : k);\n keys.forEach(k => {\n if (this.isValidLookup(found)) return;\n const extracted = this.extractFromKey(k, opt);\n const key = extracted.key;\n usedKey = key;\n let namespaces = extracted.namespaces;\n if (this.options.fallbackNS) namespaces = namespaces.concat(this.options.fallbackNS);\n const needsPluralHandling = opt.count !== undefined && !isString(opt.count);\n const needsZeroSuffixLookup = needsPluralHandling && !opt.ordinal && opt.count === 0;\n const needsContextHandling = opt.context !== undefined && (isString(opt.context) || typeof opt.context === 'number') && opt.context !== '';\n const codes = opt.lngs ? opt.lngs : this.languageUtils.toResolveHierarchy(opt.lng || this.language, opt.fallbackLng);\n namespaces.forEach(ns => {\n if (this.isValidLookup(found)) return;\n usedNS = ns;\n if (!this.checkedLoadedFor[`${codes[0]}-${ns}`] && this.utils?.hasLoadedNamespace && !this.utils?.hasLoadedNamespace(usedNS)) {\n this.checkedLoadedFor[`${codes[0]}-${ns}`] = true;\n this.logger.warn(`key \"${usedKey}\" for languages \"${codes.join(', ')}\" won't get resolved as namespace \"${usedNS}\" was not yet loaded`, 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n }\n codes.forEach(code => {\n if (this.isValidLookup(found)) return;\n usedLng = code;\n const finalKeys = [key];\n if (this.i18nFormat?.addLookupKeys) {\n this.i18nFormat.addLookupKeys(finalKeys, key, code, ns, opt);\n } else {\n let pluralSuffix;\n if (needsPluralHandling) pluralSuffix = this.pluralResolver.getSuffix(code, opt.count, opt);\n const zeroSuffix = `${this.options.pluralSeparator}zero`;\n const ordinalPrefix = `${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;\n if (needsPluralHandling) {\n if (opt.ordinal && pluralSuffix.startsWith(ordinalPrefix)) {\n finalKeys.push(key + pluralSuffix.replace(ordinalPrefix, this.options.pluralSeparator));\n }\n finalKeys.push(key + pluralSuffix);\n if (needsZeroSuffixLookup) {\n finalKeys.push(key + zeroSuffix);\n }\n }\n if (needsContextHandling) {\n const contextKey = `${key}${this.options.contextSeparator || '_'}${opt.context}`;\n finalKeys.push(contextKey);\n if (needsPluralHandling) {\n if (opt.ordinal && pluralSuffix.startsWith(ordinalPrefix)) {\n finalKeys.push(contextKey + pluralSuffix.replace(ordinalPrefix, this.options.pluralSeparator));\n }\n finalKeys.push(contextKey + pluralSuffix);\n if (needsZeroSuffixLookup) {\n finalKeys.push(contextKey + zeroSuffix);\n }\n }\n }\n }\n let possibleKey;\n while (possibleKey = finalKeys.pop()) {\n if (!this.isValidLookup(found)) {\n exactUsedKey = possibleKey;\n found = this.getResource(code, ns, possibleKey, opt);\n }\n }\n });\n });\n });\n return {\n res: found,\n usedKey,\n exactUsedKey,\n usedLng,\n usedNS\n };\n }\n isValidLookup(res) {\n return res !== undefined && !(!this.options.returnNull && res === null) && !(!this.options.returnEmptyString && res === '');\n }\n getResource(code, ns, key, options = {}) {\n if (this.i18nFormat?.getResource) return this.i18nFormat.getResource(code, ns, key, options);\n return this.resourceStore.getResource(code, ns, key, options);\n }\n getUsedParamsDetails(options = {}) {\n const optionsKeys = ['defaultValue', 'ordinal', 'context', 'replace', 'lng', 'lngs', 'fallbackLng', 'ns', 'keySeparator', 'nsSeparator', 'returnObjects', 'returnDetails', 'joinArrays', 'postProcess', 'interpolation'];\n const useOptionsReplaceForData = options.replace && !isString(options.replace);\n let data = useOptionsReplaceForData ? options.replace : options;\n if (useOptionsReplaceForData && typeof options.count !== 'undefined') {\n data.count = options.count;\n }\n if (this.options.interpolation.defaultVariables) {\n data = {\n ...this.options.interpolation.defaultVariables,\n ...data\n };\n }\n if (!useOptionsReplaceForData) {\n data = {\n ...data\n };\n for (const key of optionsKeys) {\n delete data[key];\n }\n }\n return data;\n }\n static hasDefaultValue(options) {\n const prefix = 'defaultValue';\n for (const option in options) {\n if (Object.prototype.hasOwnProperty.call(options, option) && option.startsWith(prefix) && undefined !== options[option]) {\n return true;\n }\n }\n return false;\n }\n}\n\nclass LanguageUtil {\n constructor(options) {\n this.options = options;\n this.supportedLngs = this.options.supportedLngs || false;\n this.logger = baseLogger.create('languageUtils');\n }\n getScriptPartFromCode(code) {\n code = getCleanedCode(code);\n if (!code || !code.includes('-')) return null;\n const p = code.split('-');\n if (p.length === 2) return null;\n p.pop();\n if (p[p.length - 1].toLowerCase() === 'x') return null;\n return this.formatLanguageCode(p.join('-'));\n }\n getLanguagePartFromCode(code) {\n code = getCleanedCode(code);\n if (!code || !code.includes('-')) return code;\n const p = code.split('-');\n return this.formatLanguageCode(p[0]);\n }\n formatLanguageCode(code) {\n if (isString(code) && code.includes('-')) {\n let formattedCode;\n try {\n formattedCode = Intl.getCanonicalLocales(code)[0];\n } catch (e) {}\n if (formattedCode && this.options.lowerCaseLng) {\n formattedCode = formattedCode.toLowerCase();\n }\n if (formattedCode) return formattedCode;\n if (this.options.lowerCaseLng) {\n return code.toLowerCase();\n }\n return code;\n }\n return this.options.cleanCode || this.options.lowerCaseLng ? code.toLowerCase() : code;\n }\n isSupportedCode(code) {\n if (this.options.load === 'languageOnly' || this.options.nonExplicitSupportedLngs) {\n code = this.getLanguagePartFromCode(code);\n }\n return !this.supportedLngs || !this.supportedLngs.length || this.supportedLngs.includes(code);\n }\n getBestMatchFromCodes(codes) {\n if (!codes) return null;\n let found;\n codes.forEach(code => {\n if (found) return;\n const cleanedLng = this.formatLanguageCode(code);\n if (!this.options.supportedLngs || this.isSupportedCode(cleanedLng)) found = cleanedLng;\n });\n if (!found && this.options.supportedLngs) {\n codes.forEach(code => {\n if (found) return;\n const lngScOnly = this.getScriptPartFromCode(code);\n if (this.isSupportedCode(lngScOnly)) return found = lngScOnly;\n const lngOnly = this.getLanguagePartFromCode(code);\n if (this.isSupportedCode(lngOnly)) return found = lngOnly;\n found = this.options.supportedLngs.find(supportedLng => {\n if (supportedLng === lngOnly) return true;\n if (!supportedLng.includes('-') && !lngOnly.includes('-')) return false;\n if (supportedLng.includes('-') && !lngOnly.includes('-') && supportedLng.slice(0, supportedLng.indexOf('-')) === lngOnly) return true;\n if (supportedLng.startsWith(lngOnly) && lngOnly.length > 1) return true;\n return false;\n });\n });\n }\n if (!found) found = this.getFallbackCodes(this.options.fallbackLng)[0];\n return found;\n }\n getFallbackCodes(fallbacks, code) {\n if (!fallbacks) return [];\n if (typeof fallbacks === 'function') fallbacks = fallbacks(code);\n if (isString(fallbacks)) fallbacks = [fallbacks];\n if (Array.isArray(fallbacks)) return fallbacks;\n if (!code) return fallbacks.default || [];\n let found = fallbacks[code];\n if (!found) found = fallbacks[this.getScriptPartFromCode(code)];\n if (!found) found = fallbacks[this.formatLanguageCode(code)];\n if (!found) found = fallbacks[this.getLanguagePartFromCode(code)];\n if (!found) found = fallbacks.default;\n return found || [];\n }\n toResolveHierarchy(code, fallbackCode) {\n const fallbackCodes = this.getFallbackCodes((fallbackCode === false ? [] : fallbackCode) || this.options.fallbackLng || [], code);\n const codes = [];\n const addCode = c => {\n if (!c) return;\n if (this.isSupportedCode(c)) {\n codes.push(c);\n } else {\n this.logger.warn(`rejecting language code not found in supportedLngs: ${c}`);\n }\n };\n if (isString(code) && (code.includes('-') || code.includes('_'))) {\n if (this.options.load !== 'languageOnly') addCode(this.formatLanguageCode(code));\n if (this.options.load !== 'languageOnly' && this.options.load !== 'currentOnly') addCode(this.getScriptPartFromCode(code));\n if (this.options.load !== 'currentOnly') addCode(this.getLanguagePartFromCode(code));\n } else if (isString(code)) {\n addCode(this.formatLanguageCode(code));\n }\n fallbackCodes.forEach(fc => {\n if (!codes.includes(fc)) addCode(this.formatLanguageCode(fc));\n });\n return codes;\n }\n}\n\nconst suffixesOrder = {\n zero: 0,\n one: 1,\n two: 2,\n few: 3,\n many: 4,\n other: 5\n};\nconst dummyRule = {\n select: count => count === 1 ? 'one' : 'other',\n resolvedOptions: () => ({\n pluralCategories: ['one', 'other']\n })\n};\nclass PluralResolver {\n constructor(languageUtils, options = {}) {\n this.languageUtils = languageUtils;\n this.options = options;\n this.logger = baseLogger.create('pluralResolver');\n this.pluralRulesCache = {};\n }\n clearCache() {\n this.pluralRulesCache = {};\n }\n getRule(code, options = {}) {\n const cleanedCode = getCleanedCode(code === 'dev' ? 'en' : code);\n const type = options.ordinal ? 'ordinal' : 'cardinal';\n const cacheKey = JSON.stringify({\n cleanedCode,\n type\n });\n if (cacheKey in this.pluralRulesCache) {\n return this.pluralRulesCache[cacheKey];\n }\n let rule;\n try {\n rule = new Intl.PluralRules(cleanedCode, {\n type\n });\n } catch (err) {\n if (typeof Intl === 'undefined') {\n this.logger.error('No Intl support, please use an Intl polyfill!');\n return dummyRule;\n }\n if (!code.match(/-|_/)) return dummyRule;\n const lngPart = this.languageUtils.getLanguagePartFromCode(code);\n rule = this.getRule(lngPart, options);\n }\n this.pluralRulesCache[cacheKey] = rule;\n return rule;\n }\n needsPlural(code, options = {}) {\n let rule = this.getRule(code, options);\n if (!rule) rule = this.getRule('dev', options);\n return rule?.resolvedOptions().pluralCategories.length > 1;\n }\n getPluralFormsOfKey(code, key, options = {}) {\n return this.getSuffixes(code, options).map(suffix => `${key}${suffix}`);\n }\n getSuffixes(code, options = {}) {\n let rule = this.getRule(code, options);\n if (!rule) rule = this.getRule('dev', options);\n if (!rule) return [];\n return rule.resolvedOptions().pluralCategories.sort((pluralCategory1, pluralCategory2) => suffixesOrder[pluralCategory1] - suffixesOrder[pluralCategory2]).map(pluralCategory => `${this.options.prepend}${options.ordinal ? `ordinal${this.options.prepend}` : ''}${pluralCategory}`);\n }\n getSuffix(code, count, options = {}) {\n const rule = this.getRule(code, options);\n if (rule) {\n return `${this.options.prepend}${options.ordinal ? `ordinal${this.options.prepend}` : ''}${rule.select(count)}`;\n }\n this.logger.warn(`no plural rule found for: ${code}`);\n return this.getSuffix('dev', count, options);\n }\n}\n\nconst deepFindWithDefaults = (data, defaultData, key, keySeparator = '.', ignoreJSONStructure = true) => {\n let path = getPathWithDefaults(data, defaultData, key);\n if (!path && ignoreJSONStructure && isString(key)) {\n path = deepFind(data, key, keySeparator);\n if (path === undefined) path = deepFind(defaultData, key, keySeparator);\n }\n return path;\n};\nconst regexSafe = val => val.replace(/\\$/g, '$$$$');\nclass Interpolator {\n constructor(options = {}) {\n this.logger = baseLogger.create('interpolator');\n this.options = options;\n this.format = options?.interpolation?.format || (value => value);\n this.init(options);\n }\n init(options = {}) {\n if (!options.interpolation) options.interpolation = {\n escapeValue: true\n };\n const {\n escape: escape$1,\n escapeValue,\n useRawValueToEscape,\n prefix,\n prefixEscaped,\n suffix,\n suffixEscaped,\n formatSeparator,\n unescapeSuffix,\n unescapePrefix,\n nestingPrefix,\n nestingPrefixEscaped,\n nestingSuffix,\n nestingSuffixEscaped,\n nestingOptionsSeparator,\n maxReplaces,\n alwaysFormat\n } = options.interpolation;\n this.escape = escape$1 !== undefined ? escape$1 : escape;\n this.escapeValue = escapeValue !== undefined ? escapeValue : true;\n this.useRawValueToEscape = useRawValueToEscape !== undefined ? useRawValueToEscape : false;\n this.prefix = prefix ? regexEscape(prefix) : prefixEscaped || '{{';\n this.suffix = suffix ? regexEscape(suffix) : suffixEscaped || '}}';\n this.formatSeparator = formatSeparator || ',';\n this.unescapePrefix = unescapeSuffix ? '' : unescapePrefix ? regexEscape(unescapePrefix) : '-';\n this.unescapeSuffix = this.unescapePrefix ? '' : unescapeSuffix ? regexEscape(unescapeSuffix) : '';\n this.nestingPrefix = nestingPrefix ? regexEscape(nestingPrefix) : nestingPrefixEscaped || regexEscape('$t(');\n this.nestingSuffix = nestingSuffix ? regexEscape(nestingSuffix) : nestingSuffixEscaped || regexEscape(')');\n this.nestingOptionsSeparator = nestingOptionsSeparator || ',';\n this.maxReplaces = maxReplaces || 1000;\n this.alwaysFormat = alwaysFormat !== undefined ? alwaysFormat : false;\n this.resetRegExp();\n }\n reset() {\n if (this.options) this.init(this.options);\n }\n resetRegExp() {\n const getOrResetRegExp = (existingRegExp, pattern) => {\n if (existingRegExp?.source === pattern) {\n existingRegExp.lastIndex = 0;\n return existingRegExp;\n }\n return new RegExp(pattern, 'g');\n };\n this.regexp = getOrResetRegExp(this.regexp, `${this.prefix}(.+?)${this.suffix}`);\n this.regexpUnescape = getOrResetRegExp(this.regexpUnescape, `${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`);\n this.nestingRegexp = getOrResetRegExp(this.nestingRegexp, `${this.nestingPrefix}((?:[^()\"']+|\"[^\"]*\"|'[^']*'|\\\\((?:[^()]|\"[^\"]*\"|'[^']*')*\\\\))*?)${this.nestingSuffix}`);\n }\n interpolate(str, data, lng, options) {\n let match;\n let value;\n let replaces;\n const defaultData = this.options && this.options.interpolation && this.options.interpolation.defaultVariables || {};\n const handleFormat = key => {\n if (!key.includes(this.formatSeparator)) {\n const path = deepFindWithDefaults(data, defaultData, key, this.options.keySeparator, this.options.ignoreJSONStructure);\n return this.alwaysFormat ? this.format(path, undefined, lng, {\n ...options,\n ...data,\n interpolationkey: key\n }) : path;\n }\n const p = key.split(this.formatSeparator);\n const k = p.shift().trim();\n const f = p.join(this.formatSeparator).trim();\n return this.format(deepFindWithDefaults(data, defaultData, k, this.options.keySeparator, this.options.ignoreJSONStructure), f, lng, {\n ...options,\n ...data,\n interpolationkey: k\n });\n };\n this.resetRegExp();\n if (!this.escapeValue && typeof str === 'string' && /\\$t\\([^)]*\\{[^}]*\\{\\{/.test(str)) {\n this.logger.warn('nesting options string contains interpolated variables with escapeValue: false \u2014 ' + 'if any of those values are attacker-controlled they can inject additional ' + 'nesting options (e.g. redirect lng/ns). Sanitise untrusted input before passing ' + 'it to t(), or keep escapeValue: true.');\n }\n const missingInterpolationHandler = options?.missingInterpolationHandler || this.options.missingInterpolationHandler;\n const skipOnVariables = options?.interpolation?.skipOnVariables !== undefined ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables;\n const todos = [{\n regex: this.regexpUnescape,\n safeValue: val => regexSafe(val)\n }, {\n regex: this.regexp,\n safeValue: val => this.escapeValue ? regexSafe(this.escape(val)) : regexSafe(val)\n }];\n todos.forEach(todo => {\n replaces = 0;\n while (match = todo.regex.exec(str)) {\n const matchedVar = match[1].trim();\n value = handleFormat(matchedVar);\n if (value === undefined) {\n if (typeof missingInterpolationHandler === 'function') {\n const temp = missingInterpolationHandler(str, match, options);\n value = isString(temp) ? temp : '';\n } else if (options && Object.prototype.hasOwnProperty.call(options, matchedVar)) {\n value = '';\n } else if (skipOnVariables) {\n value = match[0];\n continue;\n } else {\n this.logger.warn(`missed to pass in variable ${matchedVar} for interpolating ${str}`);\n value = '';\n }\n } else if (!isString(value) && !this.useRawValueToEscape) {\n value = makeString(value);\n }\n const safeValue = todo.safeValue(value);\n str = str.replace(match[0], safeValue);\n if (skipOnVariables) {\n todo.regex.lastIndex += value.length;\n todo.regex.lastIndex -= match[0].length;\n } else {\n todo.regex.lastIndex = 0;\n }\n replaces++;\n if (replaces >= this.maxReplaces) {\n break;\n }\n }\n });\n return str;\n }\n nest(str, fc, options = {}) {\n let match;\n let value;\n let clonedOptions;\n const handleHasOptions = (key, inheritedOptions) => {\n const sep = this.nestingOptionsSeparator;\n if (!key.includes(sep)) return key;\n const c = key.split(new RegExp(`${regexEscape(sep)}[ ]*{`));\n let optionsString = `{${c[1]}`;\n key = c[0];\n optionsString = this.interpolate(optionsString, clonedOptions);\n const matchedSingleQuotes = optionsString.match(/'/g);\n const matchedDoubleQuotes = optionsString.match(/\"/g);\n if ((matchedSingleQuotes?.length ?? 0) % 2 === 0 && !matchedDoubleQuotes || (matchedDoubleQuotes?.length ?? 0) % 2 !== 0) {\n optionsString = optionsString.replace(/'/g, '\"');\n }\n try {\n clonedOptions = JSON.parse(optionsString);\n if (inheritedOptions) clonedOptions = {\n ...inheritedOptions,\n ...clonedOptions\n };\n } catch (e) {\n this.logger.warn(`failed parsing options string in nesting for key ${key}`, e);\n return `${key}${sep}${optionsString}`;\n }\n if (clonedOptions.defaultValue && clonedOptions.defaultValue.includes(this.prefix)) delete clonedOptions.defaultValue;\n return key;\n };\n while (match = this.nestingRegexp.exec(str)) {\n let formatters = [];\n clonedOptions = {\n ...options\n };\n clonedOptions = clonedOptions.replace && !isString(clonedOptions.replace) ? clonedOptions.replace : clonedOptions;\n clonedOptions.applyPostProcessor = false;\n delete clonedOptions.defaultValue;\n const keyEndIndex = /{.*}/.test(match[1]) ? match[1].lastIndexOf('}') + 1 : match[1].indexOf(this.formatSeparator);\n if (keyEndIndex !== -1) {\n formatters = match[1].slice(keyEndIndex).split(this.formatSeparator).map(elem => elem.trim()).filter(Boolean);\n match[1] = match[1].slice(0, keyEndIndex);\n }\n value = fc(handleHasOptions.call(this, match[1].trim(), clonedOptions), clonedOptions);\n if (value && match[0] === str && !isString(value)) return value;\n if (!isString(value)) value = makeString(value);\n if (!value) {\n this.logger.warn(`missed to resolve ${match[1]} for nesting ${str}`);\n value = '';\n }\n if (formatters.length) {\n value = formatters.reduce((v, f) => this.format(v, f, options.lng, {\n ...options,\n interpolationkey: match[1].trim()\n }), value.trim());\n }\n str = str.replace(match[0], value);\n this.regexp.lastIndex = 0;\n }\n return str;\n }\n}\n\nconst parseFormatStr = formatStr => {\n let formatName = formatStr.toLowerCase().trim();\n const formatOptions = {};\n if (formatStr.includes('(')) {\n const p = formatStr.split('(');\n formatName = p[0].toLowerCase().trim();\n const optStr = p[1].slice(0, -1);\n if (formatName === 'currency' && !optStr.includes(':')) {\n if (!formatOptions.currency) formatOptions.currency = optStr.trim();\n } else if (formatName === 'relativetime' && !optStr.includes(':')) {\n if (!formatOptions.range) formatOptions.range = optStr.trim();\n } else {\n const opts = optStr.split(';');\n opts.forEach(opt => {\n if (opt) {\n const [key, ...rest] = opt.split(':');\n const val = rest.join(':').trim().replace(/^'+|'+$/g, '');\n const trimmedKey = key.trim();\n if (!formatOptions[trimmedKey]) formatOptions[trimmedKey] = val;\n if (val === 'false') formatOptions[trimmedKey] = false;\n if (val === 'true') formatOptions[trimmedKey] = true;\n if (!isNaN(val)) formatOptions[trimmedKey] = parseInt(val, 10);\n }\n });\n }\n }\n return {\n formatName,\n formatOptions\n };\n};\nconst createCachedFormatter = fn => {\n const cache = {};\n return (v, l, o) => {\n let optForCache = o;\n if (o && o.interpolationkey && o.formatParams && o.formatParams[o.interpolationkey] && o[o.interpolationkey]) {\n optForCache = {\n ...optForCache,\n [o.interpolationkey]: undefined\n };\n }\n const key = l + JSON.stringify(optForCache);\n let frm = cache[key];\n if (!frm) {\n frm = fn(getCleanedCode(l), o);\n cache[key] = frm;\n }\n return frm(v);\n };\n};\nconst createNonCachedFormatter = fn => (v, l, o) => fn(getCleanedCode(l), o)(v);\nclass Formatter {\n constructor(options = {}) {\n this.logger = baseLogger.create('formatter');\n this.options = options;\n this.init(options);\n }\n init(services, options = {\n interpolation: {}\n }) {\n this.formatSeparator = options.interpolation.formatSeparator || ',';\n const cf = options.cacheInBuiltFormats ? createCachedFormatter : createNonCachedFormatter;\n this.formats = {\n number: cf((lng, opt) => {\n const formatter = new Intl.NumberFormat(lng, {\n ...opt\n });\n return val => formatter.format(val);\n }),\n currency: cf((lng, opt) => {\n const formatter = new Intl.NumberFormat(lng, {\n ...opt,\n style: 'currency'\n });\n return val => formatter.format(val);\n }),\n datetime: cf((lng, opt) => {\n const formatter = new Intl.DateTimeFormat(lng, {\n ...opt\n });\n return val => formatter.format(val);\n }),\n relativetime: cf((lng, opt) => {\n const formatter = new Intl.RelativeTimeFormat(lng, {\n ...opt\n });\n return val => formatter.format(val, opt.range || 'day');\n }),\n list: cf((lng, opt) => {\n const formatter = new Intl.ListFormat(lng, {\n ...opt\n });\n return val => formatter.format(val);\n })\n };\n }\n add(name, fc) {\n this.formats[name.toLowerCase().trim()] = fc;\n }\n addCached(name, fc) {\n this.formats[name.toLowerCase().trim()] = createCachedFormatter(fc);\n }\n format(value, format, lng, options = {}) {\n if (!format) return value;\n if (value == null) return value;\n const formats = format.split(this.formatSeparator);\n if (formats.length > 1 && formats[0].indexOf('(') > 1 && !formats[0].includes(')') && formats.find(f => f.includes(')'))) {\n const lastIndex = formats.findIndex(f => f.includes(')'));\n formats[0] = [formats[0], ...formats.splice(1, lastIndex)].join(this.formatSeparator);\n }\n const result = formats.reduce((mem, f) => {\n const {\n formatName,\n formatOptions\n } = parseFormatStr(f);\n if (this.formats[formatName]) {\n let formatted = mem;\n try {\n const valOptions = options?.formatParams?.[options.interpolationkey] || {};\n const l = valOptions.locale || valOptions.lng || options.locale || options.lng || lng;\n formatted = this.formats[formatName](mem, l, {\n ...formatOptions,\n ...options,\n ...valOptions\n });\n } catch (error) {\n this.logger.warn(error);\n }\n return formatted;\n } else {\n this.logger.warn(`there was no format function for ${formatName}`);\n }\n return mem;\n }, value);\n return result;\n }\n}\n\nconst removePending = (q, name) => {\n if (q.pending[name] !== undefined) {\n delete q.pending[name];\n q.pendingCount--;\n }\n};\nclass Connector extends EventEmitter {\n constructor(backend, store, services, options = {}) {\n super();\n this.backend = backend;\n this.store = store;\n this.services = services;\n this.languageUtils = services.languageUtils;\n this.options = options;\n this.logger = baseLogger.create('backendConnector');\n this.waitingReads = [];\n this.maxParallelReads = options.maxParallelReads || 10;\n this.readingCalls = 0;\n this.maxRetries = options.maxRetries >= 0 ? options.maxRetries : 5;\n this.retryTimeout = options.retryTimeout >= 1 ? options.retryTimeout : 350;\n this.state = {};\n this.queue = [];\n this.backend?.init?.(services, options.backend, options);\n }\n queueLoad(languages, namespaces, options, callback) {\n const toLoad = {};\n const pending = {};\n const toLoadLanguages = {};\n const toLoadNamespaces = {};\n languages.forEach(lng => {\n let hasAllNamespaces = true;\n namespaces.forEach(ns => {\n const name = `${lng}|${ns}`;\n if (!options.reload && this.store.hasResourceBundle(lng, ns)) {\n this.state[name] = 2;\n } else if (this.state[name] < 0) ; else if (this.state[name] === 1) {\n if (pending[name] === undefined) pending[name] = true;\n } else {\n this.state[name] = 1;\n hasAllNamespaces = false;\n if (pending[name] === undefined) pending[name] = true;\n if (toLoad[name] === undefined) toLoad[name] = true;\n if (toLoadNamespaces[ns] === undefined) toLoadNamespaces[ns] = true;\n }\n });\n if (!hasAllNamespaces) toLoadLanguages[lng] = true;\n });\n if (Object.keys(toLoad).length || Object.keys(pending).length) {\n this.queue.push({\n pending,\n pendingCount: Object.keys(pending).length,\n loaded: {},\n errors: [],\n callback\n });\n }\n return {\n toLoad: Object.keys(toLoad),\n pending: Object.keys(pending),\n toLoadLanguages: Object.keys(toLoadLanguages),\n toLoadNamespaces: Object.keys(toLoadNamespaces)\n };\n }\n loaded(name, err, data) {\n const s = name.split('|');\n const lng = s[0];\n const ns = s[1];\n if (err) this.emit('failedLoading', lng, ns, err);\n if (!err && data) {\n this.store.addResourceBundle(lng, ns, data, undefined, undefined, {\n skipCopy: true\n });\n }\n this.state[name] = err ? -1 : 2;\n if (err && data) this.state[name] = 0;\n const loaded = {};\n this.queue.forEach(q => {\n pushPath(q.loaded, [lng], ns);\n removePending(q, name);\n if (err) q.errors.push(err);\n if (q.pendingCount === 0 && !q.done) {\n Object.keys(q.loaded).forEach(l => {\n if (!loaded[l]) loaded[l] = {};\n const loadedKeys = q.loaded[l];\n if (loadedKeys.length) {\n loadedKeys.forEach(n => {\n if (loaded[l][n] === undefined) loaded[l][n] = true;\n });\n }\n });\n q.done = true;\n if (q.errors.length) {\n q.callback(q.errors);\n } else {\n q.callback();\n }\n }\n });\n this.emit('loaded', loaded);\n this.queue = this.queue.filter(q => !q.done);\n }\n read(lng, ns, fcName, tried = 0, wait = this.retryTimeout, callback) {\n if (!lng.length) return callback(null, {});\n if (this.readingCalls >= this.maxParallelReads) {\n this.waitingReads.push({\n lng,\n ns,\n fcName,\n tried,\n wait,\n callback\n });\n return;\n }\n this.readingCalls++;\n const resolver = (err, data) => {\n this.readingCalls--;\n if (this.waitingReads.length > 0) {\n const next = this.waitingReads.shift();\n this.read(next.lng, next.ns, next.fcName, next.tried, next.wait, next.callback);\n }\n if (err && data && tried < this.maxRetries) {\n setTimeout(() => {\n this.read(lng, ns, fcName, tried + 1, wait * 2, callback);\n }, wait);\n return;\n }\n callback(err, data);\n };\n const fc = this.backend[fcName].bind(this.backend);\n if (fc.length === 2) {\n try {\n const r = fc(lng, ns);\n if (r && typeof r.then === 'function') {\n r.then(data => resolver(null, data)).catch(resolver);\n } else {\n resolver(null, r);\n }\n } catch (err) {\n resolver(err);\n }\n return;\n }\n return fc(lng, ns, resolver);\n }\n prepareLoading(languages, namespaces, options = {}, callback) {\n if (!this.backend) {\n this.logger.warn('No backend was added via i18next.use. Will not load resources.');\n return callback && callback();\n }\n if (isString(languages)) languages = this.languageUtils.toResolveHierarchy(languages);\n if (isString(namespaces)) namespaces = [namespaces];\n const toLoad = this.queueLoad(languages, namespaces, options, callback);\n if (!toLoad.toLoad.length) {\n if (!toLoad.pending.length) callback();\n return null;\n }\n toLoad.toLoad.forEach(name => {\n this.loadOne(name);\n });\n }\n load(languages, namespaces, callback) {\n this.prepareLoading(languages, namespaces, {}, callback);\n }\n reload(languages, namespaces, callback) {\n this.prepareLoading(languages, namespaces, {\n reload: true\n }, callback);\n }\n loadOne(name, prefix = '') {\n const s = name.split('|');\n const lng = s[0];\n const ns = s[1];\n this.read(lng, ns, 'read', undefined, undefined, (err, data) => {\n if (err) this.logger.warn(`${prefix}loading namespace ${ns} for language ${lng} failed`, err);\n if (!err && data) this.logger.log(`${prefix}loaded namespace ${ns} for language ${lng}`, data);\n this.loaded(name, err, data);\n });\n }\n saveMissing(languages, namespace, key, fallbackValue, isUpdate, options = {}, clb = () => {}) {\n if (this.services?.utils?.hasLoadedNamespace && !this.services?.utils?.hasLoadedNamespace(namespace)) {\n this.logger.warn(`did not save key \"${key}\" as the namespace \"${namespace}\" was not yet loaded`, 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n return;\n }\n if (key === undefined || key === null || key === '') return;\n if (this.backend?.create) {\n const opts = {\n ...options,\n isUpdate\n };\n const fc = this.backend.create.bind(this.backend);\n if (fc.length < 6) {\n try {\n let r;\n if (fc.length === 5) {\n r = fc(languages, namespace, key, fallbackValue, opts);\n } else {\n r = fc(languages, namespace, key, fallbackValue);\n }\n if (r && typeof r.then === 'function') {\n r.then(data => clb(null, data)).catch(clb);\n } else {\n clb(null, r);\n }\n } catch (err) {\n clb(err);\n }\n } else {\n fc(languages, namespace, key, fallbackValue, clb, opts);\n }\n }\n if (!languages || !languages[0]) return;\n this.store.addResource(languages[0], namespace, key, fallbackValue);\n }\n}\n\nconst get = () => ({\n debug: false,\n initAsync: true,\n ns: ['translation'],\n defaultNS: ['translation'],\n fallbackLng: ['dev'],\n fallbackNS: false,\n supportedLngs: false,\n nonExplicitSupportedLngs: false,\n load: 'all',\n preload: false,\n keySeparator: '.',\n nsSeparator: ':',\n pluralSeparator: '_',\n contextSeparator: '_',\n enableSelector: false,\n partialBundledLanguages: false,\n saveMissing: false,\n updateMissing: false,\n saveMissingTo: 'fallback',\n saveMissingPlurals: true,\n missingKeyHandler: false,\n missingInterpolationHandler: false,\n postProcess: false,\n postProcessPassResolved: false,\n returnNull: false,\n returnEmptyString: true,\n returnObjects: false,\n joinArrays: false,\n returnedObjectHandler: false,\n parseMissingKeyHandler: false,\n appendNamespaceToMissingKey: false,\n appendNamespaceToCIMode: false,\n overloadTranslationOptionHandler: args => {\n let ret = {};\n if (typeof args[1] === 'object') ret = args[1];\n if (isString(args[1])) ret.defaultValue = args[1];\n if (isString(args[2])) ret.tDescription = args[2];\n if (typeof args[2] === 'object' || typeof args[3] === 'object') {\n const options = args[3] || args[2];\n Object.keys(options).forEach(key => {\n ret[key] = options[key];\n });\n }\n return ret;\n },\n interpolation: {\n escapeValue: true,\n prefix: '{{',\n suffix: '}}',\n formatSeparator: ',',\n unescapePrefix: '-',\n nestingPrefix: '$t(',\n nestingSuffix: ')',\n nestingOptionsSeparator: ',',\n maxReplaces: 1000,\n skipOnVariables: true\n },\n cacheInBuiltFormats: true\n});\nconst transformOptions = options => {\n if (isString(options.ns)) options.ns = [options.ns];\n if (isString(options.fallbackLng)) options.fallbackLng = [options.fallbackLng];\n if (isString(options.fallbackNS)) options.fallbackNS = [options.fallbackNS];\n if (options.supportedLngs && !options.supportedLngs.includes('cimode')) {\n options.supportedLngs = options.supportedLngs.concat(['cimode']);\n }\n return options;\n};\n\nconst noop = () => {};\nconst bindMemberFunctions = inst => {\n const mems = Object.getOwnPropertyNames(Object.getPrototypeOf(inst));\n mems.forEach(mem => {\n if (typeof inst[mem] === 'function') {\n inst[mem] = inst[mem].bind(inst);\n }\n });\n};\nclass I18n extends EventEmitter {\n constructor(options = {}, callback) {\n super();\n this.options = transformOptions(options);\n this.services = {};\n this.logger = baseLogger;\n this.modules = {\n external: []\n };\n bindMemberFunctions(this);\n if (callback && !this.isInitialized && !options.isClone) {\n if (!this.options.initAsync) {\n this.init(options, callback);\n return this;\n }\n setTimeout(() => {\n this.init(options, callback);\n }, 0);\n }\n }\n init(options = {}, callback) {\n this.isInitializing = true;\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n if (options.defaultNS == null && options.ns) {\n if (isString(options.ns)) {\n options.defaultNS = options.ns;\n } else if (!options.ns.includes('translation')) {\n options.defaultNS = options.ns[0];\n }\n }\n const defOpts = get();\n this.options = {\n ...defOpts,\n ...this.options,\n ...transformOptions(options)\n };\n this.options.interpolation = {\n ...defOpts.interpolation,\n ...this.options.interpolation\n };\n if (options.keySeparator !== undefined) {\n this.options.userDefinedKeySeparator = options.keySeparator;\n }\n if (options.nsSeparator !== undefined) {\n this.options.userDefinedNsSeparator = options.nsSeparator;\n }\n if (typeof this.options.overloadTranslationOptionHandler !== 'function') {\n this.options.overloadTranslationOptionHandler = defOpts.overloadTranslationOptionHandler;\n }\n const createClassOnDemand = ClassOrObject => {\n if (!ClassOrObject) return null;\n if (typeof ClassOrObject === 'function') return new ClassOrObject();\n return ClassOrObject;\n };\n if (!this.options.isClone) {\n if (this.modules.logger) {\n baseLogger.init(createClassOnDemand(this.modules.logger), this.options);\n } else {\n baseLogger.init(null, this.options);\n }\n let formatter;\n if (this.modules.formatter) {\n formatter = this.modules.formatter;\n } else {\n formatter = Formatter;\n }\n const lu = new LanguageUtil(this.options);\n this.store = new ResourceStore(this.options.resources, this.options);\n const s = this.services;\n s.logger = baseLogger;\n s.resourceStore = this.store;\n s.languageUtils = lu;\n s.pluralResolver = new PluralResolver(lu, {\n prepend: this.options.pluralSeparator\n });\n if (formatter) {\n s.formatter = createClassOnDemand(formatter);\n if (s.formatter.init) s.formatter.init(s, this.options);\n this.options.interpolation.format = s.formatter.format.bind(s.formatter);\n }\n s.interpolator = new Interpolator(this.options);\n s.utils = {\n hasLoadedNamespace: this.hasLoadedNamespace.bind(this)\n };\n s.backendConnector = new Connector(createClassOnDemand(this.modules.backend), s.resourceStore, s, this.options);\n s.backendConnector.on('*', (event, ...args) => {\n this.emit(event, ...args);\n });\n if (this.modules.languageDetector) {\n s.languageDetector = createClassOnDemand(this.modules.languageDetector);\n if (s.languageDetector.init) s.languageDetector.init(s, this.options.detection, this.options);\n }\n if (this.modules.i18nFormat) {\n s.i18nFormat = createClassOnDemand(this.modules.i18nFormat);\n if (s.i18nFormat.init) s.i18nFormat.init(this);\n }\n this.translator = new Translator(this.services, this.options);\n this.translator.on('*', (event, ...args) => {\n this.emit(event, ...args);\n });\n this.modules.external.forEach(m => {\n if (m.init) m.init(this);\n });\n }\n this.format = this.options.interpolation.format;\n if (!callback) callback = noop;\n if (this.options.fallbackLng && !this.services.languageDetector && !this.options.lng) {\n const codes = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n if (codes.length > 0 && codes[0] !== 'dev') this.options.lng = codes[0];\n }\n if (!this.services.languageDetector && !this.options.lng) {\n this.logger.warn('init: no languageDetector is used and no lng is defined');\n }\n const storeApi = ['getResource', 'hasResourceBundle', 'getResourceBundle', 'getDataByLanguage'];\n storeApi.forEach(fcName => {\n this[fcName] = (...args) => this.store[fcName](...args);\n });\n const storeApiChained = ['addResource', 'addResources', 'addResourceBundle', 'removeResourceBundle'];\n storeApiChained.forEach(fcName => {\n this[fcName] = (...args) => {\n this.store[fcName](...args);\n return this;\n };\n });\n const deferred = defer();\n const load = () => {\n const finish = (err, t) => {\n this.isInitializing = false;\n if (this.isInitialized && !this.initializedStoreOnce) this.logger.warn('init: i18next is already initialized. You should call init just once!');\n this.isInitialized = true;\n if (!this.options.isClone) this.logger.log('initialized', this.options);\n this.emit('initialized', this.options);\n deferred.resolve(t);\n callback(err, t);\n };\n if ((this.languages || this.isLanguageChangingTo) && !this.isInitialized) return finish(null, this.t.bind(this));\n this.changeLanguage(this.options.lng, finish);\n };\n if (this.options.resources || !this.options.initAsync) {\n load();\n } else {\n setTimeout(load, 0);\n }\n return deferred;\n }\n loadResources(language, callback = noop) {\n let usedCallback = callback;\n const usedLng = isString(language) ? language : this.language;\n if (typeof language === 'function') usedCallback = language;\n if (!this.options.resources || this.options.partialBundledLanguages) {\n if (usedLng?.toLowerCase() === 'cimode' && (!this.options.preload || this.options.preload.length === 0)) return usedCallback();\n const toLoad = [];\n const append = lng => {\n if (!lng) return;\n if (lng === 'cimode') return;\n const lngs = this.services.languageUtils.toResolveHierarchy(lng);\n lngs.forEach(l => {\n if (l === 'cimode') return;\n if (!toLoad.includes(l)) toLoad.push(l);\n });\n };\n if (!usedLng) {\n const fallbacks = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n fallbacks.forEach(l => append(l));\n } else {\n append(usedLng);\n }\n this.options.preload?.forEach?.(l => append(l));\n this.services.backendConnector.load(toLoad, this.options.ns, e => {\n if (!e && !this.resolvedLanguage && this.language) this.setResolvedLanguage(this.language);\n usedCallback(e);\n });\n } else {\n usedCallback(null);\n }\n }\n reloadResources(lngs, ns, callback) {\n const deferred = defer();\n if (typeof lngs === 'function') {\n callback = lngs;\n lngs = undefined;\n }\n if (typeof ns === 'function') {\n callback = ns;\n ns = undefined;\n }\n if (!lngs) lngs = this.languages;\n if (!ns) ns = this.options.ns;\n if (!callback) callback = noop;\n this.services.backendConnector.reload(lngs, ns, err => {\n deferred.resolve();\n callback(err);\n });\n return deferred;\n }\n use(module) {\n if (!module) throw new Error('You are passing an undefined module! Please check the object you are passing to i18next.use()');\n if (!module.type) throw new Error('You are passing a wrong module! Please check the object you are passing to i18next.use()');\n if (module.type === 'backend') {\n this.modules.backend = module;\n }\n if (module.type === 'logger' || module.log && module.warn && module.error) {\n this.modules.logger = module;\n }\n if (module.type === 'languageDetector') {\n this.modules.languageDetector = module;\n }\n if (module.type === 'i18nFormat') {\n this.modules.i18nFormat = module;\n }\n if (module.type === 'postProcessor') {\n postProcessor.addPostProcessor(module);\n }\n if (module.type === 'formatter') {\n this.modules.formatter = module;\n }\n if (module.type === '3rdParty') {\n this.modules.external.push(module);\n }\n return this;\n }\n setResolvedLanguage(l) {\n if (!l || !this.languages) return;\n if (['cimode', 'dev'].includes(l)) return;\n for (let li = 0; li < this.languages.length; li++) {\n const lngInLngs = this.languages[li];\n if (['cimode', 'dev'].includes(lngInLngs)) continue;\n if (this.store.hasLanguageSomeTranslations(lngInLngs)) {\n this.resolvedLanguage = lngInLngs;\n break;\n }\n }\n if (!this.resolvedLanguage && !this.languages.includes(l) && this.store.hasLanguageSomeTranslations(l)) {\n this.resolvedLanguage = l;\n this.languages.unshift(l);\n }\n }\n changeLanguage(lng, callback) {\n this.isLanguageChangingTo = lng;\n const deferred = defer();\n this.emit('languageChanging', lng);\n const setLngProps = l => {\n this.language = l;\n this.languages = this.services.languageUtils.toResolveHierarchy(l);\n this.resolvedLanguage = undefined;\n this.setResolvedLanguage(l);\n };\n const done = (err, l) => {\n if (l) {\n if (this.isLanguageChangingTo === lng) {\n setLngProps(l);\n this.translator.changeLanguage(l);\n this.isLanguageChangingTo = undefined;\n this.emit('languageChanged', l);\n this.logger.log('languageChanged', l);\n }\n } else {\n this.isLanguageChangingTo = undefined;\n }\n deferred.resolve((...args) => this.t(...args));\n if (callback) callback(err, (...args) => this.t(...args));\n };\n const setLng = lngs => {\n if (!lng && !lngs && this.services.languageDetector) lngs = [];\n const fl = isString(lngs) ? lngs : lngs && lngs[0];\n const l = this.store.hasLanguageSomeTranslations(fl) ? fl : this.services.languageUtils.getBestMatchFromCodes(isString(lngs) ? [lngs] : lngs);\n if (l) {\n if (!this.language) {\n setLngProps(l);\n }\n if (!this.translator.language) this.translator.changeLanguage(l);\n this.services.languageDetector?.cacheUserLanguage?.(l);\n }\n this.loadResources(l, err => {\n done(err, l);\n });\n };\n if (!lng && this.services.languageDetector && !this.services.languageDetector.async) {\n setLng(this.services.languageDetector.detect());\n } else if (!lng && this.services.languageDetector && this.services.languageDetector.async) {\n if (this.services.languageDetector.detect.length === 0) {\n this.services.languageDetector.detect().then(setLng);\n } else {\n this.services.languageDetector.detect(setLng);\n }\n } else {\n setLng(lng);\n }\n return deferred;\n }\n getFixedT(lng, ns, keyPrefix, fixedOpts) {\n const scopeNs = fixedOpts?.scopeNs;\n const fixedT = (key, opts, ...rest) => {\n let o;\n if (typeof opts !== 'object') {\n o = this.options.overloadTranslationOptionHandler([key, opts].concat(rest));\n } else {\n o = {\n ...opts\n };\n }\n o.lng = o.lng || fixedT.lng;\n o.lngs = o.lngs || fixedT.lngs;\n const explicitCallNs = o.ns !== undefined && o.ns !== null;\n o.ns = o.ns || fixedT.ns;\n if (o.keyPrefix !== '') o.keyPrefix = o.keyPrefix || keyPrefix || fixedT.keyPrefix;\n const selectorOpts = {\n ...this.options,\n ...o\n };\n if (Array.isArray(scopeNs) && !explicitCallNs) selectorOpts.ns = scopeNs;\n if (typeof o.keyPrefix === 'function') o.keyPrefix = keysFromSelector(o.keyPrefix, selectorOpts);\n const keySeparator = this.options.keySeparator || '.';\n let resultKey;\n if (o.keyPrefix && Array.isArray(key)) {\n resultKey = key.map(k => {\n if (typeof k === 'function') k = keysFromSelector(k, selectorOpts);\n return `${o.keyPrefix}${keySeparator}${k}`;\n });\n } else {\n if (typeof key === 'function') key = keysFromSelector(key, selectorOpts);\n resultKey = o.keyPrefix ? `${o.keyPrefix}${keySeparator}${key}` : key;\n }\n return this.t(resultKey, o);\n };\n if (isString(lng)) {\n fixedT.lng = lng;\n } else {\n fixedT.lngs = lng;\n }\n fixedT.ns = ns;\n fixedT.keyPrefix = keyPrefix;\n return fixedT;\n }\n t(...args) {\n return this.translator?.translate(...args);\n }\n exists(...args) {\n return this.translator?.exists(...args);\n }\n setDefaultNamespace(ns) {\n this.options.defaultNS = ns;\n }\n hasLoadedNamespace(ns, options = {}) {\n if (!this.isInitialized) {\n this.logger.warn('hasLoadedNamespace: i18next was not initialized', this.languages);\n return false;\n }\n if (!this.languages || !this.languages.length) {\n this.logger.warn('hasLoadedNamespace: i18n.languages were undefined or empty', this.languages);\n return false;\n }\n const lng = options.lng || this.resolvedLanguage || this.languages[0];\n const fallbackLng = this.options ? this.options.fallbackLng : false;\n const lastLng = this.languages[this.languages.length - 1];\n if (lng.toLowerCase() === 'cimode') return true;\n const loadNotPending = (l, n) => {\n const loadState = this.services.backendConnector.state[`${l}|${n}`];\n return loadState === -1 || loadState === 0 || loadState === 2;\n };\n if (options.precheck) {\n const preResult = options.precheck(this, loadNotPending);\n if (preResult !== undefined) return preResult;\n }\n if (this.hasResourceBundle(lng, ns)) return true;\n if (!this.services.backendConnector.backend || this.options.resources && !this.options.partialBundledLanguages) return true;\n if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true;\n return false;\n }\n loadNamespaces(ns, callback) {\n const deferred = defer();\n if (!this.options.ns) {\n if (callback) callback();\n return Promise.resolve();\n }\n if (isString(ns)) ns = [ns];\n ns.forEach(n => {\n if (!this.options.ns.includes(n)) this.options.ns.push(n);\n });\n this.loadResources(err => {\n deferred.resolve();\n if (callback) callback(err);\n });\n return deferred;\n }\n loadLanguages(lngs, callback) {\n const deferred = defer();\n if (isString(lngs)) lngs = [lngs];\n const preloaded = this.options.preload || [];\n const newLngs = lngs.filter(lng => !preloaded.includes(lng) && this.services.languageUtils.isSupportedCode(lng));\n if (!newLngs.length) {\n if (callback) callback();\n return Promise.resolve();\n }\n this.options.preload = preloaded.concat(newLngs);\n this.loadResources(err => {\n deferred.resolve();\n if (callback) callback(err);\n });\n return deferred;\n }\n dir(lng) {\n if (!lng) lng = this.resolvedLanguage || (this.languages?.length > 0 ? this.languages[0] : this.language);\n if (!lng) return 'rtl';\n try {\n const l = new Intl.Locale(lng);\n if (l && l.getTextInfo) {\n const ti = l.getTextInfo();\n if (ti && ti.direction) return ti.direction;\n }\n } catch (e) {}\n const rtlLngs = ['ar', 'shu', 'sqr', 'ssh', 'xaa', 'yhd', 'yud', 'aao', 'abh', 'abv', 'acm', 'acq', 'acw', 'acx', 'acy', 'adf', 'ads', 'aeb', 'aec', 'afb', 'ajp', 'apc', 'apd', 'arb', 'arq', 'ars', 'ary', 'arz', 'auz', 'avl', 'ayh', 'ayl', 'ayn', 'ayp', 'bbz', 'pga', 'he', 'iw', 'ps', 'pbt', 'pbu', 'pst', 'prp', 'prd', 'ug', 'ur', 'ydd', 'yds', 'yih', 'ji', 'yi', 'hbo', 'men', 'xmn', 'fa', 'jpr', 'peo', 'pes', 'prs', 'dv', 'sam', 'ckb'];\n const languageUtils = this.services?.languageUtils || new LanguageUtil(get());\n if (lng.toLowerCase().indexOf('-latn') > 1) return 'ltr';\n return rtlLngs.includes(languageUtils.getLanguagePartFromCode(lng)) || lng.toLowerCase().indexOf('-arab') > 1 ? 'rtl' : 'ltr';\n }\n static createInstance(options = {}, callback) {\n const instance = new I18n(options, callback);\n instance.createInstance = I18n.createInstance;\n return instance;\n }\n cloneInstance(options = {}, callback = noop) {\n const forkResourceStore = options.forkResourceStore;\n if (forkResourceStore) delete options.forkResourceStore;\n const mergedOptions = {\n ...this.options,\n ...options,\n ...{\n isClone: true\n }\n };\n const clone = new I18n(mergedOptions);\n if (options.debug !== undefined || options.prefix !== undefined) {\n clone.logger = clone.logger.clone(options);\n }\n const membersToCopy = ['store', 'services', 'language'];\n membersToCopy.forEach(m => {\n clone[m] = this[m];\n });\n clone.services = {\n ...this.services\n };\n clone.services.utils = {\n hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n };\n if (forkResourceStore) {\n const clonedData = Object.keys(this.store.data).reduce((prev, l) => {\n prev[l] = {\n ...this.store.data[l]\n };\n prev[l] = Object.keys(prev[l]).reduce((acc, n) => {\n acc[n] = {\n ...prev[l][n]\n };\n return acc;\n }, prev[l]);\n return prev;\n }, {});\n clone.store = new ResourceStore(clonedData, mergedOptions);\n clone.services.resourceStore = clone.store;\n }\n if (options.interpolation) {\n const defOpts = get();\n const mergedInterpolation = {\n ...defOpts.interpolation,\n ...this.options.interpolation,\n ...options.interpolation\n };\n const mergedForInterpolator = {\n ...mergedOptions,\n interpolation: mergedInterpolation\n };\n clone.services.interpolator = new Interpolator(mergedForInterpolator);\n }\n clone.translator = new Translator(clone.services, mergedOptions);\n clone.translator.on('*', (event, ...args) => {\n clone.emit(event, ...args);\n });\n clone.init(mergedOptions, callback);\n clone.translator.options = mergedOptions;\n clone.translator.backendConnector.services.utils = {\n hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n };\n return clone;\n }\n toJSON() {\n return {\n options: this.options,\n store: this.store,\n language: this.language,\n languages: this.languages,\n resolvedLanguage: this.resolvedLanguage\n };\n }\n}\nconst instance = I18n.createInstance();\n\nconst createInstance = instance.createInstance;\nconst dir = instance.dir;\nconst init = instance.init;\nconst loadResources = instance.loadResources;\nconst reloadResources = instance.reloadResources;\nconst use = instance.use;\nconst changeLanguage = instance.changeLanguage;\nconst getFixedT = instance.getFixedT;\nconst t = instance.t;\nconst exists = instance.exists;\nconst setDefaultNamespace = instance.setDefaultNamespace;\nconst hasLoadedNamespace = instance.hasLoadedNamespace;\nconst loadNamespaces = instance.loadNamespaces;\nconst loadLanguages = instance.loadLanguages;\n\nexport { changeLanguage, createInstance, instance as default, dir, exists, getFixedT, hasLoadedNamespace, init, keysFromSelector as keyFromSelector, loadLanguages, loadNamespaces, loadResources, reloadResources, setDefaultNamespace, t, use };\n", "function _classCallCheck(a, n) {\n if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\");\n}\nexport { _classCallCheck as default };", "function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nexport { _typeof as default };", "import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };", "import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };", "import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperties(e, r) {\n for (var t = 0; t < r.length; t++) {\n var o = r[t];\n o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, toPropertyKey(o.key), o);\n }\n}\nfunction _createClass(e, r, t) {\n return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", {\n writable: !1\n }), e;\n}\nexport { _createClass as default };", "import _classCallCheck from '@babel/runtime/helpers/esm/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/esm/createClass';\n\nvar arr = [];\nvar each = arr.forEach;\nvar slice = arr.slice;\nfunction defaults(obj) {\n each.call(slice.call(arguments, 1), function (source) {\n if (source) {\n for (var prop in source) {\n if (obj[prop] === undefined) obj[prop] = source[prop];\n }\n }\n });\n return obj;\n}\nfunction createClassOnDemand(ClassOrObject) {\n if (!ClassOrObject) return null;\n if (typeof ClassOrObject === 'function') return new ClassOrObject();\n return ClassOrObject;\n}\n\nfunction getDefaults() {\n return {\n handleEmptyResourcesAsFailed: true,\n cacheHitMode: 'none',\n retryOnFailure: false\n // reloadInterval: typeof window !== 'undefined' ? false : 60 * 60 * 1000\n // refreshExpirationTime: 60 * 60 * 1000\n };\n}\nfunction handleCorrectReadFunction(backend, language, namespace, resolver) {\n var fc = backend.read.bind(backend);\n if (fc.length === 2) {\n // no callback\n try {\n var r = fc(language, namespace);\n if (r && typeof r.then === 'function') {\n // promise\n r.then(function (data) {\n return resolver(null, data);\n })[\"catch\"](resolver);\n } else {\n // sync\n resolver(null, r);\n }\n } catch (err) {\n resolver(err);\n }\n return;\n }\n\n // normal with callback\n fc(language, namespace, resolver);\n}\nvar Backend = /*#__PURE__*/function () {\n function Backend(services) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var i18nextOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _classCallCheck(this, Backend);\n this.backends = [];\n this.type = 'backend';\n this.allOptions = i18nextOptions;\n this.init(services, options);\n }\n return _createClass(Backend, [{\n key: \"init\",\n value: function init(services) {\n var _this = this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var i18nextOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n this.services = services;\n this.options = defaults(options, this.options || {}, getDefaults());\n this.allOptions = i18nextOptions;\n if (this.options.backends && this.options.backends.length > 1 && (this.allOptions.saveMissing || this.allOptions.updateMissing)) {\n if (this.services && this.services.logger) {\n this.services.logger.warn('i18next-chained-backend: Using multiple backends in combination with saveMissing/updateMissing is not recommended, as it may trigger based on stale data.');\n }\n }\n this.options.backends && this.options.backends.forEach(function (b, i) {\n _this.backends[i] = _this.backends[i] || createClassOnDemand(b);\n _this.backends[i].init(services, _this.options.backendOptions && _this.options.backendOptions[i] || {}, i18nextOptions);\n });\n if (this.services && this.options.reloadInterval) {\n setInterval(function () {\n return _this.reload();\n }, this.options.reloadInterval);\n }\n }\n }, {\n key: \"read\",\n value: function read(language, namespace, callback) {\n var _this2 = this;\n var bLen = this.backends.length;\n var _loadPosition = function loadPosition(pos) {\n if (pos >= bLen) return callback(new Error('non of the backend loaded data'), _this2.options.retryOnFailure); // failed, signal retry to i18next only if explicitly enabled\n var isLastBackend = pos === bLen - 1;\n var lengthCheckAmount = _this2.options.handleEmptyResourcesAsFailed && !isLastBackend ? 0 : -1;\n var backend = _this2.backends[pos];\n if (backend.read) {\n handleCorrectReadFunction(backend, language, namespace, function (err, data, savedAt) {\n if (!err && data && Object.keys(data).length > lengthCheckAmount) {\n callback(null, data, pos);\n _savePosition(pos - 1, data); // save one in front\n if (backend.save && _this2.options.cacheHitMode && ['refresh', 'refreshAndUpdateStore'].indexOf(_this2.options.cacheHitMode) > -1) {\n if (savedAt && _this2.options.refreshExpirationTime && savedAt + _this2.options.refreshExpirationTime > Date.now()) return;\n var nextBackend = _this2.backends[pos + 1];\n if (nextBackend && nextBackend.read) {\n handleCorrectReadFunction(nextBackend, language, namespace, function (err, data) {\n if (err) return;\n if (!data) return;\n if (Object.keys(data).length <= lengthCheckAmount) return;\n _savePosition(pos, data);\n if (_this2.options.cacheHitMode !== 'refreshAndUpdateStore') return;\n if (_this2.services && _this2.services.resourceStore) {\n _this2.services.resourceStore.addResourceBundle(language, namespace, data);\n }\n });\n }\n }\n } else {\n _loadPosition(pos + 1); // try load from next\n }\n });\n } else {\n _loadPosition(pos + 1); // try load from next\n }\n };\n var _savePosition = function savePosition(pos, data) {\n if (pos < 0) return;\n var backend = _this2.backends[pos];\n if (backend.save) {\n backend.save(language, namespace, data);\n _savePosition(pos - 1, data);\n } else {\n _savePosition(pos - 1, data);\n }\n };\n _loadPosition(0);\n }\n }, {\n key: \"create\",\n value: function create(languages, namespace, key, fallbackValue) {\n var clb = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : function () {};\n var opts = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n this.backends.forEach(function (b) {\n if (!b.create) return;\n var fc = b.create.bind(b);\n if (fc.length < 6) {\n // no callback\n try {\n var r;\n if (fc.length === 5) {\n // future callback-less api for i18next-locize-backend\n r = fc(languages, namespace, key, fallbackValue, opts);\n } else {\n r = fc(languages, namespace, key, fallbackValue);\n }\n if (r && typeof r.then === 'function') {\n // promise\n r.then(function (data) {\n return clb(null, data);\n })[\"catch\"](clb);\n } else {\n // sync\n clb(null, r);\n }\n } catch (err) {\n clb(err);\n }\n return;\n }\n\n // normal with callback\n fc(languages, namespace, key, fallbackValue, clb /* unused callback */, opts);\n });\n }\n }, {\n key: \"reload\",\n value: function reload() {\n var _this3 = this;\n var _this$services = this.services,\n backendConnector = _this$services.backendConnector,\n languageUtils = _this$services.languageUtils,\n logger = _this$services.logger;\n var currentLanguage = backendConnector.language;\n if (currentLanguage && currentLanguage.toLowerCase() === 'cimode') return; // avoid loading resources for cimode\n\n var toLoad = [];\n var append = function append(lng) {\n var lngs = languageUtils.toResolveHierarchy(lng);\n lngs.forEach(function (l) {\n if (toLoad.indexOf(l) < 0) toLoad.push(l);\n });\n };\n append(currentLanguage);\n if (this.allOptions.preload) this.allOptions.preload.forEach(function (l) {\n return append(l);\n });\n toLoad.forEach(function (lng) {\n _this3.allOptions.ns.forEach(function (ns) {\n backendConnector.read(lng, ns, 'read', null, null, function (err, data) {\n if (err) logger.warn(\"loading namespace \".concat(ns, \" for language \").concat(lng, \" failed\"), err);\n if (!err && data) logger.log(\"loaded namespace \".concat(ns, \" for language \").concat(lng), data);\n backendConnector.loaded(\"\".concat(lng, \"|\").concat(ns), err, data);\n });\n });\n });\n }\n }]);\n}();\nBackend.type = 'backend';\n\nexport { Backend as default };\n", "//#region lib/utils.js\nconst arr = [];\narr.forEach;\narr.slice;\nconst UNSAFE_KEYS$1 = [\n\t\"__proto__\",\n\t\"constructor\",\n\t\"prototype\"\n];\nfunction isSafeUrlSegmentBase(v) {\n\tif (typeof v !== \"string\") return false;\n\tif (v.length === 0 || v.length > 128) return false;\n\tif (UNSAFE_KEYS$1.indexOf(v) > -1) return false;\n\tif (v.indexOf(\"..\") > -1) return false;\n\tif (v.indexOf(\"\\\\\") > -1) return false;\n\tif (/[?#%\\s@]/.test(v)) return false;\n\tif (/[\\x00-\\x1F\\x7F]/.test(v)) return false;\n\treturn true;\n}\nfunction isSafeLangUrlSegment(v) {\n\tif (!isSafeUrlSegmentBase(v)) return false;\n\tif (v.indexOf(\"/\") > -1) return false;\n\treturn true;\n}\nfunction isSafeNsUrlSegment(v) {\n\treturn isSafeUrlSegmentBase(v);\n}\nconst SAFETY_CHECK_BY_KEY = {\n\tlng: isSafeLangUrlSegment,\n\tns: isSafeNsUrlSegment\n};\nfunction sanitizeLogValue(v) {\n\tif (typeof v !== \"string\") return v;\n\treturn v.replace(/[\\r\\n\\x00-\\x1F\\x7F]/g, \" \");\n}\nfunction redactUrlCredentials(u) {\n\tif (typeof u !== \"string\" || u.length === 0) return u;\n\ttry {\n\t\tconst parsed = new URL(u);\n\t\tif (parsed.username || parsed.password) {\n\t\t\tparsed.username = \"\";\n\t\t\tparsed.password = \"\";\n\t\t\treturn parsed.toString();\n\t\t}\n\t\treturn u;\n\t} catch (e) {\n\t\treturn u.replace(/(\\/\\/)[^/@\\s]+@/g, \"$1\");\n\t}\n}\nfunction hasXMLHttpRequest() {\n\treturn typeof XMLHttpRequest === \"function\" || typeof XMLHttpRequest === \"object\";\n}\n/**\n* Determine whether the given `maybePromise` is a Promise.\n*\n* @param {*} maybePromise\n*\n* @returns {Boolean}\n*/\nfunction isPromise(maybePromise) {\n\treturn !!maybePromise && typeof maybePromise.then === \"function\";\n}\n/**\n* Convert any value to a Promise than will resolve to this value.\n*\n* @param {*} maybePromise\n*\n* @returns {Promise}\n*/\nfunction makePromise(maybePromise) {\n\tif (isPromise(maybePromise)) return maybePromise;\n\treturn Promise.resolve(maybePromise);\n}\nconst interpolationRegexp = /\\{\\{(.+?)\\}\\}/g;\nfunction interpolateUrl(str, data) {\n\tlet unsafe = false;\n\tconst result = str.replace(interpolationRegexp, (match, key) => {\n\t\tconst k = key.trim();\n\t\tif (UNSAFE_KEYS$1.indexOf(k) > -1) return match;\n\t\tconst value = data[k];\n\t\tif (value == null) return match;\n\t\tconst check = SAFETY_CHECK_BY_KEY[k] || isSafeLangUrlSegment;\n\t\tconst segments = String(value).split(\"+\");\n\t\tfor (const seg of segments) if (!check(seg)) {\n\t\t\tunsafe = true;\n\t\t\treturn match;\n\t\t}\n\t\treturn segments.join(\"+\");\n\t});\n\treturn unsafe ? null : result;\n}\n//#endregion\n//#region lib/request.js\nconst g = typeof globalThis !== \"undefined\" ? globalThis : typeof global !== \"undefined\" ? global : typeof window !== \"undefined\" ? window : void 0;\nlet fetchApi;\nif (typeof fetch === \"function\") fetchApi = fetch;\nelse if (g && typeof g.fetch === \"function\") fetchApi = g.fetch;\nconst XmlHttpRequestApi = hasXMLHttpRequest() && g ? g.XMLHttpRequest : void 0;\nconst ActiveXObjectApi = typeof ActiveXObject === \"function\" && g ? g.ActiveXObject : void 0;\nconst UNSAFE_KEYS = [\n\t\"__proto__\",\n\t\"constructor\",\n\t\"prototype\"\n];\nconst addQueryString = (url, params) => {\n\tif (params && typeof params === \"object\") {\n\t\tlet queryString = \"\";\n\t\tfor (const paramName of Object.keys(params)) {\n\t\t\tif (UNSAFE_KEYS.indexOf(paramName) > -1) continue;\n\t\t\tqueryString += \"&\" + encodeURIComponent(paramName) + \"=\" + encodeURIComponent(params[paramName]);\n\t\t}\n\t\tif (!queryString) return url;\n\t\turl = url + (url.indexOf(\"?\") !== -1 ? \"&\" : \"?\") + queryString.slice(1);\n\t}\n\treturn url;\n};\nconst fetchIt = (url, fetchOptions, callback, altFetch) => {\n\tconst resolver = (response) => {\n\t\tif (!response.ok) return callback(response.statusText || \"Error\", { status: response.status });\n\t\tresponse.text().then((data) => {\n\t\t\tcallback(null, {\n\t\t\t\tstatus: response.status,\n\t\t\t\tdata\n\t\t\t});\n\t\t}).catch(callback);\n\t};\n\tif (altFetch) {\n\t\tconst altResponse = altFetch(url, fetchOptions);\n\t\tif (altResponse instanceof Promise) {\n\t\t\taltResponse.then(resolver).catch(callback);\n\t\t\treturn;\n\t\t}\n\t}\n\tif (typeof fetch === \"function\") fetch(url, fetchOptions).then(resolver).catch(callback);\n\telse fetchApi(url, fetchOptions).then(resolver).catch(callback);\n};\nconst requestWithFetch = (options, url, payload, callback) => {\n\tif (options.queryStringParams) url = addQueryString(url, options.queryStringParams);\n\tconst headers = { ...typeof options.customHeaders === \"function\" ? options.customHeaders() : options.customHeaders };\n\tif (typeof window === \"undefined\" && typeof global !== \"undefined\" && typeof global.process !== \"undefined\" && global.process.versions && global.process.versions.node) headers[\"User-Agent\"] = `i18next-http-backend (node/${global.process.version}; ${global.process.platform} ${global.process.arch})`;\n\tif (payload) headers[\"Content-Type\"] = \"application/json\";\n\tconst reqOptions = typeof options.requestOptions === \"function\" ? options.requestOptions(payload) : options.requestOptions;\n\tconst fetchOptions = {\n\t\tmethod: payload ? \"POST\" : \"GET\",\n\t\tbody: payload ? options.stringify(payload) : void 0,\n\t\theaders,\n\t\t...options._omitFetchOptions ? {} : reqOptions\n\t};\n\tconst altFetch = typeof options.alternateFetch === \"function\" && options.alternateFetch.length >= 1 ? options.alternateFetch : void 0;\n\ttry {\n\t\tfetchIt(url, fetchOptions, callback, altFetch);\n\t} catch (e) {\n\t\tif (!reqOptions || Object.keys(reqOptions).length === 0 || !e.message || e.message.indexOf(\"not implemented\") < 0) return callback(e);\n\t\ttry {\n\t\t\tObject.keys(reqOptions).forEach((opt) => {\n\t\t\t\tdelete fetchOptions[opt];\n\t\t\t});\n\t\t\tfetchIt(url, fetchOptions, callback, altFetch);\n\t\t\toptions._omitFetchOptions = true;\n\t\t} catch (err) {\n\t\t\tcallback(err);\n\t\t}\n\t}\n};\nconst requestWithXmlHttpRequest = (options, url, payload, callback) => {\n\tif (payload && typeof payload === \"object\") payload = addQueryString(\"\", payload).slice(1);\n\tif (options.queryStringParams) url = addQueryString(url, options.queryStringParams);\n\ttry {\n\t\tconst x = XmlHttpRequestApi ? new XmlHttpRequestApi() : new ActiveXObjectApi(\"MSXML2.XMLHTTP.3.0\");\n\t\tx.open(payload ? \"POST\" : \"GET\", url, 1);\n\t\tif (!options.crossDomain) x.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n\t\tx.withCredentials = !!options.withCredentials;\n\t\tif (payload) x.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\n\t\tif (x.overrideMimeType) x.overrideMimeType(\"application/json\");\n\t\tlet h = options.customHeaders;\n\t\th = typeof h === \"function\" ? h() : h;\n\t\tif (h) for (const i of Object.keys(h)) {\n\t\t\tif (UNSAFE_KEYS.indexOf(i) > -1) continue;\n\t\t\tx.setRequestHeader(i, h[i]);\n\t\t}\n\t\tx.onreadystatechange = () => {\n\t\t\tx.readyState > 3 && callback(x.status >= 400 ? x.statusText : null, {\n\t\t\t\tstatus: x.status,\n\t\t\t\tdata: x.responseText\n\t\t\t});\n\t\t};\n\t\tx.send(payload);\n\t} catch (e) {\n\t\tconsole && console.log(e);\n\t}\n};\nconst request = (options, url, payload, callback) => {\n\tif (typeof payload === \"function\") {\n\t\tcallback = payload;\n\t\tpayload = void 0;\n\t}\n\tcallback = callback || (() => {});\n\tif (fetchApi && url.indexOf(\"file:\") !== 0) return requestWithFetch(options, url, payload, callback);\n\tif (hasXMLHttpRequest() || typeof ActiveXObject === \"function\") return requestWithXmlHttpRequest(options, url, payload, callback);\n\tcallback(/* @__PURE__ */ new Error(\"No fetch and no xhr implementation found!\"));\n};\n//#endregion\n//#region lib/index.js\nconst getDefaults = () => {\n\treturn {\n\t\tloadPath: \"/locales/{{lng}}/{{ns}}.json\",\n\t\taddPath: \"/locales/add/{{lng}}/{{ns}}\",\n\t\tparse: (data) => JSON.parse(data),\n\t\tstringify: JSON.stringify,\n\t\tparsePayload: (namespace, key, fallbackValue) => ({ [key]: fallbackValue || \"\" }),\n\t\tparseLoadPayload: (languages, namespaces) => void 0,\n\t\trequest,\n\t\treloadInterval: typeof window !== \"undefined\" ? false : 3600 * 1e3,\n\t\tcustomHeaders: {},\n\t\tqueryStringParams: {},\n\t\tcrossDomain: false,\n\t\twithCredentials: false,\n\t\toverrideMimeType: false,\n\t\trequestOptions: {\n\t\t\tmode: \"cors\",\n\t\t\tcredentials: \"same-origin\",\n\t\t\tcache: \"default\"\n\t\t}\n\t};\n};\nvar Backend = class {\n\tconstructor(services, options = {}, allOptions = {}) {\n\t\tthis.services = services;\n\t\tthis.options = options;\n\t\tthis.allOptions = allOptions;\n\t\tthis.type = \"backend\";\n\t\tthis.init(services, options, allOptions);\n\t}\n\tinit(services, options = {}, allOptions = {}) {\n\t\tthis.services = services;\n\t\tthis.options = {\n\t\t\t...getDefaults(),\n\t\t\t...this.options || {},\n\t\t\t...options\n\t\t};\n\t\tthis.allOptions = allOptions;\n\t\tif (this.services && this.options.reloadInterval) {\n\t\t\tconst timer = setInterval(() => this.reload(), this.options.reloadInterval);\n\t\t\tif (typeof timer === \"object\" && typeof timer.unref === \"function\") timer.unref();\n\t\t}\n\t}\n\treadMulti(languages, namespaces, callback) {\n\t\tthis._readAny(languages, languages, namespaces, namespaces, callback);\n\t}\n\tread(language, namespace, callback) {\n\t\tthis._readAny([language], language, [namespace], namespace, callback);\n\t}\n\t_readAny(languages, loadUrlLanguages, namespaces, loadUrlNamespaces, callback) {\n\t\tlet loadPath = this.options.loadPath;\n\t\tif (typeof this.options.loadPath === \"function\") loadPath = this.options.loadPath(languages, namespaces);\n\t\tloadPath = makePromise(loadPath);\n\t\tloadPath.then((resolvedLoadPath) => {\n\t\t\tif (!resolvedLoadPath) return callback(null, {});\n\t\t\tconst url = interpolateUrl(resolvedLoadPath, {\n\t\t\t\tlng: languages.join(\"+\"),\n\t\t\t\tns: namespaces.join(\"+\")\n\t\t\t});\n\t\t\tif (url == null) {\n\t\t\t\tconst safeLngs = languages.map(sanitizeLogValue).join(\", \");\n\t\t\t\tconst safeNss = namespaces.map(sanitizeLogValue).join(\", \");\n\t\t\t\treturn callback(/* @__PURE__ */ new Error(\"i18next-http-backend: unsafe lng/ns value \u2014 refusing to build request URL for languages=[\" + safeLngs + \"] namespaces=[\" + safeNss + \"]\"), false);\n\t\t\t}\n\t\t\tthis.loadUrl(url, callback, loadUrlLanguages, loadUrlNamespaces);\n\t\t});\n\t}\n\tloadUrl(url, callback, languages, namespaces) {\n\t\tconst lng = typeof languages === \"string\" ? [languages] : languages;\n\t\tconst ns = typeof namespaces === \"string\" ? [namespaces] : namespaces;\n\t\tconst payload = this.options.parseLoadPayload(lng, ns);\n\t\tconst safeUrl = sanitizeLogValue(redactUrlCredentials(url));\n\t\tthis.options.request(this.options, url, payload, (err, res) => {\n\t\t\tif (res && (res.status >= 500 && res.status < 600 || !res.status)) return callback(\"failed loading \" + safeUrl + \"; status code: \" + res.status, true);\n\t\t\tif (res && res.status >= 400 && res.status < 500) return callback(\"failed loading \" + safeUrl + \"; status code: \" + res.status, false);\n\t\t\tif (!res && err && err.message) {\n\t\t\t\tconst errorMessage = err.message.toLowerCase();\n\t\t\t\tif ([\n\t\t\t\t\t\"failed\",\n\t\t\t\t\t\"fetch\",\n\t\t\t\t\t\"network\",\n\t\t\t\t\t\"load\"\n\t\t\t\t].find((term) => errorMessage.indexOf(term) > -1)) return callback(\"failed loading \" + safeUrl + \": \" + sanitizeLogValue(err.message), true);\n\t\t\t}\n\t\t\tif (err) return callback(err, false);\n\t\t\tlet ret, parseErr;\n\t\t\ttry {\n\t\t\t\tif (typeof res.data === \"string\") ret = this.options.parse(res.data, languages, namespaces);\n\t\t\t\telse ret = res.data;\n\t\t\t} catch (e) {\n\t\t\t\tparseErr = \"failed parsing \" + safeUrl + \" to json\";\n\t\t\t}\n\t\t\tif (parseErr) return callback(parseErr, false);\n\t\t\tcallback(null, ret);\n\t\t});\n\t}\n\tcreate(languages, namespace, key, fallbackValue, callback) {\n\t\tif (!this.options.addPath) return;\n\t\tif (typeof languages === \"string\") languages = [languages];\n\t\tconst payload = this.options.parsePayload(namespace, key, fallbackValue);\n\t\tlet finished = 0;\n\t\tconst dataArray = [];\n\t\tconst resArray = [];\n\t\tlanguages.forEach((lng) => {\n\t\t\tlet addPath = this.options.addPath;\n\t\t\tif (typeof this.options.addPath === \"function\") addPath = this.options.addPath(lng, namespace);\n\t\t\tconst url = interpolateUrl(addPath, {\n\t\t\t\tlng,\n\t\t\t\tns: namespace\n\t\t\t});\n\t\t\tif (url == null) {\n\t\t\t\tfinished += 1;\n\t\t\t\tif (callback && finished === languages.length) callback(dataArray, resArray);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.options.request(this.options, url, payload, (data, res) => {\n\t\t\t\tfinished += 1;\n\t\t\t\tdataArray.push(data);\n\t\t\t\tresArray.push(res);\n\t\t\t\tif (finished === languages.length) {\n\t\t\t\t\tif (typeof callback === \"function\") callback(dataArray, resArray);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\treload() {\n\t\tconst { backendConnector, languageUtils, logger } = this.services;\n\t\tconst currentLanguage = backendConnector.language;\n\t\tif (currentLanguage && currentLanguage.toLowerCase() === \"cimode\") return;\n\t\tconst toLoad = [];\n\t\tconst append = (lng) => {\n\t\t\tlanguageUtils.toResolveHierarchy(lng).forEach((l) => {\n\t\t\t\tif (toLoad.indexOf(l) < 0) toLoad.push(l);\n\t\t\t});\n\t\t};\n\t\tappend(currentLanguage);\n\t\tif (this.allOptions.preload) this.allOptions.preload.forEach((l) => append(l));\n\t\ttoLoad.forEach((lng) => {\n\t\t\tthis.allOptions.ns.forEach((ns) => {\n\t\t\t\tbackendConnector.read(lng, ns, \"read\", null, null, (err, data) => {\n\t\t\t\t\tif (err) logger.warn(`loading namespace ${ns} for language ${lng} failed`, err);\n\t\t\t\t\tif (!err && data) logger.log(`loaded namespace ${ns} for language ${lng}`, data);\n\t\t\t\t\tbackendConnector.loaded(`${lng}|${ns}`, err, data);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t}\n};\nBackend.type = \"backend\";\n//#endregion\nexport { Backend as default };\n", "import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperty(e, r, t) {\n return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nexport { _defineProperty as default };", "import _defineProperty from '@babel/runtime/helpers/esm/defineProperty';\nimport _classCallCheck from '@babel/runtime/helpers/esm/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/esm/createClass';\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n/* eslint-disable max-classes-per-file */\nvar Storage = /*#__PURE__*/function () {\n function Storage(options) {\n _classCallCheck(this, Storage);\n this.store = options.store;\n }\n return _createClass(Storage, [{\n key: \"setItem\",\n value: function setItem(key, value) {\n if (this.store) {\n try {\n this.store.setItem(key, value);\n } catch (e) {\n // f.log('failed to set value for key \"' + key + '\" to localStorage.');\n }\n }\n }\n }, {\n key: \"getItem\",\n value: function getItem(key, value) {\n if (this.store) {\n try {\n return this.store.getItem(key, value);\n } catch (e) {\n // f.log('failed to get value for key \"' + key + '\" from localStorage.');\n }\n }\n return undefined;\n }\n }]);\n}();\nfunction getDefaults() {\n var store = null;\n try {\n store = window.localStorage;\n } catch (e) {\n if (typeof window !== 'undefined') {\n console.log('Failed to load local storage.', e);\n }\n }\n return {\n prefix: 'i18next_res_',\n expirationTime: 7 * 24 * 60 * 60 * 1000,\n defaultVersion: undefined,\n getVersion: undefined,\n versions: {},\n store: store\n };\n}\nvar Cache = /*#__PURE__*/function () {\n function Cache(services) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _classCallCheck(this, Cache);\n this.init(services, options);\n this.type = 'backend';\n }\n return _createClass(Cache, [{\n key: \"init\",\n value: function init(services) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.services = services;\n this.options = _objectSpread(_objectSpread(_objectSpread({}, getDefaults()), this.options), options);\n this.storage = new Storage(this.options);\n }\n }, {\n key: \"read\",\n value: function read(language, namespace, callback) {\n var nowMS = Date.now();\n if (!this.storage.store) {\n return callback(null, null);\n }\n var local = this.storage.getItem(\"\".concat(this.options.prefix).concat(language, \"-\").concat(namespace));\n if (local) {\n local = JSON.parse(local);\n var version = this.getVersion(language, namespace);\n if (\n // expiration field is mandatory, and should not be expired\n local.i18nStamp && local.i18nStamp + this.options.expirationTime > nowMS &&\n // there should be no language version set, or if it is, it should match the one in translation\n version === local.i18nVersion) {\n var i18nStamp = local.i18nStamp;\n delete local.i18nVersion;\n delete local.i18nStamp;\n return callback(null, local, i18nStamp);\n }\n }\n return callback(null, null);\n }\n }, {\n key: \"save\",\n value: function save(language, namespace, data) {\n if (this.storage.store) {\n data.i18nStamp = Date.now();\n\n // language version (if set)\n var version = this.getVersion(language, namespace);\n if (version) {\n data.i18nVersion = version;\n }\n\n // save\n this.storage.setItem(\"\".concat(this.options.prefix).concat(language, \"-\").concat(namespace), JSON.stringify(data));\n }\n }\n }, {\n key: \"getVersion\",\n value: function getVersion(language, namespace) {\n var _this$options$getVers, _this$options;\n return ((_this$options$getVers = (_this$options = this.options).getVersion) === null || _this$options$getVers === void 0 ? void 0 : _this$options$getVers.call(_this$options, language, namespace)) || this.options.versions[language] || this.options.defaultVersion;\n }\n }]);\n}();\nCache.type = 'backend';\n\nexport { Cache as default };\n", "import { useContext } from 'react';\nimport { nodesToString, Trans as TransWithoutContext } from './TransWithoutContext.js';\nimport { getI18n, I18nContext } from './context.js';\nexport { nodesToString };\nexport function Trans({\n children,\n count,\n parent,\n i18nKey,\n context,\n tOptions = {},\n values,\n defaults,\n components,\n ns,\n i18n: i18nFromProps,\n t: tFromProps,\n shouldUnescape,\n ...additionalProps\n}) {\n const {\n i18n: i18nFromContext,\n defaultNS: defaultNSFromContext\n } = useContext(I18nContext) || {};\n const i18n = i18nFromProps || i18nFromContext || getI18n();\n const t = tFromProps || i18n?.t.bind(i18n);\n return TransWithoutContext({\n children,\n count,\n parent,\n i18nKey,\n context,\n tOptions,\n values,\n defaults,\n components,\n ns: ns || t?.ns || defaultNSFromContext || i18n?.options?.defaultNS,\n i18n,\n t: tFromProps,\n shouldUnescape,\n ...additionalProps\n });\n}", "import { Fragment, isValidElement, cloneElement, createElement, Children } from 'react';\nimport { keyFromSelector } from 'i18next';\nimport HTML from 'html-parse-stringify';\nimport { isObject, isString, warn, warnOnce } from './utils.js';\nimport { getDefaults } from './defaults.js';\nimport { getI18n } from './i18nInstance.js';\nimport { unescape } from './unescape.js';\nconst hasChildren = (node, checkLength) => {\n if (!node) return false;\n const base = node.props?.children ?? node.children;\n if (checkLength) return base.length > 0;\n return !!base;\n};\nconst getChildren = node => {\n if (!node) return [];\n const children = node.props?.children ?? node.children;\n return node.props?.i18nIsDynamicList ? getAsArray(children) : children;\n};\nconst hasValidReactChildren = children => Array.isArray(children) && children.every(isValidElement);\nconst getAsArray = data => Array.isArray(data) ? data : [data];\nconst mergeProps = (source, target) => {\n const newTarget = {\n ...target\n };\n newTarget.props = {\n ...target.props,\n ...source.props\n };\n return newTarget;\n};\nconst getValuesFromChildren = children => {\n const values = {};\n if (!children) return values;\n const getData = childs => {\n const childrenArray = getAsArray(childs);\n childrenArray.forEach(child => {\n if (isString(child)) return;\n if (hasChildren(child)) getData(getChildren(child));else if (isObject(child) && !isValidElement(child)) Object.assign(values, child);\n });\n };\n getData(children);\n return values;\n};\nexport const nodesToString = (children, i18nOptions, i18n, i18nKey) => {\n if (!children) return '';\n let stringNode = '';\n const childrenArray = getAsArray(children);\n const keepArray = i18nOptions?.transSupportBasicHtmlNodes ? i18nOptions.transKeepBasicHtmlNodesFor ?? [] : [];\n childrenArray.forEach((child, childIndex) => {\n if (isString(child)) {\n stringNode += `${child}`;\n return;\n }\n if (isValidElement(child)) {\n const {\n props,\n type\n } = child;\n const childPropsCount = Object.keys(props).length;\n const shouldKeepChild = keepArray.indexOf(type) > -1;\n const childChildren = props.children;\n if (!childChildren && shouldKeepChild && !childPropsCount) {\n stringNode += `<${type}/>`;\n return;\n }\n if (!childChildren && (!shouldKeepChild || childPropsCount) || props.i18nIsDynamicList) {\n stringNode += `<${childIndex}></${childIndex}>`;\n return;\n }\n if (shouldKeepChild && childPropsCount <= 1) {\n const cnt = isString(childChildren) ? childChildren : nodesToString(childChildren, i18nOptions, i18n, i18nKey);\n stringNode += `<${type}>${cnt}</${type}>`;\n return;\n }\n const content = nodesToString(childChildren, i18nOptions, i18n, i18nKey);\n stringNode += `<${childIndex}>${content}</${childIndex}>`;\n return;\n }\n if (child === null) {\n warn(i18n, 'TRANS_NULL_VALUE', `Passed in a null value as child`, {\n i18nKey\n });\n return;\n }\n if (isObject(child)) {\n const {\n format,\n ...clone\n } = child;\n const keys = Object.keys(clone);\n if (keys.length === 1) {\n const value = format ? `${keys[0]}, ${format}` : keys[0];\n stringNode += `{{${value}}}`;\n return;\n }\n warn(i18n, 'TRANS_INVALID_OBJ', `Invalid child - Object should only have keys {{ value, format }} (format is optional).`, {\n i18nKey,\n child\n });\n return;\n }\n warn(i18n, 'TRANS_INVALID_VAR', `Passed in a variable like {number} - pass variables for interpolation as full objects like {{number}}.`, {\n i18nKey,\n child\n });\n });\n return stringNode;\n};\nconst escapeLiteralLessThan = (str, keepArray = [], knownComponentsMap = {}) => {\n if (!str) return str;\n const knownNames = Object.keys(knownComponentsMap);\n const allValidNames = [...keepArray, ...knownNames];\n let result = '';\n let i = 0;\n while (i < str.length) {\n if (str[i] === '<') {\n let isValidTag = false;\n const closingMatch = str.slice(i).match(/^<\\/(\\d+|[a-zA-Z][a-zA-Z0-9_-]*)>/);\n if (closingMatch) {\n const tagName = closingMatch[1];\n if (/^\\d+$/.test(tagName) || allValidNames.includes(tagName)) {\n isValidTag = true;\n result += closingMatch[0];\n i += closingMatch[0].length;\n }\n }\n if (!isValidTag) {\n const openingMatch = str.slice(i).match(/^<(\\d+|[a-zA-Z][a-zA-Z0-9_-]*)(\\s+[\\w-]+(?:=(?:\"[^\"]*\"|'[^']*'|[^\\s>]+))?)*\\s*(\\/)?>/);\n if (openingMatch) {\n const tagName = openingMatch[1];\n if (/^\\d+$/.test(tagName) || allValidNames.includes(tagName)) {\n isValidTag = true;\n result += openingMatch[0];\n i += openingMatch[0].length;\n }\n }\n }\n if (!isValidTag) {\n result += '<';\n i += 1;\n }\n } else {\n result += str[i];\n i += 1;\n }\n }\n return result;\n};\nconst renderNodes = (children, knownComponentsMap, targetString, i18n, i18nOptions, combinedTOpts, shouldUnescape) => {\n if (targetString === '') return [];\n const keepArray = i18nOptions.transKeepBasicHtmlNodesFor || [];\n const emptyChildrenButNeedsHandling = targetString && new RegExp(keepArray.map(keep => `<${keep}`).join('|')).test(targetString);\n if (!children && !knownComponentsMap && !emptyChildrenButNeedsHandling && !shouldUnescape) return [targetString];\n const data = knownComponentsMap ?? {};\n const getData = childs => {\n const childrenArray = getAsArray(childs);\n childrenArray.forEach(child => {\n if (isString(child)) return;\n if (hasChildren(child)) getData(getChildren(child));else if (isObject(child) && !isValidElement(child)) Object.assign(data, child);\n });\n };\n getData(children);\n const escapedString = escapeLiteralLessThan(targetString, keepArray, data);\n const ast = HTML.parse(`<0>${escapedString}</0>`);\n const opts = {\n ...data,\n ...combinedTOpts\n };\n const renderInner = (child, node, rootReactNode) => {\n const childs = getChildren(child);\n const mappedChildren = mapAST(childs, node.children, rootReactNode);\n return hasValidReactChildren(childs) && mappedChildren.length === 0 || child.props?.i18nIsDynamicList ? childs : mappedChildren;\n };\n const pushTranslatedJSX = (child, inner, mem, i, isVoid) => {\n if (child.dummy) {\n child.children = inner;\n mem.push(cloneElement(child, {\n key: i\n }, isVoid ? undefined : inner));\n } else {\n mem.push(...Children.map([child], c => {\n if (c.type === Fragment || c.props?.i18nIsDynamicList !== undefined) {\n const freshProps = {\n key: i\n };\n if (c && c.props) {\n Object.keys(c.props).forEach(k => {\n if (k === 'children' || k === 'i18nIsDynamicList') return;\n freshProps[k] = c.props[k];\n });\n }\n return createElement(c.type, freshProps, isVoid ? null : inner);\n }\n const override = {\n key: i\n };\n if (c && c.props) {\n Object.keys(c.props).forEach(k => {\n if (k === 'ref' || k === 'children') return;\n override[k] = c.props[k];\n });\n }\n return cloneElement(c, override, isVoid ? null : inner);\n }));\n }\n };\n const mapAST = (reactNode, astNode, rootReactNode) => {\n const reactNodes = getAsArray(reactNode);\n const astNodes = getAsArray(astNode);\n const keepTagOccurrence = {};\n return astNodes.reduce((mem, node, i) => {\n const translationContent = node.children?.[0]?.content && i18n.services.interpolator.interpolate(node.children[0].content, opts, i18n.language);\n if (node.type === 'tag') {\n let tmp = reactNodes[parseInt(node.name, 10)];\n if (!tmp && knownComponentsMap) tmp = knownComponentsMap[node.name];\n if (rootReactNode.length === 1 && !tmp) tmp = rootReactNode[0][node.name];\n if (!tmp) tmp = {};\n const props = {\n ...node.attrs\n };\n if (shouldUnescape) {\n Object.keys(props).forEach(p => {\n const val = props[p];\n if (isString(val)) {\n props[p] = unescape(val);\n }\n });\n }\n const child = Object.keys(props).length !== 0 ? mergeProps({\n props\n }, tmp) : tmp;\n const isElement = isValidElement(child);\n const isValidTranslationWithChildren = isElement && hasChildren(node, true) && !node.voidElement;\n const isEmptyTransWithHTML = emptyChildrenButNeedsHandling && isObject(child) && child.dummy && !isElement;\n const isKnownComponent = isObject(knownComponentsMap) && Object.hasOwnProperty.call(knownComponentsMap, node.name);\n if (isString(child)) {\n const value = i18n.services.interpolator.interpolate(child, opts, i18n.language);\n mem.push(value);\n } else if (hasChildren(child) || isValidTranslationWithChildren) {\n const inner = renderInner(child, node, rootReactNode);\n pushTranslatedJSX(child, inner, mem, i);\n } else if (isEmptyTransWithHTML) {\n const inner = mapAST(reactNodes, node.children, rootReactNode);\n pushTranslatedJSX(child, inner, mem, i);\n } else if (Number.isNaN(parseFloat(node.name))) {\n if (isKnownComponent) {\n const inner = renderInner(child, node, rootReactNode);\n pushTranslatedJSX(child, inner, mem, i, node.voidElement);\n } else if (i18nOptions.transSupportBasicHtmlNodes && keepArray.indexOf(node.name) > -1) {\n if (node.voidElement) {\n mem.push(createElement(node.name, {\n key: `${node.name}-${i}`\n }));\n } else {\n const occurrence = keepTagOccurrence[node.name] || 0;\n keepTagOccurrence[node.name] = occurrence + 1;\n let matched;\n let seen = 0;\n for (let r = 0; r < reactNodes.length; r += 1) {\n const rn = reactNodes[r];\n if (isValidElement(rn) && rn.type === node.name) {\n if (seen === occurrence) {\n matched = rn;\n break;\n }\n seen += 1;\n }\n }\n const innerScope = matched ? getAsArray(getChildren(matched)) : reactNodes;\n const inner = mapAST(innerScope, node.children, rootReactNode);\n mem.push(createElement(node.name, {\n key: `${node.name}-${i}`\n }, inner));\n }\n } else if (node.voidElement) {\n mem.push(`<${node.name} />`);\n } else {\n const inner = mapAST(reactNodes, node.children, rootReactNode);\n mem.push(`<${node.name}>${inner}</${node.name}>`);\n }\n } else if (isObject(child) && !isElement) {\n const content = node.children[0] ? translationContent : null;\n if (content) mem.push(content);\n } else {\n pushTranslatedJSX(child, translationContent, mem, i, node.children.length !== 1 || !translationContent);\n }\n } else if (node.type === 'text') {\n const wrapTextNodes = i18nOptions.transWrapTextNodes;\n const unescapeFn = typeof i18nOptions.unescape === 'function' ? i18nOptions.unescape : getDefaults().unescape;\n const content = shouldUnescape ? unescapeFn(i18n.services.interpolator.interpolate(node.content, opts, i18n.language)) : i18n.services.interpolator.interpolate(node.content, opts, i18n.language);\n if (wrapTextNodes) {\n mem.push(createElement(wrapTextNodes, {\n key: `${node.name}-${i}`\n }, content));\n } else {\n mem.push(content);\n }\n }\n return mem;\n }, []);\n };\n const result = mapAST([{\n dummy: true,\n children: children || []\n }], ast, getAsArray(children || []));\n return getChildren(result[0]);\n};\nconst fixComponentProps = (component, index, translation) => {\n const componentKey = component.key || index;\n const comp = cloneElement(component, {\n key: componentKey\n });\n if (!comp.props || !comp.props.children || translation.indexOf(`${index}/>`) < 0 && translation.indexOf(`${index} />`) < 0) {\n return comp;\n }\n function Componentized() {\n return createElement(Fragment, null, comp);\n }\n return createElement(Componentized, {\n key: componentKey\n });\n};\nconst generateArrayComponents = (components, translation) => components.map((c, index) => fixComponentProps(c, index, translation));\nconst generateObjectComponents = (components, translation) => {\n const componentMap = {};\n Object.keys(components).forEach(c => {\n Object.assign(componentMap, {\n [c]: fixComponentProps(components[c], c, translation)\n });\n });\n return componentMap;\n};\nconst generateComponents = (components, translation, i18n, i18nKey) => {\n if (!components) return null;\n if (Array.isArray(components)) {\n return generateArrayComponents(components, translation);\n }\n if (isObject(components)) {\n return generateObjectComponents(components, translation);\n }\n warnOnce(i18n, 'TRANS_INVALID_COMPONENTS', `<Trans /> \"components\" prop expects an object or array`, {\n i18nKey\n });\n return null;\n};\nconst isComponentsMap = object => {\n if (!isObject(object)) return false;\n if (Array.isArray(object)) return false;\n return Object.keys(object).reduce((acc, key) => acc && Number.isNaN(Number.parseFloat(key)), true);\n};\nexport function Trans({\n children,\n count,\n parent,\n i18nKey,\n context,\n tOptions = {},\n values,\n defaults,\n components,\n ns,\n i18n: i18nFromProps,\n t: tFromProps,\n shouldUnescape,\n ...additionalProps\n}) {\n const i18n = i18nFromProps || getI18n();\n if (!i18n) {\n warnOnce(i18n, 'NO_I18NEXT_INSTANCE', `Trans: You need to pass in an i18next instance using i18nextReactModule`, {\n i18nKey\n });\n return children;\n }\n const t = tFromProps || i18n.t.bind(i18n) || (k => k);\n const reactI18nextOptions = {\n ...getDefaults(),\n ...i18n.options?.react\n };\n let namespaces = ns || t.ns || i18n.options?.defaultNS;\n namespaces = isString(namespaces) ? [namespaces] : namespaces || ['translation'];\n const {\n transDefaultProps\n } = reactI18nextOptions;\n const mergedTOptions = transDefaultProps?.tOptions ? {\n ...transDefaultProps.tOptions,\n ...tOptions\n } : tOptions;\n const mergedShouldUnescape = shouldUnescape ?? transDefaultProps?.shouldUnescape;\n const mergedValues = transDefaultProps?.values ? {\n ...transDefaultProps.values,\n ...values\n } : values;\n const mergedComponents = transDefaultProps?.components ? {\n ...transDefaultProps.components,\n ...components\n } : components;\n const nodeAsString = nodesToString(children, reactI18nextOptions, i18n, i18nKey);\n const defaultValue = defaults || mergedTOptions?.defaultValue || nodeAsString || reactI18nextOptions.transEmptyNodeValue || (typeof i18nKey === 'function' ? keyFromSelector(i18nKey) : i18nKey);\n const {\n hashTransKey\n } = reactI18nextOptions;\n const key = i18nKey || (hashTransKey ? hashTransKey(nodeAsString || defaultValue) : nodeAsString || defaultValue);\n if (i18n.options?.interpolation?.defaultVariables) {\n values = mergedValues && Object.keys(mergedValues).length > 0 ? {\n ...mergedValues,\n ...i18n.options.interpolation.defaultVariables\n } : {\n ...i18n.options.interpolation.defaultVariables\n };\n } else {\n values = mergedValues;\n }\n const valuesFromChildren = getValuesFromChildren(children);\n if (valuesFromChildren && typeof valuesFromChildren.count === 'number' && count === undefined) {\n count = valuesFromChildren.count;\n }\n const interpolationOverride = values || count !== undefined && !i18n.options?.interpolation?.alwaysFormat || !children ? mergedTOptions.interpolation : {\n interpolation: {\n ...mergedTOptions.interpolation,\n prefix: '#$?',\n suffix: '?$#'\n }\n };\n const combinedTOpts = {\n ...mergedTOptions,\n context: context || mergedTOptions.context,\n count,\n ...values,\n ...interpolationOverride,\n defaultValue,\n ns: namespaces\n };\n let translation = key ? t(key, combinedTOpts) : defaultValue;\n if (translation === key && defaultValue) translation = defaultValue;\n const generatedComponents = generateComponents(mergedComponents, translation, i18n, i18nKey);\n let indexedChildren = generatedComponents || children;\n let componentsMap = null;\n if (isComponentsMap(generatedComponents)) {\n componentsMap = generatedComponents;\n indexedChildren = children;\n }\n const content = renderNodes(indexedChildren, componentsMap, translation, i18n, reactI18nextOptions, combinedTOpts, mergedShouldUnescape);\n const useAsParent = parent ?? reactI18nextOptions.defaultTransParent;\n return useAsParent ? createElement(useAsParent, additionalProps, content) : content;\n}", "export const warn = (i18n, code, msg, rest) => {\n const args = [msg, {\n code,\n ...(rest || {})\n }];\n if (i18n?.services?.logger?.forward) {\n return i18n.services.logger.forward(args, 'warn', 'react-i18next::', true);\n }\n if (isString(args[0])) args[0] = `react-i18next:: ${args[0]}`;\n if (i18n?.services?.logger?.warn) {\n i18n.services.logger.warn(...args);\n } else if (console?.warn) {\n console.warn(...args);\n }\n};\nconst alreadyWarned = {};\nexport const warnOnce = (i18n, code, msg, rest) => {\n if (isString(msg) && alreadyWarned[msg]) return;\n if (isString(msg)) alreadyWarned[msg] = new Date();\n warn(i18n, code, msg, rest);\n};\nconst loadedClb = (i18n, cb) => () => {\n if (i18n.isInitialized) {\n cb();\n } else {\n const initialized = () => {\n setTimeout(() => {\n i18n.off('initialized', initialized);\n }, 0);\n cb();\n };\n i18n.on('initialized', initialized);\n }\n};\nexport const loadNamespaces = (i18n, ns, cb) => {\n i18n.loadNamespaces(ns, loadedClb(i18n, cb));\n};\nexport const loadLanguages = (i18n, lng, ns, cb) => {\n if (isString(ns)) ns = [ns];\n if (i18n.options.preload && i18n.options.preload.indexOf(lng) > -1) return loadNamespaces(i18n, ns, cb);\n ns.forEach(n => {\n if (i18n.options.ns.indexOf(n) < 0) i18n.options.ns.push(n);\n });\n i18n.loadLanguages(lng, loadedClb(i18n, cb));\n};\nexport const hasLoadedNamespace = (ns, i18n, options = {}) => {\n if (!i18n.languages || !i18n.languages.length) {\n warnOnce(i18n, 'NO_LANGUAGES', 'i18n.languages were undefined or empty', {\n languages: i18n.languages\n });\n return true;\n }\n return i18n.hasLoadedNamespace(ns, {\n lng: options.lng,\n precheck: (i18nInstance, loadNotPending) => {\n if (options.bindI18n && options.bindI18n.indexOf('languageChanging') > -1 && i18nInstance.services.backendConnector.backend && i18nInstance.isLanguageChangingTo && !loadNotPending(i18nInstance.isLanguageChangingTo, ns)) return false;\n }\n });\n};\nexport const getDisplayName = Component => Component.displayName || Component.name || (isString(Component) && Component.length > 0 ? Component : 'Unknown');\nexport const isString = obj => typeof obj === 'string';\nexport const isObject = obj => typeof obj === 'object' && obj !== null;", "const matchHtmlEntity = /&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g;\nconst htmlEntities = {\n '&': '&',\n '&': '&',\n '<': '<',\n '<': '<',\n '>': '>',\n '>': '>',\n ''': \"'\",\n ''': \"'\",\n '"': '\"',\n '"': '\"',\n ' ': ' ',\n ' ': ' ',\n '©': '\u00A9',\n '©': '\u00A9',\n '®': '\u00AE',\n '®': '\u00AE',\n '…': '\u2026',\n '…': '\u2026',\n '/': '/',\n '/': '/'\n};\nconst unescapeHtmlEntity = m => htmlEntities[m];\nexport const unescape = text => text.replace(matchHtmlEntity, unescapeHtmlEntity);", "import { unescape } from './unescape.js';\nlet defaultOptions = {\n bindI18n: 'languageChanged',\n bindI18nStore: '',\n transEmptyNodeValue: '',\n transSupportBasicHtmlNodes: true,\n transWrapTextNodes: '',\n transKeepBasicHtmlNodesFor: ['br', 'strong', 'i', 'p'],\n useSuspense: true,\n unescape,\n transDefaultProps: undefined\n};\nexport const setDefaults = (options = {}) => {\n defaultOptions = {\n ...defaultOptions,\n ...options\n };\n};\nexport const getDefaults = () => defaultOptions;", "let i18nInstance;\nexport const setI18n = instance => {\n i18nInstance = instance;\n};\nexport const getI18n = () => i18nInstance;", "import { createContext } from 'react';\nimport { getDefaults, setDefaults } from './defaults.js';\nimport { getI18n, setI18n } from './i18nInstance.js';\nimport { initReactI18next } from './initReactI18next.js';\nexport { getDefaults, setDefaults, getI18n, setI18n, initReactI18next };\nexport const I18nContext = createContext();\nexport class ReportNamespaces {\n constructor() {\n this.usedNamespaces = {};\n }\n addUsedNamespaces(namespaces) {\n namespaces.forEach(ns => {\n if (!this.usedNamespaces[ns]) this.usedNamespaces[ns] = true;\n });\n }\n getUsedNamespaces() {\n return Object.keys(this.usedNamespaces);\n }\n}\nexport const composeInitialProps = ForComponent => async ctx => {\n const componentsInitialProps = (await ForComponent.getInitialProps?.(ctx)) ?? {};\n const i18nInitialProps = getInitialProps();\n return {\n ...componentsInitialProps,\n ...i18nInitialProps\n };\n};\nexport const getInitialProps = () => {\n const i18n = getI18n();\n if (!i18n) {\n console.warn('react-i18next:: getInitialProps: You will need to pass in an i18next instance by using initReactI18next');\n return {};\n }\n const namespaces = i18n.reportNamespaces?.getUsedNamespaces() ?? [];\n const ret = {};\n const initialI18nStore = {};\n i18n.languages.forEach(l => {\n initialI18nStore[l] = {};\n namespaces.forEach(ns => {\n initialI18nStore[l][ns] = i18n.getResourceBundle(l, ns) || {};\n });\n });\n ret.initialI18nStore = initialI18nStore;\n ret.initialLanguage = i18n.language;\n return ret;\n};", "import { setDefaults } from './defaults.js';\nimport { setI18n } from './i18nInstance.js';\nexport const initReactI18next = {\n type: '3rdParty',\n init(instance) {\n setDefaults(instance.options.react);\n setI18n(instance);\n }\n};", "import { useContext } from 'react';\nimport { IcuTransWithoutContext } from './IcuTransWithoutContext.js';\nimport { getI18n, I18nContext } from './context.js';\nexport function IcuTrans({\n i18nKey,\n defaultTranslation,\n content,\n ns,\n values = {},\n i18n: i18nFromProps,\n t: tFromProps\n}) {\n const {\n i18n: i18nFromContext,\n defaultNS: defaultNSFromContext\n } = useContext(I18nContext) || {};\n const i18n = i18nFromProps || i18nFromContext || getI18n();\n const t = tFromProps || i18n?.t.bind(i18n);\n return IcuTransWithoutContext({\n i18nKey,\n defaultTranslation,\n content,\n ns: ns || t?.ns || defaultNSFromContext || i18n?.options?.defaultNS,\n values,\n i18n,\n t: tFromProps\n });\n}\nIcuTrans.displayName = 'IcuTrans';", "import React from 'react';\nimport { warn, warnOnce, isString } from './utils.js';\nimport { getI18n } from './i18nInstance.js';\nimport { renderTranslation } from './IcuTransUtils/index.js';\nexport function IcuTransWithoutContext({\n i18nKey,\n defaultTranslation,\n content,\n ns,\n values = {},\n i18n: i18nFromProps,\n t: tFromProps\n}) {\n const i18n = i18nFromProps || getI18n();\n if (!i18n) {\n warnOnce(i18n, 'NO_I18NEXT_INSTANCE', `IcuTrans: You need to pass in an i18next instance using i18nextReactModule`, {\n i18nKey\n });\n return React.createElement(React.Fragment, {}, defaultTranslation);\n }\n const t = tFromProps || i18n.t?.bind(i18n) || (k => k);\n let namespaces = ns || t.ns || i18n.options?.defaultNS;\n namespaces = isString(namespaces) ? [namespaces] : namespaces || ['translation'];\n let mergedValues = values;\n if (i18n.options?.interpolation?.defaultVariables) {\n mergedValues = values && Object.keys(values).length > 0 ? {\n ...values,\n ...i18n.options.interpolation.defaultVariables\n } : {\n ...i18n.options.interpolation.defaultVariables\n };\n }\n const translation = t(i18nKey, {\n defaultValue: defaultTranslation,\n ...mergedValues,\n ns: namespaces\n });\n try {\n const rendered = renderTranslation(translation, content);\n return React.createElement(React.Fragment, {}, ...rendered);\n } catch (error) {\n warn(i18n, 'ICU_TRANS_RENDER_ERROR', `IcuTrans component error for key \"${i18nKey}\": ${error.message}`, {\n i18nKey,\n error\n });\n return React.createElement(React.Fragment, {}, translation);\n }\n}\nIcuTransWithoutContext.displayName = 'IcuTransWithoutContext';", "export class TranslationParserError extends Error {\n constructor(message, position, translationString) {\n super(message);\n this.name = 'TranslationParserError';\n this.position = position;\n this.translationString = translationString;\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, TranslationParserError);\n }\n }\n}", "const commonEntities = {\n ' ': '\\u00A0',\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\",\n '©': '\u00A9',\n '®': '\u00AE',\n '™': '\u2122',\n '…': '\u2026',\n '–': '\u2013',\n '—': '\u2014',\n '‘': '\\u2018',\n '’': '\\u2019',\n '‚': '\\u201A',\n '“': '\\u201C',\n '”': '\\u201D',\n '„': '\\u201E',\n '†': '\u2020',\n '‡': '\u2021',\n '•': '\u2022',\n '′': '\u2032',\n '″': '\u2033',\n '‹': '\u2039',\n '›': '\u203A',\n '§': '\u00A7',\n '¶': '\u00B6',\n '·': '\u00B7',\n ' ': '\\u2002',\n ' ': '\\u2003',\n ' ': '\\u2009',\n '€': '\u20AC',\n '£': '\u00A3',\n '¥': '\u00A5',\n '¢': '\u00A2',\n '¤': '\u00A4',\n '×': '\u00D7',\n '÷': '\u00F7',\n '−': '\u2212',\n '±': '\u00B1',\n '≠': '\u2260',\n '≤': '\u2264',\n '≥': '\u2265',\n '≈': '\u2248',\n '≡': '\u2261',\n '∞': '\u221E',\n '∫': '\u222B',\n '∑': '\u2211',\n '∏': '\u220F',\n '√': '\u221A',\n '∂': '\u2202',\n '‰': '\u2030',\n '°': '\u00B0',\n 'µ': '\u00B5',\n '←': '\u2190',\n '↑': '\u2191',\n '→': '\u2192',\n '↓': '\u2193',\n '↔': '\u2194',\n '↵': '\u21B5',\n '⇐': '\u21D0',\n '⇑': '\u21D1',\n '⇒': '\u21D2',\n '⇓': '\u21D3',\n '⇔': '\u21D4',\n 'α': '\u03B1',\n 'β': '\u03B2',\n 'γ': '\u03B3',\n 'δ': '\u03B4',\n 'ε': '\u03B5',\n 'ζ': '\u03B6',\n 'η': '\u03B7',\n 'θ': '\u03B8',\n 'ι': '\u03B9',\n 'κ': '\u03BA',\n 'λ': '\u03BB',\n 'μ': '\u03BC',\n 'ν': '\u03BD',\n 'ξ': '\u03BE',\n 'ο': '\u03BF',\n 'π': '\u03C0',\n 'ρ': '\u03C1',\n 'σ': '\u03C3',\n 'τ': '\u03C4',\n 'υ': '\u03C5',\n 'φ': '\u03C6',\n 'χ': '\u03C7',\n 'ψ': '\u03C8',\n 'ω': '\u03C9',\n 'Α': '\u0391',\n 'Β': '\u0392',\n 'Γ': '\u0393',\n 'Δ': '\u0394',\n 'Ε': '\u0395',\n 'Ζ': '\u0396',\n 'Η': '\u0397',\n 'Θ': '\u0398',\n 'Ι': '\u0399',\n 'Κ': '\u039A',\n 'Λ': '\u039B',\n 'Μ': '\u039C',\n 'Ν': '\u039D',\n 'Ξ': '\u039E',\n 'Ο': '\u039F',\n 'Π': '\u03A0',\n 'Ρ': '\u03A1',\n 'Σ': '\u03A3',\n 'Τ': '\u03A4',\n 'Υ': '\u03A5',\n 'Φ': '\u03A6',\n 'Χ': '\u03A7',\n 'Ψ': '\u03A8',\n 'Ω': '\u03A9',\n 'À': '\u00C0',\n 'Á': '\u00C1',\n 'Â': '\u00C2',\n 'Ã': '\u00C3',\n 'Ä': '\u00C4',\n 'Å': '\u00C5',\n 'Æ': '\u00C6',\n 'Ç': '\u00C7',\n 'È': '\u00C8',\n 'É': '\u00C9',\n 'Ê': '\u00CA',\n 'Ë': '\u00CB',\n 'Ì': '\u00CC',\n 'Í': '\u00CD',\n 'Î': '\u00CE',\n 'Ï': '\u00CF',\n 'Ð': '\u00D0',\n 'Ñ': '\u00D1',\n 'Ò': '\u00D2',\n 'Ó': '\u00D3',\n 'Ô': '\u00D4',\n 'Õ': '\u00D5',\n 'Ö': '\u00D6',\n 'Ø': '\u00D8',\n 'Ù': '\u00D9',\n 'Ú': '\u00DA',\n 'Û': '\u00DB',\n 'Ü': '\u00DC',\n 'Ý': '\u00DD',\n 'Þ': '\u00DE',\n 'ß': '\u00DF',\n 'à': '\u00E0',\n 'á': '\u00E1',\n 'â': '\u00E2',\n 'ã': '\u00E3',\n 'ä': '\u00E4',\n 'å': '\u00E5',\n 'æ': '\u00E6',\n 'ç': '\u00E7',\n 'è': '\u00E8',\n 'é': '\u00E9',\n 'ê': '\u00EA',\n 'ë': '\u00EB',\n 'ì': '\u00EC',\n 'í': '\u00ED',\n 'î': '\u00EE',\n 'ï': '\u00EF',\n 'ð': '\u00F0',\n 'ñ': '\u00F1',\n 'ò': '\u00F2',\n 'ó': '\u00F3',\n 'ô': '\u00F4',\n 'õ': '\u00F5',\n 'ö': '\u00F6',\n 'ø': '\u00F8',\n 'ù': '\u00F9',\n 'ú': '\u00FA',\n 'û': '\u00FB',\n 'ü': '\u00FC',\n 'ý': '\u00FD',\n 'þ': '\u00FE',\n 'ÿ': '\u00FF',\n '¡': '\u00A1',\n '¿': '\u00BF',\n 'ƒ': '\u0192',\n 'ˆ': '\u02C6',\n '˜': '\u02DC',\n 'Œ': '\u0152',\n 'œ': '\u0153',\n 'Š': '\u0160',\n 'š': '\u0161',\n 'Ÿ': '\u0178',\n 'ª': '\u00AA',\n 'º': '\u00BA',\n '¯': '\u00AF',\n '´': '\u00B4',\n '¸': '\u00B8',\n '¹': '\u00B9',\n '²': '\u00B2',\n '³': '\u00B3',\n '¼': '\u00BC',\n '½': '\u00BD',\n '¾': '\u00BE',\n '♠': '\u2660',\n '♣': '\u2663',\n '♥': '\u2665',\n '♦': '\u2666',\n '◊': '\u25CA',\n '‾': '\u203E',\n '⁄': '\u2044',\n '℘': '\u2118',\n 'ℑ': '\u2111',\n 'ℜ': '\u211C',\n 'ℵ': '\u2135'\n};\nconst entityPattern = new RegExp(Object.keys(commonEntities).map(entity => entity.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')).join('|'), 'g');\nexport const decodeHtmlEntities = text => text.replace(entityPattern, match => commonEntities[match]).replace(/&#(\\d+);/g, (_, num) => String.fromCharCode(parseInt(num, 10))).replace(/&#x([0-9a-fA-F]+);/g, (_, hex) => String.fromCharCode(parseInt(hex, 16)));", "export const tokenize = translation => {\n const tokens = [];\n let position = 0;\n let currentText = '';\n const flushText = () => {\n if (currentText) {\n tokens.push({\n type: 'Text',\n value: currentText,\n position: position - currentText.length\n });\n currentText = '';\n }\n };\n while (position < translation.length) {\n const char = translation[position];\n if (char === '<') {\n const tagMatch = translation.slice(position).match(/^<(\\d+)>/);\n if (tagMatch) {\n flushText();\n tokens.push({\n type: 'TagOpen',\n value: tagMatch[0],\n position,\n tagNumber: parseInt(tagMatch[1], 10)\n });\n position += tagMatch[0].length;\n } else {\n const closeTagMatch = translation.slice(position).match(/^<\\/(\\d+)>/);\n if (closeTagMatch) {\n flushText();\n tokens.push({\n type: 'TagClose',\n value: closeTagMatch[0],\n position,\n tagNumber: parseInt(closeTagMatch[1], 10)\n });\n position += closeTagMatch[0].length;\n } else {\n currentText += char;\n position += 1;\n }\n }\n } else {\n currentText += char;\n position += 1;\n }\n }\n flushText();\n return tokens;\n};", "import React from 'react';\nimport { TranslationParserError } from './TranslationParserError.js';\nimport { tokenize } from './tokenizer.js';\nimport { decodeHtmlEntities } from './htmlEntityDecoder.js';\nconst renderDeclarationNode = (declaration, children, childDeclarations) => {\n const {\n type,\n props = {}\n } = declaration;\n if (props.children && Array.isArray(props.children) && childDeclarations) {\n const {\n children: _childrenToRemove,\n ...propsWithoutChildren\n } = props;\n return React.createElement(type, propsWithoutChildren, ...children);\n }\n if (children.length === 0) {\n return React.createElement(type, props);\n }\n if (children.length === 1) {\n return React.createElement(type, props, children[0]);\n }\n return React.createElement(type, props, ...children);\n};\nexport const renderTranslation = (translation, declarations = []) => {\n if (!translation) {\n return [];\n }\n const tokens = tokenize(translation);\n const result = [];\n const stack = [];\n const literalTagNumbers = new Set();\n const getCurrentDeclarations = () => {\n if (stack.length === 0) {\n return declarations;\n }\n const parentFrame = stack[stack.length - 1];\n if (parentFrame.declaration.props?.children && Array.isArray(parentFrame.declaration.props.children)) {\n return parentFrame.declaration.props.children;\n }\n return parentFrame.declarations;\n };\n tokens.forEach(token => {\n switch (token.type) {\n case 'Text':\n {\n const decoded = decodeHtmlEntities(token.value);\n const targetArray = stack.length > 0 ? stack[stack.length - 1].children : result;\n targetArray.push(decoded);\n }\n break;\n case 'TagOpen':\n {\n const {\n tagNumber\n } = token;\n const currentDeclarations = getCurrentDeclarations();\n const declaration = currentDeclarations[tagNumber];\n if (!declaration) {\n literalTagNumbers.add(tagNumber);\n const literalText = `<${tagNumber}>`;\n const targetArray = stack.length > 0 ? stack[stack.length - 1].children : result;\n targetArray.push(literalText);\n break;\n }\n stack.push({\n tagNumber,\n children: [],\n position: token.position,\n declaration,\n declarations: currentDeclarations\n });\n }\n break;\n case 'TagClose':\n {\n const {\n tagNumber\n } = token;\n if (literalTagNumbers.has(tagNumber)) {\n const literalText = `</${tagNumber}>`;\n const literalTargetArray = stack.length > 0 ? stack[stack.length - 1].children : result;\n literalTargetArray.push(literalText);\n literalTagNumbers.delete(tagNumber);\n break;\n }\n if (stack.length === 0) {\n throw new TranslationParserError(`Unexpected closing tag </${tagNumber}> at position ${token.position}`, token.position, translation);\n }\n const frame = stack.pop();\n if (frame.tagNumber !== tagNumber) {\n throw new TranslationParserError(`Mismatched tags: expected </${frame.tagNumber}> but got </${tagNumber}> at position ${token.position}`, token.position, translation);\n }\n const element = renderDeclarationNode(frame.declaration, frame.children, frame.declarations);\n const elementTargetArray = stack.length > 0 ? stack[stack.length - 1].children : result;\n elementTargetArray.push(element);\n }\n break;\n }\n });\n if (stack.length > 0) {\n const unclosed = stack[stack.length - 1];\n throw new TranslationParserError(`Unclosed tag <${unclosed.tagNumber}> at position ${unclosed.position}`, unclosed.position, translation);\n }\n return result;\n};", "import { useContext, useCallback, useMemo, useEffect, useRef, useState } from 'react';\nimport { useSyncExternalStore } from 'use-sync-external-store/shim';\nimport { getI18n, getDefaults, ReportNamespaces, I18nContext } from './context.js';\nimport { warnOnce, loadNamespaces, loadLanguages, hasLoadedNamespace, isString, isObject } from './utils.js';\nconst notReadyT = (k, optsOrDefaultValue) => {\n if (isString(optsOrDefaultValue)) return optsOrDefaultValue;\n if (isObject(optsOrDefaultValue) && isString(optsOrDefaultValue.defaultValue)) return optsOrDefaultValue.defaultValue;\n if (typeof k === 'function') return '';\n if (Array.isArray(k)) {\n const last = k[k.length - 1];\n return typeof last === 'function' ? '' : last;\n }\n return k;\n};\nconst notReadySnapshot = {\n t: notReadyT,\n ready: false\n};\nconst dummySubscribe = () => () => {};\nexport const useTranslation = (ns, props = {}) => {\n const {\n i18n: i18nFromProps\n } = props;\n const {\n i18n: i18nFromContext,\n defaultNS: defaultNSFromContext\n } = useContext(I18nContext) || {};\n const i18n = i18nFromProps || i18nFromContext || getI18n();\n if (i18n && !i18n.reportNamespaces) i18n.reportNamespaces = new ReportNamespaces();\n if (!i18n) {\n warnOnce(i18n, 'NO_I18NEXT_INSTANCE', 'useTranslation: You will need to pass in an i18next instance by using initReactI18next');\n }\n const i18nOptions = useMemo(() => ({\n ...getDefaults(),\n ...i18n?.options?.react,\n ...props\n }), [i18n, props]);\n const {\n useSuspense,\n keyPrefix\n } = i18nOptions;\n const nsOrContext = ns || defaultNSFromContext || i18n?.options?.defaultNS;\n const unstableNamespaces = isString(nsOrContext) ? [nsOrContext] : nsOrContext || ['translation'];\n const namespaces = useMemo(() => unstableNamespaces, unstableNamespaces);\n i18n?.reportNamespaces?.addUsedNamespaces?.(namespaces);\n const revisionRef = useRef(0);\n const subscribe = useCallback(callback => {\n if (!i18n) return dummySubscribe;\n const {\n bindI18n,\n bindI18nStore\n } = i18nOptions;\n const wrappedCallback = () => {\n revisionRef.current += 1;\n callback();\n };\n if (bindI18n) i18n.on(bindI18n, wrappedCallback);\n if (bindI18nStore) i18n.store.on(bindI18nStore, wrappedCallback);\n return () => {\n if (bindI18n) bindI18n.split(' ').forEach(e => i18n.off(e, wrappedCallback));\n if (bindI18nStore) bindI18nStore.split(' ').forEach(e => i18n.store.off(e, wrappedCallback));\n };\n }, [i18n, i18nOptions]);\n const snapshotRef = useRef();\n const getSnapshot = useCallback(() => {\n if (!i18n) {\n return notReadySnapshot;\n }\n const calculatedReady = !!(i18n.isInitialized || i18n.initializedStoreOnce) && namespaces.every(n => hasLoadedNamespace(n, i18n, i18nOptions));\n const currentLng = props.lng || i18n.language;\n const currentRevision = revisionRef.current;\n const lastSnapshot = snapshotRef.current;\n if (lastSnapshot && lastSnapshot.ready === calculatedReady && lastSnapshot.lng === currentLng && lastSnapshot.keyPrefix === keyPrefix && lastSnapshot.revision === currentRevision) {\n return lastSnapshot;\n }\n const calculatedT = i18n.getFixedT(currentLng, i18nOptions.nsMode === 'fallback' ? namespaces : namespaces[0], keyPrefix, {\n scopeNs: namespaces\n });\n const newSnapshot = {\n t: calculatedT,\n ready: calculatedReady,\n lng: currentLng,\n keyPrefix,\n revision: currentRevision\n };\n snapshotRef.current = newSnapshot;\n return newSnapshot;\n }, [i18n, namespaces, keyPrefix, i18nOptions, props.lng]);\n const [loadCount, setLoadCount] = useState(0);\n const {\n t,\n ready\n } = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n useEffect(() => {\n if (i18n && !ready && !useSuspense) {\n const onLoaded = () => setLoadCount(c => c + 1);\n if (props.lng) {\n loadLanguages(i18n, props.lng, namespaces, onLoaded);\n } else {\n loadNamespaces(i18n, namespaces, onLoaded);\n }\n }\n }, [i18n, props.lng, namespaces, ready, useSuspense, loadCount]);\n const finalI18n = i18n || {};\n const wrapperRef = useRef(null);\n const wrapperLangRef = useRef();\n const createI18nWrapper = original => {\n const descriptors = Object.getOwnPropertyDescriptors(original);\n if (descriptors.__original) delete descriptors.__original;\n const wrapper = Object.create(Object.getPrototypeOf(original), descriptors);\n if (!Object.prototype.hasOwnProperty.call(wrapper, '__original')) {\n try {\n Object.defineProperty(wrapper, '__original', {\n value: original,\n writable: false,\n enumerable: false,\n configurable: false\n });\n } catch (_) {}\n }\n return wrapper;\n };\n const ret = useMemo(() => {\n const original = finalI18n;\n const lang = original?.language;\n let i18nWrapper = original;\n if (original) {\n if (wrapperRef.current && wrapperRef.current.__original === original) {\n if (wrapperLangRef.current !== lang) {\n i18nWrapper = createI18nWrapper(original);\n wrapperRef.current = i18nWrapper;\n wrapperLangRef.current = lang;\n } else {\n i18nWrapper = wrapperRef.current;\n }\n } else {\n i18nWrapper = createI18nWrapper(original);\n wrapperRef.current = i18nWrapper;\n wrapperLangRef.current = lang;\n }\n }\n const effectiveT = !ready && !useSuspense ? (...args) => {\n warnOnce(i18n, 'USE_T_BEFORE_READY', 'useTranslation: t was called before ready. When using useSuspense: false, make sure to check the ready flag before using t.');\n return t(...args);\n } : t;\n const arr = [effectiveT, i18nWrapper, ready];\n arr.t = effectiveT;\n arr.i18n = i18nWrapper;\n arr.ready = ready;\n return arr;\n }, [t, finalI18n, ready, finalI18n.resolvedLanguage, finalI18n.language, finalI18n.languages]);\n if (i18n && useSuspense && !ready) {\n throw new Promise(resolve => {\n const onLoaded = () => resolve();\n if (props.lng) {\n loadLanguages(i18n, props.lng, namespaces, onLoaded);\n } else {\n loadNamespaces(i18n, namespaces, onLoaded);\n }\n });\n }\n return ret;\n};", "import { createElement, forwardRef as forwardRefReact } from 'react';\nimport { useTranslation } from './useTranslation.js';\nimport { getDisplayName } from './utils.js';\nexport const withTranslation = (ns, options = {}) => function Extend(WrappedComponent) {\n function I18nextWithTranslation({\n forwardedRef,\n ...rest\n }) {\n const [t, i18n, ready] = useTranslation(ns, {\n ...rest,\n keyPrefix: options.keyPrefix\n });\n const passDownProps = {\n ...rest,\n t,\n i18n,\n tReady: ready\n };\n if (options.withRef && forwardedRef) {\n passDownProps.ref = forwardedRef;\n } else if (!options.withRef && forwardedRef) {\n passDownProps.forwardedRef = forwardedRef;\n }\n return createElement(WrappedComponent, passDownProps);\n }\n I18nextWithTranslation.displayName = `withI18nextTranslation(${getDisplayName(WrappedComponent)})`;\n I18nextWithTranslation.WrappedComponent = WrappedComponent;\n const forwardRef = (props, ref) => createElement(I18nextWithTranslation, Object.assign({}, props, {\n forwardedRef: ref\n }));\n return options.withRef ? forwardRefReact(forwardRef) : I18nextWithTranslation;\n};", "import { createElement, useMemo } from 'react';\nimport { I18nContext } from './context.js';\nexport function I18nextProvider({\n i18n,\n defaultNS,\n children\n}) {\n const value = useMemo(() => ({\n i18n,\n defaultNS\n }), [i18n, defaultNS]);\n return createElement(I18nContext.Provider, {\n value\n }, children);\n}", "import { createElement } from 'react';\nimport { useSSR } from './useSSR.js';\nimport { composeInitialProps } from './context.js';\nimport { getDisplayName } from './utils.js';\nexport const withSSR = () => function Extend(WrappedComponent) {\n function I18nextWithSSR({\n initialI18nStore,\n initialLanguage,\n ...rest\n }) {\n useSSR(initialI18nStore, initialLanguage);\n return createElement(WrappedComponent, {\n ...rest\n });\n }\n I18nextWithSSR.getInitialProps = composeInitialProps(WrappedComponent);\n I18nextWithSSR.displayName = `withI18nextSSR(${getDisplayName(WrappedComponent)})`;\n I18nextWithSSR.WrappedComponent = WrappedComponent;\n return I18nextWithSSR;\n};", "import { useContext } from 'react';\nimport { getI18n, I18nContext } from './context.js';\nimport { warnOnce } from './utils.js';\nexport const useSSR = (initialI18nStore, initialLanguage, props = {}) => {\n const {\n i18n: i18nFromProps\n } = props;\n const {\n i18n: i18nFromContext\n } = useContext(I18nContext) || {};\n const i18n = i18nFromProps || i18nFromContext || getI18n();\n if (!i18n) {\n warnOnce(i18n, 'NO_I18NEXT_INSTANCE', 'useSSR: You will need to pass in an i18next instance by using initReactI18next or by passing it via props or context. In monorepo setups, make sure there is only one instance of react-i18next.');\n return;\n }\n if (i18n.options?.isClone) return;\n if (initialI18nStore && !i18n.initializedStoreOnce) {\n if (!i18n.services?.resourceStore) {\n warnOnce(i18n, 'I18N_NOT_INITIALIZED', 'useSSR: i18n instance was found but not initialized (services.resourceStore is missing). Make sure you call i18next.init() before using useSSR \u2014 e.g. at module level, not only in getStaticProps/getServerSideProps.');\n return;\n }\n i18n.services.resourceStore.data = initialI18nStore;\n i18n.options.ns = Object.values(initialI18nStore).reduce((mem, lngResources) => {\n Object.keys(lngResources).forEach(ns => {\n if (mem.indexOf(ns) < 0) mem.push(ns);\n });\n return mem;\n }, i18n.options.ns);\n i18n.initializedStoreOnce = true;\n i18n.isInitialized = true;\n }\n if (initialLanguage && !i18n.initializedLanguageOnce) {\n i18n.changeLanguage(initialLanguage);\n i18n.initializedLanguageOnce = true;\n }\n};", "{\n \"auth\": {\n \"invalidUsernamePass\": \"Invalid username/password combination\",\n \"incorrectOldPassword\": \"Incorrect Old Password\",\n \"passwordTooShort\": \"Password must be at least 6 characters long\",\n \"passUpdated\": \"Password updated\",\n \"missingRequiredFields\": \"Missing Required Fields\"\n },\n \"error\": {\n \"notFound\": \"Not Found\",\n \"internalError\": \"Internal Server Error\",\n \"invalidArgs\": \"Invalid Arguments\",\n \"badMethod\": \"Bad Method\",\n \"notAuthenticated\": \"Not Authenticated\",\n \"permissionDenied\": \"Permission Denied\",\n \"error\": \"error: {{status}}\",\n \"errorWithMsg\": \"error {{status}}: {{msg}}\",\n \"requestTimedOut\": \"request timed out\",\n \"networkError\": \"network error\"\n },\n \"nav\": {\n \"privateProfileEnabled\": \"private profile enabled\",\n \"darkMode\": \"dark mode\",\n \"lightMode\": \"light mode\",\n \"addUrl\": \"add url\",\n \"addNote\": \"add note\",\n \"notes\": \"notes\",\n \"settings\": \"settings\",\n \"logout\": \"log out\",\n \"login\": \"log in\"\n },\n \"footer\": {\n \"sourceCode\": \"Source Code\"\n },\n \"login\": {\n \"pageTitle\": \"Log In\",\n \"username\": \"Username\",\n \"password\": \"Password\",\n \"submit\": \"Log In\"\n },\n \"changePassword\": {\n \"oldPassword\": \"Old Password\",\n \"newPassword\": \"New Password\",\n \"submit\": \"Save Changes\"\n },\n \"settings\": {\n \"serverDefault\": \"Server Default\",\n \"bookmarklet\": \"add url bookmarklet\",\n \"changePassword\": \"Change Password\",\n \"accountTitle\": \"Account Settings\",\n \"archiveDefault\": \"Archive new non-Private bookmarks by default\",\n \"privateDefault\": \"Default new bookmarks to Private\",\n \"suggestTags\": \"Enable tag suggestions\",\n \"privacyLock\": \"Privacy Lock (Private Account)\",\n \"publicTagCloud\": \"Public Tag Cloud (visible to visitors)\",\n \"archivingDisabled\": \"Archiving Disabled\",\n \"language\": \"Language\"\n },\n \"rss\": \"RSS\",\n \"filter\": {\n \"all\": \"all\",\n \"private\": \"private\",\n \"public\": \"public\",\n \"unread\": \"unread\",\n \"untagged\": \"untagged\",\n \"starred\": \"starred\"\n },\n \"pagination\": {\n \"perPage\": \"per page:\"\n },\n \"pager\": {\n \"earlier\": \"\u00AB earlier\",\n \"later\": \"later \u00BB\"\n },\n \"notes\": {\n \"youHave_one\": \"You have 1 note:\",\n \"youHave_other\": \"You have {{count}} notes:\",\n \"found_one\": \"Found 1 note:\",\n \"found_other\": \"Found {{count}} notes:\"\n },\n \"search\": {\n \"placeholder\": \"search\",\n \"clearTitle\": \"clear search results\",\n \"submitTitle\": \"submit search\",\n \"syntaxTitle\": \"search syntax\"\n },\n \"noTitle\": \"[no title]\",\n \"edit\": \"edit\",\n \"delete\": \"delete\",\n \"cancel\": \"cancel\",\n \"destroy\": \"destroy\",\n \"save\": \"save\",\n \"fetch\": \"fetch\",\n \"archive\": \"archive\",\n \"archiving\": \"archiving\",\n \"bmark\": {\n \"archiveLinkTitle\": \"archive link\",\n \"markAsRead\": \"mark as read\",\n \"viewInContext\": \"view in context\",\n \"url\": \"url\",\n \"title\": \"title\",\n \"description\": \"description\",\n \"tags\": \"tags\",\n \"private\": \"private\",\n \"toread\": \"to-read\"\n },\n \"note\": {\n \"killed\": \"you killed this note\",\n \"titleLabel\": \"title:\",\n \"descriptionLabel\": \"description:\",\n \"useMarkdown\": \"use markdown?\",\n \"publicLabel\": \"public?\"\n },\n \"addForm\": {\n \"previouslySaved\": \"previously saved\",\n \"url\": \"URL\",\n \"archive\": \"archive\",\n \"archiveUnavailable\": \"archiving is unavailable for private bookmarks\",\n \"readLater\": \"read later\",\n \"update\": \"update bookmark\",\n \"add\": \"add bookmark\",\n \"killed\": \"you killed this bookmark\"\n },\n \"tagCloud\": {\n \"relatedTags\": \"Related Tags\",\n \"topTags\": \"Top Tags\",\n \"topTagsTitle\": \"show a cloud of your most-used tags\",\n \"allTitle\": \"show all tags\",\n \"min2Title\": \"show tags with at least 2 bookmarks\",\n \"min5Title\": \"show tags with at least 5 bookmarks\",\n \"min10Title\": \"show tags with at least 10 bookmarks\",\n \"min20Title\": \"show tags with at least 20 bookmarks\",\n \"hide\": \"hide\",\n \"show\": \"show\"\n },\n \"bulkEdit\": {\n \"edit\": \"edit\",\n \"select\": \"select:\",\n \"oneBookmarkSelected\": \"1 bookmark selected\",\n \"bookmarksSelected\": \"{{count}} bookmarks selected\",\n \"thisPage\": \"this page\",\n \"allPages\": \"all pages\",\n \"action\": \"action:\",\n \"markAsRead\": \"mark as read\",\n \"unread\": \"unread\",\n \"addStars\": \"add stars\",\n \"removeStars\": \"remove stars\",\n \"makePrivate\": \"make private\",\n \"makePublic\": \"make public\",\n \"removeTags\": \"remove tags:\",\n \"addTags\": \"add tags:\",\n \"submitting\": \"submitting\u2026\",\n \"submit\": \"submit\",\n \"destroyOne\": \"destroy 1 bookmark?\",\n \"destroyMany\": \"destroy {{count}} bookmarks?\",\n \"publicOne\": \"make 1 bookmark public?\",\n \"publicMany\": \"make {{count}} bookmarks public?\",\n \"pleaseAddSelection\": \"please add a bookmark selection\",\n \"pleaseChooseAction\": \"please choose an action or enter tags\",\n \"tooManyTags\": \"cannot add more than 10 tags at the same time when over 20,000 bookmarks would be affected\",\n \"pageMismatch\": \"page bookmark count mismatch\",\n \"editedCount_one\": \"edited {{editedCount}} bookmark\",\n \"editedCount_other\": \"edited {{editedCount}} bookmarks\",\n \"editedCountMismatch_one\": \"selection count was {{selectionCount}}, but edited {{editedCount}} bookmark, due to matching bookmark data having changed\",\n \"editedCountMismatch_other\": \"selection count was {{selectionCount}}, but edited {{editedCount}} bookmarks, due to matching bookmark data having changed\"\n },\n \"docs\": {\n \"title\": \"Understanding the Search Syntax\",\n \"pageFilters\": \"Page filters\",\n \"pageFiltersDesc\": \"Searches are scoped to the currently selected page filter.\",\n \"soGiven\": \"So, given the possible page filters\",\n \"if\": \"If\",\n \"isCurrentlySelectedIncludes\": \"is currently selected, the search includes\",\n \"bookmarks\": \"bookmarks\",\n \"isCurrentlySelectedOnly\": \"is currently selected, the search only includes\",\n \"bookmarksEtc\": \"bookmarks, etc..\",\n \"combineAnd\": \"Combine Searches (AND)\",\n \"separateBySpace\": \"Separate terms by a space.\",\n \"forExample\": \"For example,\",\n \"combineOr\": \"Combine Searches (OR)\",\n \"put\": \"Put\",\n \"betweenQuery\": \"between each search query.\",\n \"excludeWords\": \"Exclude words from your search\",\n \"inFrontWord\": \"in front of a word you want to leave out.\",\n \"exactMatch\": \"Search for an exact match\",\n \"putInQuotes\": \"Put a word or phrase inside quotes.\",\n \"specificField\": \"Search on a specific field\",\n \"inFrontTerm\": \"in front of the term,\",\n \"where\": \"where\",\n \"isOneOfOptions\": \"is one of the options below\",\n \"bookmarkSearch\": \"Bookmark Search\",\n \"noteSearch\": \"Note Search\",\n \"fieldHeader\": \"FIELD\",\n \"exampleHeader\": \"EXAMPLE\",\n \"complexExamples\": \"More Complex Examples\",\n \"complexExample1Desc\": \"\\\"youtube\\\" in url, and title of \\\"haskell\\\" or title of \\\"python\\\" and after 12/31/2017\",\n \"complexExample2Desc\": \"\\\"hacker news\\\" not in title, and \\\"news\\\", \\\"cnn\\\", \\\"npr\\\" anywhere, or \\\"the guardian\\\" in the description\"\n }\n}\n", "import type { Bookmark, Filter, SharedP } from './types';\r\n\r\n/** Server-rendered page data. */\r\nexport type AppData = {\r\n /** The list of bookmarks for the current page. */\r\n bmarks: Bookmark[];\r\n /** A single bookmark, used when viewing or editing one entry. */\r\n bmark: Bookmark;\r\n /** Whether the current user owns the displayed profile. */\r\n isowner: boolean;\r\n /** Whether tag suggestions are enabled. */\r\n suggestTags?: boolean;\r\n /** Whether the archive backend is enabled. */\r\n archiveBackendEnabled?: boolean;\r\n /** The current filter applied to the bookmarks. */\r\n filter?: Filter;\r\n /** The current shared/private filter. */\r\n sharedp?: SharedP;\r\n /** The path tags currently filtering bookmarks. */\r\n tags?: string[];\r\n /** The current search query string, or null if none. */\r\n query?: string | null;\r\n};\r\n\r\n/** Server-rendered global data. */\r\nexport type App = {\r\n /** The HTTP header name used to send the CSRF token. */\r\n csrfHeaderName: string;\r\n /** The cookie name that holds the CSRF token. */\r\n csrfCookieName: string;\r\n /** The form parameter name used to submit the CSRF token. */\r\n csrfParamName: string;\r\n /** The current CSRF token value. */\r\n csrfToken: string;\r\n /** URL for the home route. */\r\n homeR: string;\r\n /** URL for the logout route. */\r\n authRlogoutR: string;\r\n /** URL for the current user's profile, or null if not logged in. */\r\n userR: string | null;\r\n /** Endpoint URL for fetching tag cloud data. */\r\n tagCloudR?: string;\r\n /** URL for the current note, or null if not viewing a note. */\r\n noteR: string | null;\r\n /** URL for the i18n backend */\r\n i18nR: string;\r\n /** The current language code (e.g. 'en', 'fr'). */\r\n lang: string;\r\n /** Server-rendered page data. */\r\n dat: AppData;\r\n};\r\n\r\ndeclare global {\r\n // Provided by the server in a <script> tag.\r\n\r\n var app: App;\r\n}\r\n\r\nexport function app(): App {\r\n return globalThis.app;\r\n}\r\n\r\nexport function tagCloudEndpoint(): string {\r\n const raw = globalThis.app.tagCloudR;\r\n if (!raw) return 'api/tagcloud';\r\n try {\r\n const u = new URL(raw, window.location.origin);\r\n const rel = `${u.pathname}${u.search}${u.hash}`;\r\n return rel.startsWith('/') ? rel.slice(1) : rel;\r\n } catch {\r\n return raw.replace(/^\\/+/, '');\r\n }\r\n}\r\n\r\nexport function fromNow(locale = navigator.language, date: Date | number | string): string {\r\n const target = date instanceof Date ? date.getTime() : new Date(date).getTime();\r\n\r\n const diff = target - Date.now();\r\n const abs = Math.abs(diff);\r\n\r\n const units: readonly [Intl.RelativeTimeFormatUnit, number][] = [\r\n ['year', 365 * 24 * 60 * 60 * 1000],\r\n ['month', 30 * 24 * 60 * 60 * 1000],\r\n ['day', 24 * 60 * 60 * 1000],\r\n ['hour', 60 * 60 * 1000],\r\n ['minute', 60 * 1000],\r\n ['second', 1000],\r\n ];\r\n\r\n const rtf = new Intl.RelativeTimeFormat(locale, { numeric: 'auto' });\r\n\r\n for (const [unit, ms] of units) {\r\n if (abs >= ms || unit === 'second') {\r\n return rtf.format(Math.round(diff / ms), unit);\r\n }\r\n }\r\n\r\n // Unreachable, but satisfies TypeScript.\r\n return '';\r\n}\r\n\r\nexport function shdatetime(lang: string, dateString: string): string {\r\n return new Date(dateString).toLocaleString(lang, {\r\n dateStyle: 'full',\r\n timeStyle: 'long',\r\n });\r\n}\r\n\r\nexport function toLocaleDateString(lang: string, dateString: string): string {\r\n return new Date(dateString).toLocaleDateString(lang, {\r\n year: 'numeric',\r\n month: 'short',\r\n day: 'numeric',\r\n });\r\n}\r\n\r\nexport function closeWindow(win: Window): void {\r\n win.close();\r\n}\r\n\r\nexport type RawHTML = string;\r\n\r\nexport function setFocus(elemId: string): void {\r\n document.getElementById(elemId)?.focus();\r\n}\r\n", "import type { TFunction } from 'i18next';\n\nexport type QueryStringArray = Array<[string, string | null]>;\n\nfunction unsafeDecode(str: string): string {\n return decodeURIComponent(str);\n}\n\nexport function parseQueryString(searchOrHash: string): QueryStringArray {\n const first = searchOrHash.slice(0, 1);\n const qs = first === '#' || first === '?' ? searchOrHash.slice(1) : searchOrHash;\n const parts = qs.split('&').filter((x) => x !== '');\n\n const decode = (s: string) => unsafeDecode(s.replace(/\\+/g, ' '));\n\n const out: QueryStringArray = [];\n for (const kv of parts) {\n const [k, ...rest] = kv.split('=');\n if (!k) continue;\n if (rest.length === 0) out.push([decode(k), null]);\n else if (rest.length === 1) out.push([decode(k), decode(rest[0] ?? '')]);\n }\n return out;\n}\n\nexport function curQuerystring(): QueryStringArray {\n return parseQueryString(window.location.search);\n}\n\nexport function lookupQueryStringValue(qs: QueryStringArray, k: string): string | null {\n for (const [key, val] of qs) {\n if (key === k) return val;\n }\n return null;\n}\n\nexport function encodeTag(tag: string): string {\n return encodeURIComponent(tag.replace(/\\+/g, '%2B'));\n}\n\nexport function fromNullableStr(s: string | null | undefined): string {\n return s ?? '';\n}\n\nexport function normalizeTags(tags: string | null): string {\n return tags?.replace(/,/g, ' ').replace(/\\s+/g, ' ').trim() ?? '';\n}\n\nexport function apiErrorMsg(t: TFunction, status: number, bodyText: string): string {\n const body = bodyText.trim();\n if (!body.includes('\\n') && !body.includes('doctype html') && body.length > 0) {\n return t('error.errorWithMsg', { status, msg: body });\n }\n return t('error.error', { status });\n}\n\n/**\n * Generates a short, non-cryptographic hash from a string.\n * @param str - The input string to hash.\n * @returns A short alphanumeric string hash.\n */\nexport function getShortHash(str: string): string {\n let hash = 5381;\n let i = str.length;\n\n while (i) {\n hash = (hash * 33) ^ str.charCodeAt(--i);\n }\n\n // Convert to an unsigned 32-bit integer, then to a base36 string\n return (hash >>> 0).toString(36);\n}\n", "import i18next from 'i18next';\nimport ChainedBackend from 'i18next-chained-backend';\nimport HttpBackend from 'i18next-http-backend';\nimport LocalStorageBackend from 'i18next-localstorage-backend';\nimport { initReactI18next } from 'react-i18next';\n\nimport translationEn from '../../static/locales/en/translation.json';\nimport { app } from './globals';\nimport { getShortHash } from './util';\n\nexport const defaultNS = 'translation';\nexport const fallbackNS = 'translation';\n\nconst a = app();\n\nvoid i18next\n .use(ChainedBackend)\n .use(initReactI18next)\n .init({\n lng: a.lang,\n fallbackLng: 'en',\n defaultNS: defaultNS,\n ns: [defaultNS],\n partialBundledLanguages: true,\n resources: {\n en: {\n translation: translationEn,\n },\n },\n backend: {\n backends: [LocalStorageBackend, HttpBackend],\n backendOptions: [\n {\n prefix: `i18next_res_${getShortHash(a.i18nR)}_`,\n expirationTime: 7 * 24 * 60 * 60 * 1000, // 7 days\n },\n {\n loadPath: `${a.i18nR}/{{lng}}/{{ns}}.json`,\n },\n ],\n },\n interpolation: {\n escapeValue: false,\n },\n load: 'currentOnly',\n });\n\nexport default i18next;\n", "import './i18n';\n\nimport { type ReactNode, useLayoutEffect } from 'react';\nimport { createRoot } from 'react-dom/client';\n\nimport { logout } from './api';\nimport { AccountSettingsView } from './components/AccountSettings';\nimport { AddForm } from './components/AddForm';\nimport { BList } from './components/BList';\nimport { BulkEdit } from './components/BulkEdit';\nimport { NList } from './components/NList';\nimport { NNote } from './components/NNote';\nimport { TagCloud } from './components/TagCloud';\nimport type { AccountSettings, Bookmark, ColorSchemePreference, Note, TagCloudMode } from './types';\nimport { tagCloudModeToF } from './types';\n\nfunction selectEl(selector: string): Element | null {\n return document.querySelector(selector);\n}\n\nfunction viewRendered(): void {\n const el = document.querySelector('#content');\n if (el) el.setAttribute('view-rendered', '');\n}\n\nfunction RenderReady({ children }: { children: ReactNode }) {\n useLayoutEffect(() => {\n viewRendered();\n }, []);\n\n return children;\n}\n\nfunction renderView(renderElSelector: string, node: ReactNode): void {\n const el = selectEl(renderElSelector);\n if (!el) return;\n createRoot(el).render(<RenderReady>{node}</RenderReady>);\n}\n\nexport const logoutE = (e: Event) => () => {\n e.preventDefault();\n void logout();\n};\n\nexport const renderBookmarks = (renderElSelector: string) => (bmarks: Bookmark[]) => () => {\n renderView(renderElSelector, <BList initial={bmarks} />);\n};\n\nexport const renderBulkEdit = (renderElSelector: string) => (bcount: number) => () => {\n renderView(renderElSelector, <BulkEdit bcount={bcount} />);\n};\n\nexport const renderTagCloud = (renderElSelector: string) => (tagCloudMode: TagCloudMode) => () => {\n const el = selectEl(renderElSelector);\n if (!el) return;\n createRoot(el).render(<TagCloud initialMode={tagCloudModeToF(tagCloudMode)} />);\n};\n\nexport const renderAddForm = (renderElSelector: string) => (bmark: Bookmark) => () => {\n renderView(renderElSelector, <AddForm initial={bmark} />);\n};\n\nexport const renderNotes = (renderElSelector: string) => (notes: Note[]) => () => {\n renderView(renderElSelector, <NList initial={notes} />);\n};\n\nexport const renderNote = (renderElSelector: string) => (note: Note) => () => {\n renderView(renderElSelector, <NNote initial={note} />);\n};\n\nexport const renderAccountSettings =\n (renderElSelector: string) => (accountSettings: AccountSettings) => () => {\n renderView(renderElSelector, <AccountSettingsView initial={accountSettings} />);\n };\n\nexport function initColorSchemeToggle(): void {\n function isColorSchemePreference(value: string | null): value is ColorSchemePreference {\n return value === 'light' || value === 'dark';\n }\n function getEffectiveColorScheme(): ColorSchemePreference {\n const explicit = document.documentElement.dataset.colorScheme;\n if (explicit === 'light' || explicit === 'dark') return explicit;\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n }\n\n function applyColorSchemePreference(preference: ColorSchemePreference): void {\n document.documentElement.dataset.colorScheme = preference;\n }\n\n const colorSchemeStorageKey = 'espial-color-scheme';\n const stored = window.localStorage.getItem(colorSchemeStorageKey);\n if (isColorSchemePreference(stored)) {\n applyColorSchemePreference(stored);\n }\n\n const toggleEl = document.querySelector<HTMLAnchorElement>('#color-scheme-toggle');\n if (!toggleEl) return;\n\n toggleEl.addEventListener('click', (e) => {\n e.preventDefault();\n const next: ColorSchemePreference = getEffectiveColorScheme() === 'dark' ? 'light' : 'dark';\n applyColorSchemePreference(next);\n window.localStorage.setItem(colorSchemeStorageKey, next);\n });\n}\n", "/**\nBase class for all Ky-specific errors. `HTTPError`, `NetworkError`, `TimeoutError`, and `ForceRetryError` extend this class.\n\nYou can use `instanceof KyError` to check if an error originated from Ky, or use the `isKyError()` type guard for cross-realm compatibility and TypeScript type narrowing.\n\nNote: `SchemaValidationError` is intentionally not considered a Ky error. `KyError` covers failures in Ky's HTTP lifecycle (bad status, timeout, retry), while schema validation errors originate from the user-provided schema, not from Ky itself.\n*/\nexport class KyError extends Error {\n\toverride name = 'KyError';\n\n\tget isKyError(): true {\n\t\treturn true;\n\t}\n}\n", "import type {NormalizedOptions} from '../types/options.js';\nimport type {KyRequest} from '../types/request.js';\nimport type {KyResponse} from '../types/response.js';\nimport {KyError} from './KyError.js';\n\n/**\nError thrown when the response has a non-2xx status code and `throwHttpErrors` is enabled.\n\nThe error has a `response` property with the `Response` object, a `request` property with the `Request` object, an `options` property with the normalized options (either passed to `ky` when creating an instance with `ky.create()` or directly when performing the request), and a `data` property with the pre-parsed response body. For JSON responses (based on `Content-Type`), the body is parsed using the `parseJson` option if set, or `JSON.parse` by default. For other content types, it is set as plain text. If the body is empty or parsing fails, `data` will be `undefined`. To avoid hanging or excessive buffering, `error.data` population is bounded by the request timeout and a 10 MiB response body size limit. The `data` property is populated before `beforeError` hooks run, so hooks can access it.\n\nThe response body is automatically consumed when populating `error.data`, so `error.response.json()` and other body methods will not work. Use `error.data` instead. The `error.response` object is still available for headers, status, etc.\n\nBe aware that some types of errors, such as network errors, inherently mean that a response was not received. In that case, the error will be an instance of `NetworkError` instead of `HTTPError` and will not contain a `response` property.\n*/\nexport class HTTPError<T = unknown> extends KyError {\n\toverride name = 'HTTPError' as const;\n\tresponse: KyResponse<T>;\n\trequest: KyRequest;\n\toptions: NormalizedOptions;\n\tdata: T | string | undefined;\n\n\tconstructor(response: Response, request: Request, options: NormalizedOptions) {\n\t\tconst code = (response.status || response.status === 0) ? response.status : '';\n\t\tconst title = response.statusText ?? '';\n\t\tconst status = `${code} ${title}`.trim();\n\t\tconst reason = status ? `status code ${status}` : 'an unknown error';\n\n\t\tsuper(`Request failed with ${reason}: ${request.method} ${request.url}`);\n\n\t\tthis.response = response;\n\t\tthis.request = request;\n\t\tthis.options = options;\n\t}\n}\n", "import type {KyRequest} from '../types/request.js';\nimport {KyError} from './KyError.js';\n\n/**\nError thrown when a network error occurs during the request (e.g., DNS failure, connection refused, offline). It has a `request` property with the `Request` object. The original error is available via the standard `cause` property.\n\nNetwork errors are automatically retried (for retriable methods).\n\nNote: Network errors are detected using runtime-specific heuristics. Unrecognized runtimes may produce errors that are not wrapped in `NetworkError`. Use the `shouldRetry` option to handle such cases.\n*/\nexport class NetworkError extends KyError {\n\toverride name = 'NetworkError' as const;\n\trequest: KyRequest;\n\n\tconstructor(request: Request, options?: {cause?: Error}) {\n\t\tsuper(`Request failed due to a network error: ${request.method} ${request.url}`, options);\n\t\tthis.request = request;\n\t}\n}\n", "/**\nWrapper for non-Error values that were thrown.\n\nIn JavaScript, any value can be thrown (not just Error instances). This class wraps such values to ensure consistent error handling.\n*/\nexport class NonError extends Error {\n\toverride name = 'NonError';\n\treadonly value: unknown;\n\n\tconstructor(value: unknown) {\n\t\tlet message = 'Non-error value was thrown';\n\n\t\t// Intentionally minimal as this error is just an edge-case.\n\t\ttry {\n\t\t\tif (typeof value === 'string') {\n\t\t\t\tmessage = value;\n\t\t\t} else if (value && typeof value === 'object' && 'message' in value && typeof value.message === 'string') {\n\t\t\t\tmessage = value.message;\n\t\t\t}\n\t\t} catch {\n\t\t\t// Use default message if accessing properties throws\n\t\t}\n\n\t\tsuper(message);\n\n\t\tthis.value = value;\n\t}\n}\n", "import type {ForceRetryOptions} from '../core/constants.js';\nimport {KyError} from './KyError.js';\nimport {NonError} from './NonError.js';\n\n/**\nError used to signal a forced retry from `afterResponse` hooks.\n\nThis is thrown when `ky.retry()` is returned from an `afterResponse` hook. It is observable in `beforeRetry` and `beforeError` hooks via the `isForceRetryError()` type guard.\n*/\nexport class ForceRetryError extends KyError {\n\toverride name = 'ForceRetryError' as const;\n\tcustomDelay: number | undefined;\n\tcode: string | undefined;\n\tcustomRequest: Request | undefined;\n\n\tconstructor(options?: ForceRetryOptions) {\n\t\t// Runtime protection: wrap non-Error causes in NonError\n\t\t// TypeScript type is Error for guidance, but JS users can pass anything\n\t\tconst cause = options?.cause\n\t\t\t? (options.cause instanceof Error ? options.cause : new NonError(options.cause))\n\t\t\t: undefined;\n\n\t\tsuper(\n\t\t\toptions?.code ? `Forced retry: ${options.code}` : 'Forced retry',\n\t\t\tcause ? {cause} : undefined,\n\t\t);\n\n\t\tthis.customDelay = options?.delay;\n\t\tthis.code = options?.code;\n\t\tthis.customRequest = options?.request;\n\t}\n}\n", "import type {StandardSchemaV1Issue} from '../types/standard-schema.js';\n\n/**\nThe error thrown when [Standard Schema](https://github.com/standard-schema/standard-schema) validation fails in `.json(schema)`. It has an `issues` property with the validation issues from the schema.\n\nThis error intentionally does not extend `KyError` because it does not represent a failure in Ky's HTTP lifecycle. The request succeeded; the user's schema rejected the data. As such, it is not matched by `isKyError()`.\n\n@example\n```\nimport ky, {SchemaValidationError} from 'ky';\nimport {z} from 'zod';\n\nconst userSchema = z.object({name: z.string()});\n\ntry {\n\tconst user = await ky('/api/user').json(userSchema);\n\tconsole.log(user.name);\n} catch (error) {\n\tif (error instanceof SchemaValidationError) {\n\t\tconsole.error(error.issues);\n\t}\n}\n```\n*/\nexport class SchemaValidationError extends Error {\n\toverride name = 'SchemaValidationError' as const;\n\treadonly issues: readonly StandardSchemaV1Issue[];\n\n\tconstructor(issues: readonly StandardSchemaV1Issue[]) {\n\t\tsuper('Response schema validation failed');\n\t\tthis.issues = issues;\n\t}\n}\n", "import type {KyRequest} from '../types/request.js';\nimport {KyError} from './KyError.js';\n\n/**\nError thrown when the request times out. It has a `request` property with the `Request` object.\n*/\nexport class TimeoutError extends KyError {\n\toverride name = 'TimeoutError' as const;\n\trequest: KyRequest;\n\n\tconstructor(request: Request) {\n\t\tsuper(`Request timed out: ${request.method} ${request.url}`);\n\t\tthis.request = request;\n\t}\n}\n", "import type {Expect, Equal} from '@type-challenges/utils';\nimport {type KyOptionsRegistry, type RequestHttpMethod} from '../types/options.js';\n\nexport const supportsRequestStreams = (() => {\n\tlet duplexAccessed = false;\n\tlet hasContentType = false;\n\tconst supportsReadableStream = typeof globalThis.ReadableStream === 'function';\n\tconst supportsRequest = typeof globalThis.Request === 'function';\n\n\tif (supportsReadableStream && supportsRequest) {\n\t\ttry {\n\t\t\thasContentType = new globalThis.Request('https://empty.invalid', {\n\t\t\t\tbody: new globalThis.ReadableStream(),\n\t\t\t\tmethod: 'POST',\n\t\t\t\t// @ts-expect-error - Types are outdated.\n\t\t\t\tget duplex() {\n\t\t\t\t\tduplexAccessed = true;\n\t\t\t\t\treturn 'half';\n\t\t\t\t},\n\t\t\t}).headers.has('Content-Type');\n\t\t} catch (error) {\n\t\t\t// QQBrowser on iOS throws \"unsupported BodyInit type\" error (see issue #581)\n\t\t\tif (error instanceof Error && error.message === 'unsupported BodyInit type') {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\treturn duplexAccessed && !hasContentType;\n})();\n\nexport const supportsAbortController = typeof globalThis.AbortController === 'function';\nexport const supportsAbortSignal = typeof globalThis.AbortSignal === 'function' && typeof globalThis.AbortSignal.any === 'function';\nexport const supportsResponseStreams = typeof globalThis.ReadableStream === 'function';\nexport const supportsFormData = typeof globalThis.FormData === 'function';\n\nexport const requestMethods = ['get', 'post', 'put', 'patch', 'head', 'delete'] as const;\n\nconst validate = <T extends Array<true>>() => undefined as unknown as T;\nvalidate<[\n\tExpect<Equal<typeof requestMethods[number], RequestHttpMethod>>,\n]>();\n\nexport const responseTypes = {\n\tjson: 'application/json',\n\ttext: 'text/*',\n\tformData: 'multipart/form-data',\n\tarrayBuffer: '*/*',\n\tblob: '*/*',\n\t// Supported in modern Fetch implementations (for example, browsers and recent Node.js/undici).\n\t// We still feature-check at runtime before exposing the shortcut.\n\tbytes: '*/*',\n} as const;\n\n// The maximum value of a 32bit int (see issue #117)\nexport const maxSafeTimeout = 2_147_483_647;\n\n// Size in bytes of a typical form boundary (e.g., '------WebKitFormBoundaryaxpyiPgbbPti10Rw'), used to help estimate upload size\nexport const usualFormBoundarySize = 40;\n\n/**\nSymbol that can be returned by a `beforeRetry` hook to stop retrying without throwing an error.\n*/\nexport const stop = Symbol('stop');\n\n/**\nOptions for forcing a retry via `ky.retry()`.\n*/\nexport type ForceRetryOptions = {\n\t/**\n\tCustom delay in milliseconds before retrying.\n\n\tIf not provided, uses the default retry delay calculation based on `retry.delay` configuration.\n\n\t**Note:** Custom delays bypass jitter and `backoffLimit`. This is intentional, as custom delays often come from server responses (e.g., `Retry-After` headers) and should be respected exactly as specified.\n\t*/\n\tdelay?: number;\n\n\t/**\n\tError code for the retry.\n\n\tThis machine-readable identifier will be included in the error message passed to `beforeRetry` hooks, allowing you to distinguish between different types of forced retries.\n\n\t@example\n\t```\n\treturn ky.retry({code: 'RATE_LIMIT'});\n\t// Resulting error message: 'Forced retry: RATE_LIMIT'\n\t```\n\t*/\n\tcode?: string;\n\n\t/**\n\tOriginal error that caused the retry.\n\n\tThis allows you to preserve the error chain when forcing a retry based on caught exceptions. The error will be set as the `cause` of the `ForceRetryError`, enabling proper error chain traversal.\n\n\t@example\n\t```\n\ttry {\n\t\tconst data = await response.json();\n\t\tvalidateBusinessLogic(data);\n\t} catch (error) {\n\t\treturn ky.retry({\n\t\t\tcode: 'VALIDATION_FAILED',\n\t\t\tcause: error // Preserves original error in chain\n\t\t});\n\t}\n\t```\n\t*/\n\tcause?: Error;\n\n\t/**\n\tCustom request to use for the retry.\n\n\tThis allows you to modify or completely replace the request during a forced retry. The custom request becomes the starting point for the retry - `beforeRetry` hooks can still further modify it if needed.\n\n\t**Note:** The custom request's `signal` will be replaced with Ky's managed signal to handle timeouts and user-provided abort signals correctly. If the original request body has been consumed, you must provide a new body or clone the request before consuming.\n\n\t**Warning:** Custom retry requests are not sanitized. If you reuse headers across origins, remove any credentials you do not want forwarded.\n\n\t@example\n\t```\n\t// Fallback to a different endpoint\n\treturn ky.retry({\n\t\trequest: new Request('https://backup-api.com/endpoint', {\n\t\t\tmethod: request.method,\n\t\t\theaders: request.headers,\n\t\t}),\n\t\tcode: 'BACKUP_ENDPOINT'\n\t});\n\n\t// Retry with refreshed authentication token\n\tconst data = await response.json();\n\treturn ky.retry({\n\t\trequest: new Request(request, {\n\t\t\theaders: {\n\t\t\t\t...Object.fromEntries(request.headers),\n\t\t\t\t'Authorization': `Bearer ${data.newToken}`\n\t\t\t}\n\t\t}),\n\t\tcode: 'TOKEN_REFRESHED'\n\t});\n\t```\n\t*/\n\trequest?: Request;\n};\n\n/**\nMarker returned by `ky.retry()` to signal a forced retry from `afterResponse` hooks.\n*/\nexport class RetryMarker {\n\toptions: ForceRetryOptions | undefined;\n\n\tconstructor(options?: ForceRetryOptions) {\n\t\tthis.options = options;\n\t}\n}\n\n/**\nForce a retry from an `afterResponse` hook.\n\nThis allows you to retry a request based on the response content, even if the response has a successful status code. The retry will respect the `retry.limit` option and skip the `shouldRetry` check. The forced retry is observable in `beforeRetry` hooks, where the error will be a `ForceRetryError`.\n\n@param options - Optional configuration for the retry.\n\n@example\n```\nimport ky, {isForceRetryError} from 'ky';\n\nconst api = ky.extend({\n\thooks: {\n\t\tafterResponse: [\n\t\t\tasync ({request, response}) => {\n\t\t\t\t// Retry based on response body content\n\t\t\t\tif (response.status === 200) {\n\t\t\t\t\tconst data = await response.json();\n\n\t\t\t\t\t// Simple retry with default delay\n\t\t\t\t\tif (data.error?.code === 'TEMPORARY_ERROR') {\n\t\t\t\t\t\treturn ky.retry();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Retry with custom delay from API response\n\t\t\t\t\tif (data.error?.code === 'RATE_LIMIT') {\n\t\t\t\t\t\treturn ky.retry({\n\t\t\t\t\t\t\tdelay: data.error.retryAfter * 1000,\n\t\t\t\t\t\t\tcode: 'RATE_LIMIT'\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t// Retry with a modified request (e.g., fallback endpoint)\n\t\t\t\t\tif (data.error?.code === 'FALLBACK_TO_BACKUP') {\n\t\t\t\t\t\treturn ky.retry({\n\t\t\t\t\t\t\trequest: new Request('https://backup-api.com/endpoint', {\n\t\t\t\t\t\t\t\tmethod: request.method,\n\t\t\t\t\t\t\t\theaders: request.headers,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\tcode: 'BACKUP_ENDPOINT'\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t// Retry with refreshed authentication\n\t\t\t\t\tif (data.error?.code === 'TOKEN_REFRESH' && data.newToken) {\n\t\t\t\t\t\treturn ky.retry({\n\t\t\t\t\t\t\trequest: new Request(request, {\n\t\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t\t...Object.fromEntries(request.headers),\n\t\t\t\t\t\t\t\t\t'Authorization': `Bearer ${data.newToken}`\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\tcode: 'TOKEN_REFRESHED'\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t// Retry with cause to preserve error chain\n\t\t\t\t\ttry {\n\t\t\t\t\t\tvalidateResponse(data);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\treturn ky.retry({\n\t\t\t\t\t\t\tcode: 'VALIDATION_FAILED',\n\t\t\t\t\t\t\tcause: error\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\tbeforeRetry: [\n\t\t\t({error, retryCount}) => {\n\t\t\t\t// Observable in beforeRetry hooks\n\t\t\t\tif (isForceRetryError(error)) {\n\t\t\t\t\tconsole.log(`Forced retry #${retryCount}: ${error.message}`);\n\t\t\t\t\t// Example output: \"Forced retry #1: Forced retry: RATE_LIMIT\"\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t}\n});\n\nconst response = await api.get('https://example.com/api');\n```\n*/\nexport const retry = (options?: ForceRetryOptions) => new RetryMarker(options);\n\nexport const kyOptionKeys: KyOptionsRegistry = {\n\tjson: true,\n\tparseJson: true,\n\tstringifyJson: true,\n\tsearchParams: true,\n\tbaseUrl: true,\n\tprefix: true,\n\tretry: true,\n\ttimeout: true,\n\ttotalTimeout: true,\n\thooks: true,\n\tthrowHttpErrors: true,\n\tonDownloadProgress: true,\n\tonUploadProgress: true,\n\tfetch: true,\n\tcontext: true,\n};\n\n// Standard RequestInit options that should NOT be passed separately to fetch()\n// because they're already applied to the Request object.\n// Note: `dispatcher` and `priority` are NOT included here - they're fetch-only\n// options that the Request constructor doesn't accept, so they need to be passed\n// separately to fetch().\nexport const requestOptionsRegistry = {\n\tmethod: true,\n\theaders: true,\n\tbody: true,\n\tmode: true,\n\tcredentials: true,\n\tcache: true,\n\tredirect: true,\n\treferrer: true,\n\treferrerPolicy: true,\n\tintegrity: true,\n\tkeepalive: true,\n\tsignal: true,\n\twindow: true,\n\tduplex: true,\n} as const;\n", "import type {Options} from '../types/options.js';\nimport {usualFormBoundarySize} from '../core/constants.js';\n\nconst encoder = new TextEncoder();\n\n// eslint-disable-next-line @typescript-eslint/no-restricted-types\nexport const getBodySize = (body?: BodyInit | null): number => {\n\tif (!body) {\n\t\treturn 0;\n\t}\n\n\tif (body instanceof FormData) {\n\t\t// This is an approximation, as FormData size calculation is not straightforward\n\t\tlet size = 0;\n\n\t\tfor (const [key, value] of body) {\n\t\t\tsize += usualFormBoundarySize;\n\t\t\tsize += encoder.encode(`Content-Disposition: form-data; name=\"${key}\"`).byteLength;\n\t\t\tsize += typeof value === 'string'\n\t\t\t\t? encoder.encode(value).byteLength\n\t\t\t\t: value.size;\n\t\t}\n\n\t\treturn size;\n\t}\n\n\tif (body instanceof Blob) {\n\t\treturn body.size;\n\t}\n\n\tif (body instanceof ArrayBuffer || ArrayBuffer.isView(body)) {\n\t\treturn body.byteLength;\n\t}\n\n\tif (typeof body === 'string') {\n\t\treturn encoder.encode(body).byteLength;\n\t}\n\n\tif (body instanceof URLSearchParams) {\n\t\treturn encoder.encode(body.toString()).byteLength;\n\t}\n\n\treturn 0;\n};\n\nconst withProgress = (stream: ReadableStream<Uint8Array>, totalBytes: number, onProgress: Options['onDownloadProgress'] | Options['onUploadProgress']): ReadableStream<Uint8Array> => {\n\tlet previousChunk: Uint8Array | undefined;\n\tlet transferredBytes = 0;\n\n\treturn stream.pipeThrough(new TransformStream<Uint8Array, Uint8Array>({\n\t\ttransform(currentChunk, controller) {\n\t\t\tcontroller.enqueue(currentChunk);\n\n\t\t\tif (previousChunk) {\n\t\t\t\ttransferredBytes += previousChunk.byteLength;\n\n\t\t\t\tlet percent = totalBytes === 0 ? 0 : transferredBytes / totalBytes;\n\t\t\t\t// Avoid reporting 100% progress before the stream is actually finished (in case totalBytes is inaccurate)\n\t\t\t\tif (percent >= 1) {\n\t\t\t\t\t// Epsilon is used here to get as close as possible to 100% without reaching it.\n\t\t\t\t\t// If we were to use 0.99 here, percent could potentially go backwards.\n\t\t\t\t\tpercent = 1 - Number.EPSILON;\n\t\t\t\t}\n\n\t\t\t\tonProgress?.({percent, totalBytes: Math.max(totalBytes, transferredBytes), transferredBytes}, previousChunk);\n\t\t\t}\n\n\t\t\tpreviousChunk = currentChunk;\n\t\t},\n\t\tflush() {\n\t\t\tif (previousChunk) {\n\t\t\t\ttransferredBytes += previousChunk.byteLength;\n\t\t\t\tonProgress?.({percent: 1, totalBytes: Math.max(totalBytes, transferredBytes), transferredBytes}, previousChunk);\n\t\t\t}\n\t\t},\n\t}));\n};\n\nexport const streamResponse = (response: Response, onDownloadProgress: Options['onDownloadProgress']) => {\n\tif (!response.body) {\n\t\treturn response;\n\t}\n\n\tconst responseInit = {\n\t\tstatus: response.status,\n\t\tstatusText: response.statusText,\n\t\theaders: response.headers,\n\t};\n\n\tif (response.status === 204) {\n\t\treturn new Response(null, responseInit);\n\t}\n\n\tconst totalBytes = Math.max(0, Number(response.headers.get('content-length')) || 0);\n\treturn new Response(withProgress(response.body, totalBytes, onDownloadProgress), responseInit);\n};\n\n// eslint-disable-next-line @typescript-eslint/no-restricted-types\nexport const streamRequest = (request: Request, onUploadProgress: Options['onUploadProgress'], originalBody?: BodyInit | null) => {\n\tif (!request.body) {\n\t\treturn request;\n\t}\n\n\t// Use original body for size calculation since request.body is already a stream\n\tconst totalBytes = getBodySize(originalBody ?? request.body);\n\n\treturn new Request(request, {\n\t\t// @ts-expect-error - Types are outdated.\n\t\tduplex: 'half',\n\t\tbody: withProgress(request.body, totalBytes, onUploadProgress),\n\t});\n};\n", "// eslint-disable-next-line @typescript-eslint/no-restricted-types\nexport const isObject = (value: unknown): value is object => value !== null && typeof value === 'object';\n", "import type {KyHeadersInit, Options} from '../types/options.js';\nimport type {Hooks} from '../types/hooks.js';\nimport {supportsAbortSignal} from '../core/constants.js';\nimport {isObject} from './is.js';\n\nconst replaceSymbol: unique symbol = Symbol('replaceOption');\n\ntype ReplaceMarked<T> = {\n\t[replaceSymbol]: true;\n\tvalue: T;\n};\n\ntype ReplaceState<T> = {\n\tisReplace: boolean;\n\tvalue: T;\n};\n\nconst getReplaceState = <T>(value: T): ReplaceState<T> =>\n\tisObject(value) && (value as any)[replaceSymbol] === true\n\t\t? {\n\t\t\tisReplace: true,\n\t\t\tvalue: (value as unknown as ReplaceMarked<T>).value,\n\t\t}\n\t\t: {\n\t\t\tisReplace: false,\n\t\t\tvalue,\n\t\t};\n\n/**\nWraps a value so that `ky.extend()` will replace the parent value instead of merging with it. Works with hooks, headers, search parameters, context, and any other deep-merged option.\n\nBy default, `.extend()` deep-merges options with the parent instance: hooks get appended, headers get merged, and search parameters get accumulated. Use `replaceOption` when you want to fully replace a merged property instead.\n\n@example\n```\nimport ky, {replaceOption} from 'ky';\n\nconst base = ky.create({\n\thooks: {beforeRequest: [addAuth, addTracking]},\n});\n\n// Replaces instead of appending\nconst extended = base.extend({\n\thooks: replaceOption({beforeRequest: [onlyThis]}),\n});\n// hooks.beforeRequest is now [onlyThis], not [addAuth, addTracking, onlyThis]\n```\n*/\nexport const replaceOption = <T>(value: T): T => {\n\tconst markedValue: ReplaceMarked<T> = {[replaceSymbol]: true, value};\n\treturn markedValue as unknown as T;\n};\n\nexport const validateAndMerge = (...sources: Array<Partial<Options> | undefined>): Partial<Options> => {\n\tfor (const source of sources) {\n\t\tif ((!isObject(source) || Array.isArray(source)) && source !== undefined) {\n\t\t\tthrow new TypeError('The `options` argument must be an object');\n\t\t}\n\t}\n\n\treturn deepMerge({}, ...sources);\n};\n\nexport const mergeHeaders = (source1: KyHeadersInit = {}, source2: KyHeadersInit = {}) => {\n\tconst result = new globalThis.Headers(source1 as RequestInit['headers']);\n\tconst isHeadersInstance = source2 instanceof globalThis.Headers;\n\tconst source = new globalThis.Headers(source2 as RequestInit['headers']);\n\n\tfor (const [key, value] of source.entries()) {\n\t\tif ((isHeadersInstance && value === 'undefined') || value === undefined) {\n\t\t\tresult.delete(key);\n\t\t} else {\n\t\t\tresult.set(key, value);\n\t\t}\n\t}\n\n\treturn result;\n};\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> => {\n\tif (!isObject(value) || Array.isArray(value)) {\n\t\treturn false;\n\t}\n\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn prototype === Object.prototype || prototype === null;\n};\n\nexport const cloneShallow = <T>(value: T): T => {\n\tif (value instanceof URLSearchParams) {\n\t\tconst copy = new URLSearchParams(value) as URLSearchParams & {[deletedParametersSymbol]?: Set<string>};\n\t\tconst deleted = (value as URLSearchParams & {[deletedParametersSymbol]?: Set<string>})[deletedParametersSymbol];\n\t\tif (deleted) {\n\t\t\t// Preserve internal deletion markers so init-hook cloning does not resurrect params removed during option merging.\n\t\t\tcopy[deletedParametersSymbol] = new Set(deleted);\n\t\t}\n\n\t\treturn copy as T;\n\t}\n\n\tif (value instanceof globalThis.Headers) {\n\t\treturn new globalThis.Headers(value) as T;\n\t}\n\n\tif (Array.isArray(value)) {\n\t\treturn [...value] as T;\n\t}\n\n\tif (isPlainObject(value)) {\n\t\tconst copy = {...value};\n\t\treturn copy as T;\n\t}\n\n\treturn value;\n};\n\nconst normalizeHeaderObject = (headers: Record<string, string | undefined>): Record<string, string> =>\n\tObject.fromEntries(\n\t\tObject.entries(headers).filter((entry): entry is [string, string] => entry[1] !== undefined),\n\t);\n\nconst mergeHeaderContainers = (source1: KyHeadersInit, source2: KyHeadersInit): KyHeadersInit => {\n\tif (isPlainObject(source1) && isPlainObject(source2)) {\n\t\treturn normalizeHeaderObject({...source1, ...source2});\n\t}\n\n\treturn mergeHeaders(source1, source2);\n};\n\nfunction newHookValue<K extends keyof Hooks>(original: Hooks, incoming: Hooks, property: K): Required<Hooks>[K] {\n\treturn (Object.hasOwn(incoming, property) && incoming[property] === undefined)\n\t\t? []\n\t\t: deepMerge<Required<Hooks>[K]>(original[property] ?? [], incoming[property] ?? []);\n}\n\nexport const mergeHooks = (original: Hooks = {}, incoming: Hooks = {}): Required<Hooks> => (\n\t{\n\t\tinit: newHookValue(original, incoming, 'init'),\n\t\tbeforeRequest: newHookValue(original, incoming, 'beforeRequest'),\n\t\tbeforeRetry: newHookValue(original, incoming, 'beforeRetry'),\n\t\tbeforeError: newHookValue(original, incoming, 'beforeError'),\n\t\tafterResponse: newHookValue(original, incoming, 'afterResponse'),\n\t}\n);\n\nexport const deletedParametersSymbol = Symbol('deletedParameters');\n\nconst appendSearchParameters = (target: any, source: any): URLSearchParams => {\n\tconst result = new URLSearchParams() as URLSearchParams & {[deletedParametersSymbol]?: Set<string>};\n\tconst deleted = new Set<string>();\n\n\tfor (const input of [target, source]) {\n\t\tif (input === undefined) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (input instanceof URLSearchParams) {\n\t\t\tfor (const [key, value] of input.entries()) {\n\t\t\t\tresult.append(key, value);\n\t\t\t\tdeleted.delete(key);\n\t\t\t}\n\n\t\t\tconst inputDeleted = (input as any)[deletedParametersSymbol] as Set<string> | undefined;\n\t\t\tif (inputDeleted) {\n\t\t\t\tfor (const key of inputDeleted) {\n\t\t\t\t\tresult.delete(key);\n\t\t\t\t\tdeleted.add(key);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (Array.isArray(input)) {\n\t\t\tfor (const pair of input) {\n\t\t\t\tif (!Array.isArray(pair) || pair.length !== 2) {\n\t\t\t\t\tthrow new TypeError('Array search parameters must be provided in [[key, value], ...] format');\n\t\t\t\t}\n\n\t\t\t\tresult.append(String(pair[0]), String(pair[1]));\n\t\t\t\tdeleted.delete(String(pair[0]));\n\t\t\t}\n\t\t} else if (isObject(input)) {\n\t\t\tfor (const [key, value] of Object.entries(input)) {\n\t\t\t\tif (value === undefined) {\n\t\t\t\t\tresult.delete(key);\n\t\t\t\t\tdeleted.add(key);\n\t\t\t\t} else {\n\t\t\t\t\tresult.append(key, String(value));\n\t\t\t\t\tdeleted.delete(key);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// String\n\t\t\tconst parameters = new URLSearchParams(input);\n\t\t\tfor (const [key, value] of parameters.entries()) {\n\t\t\t\tresult.append(key, value);\n\t\t\t\tdeleted.delete(key);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (deleted.size > 0) {\n\t\tresult[deletedParametersSymbol] = deleted;\n\t}\n\n\treturn result;\n};\n\n// TODO: Make this strongly-typed (no `any`).\nexport const deepMerge = <T>(...sources: Array<Partial<T> | undefined>): T => {\n\tlet returnValue: any = {};\n\tlet headers: KyHeadersInit = {};\n\tlet hooks = {};\n\tlet searchParameters: any;\n\tconst signals: AbortSignal[] = [];\n\n\tfor (const source of sources) {\n\t\tif (Array.isArray(source)) {\n\t\t\tif (!Array.isArray(returnValue)) {\n\t\t\t\treturnValue = [];\n\t\t\t}\n\n\t\t\treturnValue = [...returnValue, ...source];\n\t\t} else if (isObject(source)) {\n\t\t\tfor (let [key, value] of Object.entries(source)) {\n\t\t\t\t// Special handling for AbortSignal instances\n\t\t\t\tif (key === 'signal' && value instanceof globalThis.AbortSignal) {\n\t\t\t\t\tsignals.push(value);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst replaceState = getReplaceState(value);\n\t\t\t\tconst {isReplace} = replaceState;\n\t\t\t\tvalue = replaceState.value;\n\n\t\t\t\t// Special handling for context - shallow merge only\n\t\t\t\tif (key === 'context') {\n\t\t\t\t\tif (value !== undefined && value !== null && (!isObject(value) || Array.isArray(value))) {\n\t\t\t\t\t\tthrow new TypeError('The `context` option must be an object');\n\t\t\t\t\t}\n\n\t\t\t\t\t// Shallow merge: always create a new object to prevent mutation bugs\n\t\t\t\t\treturnValue = {\n\t\t\t\t\t\t...returnValue,\n\t\t\t\t\t\tcontext: (value === undefined || value === null)\n\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t: (isReplace\n\t\t\t\t\t\t\t\t? {...value}\n\t\t\t\t\t\t\t\t: {...returnValue.context, ...value}),\n\t\t\t\t\t};\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Special handling for searchParams\n\t\t\t\tif (key === 'searchParams') {\n\t\t\t\t\tif (value === undefined || value === null) {\n\t\t\t\t\t\t// Explicit undefined or null removes searchParams\n\t\t\t\t\t\tsearchParameters = undefined;\n\t\t\t\t\t} else if (isReplace) {\n\t\t\t\t\t\tsearchParameters = value;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// First source: keep as-is to preserve type (string/object/URLSearchParams)\n\t\t\t\t\t\t// Subsequent sources: merge and convert to URLSearchParams\n\t\t\t\t\t\tsearchParameters = searchParameters === undefined ? value : appendSearchParameters(searchParameters, value);\n\t\t\t\t\t}\n\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (isObject(value) && !isReplace && key in returnValue) {\n\t\t\t\t\tvalue = deepMerge(returnValue[key], value);\n\t\t\t\t}\n\n\t\t\t\treturnValue = {...returnValue, [key]: value};\n\t\t\t}\n\n\t\t\tif (isObject((source as any).hooks)) {\n\t\t\t\tconst {value: hookValue, isReplace} = getReplaceState((source as any).hooks);\n\t\t\t\thooks = isReplace\n\t\t\t\t\t? mergeHooks({}, hookValue)\n\t\t\t\t\t: mergeHooks(hooks, hookValue);\n\n\t\t\t\treturnValue.hooks = hooks;\n\t\t\t}\n\n\t\t\tif (isObject((source as any).headers)) {\n\t\t\t\tconst {value: headerValue, isReplace} = getReplaceState((source as any).headers);\n\t\t\t\theaders = isReplace\n\t\t\t\t\t? cloneShallow(headerValue as KyHeadersInit)\n\t\t\t\t\t: mergeHeaderContainers(headers, headerValue as KyHeadersInit);\n\n\t\t\t\treturnValue.headers = headers;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (searchParameters !== undefined) {\n\t\treturnValue.searchParams = searchParameters;\n\t}\n\n\tif (signals.length > 0) {\n\t\tif (signals.length === 1) {\n\t\t\treturnValue.signal = signals[0];\n\t\t} else if (supportsAbortSignal) {\n\t\t\treturnValue.signal = AbortSignal.any(signals);\n\t\t} else {\n\t\t\t// When AbortSignal.any is not available, use the last signal\n\t\t\t// This maintains the previous behavior before signal merging was added\n\t\t\t// This can be remove when the `supportsAbortSignal` check is removed.`\n\t\t\treturnValue.signal = signals.at(-1);\n\t\t}\n\t}\n\n\treturn returnValue;\n};\n", "import {requestMethods} from '../core/constants.js';\nimport type {RetryOptions} from '../types/retry.js';\nimport type {HttpMethod, RequestHttpMethod} from '../types/options.js';\n\nexport const normalizeRequestMethod = (input: string): string =>\n\trequestMethods.includes(input as RequestHttpMethod) ? input.toUpperCase() : input;\n\nconst retryMethods: HttpMethod[] = ['get', 'put', 'head', 'delete', 'options', 'trace'];\n\nconst retryStatusCodes = [408, 413, 429, 500, 502, 503, 504];\n\nconst retryAfterStatusCodes = [413, 429, 503];\n\ntype InternalRetryOptions = Required<Omit<RetryOptions, 'shouldRetry'>> & Pick<RetryOptions, 'shouldRetry'>;\n\nconst defaultRetryOptions: InternalRetryOptions = {\n\tlimit: 2,\n\tmethods: retryMethods,\n\tstatusCodes: retryStatusCodes,\n\tafterStatusCodes: retryAfterStatusCodes,\n\tmaxRetryAfter: Number.POSITIVE_INFINITY,\n\tbackoffLimit: Number.POSITIVE_INFINITY,\n\tdelay: attemptCount => 0.3 * (2 ** (attemptCount - 1)) * 1000,\n\tjitter: undefined,\n\tretryOnTimeout: false,\n};\n\nexport const normalizeRetryOptions = (retry: number | RetryOptions = {}): InternalRetryOptions => {\n\tif (typeof retry === 'number') {\n\t\treturn {\n\t\t\t...defaultRetryOptions,\n\t\t\tlimit: retry,\n\t\t};\n\t}\n\n\tif (retry.methods && !Array.isArray(retry.methods)) {\n\t\tthrow new Error('retry.methods must be an array');\n\t}\n\n\tif (retry.statusCodes && !Array.isArray(retry.statusCodes)) {\n\t\tthrow new Error('retry.statusCodes must be an array');\n\t}\n\n\tconst normalizedRetry = Object.fromEntries(Object.entries({\n\t\t...retry,\n\t\tmethods: retry.methods?.map(method => method.toLowerCase()),\n\t}).filter(([, value]) => value !== undefined)) as RetryOptions;\n\n\treturn {\n\t\t...defaultRetryOptions,\n\t\t...normalizedRetry,\n\t};\n};\n", "import {TimeoutError} from '../errors/TimeoutError.js';\n\nexport type TimeoutOptions = {\n\ttimeout: number;\n\tfetch: typeof fetch;\n};\n\n// `Promise.race()` workaround (#91)\nexport default async function timeout(\n\trequest: Request,\n\tinit: RequestInit,\n\tabortController: AbortController | undefined,\n\toptions: TimeoutOptions,\n): Promise<Response> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst timeoutId = setTimeout(() => {\n\t\t\tif (abortController) {\n\t\t\t\tabortController.abort();\n\t\t\t}\n\n\t\t\treject(new TimeoutError(request));\n\t\t}, options.timeout);\n\n\t\tvoid options\n\t\t\t.fetch(request, init)\n\t\t\t.then(resolve)\n\t\t\t.catch(reject)\n\t\t\t.then(() => {\n\t\t\t\tclearTimeout(timeoutId);\n\t\t\t});\n\t});\n}\n", "// https://github.com/sindresorhus/delay/tree/ab98ae8dfcb38e1593286c94d934e70d14a4e111\n\nimport {type InternalOptions} from '../types/options.js';\n\nexport type DelayOptions = {\n\tsignal?: InternalOptions['signal'];\n};\n\nexport default async function delay(\n\tms: number,\n\t{signal}: DelayOptions,\n): Promise<void> {\n\treturn new Promise((resolve, reject) => {\n\t\tif (signal) {\n\t\t\tsignal.throwIfAborted();\n\t\t\tsignal.addEventListener('abort', abortHandler, {once: true});\n\t\t}\n\n\t\tfunction abortHandler() {\n\t\t\tclearTimeout(timeoutId);\n\t\t\treject(signal!.reason as Error);\n\t\t}\n\n\t\tconst timeoutId = setTimeout(() => {\n\t\t\tsignal?.removeEventListener('abort', abortHandler);\n\t\t\tresolve();\n\t\t}, ms);\n\t});\n}\n", "import {kyOptionKeys, requestOptionsRegistry} from '../core/constants.js';\nimport type {SearchParamsOption} from '../types/options.js';\nimport {deletedParametersSymbol} from './merge.js';\n\nexport const findUnknownOptions = (\n\toptions: Record<string, unknown>,\n): Record<string, unknown> => {\n\tconst unknownOptions: Record<string, unknown> = {};\n\n\tfor (const key in options) {\n\t\t// Skip inherited properties\n\t\tif (!Object.hasOwn(options, key)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Forward every non-standard, non-Ky option to fetch().\n\t\t// We intentionally do not check whether the key also exists on `Request`, because some runtimes\n\t\t// patch `Request.prototype` with fetch-only extensions. For example, Next.js adds `next`, and the\n\t\t// old `key in request` heuristic dropped it unless Ky kept a special-case allowlist.\n\t\t// Passing all non-standard keys makes that allowlist unnecessary and preserves future fetch extensions too.\n\t\tif (!(key in requestOptionsRegistry) && !(key in kyOptionKeys)) {\n\t\t\tunknownOptions[key] = options[key];\n\t\t}\n\t}\n\n\treturn unknownOptions;\n};\n\nexport const hasSearchParameters = (search: SearchParamsOption): boolean => {\n\tif (search === undefined) {\n\t\treturn false;\n\t}\n\n\t// The `typeof array` still gives \"object\", so we need different checking for array.\n\tif (Array.isArray(search)) {\n\t\treturn search.length > 0;\n\t}\n\n\tif (search instanceof URLSearchParams) {\n\t\treturn search.size > 0 || Boolean((search as any)[deletedParametersSymbol]?.size);\n\t}\n\n\t// Record\n\tif (typeof search === 'object') {\n\t\treturn Object.keys(search).length > 0;\n\t}\n\n\tif (typeof search === 'string') {\n\t\treturn search.trim().length > 0;\n\t}\n\n\treturn Boolean(search);\n};\n", "// Inlined from https://github.com/sindresorhus/is-network-error v1.3.1\n\nconst objectToString = Object.prototype.toString;\n\nconst isError = (value: unknown): value is Error => objectToString.call(value) === '[object Error]';\n\nconst errorMessages = new Set([\n\t'network error', // Chrome\n\t'NetworkError when attempting to fetch resource.', // Firefox\n\t'The Internet connection appears to be offline.', // Safari 16\n\t'Network request failed', // `cross-fetch`\n\t'fetch failed', // Undici (Node.js)\n\t'terminated', // Undici (Node.js)\n\t' A network error occurred.', // Bun (WebKit) - leading space is intentional\n\t'Network connection lost', // Cloudflare Workers (fetch)\n]);\n\nexport default function isRawNetworkError(error: unknown): error is TypeError {\n\tconst isValid = error\n\t\t&& isError(error)\n\t\t&& error.name === 'TypeError'\n\t\t&& typeof error.message === 'string';\n\n\tif (!isValid) {\n\t\treturn false;\n\t}\n\n\tconst {message, stack} = error;\n\n\t// Safari 17+ has generic message but no stack for network errors\n\tif (message === 'Load failed') {\n\t\treturn stack === undefined\n\t\t\t// Sentry adds its own stack trace to the fetch error, so also check for that\n\t\t\t|| '__sentry_captured__' in error;\n\t}\n\n\t// Deno network errors start with specific text\n\tif (message.startsWith('error sending request for url')) {\n\t\treturn true;\n\t}\n\n\t// Chrome: exact \"Failed to fetch\" or with hostname: \"Failed to fetch (example.com)\"\n\tif (message === 'Failed to fetch' || (message.startsWith('Failed to fetch (') && message.endsWith(')'))) {\n\t\treturn true;\n\t}\n\n\t// Standard network error messages\n\treturn errorMessages.has(message);\n}\n", "import type {KyError} from '../errors/KyError.js';\nimport {HTTPError} from '../errors/HTTPError.js';\nimport {NetworkError} from '../errors/NetworkError.js';\nimport {TimeoutError} from '../errors/TimeoutError.js';\nimport {ForceRetryError} from '../errors/ForceRetryError.js';\n\n// Handles cross-realm cases (e.g., iframes, different JS contexts) where `instanceof` fails.\nconst isErrorType = (error: unknown, cls: {name: string}): boolean =>\n\terror instanceof (cls as any) || (error as any)?.name === cls.name;\n\n/**\nType guard to check if an error is a `KyError`.\n\nNote: `SchemaValidationError` is intentionally not considered a Ky error. `KyError` covers failures in Ky's HTTP lifecycle (bad status, timeout, retry), while schema validation errors originate from the user-provided schema, not from Ky itself.\n\n@param error - The error to check\n@returns `true` if the error is a Ky error, `false` otherwise\n\n@example\n```\nimport ky, {isKyError} from 'ky';\ntry {\n\tconst response = await ky.get('/api/data');\n} catch (error) {\n\tif (isKyError(error)) {\n\t\t// Handle Ky-specific errors\n\t\tconsole.log('Ky error occurred:', error.message);\n\t} else {\n\t\t// Handle other errors\n\t\tconsole.log('Unknown error:', error);\n\t}\n}\n```\n*/\nexport function isKyError(error: unknown): error is KyError {\n\treturn (error as any)?.isKyError === true || isHTTPError(error) || isNetworkError(error) || isTimeoutError(error) || isForceRetryError(error);\n}\n\n/**\nType guard to check if an error is an `HTTPError`.\n\n@param error - The error to check\n@returns `true` if the error is an `HTTPError`, `false` otherwise\n\n@example\n```\nimport ky, {isHTTPError} from 'ky';\ntry {\n\tconst response = await ky.get('/api/data');\n} catch (error) {\n\tif (isHTTPError(error)) {\n\t\tconsole.log('HTTP error status:', error.response.status);\n\t}\n}\n```\n*/\nexport function isHTTPError<T = unknown>(error: unknown): error is HTTPError<T> {\n\treturn isErrorType(error, HTTPError);\n}\n\n/**\nType guard to check if an error is a `NetworkError`.\n\n@param error - The error to check\n@returns `true` if the error is a `NetworkError`, `false` otherwise\n\n@example\n```\nimport ky, {isNetworkError} from 'ky';\ntry {\n\tconst response = await ky.get('/api/data');\n} catch (error) {\n\tif (isNetworkError(error)) {\n\t\tconsole.log('Network error:', error.request.url);\n\t}\n}\n```\n*/\nexport function isNetworkError(error: unknown): error is NetworkError {\n\treturn isErrorType(error, NetworkError);\n}\n\n/**\nType guard to check if an error is a `TimeoutError`.\n\n@param error - The error to check\n@returns `true` if the error is a `TimeoutError`, `false` otherwise\n\n@example\n```\nimport ky, {isTimeoutError} from 'ky';\ntry {\n\tconst response = await ky.get('/api/data', { timeout: 1000 });\n} catch (error) {\n\tif (isTimeoutError(error)) {\n\t\tconsole.log('Request timed out:', error.request.url);\n\t}\n}\n```\n*/\nexport function isTimeoutError(error: unknown): error is TimeoutError {\n\treturn isErrorType(error, TimeoutError);\n}\n\n/**\nType guard to check if an error is a `ForceRetryError`.\n\n@param error - The error to check\n@returns `true` if the error is a `ForceRetryError`, `false` otherwise\n\n@example\n```\nimport ky, {isForceRetryError} from 'ky';\n\nconst api = ky.extend({\n\thooks: {\n\t\tbeforeRetry: [\n\t\t\t({error, retryCount}) => {\n\t\t\t\tif (isForceRetryError(error)) {\n\t\t\t\t\tconsole.log(`Forced retry #${retryCount}: ${error.code}`);\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t}\n});\n```\n*/\nexport function isForceRetryError(error: unknown): error is ForceRetryError {\n\treturn isErrorType(error, ForceRetryError);\n}\n", "import {HTTPError} from '../errors/HTTPError.js';\nimport {NetworkError} from '../errors/NetworkError.js';\nimport {NonError} from '../errors/NonError.js';\nimport {ForceRetryError} from '../errors/ForceRetryError.js';\nimport {SchemaValidationError} from '../errors/SchemaValidationError.js';\nimport {TimeoutError} from '../errors/TimeoutError.js';\nimport type {\n\tInput,\n\tInternalOptions,\n\tNormalizedOptions,\n\tOptions,\n\tSearchParamsInit,\n\tSearchParamsOption,\n} from '../types/options.js';\nimport {type ResponsePromise} from '../types/ResponsePromise.js';\nimport type {StandardSchemaV1} from '../types/standard-schema.js';\nimport {streamRequest, streamResponse} from '../utils/body.js';\nimport {\n\tcloneShallow,\n\tmergeHeaders,\n\tmergeHooks,\n\tdeletedParametersSymbol,\n} from '../utils/merge.js';\nimport type {RetryOptions} from '../types/retry.js';\nimport {normalizeRequestMethod, normalizeRetryOptions} from '../utils/normalize.js';\nimport timeout from '../utils/timeout.js';\nimport delay from '../utils/delay.js';\nimport {type ObjectEntries} from '../utils/types.js';\nimport {findUnknownOptions, hasSearchParameters} from '../utils/options.js';\nimport isRawNetworkError from '../utils/is-network-error.js';\nimport {isHTTPError, isNetworkError, isTimeoutError} from '../utils/type-guards.js';\nimport {\n\tmaxSafeTimeout,\n\tresponseTypes,\n\tstop,\n\tRetryMarker,\n\tsupportsAbortController,\n\tsupportsAbortSignal,\n\tsupportsFormData,\n\tsupportsResponseStreams,\n\tsupportsRequestStreams,\n} from './constants.js';\n\nconst maxErrorResponseBodySize = 10 * 1024 * 1024;\nconst prefixUrlRenamedErrorMessage = 'The `prefixUrl` option has been renamed `prefix` in v2 and enhanced to allow slashes in input. See also the new `baseUrl` option for improved flexibility with standard URL resolution: https://github.com/sindresorhus/ky#baseurl';\nconst timedOutResponseData = Symbol('timedOutResponseData');\n\nconst createTextDecoder = (contentType: string): TextDecoder => {\n\tconst match = /;\\s*charset\\s*=\\s*(?:\"([^\"]+)\"|([^;,\\s]+))/i.exec(contentType);\n\tconst charset = match?.[1] ?? match?.[2];\n\tif (charset) {\n\t\ttry {\n\t\t\treturn new TextDecoder(charset);\n\t\t} catch {}\n\t}\n\n\treturn new TextDecoder();\n};\n\nconst invalidSchemaMessage = 'The `schema` argument must follow the Standard Schema specification';\n\nconst cloneRetryOptions = (retry: RetryOptions | number): RetryOptions | number => {\n\tif (typeof retry !== 'object') {\n\t\treturn retry;\n\t}\n\n\t// Clone nested arrays too so init hooks can mutate retry config without leaking state across requests.\n\treturn {\n\t\t...retry,\n\t\t...(retry.methods && {methods: [...retry.methods]}),\n\t\t...(retry.statusCodes && {statusCodes: [...retry.statusCodes]}),\n\t\t...(retry.afterStatusCodes && {afterStatusCodes: [...retry.afterStatusCodes]}),\n\t};\n};\n\nconst objectToString = Object.prototype.toString;\n\nconst isRequestInstance = (value: unknown): value is Request =>\n\tvalue instanceof globalThis.Request || objectToString.call(value) === '[object Request]';\n\n// Accepted custom responses are treated as full Responses throughout Ky.\n// If a custom fetch returns one, it must behave like a Response for cloning,\n// body consumption, `json()` decoration, and any enabled stream features.\nconst isResponseInstance = (value: unknown): value is Response =>\n\tvalue instanceof globalThis.Response || objectToString.call(value) === '[object Response]';\n\nconst cloneSearchParametersForInitHook = (searchParameters: SearchParamsOption | undefined): SearchParamsOption | undefined => {\n\tif (Array.isArray(searchParameters)) {\n\t\treturn searchParameters.map(parameter => [...parameter]) as SearchParamsOption;\n\t}\n\n\treturn cloneShallow(searchParameters) as SearchParamsOption | undefined;\n};\n\n// Shallow-clone mutable option properties so init hook mutations don't leak across requests.\nfunction cloneInitHookOptions(options: Options): Options {\n\tconst clonedOptions: Options = {\n\t\t...options,\n\t\tjson: cloneShallow(options.json),\n\t\tcontext: cloneShallow(options.context)!,\n\t\theaders: cloneShallow(options.headers)!,\n\t\tsearchParams: cloneSearchParametersForInitHook(options.searchParams),\n\t};\n\n\tif (options.retry !== undefined) {\n\t\tclonedOptions.retry = cloneRetryOptions(options.retry);\n\t}\n\n\treturn clonedOptions;\n}\n\nconst validateJsonWithSchema = async (jsonValue: unknown, schema: StandardSchemaV1): Promise<unknown> => {\n\tif (\n\t\t(\n\t\t\ttypeof schema !== 'object'\n\t\t\t&& typeof schema !== 'function'\n\t\t)\n\t\t|| schema === null\n\t) {\n\t\tthrow new TypeError(invalidSchemaMessage);\n\t}\n\n\tconst standardSchema = schema['~standard'];\n\n\tif (\n\t\ttypeof standardSchema !== 'object'\n\t\t|| standardSchema === null\n\t\t|| typeof standardSchema.validate !== 'function'\n\t) {\n\t\tthrow new TypeError(invalidSchemaMessage);\n\t}\n\n\tconst validationResult = await standardSchema.validate(jsonValue);\n\n\tif (validationResult.issues) {\n\t\tthrow new SchemaValidationError(validationResult.issues);\n\t}\n\n\treturn validationResult.value;\n};\n\nexport class Ky {\n\tstatic create(input: Input, options: Options): ResponsePromise {\n\t\tconst initHooks = options.hooks?.init ?? [];\n\t\tconst initHookOptions = initHooks.length > 0 ? cloneInitHookOptions(options) : options;\n\n\t\tfor (const hook of initHooks) {\n\t\t\thook(initHookOptions);\n\t\t}\n\n\t\tconst ky = new Ky(input, initHookOptions);\n\n\t\tconst function_ = async (): Promise<Response | void> => {\n\t\t\tif (typeof ky.#options.timeout === 'number' && ky.#options.timeout > maxSafeTimeout) {\n\t\t\t\tthrow new RangeError(`The \\`timeout\\` option cannot be greater than ${maxSafeTimeout}`);\n\t\t\t}\n\n\t\t\tif (typeof ky.#options.totalTimeout === 'number' && ky.#options.totalTimeout > maxSafeTimeout) {\n\t\t\t\tthrow new RangeError(`The \\`totalTimeout\\` option cannot be greater than ${maxSafeTimeout}`);\n\t\t\t}\n\n\t\t\t// Delay the fetch so that body method shortcuts can set the Accept header\n\t\t\tawait Promise.resolve();\n\t\t\tconst beforeRequestResponse = await ky.#runBeforeRequestHooks();\n\t\t\tlet response = beforeRequestResponse ?? await ky.#retry(async () => ky.#fetch());\n\t\t\tlet responseFromHook = beforeRequestResponse !== undefined\n\t\t\t\t|| ky.#consumeReturnedResponseFromBeforeRetryHook();\n\n\t\t\tfor (;;) {\n\t\t\t\t// `undefined` means a hook stopped the flow without providing a response.\n\t\t\t\t// Non-native Responses still continue through Ky if they pass `isResponseInstance()`.\n\t\t\t\tif (response === undefined) {\n\t\t\t\t\treturn response;\n\t\t\t\t}\n\n\t\t\t\tif (isResponseInstance(response)) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\t\t\t\tresponse = await ky.#runAfterResponseHooks(response);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tif (!(error instanceof ForceRetryError)) {\n\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\t\t\t\tconst retriedResponse: Response | void = await ky.#retryFromError(error, async () => ky.#fetch());\n\t\t\t\t\t\tif (retriedResponse === undefined) {\n\t\t\t\t\t\t\treturn retriedResponse;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresponse = retriedResponse;\n\t\t\t\t\t\tresponseFromHook = ky.#consumeReturnedResponseFromBeforeRetryHook();\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst currentResponse: Response = response;\n\n\t\t\t\t// Opaque responses (`response.type === 'opaque'`) from `no-cors` requests always have `status: 0` and `ok: false`, but this is not a failure - the actual status is hidden by the browser.\n\t\t\t\tif (!currentResponse.ok && currentResponse.type !== 'opaque' && (\n\t\t\t\t\ttypeof ky.#options.throwHttpErrors === 'function'\n\t\t\t\t\t\t? ky.#options.throwHttpErrors(currentResponse.status)\n\t\t\t\t\t\t: ky.#options.throwHttpErrors\n\t\t\t\t)) {\n\t\t\t\t\t// `request` must reflect the request that actually failed, but `options` stays as Ky's\n\t\t\t\t\t// normalized options snapshot. Replacement `Request` instances do not preserve the\n\t\t\t\t\t// original `BodyInit`, so trying to make `options` mirror arbitrary requests would be lossy.\n\t\t\t\t\tconst httpError: HTTPError = new HTTPError(currentResponse, ky.#getResponseRequest(currentResponse), ky.#getNormalizedOptions());\n\t\t\t\t\tconst errorToThrow: Error = httpError;\n\t\t\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\t\t\thttpError.data = await ky.#getResponseData(currentResponse);\n\n\t\t\t\t\tif (responseFromHook) {\n\t\t\t\t\t\tthrow errorToThrow;\n\t\t\t\t\t}\n\n\t\t\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\t\t\tconst retriedResponse: Response | void = await ky.#retryFromError(httpError, async () => ky.#fetch());\n\t\t\t\t\tif (retriedResponse === undefined) {\n\t\t\t\t\t\treturn retriedResponse;\n\t\t\t\t\t}\n\n\t\t\t\t\tresponse = retriedResponse;\n\t\t\t\t\tresponseFromHook = ky.#consumeReturnedResponseFromBeforeRetryHook();\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (!isResponseInstance(response)) {\n\t\t\t\treturn response;\n\t\t\t}\n\n\t\t\tky.#decorateResponse(response);\n\n\t\t\t// If `onDownloadProgress` is passed, it uses the stream API internally\n\t\t\tif (ky.#options.onDownloadProgress) {\n\t\t\t\tif (typeof ky.#options.onDownloadProgress !== 'function') {\n\t\t\t\t\tthrow new TypeError('The `onDownloadProgress` option must be a function');\n\t\t\t\t}\n\n\t\t\t\tif (!supportsResponseStreams) {\n\t\t\t\t\tthrow new Error('Streams are not supported in your environment. `ReadableStream` is missing.');\n\t\t\t\t}\n\n\t\t\t\tconst progressResponse = response.clone();\n\t\t\t\tky.#cancelResponseBody(response);\n\t\t\t\treturn streamResponse(progressResponse, ky.#options.onDownloadProgress);\n\t\t\t}\n\n\t\t\treturn response;\n\t\t};\n\n\t\tconst result = (async () => {\n\t\t\ttry {\n\t\t\t\treturn await function_();\n\t\t\t} catch (error: unknown) {\n\t\t\t\t// Non-Error throws (e.g., thrown strings) pass through unchanged\n\t\t\t\tif (!(error instanceof Error)) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\n\t\t\t\t// Errors thrown by beforeRetry hooks must propagate unchanged.\n\t\t\t\tif (ky.#beforeRetryHookErrors.has(error)) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\n\t\t\t\tlet processedError: Error = error;\n\t\t\t\tfor (const hook of ky.#options.hooks.beforeError) {\n\t\t\t\t\t// `request` is the current failing request. `options` intentionally remains the\n\t\t\t\t\t// stable normalized Ky options snapshot for the same reason as `HTTPError` above.\n\t\t\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\t\t\tconst hookResult: unknown = await hook({\n\t\t\t\t\t\trequest: ky.request,\n\t\t\t\t\t\toptions: ky.#getNormalizedOptions(),\n\t\t\t\t\t\terror: processedError,\n\t\t\t\t\t\tretryCount: ky.#retryCount,\n\t\t\t\t\t});\n\n\t\t\t\t\t// Only overwrite if the hook returns a valid Error instance.\n\t\t\t\t\tif (hookResult instanceof Error) {\n\t\t\t\t\t\tprocessedError = hookResult;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthrow processedError;\n\t\t\t} finally {\n\t\t\t\tconst originalRequest = ky.#originalRequest;\n\n\t\t\t\t// Ignore cancellation errors from already-locked or already-consumed streams.\n\t\t\t\tky.#cancelBody(originalRequest?.body ?? undefined);\n\t\t\t\t// Only cancel the current request body if it's distinct from the original (i.e. it was cloned for retries).\n\t\t\t\tif (ky.request !== originalRequest) {\n\t\t\t\t\tky.#cancelBody(ky.request.body ?? undefined);\n\t\t\t\t}\n\t\t\t}\n\t\t})() as ResponsePromise;\n\n\t\tfor (const [type, mimeType] of Object.entries(responseTypes) as ObjectEntries<typeof responseTypes>) {\n\t\t\t// Only expose `.bytes()` when the environment implements it.\n\t\t\tif (\n\t\t\t\ttype === 'bytes'\n\t\t\t\t&& typeof (globalThis.Response?.prototype as unknown as {bytes?: unknown})?.bytes !== 'function'\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tresult[type] = async (schema?: StandardSchemaV1) => {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n\t\t\t\tky.request.headers.set('accept', ky.request.headers.get('accept') || mimeType);\n\n\t\t\t\tconst response = await result;\n\n\t\t\t\tif (type !== 'json') {\n\t\t\t\t\treturn response[type]();\n\t\t\t\t}\n\n\t\t\t\tconst text = await response.text();\n\t\t\t\tif (text === '') {\n\t\t\t\t\tif (schema !== undefined) {\n\t\t\t\t\t\treturn validateJsonWithSchema(undefined, schema);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn JSON.parse(text);\n\t\t\t\t}\n\n\t\t\t\tconst jsonValue = initHookOptions.parseJson\n\t\t\t\t\t? await initHookOptions.parseJson(text, {request: ky.#getResponseRequest(response), response})\n\t\t\t\t\t: JSON.parse(text);\n\n\t\t\t\treturn schema === undefined ? jsonValue : validateJsonWithSchema(jsonValue, schema);\n\t\t\t};\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t// eslint-disable-next-line unicorn/prevent-abbreviations\n\tstatic #normalizeSearchParams(searchParams: SearchParamsOption): SearchParamsOption {\n\t\t// Filter out undefined values from plain objects\n\t\tif (searchParams && typeof searchParams === 'object' && !Array.isArray(searchParams) && !(searchParams instanceof URLSearchParams)) {\n\t\t\treturn Object.fromEntries(Object.entries(searchParams).filter(([, value]) => value !== undefined));\n\t\t}\n\n\t\treturn searchParams;\n\t}\n\n\tpublic request: Request;\n\t#abortController?: AbortController;\n\t#retryCount = 0;\n\t// eslint-disable-next-line @typescript-eslint/prefer-readonly -- False positive: #input is reassigned on line 202\n\t#input: Input;\n\treadonly #options: InternalOptions;\n\t#originalRequest?: Request;\n\treadonly #userProvidedAbortSignal?: AbortSignal;\n\treadonly #beforeRetryHookErrors = new WeakSet<Error>();\n\t#cachedNormalizedOptions: NormalizedOptions | undefined;\n\treadonly #startTime: number | undefined;\n\t#returnedResponseFromBeforeRetryHook = false;\n\treadonly #responseRequests = new WeakMap<Response, Request>();\n\n\t// eslint-disable-next-line complexity\n\tconstructor(input: Input, options: Options = {}) {\n\t\tthis.#input = input;\n\t\tif (Object.hasOwn(options, 'prefixUrl')) {\n\t\t\tthrow new Error(prefixUrlRenamedErrorMessage);\n\t\t}\n\n\t\tthis.#options = {\n\t\t\t...options,\n\t\t\theaders: mergeHeaders((this.#input as Request).headers, options.headers),\n\t\t\thooks: mergeHooks({}, options.hooks),\n\t\t\tmethod: normalizeRequestMethod(options.method ?? (this.#input as Request).method ?? 'GET'),\n\t\t\t// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n\t\t\tprefix: String(options.prefix || ''),\n\t\t\tretry: normalizeRetryOptions(options.retry),\n\t\t\tthrowHttpErrors: options.throwHttpErrors ?? true,\n\t\t\ttimeout: options.timeout ?? 10_000,\n\t\t\ttotalTimeout: options.totalTimeout ?? false,\n\t\t\tfetch: options.fetch ?? globalThis.fetch.bind(globalThis),\n\t\t\tcontext: options.context ?? {},\n\t\t};\n\n\t\tif (typeof this.#input !== 'string' && !(this.#input instanceof URL || this.#input instanceof globalThis.Request)) {\n\t\t\tthrow new TypeError('`input` must be a string, URL, or Request');\n\t\t}\n\n\t\tif (typeof this.#input === 'string') {\n\t\t\tif (this.#options.prefix) {\n\t\t\t\tconst normalizedPrefix = this.#options.prefix.replace(/\\/+$/, '');\n\t\t\t\tconst normalizedInput = this.#input.replace(/^\\/+/, '');\n\t\t\t\tthis.#input = `${normalizedPrefix}/${normalizedInput}`;\n\t\t\t}\n\n\t\t\tif (this.#options.baseUrl) {\n\t\t\t\tlet absoluteInput: URL | undefined;\n\t\t\t\ttry {\n\t\t\t\t\tabsoluteInput = new URL(this.#input);\n\t\t\t\t} catch {}\n\n\t\t\t\tif (!absoluteInput) {\n\t\t\t\t\tthis.#input = new URL(this.#input, (new Request(this.#options.baseUrl)).url);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (supportsAbortController && supportsAbortSignal) {\n\t\t\tthis.#userProvidedAbortSignal = this.#options.signal ?? (this.#input as Request).signal;\n\t\t\tthis.#abortController = new globalThis.AbortController();\n\t\t\tthis.#options.signal = this.#createManagedSignal();\n\t\t}\n\n\t\tif (supportsRequestStreams) {\n\t\t\t// @ts-expect-error - Types are outdated.\n\t\t\tthis.#options.duplex = 'half';\n\t\t}\n\n\t\tif (this.#options.json !== undefined) {\n\t\t\tthis.#options.body = this.#options.stringifyJson?.(this.#options.json) ?? JSON.stringify(this.#options.json);\n\t\t\tthis.#options.headers.set('content-type', this.#options.headers.get('content-type') ?? 'application/json');\n\t\t}\n\n\t\t// To provide correct form boundary, Content-Type header should be deleted when creating Request from another Request with FormData/URLSearchParams body\n\t\t// Only delete if user didn't explicitly provide a custom content-type\n\t\tconst userProvidedContentType = options.headers && new globalThis.Headers(options.headers as HeadersInit).has('content-type');\n\t\tif (\n\t\t\tthis.#input instanceof globalThis.Request\n\t\t\t&& ((supportsFormData && this.#options.body instanceof globalThis.FormData) || this.#options.body instanceof URLSearchParams)\n\t\t\t&& !userProvidedContentType\n\t\t) {\n\t\t\tthis.#options.headers.delete('content-type');\n\t\t}\n\n\t\tthis.request = new globalThis.Request(this.#input, this.#options);\n\n\t\tif (hasSearchParameters(this.#options.searchParams)) {\n\t\t\tconst url = new URL(this.request.url);\n\t\t\tconst deleted = (this.#options.searchParams as any)?.[deletedParametersSymbol] as Set<string> | undefined;\n\n\t\t\tif (deleted) {\n\t\t\t\t// Remove keys from the input URL first so later searchParams entries can intentionally re-add them.\n\t\t\t\tfor (const key of deleted) {\n\t\t\t\t\turl.searchParams.delete(key);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (typeof this.#options.searchParams === 'string') {\n\t\t\t\tconst stringSearchParameters = this.#options.searchParams.replace(/^\\?/, '');\n\t\t\t\tif (stringSearchParameters !== '') {\n\t\t\t\t\turl.search = url.search ? `${url.search}&${stringSearchParameters}` : `?${stringSearchParameters}`;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst optionsSearchParameters = new URLSearchParams(Ky.#normalizeSearchParams(this.#options.searchParams) as unknown as SearchParamsInit);\n\n\t\t\t\tfor (const [key, value] of optionsSearchParameters.entries()) {\n\t\t\t\t\turl.searchParams.append(key, value);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tthis.#options.searchParams\n\t\t\t\t&& typeof this.#options.searchParams === 'object'\n\t\t\t\t&& !Array.isArray(this.#options.searchParams)\n\t\t\t\t&& !(this.#options.searchParams instanceof URLSearchParams)\n\t\t\t) {\n\t\t\t\tfor (const [key, value] of Object.entries(this.#options.searchParams)) {\n\t\t\t\t\tif (value === undefined) {\n\t\t\t\t\t\turl.searchParams.delete(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Recreate request with the updated URL. We already have all options in this.#options, including duplex.\n\t\t\tthis.request = new globalThis.Request(url, this.#options as RequestInit);\n\t\t}\n\n\t\tif (this.#options.onUploadProgress && typeof this.#options.onUploadProgress !== 'function') {\n\t\t\tthrow new TypeError('The `onUploadProgress` option must be a function');\n\t\t}\n\n\t\t// `totalTimeout` starts when the request pipeline is created, so it also includes\n\t\t// Ky's internal scheduling and user hook time before the first fetch attempt.\n\t\tthis.#startTime = typeof this.#options.totalTimeout === 'number' ? this.#getCurrentTime() : undefined;\n\t}\n\n\t#calculateDelay(): number {\n\t\tconst retryDelay = this.#options.retry.delay(this.#retryCount + 1);\n\n\t\tlet jitteredDelay = retryDelay;\n\t\tif (this.#options.retry.jitter === true) {\n\t\t\tjitteredDelay = Math.random() * retryDelay;\n\t\t} else if (typeof this.#options.retry.jitter === 'function') {\n\t\t\tjitteredDelay = this.#options.retry.jitter(retryDelay);\n\n\t\t\tif (!Number.isFinite(jitteredDelay) || jitteredDelay < 0) {\n\t\t\t\tjitteredDelay = retryDelay;\n\t\t\t}\n\t\t}\n\n\t\treturn Math.min(this.#options.retry.backoffLimit, jitteredDelay);\n\t}\n\n\tasync #calculateRetryDelay(error: unknown) {\n\t\tif (this.#retryCount >= this.#options.retry.limit) {\n\t\t\tthrow error;\n\t\t}\n\n\t\t// Wrap non-Error throws to ensure consistent error handling\n\t\tconst errorObject = error instanceof Error ? error : new NonError(error);\n\n\t\t// Handle forced retry from afterResponse hook - skip method check and shouldRetry\n\t\tif (errorObject instanceof ForceRetryError) {\n\t\t\treturn errorObject.customDelay ?? this.#calculateDelay();\n\t\t}\n\n\t\t// Check if method is retriable for non-forced retries\n\t\tif (!this.#options.retry.methods.includes(this.request.method.toLowerCase())) {\n\t\t\tthrow error;\n\t\t}\n\n\t\t// User-provided shouldRetry function takes precedence over default checks (retryOnTimeout, status codes, etc.)\n\t\tif (this.#options.retry.shouldRetry !== undefined) {\n\t\t\tconst result = await this.#options.retry.shouldRetry({error: errorObject, retryCount: this.#retryCount + 1});\n\n\t\t\t// Strict boolean checking - only exact true/false are handled specially\n\t\t\tif (result === false) {\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\tif (result === true) {\n\t\t\t\t// Force retry - skip all other validation and return delay\n\t\t\t\treturn this.#calculateDelay();\n\t\t\t}\n\n\t\t\t// If undefined or any other value, fall through to default behavior\n\t\t}\n\n\t\t// Default timeout behavior\n\t\tif (isTimeoutError(error)) {\n\t\t\tif (!this.#options.retry.retryOnTimeout) {\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\treturn this.#calculateDelay();\n\t\t}\n\n\t\tif (isHTTPError(error)) {\n\t\t\tif (!this.#options.retry.statusCodes.includes(error.response.status)) {\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\tconst retryAfter = error.response.headers.get('Retry-After')\n\t\t\t\t?? error.response.headers.get('RateLimit-Reset')\n\t\t\t\t?? error.response.headers.get('X-RateLimit-Retry-After') // Symfony-based services\n\t\t\t\t?? error.response.headers.get('X-RateLimit-Reset') // GitHub\n\t\t\t\t?? error.response.headers.get('X-Rate-Limit-Reset'); // Twitter\n\t\t\tif (retryAfter && this.#options.retry.afterStatusCodes.includes(error.response.status)) {\n\t\t\t\tlet after = Number(retryAfter) * 1000;\n\t\t\t\tif (Number.isNaN(after)) {\n\t\t\t\t\tafter = Date.parse(retryAfter) - Date.now();\n\t\t\t\t} else if (after >= Date.parse('2024-01-01')) {\n\t\t\t\t\t// A large number is treated as a timestamp (fixed threshold protects against clock skew)\n\t\t\t\t\tafter -= Date.now();\n\t\t\t\t}\n\n\t\t\t\tif (!Number.isFinite(after)) {\n\t\t\t\t\treturn Math.min(this.#options.retry.maxRetryAfter, this.#calculateDelay());\n\t\t\t\t}\n\n\t\t\t\tafter = Math.max(0, after);\n\n\t\t\t\t// Don't apply jitter when server provides explicit retry timing\n\t\t\t\treturn Math.min(this.#options.retry.maxRetryAfter, after);\n\t\t\t}\n\n\t\t\tif (error.response.status === 413) {\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\treturn this.#calculateDelay();\n\t\t}\n\n\t\t// Only retry known retriable error types. Unknown errors (e.g., programming bugs) are not retried.\n\t\tif (!isNetworkError(error)) {\n\t\t\tthrow error;\n\t\t}\n\n\t\treturn this.#calculateDelay();\n\t}\n\n\t#decorateResponse(response: Response): Response {\n\t\tconst request = this.#getResponseRequest(response);\n\n\t\tif (this.#options.parseJson) {\n\t\t\tresponse.json = async () => {\n\t\t\t\tconst text = await response.text();\n\t\t\t\tif (text === '') {\n\t\t\t\t\treturn JSON.parse(text);\n\t\t\t\t}\n\n\t\t\t\treturn this.#options.parseJson!(text, {request, response});\n\t\t\t};\n\t\t}\n\n\t\treturn response;\n\t}\n\n\tasync #getResponseData(response: Response): Promise<unknown> {\n\t\t// Even with request timeouts disabled, bound error-body reads so retries and error propagation\n\t\t// cannot be stalled indefinitely by never-ending response streams.\n\t\tconst text = await this.#readResponseText(response, this.#getErrorDataTimeout());\n\t\tif (text === timedOutResponseData) {\n\t\t\tthis.#throwIfTotalTimeoutExhausted();\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (!text) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (!this.#isJsonContentType(response.headers.get('content-type') ?? '')) {\n\t\t\treturn text;\n\t\t}\n\n\t\tconst data = await this.#parseJson(text, response, this.#getErrorDataTimeout(), this.#getResponseRequest(response));\n\t\tif (data === timedOutResponseData) {\n\t\t\tthis.#throwIfTotalTimeoutExhausted();\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn data;\n\t}\n\n\t#getErrorDataTimeout(): number {\n\t\tconst errorDataTimeout = this.#options.timeout === false ? 10_000 : this.#options.timeout;\n\t\tconst remainingTotal = this.#getRemainingTotalTimeout();\n\t\tif (remainingTotal === undefined) {\n\t\t\treturn errorDataTimeout;\n\t\t}\n\n\t\tif (remainingTotal <= 0) {\n\t\t\tthrow new TimeoutError(this.request);\n\t\t}\n\n\t\treturn Math.min(errorDataTimeout, remainingTotal);\n\t}\n\n\t#isJsonContentType(contentType: string): boolean {\n\t\t// Match JSON subtypes like `json`, `problem+json`, and `vnd.api+json`.\n\t\tconst mimeType = (contentType.split(';', 1)[0] ?? '').trim().toLowerCase();\n\t\treturn /\\/(?:.*[.+-])?json$/.test(mimeType);\n\t}\n\n\tasync #readResponseText(response: Response, timeoutMs: number): Promise<string | typeof timedOutResponseData | undefined> {\n\t\tconst {body} = response;\n\t\tif (!body) {\n\t\t\ttry {\n\t\t\t\treturn await response.text();\n\t\t\t} catch {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t}\n\n\t\tlet reader: ReadableStreamDefaultReader<Uint8Array>;\n\t\ttry {\n\t\t\treader = body.getReader();\n\t\t} catch {\n\t\t\t// Another consumer already locked the stream.\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst decoder = createTextDecoder(response.headers.get('content-type') ?? '');\n\t\tconst chunks: string[] = [];\n\t\tlet totalBytes = 0;\n\n\t\tconst readAll = (async (): Promise<string | undefined> => {\n\t\t\ttry {\n\t\t\t\tfor (;;) {\n\t\t\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\t\t\tconst {done, value} = await reader.read();\n\t\t\t\t\tif (done) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\ttotalBytes += value.byteLength;\n\t\t\t\t\tif (totalBytes > maxErrorResponseBodySize) {\n\t\t\t\t\t\tvoid reader.cancel().catch(() => undefined);\n\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t}\n\n\t\t\t\t\tchunks.push(decoder.decode(value, {stream: true}));\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tchunks.push(decoder.decode());\n\t\t\treturn chunks.join('');\n\t\t})();\n\n\t\tconst timeoutPromise = new Promise<typeof timedOutResponseData>(resolve => {\n\t\t\tconst timeoutId = setTimeout(() => {\n\t\t\t\tresolve(timedOutResponseData);\n\t\t\t}, timeoutMs);\n\t\t\tvoid readAll.finally(() => {\n\t\t\t\tclearTimeout(timeoutId);\n\t\t\t});\n\t\t});\n\n\t\tconst result = await Promise.race([readAll, timeoutPromise]);\n\t\tif (result === timedOutResponseData) {\n\t\t\tvoid reader.cancel().catch(() => undefined);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tasync #parseJson(text: string, response: Response, timeoutMs: number, request: Request): Promise<unknown> {\n\t\tlet timeoutId: ReturnType<typeof setTimeout> | undefined;\n\t\ttry {\n\t\t\treturn await Promise.race([\n\t\t\t\tPromise.resolve().then(() => this.#options.parseJson\n\t\t\t\t\t? this.#options.parseJson(text, {request, response})\n\t\t\t\t\t: JSON.parse(text),\n\t\t\t\t),\n\t\t\t\tnew Promise<typeof timedOutResponseData>(resolve => {\n\t\t\t\t\ttimeoutId = setTimeout(() => {\n\t\t\t\t\t\tresolve(timedOutResponseData);\n\t\t\t\t\t}, timeoutMs);\n\t\t\t\t}),\n\t\t\t]);\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t} finally {\n\t\t\tclearTimeout(timeoutId);\n\t\t}\n\t}\n\n\t#cancelBody(body: ReadableStream | undefined): void {\n\t\tif (!body) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Ignore cancellation failures from already-locked or already-consumed streams.\n\t\tvoid body.cancel().catch(() => undefined);\n\t}\n\n\t#cancelResponseBody(response: Response): void {\n\t\t// Ignore cancellation failures from already-locked or already-consumed streams.\n\t\tthis.#cancelBody(response.body ?? undefined);\n\t}\n\n\t#createManagedSignal(): AbortSignal {\n\t\treturn this.#userProvidedAbortSignal\n\t\t\t? AbortSignal.any([this.#userProvidedAbortSignal, this.#abortController!.signal])\n\t\t\t: this.#abortController!.signal;\n\t}\n\n\t#throwIfTotalTimeoutExhausted(): void {\n\t\tconst remaining = this.#getRemainingTotalTimeout();\n\t\tif (remaining !== undefined && remaining <= 0) {\n\t\t\tthrow new TimeoutError(this.request);\n\t\t}\n\t}\n\n\tasync #runBeforeRequestHooks(): Promise<Response | undefined> {\n\t\tfor (const hook of this.#options.hooks.beforeRequest) {\n\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\tconst result = await hook({\n\t\t\t\trequest: this.request,\n\t\t\t\toptions: this.#getNormalizedOptions(),\n\t\t\t\tretryCount: 0,\n\t\t\t});\n\n\t\t\tif (isRequestInstance(result)) {\n\t\t\t\tthis.#assignRequest(result);\n\t\t\t} else if (isResponseInstance(result)) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tasync #runAfterResponseHooks(response: Response): Promise<Response> {\n\t\tconst responseRequest = this.#getResponseRequest(response);\n\n\t\tfor (const hook of this.#options.hooks.afterResponse) {\n\t\t\tconst hookResponse = this.#setResponseRequest(response.clone(), responseRequest);\n\t\t\tthis.#decorateResponse(hookResponse);\n\n\t\t\tlet modifiedResponse;\n\t\t\ttry {\n\t\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\t\tmodifiedResponse = await hook({\n\t\t\t\t\trequest: this.request,\n\t\t\t\t\toptions: this.#getNormalizedOptions(),\n\t\t\t\t\tresponse: hookResponse,\n\t\t\t\t\tretryCount: this.#retryCount,\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\t// Cancel both responses to prevent memory leaks when hook throws\n\t\t\t\tif (hookResponse !== response) {\n\t\t\t\t\tthis.#cancelResponseBody(hookResponse);\n\t\t\t\t}\n\n\t\t\t\tthis.#cancelResponseBody(response);\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\tif (modifiedResponse instanceof RetryMarker) {\n\t\t\t\t// Cancel both the cloned response passed to the hook and the current response to prevent resource leaks (especially important in Deno/Bun).\n\t\t\t\t// Do not await cancellation since hooks can clone the response, leaving extra tee branches that keep cancel promises pending per the Streams spec.\n\t\t\t\tif (hookResponse !== response) {\n\t\t\t\t\tthis.#cancelResponseBody(hookResponse);\n\t\t\t\t}\n\n\t\t\t\tthis.#cancelResponseBody(response);\n\t\t\t\tthrow new ForceRetryError(modifiedResponse.options);\n\t\t\t}\n\n\t\t\tconst nextResponse = isResponseInstance(modifiedResponse)\n\t\t\t\t? this.#setResponseRequest(modifiedResponse, responseRequest)\n\t\t\t\t: response;\n\n\t\t\t// Cancel any response bodies we won't use to prevent memory leaks.\n\t\t\t// Uses fire-and-forget since hooks may have cloned the response, creating tee branches that block cancellation.\n\t\t\t// If the hook wrapped an existing body into a new Response, both Response objects can still point at the same stream.\n\t\t\tif (hookResponse !== response && hookResponse !== nextResponse && hookResponse.body !== nextResponse.body) {\n\t\t\t\tthis.#cancelResponseBody(hookResponse);\n\t\t\t}\n\n\t\t\tif (response !== nextResponse && response.body !== nextResponse.body) {\n\t\t\t\tthis.#cancelResponseBody(response);\n\t\t\t}\n\n\t\t\tresponse = nextResponse;\n\t\t}\n\n\t\treturn response;\n\t}\n\n\tasync #retry<T extends (...arguments_: any) => Promise<any>>(function_: T): Promise<ReturnType<T> | Response | void> {\n\t\ttry {\n\t\t\treturn await function_();\n\t\t} catch (error) {\n\t\t\treturn this.#retryFromError(error, function_);\n\t\t}\n\t}\n\n\tasync #retryFromError<T extends (...arguments_: any) => Promise<any>>(error: unknown, function_: T): Promise<ReturnType<T> | Response | void> {\n\t\tthis.#returnedResponseFromBeforeRetryHook = false;\n\n\t\tconst retryDelay = Math.min(await this.#calculateRetryDelay(error), maxSafeTimeout);\n\t\tconst delayOptions = {signal: this.#userProvidedAbortSignal};\n\n\t\tconst remainingTimeout = this.#getRemainingTotalTimeout();\n\t\tif (remainingTimeout !== undefined) {\n\t\t\tif (remainingTimeout <= 0) {\n\t\t\t\tthrow new TimeoutError(this.request);\n\t\t\t}\n\n\t\t\t// If waiting would consume all remaining budget, time out without starting another request.\n\t\t\tif (retryDelay >= remainingTimeout) {\n\t\t\t\tawait delay(remainingTimeout, delayOptions);\n\t\t\t\tthrow new TimeoutError(this.request);\n\t\t\t}\n\t\t}\n\n\t\t// Only use user-provided signal for delay, not our internal abortController\n\t\tawait delay(retryDelay, delayOptions);\n\n\t\tthis.#throwIfTotalTimeoutExhausted();\n\n\t\t// Apply custom request from forced retry before beforeRetry hooks\n\t\t// Ensure the custom request has the correct managed signal for timeouts and user aborts\n\t\tif (error instanceof ForceRetryError && error.customRequest) {\n\t\t\tconst customRequest = new globalThis.Request(error.customRequest, this.#options.signal ? {signal: this.#options.signal} : undefined);\n\t\t\t// Replacement Requests are authoritative by design. Do not rewrite headers here,\n\t\t\t// even for cross-origin retries. Callers using `ky.retry({request})` explicitly\n\t\t\t// opted into the exact Request they constructed.\n\t\t\tthis.#assignRequest(customRequest);\n\t\t}\n\n\t\tfor (const hook of this.#options.hooks.beforeRetry) {\n\t\t\tlet hookResult: Awaited<ReturnType<typeof hook>>;\n\t\t\ttry {\n\t\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\t\thookResult = await hook({\n\t\t\t\t\trequest: this.request,\n\t\t\t\t\toptions: this.#getNormalizedOptions(),\n\t\t\t\t\terror: error as Error,\n\t\t\t\t\tretryCount: this.#retryCount + 1,\n\t\t\t\t});\n\t\t\t} catch (hookError) {\n\t\t\t\t// Preserve the original request error path (`throw error`) so beforeError hooks can still run.\n\t\t\t\tif (hookError instanceof Error && hookError !== error) {\n\t\t\t\t\tthis.#beforeRetryHookErrors.add(hookError);\n\t\t\t\t}\n\n\t\t\t\tthrow hookError;\n\t\t\t}\n\n\t\t\tif (isRequestInstance(hookResult)) {\n\t\t\t\t// Same contract as `ky.retry({request})`: a Request returned from `beforeRetry`\n\t\t\t\t// is used as-is rather than being sanitized or otherwise rewritten by Ky.\n\t\t\t\tthis.#assignRequest(hookResult);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (isResponseInstance(hookResult)) {\n\t\t\t\tthis.#returnedResponseFromBeforeRetryHook = true;\n\t\t\t\tthis.#retryCount++;\n\t\t\t\treturn hookResult;\n\t\t\t}\n\n\t\t\t// If `stop` is returned from the hook, the retry process is stopped\n\t\t\tif (hookResult === stop) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tthis.#throwIfTotalTimeoutExhausted();\n\n\t\tthis.#retryCount++;\n\t\treturn this.#retry(function_);\n\t}\n\n\t#consumeReturnedResponseFromBeforeRetryHook(): boolean {\n\t\tconst value = this.#returnedResponseFromBeforeRetryHook;\n\t\tthis.#returnedResponseFromBeforeRetryHook = false;\n\t\treturn value;\n\t}\n\n\tasync #fetch(): Promise<Response> {\n\t\t// Reset abortController if it was aborted (happens on timeout retry)\n\t\tif (this.#abortController?.signal.aborted) {\n\t\t\tthis.#abortController = new globalThis.AbortController();\n\t\t\tthis.#options.signal = this.#createManagedSignal();\n\t\t\t// Recreate request with new signal\n\t\t\tthis.request = new globalThis.Request(this.request, {signal: this.#options.signal});\n\t\t}\n\n\t\tconst nonRequestOptions = findUnknownOptions(this.#options);\n\t\tconst retryRequest = this.#options.retry.limit > 0 ? this.request.clone() : undefined;\n\t\tconst request = this.#wrapRequestWithUploadProgress(this.request, this.#options.body ?? undefined);\n\n\t\t// Cloning is done here to prepare in advance for retries.\n\t\t// Skip cloning when retries are disabled - cloning a streaming body calls ReadableStream#tee()\n\t\t// which buffers the entire stream in memory, causing excessive memory usage for large uploads.\n\t\tthis.#originalRequest = request;\n\t\tif (retryRequest) {\n\t\t\tthis.request = retryRequest;\n\t\t}\n\n\t\ttry {\n\t\t\tconst remainingTotal = this.#getRemainingTotalTimeout();\n\t\t\tif (remainingTotal !== undefined && remainingTotal <= 0) {\n\t\t\t\tthrow new TimeoutError(this.request);\n\t\t\t}\n\n\t\t\tconst effectiveTimeout: number | undefined = this.#options.timeout === false\n\t\t\t\t? remainingTotal\n\t\t\t\t: (remainingTotal === undefined\n\t\t\t\t\t? this.#options.timeout\n\t\t\t\t\t: Math.min(this.#options.timeout, remainingTotal));\n\n\t\t\tconst response = effectiveTimeout === undefined\n\t\t\t\t? await this.#options.fetch(request, nonRequestOptions)\n\t\t\t\t: await timeout(request, nonRequestOptions, this.#abortController, {\n\t\t\t\t\ttimeout: effectiveTimeout,\n\t\t\t\t\tfetch: this.#options.fetch,\n\t\t\t\t});\n\n\t\t\treturn this.#setResponseRequest(response, request);\n\t\t} catch (error) {\n\t\t\tif (isRawNetworkError(error)) {\n\t\t\t\tthrow new NetworkError(this.request, {cause: error as Error});\n\t\t\t}\n\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\t#getRemainingTotalTimeout(): number | undefined {\n\t\tif (this.#startTime === undefined) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst elapsed = this.#getCurrentTime() - this.#startTime;\n\t\treturn Math.max(0, (this.#options.totalTimeout as number) - elapsed);\n\t}\n\n\t#getCurrentTime(): number {\n\t\treturn globalThis.performance?.now() ?? Date.now();\n\t}\n\n\t#getNormalizedOptions(): NormalizedOptions {\n\t\tif (!this.#cachedNormalizedOptions) {\n\t\t\t// Exclude Ky-specific options that are not part of `RequestInit`.\n\t\t\tconst {\n\t\t\t\thooks,\n\t\t\t\tjson,\n\t\t\t\tparseJson,\n\t\t\t\tstringifyJson,\n\t\t\t\tsearchParams,\n\t\t\t\ttimeout,\n\t\t\t\ttotalTimeout,\n\t\t\t\tthrowHttpErrors,\n\t\t\t\tfetch,\n\t\t\t\t...normalizedOptions\n\t\t\t} = this.#options;\n\n\t\t\tthis.#cachedNormalizedOptions = Object.freeze(normalizedOptions) as NormalizedOptions;\n\t\t}\n\n\t\treturn this.#cachedNormalizedOptions;\n\t}\n\n\t#assignRequest(request: Request): void {\n\t\tthis.#cachedNormalizedOptions = undefined;\n\t\tthis.request = request;\n\t}\n\n\t#getResponseRequest(response: Response): Request {\n\t\treturn this.#responseRequests.get(response) ?? this.request;\n\t}\n\n\t#setResponseRequest(response: Response, request: Request): Response {\n\t\tthis.#responseRequests.set(response, request);\n\t\treturn response;\n\t}\n\n\t#wrapRequestWithUploadProgress(request: Request, originalBody?: BodyInit): Request {\n\t\tif (!this.#options.onUploadProgress || !request.body || !supportsRequestStreams) {\n\t\t\treturn request;\n\t\t}\n\n\t\treturn streamRequest(request, this.#options.onUploadProgress, originalBody ?? this.#options.body ?? undefined);\n\t}\n}\n", "/*! MIT License © Sindre Sorhus */\n\nimport {Ky} from './core/Ky.js';\nimport {requestMethods, stop, retry} from './core/constants.js';\nimport type {KyInstance} from './types/ky.js';\nimport type {Input, Options} from './types/options.js';\nimport {validateAndMerge} from './utils/merge.js';\nimport {type Mutable} from './utils/types.js';\n\nconst createInstance = (defaults?: Partial<Options>): KyInstance => {\n\t// eslint-disable-next-line @typescript-eslint/promise-function-async\n\tconst ky: Partial<Mutable<KyInstance>> = (input: Input, options?: Options) => Ky.create(input, validateAndMerge(defaults, options));\n\n\tfor (const method of requestMethods) {\n\t\t// eslint-disable-next-line @typescript-eslint/promise-function-async\n\t\tky[method] = (input: Input, options?: Options) => Ky.create(input, validateAndMerge(defaults, options, {method}));\n\t}\n\n\tky.create = (newDefaults?: Partial<Options>) => createInstance(validateAndMerge(newDefaults));\n\tky.extend = (newDefaults?: Partial<Options> | ((parentDefaults: Partial<Options>) => Partial<Options>)) => {\n\t\tif (typeof newDefaults === 'function') {\n\t\t\tnewDefaults = newDefaults(defaults ?? {});\n\t\t}\n\n\t\treturn createInstance(validateAndMerge(defaults, newDefaults));\n\t};\n\n\tky.stop = stop;\n\tky.retry = retry;\n\n\treturn ky as KyInstance;\n};\n\nconst ky = createInstance();\n\nexport default ky;\n\nexport type {KyInstance} from './types/ky.js';\n\nexport type {\n\tInput,\n\tOptions,\n\tNormalizedOptions,\n\tRetryOptions,\n\tShouldRetryState,\n\tSearchParamsOption,\n\tProgress,\n} from './types/options.js';\n\nexport type {\n\tHooks,\n\tInitHook,\n\tBeforeRequestHook,\n\tBeforeRequestState,\n\tBeforeRetryHook,\n\tBeforeRetryState,\n\tBeforeErrorHook,\n\tBeforeErrorState,\n\tAfterResponseHook,\n\tAfterResponseState,\n} from './types/hooks.js';\n\nexport type {ResponsePromise} from './types/ResponsePromise.js';\nexport type {\n\tStandardSchemaV1,\n\tStandardSchemaV1InferOutput,\n\tStandardSchemaV1Issue,\n} from './types/standard-schema.js';\nexport type {KyRequest} from './types/request.js';\nexport type {KyResponse} from './types/response.js';\nexport {KyError} from './errors/KyError.js';\nexport {HTTPError} from './errors/HTTPError.js';\nexport {SchemaValidationError} from './errors/SchemaValidationError.js';\nexport {NetworkError} from './errors/NetworkError.js';\nexport {TimeoutError} from './errors/TimeoutError.js';\nexport {ForceRetryError} from './errors/ForceRetryError.js';\nexport {\n\tisKyError,\n\tisHTTPError,\n\tisNetworkError,\n\tisTimeoutError,\n\tisForceRetryError,\n} from './utils/type-guards.js';\nexport {replaceOption} from './utils/merge.js';\n\n// Intentionally not exporting this for now as it's just an implementation detail and we don't want to commit to a certain API yet at least.\n// export {NonError} from './errors/NonError.js';\n", "import ky from 'ky';\r\n\r\nimport { app, tagCloudEndpoint } from './globals';\r\nimport type {\r\n AccountSettings,\r\n Bookmark,\r\n BulkEditRequest,\r\n BulkEditResponse,\r\n Note,\r\n TagCloud,\r\n TagCloudMode,\r\n TagSuggestionRequest,\r\n TagSuggestionResponse,\r\n} from './types';\r\n\r\nexport type StarAction = 'star' | 'unstar';\r\n\r\nfunction withCsrf(headers?: HeadersInit): HeadersInit {\r\n const a = app();\r\n const h = new Headers(headers);\r\n h.set(a.csrfHeaderName, a.csrfToken);\r\n return h;\r\n}\r\n\r\nfunction urlFor(path: string): string {\r\n // Preserve PureScript semantics: simple string concatenation.\r\n return `${app().homeR}${path}`;\r\n}\r\n\r\nfunction toRelativePath(urlOrPath: string): string {\r\n try {\r\n const u = new URL(urlOrPath, window.location.origin);\r\n const rel = `${u.pathname}${u.search}${u.hash}`;\r\n return rel.startsWith('/') ? rel.slice(1) : rel;\r\n } catch {\r\n return urlOrPath.replace(/^\\/+/, '');\r\n }\r\n}\r\n\r\nasync function request(\r\n method: string,\r\n path: string,\r\n opts: { headers?: HeadersInit; body?: BodyInit | null; timeout?: number | false } = {},\r\n) {\r\n const res = await ky(urlFor(path), {\r\n method,\r\n headers: withCsrf(opts.headers),\r\n body: opts.body ?? undefined,\r\n throwHttpErrors: false,\r\n timeout: opts.timeout,\r\n });\r\n return res;\r\n}\r\n\r\nexport async function toggleStar(\r\n bid: number,\r\n action: StarAction,\r\n): Promise<{ ok: boolean; status: number; bodyText: string }> {\r\n const res = await request('PATCH', `api/bm/${bid.toString()}/${action}`, {\r\n headers: { 'content-type': 'application/x-www-form-urlencoded' },\r\n });\r\n return { ok: res.ok, status: res.status, bodyText: await res.text() };\r\n}\r\n\r\nexport async function markRead(\r\n bid: number,\r\n): Promise<{ ok: boolean; status: number; bodyText: string }> {\r\n const res = await request('PATCH', `api/bm/${bid.toString()}/read`, {\r\n headers: { 'content-type': 'application/x-www-form-urlencoded' },\r\n });\r\n return { ok: res.ok, status: res.status, bodyText: await res.text() };\r\n}\r\n\r\nexport async function destroy(\r\n bid: number,\r\n): Promise<{ ok: boolean; status: number; bodyText: string }> {\r\n const res = await request('DELETE', `api/bm/${bid.toString()}`, {\r\n headers: { 'content-type': 'application/x-www-form-urlencoded' },\r\n });\r\n return { ok: res.ok, status: res.status, bodyText: await res.text() };\r\n}\r\n\r\nexport async function bulkEdit(req: BulkEditRequest): Promise<BulkEditResponse> {\r\n const res = await request('POST', 'api/bm/bulk', {\r\n headers: { 'content-type': 'application/json' },\r\n body: JSON.stringify(req),\r\n timeout: 300_000,\r\n });\r\n const contentType = res.headers.get('content-type') ?? '';\r\n let bodyText: string | undefined;\r\n let data: { editedCount: number } | undefined;\r\n if (contentType.includes('application/json')) {\r\n try {\r\n data = await res.json();\r\n } catch {\r\n data = undefined;\r\n }\r\n } else {\r\n bodyText = await res.text();\r\n }\r\n return { ok: res.ok, status: res.status, bodyText, data };\r\n}\r\n\r\nexport async function archiveBookmark(\r\n bid: number,\r\n): Promise<{ ok: boolean; status: number; bodyText: string }> {\r\n const res = await request('POST', `api/bm/${bid.toString()}/archive`, {\r\n headers: { 'content-type': 'application/x-www-form-urlencoded' },\r\n });\r\n return { ok: res.ok, status: res.status, bodyText: await res.text() };\r\n}\r\n\r\nexport async function editBookmark(\r\n bm: Bookmark,\r\n): Promise<{ ok: boolean; status: number; bodyText: string }> {\r\n const res = await request('POST', 'api/add', {\r\n headers: { 'content-type': 'application/json' },\r\n body: JSON.stringify(bm),\r\n });\r\n return { ok: res.ok, status: res.status, bodyText: await res.text() };\r\n}\r\n\r\nexport async function editNote(\r\n note: Note,\r\n): Promise<{ ok: boolean; status: number; bodyText: string }> {\r\n const res = await request('POST', 'api/note/add', {\r\n headers: { 'content-type': 'application/json' },\r\n body: JSON.stringify(note),\r\n });\r\n return { ok: res.ok, status: res.status, bodyText: await res.text() };\r\n}\r\n\r\nexport async function lookupTitle(bm: Bookmark): Promise<string | null> {\r\n const res = await request('POST', 'api/lookuptitle', {\r\n headers: { 'content-type': 'application/json' },\r\n body: JSON.stringify(bm),\r\n });\r\n if (res.status === 200) return await res.text();\r\n return null;\r\n}\r\n\r\nexport async function getTagCloud(mode: TagCloudMode): Promise<TagCloud | null> {\r\n const res = await request('POST', toRelativePath(tagCloudEndpoint()), {\r\n headers: { 'content-type': 'application/json' },\r\n body: JSON.stringify(mode),\r\n });\r\n if (!res.ok) return null;\r\n try {\r\n return await res.json();\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nexport async function updateTagCloudMode(mode: TagCloudMode): Promise<void> {\r\n await request('POST', 'api/tagcloudmode', {\r\n headers: { 'content-type': 'application/json' },\r\n body: JSON.stringify(mode),\r\n });\r\n}\r\n\r\nexport async function fetchTagSuggestions(\r\n data: TagSuggestionRequest,\r\n): Promise<TagSuggestionResponse | null> {\r\n const res = await request('POST', 'api/tagSuggestions', {\r\n headers: { 'content-type': 'application/json' },\r\n body: JSON.stringify(data),\r\n });\r\n if (!res.ok) return null;\r\n try {\r\n return await res.json<TagSuggestionResponse>();\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nexport async function destroyNote(\r\n nid: number,\r\n): Promise<{ ok: boolean; status: number; bodyText: string }> {\r\n const res = await request('DELETE', `api/note/${nid.toString()}`, {\r\n headers: { 'content-type': 'application/x-www-form-urlencoded' },\r\n });\r\n return { ok: res.ok, status: res.status, bodyText: await res.text() };\r\n}\r\n\r\nexport async function editAccountSettings(\r\n us: AccountSettings,\r\n): Promise<{ ok: boolean; status: number; bodyText: string }> {\r\n const res = await request('POST', 'api/accountSettings', {\r\n headers: { 'content-type': 'application/json' },\r\n body: JSON.stringify(us),\r\n });\r\n return { ok: res.ok, status: res.status, bodyText: await res.text() };\r\n}\r\n\r\nexport async function logout(): Promise<void> {\r\n const a = app();\r\n await request('POST', toRelativePath(a.authRlogoutR));\r\n window.location.reload();\r\n}\r\n", "import { TimeoutError } from 'ky';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { editAccountSettings } from '../api';\nimport type { AccountSettings } from '../types';\nimport { apiErrorMsg } from '../util';\n\n/** Displays and edits the current user's account settings. */\nexport function AccountSettingsView({ initial }: { initial: AccountSettings }) {\n const { t } = useTranslation();\n const [us, setUs] = React.useState<AccountSettings>(initial);\n const [apiError, setApiError] = React.useState<string | null>(null);\n const archiveDisabled = !us.archiveBackendEnabled;\n const archiveDisabledTitle = archiveDisabled ? t('settings.archivingDisabled') : undefined;\n\n async function update(next: AccountSettings): Promise<boolean> {\n try {\n const res = await editAccountSettings(next);\n if (!res.ok) {\n setApiError(apiErrorMsg(t, res.status, res.bodyText));\n return false;\n }\n setApiError(null);\n setUs(next);\n const lockIcon = document.getElementById('privacy-lock-icon');\n if (lockIcon) lockIcon.style.display = next.privacyLock ? '' : 'none';\n return true;\n } catch (err) {\n setApiError(\n err instanceof TimeoutError ? t('error.requestTimedOut') : t('error.networkError'),\n );\n return false;\n }\n }\n\n return (\n <div className=\"settings-form\">\n <div className=\"fw7 mb2\">{t('settings.accountTitle')}</div>\n\n <div className=\"flex items-center mb2\">\n <label htmlFor=\"language\" className=\"lh-copy mr2\">\n {t('settings.language')}\n </label>\n <select\n id=\"language\"\n name=\"language\"\n className=\"pointer\"\n value={us.language ?? ''}\n onChange={(e) => {\n const next = { ...us, language: e.target.value === '' ? null : e.target.value };\n void update(next).then((ok) => {\n if (ok) window.location.reload();\n });\n }}\n >\n <option value=\"\">{t('settings.serverDefault')}</option>\n <option value=\"en\">English</option>\n <option value=\"de\">Deutsch</option>\n <option value=\"es\">Espa\u00F1ol</option>\n <option value=\"fr\">Fran\u00E7ais</option>\n <option value=\"it\">Italiano</option>\n <option value=\"ja\">\u65E5\u672C\u8A9E</option>\n <option value=\"ko\">\uD55C\uAD6D\uC5B4</option>\n <option value=\"pl\">Polski</option>\n <option value=\"pt-BR\">Portugu\u00EAs (Brasil)</option>\n <option value=\"ru\">\u0420\u0443\u0441\u0441\u043A\u0438\u0439</option>\n <option value=\"tr\">T\u00FCrk\u00E7e</option>\n <option value=\"uk\">\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430</option>\n <option value=\"zh-Hans\">\u7B80\u4F53\u4E2D\u6587</option>\n <option value=\"zh-Hant\">\u7E41\u9AD4\u4E2D\u6587</option>\n </select>\n </div>\n\n <div\n className={`flex items-center mb2${archiveDisabled ? ' o-50' : ''}`}\n title={archiveDisabledTitle}\n >\n <input\n type=\"checkbox\"\n className={`mr2${archiveDisabled ? '' : ' pointer'}`}\n id=\"archiveDefault\"\n name=\"archiveDefault\"\n checked={us.archiveDefault}\n disabled={archiveDisabled}\n title={archiveDisabledTitle}\n onChange={(e) => void update({ ...us, archiveDefault: e.target.checked })}\n />\n <label\n htmlFor=\"archiveDefault\"\n className={`lh-copy${archiveDisabled ? ' thm-text-tertiary' : ''}`}\n title={archiveDisabledTitle}\n >\n {t('settings.archiveDefault')}\n </label>\n </div>\n\n <div className=\"flex items-center mb2\">\n <input\n type=\"checkbox\"\n className=\"pointer mr2\"\n id=\"suggestTags\"\n name=\"suggestTags\"\n checked={us.suggestTags}\n onChange={(e) => void update({ ...us, suggestTags: e.target.checked })}\n />\n <label htmlFor=\"suggestTags\" className=\"lh-copy\">\n {t('settings.suggestTags')}\n </label>\n </div>\n\n <div className=\"flex items-center mb2\">\n <input\n type=\"checkbox\"\n className=\"pointer mr2\"\n id=\"privateDefault\"\n name=\"privateDefault\"\n checked={us.privateDefault}\n onChange={(e) => void update({ ...us, privateDefault: e.target.checked })}\n />\n <label htmlFor=\"privateDefault\" className=\"lh-copy\">\n {t('settings.privateDefault')}\n </label>\n </div>\n\n <div className=\"flex items-center mb2\">\n <input\n type=\"checkbox\"\n className=\"pointer mr2\"\n id=\"publicTagCloud\"\n name=\"publicTagCloud\"\n checked={us.publicTagCloud}\n onChange={(e) => void update({ ...us, publicTagCloud: e.target.checked })}\n />\n <label htmlFor=\"publicTagCloud\" className=\"lh-copy\">\n {t('settings.publicTagCloud')}\n </label>\n </div>\n\n <div className=\"flex items-center mb2\">\n <input\n type=\"checkbox\"\n className=\"pointer mr2\"\n id=\"privacyLock\"\n name=\"privacyLock\"\n checked={us.privacyLock}\n onChange={(e) => void update({ ...us, privacyLock: e.target.checked })}\n />\n <label htmlFor=\"privacyLock\" className=\"lh-copy\">\n {t('settings.privacyLock')}\n </label>\n </div>\n\n {apiError ? <div className=\"thm-text-error f7 mt2\">{apiError}</div> : null}\n </div>\n );\n}\n", "import React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { destroy, editBookmark, lookupTitle } from '../api';\nimport { app, closeWindow, fromNow, shdatetime } from '../globals';\nimport { useTagSuggestions } from '../hooks/useTagSuggestions';\nimport type { Bookmark } from '../types';\nimport { curQuerystring, lookupQueryStringValue, normalizeTags } from '../util';\nimport { TagSuggestionsDropdown } from './TagSuggestionsDropdown';\n\n/** Form for adding or editing a single bookmark, used in the popup window. */\nexport function AddForm({ initial }: { initial: Bookmark }) {\n const { t } = useTranslation();\n const a = app();\n const [bm, setBm] = React.useState<Bookmark>(initial);\n const [editBm, setEditBm] = React.useState<Bookmark>(initial);\n const [deleteAsk, setDeleteAsk] = React.useState(false);\n const [loading, setLoading] = React.useState(false);\n const [destroyed, setDestroyed] = React.useState(false);\n const [apiError, setApiError] = React.useState<string | null>(null);\n const suggestEnabled = a.dat.suggestTags === true;\n const fromNowVal = React.useMemo(() => fromNow(a.lang, bm.time), [a.lang, bm.time]);\n\n const {\n tagInputRef,\n suggestionState,\n closeSuggestions,\n onTagsChange,\n onTagsKeyDown,\n onTagsSelect,\n onSuggestionHover,\n onSuggestionPick,\n } = useTagSuggestions({\n enabled: suggestEnabled,\n tags: editBm.tags,\n maxSuggestions: 4,\n onTagsUpdate: (tags) => {\n setEditBm((x) => ({ ...x, tags }));\n },\n });\n\n async function onFetchTitle() {\n setLoading(true);\n try {\n const title = await lookupTitle(editBm);\n if (title != null) setEditBm((x) => ({ ...x, title }));\n } finally {\n setLoading(false);\n }\n }\n\n async function onDestroy() {\n const res = await destroy(bm.bid);\n if (!res.ok) {\n setApiError(res.bodyText);\n return;\n }\n setDestroyed(true);\n }\n\n const onSubmit = async (e: React.SyntheticEvent<HTMLFormElement, SubmitEvent>): Promise<void> => {\n e.preventDefault();\n setApiError(null);\n const editBm2 = { ...editBm, tags: normalizeTags(editBm.tags) };\n\n const res = await editBookmark(editBm2);\n if (res.ok && res.status >= 200 && res.status < 300) {\n setBm(editBm2);\n\n const qs = curQuerystring();\n const next = lookupQueryStringValue(qs, 'next');\n const ref = document.referrer;\n const org = window.location.origin;\n\n if (next === 'closeWindow') closeWindow(window);\n else if (next === 'back') {\n if (ref.startsWith(org)) window.location.href = ref;\n else window.location.href = org;\n } else {\n closeWindow(window);\n }\n } else {\n setApiError(res.bodyText);\n }\n };\n\n if (destroyed) return <p className=\"thm-text-killed\">{t('addForm.killed')}</p>;\n\n return (\n <form\n onSubmit={(e) => {\n void onSubmit(e);\n }}\n >\n <table className=\"w-100\">\n <tbody>\n <tr>\n <td className=\"w1\" />\n <td>\n {bm.bid > 0 ? (\n <div className=\"alert\">\n {t('addForm.previouslySaved')} \n <span\n className=\"link f7 dib thm-text-tertiary thm-hover-link-color pr3\"\n data-time={bm.time}\n title={shdatetime(a.lang, bm.time)}\n >\n {fromNowVal}\n </span>\n <div className=\"edit_links dib ml1\">\n <div className=\"delete_link di\">\n <button\n type=\"button\"\n onClick={() => {\n setDeleteAsk(true);\n }}\n className=\"delete\"\n hidden={deleteAsk}\n >\n {t('delete')}\n </button>\n <span className=\"confirm thm-text-error\" hidden={!deleteAsk}>\n <button\n type=\"button\"\n onClick={() => {\n setDeleteAsk(false);\n }}\n >\n {t('cancel')} / \n </button>\n <button\n type=\"button\"\n onClick={() => void onDestroy()}\n className=\"thm-text-error\"\n >\n {t('destroy')}\n </button>\n </span>\n </div>\n </div>\n </div>\n ) : null}\n {apiError ? <div className=\"alert alert-err\">{apiError}</div> : null}\n </td>\n </tr>\n\n <tr>\n <td>\n <label htmlFor=\"url\">{t('addForm.url')}</label>\n </td>\n <td>\n <input\n type=\"url\"\n id=\"url\"\n className=\"w-100 mv1\"\n required\n name=\"url\"\n autoFocus={bm.url === ''}\n value={editBm.url}\n onChange={(e) => {\n setEditBm((x) => ({ ...x, url: e.target.value }));\n }}\n />\n </td>\n </tr>\n\n <tr>\n <td>\n <label htmlFor=\"title\">{t('bmark.title')}</label>\n </td>\n <td className=\"flex\">\n <input\n type=\"text\"\n id=\"title\"\n className=\"w-100 mv1 flex-auto\"\n name=\"title\"\n value={editBm.title}\n onChange={(e) => {\n setEditBm((x) => ({ ...x, title: e.target.value }));\n }}\n />\n <button\n disabled={loading}\n type=\"button\"\n onClick={() => void onFetchTitle()}\n className={`ml2 input-reset ba thm-border-primary pointer f6 di dim pa1 ma1 mr0${loading ? ' thm-bg-disabled' : ''}`}\n >\n {t('fetch')}\n </button>\n </td>\n </tr>\n\n <tr>\n <td>\n <label htmlFor=\"description\">{t('bmark.description')}</label>\n </td>\n <td>\n <textarea\n className=\"w-100 mt1 thm-text-secondary\"\n id=\"description\"\n name=\"description\"\n rows={4}\n value={editBm.description}\n onChange={(e) => {\n setEditBm((x) => ({ ...x, description: e.target.value }));\n }}\n />\n </td>\n </tr>\n\n <tr>\n <td>\n <label htmlFor=\"tags\">{t('bmark.tags')}</label>\n </td>\n <td>\n <div className=\"relative\">\n <input\n ref={tagInputRef}\n type=\"text\"\n id=\"tags\"\n className=\"w-100 mv1\"\n name=\"tags\"\n autoComplete=\"off\"\n autoCapitalize=\"off\"\n autoFocus={bm.url !== ''}\n value={editBm.tags}\n onChange={onTagsChange}\n onKeyDown={onTagsKeyDown}\n onClick={onTagsSelect}\n onSelect={onTagsSelect}\n onBlur={() => {\n window.setTimeout(() => {\n closeSuggestions();\n }, 0);\n }}\n />\n {suggestionState != null ? (\n <TagSuggestionsDropdown\n suggestionState={suggestionState}\n onHover={onSuggestionHover}\n onPick={onSuggestionPick}\n />\n ) : null}\n </div>\n </td>\n </tr>\n\n <tr>\n <td>\n <label htmlFor=\"private\">{t('bmark.private')}</label>\n </td>\n <td>\n <div className=\"mr4 dib\">\n <input\n type=\"checkbox\"\n id=\"private\"\n className=\"private pointer\"\n name=\"private\"\n checked={editBm.private}\n onChange={(e) => {\n setEditBm((x) => ({\n ...x,\n private: e.target.checked,\n ...(a.dat.archiveBackendEnabled && editBm.archiveRequested && e.target.checked\n ? { archiveRequested: false }\n : {}),\n }));\n }}\n />\n </div>\n {!(bm.bid > 0) && a.dat.archiveBackendEnabled ? (\n <div\n className={`dib ${editBm.private ? 'o-50' : ''}`}\n title={editBm.private ? t('addForm.archiveUnavailable') : undefined}\n >\n <label className=\"mr2 di\" htmlFor=\"archiveRequested\">\n {t('archive')}\n </label>\n <input\n type=\"checkbox\"\n id=\"archiveRequested\"\n className=\"archive pointer ml2\"\n name=\"archiveRequested\"\n disabled={editBm.private}\n checked={editBm.archiveRequested ?? false}\n onChange={(e) => {\n setEditBm((x) => ({ ...x, archiveRequested: e.target.checked }));\n }}\n />\n </div>\n ) : null}\n </td>\n </tr>\n\n <tr>\n <td>\n <label htmlFor=\"toread\">{t('addForm.readLater')}</label>\n </td>\n <td>\n <input\n type=\"checkbox\"\n id=\"toread\"\n className=\"toread pointer\"\n name=\"toread\"\n checked={editBm.toread}\n onChange={(e) => {\n setEditBm((x) => ({ ...x, toread: e.target.checked }));\n }}\n />\n </td>\n </tr>\n\n <tr>\n <td />\n <td>\n <input\n type=\"submit\"\n className=\"ph3 pv2 input-reset thm-text-strong ba thm-border-primary bg-transparent pointer f6 dib mt1 dim\"\n value={bm.bid > 0 ? t('addForm.update') : t('addForm.add')}\n />\n </td>\n </tr>\n </tbody>\n </table>\n </form>\n );\n}\n", "import React from 'react';\n\nimport { fetchTagSuggestions } from '../api';\nimport type { TagSuggestionRequest, TSuggestion } from '../types';\n\nexport type SuggestionState = {\n items: TSuggestion[];\n selectedIndex: number;\n tokenRange: TagTokenRange;\n anchorLeft: number;\n anchorTop: number;\n};\n\ntype TagTokenRange = {\n token: string;\n start: number;\n end: number;\n};\n\nconst TAG_SUGGESTION_DEBOUNCE_MS = 180;\n\nexport function useTagSuggestions({\n enabled,\n tags,\n onTagsUpdate,\n maxSuggestions = 10,\n}: {\n enabled: boolean;\n tags: string;\n onTagsUpdate: (next: string) => void;\n maxSuggestions?: number;\n}) {\n const [suggestionState, setSuggestionState] = React.useState<SuggestionState | null>(null);\n const tagSuggestionRequestId = React.useRef(0);\n const tagSuggestionDebounceRef = React.useRef<number | null>(null);\n const tagInputRef = React.useRef<HTMLInputElement | null>(null);\n\n const cancelPendingSuggestions = React.useCallback(() => {\n if (tagSuggestionDebounceRef.current != null) {\n window.clearTimeout(tagSuggestionDebounceRef.current);\n tagSuggestionDebounceRef.current = null;\n }\n tagSuggestionRequestId.current += 1;\n }, []);\n\n const closeSuggestions = React.useCallback(() => {\n cancelPendingSuggestions();\n setSuggestionState(null);\n }, [cancelPendingSuggestions]);\n\n React.useEffect(() => {\n return () => {\n cancelPendingSuggestions();\n };\n }, [cancelPendingSuggestions]);\n\n React.useEffect(() => {\n if (!enabled) closeSuggestions();\n }, [enabled, closeSuggestions]);\n\n const onTagsChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const { value, selectionStart, selectionEnd } = e.target;\n\n onTagsUpdate(value);\n\n if (!enabled) {\n closeSuggestions();\n return;\n }\n\n if (selectionStart == null || selectionEnd == null || selectionStart !== selectionEnd) {\n closeSuggestions();\n return;\n }\n\n if (isWhitespaceOnlyEdit(tags, value)) {\n closeSuggestions();\n return;\n }\n\n const activeToken = getActiveTagToken(value, selectionStart);\n if (activeToken == null || activeToken.token.length < 2) {\n closeSuggestions();\n return;\n }\n\n const normalizedTagTerms = getNormalizedTagTerms(value);\n const activeTokenNormalized = activeToken.token.toLowerCase();\n const activeTokenOccurrences = normalizedTagTerms.filter(\n (tag) => tag === activeTokenNormalized,\n ).length;\n const shouldExcludeActiveToken = activeTokenOccurrences > 1;\n const payload: TagSuggestionRequest = {\n query: activeToken.token,\n currentTags: Array.from(\n new Set(\n normalizedTagTerms.filter(\n (tag) => shouldExcludeActiveToken || tag !== activeTokenNormalized,\n ),\n ),\n ),\n };\n\n cancelPendingSuggestions();\n tagSuggestionDebounceRef.current = window.setTimeout(() => {\n const requestId = tagSuggestionRequestId.current + 1;\n tagSuggestionRequestId.current = requestId;\n\n void (async () => {\n const response = await fetchTagSuggestions(payload);\n\n if (\n requestId !== tagSuggestionRequestId.current ||\n response == null ||\n tagInputRef.current == null\n ) {\n return;\n }\n\n const items = response.suggestions.slice(0, maxSuggestions);\n if (items.length === 0) {\n closeSuggestions();\n return;\n }\n\n const anchor = measureCaretPosition(tagInputRef.current, selectionStart);\n\n setSuggestionState({\n items,\n selectedIndex: 0,\n tokenRange: activeToken,\n anchorLeft: anchor.left,\n anchorTop: anchor.top,\n });\n })();\n }, TAG_SUGGESTION_DEBOUNCE_MS);\n },\n [cancelPendingSuggestions, closeSuggestions, enabled, maxSuggestions, onTagsUpdate],\n );\n\n const applySuggestion = React.useCallback(\n (term: string) => {\n const input = tagInputRef.current;\n if (input == null || suggestionState == null) return;\n\n const next = replaceTokenAtRange(tags, suggestionState.tokenRange, term);\n onTagsUpdate(next.value);\n closeSuggestions();\n\n requestAnimationFrame(() => {\n input.focus();\n input.setSelectionRange(next.caret, next.caret);\n });\n },\n [closeSuggestions, onTagsUpdate, suggestionState, tags],\n );\n\n const onTagsKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Escape') {\n if (suggestionState != null) {\n e.preventDefault();\n closeSuggestions();\n }\n return;\n }\n\n if (e.key === ' ') {\n closeSuggestions();\n return;\n }\n\n if (suggestionState == null) return;\n\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n setSuggestionState((current) => {\n if (current == null) return current;\n return {\n ...current,\n selectedIndex: (current.selectedIndex + 1) % current.items.length,\n };\n });\n return;\n }\n\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n setSuggestionState((current) => {\n if (current == null) return current;\n return {\n ...current,\n selectedIndex:\n (current.selectedIndex - 1 + current.items.length) % current.items.length,\n };\n });\n return;\n }\n\n if (e.key === 'Enter' || e.key === 'Tab') {\n e.preventDefault();\n const selected = suggestionState.items[suggestionState.selectedIndex];\n applySuggestion(selected.term);\n }\n },\n [applySuggestion, closeSuggestions, suggestionState],\n );\n\n const onTagsSelect = React.useCallback(\n (e: React.SyntheticEvent<HTMLInputElement>) => {\n if (suggestionState == null) return;\n\n const input = e.currentTarget;\n const { selectionStart, selectionEnd, value } = input;\n if (selectionStart == null || selectionEnd == null || selectionStart !== selectionEnd) {\n closeSuggestions();\n return;\n }\n\n const activeToken = getActiveTagToken(value, selectionStart);\n if (activeToken == null) {\n closeSuggestions();\n return;\n }\n\n if (activeToken.start !== suggestionState.tokenRange.start) {\n closeSuggestions();\n }\n },\n [closeSuggestions, suggestionState],\n );\n\n const onSuggestionHover = React.useCallback((index: number) => {\n setSuggestionState((current) => {\n if (current == null) return current;\n return { ...current, selectedIndex: index };\n });\n }, []);\n\n return {\n tagInputRef,\n suggestionState,\n closeSuggestions,\n onTagsChange,\n onTagsKeyDown,\n onTagsSelect,\n onSuggestionHover,\n onSuggestionPick: applySuggestion,\n };\n}\n\nfunction getActiveTagToken(value: string, caret: number): TagTokenRange | null {\n const boundedCaret = Math.max(0, Math.min(caret, value.length));\n\n let start = boundedCaret;\n while (start > 0 && value[start - 1] !== ' ') {\n start -= 1;\n }\n\n let end = boundedCaret;\n while (end < value.length && value[end] !== ' ') {\n end += 1;\n }\n\n const token = value.slice(start, end).trim();\n return token === '' ? null : { token, start, end };\n}\n\nfunction measureCaretPosition(\n input: HTMLInputElement,\n caret: number,\n): { left: number; top: number } {\n const style = window.getComputedStyle(input);\n const mirror = document.createElement('div');\n mirror.style.position = 'absolute';\n mirror.style.visibility = 'hidden';\n mirror.style.whiteSpace = 'pre';\n mirror.style.top = '0';\n mirror.style.left = '0';\n mirror.style.font = style.font;\n mirror.style.fontKerning = style.fontKerning;\n mirror.style.fontFeatureSettings = style.fontFeatureSettings;\n mirror.style.fontVariantLigatures = style.fontVariantLigatures;\n mirror.style.letterSpacing = style.letterSpacing;\n mirror.style.textTransform = style.textTransform;\n mirror.style.textIndent = style.textIndent;\n mirror.style.boxSizing = style.boxSizing;\n mirror.style.padding = style.padding;\n mirror.style.border = style.border;\n mirror.style.width = `${String(input.clientWidth)}px`;\n\n const prefix = document.createElement('span');\n prefix.textContent = input.value.slice(0, caret);\n mirror.appendChild(prefix);\n\n const marker = document.createElement('span');\n marker.textContent = '\\u200b';\n mirror.appendChild(marker);\n\n document.body.appendChild(mirror);\n const left = marker.offsetLeft - input.scrollLeft + 1;\n const top = marker.offsetTop - input.scrollTop + input.offsetHeight + 4;\n document.body.removeChild(mirror);\n\n return { left, top };\n}\n\nfunction replaceTokenAtRange(\n value: string,\n range: TagTokenRange,\n replacement: string,\n): { value: string; caret: number } {\n const prefix = value.slice(0, range.start);\n // Consume any existing leading space from the suffix so we always own the\n // separator. This lets us unconditionally append a trailing space and place\n // the caret after it, whether the accepted tag is in the middle or at the end.\n const suffix = value.slice(range.end).replace(/^ /, '');\n const inserted = `${replacement} `;\n return {\n value: `${prefix}${inserted}${suffix}`,\n caret: prefix.length + inserted.length,\n };\n}\n\nfunction isWhitespaceOnlyEdit(previous: string, next: string): boolean {\n if (previous === next) return false;\n\n let start = 0;\n while (start < previous.length && start < next.length && previous[start] === next[start]) {\n start += 1;\n }\n\n let prevEnd = previous.length;\n let nextEnd = next.length;\n while (prevEnd > start && nextEnd > start && previous[prevEnd - 1] === next[nextEnd - 1]) {\n prevEnd -= 1;\n nextEnd -= 1;\n }\n\n const removed = previous.slice(start, prevEnd);\n const added = next.slice(start, nextEnd);\n if (removed === '' && added === '') return false;\n return isSpacesOnly(removed) && isSpacesOnly(added);\n}\n\nfunction isSpacesOnly(value: string): boolean {\n return value === '' || /^ *$/.test(value);\n}\n\nfunction getNormalizedTagTerms(value: string): string[] {\n return value\n .split(' ')\n .map((tag) => tag.trim().toLowerCase())\n .filter((tag) => tag !== '');\n}\n", "import React from 'react';\n\nimport type { SuggestionState } from '../hooks/useTagSuggestions';\n\nconst MAX_SUGGESTION_TERM_RENDER_LENGTH = 80;\n\nexport function TagSuggestionsDropdown({\n suggestionState,\n onHover,\n onPick,\n}: {\n suggestionState: SuggestionState;\n onHover: (index: number) => void;\n onPick: (term: string) => void;\n}) {\n return (\n <div\n className=\"absolute z-5 thm-bg-secondary thm-text-primary ba thm-border-default br2 shadow-4 overflow-hidden f6\"\n style={{\n left: suggestionState.anchorLeft,\n top: suggestionState.anchorTop,\n width: 'max-content',\n maxWidth: '22rem',\n }}\n >\n {suggestionState.items.map((item, index) => {\n const selected = index === suggestionState.selectedIndex;\n const displayTerm = truncateSuggestionTerm(item.term);\n return (\n <button\n key={`${item.term}-${item.count.toString()}`}\n type=\"button\"\n className={`flex items-center justify-between w-100 bn bg-transparent tl ph2 pv1 pointer nowrap thm-text-primary thm-hover-link-color ${selected ? 'thm-bg-selected thm-text-selected' : ''}`}\n onMouseEnter={() => {\n onHover(index);\n }}\n onMouseDown={(e) => {\n e.preventDefault();\n }}\n onClick={() => {\n onPick(item.term);\n }}\n title={item.term}\n >\n <span className=\"mr2\">\n {renderHighlightedSuggestion(displayTerm, suggestionState.tokenRange.token)}\n </span>\n <span className=\"thm-text-tertiary f6 tr\" style={{ minWidth: '3ch' }}>\n {item.count}\n </span>\n </button>\n );\n })}\n </div>\n );\n}\n\nfunction renderHighlightedSuggestion(term: string, query: string): React.ReactNode {\n const lowerTerm = term.toLocaleLowerCase();\n const lowerQuery = query.toLocaleLowerCase();\n const idx = lowerTerm.indexOf(lowerQuery);\n if (idx < 0) return term;\n\n const before = term.slice(0, idx);\n const match = term.slice(idx, idx + query.length);\n const after = term.slice(idx + query.length);\n\n return (\n <>\n {before}\n <strong>{match}</strong>\n {after}\n </>\n );\n}\n\nfunction truncateSuggestionTerm(term: string): string {\n if (term.length <= MAX_SUGGESTION_TERM_RENDER_LENGTH) return term;\n return `${term.slice(0, MAX_SUGGESTION_TERM_RENDER_LENGTH)}...`;\n}\n", "import React from 'react';\n\nimport { useBookmarksStore } from '../stores/bookmarksStore';\nimport type { Bookmark } from '../types';\nimport { BMark } from './BMark';\n\n/** Renders the full list of bookmarks, delegating each item to BMark. */\nexport function BList({ initial }: { initial: Bookmark[] }) {\n const [hasHydrated, setHasHydrated] = React.useState(false);\n const bmarks = useBookmarksStore((s) => s.bmarks);\n const setAll = useBookmarksStore((s) => s.setAll);\n const removeById = useBookmarksStore((s) => s.removeById);\n const upsert = useBookmarksStore((s) => s.upsert);\n\n React.useLayoutEffect(() => {\n setAll(initial);\n setHasHydrated(true);\n }, [initial, setAll]);\n\n const visibleBmarks = hasHydrated ? bmarks : initial;\n\n return (\n <div>\n {visibleBmarks.map((b) => (\n <BMark\n key={b.bid}\n initial={b}\n onNotifyRemove={() => {\n removeById(b.bid);\n }}\n onUpdated={(bm) => {\n upsert(bm);\n }}\n />\n ))}\n </div>\n );\n}\n", "const createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const getInitialState = () => initialState;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const api = { setState, getState, getInitialState, subscribe };\n const initialState = state = createState(setState, getState, api);\n return api;\n};\nconst createStore = ((createState) => createState ? createStoreImpl(createState) : createStoreImpl);\n\nexport { createStore };\n", "import React from 'react';\nimport { createStore } from 'zustand/vanilla';\n\nconst identity = (arg) => arg;\nfunction useStore(api, selector = identity) {\n const slice = React.useSyncExternalStore(\n api.subscribe,\n React.useCallback(() => selector(api.getState()), [api, selector]),\n React.useCallback(() => selector(api.getInitialState()), [api, selector])\n );\n React.useDebugValue(slice);\n return slice;\n}\nconst createImpl = (createState) => {\n const api = createStore(createState);\n const useBoundStore = (selector) => useStore(api, selector);\n Object.assign(useBoundStore, api);\n return useBoundStore;\n};\nconst create = ((createState) => createState ? createImpl(createState) : createImpl);\n\nexport { create, useStore };\n", "import { create } from 'zustand';\n\nimport type { Bookmark } from '../types';\n\nexport type BookmarksState = {\n bmarks: Bookmark[];\n setAll: (bmarks: Bookmark[]) => void;\n removeById: (bid: number) => void;\n upsert: (bm: Bookmark) => void;\n};\n\nexport const useBookmarksStore = create<BookmarksState>((set) => ({\n bmarks: [],\n setAll: (bmarks) => {\n set({ bmarks });\n },\n removeById: (bid) => {\n set((s) => ({ bmarks: s.bmarks.filter((b) => b.bid !== bid) }));\n },\n upsert: (bm) => {\n set((s) => ({ bmarks: s.bmarks.map((b) => (b.bid === bm.bid ? bm : b)) }));\n },\n}));\n", "import { TimeoutError } from 'ky';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { archiveBookmark, destroy, editBookmark, lookupTitle, markRead, toggleStar } from '../api';\nimport { app, setFocus, shdatetime, toLocaleDateString } from '../globals';\nimport { useTagSuggestions } from '../hooks/useTagSuggestions';\nimport type { Bookmark } from '../types';\nimport { apiErrorMsg, encodeTag, fromNullableStr, normalizeTags } from '../util';\nimport { Markdown } from './Markdown';\nimport { TagSuggestionsDropdown } from './TagSuggestionsDropdown';\n\n/** Displays a single bookmark with inline editing, starring, and deletion. */\nexport function BMark({\n initial,\n onNotifyRemove,\n onUpdated,\n}: {\n initial: Bookmark;\n onNotifyRemove: () => void;\n onUpdated: (bm: Bookmark) => void;\n}) {\n const { t } = useTranslation();\n const a = app();\n const [bm, setBm] = React.useState<Bookmark>(initial);\n const [editBm, setEditBm] = React.useState<Bookmark>(initial);\n const [deleteAsk, setDeleteAsk] = React.useState(false);\n const [edit, setEdit] = React.useState(false);\n const [loading, setLoading] = React.useState(false);\n const [archiving, setArchiving] = React.useState(false);\n const [actionError, setActionError] = React.useState<string | null>(null);\n const [errorFadingOut, setErrorFadingOut] = React.useState(false);\n const errorTimer = React.useRef<number | null>(null);\n const fadeTimer = React.useRef<number | null>(null);\n\n React.useEffect(() => {\n return () => {\n if (errorTimer.current !== null) window.clearTimeout(errorTimer.current);\n if (fadeTimer.current !== null) window.clearTimeout(fadeTimer.current);\n };\n }, []);\n\n function clearErrorTimers() {\n if (errorTimer.current !== null) {\n window.clearTimeout(errorTimer.current);\n errorTimer.current = null;\n }\n if (fadeTimer.current !== null) {\n window.clearTimeout(fadeTimer.current);\n fadeTimer.current = null;\n }\n }\n\n function showActionError(msg: string) {\n clearErrorTimers();\n setErrorFadingOut(false);\n setActionError(msg);\n errorTimer.current = window.setTimeout(() => {\n errorTimer.current = null;\n setErrorFadingOut(true);\n fadeTimer.current = window.setTimeout(() => {\n setActionError(null);\n setErrorFadingOut(false);\n fadeTimer.current = null;\n }, 5000);\n }, 3000);\n }\n\n const tagInputId = `${bm.bid.toString()}_tags`;\n\n const linkToFilterSingle = `${fromNullableStr(a.userR)}/b:${bm.slug}`;\n const linkToFilterTag = (tag: string) => `${fromNullableStr(a.userR)}/t:${encodeTag(tag)}`;\n const viewInContextTime = (time: Date) => {\n const t = new Date(time);\n const t2 = new Date(t.getTime() + 2);\n return t2.toISOString();\n };\n const linkToViewInContext = `${fromNullableStr(a.userR)}?before=${encodeURIComponent(viewInContextTime(new Date(bm.time)))}`;\n\n const suggestEnabled = a.dat.suggestTags === true;\n\n const {\n tagInputRef,\n suggestionState,\n closeSuggestions,\n onTagsChange,\n onTagsKeyDown,\n onTagsSelect,\n onSuggestionHover,\n onSuggestionPick,\n } = useTagSuggestions({\n enabled: suggestEnabled,\n tags: editBm.tags,\n onTagsUpdate: (tags) => {\n setEditBm((x) => ({ ...x, tags }));\n },\n });\n\n async function onStar(next: boolean) {\n try {\n const res = await toggleStar(bm.bid, next ? 'star' : 'unstar');\n if (!res.ok) {\n showActionError(apiErrorMsg(t, res.status, res.bodyText));\n return;\n }\n clearErrorTimers();\n setActionError(null);\n const updated = { ...bm, selected: next };\n setBm(updated);\n setEditBm((x) => ({ ...x, selected: next }));\n onUpdated(updated);\n } catch (err) {\n showActionError(\n err instanceof TimeoutError ? t('error.requestTimedOut') : t('error.networkError'),\n );\n }\n }\n\n async function onDestroy() {\n try {\n const res = await destroy(bm.bid);\n if (!res.ok) {\n showActionError(apiErrorMsg(t, res.status, res.bodyText));\n return;\n }\n onNotifyRemove();\n } catch (err) {\n showActionError(\n err instanceof TimeoutError ? t('error.requestTimedOut') : t('error.networkError'),\n );\n }\n }\n\n async function onMarkRead() {\n try {\n const res = await markRead(bm.bid);\n if (!res.ok) {\n showActionError(apiErrorMsg(t, res.status, res.bodyText));\n return;\n }\n clearErrorTimers();\n setActionError(null);\n const updated = { ...bm, toread: false };\n setBm(updated);\n onUpdated(updated);\n } catch (err) {\n showActionError(\n err instanceof TimeoutError ? t('error.requestTimedOut') : t('error.networkError'),\n );\n }\n }\n\n function startEdit(next: boolean) {\n setEditBm(bm);\n setEdit(next);\n clearErrorTimers();\n setActionError(null);\n setErrorFadingOut(false);\n setArchiving(false);\n closeSuggestions();\n if (next) setFocus(tagInputId);\n }\n\n async function onFetchTitle() {\n setLoading(true);\n try {\n const title = await lookupTitle(editBm);\n if (title != null) setEditBm((x) => ({ ...x, title }));\n } finally {\n setLoading(false);\n }\n }\n\n async function onArchive() {\n setArchiving(true);\n try {\n const res = await archiveBookmark(bm.bid);\n if (!res.ok) {\n showActionError(apiErrorMsg(t, res.status, res.bodyText));\n return;\n }\n } finally {\n setArchiving(false);\n }\n }\n\n const onSubmit = async (e: React.SyntheticEvent<HTMLFormElement, SubmitEvent>): Promise<void> => {\n e.preventDefault();\n clearErrorTimers();\n setActionError(null);\n setErrorFadingOut(false);\n const editBm2 = { ...editBm, tags: normalizeTags(editBm.tags) };\n try {\n const res = await editBookmark(editBm2);\n if (res.ok && res.status >= 200 && res.status < 300) {\n setBm(editBm2);\n setEdit(false);\n onUpdated(editBm2);\n } else {\n showActionError(apiErrorMsg(t, res.status, res.bodyText));\n }\n } catch (err) {\n showActionError(\n err instanceof TimeoutError ? t('error.requestTimedOut') : t('error.networkError'),\n );\n }\n };\n\n const archivingDisabled = archiving || editBm.private || bm.url !== editBm.url;\n\n return (\n <div\n id={String(bm.bid)}\n className={`bookmark w-100 mw7 pa1 mb3${bm.private ? ' private' : ''}`}\n >\n {a.dat.isowner ? (\n <div className={`star fl pointer${bm.selected ? ' selected' : ''}`}>\n <button\n className=\"thm-text-border\"\n onClick={() => void onStar(!bm.selected)}\n type=\"button\"\n >\n \u272D\n </button>\n </div>\n ) : null}\n\n {!edit ? (\n <div className=\"display\">\n <a\n href={bm.url}\n target=\"_blank\"\n rel=\"noreferrer\"\n className={`link f5 lh-title${bm.toread ? ' unread' : ''}`}\n >\n {bm.title === '' ? t('noTitle') : bm.title}\n </a>\n <br />\n <a href={bm.url} className=\"link f7 thm-text-tertiary thm-hover-link-color\">\n {bm.url}\n </a>\n {bm.archiveUrl ? (\n <a\n href={bm.archiveUrl}\n className=\"link f7 thm-text-tertiary thm-hover-link-color ml2 thm-text-success\"\n target=\"_blank\"\n rel=\"noreferrer\"\n title={t('bmark.archiveLinkTitle')}\n >\n \u2611\n </a>\n ) : null}\n <br />\n <div className=\"description mt1 thm-text-secondary\">\n <Markdown text={bm.description} />\n </div>\n <div className=\"tags\">\n {bm.tags !== ''\n ? bm.tags.split(' ').map((tag) => (\n <a\n key={tag}\n className={`link tag mr1${tag.slice(0, 1) === '.' ? ' private' : ''}`}\n href={linkToFilterTag(tag)}\n >\n {tag}\n </a>\n ))\n : null}\n </div>\n\n <div>\n <a\n className=\"link f7 di mr5 thm-text-tertiary\"\n href={linkToFilterSingle}\n data-time={bm.time}\n title={shdatetime(a.lang, bm.time)}\n >\n {toLocaleDateString(a.lang, bm.time)}\n </a>\n\n {a.dat.isowner ? (\n <div className=\"edit_links di\">\n <button\n type=\"button\"\n onClick={() => {\n startEdit(true);\n }}\n className=\"edit thm-text-muted thm-hover-link-color\"\n >\n {t('edit')} \n </button>\n <div className=\"delete_link di\">\n <button\n type=\"button\"\n onClick={() => {\n setDeleteAsk(true);\n }}\n className={`delete thm-text-muted thm-hover-link-color${deleteAsk ? ' dn' : ''}`}\n >\n {t('delete')}\n </button>\n <span className={`confirm thm-text-error${!deleteAsk ? ' dn' : ''}`}>\n <button\n type=\"button\"\n onClick={() => {\n setDeleteAsk(false);\n }}\n >\n {t('cancel')} / \n </button>\n <button\n type=\"button\"\n onClick={() => void onDestroy()}\n className=\"thm-text-error\"\n >\n {t('destroy')}\n </button>\n </span>\n </div>\n </div>\n ) : null}\n\n {a.dat.isowner && bm.toread ? (\n <div className=\"read di\">\n \n <button onClick={() => void onMarkRead()} className=\"mark_read\" type=\"button\">\n {t('bmark.markAsRead')}\n </button>\n </div>\n ) : null}\n </div>\n\n {a.dat.filter?.tag == 'FilterSingle' ? (\n <div className=\"mt2\">\n <a className=\"link f7 di mr5\" href={linkToViewInContext}>\n {t('bmark.viewInContext')}\n </a>\n </div>\n ) : null}\n </div>\n ) : null}\n {edit ? (\n <div className=\"edit_bookmark_form pa2 pt0 thm-bg-surface\">\n <form onSubmit={(e) => void onSubmit(e)}>\n <div>{t('bmark.url')}</div>\n <input\n type=\"url\"\n className=\"url w-100 mb2 pt1 edit_form_input\"\n required\n name=\"url\"\n value={editBm.url}\n onChange={(e) => {\n setEditBm((x) => ({ ...x, url: e.target.value }));\n }}\n />\n <div>{t('bmark.title')}</div>\n <div className=\"flex\">\n <input\n type=\"text\"\n className=\"title w-100 mb2 pt1 edit_form_input\"\n name=\"title\"\n value={editBm.title}\n onChange={(e) => {\n setEditBm((x) => ({ ...x, title: e.target.value }));\n }}\n />\n <button\n disabled={loading}\n type=\"button\"\n onClick={() => void onFetchTitle()}\n className={`ml1 pa1 mb2 thm-text-primary ba thm-border-default thm-bg-secondary pointer rdim f7${\n loading ? ' thm-bg-disabled' : ''\n }`}\n >\n {t('fetch')}\n </button>\n </div>\n <div>{t('bmark.description')}</div>\n <textarea\n className=\"description w-100 mb1 pt1 edit_form_input\"\n name=\"description\"\n rows={5}\n value={editBm.description}\n onChange={(e) => {\n setEditBm((x) => ({ ...x, description: e.target.value }));\n }}\n />\n <div id=\"tags_input_box\">\n <div>{t('bmark.tags')}</div>\n <div className=\"relative\">\n <input\n id={tagInputId}\n ref={tagInputRef}\n type=\"text\"\n className=\"tags w-100 mb1 pt1 edit_form_input\"\n name=\"tags\"\n autoComplete=\"off\"\n autoCapitalize=\"off\"\n value={editBm.tags}\n onChange={onTagsChange}\n onKeyDown={onTagsKeyDown}\n onClick={onTagsSelect}\n onSelect={onTagsSelect}\n onBlur={() => {\n window.setTimeout(() => {\n closeSuggestions();\n }, 0);\n }}\n />\n {suggestionState != null ? (\n <TagSuggestionsDropdown\n suggestionState={suggestionState}\n onHover={onSuggestionHover}\n onPick={onSuggestionPick}\n />\n ) : null}\n </div>\n </div>\n <div className=\"edit_form_checkboxes mv3\">\n <input\n type=\"checkbox\"\n className=\"private pointer\"\n id=\"edit_private\"\n name=\"private\"\n checked={editBm.private}\n onChange={(e) => {\n setEditBm((x) => ({ ...x, private: e.target.checked }));\n }}\n />{' '}\n <label htmlFor=\"edit_private\" className=\"mr2\">\n {t('bmark.private')}\n </label>{' '}\n <input\n type=\"checkbox\"\n className=\"toread pointer\"\n id=\"edit_toread\"\n name=\"toread\"\n checked={editBm.toread}\n onChange={(e) => {\n setEditBm((x) => ({ ...x, toread: e.target.checked }));\n }}\n />{' '}\n <label htmlFor=\"edit_toread\">{t('bmark.toread')}</label>\n </div>\n <div className=\"flex justify-between items-center\">\n <div>\n <input\n type=\"submit\"\n className=\"mr1 pv1 ph2 thm-text-primary ba thm-border-default thm-bg-secondary pointer rdim\"\n value={t('save')}\n />{' '}\n <input\n type=\"reset\"\n className=\"pv1 ph2 thm-text-primary ba thm-border-default thm-bg-secondary pointer rdim\"\n value={t('cancel')}\n onClick={() => {\n startEdit(false);\n }}\n />\n </div>\n {a.dat.archiveBackendEnabled ? (\n <button\n type=\"button\"\n disabled={archivingDisabled}\n onClick={() => void onArchive()}\n className={`pv1 ph2 thm-text-primary ba thm-border-default thm-bg-secondary${archiving ? ' thm-bg-disabled' : ''}${archivingDisabled ? ' not-allowed o-20' : ''}`}\n >\n {archiving ? t('archiving') : t('archive')}\n </button>\n ) : null}\n </div>\n </form>\n </div>\n ) : null}\n\n {actionError != null ? (\n <span\n className=\"thm-text-error f7 db mt1\"\n style={{\n opacity: errorFadingOut ? 0 : 1,\n transition: errorFadingOut ? 'opacity 5s' : 'none',\n }}\n >\n {actionError}\n </span>\n ) : null}\n </div>\n );\n}\n", "const {\n entries,\n setPrototypeOf,\n isFrozen,\n getPrototypeOf,\n getOwnPropertyDescriptor,\n} = Object;\n\nlet { freeze, seal, create } = Object; // eslint-disable-line import/no-mutable-exports\nlet { apply, construct } = typeof Reflect !== 'undefined' && Reflect;\n\nif (!freeze) {\n freeze = function <T>(x: T): T {\n return x;\n };\n}\n\nif (!seal) {\n seal = function <T>(x: T): T {\n return x;\n };\n}\n\nif (!apply) {\n apply = function <T>(\n func: (thisArg: any, ...args: any[]) => T,\n thisArg: any,\n ...args: any[]\n ): T {\n return func.apply(thisArg, args);\n };\n}\n\nif (!construct) {\n construct = function <T>(Func: new (...args: any[]) => T, ...args: any[]): T {\n return new Func(...args);\n };\n}\n\nconst arrayForEach = unapply(Array.prototype.forEach);\nconst arrayIndexOf = unapply(Array.prototype.indexOf);\nconst arrayLastIndexOf = unapply(Array.prototype.lastIndexOf);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst arraySlice = unapply(Array.prototype.slice);\nconst arraySplice = unapply(Array.prototype.splice);\nconst arrayIsArray = Array.isArray;\n\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringToString = unapply(String.prototype.toString);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\n\nconst numberToString = unapply(Number.prototype.toString);\nconst booleanToString = unapply(Boolean.prototype.toString);\nconst bigintToString =\n typeof BigInt === 'undefined' ? null : unapply(BigInt.prototype.toString);\nconst symbolToString =\n typeof Symbol === 'undefined' ? null : unapply(Symbol.prototype.toString);\n\nconst objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\nconst objectToString = unapply(Object.prototype.toString);\n\nconst regExpTest = unapply(RegExp.prototype.test);\n\nconst typeErrorCreate = unconstruct(TypeError);\n\n/**\n * Creates a new function that calls the given function with a specified thisArg and arguments.\n *\n * @param func - The function to be wrapped and called.\n * @returns A new function that calls the given function with a specified thisArg and arguments.\n */\nfunction unapply<T>(\n func: (thisArg: any, ...args: any[]) => T\n): (thisArg: any, ...args: any[]) => T {\n return (thisArg: any, ...args: any[]): T => {\n if (thisArg instanceof RegExp) {\n thisArg.lastIndex = 0;\n }\n\n return apply(func, thisArg, args);\n };\n}\n\n/**\n * Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n *\n * @param func - The constructor function to be wrapped and called.\n * @returns A new function that constructs an instance of the given constructor function with the provided arguments.\n */\nfunction unconstruct<T>(\n Func: new (...args: any[]) => T\n): (...args: any[]) => T {\n return (...args: any[]): T => construct(Func, args);\n}\n\n/**\n * Add properties to a lookup table\n *\n * @param set - The set to which elements will be added.\n * @param array - The array containing elements to be added to the set.\n * @param transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n * @returns The modified set with added elements.\n */\nfunction addToSet(\n set: Record<string, boolean>,\n array: readonly unknown[],\n transformCaseFunc: ReturnType<typeof unapply<string>> = stringToLowerCase\n): Record<string, boolean> {\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n\n if (!arrayIsArray(array)) {\n return set;\n }\n\n let l = array.length;\n while (l--) {\n let element = array[l];\n\n if (typeof element === 'string') {\n const lcElement = transformCaseFunc(element);\n\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n (array as unknown[])[l] = lcElement;\n }\n\n element = lcElement;\n }\n }\n\n set[element as string] = true;\n }\n\n return set;\n}\n\n/**\n * Clean up an array to harden against CSPP\n *\n * @param array - The array to be cleaned.\n * @returns The cleaned version of the array\n */\nfunction cleanArray<T>(array: T[]): Array<T | null> {\n for (let index = 0; index < array.length; index++) {\n const isPropertyExist = objectHasOwnProperty(array, index);\n\n if (!isPropertyExist) {\n array[index] = null;\n }\n }\n\n return array;\n}\n\n/**\n * Shallow clone an object\n *\n * @param object - The object to be cloned.\n * @returns A new object that copies the original.\n */\nfunction clone<T extends Record<string, any>>(object: T): T {\n const newObject = create(null);\n\n for (const [property, value] of entries(object)) {\n const isPropertyExist = objectHasOwnProperty(object, property);\n\n if (isPropertyExist) {\n if (arrayIsArray(value)) {\n newObject[property] = cleanArray(value);\n } else if (\n value &&\n typeof value === 'object' &&\n value.constructor === Object\n ) {\n newObject[property] = clone(value);\n } else {\n newObject[property] = value;\n }\n }\n }\n\n return newObject;\n}\n\n/**\n * Convert non-node values into strings without depending on direct property access.\n *\n * @param value - The value to stringify.\n * @returns A string representation of the provided value.\n */\nfunction stringifyValue(value: unknown): string {\n switch (typeof value) {\n case 'string': {\n return value;\n }\n\n case 'number': {\n return numberToString(value);\n }\n\n case 'boolean': {\n return booleanToString(value);\n }\n\n case 'bigint': {\n return bigintToString ? bigintToString(value) : '0';\n }\n\n case 'symbol': {\n return symbolToString ? symbolToString(value) : 'Symbol()';\n }\n\n case 'undefined': {\n return objectToString(value);\n }\n\n case 'function':\n case 'object': {\n if (value === null) {\n return objectToString(value);\n }\n\n const valueAsRecord = value as Record<string, any>;\n const valueToString = lookupGetter(valueAsRecord, 'toString');\n\n if (typeof valueToString === 'function') {\n const stringified = valueToString(valueAsRecord);\n\n return typeof stringified === 'string'\n ? stringified\n : objectToString(stringified);\n }\n\n return objectToString(value);\n }\n\n default: {\n return objectToString(value);\n }\n }\n}\n\n/**\n * This method automatically checks if the prop is function or getter and behaves accordingly.\n *\n * @param object - The object to look up the getter function in its prototype chain.\n * @param prop - The property name for which to find the getter function.\n * @returns The getter function found in the prototype chain or a fallback function.\n */\nfunction lookupGetter<T extends Record<string, any>>(\n object: T,\n prop: string\n): ReturnType<typeof unapply<any>> | (() => null) {\n while (object !== null) {\n const desc = getOwnPropertyDescriptor(object, prop);\n\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n\n object = getPrototypeOf(object);\n }\n\n function fallbackValue(): null {\n return null;\n }\n\n return fallbackValue;\n}\n\nfunction isRegex(value: unknown): value is RegExp {\n try {\n regExpTest(value as RegExp, '');\n return true;\n } catch {\n return false;\n }\n}\n\nexport {\n // Array\n arrayForEach,\n arrayIndexOf,\n arrayIsArray,\n arrayLastIndexOf,\n arrayPop,\n arrayPush,\n arraySlice,\n arraySplice,\n // Object\n entries,\n freeze,\n getPrototypeOf,\n getOwnPropertyDescriptor,\n isFrozen,\n setPrototypeOf,\n seal,\n clone,\n create,\n objectHasOwnProperty,\n objectToString,\n // RegExp\n regExpTest,\n isRegex,\n // String\n stringIndexOf,\n stringMatch,\n stringReplace,\n stringToLowerCase,\n stringToString,\n stringTrim,\n // Other conversion\n stringifyValue,\n // Errors\n typeErrorCreate,\n // Other\n lookupGetter,\n addToSet,\n // Reflect\n unapply,\n unconstruct,\n};\n", "import { freeze } from './utils.js';\n\nexport const html = freeze([\n 'a',\n 'abbr',\n 'acronym',\n 'address',\n 'area',\n 'article',\n 'aside',\n 'audio',\n 'b',\n 'bdi',\n 'bdo',\n 'big',\n 'blink',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'center',\n 'cite',\n 'code',\n 'col',\n 'colgroup',\n 'content',\n 'data',\n 'datalist',\n 'dd',\n 'decorator',\n 'del',\n 'details',\n 'dfn',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'element',\n 'em',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'font',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hgroup',\n 'hr',\n 'html',\n 'i',\n 'img',\n 'input',\n 'ins',\n 'kbd',\n 'label',\n 'legend',\n 'li',\n 'main',\n 'map',\n 'mark',\n 'marquee',\n 'menu',\n 'menuitem',\n 'meter',\n 'nav',\n 'nobr',\n 'ol',\n 'optgroup',\n 'option',\n 'output',\n 'p',\n 'picture',\n 'pre',\n 'progress',\n 'q',\n 'rp',\n 'rt',\n 'ruby',\n 's',\n 'samp',\n 'search',\n 'section',\n 'select',\n 'shadow',\n 'slot',\n 'small',\n 'source',\n 'spacer',\n 'span',\n 'strike',\n 'strong',\n 'style',\n 'sub',\n 'summary',\n 'sup',\n 'table',\n 'tbody',\n 'td',\n 'template',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'time',\n 'tr',\n 'track',\n 'tt',\n 'u',\n 'ul',\n 'var',\n 'video',\n 'wbr',\n] as const);\n\nexport const svg = freeze([\n 'svg',\n 'a',\n 'altglyph',\n 'altglyphdef',\n 'altglyphitem',\n 'animatecolor',\n 'animatemotion',\n 'animatetransform',\n 'circle',\n 'clippath',\n 'defs',\n 'desc',\n 'ellipse',\n 'enterkeyhint',\n 'exportparts',\n 'filter',\n 'font',\n 'g',\n 'glyph',\n 'glyphref',\n 'hkern',\n 'image',\n 'inputmode',\n 'line',\n 'lineargradient',\n 'marker',\n 'mask',\n 'metadata',\n 'mpath',\n 'part',\n 'path',\n 'pattern',\n 'polygon',\n 'polyline',\n 'radialgradient',\n 'rect',\n 'stop',\n 'style',\n 'switch',\n 'symbol',\n 'text',\n 'textpath',\n 'title',\n 'tref',\n 'tspan',\n 'view',\n 'vkern',\n] as const);\n\nexport const svgFilters = freeze([\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feDistantLight',\n 'feDropShadow',\n 'feFlood',\n 'feFuncA',\n 'feFuncB',\n 'feFuncG',\n 'feFuncR',\n 'feGaussianBlur',\n 'feImage',\n 'feMerge',\n 'feMergeNode',\n 'feMorphology',\n 'feOffset',\n 'fePointLight',\n 'feSpecularLighting',\n 'feSpotLight',\n 'feTile',\n 'feTurbulence',\n] as const);\n\n// List of SVG elements that are disallowed by default.\n// We still need to know them so that we can do namespace\n// checks properly in case one wants to add them to\n// allow-list.\nexport const svgDisallowed = freeze([\n 'animate',\n 'color-profile',\n 'cursor',\n 'discard',\n 'font-face',\n 'font-face-format',\n 'font-face-name',\n 'font-face-src',\n 'font-face-uri',\n 'foreignobject',\n 'hatch',\n 'hatchpath',\n 'mesh',\n 'meshgradient',\n 'meshpatch',\n 'meshrow',\n 'missing-glyph',\n 'script',\n 'set',\n 'solidcolor',\n 'unknown',\n 'use',\n] as const);\n\nexport const mathMl = freeze([\n 'math',\n 'menclose',\n 'merror',\n 'mfenced',\n 'mfrac',\n 'mglyph',\n 'mi',\n 'mlabeledtr',\n 'mmultiscripts',\n 'mn',\n 'mo',\n 'mover',\n 'mpadded',\n 'mphantom',\n 'mroot',\n 'mrow',\n 'ms',\n 'mspace',\n 'msqrt',\n 'mstyle',\n 'msub',\n 'msup',\n 'msubsup',\n 'mtable',\n 'mtd',\n 'mtext',\n 'mtr',\n 'munder',\n 'munderover',\n 'mprescripts',\n] as const);\n\n// Similarly to SVG, we want to know all MathML elements,\n// even those that we disallow by default.\nexport const mathMlDisallowed = freeze([\n 'maction',\n 'maligngroup',\n 'malignmark',\n 'mlongdiv',\n 'mscarries',\n 'mscarry',\n 'msgroup',\n 'mstack',\n 'msline',\n 'msrow',\n 'semantics',\n 'annotation',\n 'annotation-xml',\n 'mprescripts',\n 'none',\n] as const);\n\nexport const text = freeze(['#text'] as const);\n", "import { freeze } from './utils.js';\n\nexport const html = freeze([\n 'accept',\n 'action',\n 'align',\n 'alt',\n 'autocapitalize',\n 'autocomplete',\n 'autopictureinpicture',\n 'autoplay',\n 'background',\n 'bgcolor',\n 'border',\n 'capture',\n 'cellpadding',\n 'cellspacing',\n 'checked',\n 'cite',\n 'class',\n 'clear',\n 'color',\n 'cols',\n 'colspan',\n 'command',\n 'commandfor',\n 'controls',\n 'controlslist',\n 'coords',\n 'crossorigin',\n 'datetime',\n 'decoding',\n 'default',\n 'dir',\n 'disabled',\n 'disablepictureinpicture',\n 'disableremoteplayback',\n 'download',\n 'draggable',\n 'enctype',\n 'enterkeyhint',\n 'exportparts',\n 'face',\n 'for',\n 'headers',\n 'height',\n 'hidden',\n 'high',\n 'href',\n 'hreflang',\n 'id',\n 'inert',\n 'inputmode',\n 'integrity',\n 'ismap',\n 'kind',\n 'label',\n 'lang',\n 'list',\n 'loading',\n 'loop',\n 'low',\n 'max',\n 'maxlength',\n 'media',\n 'method',\n 'min',\n 'minlength',\n 'multiple',\n 'muted',\n 'name',\n 'nonce',\n 'noshade',\n 'novalidate',\n 'nowrap',\n 'open',\n 'optimum',\n 'part',\n 'pattern',\n 'placeholder',\n 'playsinline',\n 'popover',\n 'popovertarget',\n 'popovertargetaction',\n 'poster',\n 'preload',\n 'pubdate',\n 'radiogroup',\n 'readonly',\n 'rel',\n 'required',\n 'rev',\n 'reversed',\n 'role',\n 'rows',\n 'rowspan',\n 'spellcheck',\n 'scope',\n 'selected',\n 'shape',\n 'size',\n 'sizes',\n 'slot',\n 'span',\n 'srclang',\n 'start',\n 'src',\n 'srcset',\n 'step',\n 'style',\n 'summary',\n 'tabindex',\n 'title',\n 'translate',\n 'type',\n 'usemap',\n 'valign',\n 'value',\n 'width',\n 'wrap',\n 'xmlns',\n] as const);\n\nexport const svg = freeze([\n 'accent-height',\n 'accumulate',\n 'additive',\n 'alignment-baseline',\n 'amplitude',\n 'ascent',\n 'attributename',\n 'attributetype',\n 'azimuth',\n 'basefrequency',\n 'baseline-shift',\n 'begin',\n 'bias',\n 'by',\n 'class',\n 'clip',\n 'clippathunits',\n 'clip-path',\n 'clip-rule',\n 'color',\n 'color-interpolation',\n 'color-interpolation-filters',\n 'color-profile',\n 'color-rendering',\n 'cx',\n 'cy',\n 'd',\n 'dx',\n 'dy',\n 'diffuseconstant',\n 'direction',\n 'display',\n 'divisor',\n 'dur',\n 'edgemode',\n 'elevation',\n 'end',\n 'exponent',\n 'fill',\n 'fill-opacity',\n 'fill-rule',\n 'filter',\n 'filterunits',\n 'flood-color',\n 'flood-opacity',\n 'font-family',\n 'font-size',\n 'font-size-adjust',\n 'font-stretch',\n 'font-style',\n 'font-variant',\n 'font-weight',\n 'fx',\n 'fy',\n 'g1',\n 'g2',\n 'glyph-name',\n 'glyphref',\n 'gradientunits',\n 'gradienttransform',\n 'height',\n 'href',\n 'id',\n 'image-rendering',\n 'in',\n 'in2',\n 'intercept',\n 'k',\n 'k1',\n 'k2',\n 'k3',\n 'k4',\n 'kerning',\n 'keypoints',\n 'keysplines',\n 'keytimes',\n 'lang',\n 'lengthadjust',\n 'letter-spacing',\n 'kernelmatrix',\n 'kernelunitlength',\n 'lighting-color',\n 'local',\n 'marker-end',\n 'marker-mid',\n 'marker-start',\n 'markerheight',\n 'markerunits',\n 'markerwidth',\n 'maskcontentunits',\n 'maskunits',\n 'max',\n 'mask',\n 'mask-type',\n 'media',\n 'method',\n 'mode',\n 'min',\n 'name',\n 'numoctaves',\n 'offset',\n 'operator',\n 'opacity',\n 'order',\n 'orient',\n 'orientation',\n 'origin',\n 'overflow',\n 'paint-order',\n 'path',\n 'pathlength',\n 'patterncontentunits',\n 'patterntransform',\n 'patternunits',\n 'points',\n 'preservealpha',\n 'preserveaspectratio',\n 'primitiveunits',\n 'r',\n 'rx',\n 'ry',\n 'radius',\n 'refx',\n 'refy',\n 'repeatcount',\n 'repeatdur',\n 'restart',\n 'result',\n 'rotate',\n 'scale',\n 'seed',\n 'shape-rendering',\n 'slope',\n 'specularconstant',\n 'specularexponent',\n 'spreadmethod',\n 'startoffset',\n 'stddeviation',\n 'stitchtiles',\n 'stop-color',\n 'stop-opacity',\n 'stroke-dasharray',\n 'stroke-dashoffset',\n 'stroke-linecap',\n 'stroke-linejoin',\n 'stroke-miterlimit',\n 'stroke-opacity',\n 'stroke',\n 'stroke-width',\n 'style',\n 'surfacescale',\n 'systemlanguage',\n 'tabindex',\n 'tablevalues',\n 'targetx',\n 'targety',\n 'transform',\n 'transform-origin',\n 'text-anchor',\n 'text-decoration',\n 'text-rendering',\n 'textlength',\n 'type',\n 'u1',\n 'u2',\n 'unicode',\n 'values',\n 'viewbox',\n 'visibility',\n 'version',\n 'vert-adv-y',\n 'vert-origin-x',\n 'vert-origin-y',\n 'width',\n 'word-spacing',\n 'wrap',\n 'writing-mode',\n 'xchannelselector',\n 'ychannelselector',\n 'x',\n 'x1',\n 'x2',\n 'xmlns',\n 'y',\n 'y1',\n 'y2',\n 'z',\n 'zoomandpan',\n] as const);\n\nexport const mathMl = freeze([\n 'accent',\n 'accentunder',\n 'align',\n 'bevelled',\n 'close',\n 'columnalign',\n 'columnlines',\n 'columnspacing',\n 'columnspan',\n 'denomalign',\n 'depth',\n 'dir',\n 'display',\n 'displaystyle',\n 'encoding',\n 'fence',\n 'frame',\n 'height',\n 'href',\n 'id',\n 'largeop',\n 'length',\n 'linethickness',\n 'lquote',\n 'lspace',\n 'mathbackground',\n 'mathcolor',\n 'mathsize',\n 'mathvariant',\n 'maxsize',\n 'minsize',\n 'movablelimits',\n 'notation',\n 'numalign',\n 'open',\n 'rowalign',\n 'rowlines',\n 'rowspacing',\n 'rowspan',\n 'rspace',\n 'rquote',\n 'scriptlevel',\n 'scriptminsize',\n 'scriptsizemultiplier',\n 'selection',\n 'separator',\n 'separators',\n 'stretchy',\n 'subscriptshift',\n 'supscriptshift',\n 'symmetric',\n 'voffset',\n 'width',\n 'xmlns',\n]);\n\nexport const xml = freeze([\n 'xlink:href',\n 'xml:id',\n 'xlink:title',\n 'xml:space',\n 'xmlns:xlink',\n] as const);\n", "import { seal } from './utils.js';\n\nexport const MUSTACHE_EXPR = seal(/{{[\\w\\W]*|^[\\w\\W]*}}/g);\nexport const ERB_EXPR = seal(/<%[\\w\\W]*|^[\\w\\W]*%>/g);\nexport const TMPLIT_EXPR = seal(/\\${[\\w\\W]*/g);\nexport const DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]+$/); // eslint-disable-line no-useless-escape\nexport const ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nexport const IS_ALLOWED_URI = seal(\n /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nexport const IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nexport const ATTR_WHITESPACE = seal(\n /[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n);\nexport const DOCTYPE_NAME = seal(/^html$/i);\nexport const CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n", "/* eslint-disable @typescript-eslint/indent */\n\nimport type {\n TrustedHTML,\n TrustedTypesWindow,\n} from 'trusted-types/lib/index.js';\nimport type { Config, UseProfilesConfig } from './config';\nimport * as TAGS from './tags.js';\nimport * as ATTRS from './attrs.js';\nimport * as EXPRESSIONS from './regexp.js';\nimport {\n addToSet,\n clone,\n entries,\n freeze,\n arrayForEach,\n arrayIsArray,\n arrayLastIndexOf,\n arrayPop,\n arrayPush,\n arraySplice,\n stringMatch,\n stringReplace,\n stringToLowerCase,\n stringToString,\n stringIndexOf,\n stringTrim,\n regExpTest,\n isRegex,\n typeErrorCreate,\n lookupGetter,\n create,\n objectHasOwnProperty,\n stringifyValue,\n} from './utils.js';\n\nexport type { Config } from './config';\n\ndeclare const VERSION: string;\n\n// https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\nconst NODE_TYPE = {\n element: 1,\n attribute: 2,\n text: 3,\n cdataSection: 4,\n entityReference: 5, // Deprecated\n entityNode: 6, // Deprecated\n progressingInstruction: 7,\n comment: 8,\n document: 9,\n documentType: 10,\n documentFragment: 11,\n notation: 12, // Deprecated\n};\n\nconst getGlobal = function (): WindowLike {\n return typeof window === 'undefined' ? null : window;\n};\n\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param trustedTypes The policy factory.\n * @param purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n * @return The policy created (or null, if Trusted Types\n * are not supported or creating the policy failed).\n */\nconst _createTrustedTypesPolicy = function (\n trustedTypes: TrustedTypePolicyFactory,\n purifyHostElement: HTMLScriptElement\n) {\n if (\n typeof trustedTypes !== 'object' ||\n typeof trustedTypes.createPolicy !== 'function'\n ) {\n return null;\n }\n\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n let suffix = null;\n const ATTR_NAME = 'data-tt-policy-suffix';\n if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n suffix = purifyHostElement.getAttribute(ATTR_NAME);\n }\n\n const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML(html) {\n return html;\n },\n createScriptURL(scriptUrl) {\n return scriptUrl;\n },\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn(\n 'TrustedTypes policy ' + policyName + ' could not be created.'\n );\n return null;\n }\n};\n\nconst _createHooksMap = function (): HooksMap {\n return {\n afterSanitizeAttributes: [],\n afterSanitizeElements: [],\n afterSanitizeShadowDOM: [],\n beforeSanitizeAttributes: [],\n beforeSanitizeElements: [],\n beforeSanitizeShadowDOM: [],\n uponSanitizeAttribute: [],\n uponSanitizeElement: [],\n uponSanitizeShadowNode: [],\n };\n};\n\nfunction createDOMPurify(window: WindowLike = getGlobal()): DOMPurify {\n const DOMPurify: DOMPurify = (root: WindowLike) => createDOMPurify(root);\n\n DOMPurify.version = VERSION;\n\n DOMPurify.removed = [];\n\n if (\n !window ||\n !window.document ||\n window.document.nodeType !== NODE_TYPE.document ||\n !window.Element\n ) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n\n return DOMPurify;\n }\n\n let { document } = window;\n\n const originalDocument = document;\n const currentScript: HTMLScriptElement =\n originalDocument.currentScript as HTMLScriptElement;\n const {\n DocumentFragment,\n HTMLTemplateElement,\n Node,\n Element,\n NodeFilter,\n NamedNodeMap = window.NamedNodeMap || (window as any).MozNamedAttrMap,\n HTMLFormElement,\n DOMParser,\n trustedTypes,\n } = window;\n\n const ElementPrototype = Element.prototype;\n\n const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n const remove = lookupGetter(ElementPrototype, 'remove');\n const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n const getShadowRoot = lookupGetter(ElementPrototype, 'shadowRoot');\n const getAttributes = lookupGetter(ElementPrototype, 'attributes');\n const getNodeType =\n Node && Node.prototype ? lookupGetter(Node.prototype, 'nodeType') : null;\n const getNodeName =\n Node && Node.prototype ? lookupGetter(Node.prototype, 'nodeName') : null;\n\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n if (typeof HTMLTemplateElement === 'function') {\n const template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n\n let trustedTypesPolicy;\n let emptyHTML = '';\n\n const {\n implementation,\n createNodeIterator,\n createDocumentFragment,\n getElementsByTagName,\n } = document;\n const { importNode } = originalDocument;\n\n let hooks = _createHooksMap();\n\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported =\n typeof entries === 'function' &&\n typeof getParentNode === 'function' &&\n implementation &&\n implementation.createHTMLDocument !== undefined;\n\n const {\n MUSTACHE_EXPR,\n ERB_EXPR,\n TMPLIT_EXPR,\n DATA_ATTR,\n ARIA_ATTR,\n IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE,\n CUSTOM_ELEMENT,\n } = EXPRESSIONS;\n\n let { IS_ALLOWED_URI } = EXPRESSIONS;\n\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n\n /* allowed element names */\n let ALLOWED_TAGS = null;\n const DEFAULT_ALLOWED_TAGS = addToSet({}, [\n ...TAGS.html,\n ...TAGS.svg,\n ...TAGS.svgFilters,\n ...TAGS.mathMl,\n ...TAGS.text,\n ]);\n\n /* Allowed attribute names */\n let ALLOWED_ATTR = null;\n const DEFAULT_ALLOWED_ATTR = addToSet({}, [\n ...ATTRS.html,\n ...ATTRS.svg,\n ...ATTRS.mathMl,\n ...ATTRS.xml,\n ]);\n\n /*\n * Configure how DOMPurify should handle custom elements and their attributes as well as customized built-in elements.\n * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n */\n let CUSTOM_ELEMENT_HANDLING = Object.seal(\n create(null, {\n tagNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null,\n },\n attributeNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null,\n },\n allowCustomizedBuiltInElements: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: false,\n },\n })\n );\n\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n let FORBID_TAGS = null;\n\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n let FORBID_ATTR = null;\n\n /* Config object to store ADD_TAGS/ADD_ATTR functions (when used as functions) */\n const EXTRA_ELEMENT_HANDLING = Object.seal(\n create(null, {\n tagCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null,\n },\n attributeCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null,\n },\n })\n );\n\n /* Decide if ARIA attributes are okay */\n let ALLOW_ARIA_ATTR = true;\n\n /* Decide if custom data attributes are okay */\n let ALLOW_DATA_ATTR = true;\n\n /* Decide if unknown protocols are okay */\n let ALLOW_UNKNOWN_PROTOCOLS = false;\n\n /* Decide if self-closing tags in attributes are allowed.\n * Usually removed due to a mXSS issue in jQuery 3.0 */\n let ALLOW_SELF_CLOSE_IN_ATTR = true;\n\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n let SAFE_FOR_TEMPLATES = false;\n\n /* Output should be safe even for XML used within HTML and alike.\n * This means, DOMPurify removes comments when containing risky content.\n */\n let SAFE_FOR_XML = true;\n\n /* Decide if document with <html>... should be returned */\n let WHOLE_DOCUMENT = false;\n\n /* Track whether config is already set on this instance of DOMPurify. */\n let SET_CONFIG = false;\n\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n let FORCE_BODY = false;\n\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n let RETURN_DOM = false;\n\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n let RETURN_DOM_FRAGMENT = false;\n\n /* Try to return a Trusted Type object instead of a string, return a string in\n * case Trusted Types are not supported */\n let RETURN_TRUSTED_TYPE = false;\n\n /* Output should be free from DOM clobbering attacks?\n * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n */\n let SANITIZE_DOM = true;\n\n /* Achieve full DOM Clobbering protection by isolating the namespace of named\n * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n *\n * HTML/DOM spec rules that enable DOM Clobbering:\n * - Named Access on Window (\u00A77.3.3)\n * - DOM Tree Accessors (\u00A73.1.5)\n * - Form Element Parent-Child Relations (\u00A74.10.3)\n * - Iframe srcdoc / Nested WindowProxies (\u00A74.8.5)\n * - HTMLCollection (\u00A74.2.10.2)\n *\n * Namespace isolation is implemented by prefixing `id` and `name` attributes\n * with a constant string, i.e., `user-content-`\n */\n let SANITIZE_NAMED_PROPS = false;\n const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n\n /* Keep element content when removing element? */\n let KEEP_CONTENT = true;\n\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n let IN_PLACE = false;\n\n /* Allow usage of profiles like html, svg and mathMl */\n let USE_PROFILES: UseProfilesConfig | false = {};\n\n /* Tags to ignore content of when KEEP_CONTENT is true */\n let FORBID_CONTENTS = null;\n const DEFAULT_FORBID_CONTENTS = addToSet({}, [\n 'annotation-xml',\n 'audio',\n 'colgroup',\n 'desc',\n 'foreignobject',\n 'head',\n 'iframe',\n 'math',\n 'mi',\n 'mn',\n 'mo',\n 'ms',\n 'mtext',\n 'noembed',\n 'noframes',\n 'noscript',\n 'plaintext',\n 'script',\n 'style',\n 'svg',\n 'template',\n 'thead',\n 'title',\n 'video',\n 'xmp',\n ]);\n\n /* Tags that are safe for data: URIs */\n let DATA_URI_TAGS = null;\n const DEFAULT_DATA_URI_TAGS = addToSet({}, [\n 'audio',\n 'video',\n 'img',\n 'source',\n 'image',\n 'track',\n ]);\n\n /* Attributes safe for values like \"javascript:\" */\n let URI_SAFE_ATTRIBUTES = null;\n const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, [\n 'alt',\n 'class',\n 'for',\n 'id',\n 'label',\n 'name',\n 'pattern',\n 'placeholder',\n 'role',\n 'summary',\n 'title',\n 'value',\n 'style',\n 'xmlns',\n ]);\n\n const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n /* Document namespace */\n let NAMESPACE = HTML_NAMESPACE;\n let IS_EMPTY_INPUT = false;\n\n /* Allowed XHTML+XML namespaces */\n let ALLOWED_NAMESPACES = null;\n const DEFAULT_ALLOWED_NAMESPACES = addToSet(\n {},\n [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE],\n stringToString\n );\n\n let MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, [\n 'mi',\n 'mo',\n 'mn',\n 'ms',\n 'mtext',\n ]);\n\n let HTML_INTEGRATION_POINTS = addToSet({}, ['annotation-xml']);\n\n // Certain elements are allowed in both SVG and HTML\n // namespace. We need to specify them explicitly\n // so that they don't get erroneously deleted from\n // HTML namespace.\n const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, [\n 'title',\n 'style',\n 'font',\n 'a',\n 'script',\n ]);\n\n /* Parsing of strict XHTML documents */\n let PARSER_MEDIA_TYPE: null | DOMParserSupportedType = null;\n const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n let transformCaseFunc: null | Parameters<typeof addToSet>[2] = null;\n\n /* Keep a reference to config to pass to hooks */\n let CONFIG: Config | null = null;\n\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n\n const formElement = document.createElement('form');\n\n const isRegexOrFunction = function (\n testValue: unknown\n ): testValue is Function | RegExp {\n return testValue instanceof RegExp || testValue instanceof Function;\n };\n\n /**\n * _parseConfig\n *\n * @param cfg optional config literal\n */\n // eslint-disable-next-line complexity\n const _parseConfig = function (cfg: Config = {}): void {\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n\n /* Shield configuration object from tampering */\n if (!cfg || typeof cfg !== 'object') {\n cfg = {};\n }\n\n /* Shield configuration object from prototype pollution */\n cfg = clone(cfg);\n\n PARSER_MEDIA_TYPE =\n // eslint-disable-next-line unicorn/prefer-includes\n SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1\n ? DEFAULT_PARSER_MEDIA_TYPE\n : cfg.PARSER_MEDIA_TYPE;\n\n // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n transformCaseFunc =\n PARSER_MEDIA_TYPE === 'application/xhtml+xml'\n ? stringToString\n : stringToLowerCase;\n\n /* Set configuration parameters */\n ALLOWED_TAGS =\n objectHasOwnProperty(cfg, 'ALLOWED_TAGS') &&\n arrayIsArray(cfg.ALLOWED_TAGS)\n ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc)\n : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR =\n objectHasOwnProperty(cfg, 'ALLOWED_ATTR') &&\n arrayIsArray(cfg.ALLOWED_ATTR)\n ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc)\n : DEFAULT_ALLOWED_ATTR;\n ALLOWED_NAMESPACES =\n objectHasOwnProperty(cfg, 'ALLOWED_NAMESPACES') &&\n arrayIsArray(cfg.ALLOWED_NAMESPACES)\n ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString)\n : DEFAULT_ALLOWED_NAMESPACES;\n URI_SAFE_ATTRIBUTES =\n objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR') &&\n arrayIsArray(cfg.ADD_URI_SAFE_ATTR)\n ? addToSet(\n clone(DEFAULT_URI_SAFE_ATTRIBUTES),\n cfg.ADD_URI_SAFE_ATTR,\n transformCaseFunc\n )\n : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS =\n objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS') &&\n arrayIsArray(cfg.ADD_DATA_URI_TAGS)\n ? addToSet(\n clone(DEFAULT_DATA_URI_TAGS),\n cfg.ADD_DATA_URI_TAGS,\n transformCaseFunc\n )\n : DEFAULT_DATA_URI_TAGS;\n FORBID_CONTENTS =\n objectHasOwnProperty(cfg, 'FORBID_CONTENTS') &&\n arrayIsArray(cfg.FORBID_CONTENTS)\n ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc)\n : DEFAULT_FORBID_CONTENTS;\n FORBID_TAGS =\n objectHasOwnProperty(cfg, 'FORBID_TAGS') && arrayIsArray(cfg.FORBID_TAGS)\n ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc)\n : clone({});\n FORBID_ATTR =\n objectHasOwnProperty(cfg, 'FORBID_ATTR') && arrayIsArray(cfg.FORBID_ATTR)\n ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc)\n : clone({});\n USE_PROFILES = objectHasOwnProperty(cfg, 'USE_PROFILES')\n ? cfg.USE_PROFILES && typeof cfg.USE_PROFILES === 'object'\n ? clone(cfg.USE_PROFILES)\n : cfg.USE_PROFILES\n : false;\n\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n IS_ALLOWED_URI = isRegex(cfg.ALLOWED_URI_REGEXP)\n ? cfg.ALLOWED_URI_REGEXP\n : EXPRESSIONS.IS_ALLOWED_URI; // Default regexp\n\n NAMESPACE =\n typeof cfg.NAMESPACE === 'string' ? cfg.NAMESPACE : HTML_NAMESPACE; // Default HTML namespace\n\n MATHML_TEXT_INTEGRATION_POINTS =\n objectHasOwnProperty(cfg, 'MATHML_TEXT_INTEGRATION_POINTS') &&\n cfg.MATHML_TEXT_INTEGRATION_POINTS &&\n typeof cfg.MATHML_TEXT_INTEGRATION_POINTS === 'object'\n ? clone(cfg.MATHML_TEXT_INTEGRATION_POINTS)\n : addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']); // Default built-in map\n\n HTML_INTEGRATION_POINTS =\n objectHasOwnProperty(cfg, 'HTML_INTEGRATION_POINTS') &&\n cfg.HTML_INTEGRATION_POINTS &&\n typeof cfg.HTML_INTEGRATION_POINTS === 'object'\n ? clone(cfg.HTML_INTEGRATION_POINTS)\n : addToSet({}, ['annotation-xml']); // Default built-in map\n\n const customElementHandling =\n objectHasOwnProperty(cfg, 'CUSTOM_ELEMENT_HANDLING') &&\n cfg.CUSTOM_ELEMENT_HANDLING &&\n typeof cfg.CUSTOM_ELEMENT_HANDLING === 'object'\n ? clone(cfg.CUSTOM_ELEMENT_HANDLING)\n : create(null);\n\n CUSTOM_ELEMENT_HANDLING = create(null);\n\n if (\n objectHasOwnProperty(customElementHandling, 'tagNameCheck') &&\n isRegexOrFunction(customElementHandling.tagNameCheck)\n ) {\n CUSTOM_ELEMENT_HANDLING.tagNameCheck = customElementHandling.tagNameCheck; // Default undefined\n }\n\n if (\n objectHasOwnProperty(customElementHandling, 'attributeNameCheck') &&\n isRegexOrFunction(customElementHandling.attributeNameCheck)\n ) {\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck =\n customElementHandling.attributeNameCheck; // Default undefined\n }\n\n if (\n objectHasOwnProperty(\n customElementHandling,\n 'allowCustomizedBuiltInElements'\n ) &&\n typeof customElementHandling.allowCustomizedBuiltInElements === 'boolean'\n ) {\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements =\n customElementHandling.allowCustomizedBuiltInElements; // Default undefined\n }\n\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n\n /* Parse profile info */\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, TAGS.text);\n ALLOWED_ATTR = create(null);\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, TAGS.html);\n addToSet(ALLOWED_ATTR, ATTRS.html);\n }\n\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, TAGS.svg);\n addToSet(ALLOWED_ATTR, ATTRS.svg);\n addToSet(ALLOWED_ATTR, ATTRS.xml);\n }\n\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, TAGS.svgFilters);\n addToSet(ALLOWED_ATTR, ATTRS.svg);\n addToSet(ALLOWED_ATTR, ATTRS.xml);\n }\n\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, TAGS.mathMl);\n addToSet(ALLOWED_ATTR, ATTRS.mathMl);\n addToSet(ALLOWED_ATTR, ATTRS.xml);\n }\n }\n\n /* Always reset function-based ADD_TAGS / ADD_ATTR checks to prevent\n * leaking across calls when switching from function to array config */\n EXTRA_ELEMENT_HANDLING.tagCheck = null;\n EXTRA_ELEMENT_HANDLING.attributeCheck = null;\n\n /* Merge configuration parameters */\n if (objectHasOwnProperty(cfg, 'ADD_TAGS')) {\n if (typeof cfg.ADD_TAGS === 'function') {\n EXTRA_ELEMENT_HANDLING.tagCheck = cfg.ADD_TAGS;\n } else if (arrayIsArray(cfg.ADD_TAGS)) {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n }\n }\n\n if (objectHasOwnProperty(cfg, 'ADD_ATTR')) {\n if (typeof cfg.ADD_ATTR === 'function') {\n EXTRA_ELEMENT_HANDLING.attributeCheck = cfg.ADD_ATTR;\n } else if (arrayIsArray(cfg.ADD_ATTR)) {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n }\n }\n\n if (\n objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR') &&\n arrayIsArray(cfg.ADD_URI_SAFE_ATTR)\n ) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n }\n\n if (\n objectHasOwnProperty(cfg, 'FORBID_CONTENTS') &&\n arrayIsArray(cfg.FORBID_CONTENTS)\n ) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n\n addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n }\n\n if (\n objectHasOwnProperty(cfg, 'ADD_FORBID_CONTENTS') &&\n arrayIsArray(cfg.ADD_FORBID_CONTENTS)\n ) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n\n addToSet(FORBID_CONTENTS, cfg.ADD_FORBID_CONTENTS, transformCaseFunc);\n }\n\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n }\n\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n delete FORBID_TAGS.tbody;\n }\n\n if (cfg.TRUSTED_TYPES_POLICY) {\n if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {\n throw typeErrorCreate(\n 'TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.'\n );\n }\n\n if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {\n throw typeErrorCreate(\n 'TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.'\n );\n }\n\n // Overwrite existing TrustedTypes policy.\n trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n\n // Sign local variables required by `sanitize`.\n emptyHTML = trustedTypesPolicy.createHTML('');\n } else {\n // Uninitialized policy, attempt to initialize the internal dompurify policy.\n if (trustedTypesPolicy === undefined) {\n trustedTypesPolicy = _createTrustedTypesPolicy(\n trustedTypes,\n currentScript\n );\n }\n\n // If creating the internal policy succeeded sign internal variables.\n if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {\n emptyHTML = trustedTypesPolicy.createHTML('');\n }\n }\n\n /*\n * Mirror the clone-before-mutate pattern already applied above for\n * cfg.ADD_TAGS / cfg.ADD_ATTR: if any uponSanitize* hook is\n * registered AND the set still points at the default constant,\n * clone it. The hook then mutates the clone (in-call widening\n * still works exactly as documented) and the next default-cfg\n * call rebinds to the untouched original via the reassignment at\n * the top of this function.\n */\n if (\n (hooks.uponSanitizeElement.length > 0 ||\n hooks.uponSanitizeAttribute.length > 0) &&\n ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS\n ) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n\n if (\n hooks.uponSanitizeAttribute.length > 0 &&\n ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR\n ) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (freeze) {\n freeze(cfg);\n }\n\n CONFIG = cfg;\n };\n\n /* Keep track of all possible SVG and MathML tags\n * so that we can perform the namespace checks\n * correctly. */\n const ALL_SVG_TAGS = addToSet({}, [\n ...TAGS.svg,\n ...TAGS.svgFilters,\n ...TAGS.svgDisallowed,\n ]);\n const ALL_MATHML_TAGS = addToSet({}, [\n ...TAGS.mathMl,\n ...TAGS.mathMlDisallowed,\n ]);\n\n /**\n * @param element a DOM element whose namespace is being checked\n * @returns Return false if the element has a\n * namespace that a spec-compliant parser would never\n * return. Return true otherwise.\n */\n const _checkValidNamespace = function (element: Element): boolean {\n let parent = getParentNode(element);\n\n // In JSDOM, if we're inside shadow DOM, then parentNode\n // can be null. We just simulate parent in this case.\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: NAMESPACE,\n tagName: 'template',\n };\n }\n\n const tagName = stringToLowerCase(element.tagName);\n const parentTagName = stringToLowerCase(parent.tagName);\n\n if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n return false;\n }\n\n if (element.namespaceURI === SVG_NAMESPACE) {\n // The only way to switch from HTML namespace to SVG\n // is via <svg>. If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'svg';\n }\n\n // The only way to switch from MathML to SVG is via`\n // svg if parent is either <annotation-xml> or MathML\n // text integration points.\n if (parent.namespaceURI === MATHML_NAMESPACE) {\n return (\n tagName === 'svg' &&\n (parentTagName === 'annotation-xml' ||\n MATHML_TEXT_INTEGRATION_POINTS[parentTagName])\n );\n }\n\n // We only allow elements that are defined in SVG\n // spec. All others are disallowed in SVG namespace.\n return Boolean(ALL_SVG_TAGS[tagName]);\n }\n\n if (element.namespaceURI === MATHML_NAMESPACE) {\n // The only way to switch from HTML namespace to MathML\n // is via <math>. If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'math';\n }\n\n // The only way to switch from SVG to MathML is via\n // <math> and HTML integration points\n if (parent.namespaceURI === SVG_NAMESPACE) {\n return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n }\n\n // We only allow elements that are defined in MathML\n // spec. All others are disallowed in MathML namespace.\n return Boolean(ALL_MATHML_TAGS[tagName]);\n }\n\n if (element.namespaceURI === HTML_NAMESPACE) {\n // The only way to switch from SVG to HTML is via\n // HTML integration points, and from MathML to HTML\n // is via MathML text integration points\n if (\n parent.namespaceURI === SVG_NAMESPACE &&\n !HTML_INTEGRATION_POINTS[parentTagName]\n ) {\n return false;\n }\n\n if (\n parent.namespaceURI === MATHML_NAMESPACE &&\n !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]\n ) {\n return false;\n }\n\n // We disallow tags that are specific for MathML\n // or SVG and should never appear in HTML namespace\n return (\n !ALL_MATHML_TAGS[tagName] &&\n (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName])\n );\n }\n\n // For XHTML and XML documents that support custom namespaces\n if (\n PARSER_MEDIA_TYPE === 'application/xhtml+xml' &&\n ALLOWED_NAMESPACES[element.namespaceURI]\n ) {\n return true;\n }\n\n // The code should never reach this place (this means\n // that the element somehow got namespace that is not\n // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n // Return false just in case.\n return false;\n };\n\n /**\n * _forceRemove\n *\n * @param node a DOM node\n */\n const _forceRemove = function (node: Node): void {\n arrayPush(DOMPurify.removed, { element: node });\n\n try {\n // eslint-disable-next-line unicorn/prefer-dom-node-remove\n getParentNode(node).removeChild(node);\n } catch (_) {\n remove(node);\n }\n };\n\n /**\n * _removeAttribute\n *\n * @param name an Attribute name\n * @param element a DOM node\n */\n const _removeAttribute = function (name: string, element: Element): void {\n try {\n arrayPush(DOMPurify.removed, {\n attribute: element.getAttributeNode(name),\n from: element,\n });\n } catch (_) {\n arrayPush(DOMPurify.removed, {\n attribute: null,\n from: element,\n });\n }\n\n element.removeAttribute(name);\n\n // We void attribute values for unremovable \"is\" attributes\n if (name === 'is') {\n if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n try {\n _forceRemove(element);\n } catch (_) {}\n } else {\n try {\n element.setAttribute(name, '');\n } catch (_) {}\n }\n }\n };\n\n /**\n * _initDocument\n *\n * @param dirty - a string of dirty markup\n * @return a DOM, filled with the dirty markup\n */\n const _initDocument = function (dirty: string): Document {\n /* Create a HTML document */\n let doc = null;\n let leadingWhitespace = null;\n\n if (FORCE_BODY) {\n dirty = '<remove></remove>' + dirty;\n } else {\n /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n leadingWhitespace = matches && matches[0];\n }\n\n if (\n PARSER_MEDIA_TYPE === 'application/xhtml+xml' &&\n NAMESPACE === HTML_NAMESPACE\n ) {\n // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n dirty =\n '<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>' +\n dirty +\n '</body></html>';\n }\n\n const dirtyPayload = trustedTypesPolicy\n ? trustedTypesPolicy.createHTML(dirty)\n : dirty;\n /*\n * Use the DOMParser API by default, fallback later if needs be\n * DOMParser not work for svg when has multiple root element.\n */\n if (NAMESPACE === HTML_NAMESPACE) {\n try {\n doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n } catch (_) {}\n }\n\n /* Use createHTMLDocument in case DOMParser is not available */\n if (!doc || !doc.documentElement) {\n doc = implementation.createDocument(NAMESPACE, 'template', null);\n try {\n doc.documentElement.innerHTML = IS_EMPTY_INPUT\n ? emptyHTML\n : dirtyPayload;\n } catch (_) {\n // Syntax error if dirtyPayload is invalid xml\n }\n }\n\n const body = doc.body || doc.documentElement;\n\n if (dirty && leadingWhitespace) {\n body.insertBefore(\n document.createTextNode(leadingWhitespace),\n body.childNodes[0] || null\n );\n }\n\n /* Work on whole document or just its body */\n if (NAMESPACE === HTML_NAMESPACE) {\n return getElementsByTagName.call(\n doc,\n WHOLE_DOCUMENT ? 'html' : 'body'\n )[0];\n }\n\n return WHOLE_DOCUMENT ? doc.documentElement : body;\n };\n\n /**\n * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n *\n * @param root The root element or node to start traversing on.\n * @return The created NodeIterator\n */\n const _createNodeIterator = function (root: Node): NodeIterator {\n return createNodeIterator.call(\n root.ownerDocument || root,\n root,\n // eslint-disable-next-line no-bitwise\n NodeFilter.SHOW_ELEMENT |\n NodeFilter.SHOW_COMMENT |\n NodeFilter.SHOW_TEXT |\n NodeFilter.SHOW_PROCESSING_INSTRUCTION |\n NodeFilter.SHOW_CDATA_SECTION,\n null\n );\n };\n\n /**\n * Strip template-engine expressions ({{...}}, ${...}, <%...%>) from the\n * character data of an element subtree. Used as the final safety net for\n * SAFE_FOR_TEMPLATES on every DOM-returning code path so that expressions\n * which only form after text-node normalization (e.g. fragments split across\n * stripped elements) cannot survive into a template-evaluating framework.\n *\n * Walks text/comment/CDATA/processing-instruction nodes and mutates `.data`\n * in place rather than round-tripping through innerHTML. This preserves\n * descendant node references (important for IN_PLACE callers), avoids a\n * serialize/reparse cycle, and reads literal character data \u2014 which means\n * `<%...%>` in text content matches the ERB regex against its real bytes\n * instead of the HTML-entity-escaped form innerHTML would produce.\n *\n * Attribute values are not visited here; SAFE_FOR_TEMPLATES handling for\n * attributes is performed during the per-node `_sanitizeAttributes` pass.\n *\n * @param node The root element whose character data should be scrubbed.\n */\n const _scrubTemplateExpressions = function (node: Element): void {\n node.normalize();\n const walker = createNodeIterator.call(\n node.ownerDocument || node,\n node,\n // eslint-disable-next-line no-bitwise\n NodeFilter.SHOW_TEXT |\n NodeFilter.SHOW_COMMENT |\n NodeFilter.SHOW_CDATA_SECTION |\n NodeFilter.SHOW_PROCESSING_INSTRUCTION,\n null\n );\n\n let currentNode = walker.nextNode() as CharacterData | null;\n while (currentNode) {\n let data = currentNode.data;\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], (expr: RegExp) => {\n data = stringReplace(data, expr, ' ');\n });\n currentNode.data = data;\n currentNode = walker.nextNode() as CharacterData | null;\n }\n };\n\n /**\n * _isClobbered\n *\n * Detect DOM-clobbering on HTMLFormElement nodes. Form is the only HTML\n * interface with [LegacyOverrideBuiltIns]; a descendant element with a\n * `name` attribute matching a prototype property shadows that property\n * on direct reads. We use this check at the IN_PLACE entry-point and\n * during attribute sanitization to refuse clobbered forms.\n *\n * @param element element to check for clobbering attacks\n * @return true if clobbered, false if safe\n */\n const _isClobbered = function (element: Element): boolean {\n // Realm-independent tag-name probe. If we can't determine the tag\n // name at all, we can't reason about clobbering \u2014 return false\n // (the caller's other defences still apply).\n const realTagName = getNodeName ? getNodeName(element) : null;\n if (typeof realTagName !== 'string') {\n return false;\n }\n\n if (transformCaseFunc(realTagName) !== 'form') {\n return false;\n }\n\n return (\n typeof element.nodeName !== 'string' ||\n typeof element.textContent !== 'string' ||\n typeof element.removeChild !== 'function' ||\n // Realm-safe NamedNodeMap detection: equality against the cached\n // prototype getter. Clobbered .attributes (e.g. <input name=\"attributes\">)\n // makes the direct read diverge from the cached read; a clean form\n // (same-realm OR foreign-realm) has both reads pointing at the same\n // canonical NamedNodeMap.\n element.attributes !== getAttributes(element) ||\n typeof element.removeAttribute !== 'function' ||\n typeof element.setAttribute !== 'function' ||\n typeof element.namespaceURI !== 'string' ||\n typeof element.insertBefore !== 'function' ||\n typeof element.hasChildNodes !== 'function' ||\n // NodeType clobbering probe. Cached Node.prototype.nodeType getter\n // returns the integer 1 for any Element regardless of realm; direct\n // read on a clobbered form (e.g. <input name=\"nodeType\">) returns\n // the named child element. Cheap addition \u2014 nodeType is read from\n // an internal slot, no serialization cost \u2014 and removes a residual\n // clobbering surface used by several mXSS / PI / comment branches\n // in _sanitizeElements that compare currentNode.nodeType directly.\n element.nodeType !== getNodeType(element) ||\n // HTMLFormElement has [LegacyOverrideBuiltIns]: a descendant named\n // \"childNodes\" shadows the prototype getter. Direct reads of\n // form.childNodes from a clobbered form return the named child\n // instead of the real NodeList, so any walk that reads it directly\n // skips the form's real children. Compare the direct read to the\n // cached Node.prototype getter \u2014 when the form's named-property\n // getter intercepts the read, the two values differ and we flag\n // the form. This catches every clobbering child type (input,\n // select, etc.) regardless of whether the named child happens to\n // carry a numeric .length, which a typeof-based probe would miss\n // (e.g. HTMLSelectElement.length is a defined unsigned-long).\n element.childNodes !== getChildNodes(element)\n );\n };\n\n /**\n * Checks whether the given value is a DocumentFragment from any realm.\n *\n * The realm-independent replacement reads `nodeType` through the cached\n * Node.prototype getter and compares to the DOCUMENT_FRAGMENT_NODE\n * constant (11). nodeType is a numeric value resolved from the node's\n * internal slot, identical across realms for the same kind of node.\n *\n * @param value object to check\n * @return true if value is a DocumentFragment-shaped node from any realm\n */\n const _isDocumentFragment = function (value: unknown): boolean {\n if (!getNodeType || typeof value !== 'object' || value === null) {\n return false;\n }\n\n try {\n return getNodeType(value as Node) === NODE_TYPE.documentFragment;\n } catch (_) {\n return false;\n }\n };\n\n /**\n * Checks whether the given object is a DOM node, including nodes that\n * originate from a different window/realm (e.g. an iframe's\n * contentDocument). The previous `value instanceof Node` check was\n * realm-bound: nodes from a different window failed it, causing\n * sanitize() to silently stringify them and reset IN_PLACE to false,\n * returning the original node unsanitized. See GHSA-4w3q-35jp-p934.\n *\n * @param value object to check whether it's a DOM node\n * @return true if value is a DOM node from any realm\n */\n const _isNode = function (value: unknown): value is Node {\n if (!getNodeType || typeof value !== 'object' || value === null) {\n return false;\n }\n\n try {\n return typeof getNodeType(value) === 'number';\n } catch (_) {\n return false;\n }\n };\n\n function _executeHooks<T extends HookFunction>(\n hooks: HookFunction[],\n currentNode: Parameters<T>[0],\n data: Parameters<T>[1]\n ): void {\n arrayForEach(hooks, (hook: T) => {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n }\n\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n * @param currentNode to check for permission to exist\n * @return true if node was killed, false if left alive\n */\n const _sanitizeElements = function (currentNode: any): boolean {\n let content = null;\n\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeElements, currentNode, null);\n\n /* Check if element is clobbered or can clobber */\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Now let's check the element's type and name */\n const tagName = transformCaseFunc(currentNode.nodeName);\n\n /* Execute a hook if present */\n _executeHooks(hooks.uponSanitizeElement, currentNode, {\n tagName,\n allowedTags: ALLOWED_TAGS,\n });\n\n /* Detect mXSS attempts abusing namespace confusion */\n if (\n SAFE_FOR_XML &&\n currentNode.hasChildNodes() &&\n !_isNode(currentNode.firstElementChild) &&\n regExpTest(/<[/\\w!]/g, currentNode.innerHTML) &&\n regExpTest(/<[/\\w!]/g, currentNode.textContent)\n ) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Remove risky CSS construction leading to mXSS */\n if (\n SAFE_FOR_XML &&\n currentNode.namespaceURI === HTML_NAMESPACE &&\n tagName === 'style' &&\n _isNode(currentNode.firstElementChild)\n ) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Remove any occurrence of processing instructions */\n if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Remove any kind of possibly harmful comments */\n if (\n SAFE_FOR_XML &&\n currentNode.nodeType === NODE_TYPE.comment &&\n regExpTest(/<[/\\w]/g, currentNode.data)\n ) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Remove element if anything forbids its presence */\n if (\n FORBID_TAGS[tagName] ||\n (!(\n EXTRA_ELEMENT_HANDLING.tagCheck instanceof Function &&\n EXTRA_ELEMENT_HANDLING.tagCheck(tagName)\n ) &&\n !ALLOWED_TAGS[tagName])\n ) {\n /* Check if we have a custom element to handle */\n if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {\n if (\n CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp &&\n regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)\n ) {\n return false;\n }\n\n if (\n CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function &&\n CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)\n ) {\n return false;\n }\n }\n\n /* Keep content except for bad-listed elements.\n Use the cached prototype getters exclusively \u2014 the previous code\n had `|| currentNode.parentNode` / `|| currentNode.childNodes`\n fallbacks, but the cached getters always return the canonical\n value (or null for a real parent-less node), so the fallback\n path was dead in safe cases and a clobbering surface in unsafe\n ones. Falsy cached results stay falsy; the `if (childNodes &&\n parentNode)` check already gates correctly. */\n if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n const parentNode = getParentNode(currentNode);\n const childNodes = getChildNodes(currentNode);\n\n if (childNodes && parentNode) {\n const childCount = childNodes.length;\n\n for (let i = childCount - 1; i >= 0; --i) {\n const childClone = cloneNode(childNodes[i], true);\n parentNode.insertBefore(childClone, getNextSibling(currentNode));\n }\n }\n }\n\n _forceRemove(currentNode);\n return true;\n }\n\n /* Check whether element has a valid namespace.\n Realm-safe check (GHSA-hpcv-96wg-7vj8): use the cached Node.prototype\n nodeType getter rather than `instanceof Element`, which is realm-\n bound and short-circuits to false for any node minted in a different\n realm \u2014 letting a foreign-realm element with a forbidden namespace\n slip past the namespace check entirely. */\n const nt = getNodeType ? getNodeType(currentNode) : currentNode.nodeType;\n if (nt === NODE_TYPE.element && !_checkValidNamespace(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Make sure that older browsers don't get fallback-tag mXSS */\n if (\n (tagName === 'noscript' ||\n tagName === 'noembed' ||\n tagName === 'noframes') &&\n regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)\n ) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Sanitize element content to be template-safe */\n if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {\n /* Get the element's text content */\n content = currentNode.textContent;\n\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], (expr: RegExp) => {\n content = stringReplace(content, expr, ' ');\n });\n\n if (currentNode.textContent !== content) {\n arrayPush(DOMPurify.removed, { element: currentNode.cloneNode() });\n currentNode.textContent = content;\n }\n }\n\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeElements, currentNode, null);\n\n return false;\n };\n\n /**\n * _isValidAttribute\n *\n * @param lcTag Lowercase tag name of containing element.\n * @param lcName Lowercase attribute name.\n * @param value Attribute value.\n * @return Returns true if `value` is valid, otherwise false.\n */\n // eslint-disable-next-line complexity\n const _isValidAttribute = function (\n lcTag: string,\n lcName: string,\n value: string\n ): boolean {\n /* FORBID_ATTR must always win, even if ADD_ATTR predicate would allow it */\n if (FORBID_ATTR[lcName]) {\n return false;\n }\n\n /* Make sure attribute cannot clobber */\n if (\n SANITIZE_DOM &&\n (lcName === 'id' || lcName === 'name') &&\n (value in document || value in formElement)\n ) {\n return false;\n }\n\n const nameIsPermitted =\n ALLOWED_ATTR[lcName] ||\n (EXTRA_ELEMENT_HANDLING.attributeCheck instanceof Function &&\n EXTRA_ELEMENT_HANDLING.attributeCheck(lcName, lcTag));\n\n /* Allow valid data-* attributes: At least one character after \"-\"\n (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n We don't need to check the value; it's always URI safe. */\n if (\n ALLOW_DATA_ATTR &&\n !FORBID_ATTR[lcName] &&\n regExpTest(DATA_ATTR, lcName)\n ) {\n // This attribute is safe\n } else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) {\n // This attribute is safe\n /* Otherwise, check the name is permitted */\n } else if (!nameIsPermitted || FORBID_ATTR[lcName]) {\n if (\n // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n (_isBasicCustomElement(lcTag) &&\n ((CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp &&\n regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag)) ||\n (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function &&\n CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag))) &&\n ((CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp &&\n regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName)) ||\n (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function &&\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName, lcTag)))) ||\n // Alternative, second condition checks if it's an `is`-attribute, AND\n // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n (lcName === 'is' &&\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements &&\n ((CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp &&\n regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value)) ||\n (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function &&\n CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))))\n ) {\n // If user has supplied a regexp or function in CUSTOM_ELEMENT_HANDLING.tagNameCheck, we need to also allow derived custom elements using the same tagName test.\n // Additionally, we need to allow attributes passing the CUSTOM_ELEMENT_HANDLING.attributeNameCheck user has configured, as custom elements can define these at their own discretion.\n } else {\n return false;\n }\n /* Check value is safe. First, is attr inert? If so, is safe */\n } else if (URI_SAFE_ATTRIBUTES[lcName]) {\n // This attribute is safe\n /* Check no script, data or unknown possibly unsafe URI\n unless we know URI values are safe for that attribute */\n } else if (\n regExpTest(IS_ALLOWED_URI, stringReplace(value, ATTR_WHITESPACE, ''))\n ) {\n // This attribute is safe\n /* Keep image data URIs alive if src/xlink:href is allowed */\n /* Further prevent gadget XSS for dynamically built script tags */\n } else if (\n (lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') &&\n lcTag !== 'script' &&\n stringIndexOf(value, 'data:') === 0 &&\n DATA_URI_TAGS[lcTag]\n ) {\n // This attribute is safe\n /* Allow unknown protocols: This provides support for links that\n are handled by protocol handlers which may be unknown ahead of\n time, e.g. fb:, spotify: */\n } else if (\n ALLOW_UNKNOWN_PROTOCOLS &&\n !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))\n ) {\n // This attribute is safe\n /* Check for binary attributes */\n } else if (value) {\n return false;\n } else {\n // Binary attributes are safe at this point\n /* Anything else, presume unsafe, do not add it back */\n }\n\n return true;\n };\n\n /* Names the HTML spec reserves from valid-custom-element-name; these must\n * never be treated as basic custom elements even when a permissive\n * CUSTOM_ELEMENT_HANDLING.tagNameCheck is configured. */\n const RESERVED_CUSTOM_ELEMENT_NAMES = addToSet({}, [\n 'annotation-xml',\n 'color-profile',\n 'font-face',\n 'font-face-format',\n 'font-face-name',\n 'font-face-src',\n 'font-face-uri',\n 'missing-glyph',\n ]);\n\n /**\n * _isBasicCustomElement\n * checks if at least one dash is included in tagName, and it's not the first char\n * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n *\n * @param tagName name of the tag of the node to sanitize\n * @returns Returns true if the tag name meets the basic criteria for a custom element, otherwise false.\n */\n const _isBasicCustomElement = function (tagName: string): boolean {\n return (\n !RESERVED_CUSTOM_ELEMENT_NAMES[stringToLowerCase(tagName)] &&\n regExpTest(CUSTOM_ELEMENT, tagName)\n );\n };\n\n /**\n * _sanitizeAttributes\n *\n * @protect attributes\n * @protect nodeName\n * @protect removeAttribute\n * @protect setAttribute\n *\n * @param currentNode to sanitize\n */\n const _sanitizeAttributes = function (currentNode: Element): void {\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeAttributes, currentNode, null);\n\n const { attributes } = currentNode;\n\n /* Check if we have attributes; if not we might have a text node */\n if (!attributes || _isClobbered(currentNode)) {\n return;\n }\n\n const hookEvent = {\n attrName: '',\n attrValue: '',\n keepAttr: true,\n allowedAttributes: ALLOWED_ATTR,\n forceKeepAttr: undefined,\n };\n let l = attributes.length;\n\n /* Go backwards over all attributes; safely remove bad ones */\n while (l--) {\n const attr = attributes[l];\n const { name, namespaceURI, value: attrValue } = attr;\n const lcName = transformCaseFunc(name);\n\n const initValue = attrValue;\n let value = name === 'value' ? initValue : stringTrim(initValue);\n\n /* Execute a hook if present */\n hookEvent.attrName = lcName;\n hookEvent.attrValue = value;\n hookEvent.keepAttr = true;\n hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n _executeHooks(hooks.uponSanitizeAttribute, currentNode, hookEvent);\n value = hookEvent.attrValue;\n\n /* Full DOM Clobbering protection via namespace isolation,\n * Prefix id and name attributes with `user-content-`\n */\n if (\n SANITIZE_NAMED_PROPS &&\n (lcName === 'id' || lcName === 'name') &&\n stringIndexOf(value, SANITIZE_NAMED_PROPS_PREFIX) !== 0\n ) {\n // Remove the attribute with this value\n _removeAttribute(name, currentNode);\n // Prefix the value and later re-create the attribute with the sanitized value\n value = SANITIZE_NAMED_PROPS_PREFIX + value;\n }\n // Else: already prefixed, leave the attribute alone \u2014 the prefix is\n // itself the clobbering protection, and re-applying it is incorrect.\n\n /* Work around a security issue with comments inside attributes */\n if (\n SAFE_FOR_XML &&\n regExpTest(\n /((--!?|])>)|<\\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,\n value\n )\n ) {\n _removeAttribute(name, currentNode);\n continue;\n }\n\n /* Make sure we cannot easily use animated hrefs, even if animations are allowed */\n if (lcName === 'attributename' && stringMatch(value, 'href')) {\n _removeAttribute(name, currentNode);\n continue;\n }\n\n /* Did the hooks approve of the attribute? */\n if (hookEvent.forceKeepAttr) {\n continue;\n }\n\n /* Did the hooks approve of the attribute? */\n if (!hookEvent.keepAttr) {\n _removeAttribute(name, currentNode);\n continue;\n }\n\n /* Work around a security issue in jQuery 3.0 */\n if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n\n /* Sanitize attribute content to be template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], (expr: RegExp) => {\n value = stringReplace(value, expr, ' ');\n });\n }\n\n /* Is `value` valid for this attribute? */\n const lcTag = transformCaseFunc(currentNode.nodeName);\n if (!_isValidAttribute(lcTag, lcName, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n\n /* Handle attributes that require Trusted Types */\n if (\n trustedTypesPolicy &&\n typeof trustedTypes === 'object' &&\n typeof trustedTypes.getAttributeType === 'function'\n ) {\n if (namespaceURI) {\n /* Namespaces are not yet supported, see https://bugs.chromium.org/p/chromium/issues/detail?id=1305293 */\n } else {\n switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n case 'TrustedHTML': {\n value = trustedTypesPolicy.createHTML(value);\n break;\n }\n\n case 'TrustedScriptURL': {\n value = trustedTypesPolicy.createScriptURL(value);\n break;\n }\n\n default: {\n break;\n }\n }\n }\n }\n\n /* Handle invalid data-* attribute set by try-catching it */\n if (value !== initValue) {\n try {\n if (namespaceURI) {\n currentNode.setAttributeNS(namespaceURI, name, value);\n } else {\n /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n currentNode.setAttribute(name, value);\n }\n\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n } else {\n arrayPop(DOMPurify.removed);\n }\n } catch (_) {\n _removeAttribute(name, currentNode);\n }\n }\n }\n\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeAttributes, currentNode, null);\n };\n\n /**\n * _sanitizeShadowDOM\n *\n * @param fragment to iterate over recursively\n */\n const _sanitizeShadowDOM = function (fragment: DocumentFragment): void {\n let shadowNode = null;\n const shadowIterator = _createNodeIterator(fragment);\n\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeShadowDOM, fragment, null);\n\n while ((shadowNode = shadowIterator.nextNode())) {\n /* Execute a hook if present */\n _executeHooks(hooks.uponSanitizeShadowNode, shadowNode, null);\n\n /* Sanitize tags and elements */\n _sanitizeElements(shadowNode);\n\n /* Check attributes next */\n _sanitizeAttributes(shadowNode);\n\n /* Deep shadow DOM detected.\n Realm-safe check (GHSA-hpcv-96wg-7vj8): use nodeType against the\n DOCUMENT_FRAGMENT_NODE constant rather than instanceof, so we\n recurse into <template>.content from foreign realms too. */\n if (_isDocumentFragment(shadowNode.content)) {\n _sanitizeShadowDOM(shadowNode.content);\n }\n\n /* An element iterated here may itself host an attached\n shadow root. The default NodeIterator does not enter shadow\n trees, so a shadow root nested inside template.content was\n previously reached by no walk at all (the pre-pass at\n _sanitizeAttachedShadowRoots descends via childNodes, which\n doesn't enter template.content; the template-content recursion\n above iterates the content but never inspected shadowRoot).\n Walk it explicitly. The nodeType guard avoids reading\n shadowRoot off text / comment / CDATA / PI nodes that the\n iterator also surfaces. */\n const shadowNodeType = getNodeType\n ? getNodeType(shadowNode)\n : (shadowNode as Node).nodeType;\n if (shadowNodeType === NODE_TYPE.element) {\n const innerSr = getShadowRoot\n ? getShadowRoot(shadowNode)\n : (shadowNode as Element).shadowRoot;\n if (_isDocumentFragment(innerSr)) {\n _sanitizeAttachedShadowRoots(innerSr);\n _sanitizeShadowDOM(innerSr);\n }\n }\n }\n\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeShadowDOM, fragment, null);\n };\n\n /**\n * _sanitizeAttachedShadowRoots\n *\n * Walks `root` and feeds every attached shadow root we encounter into\n * the existing _sanitizeShadowDOM pipeline. The default node iterator\n * does not descend into shadow trees, so nodes inside an attached\n * shadow root would otherwise be skipped entirely.\n *\n * Two real input paths put attached shadow roots in front of us:\n * 1. IN_PLACE on a DOM node that already has shadow roots attached.\n * 2. DOM-node input where importNode(dirty, true) deep-clones the\n * shadow root because it was created with `clonable: true`.\n *\n * This pass runs once, up front, so the main iteration loop (and the\n * existing _sanitizeShadowDOM template-content recursion) stay\n * untouched \u2014 string-input paths are not affected.\n *\n * @param root the subtree root to walk for attached shadow roots\n */\n const _sanitizeAttachedShadowRoots = function (root: Node): void {\n const nodeType = getNodeType ? getNodeType(root) : (root as any).nodeType;\n\n if (nodeType === NODE_TYPE.element) {\n const sr = getShadowRoot\n ? getShadowRoot(root)\n : (root as Element).shadowRoot;\n // Realm-safe check (GHSA-hpcv-96wg-7vj8): use nodeType-based\n // detection rather than `instanceof DocumentFragment`, which is\n // realm-bound and silently skipped shadow roots whose host element\n // belonged to a foreign realm (e.g. iframe.contentDocument\n // attachShadow). A foreign-realm ShadowRoot extends the foreign\n // realm's DocumentFragment, not ours, so the old instanceof check\n // returned false and the shadow subtree was never walked.\n if (_isDocumentFragment(sr)) {\n // Recurse first so that nested shadow roots are reached even if\n // _sanitizeShadowDOM removes hosts at this level.\n _sanitizeAttachedShadowRoots(sr);\n _sanitizeShadowDOM(sr);\n }\n }\n\n // Snapshot children before recursing. Sanitization of one subtree\n // (e.g. via an uponSanitizeShadowNode hook) may detach siblings,\n // and naive nextSibling traversal would silently skip the rest of\n // the list once a node is detached.\n const childNodes = getChildNodes\n ? getChildNodes(root)\n : (root as Element).childNodes;\n if (!childNodes) {\n return;\n }\n\n const snapshot: Node[] = [];\n arrayForEach(childNodes, (child) => {\n arrayPush(snapshot, child);\n });\n\n for (const child of snapshot) {\n _sanitizeAttachedShadowRoots(child);\n }\n\n /* When the root is a <template>, also descend into root.content */\n if (nodeType === NODE_TYPE.element) {\n const rootName = getNodeName ? getNodeName(root) : null;\n if (\n typeof rootName === 'string' &&\n transformCaseFunc(rootName) === 'template'\n ) {\n const content = (root as HTMLTemplateElement).content;\n if (_isDocumentFragment(content)) {\n _sanitizeAttachedShadowRoots(content);\n }\n }\n }\n };\n\n // eslint-disable-next-line complexity\n DOMPurify.sanitize = function (dirty, cfg = {}) {\n let body = null;\n let importedNode = null;\n let currentNode = null;\n let returnNode = null;\n /* Make sure we have a string to sanitize.\n DO NOT return early, as this will return the wrong type if\n the user has requested a DOM object rather than a string */\n IS_EMPTY_INPUT = !dirty;\n if (IS_EMPTY_INPUT) {\n dirty = '<!-->';\n }\n\n /* Stringify, in case dirty is an object */\n if (typeof dirty !== 'string' && !_isNode(dirty)) {\n dirty = stringifyValue(dirty);\n\n if (typeof dirty !== 'string') {\n throw typeErrorCreate('dirty is not a string, aborting');\n }\n }\n\n /* Return dirty HTML if DOMPurify cannot run */\n if (!DOMPurify.isSupported) {\n return dirty;\n }\n\n /* Assign config vars */\n if (!SET_CONFIG) {\n _parseConfig(cfg);\n }\n\n /* Clean up removed elements */\n DOMPurify.removed = [];\n\n /* Check if dirty is correctly typed for IN_PLACE */\n if (typeof dirty === 'string') {\n IN_PLACE = false;\n }\n\n if (IN_PLACE) {\n /* Do some early pre-sanitization to avoid unsafe root nodes.\n Read nodeName through the cached prototype getter \u2014 a clobbering\n child named \"nodeName\" on the form root would otherwise shadow\n the property and let this check skip the root-allowlist\n validation entirely. */\n const nn = getNodeName\n ? getNodeName(dirty as Node)\n : (dirty as Node).nodeName;\n if (typeof nn === 'string') {\n const tagName = transformCaseFunc(nn);\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n throw typeErrorCreate(\n 'root node is forbidden and cannot be sanitized in-place'\n );\n }\n }\n\n /* Pre-flight the root through _isClobbered. The iterator-driven\n removal path can not detach a parent-less root: _forceRemove\n falls through to Element.prototype.remove(), which per spec\n is a no-op on a node with no parent. A clobbered root would\n then survive the main loop with its attributes uninspected,\n because _sanitizeAttributes early-returns on _isClobbered. The\n result would be an attacker-controlled form, complete with any\n event-handler attributes the caller passed in, handed back to\n the application unsanitized. Refuse to sanitize such a root\n the same way we refuse a forbidden tag. GHSA-r47g-fvhr-h676. */\n if (_isClobbered(dirty as Element)) {\n throw typeErrorCreate(\n 'root node is clobbered and cannot be sanitized in-place'\n );\n }\n\n /* Sanitize attached shadow roots before the main iterator runs.\n The iterator does not descend into shadow trees. */\n _sanitizeAttachedShadowRoots(dirty as Node);\n } else if (_isNode(dirty)) {\n /* If dirty is a DOM element, append to an empty document to avoid\n elements being stripped by the parser */\n body = _initDocument('<!---->');\n importedNode = body.ownerDocument.importNode(dirty, true);\n if (\n importedNode.nodeType === NODE_TYPE.element &&\n importedNode.nodeName === 'BODY'\n ) {\n /* Node is already a body, use as is */\n body = importedNode;\n } else if (importedNode.nodeName === 'HTML') {\n body = importedNode;\n } else {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n body.appendChild(importedNode);\n }\n\n /* Clonable shadow roots are deep-cloned by importNode(); sanitize\n them before the main iterator runs, since the iterator does not\n descend into shadow trees. The walk routes every read through a\n cached prototype getter so clobbering descendants on a form root\n cannot hide a shadow host from this pass. */\n _sanitizeAttachedShadowRoots(importedNode);\n } else {\n /* Exit directly if we have nothing to do */\n if (\n !RETURN_DOM &&\n !SAFE_FOR_TEMPLATES &&\n !WHOLE_DOCUMENT &&\n // eslint-disable-next-line unicorn/prefer-includes\n dirty.indexOf('<') === -1\n ) {\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE\n ? trustedTypesPolicy.createHTML(dirty)\n : dirty;\n }\n\n /* Initialize the document to work on */\n body = _initDocument(dirty);\n\n /* Check we have a DOM node from the data */\n if (!body) {\n return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n }\n }\n\n /* Remove first element node (ours) if FORCE_BODY is set */\n if (body && FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n\n /* Get node iterator */\n const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);\n\n /* Now start iterating over the created document */\n while ((currentNode = nodeIterator.nextNode())) {\n /* Sanitize tags and elements */\n _sanitizeElements(currentNode);\n\n /* Check attributes next */\n _sanitizeAttributes(currentNode);\n\n /* Shadow DOM detected, sanitize it.\n Realm-safe check (GHSA-hpcv-96wg-7vj8): nodeType-based detection\n instead of instanceof, so foreign-realm <template>.content is\n walked correctly. */\n if (_isDocumentFragment(currentNode.content)) {\n _sanitizeShadowDOM(currentNode.content);\n }\n }\n\n /* If we sanitized `dirty` in-place, return it. */\n if (IN_PLACE) {\n if (SAFE_FOR_TEMPLATES) {\n _scrubTemplateExpressions(dirty as Element);\n }\n\n return dirty;\n }\n\n /* Return sanitized string or DOM */\n if (RETURN_DOM) {\n if (SAFE_FOR_TEMPLATES) {\n _scrubTemplateExpressions(body);\n }\n\n if (RETURN_DOM_FRAGMENT) {\n returnNode = createDocumentFragment.call(body.ownerDocument);\n\n while (body.firstChild) {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n returnNode.appendChild(body.firstChild);\n }\n } else {\n returnNode = body;\n }\n\n if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {\n /*\n AdoptNode() is not used because internal state is not reset\n (e.g. the past names map of a HTMLFormElement), this is safe\n in theory but we would rather not risk another attack vector.\n The state that is cloned by importNode() is explicitly defined\n by the specs.\n */\n returnNode = importNode.call(originalDocument, returnNode, true);\n }\n\n return returnNode;\n }\n\n let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n\n /* Serialize doctype if allowed */\n if (\n WHOLE_DOCUMENT &&\n ALLOWED_TAGS['!doctype'] &&\n body.ownerDocument &&\n body.ownerDocument.doctype &&\n body.ownerDocument.doctype.name &&\n regExpTest(EXPRESSIONS.DOCTYPE_NAME, body.ownerDocument.doctype.name)\n ) {\n serializedHTML =\n '<!DOCTYPE ' + body.ownerDocument.doctype.name + '>\\n' + serializedHTML;\n }\n\n /* Sanitize final string template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], (expr: RegExp) => {\n serializedHTML = stringReplace(serializedHTML, expr, ' ');\n });\n }\n\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE\n ? trustedTypesPolicy.createHTML(serializedHTML)\n : serializedHTML;\n };\n\n DOMPurify.setConfig = function (cfg = {}) {\n _parseConfig(cfg);\n SET_CONFIG = true;\n };\n\n DOMPurify.clearConfig = function () {\n CONFIG = null;\n SET_CONFIG = false;\n };\n\n DOMPurify.isValidAttribute = function (tag, attr, value) {\n /* Initialize shared config vars if necessary. */\n if (!CONFIG) {\n _parseConfig({});\n }\n\n const lcTag = transformCaseFunc(tag);\n const lcName = transformCaseFunc(attr);\n return _isValidAttribute(lcTag, lcName, value);\n };\n\n DOMPurify.addHook = function (\n entryPoint: keyof HooksMap,\n hookFunction: HookFunction\n ) {\n if (typeof hookFunction !== 'function') {\n return;\n }\n\n arrayPush(hooks[entryPoint], hookFunction);\n };\n\n DOMPurify.removeHook = function (\n entryPoint: keyof HooksMap,\n hookFunction: HookFunction\n ) {\n if (hookFunction !== undefined) {\n const index = arrayLastIndexOf(hooks[entryPoint], hookFunction);\n\n return index === -1\n ? undefined\n : arraySplice(hooks[entryPoint], index, 1)[0];\n }\n\n return arrayPop(hooks[entryPoint]);\n };\n\n DOMPurify.removeHooks = function (entryPoint: keyof HooksMap) {\n hooks[entryPoint] = [];\n };\n\n DOMPurify.removeAllHooks = function () {\n hooks = _createHooksMap();\n };\n\n return DOMPurify;\n}\n\nexport default createDOMPurify();\n\nexport interface DOMPurify {\n /**\n * Creates a DOMPurify instance using the given window-like object. Defaults to `window`.\n */\n (root?: WindowLike): DOMPurify;\n\n /**\n * Version label, exposed for easier checks\n * if DOMPurify is up to date or not\n */\n version: string;\n\n /**\n * Array of elements that DOMPurify removed during sanitation.\n * Empty if nothing was removed.\n */\n removed: Array<RemovedElement | RemovedAttribute>;\n\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n isSupported: boolean;\n\n /**\n * Set the configuration once.\n *\n * @param cfg configuration object\n */\n setConfig(cfg?: Config): void;\n\n /**\n * Removes the configuration.\n */\n clearConfig(): void;\n\n /**\n * Provides core sanitation functionality.\n *\n * @param dirty string or DOM node\n * @param cfg object\n * @returns Sanitized TrustedHTML.\n */\n sanitize(\n dirty: string | Node,\n cfg: Config & { RETURN_TRUSTED_TYPE: true }\n ): TrustedHTML;\n\n /**\n * Provides core sanitation functionality.\n *\n * @param dirty DOM node\n * @param cfg object\n * @returns Sanitized DOM node.\n */\n sanitize(dirty: Node, cfg: Config & { IN_PLACE: true }): Node;\n\n /**\n * Provides core sanitation functionality.\n *\n * @param dirty string or DOM node\n * @param cfg object\n * @returns Sanitized DOM node.\n */\n sanitize(dirty: string | Node, cfg: Config & { RETURN_DOM: true }): Node;\n\n /**\n * Provides core sanitation functionality.\n *\n * @param dirty string or DOM node\n * @param cfg object\n * @returns Sanitized document fragment.\n */\n sanitize(\n dirty: string | Node,\n cfg: Config & { RETURN_DOM_FRAGMENT: true }\n ): DocumentFragment;\n\n /**\n * Provides core sanitation functionality.\n *\n * @param dirty string or DOM node\n * @param cfg object\n * @returns Sanitized string.\n */\n sanitize(dirty: string | Node, cfg?: Config): string;\n\n /**\n * Checks if an attribute value is valid.\n * Uses last set config, if any. Otherwise, uses config defaults.\n *\n * @param tag Tag name of containing element.\n * @param attr Attribute name.\n * @param value Attribute value.\n * @returns Returns true if `value` is valid. Otherwise, returns false.\n */\n isValidAttribute(tag: string, attr: string, value: string): boolean;\n\n /**\n * Adds a DOMPurify hook.\n *\n * @param entryPoint entry point for the hook to add\n * @param hookFunction function to execute\n */\n addHook(entryPoint: BasicHookName, hookFunction: NodeHook): void;\n\n /**\n * Adds a DOMPurify hook.\n *\n * @param entryPoint entry point for the hook to add\n * @param hookFunction function to execute\n */\n addHook(entryPoint: ElementHookName, hookFunction: ElementHook): void;\n\n /**\n * Adds a DOMPurify hook.\n *\n * @param entryPoint entry point for the hook to add\n * @param hookFunction function to execute\n */\n addHook(\n entryPoint: DocumentFragmentHookName,\n hookFunction: DocumentFragmentHook\n ): void;\n\n /**\n * Adds a DOMPurify hook.\n *\n * @param entryPoint entry point for the hook to add\n * @param hookFunction function to execute\n */\n addHook(\n entryPoint: 'uponSanitizeElement',\n hookFunction: UponSanitizeElementHook\n ): void;\n\n /**\n * Adds a DOMPurify hook.\n *\n * @param entryPoint entry point for the hook to add\n * @param hookFunction function to execute\n */\n addHook(\n entryPoint: 'uponSanitizeAttribute',\n hookFunction: UponSanitizeAttributeHook\n ): void;\n\n /**\n * Remove a DOMPurify hook at a given entryPoint\n * (pops it from the stack of hooks if hook not specified)\n *\n * @param entryPoint entry point for the hook to remove\n * @param hookFunction optional specific hook to remove\n * @returns removed hook\n */\n removeHook(\n entryPoint: BasicHookName,\n hookFunction?: NodeHook\n ): NodeHook | undefined;\n\n /**\n * Remove a DOMPurify hook at a given entryPoint\n * (pops it from the stack of hooks if hook not specified)\n *\n * @param entryPoint entry point for the hook to remove\n * @param hookFunction optional specific hook to remove\n * @returns removed hook\n */\n removeHook(\n entryPoint: ElementHookName,\n hookFunction?: ElementHook\n ): ElementHook | undefined;\n\n /**\n * Remove a DOMPurify hook at a given entryPoint\n * (pops it from the stack of hooks if hook not specified)\n *\n * @param entryPoint entry point for the hook to remove\n * @param hookFunction optional specific hook to remove\n * @returns removed hook\n */\n removeHook(\n entryPoint: DocumentFragmentHookName,\n hookFunction?: DocumentFragmentHook\n ): DocumentFragmentHook | undefined;\n\n /**\n * Remove a DOMPurify hook at a given entryPoint\n * (pops it from the stack of hooks if hook not specified)\n *\n * @param entryPoint entry point for the hook to remove\n * @param hookFunction optional specific hook to remove\n * @returns removed hook\n */\n removeHook(\n entryPoint: 'uponSanitizeElement',\n hookFunction?: UponSanitizeElementHook\n ): UponSanitizeElementHook | undefined;\n\n /**\n * Remove a DOMPurify hook at a given entryPoint\n * (pops it from the stack of hooks if hook not specified)\n *\n * @param entryPoint entry point for the hook to remove\n * @param hookFunction optional specific hook to remove\n * @returns removed hook\n */\n removeHook(\n entryPoint: 'uponSanitizeAttribute',\n hookFunction?: UponSanitizeAttributeHook\n ): UponSanitizeAttributeHook | undefined;\n\n /**\n * Removes all DOMPurify hooks at a given entryPoint\n *\n * @param entryPoint entry point for the hooks to remove\n */\n removeHooks(entryPoint: HookName): void;\n\n /**\n * Removes all DOMPurify hooks.\n */\n removeAllHooks(): void;\n}\n\n/**\n * An element removed by DOMPurify.\n */\nexport interface RemovedElement {\n /**\n * The element that was removed.\n */\n element: Node;\n}\n\n/**\n * An element removed by DOMPurify.\n */\nexport interface RemovedAttribute {\n /**\n * The attribute that was removed.\n */\n attribute: Attr | null;\n\n /**\n * The element that the attribute was removed.\n */\n from: Node;\n}\n\ntype BasicHookName =\n | 'beforeSanitizeElements'\n | 'afterSanitizeElements'\n | 'uponSanitizeShadowNode';\ntype ElementHookName = 'beforeSanitizeAttributes' | 'afterSanitizeAttributes';\ntype DocumentFragmentHookName =\n | 'beforeSanitizeShadowDOM'\n | 'afterSanitizeShadowDOM';\ntype UponSanitizeElementHookName = 'uponSanitizeElement';\ntype UponSanitizeAttributeHookName = 'uponSanitizeAttribute';\n\ninterface HooksMap {\n beforeSanitizeElements: NodeHook[];\n afterSanitizeElements: NodeHook[];\n beforeSanitizeShadowDOM: DocumentFragmentHook[];\n uponSanitizeShadowNode: NodeHook[];\n afterSanitizeShadowDOM: DocumentFragmentHook[];\n beforeSanitizeAttributes: ElementHook[];\n afterSanitizeAttributes: ElementHook[];\n uponSanitizeElement: UponSanitizeElementHook[];\n uponSanitizeAttribute: UponSanitizeAttributeHook[];\n}\n\ntype ArrayElement<T> = T extends Array<infer U> ? U : never;\n\ntype HookFunction = ArrayElement<HooksMap[keyof HooksMap]>;\n\nexport type HookName =\n | BasicHookName\n | ElementHookName\n | DocumentFragmentHookName\n | UponSanitizeElementHookName\n | UponSanitizeAttributeHookName;\n\nexport type NodeHook = (\n this: DOMPurify,\n currentNode: Node,\n hookEvent: null,\n config: Config\n) => void;\n\nexport type ElementHook = (\n this: DOMPurify,\n currentNode: Element,\n hookEvent: null,\n config: Config\n) => void;\n\nexport type DocumentFragmentHook = (\n this: DOMPurify,\n currentNode: DocumentFragment,\n hookEvent: null,\n config: Config\n) => void;\n\nexport type UponSanitizeElementHook = (\n this: DOMPurify,\n currentNode: Node,\n hookEvent: UponSanitizeElementHookEvent,\n config: Config\n) => void;\n\nexport type UponSanitizeAttributeHook = (\n this: DOMPurify,\n currentNode: Element,\n hookEvent: UponSanitizeAttributeHookEvent,\n config: Config\n) => void;\n\nexport interface UponSanitizeElementHookEvent {\n tagName: string;\n allowedTags: Record<string, boolean>;\n}\n\nexport interface UponSanitizeAttributeHookEvent {\n attrName: string;\n attrValue: string;\n keepAttr: boolean;\n allowedAttributes: Record<string, boolean>;\n forceKeepAttr: boolean | undefined;\n}\n\n/**\n * A `Window`-like object containing the properties and types that DOMPurify requires.\n */\nexport type WindowLike = Pick<\n typeof globalThis,\n | 'DocumentFragment'\n | 'HTMLTemplateElement'\n | 'Node'\n | 'Element'\n | 'NodeFilter'\n | 'NamedNodeMap'\n | 'HTMLFormElement'\n | 'DOMParser'\n> & {\n document?: Document;\n MozNamedAttrMap?: typeof window.NamedNodeMap;\n} & Pick<TrustedTypesWindow, 'trustedTypes'>;\n", "import type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Gets the original marked default options.\n */\nexport function _getDefaults<ParserOutput = string, RendererOutput = string>(): MarkedOptions<ParserOutput, RendererOutput> {\n return {\n async: false,\n breaks: false,\n extensions: null,\n gfm: true,\n hooks: null,\n pedantic: false,\n renderer: null,\n silent: false,\n tokenizer: null,\n walkTokens: null,\n };\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport let _defaults: MarkedOptions<any, any> = _getDefaults();\n\nexport function changeDefaults<ParserOutput = string, RendererOutput = string>(newDefaults: MarkedOptions<ParserOutput, RendererOutput>) {\n _defaults = newDefaults;\n}\n", "const noopTest = { exec: () => null } as unknown as RegExp;\n\nfunction cachedIndentRegex(createRegex: (indent: number) => RegExp) {\n const cache: RegExp[] = [];\n return (indent: number) => {\n const cacheIndex = Math.max(0, Math.min(3, indent - 1));\n let regex = cache[cacheIndex];\n if (!regex) {\n regex = createRegex(cacheIndex);\n cache[cacheIndex] = regex;\n }\n return regex;\n };\n}\n\nfunction edit(regex: string | RegExp, opt = '') {\n let source = typeof regex === 'string' ? regex : regex.source;\n const obj = {\n replace: (name: string | RegExp, val: string | RegExp) => {\n let valSource = typeof val === 'string' ? val : val.source;\n valSource = valSource.replace(other.caret, '$1');\n source = source.replace(name, valSource);\n return obj;\n },\n getRegex: () => {\n return new RegExp(source, opt);\n },\n };\n return obj;\n}\n\n// use a default variable to ensure the regex is evaluated on client an not removed by minifiers\nconst supportsLookbehind = ((a = '') => {\ntry {\n return !!new RegExp('(?<=1)(?<!1)' + a);\n} catch {\n // See browser support here:\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Regular_expressions/Lookbehind_assertion\n return false;\n}\n})();\n\nexport const other = {\n codeRemoveIndent: /^(?: {1,4}| {0,3}\\t)/gm,\n outputLinkReplace: /\\\\([\\[\\]])/g,\n indentCodeCompensation: /^(\\s+)(?:```)/,\n beginningSpace: /^\\s+/,\n endingHash: /#$/,\n startingSpaceChar: /^ /,\n endingSpaceChar: / $/,\n nonSpaceChar: /[^ ]/,\n newLineCharGlobal: /\\n/g,\n tabCharGlobal: /\\t/g,\n multipleSpaceGlobal: /\\s+/g,\n blankLine: /^[ \\t]*$/,\n doubleBlankLine: /\\n[ \\t]*\\n[ \\t]*$/,\n blockquoteStart: /^ {0,3}>/,\n blockquoteSetextReplace: /\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,\n blockquoteSetextReplace2: /^ {0,3}>[ \\t]?/gm,\n listReplaceNesting: /^ {1,4}(?=( {4})*[^ ])/g,\n listIsTask: /^\\[[ xX]\\] +\\S/,\n listReplaceTask: /^\\[[ xX]\\] +/,\n listTaskCheckbox: /\\[[ xX]\\]/,\n anyLine: /\\n.*\\n/,\n hrefBrackets: /^<(.*)>$/,\n tableDelimiter: /[:|]/,\n tableAlignChars: /^\\||\\| *$/g,\n tableRowBlankLine: /\\n[ \\t]*$/,\n tableAlignRight: /^ *-+: *$/,\n tableAlignCenter: /^ *:-+: *$/,\n tableAlignLeft: /^ *:-+ *$/,\n startATag: /^<a /i,\n endATag: /^<\\/a>/i,\n startPreScriptTag: /^<(pre|code|kbd|script)(\\s|>)/i,\n endPreScriptTag: /^<\\/(pre|code|kbd|script)(\\s|>)/i,\n startAngleBracket: /^</,\n endAngleBracket: />$/,\n pedanticHrefTitle: /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/,\n unicodeAlphaNumeric: /[\\p{L}\\p{N}]/u,\n escapeTest: /[&<>\"']/,\n escapeReplace: /[&<>\"']/g,\n escapeTestNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,\n escapeReplaceNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,\n caret: /(^|[^\\[])\\^/g,\n percentDecode: /%25/g,\n findPipe: /\\|/g,\n splitPipe: / \\|/,\n slashPipe: /\\\\\\|/g,\n carriageReturn: /\\r\\n|\\r/g,\n spaceLine: /^ +$/gm,\n notSpaceStart: /^\\S*/,\n endingNewline: /\\n$/,\n listItemRegex: (bull: string) => new RegExp(`^( {0,3}${bull})((?:[\\t ][^\\\\n]*)?(?:\\\\n|$))`),\n nextBulletRegex: cachedIndentRegex((indent: number) => new RegExp(`^ {0,${indent}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \\t][^\\\\n]*)?(?:\\\\n|$))`)),\n hrRegex: cachedIndentRegex((indent: number) => new RegExp(`^ {0,${indent}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`)),\n fencesBeginRegex: cachedIndentRegex((indent: number) => new RegExp(`^ {0,${indent}}(?:\\`\\`\\`|~~~)`)),\n headingBeginRegex: cachedIndentRegex((indent: number) => new RegExp(`^ {0,${indent}}#`)),\n htmlBeginRegex: cachedIndentRegex((indent: number) => new RegExp(`^ {0,${indent}}<(?:[a-z].*>|!--)`, 'i')),\n blockquoteBeginRegex: cachedIndentRegex((indent: number) => new RegExp(`^ {0,${indent}}>`)),\n};\n\n/**\n * Block-Level Grammar\n */\n\nconst newline = /^(?:[ \\t]*(?:\\n|$))+/;\nconst blockCode = /^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/;\nconst fences = /^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/;\nconst hr = /^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/;\nconst heading = /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/;\nconst bullet = / {0,3}(?:[*+-]|\\d{1,9}[.)])/;\nconst lheadingCore = /^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/;\nconst lheading = edit(lheadingCore)\n .replace(/bull/g, bullet) // lists can interrupt\n .replace(/blockCode/g, /(?: {4}| {0,3}\\t)/) // indented code blocks can interrupt\n .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n .replace(/\\|table/g, '') // table not in commonmark\n .getRegex();\nconst lheadingGfm = edit(lheadingCore)\n .replace(/bull/g, bullet) // lists can interrupt\n .replace(/blockCode/g, /(?: {4}| {0,3}\\t)/) // indented code blocks can interrupt\n .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n .replace(/table/g, / {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/) // table can interrupt\n .getRegex();\nconst _paragraph = /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/;\nconst blockText = /^[^\\n]+/;\nconst _blockLabel = /(?!\\s*\\])(?:\\\\[\\s\\S]|[^\\[\\]\\\\])+/;\nconst def = edit(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/)\n .replace('label', _blockLabel)\n .replace('title', /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/)\n .getRegex();\n\nconst list = edit(/^(bull)([ \\t][^\\n]+?)?(?:\\n|$)/)\n .replace(/bull/g, bullet)\n .getRegex();\n\nconst _tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n + '|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title'\n + '|tr|track|ul';\nconst _comment = /<!--(?:-?>|[\\s\\S]*?(?:-->|$))/;\nconst html = edit(\n '^ {0,3}(?:' // optional indentation\n+ '<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n+ '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n+ '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n+ '|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)' // (4)\n+ '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)' // (5)\n+ '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (6)\n+ '|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (7) open tag\n+ '|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (7) closing tag\n+ ')', 'i')\n .replace('comment', _comment)\n .replace('tag', _tag)\n .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n .getRegex();\n\nconst paragraph = edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)])[ \\\\t]') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\n\nconst blockquote = edit(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/)\n .replace('paragraph', paragraph)\n .getRegex();\n\n/**\n * Normal Block Grammar\n */\n\nconst blockNormal = {\n blockquote,\n code: blockCode,\n def,\n fences,\n heading,\n hr,\n html,\n lheading,\n list,\n newline,\n paragraph,\n table: noopTest,\n text: blockText,\n};\n\ntype BlockKeys = keyof typeof blockNormal;\n\n/**\n * GFM Block Grammar\n */\n\nconst gfmTable = edit(\n '^ *([^\\\\n ].*)\\\\n' // Header\n+ ' {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)' // Align\n+ '(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)') // Cells\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('blockquote', ' {0,3}>')\n .replace('code', '(?: {4}| {0,3}\\t)[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)])[ \\\\t]') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n\nconst blockGfm: Record<BlockKeys, RegExp> = {\n ...blockNormal,\n lheading: lheadingGfm,\n table: gfmTable,\n paragraph: edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('table', gfmTable) // interrupt paragraphs with table\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)])[ \\\\t]') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex(),\n};\n\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\n\nconst blockPedantic: Record<BlockKeys, RegExp> = {\n ...blockNormal,\n html: edit(\n '^ *(?:comment *(?:\\\\n|\\\\s*$)'\n + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n .replace('comment', _comment)\n .replace(/tag/g, '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n .getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest, // fences not supported\n lheading: /^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n paragraph: edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' *#{1,6} *[^\\n]')\n .replace('lheading', lheading)\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('|fences', '')\n .replace('|list', '')\n .replace('|html', '')\n .replace('|tag', '')\n .getRegex(),\n};\n\n/**\n * Inline-Level Grammar\n */\n\nconst escape = /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/;\nconst inlineCode = /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/;\nconst br = /^( {2,}|\\\\)\\n(?!\\s*$)/;\nconst inlineText = /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/;\n\n// list of unicode punctuation marks, plus any missing characters from CommonMark spec\nconst _punctuation = /[\\p{P}\\p{S}]/u;\nconst _punctuationOrSpace = /[\\s\\p{P}\\p{S}]/u;\nconst _notPunctuationOrSpace = /[^\\s\\p{P}\\p{S}]/u;\nconst punctuation = edit(/^((?![*_])punctSpace)/, 'u')\n .replace(/punctSpace/g, _punctuationOrSpace).getRegex();\n\n// GFM allows ~ inside strong and em for strikethrough\nconst _punctuationGfmStrongEm = /(?!~)[\\p{P}\\p{S}]/u;\nconst _punctuationOrSpaceGfmStrongEm = /(?!~)[\\s\\p{P}\\p{S}]/u;\nconst _notPunctuationOrSpaceGfmStrongEm = /(?:[^\\s\\p{P}\\p{S}]|~)/u;\n\n// sequences em should skip over [title](link), `code`, <html>\nconst blockSkip = edit(/link|precode-code|html/, 'g')\n .replace('link', /\\[(?:[^\\[\\]`]|(?<a>`+)[^`]+\\k<a>(?!`))*?\\]\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)]|\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)])*\\))*\\)/)\n .replace('precode-', supportsLookbehind ? '(?<!`)()' : '(^^|[^`])')\n .replace('code', /(?<b>`+)[^`]+\\k<b>(?!`)/)\n .replace('html', /<(?! )[^<>]*?>/)\n .getRegex();\n\nconst emStrongLDelimCore = /^(?:\\*+(?:((?!\\*)punct)|([^\\s*]))?)|^_+(?:((?!_)punct)|([^\\s_]))?/;\n\nconst emStrongLDelim = edit(emStrongLDelimCore, 'u')\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst emStrongLDelimGfm = edit(emStrongLDelimCore, 'u')\n .replace(/punct/g, _punctuationGfmStrongEm)\n .getRegex();\n\nconst emStrongRDelimAstCore =\n '^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)' // Skip orphan inside strong\n+ '|[^*]+(?=[^*])' // Consume to delim\n+ '|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)' // (1) #*** can only be a Right Delimiter\n+ '|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)' // (2) a***#, a*** can only be a Right Delimiter\n+ '|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)' // (3) #***a, ***a can only be Left Delimiter\n+ '|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)' // (4) ***# can only be Left Delimiter\n+ '|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)' // (5) #***# can be either Left or Right Delimiter\n+ '|notPunctSpace(\\\\*+)(?=notPunctSpace)'; // (6) a***a can be either Left or Right Delimiter\n\nconst emStrongRDelimAst = edit(emStrongRDelimAstCore, 'gu')\n .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n .replace(/punctSpace/g, _punctuationOrSpace)\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst emStrongRDelimAstGfm = edit(emStrongRDelimAstCore, 'gu')\n .replace(/notPunctSpace/g, _notPunctuationOrSpaceGfmStrongEm)\n .replace(/punctSpace/g, _punctuationOrSpaceGfmStrongEm)\n .replace(/punct/g, _punctuationGfmStrongEm)\n .getRegex();\n\n// (6) Not allowed for _\nconst emStrongRDelimUnd = edit(\n '^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)' // Skip orphan inside strong\n+ '|[^_]+(?=[^_])' // Consume to delim\n+ '|(?!_)punct(_+)(?=[\\\\s]|$)' // (1) #___ can only be a Right Delimiter\n+ '|notPunctSpace(_+)(?!_)(?=punctSpace|$)' // (2) a___#, a___ can only be a Right Delimiter\n+ '|(?!_)punctSpace(_+)(?=notPunctSpace)' // (3) #___a, ___a can only be Left Delimiter\n+ '|[\\\\s](_+)(?!_)(?=punct)' // (4) ___# can only be Left Delimiter\n+ '|(?!_)punct(_+)(?!_)(?=punct)', 'gu') // (5) #___# can be either Left or Right Delimiter\n .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n .replace(/punctSpace/g, _punctuationOrSpace)\n .replace(/punct/g, _punctuation)\n .getRegex();\n\n// Tilde left delimiter for strikethrough (similar to emStrongLDelim for asterisk)\nconst delLDelim = edit(/^~~?(?:((?!~)punct)|[^\\s~])/, 'u')\n .replace(/punct/g, _punctuation)\n .getRegex();\n\n// Tilde delimiter patterns for strikethrough (similar to asterisk)\nconst delRDelimCore =\n '^[^~]+(?=[^~])' // Consume to delim\n+ '|(?!~)punct(~~?)(?=[\\\\s]|$)' // (1) #~~ can only be a Right Delimiter\n+ '|notPunctSpace(~~?)(?!~)(?=punctSpace|$)' // (2) a~~#, a~~ can only be a Right Delimiter\n+ '|(?!~)punctSpace(~~?)(?=notPunctSpace)' // (3) #~~a, ~~a can only be Left Delimiter\n+ '|[\\\\s](~~?)(?!~)(?=punct)' // (4) ~~# can only be Left Delimiter\n+ '|(?!~)punct(~~?)(?!~)(?=punct)' // (5) #~~# can be either Left or Right Delimiter\n+ '|notPunctSpace(~~?)(?=notPunctSpace)'; // (6) a~~a can be either Left or Right Delimiter\n\nconst delRDelim = edit(delRDelimCore, 'gu')\n .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n .replace(/punctSpace/g, _punctuationOrSpace)\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst anyPunctuation = edit(/\\\\(punct)/, 'gu')\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst autolink = edit(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/)\n .replace('scheme', /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/)\n .replace('email', /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/)\n .getRegex();\n\nconst _inlineComment = edit(_comment).replace('(?:-->|$)', '-->').getRegex();\nconst tag = edit(\n '^comment'\n + '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>') // CDATA section\n .replace('comment', _inlineComment)\n .replace('attribute', /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/)\n .getRegex();\n\nconst _inlineLabel = /(?:\\[(?:\\\\[\\s\\S]|[^\\[\\]\\\\])*\\]|\\\\[\\s\\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\\])|[^\\[\\]\\\\`])*?/;\n\nconst link = edit(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]+(?:\\n[ \\t]*)?|\\n[ \\t]*)(title))?\\s*\\)/)\n .replace('label', _inlineLabel)\n .replace('href', /<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]*/)\n .replace('title', /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/)\n .getRegex();\n\nconst reflink = edit(/^!?\\[(label)\\]\\[(ref)\\]/)\n .replace('label', _inlineLabel)\n .replace('ref', _blockLabel)\n .getRegex();\n\nconst nolink = edit(/^!?\\[(ref)\\](?:\\[\\])?/)\n .replace('ref', _blockLabel)\n .getRegex();\n\nconst reflinkSearch = edit('reflink|nolink(?!\\\\()', 'g')\n .replace('reflink', reflink)\n .replace('nolink', nolink)\n .getRegex();\n\nconst _caseInsensitiveProtocol = /[hH][tT][tT][pP][sS]?|[fF][tT][pP]/;\n\n/**\n * Normal Inline Grammar\n */\n\nconst inlineNormal = {\n _backpedal: noopTest, // only used for GFM url\n anyPunctuation,\n autolink,\n blockSkip,\n br,\n code: inlineCode,\n del: noopTest,\n delLDelim: noopTest,\n delRDelim: noopTest,\n emStrongLDelim,\n emStrongRDelimAst,\n emStrongRDelimUnd,\n escape,\n link,\n nolink,\n punctuation,\n reflink,\n reflinkSearch,\n tag,\n text: inlineText,\n url: noopTest,\n};\n\ntype InlineKeys = keyof typeof inlineNormal;\n\n/**\n * Pedantic Inline Grammar\n */\n\nconst inlinePedantic: Record<InlineKeys, RegExp> = {\n ...inlineNormal,\n link: edit(/^!?\\[(label)\\]\\((.*?)\\)/)\n .replace('label', _inlineLabel)\n .getRegex(),\n reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n .replace('label', _inlineLabel)\n .getRegex(),\n};\n\n/**\n * GFM Inline Grammar\n */\n\nconst inlineGfm: Record<InlineKeys, RegExp> = {\n ...inlineNormal,\n emStrongRDelimAst: emStrongRDelimAstGfm,\n emStrongLDelim: emStrongLDelimGfm,\n delLDelim,\n delRDelim,\n url: edit(/^((?:protocol):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/)\n .replace('protocol', _caseInsensitiveProtocol)\n .replace('email', /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/)\n .getRegex(),\n _backpedal: /(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])((?:\\\\[\\s\\S]|[^\\\\])*?(?:\\\\[\\s\\S]|[^\\s~\\\\]))\\1(?=[^~]|$)/,\n text: edit(/^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|protocol:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/)\n .replace('protocol', _caseInsensitiveProtocol)\n .getRegex(),\n};\n\n/**\n * GFM + Line Breaks Inline Grammar\n */\n\nconst inlineBreaks: Record<InlineKeys, RegExp> = {\n ...inlineGfm,\n br: edit(br).replace('{2,}', '*').getRegex(),\n text: edit(inlineGfm.text)\n .replace('\\\\b_', '\\\\b_| {2,}\\\\n')\n .replace(/\\{2,\\}/g, '*')\n .getRegex(),\n};\n\n/**\n * exports\n */\n\nexport const block = {\n normal: blockNormal,\n gfm: blockGfm,\n pedantic: blockPedantic,\n};\n\nexport const inline = {\n normal: inlineNormal,\n gfm: inlineGfm,\n breaks: inlineBreaks,\n pedantic: inlinePedantic,\n};\n\nexport interface Rules {\n other: typeof other\n block: Record<BlockKeys, RegExp>\n inline: Record<InlineKeys, RegExp>\n}\n", "import { other } from './rules.ts';\n\n/**\n * Helpers\n */\nconst escapeReplacements: { [index: string]: string } = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n};\nconst getEscapeReplacement = (ch: string) => escapeReplacements[ch];\n\nexport function escapeHtmlEntities(html: string, encode?: boolean) {\n if (encode) {\n if (other.escapeTest.test(html)) {\n return html.replace(other.escapeReplace, getEscapeReplacement);\n }\n } else {\n if (other.escapeTestNoEncode.test(html)) {\n return html.replace(other.escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n\n return html;\n}\n\nexport function cleanUrl(href: string) {\n try {\n href = encodeURI(href).replace(other.percentDecode, '%');\n } catch {\n return null;\n }\n return href;\n}\n\nexport function splitCells(tableRow: string, count?: number) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n const row = tableRow.replace(other.findPipe, (match, offset, str) => {\n let escaped = false;\n let curr = offset;\n while (--curr >= 0 && str[curr] === '\\\\') escaped = !escaped;\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n } else {\n // add space before unescaped |\n return ' |';\n }\n }),\n cells = row.split(other.splitPipe);\n let i = 0;\n\n // First/last cell in a row cannot be empty if it has no leading/trailing pipe\n if (!cells[0].trim()) {\n cells.shift();\n }\n if (cells.length > 0 && !cells.at(-1)?.trim()) {\n cells.pop();\n }\n\n if (count) {\n if (cells.length > count) {\n cells.splice(count);\n } else {\n while (cells.length < count) cells.push('');\n }\n }\n\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(other.slashPipe, '|');\n }\n return cells;\n}\n\n/**\n * Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n * /c*$/ is vulnerable to REDOS.\n *\n * @param str\n * @param c\n * @param invert Remove suffix of non-c chars instead. Default falsey.\n */\nexport function rtrim(str: string, c: string, invert?: boolean) {\n const l = str.length;\n if (l === 0) {\n return '';\n }\n\n // Length of suffix matching the invert condition.\n let suffLen = 0;\n\n // Step left until we fail to match the invert condition.\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n } else if (currChar !== c && invert) {\n suffLen++;\n } else {\n break;\n }\n }\n\n return str.slice(0, l - suffLen);\n}\n\nexport function trimTrailingBlankLines(str: string) {\n const lines = str.split('\\n');\n let end = lines.length - 1;\n while (end >= 0 && other.blankLine.test(lines[end])) {\n end--;\n }\n if (lines.length - end <= 2) {\n // we want to keep single trailing blank lines\n return str;\n }\n\n return lines.slice(0, end + 1).join('\\n');\n}\n\nexport function findClosingBracket(str: string, b: string) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n\n let level = 0;\n for (let i = 0; i < str.length; i++) {\n if (str[i] === '\\\\') {\n i++;\n } else if (str[i] === b[0]) {\n level++;\n } else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n if (level > 0) {\n return -2;\n }\n\n return -1;\n}\n\nexport function expandTabs(line: string, indent = 0) {\n let col = indent;\n let expanded = '';\n for (const char of line) {\n if (char === '\\t') {\n const added = 4 - (col % 4);\n expanded += ' '.repeat(added);\n col += added;\n } else {\n expanded += char;\n col++;\n }\n }\n\n return expanded;\n}\n", "import { _defaults } from './defaults.ts';\nimport {\n rtrim,\n splitCells,\n findClosingBracket,\n expandTabs,\n trimTrailingBlankLines,\n} from './helpers.ts';\nimport type { Rules } from './rules.ts';\nimport type { _Lexer } from './Lexer.ts';\nimport type { Links, Tokens, Token } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\nfunction outputLink(cap: string[], link: Pick<Tokens.Link, 'href' | 'title'>, raw: string, lexer: _Lexer, rules: Rules): Tokens.Link | Tokens.Image {\n const href = link.href;\n const title = link.title || null;\n const text = cap[1].replace(rules.other.outputLinkReplace, '$1');\n\n lexer.state.inLink = true;\n const token: Tokens.Link | Tokens.Image = {\n type: cap[0].charAt(0) === '!' ? 'image' : 'link',\n raw,\n href,\n title,\n text,\n tokens: lexer.inlineTokens(text),\n };\n lexer.state.inLink = false;\n return token;\n}\n\nfunction indentCodeCompensation(raw: string, text: string, rules: Rules) {\n const matchIndentToCode = raw.match(rules.other.indentCodeCompensation);\n\n if (matchIndentToCode === null) {\n return text;\n }\n\n const indentToCode = matchIndentToCode[1];\n\n return text\n .split('\\n')\n .map(node => {\n const matchIndentInNode = node.match(rules.other.beginningSpace);\n if (matchIndentInNode === null) {\n return node;\n }\n\n const [indentInNode] = matchIndentInNode;\n\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n\n return node;\n })\n .join('\\n');\n}\n\n/**\n * Tokenizer\n */\nexport class _Tokenizer<ParserOutput = string, RendererOutput = string> {\n options: MarkedOptions<ParserOutput, RendererOutput>;\n rules!: Rules; // set by the lexer\n lexer!: _Lexer<ParserOutput, RendererOutput>; // set by the lexer\n\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n this.options = options || _defaults;\n }\n\n space(src: string): Tokens.Space | undefined {\n const cap = this.rules.block.newline.exec(src);\n if (cap && cap[0].length > 0) {\n return {\n type: 'space',\n raw: cap[0],\n };\n }\n }\n\n code(src: string): Tokens.Code | undefined {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const raw = this.options.pedantic\n ? cap[0]\n : trimTrailingBlankLines(cap[0]);\n const text = raw.replace(this.rules.other.codeRemoveIndent, '');\n return {\n type: 'code',\n raw,\n codeBlockStyle: 'indented',\n text,\n };\n }\n }\n\n fences(src: string): Tokens.Code | undefined {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || '', this.rules);\n\n return {\n type: 'code',\n raw,\n lang: cap[2] ? cap[2].trim().replace(this.rules.inline.anyPunctuation, '$1') : cap[2],\n text,\n };\n }\n }\n\n heading(src: string): Tokens.Heading | undefined {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n\n // remove trailing #s\n if (this.rules.other.endingHash.test(text)) {\n const trimmed = rtrim(text, '#');\n if (this.options.pedantic) {\n text = trimmed.trim();\n } else if (!trimmed || this.rules.other.endingSpaceChar.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n\n return {\n type: 'heading',\n raw: rtrim(cap[0], '\\n'),\n depth: cap[1].length,\n text,\n tokens: this.lexer.inline(text),\n };\n }\n }\n\n hr(src: string): Tokens.Hr | undefined {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: 'hr',\n raw: rtrim(cap[0], '\\n'),\n };\n }\n }\n\n blockquote(src: string): Tokens.Blockquote | undefined {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n let lines = rtrim(cap[0], '\\n').split('\\n');\n let raw = '';\n let text = '';\n const tokens: Token[] = [];\n\n while (lines.length > 0) {\n let inBlockquote = false;\n const currentLines = [];\n\n let i;\n for (i = 0; i < lines.length; i++) {\n // get lines up to a continuation\n if (this.rules.other.blockquoteStart.test(lines[i])) {\n currentLines.push(lines[i]);\n inBlockquote = true;\n } else if (!inBlockquote) {\n currentLines.push(lines[i]);\n } else {\n break;\n }\n }\n lines = lines.slice(i);\n\n const currentRaw = currentLines.join('\\n');\n const currentText = currentRaw\n // precede setext continuation with 4 spaces so it isn't a setext\n .replace(this.rules.other.blockquoteSetextReplace, '\\n $1')\n .replace(this.rules.other.blockquoteSetextReplace2, '');\n raw = raw ? `${raw}\\n${currentRaw}` : currentRaw;\n text = text ? `${text}\\n${currentText}` : currentText;\n\n // parse blockquote lines as top level tokens\n // merge paragraphs if this is a continuation\n const top = this.lexer.state.top;\n this.lexer.state.top = true;\n this.lexer.blockTokens(currentText, tokens, true);\n this.lexer.state.top = top;\n\n // if there is no continuation then we are done\n if (lines.length === 0) {\n break;\n }\n\n const lastToken = tokens.at(-1);\n\n if (lastToken?.type === 'code') {\n // blockquote continuation cannot be preceded by a code block\n break;\n } else if (lastToken?.type === 'blockquote') {\n // include continuation in nested blockquote\n const oldToken = lastToken as Tokens.Blockquote;\n const newText = oldToken.raw + '\\n' + lines.join('\\n');\n const newToken = this.blockquote(newText)!;\n tokens[tokens.length - 1] = newToken;\n\n raw = raw.substring(0, raw.length - oldToken.raw.length) + newToken.raw;\n text = text.substring(0, text.length - oldToken.text.length) + newToken.text;\n break;\n } else if (lastToken?.type === 'list') {\n // include continuation in nested list\n const oldToken = lastToken as Tokens.List;\n const newText = oldToken.raw + '\\n' + lines.join('\\n');\n const newToken = this.list(newText)!;\n tokens[tokens.length - 1] = newToken;\n\n raw = raw.substring(0, raw.length - lastToken.raw.length) + newToken.raw;\n text = text.substring(0, text.length - oldToken.raw.length) + newToken.raw;\n lines = newText.substring(tokens.at(-1)!.raw.length).split('\\n');\n continue;\n }\n }\n\n return {\n type: 'blockquote',\n raw,\n tokens,\n text,\n };\n }\n }\n\n list(src: string): Tokens.List | undefined {\n let cap = this.rules.block.list.exec(src);\n if (cap) {\n let bull = cap[1].trim();\n const isordered = bull.length > 1;\n\n const list: Tokens.List = {\n type: 'list',\n raw: '',\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: [],\n };\n\n bull = isordered ? `\\\\d{1,9}\\\\${bull.slice(-1)}` : `\\\\${bull}`;\n\n if (this.options.pedantic) {\n bull = isordered ? bull : '[*+-]';\n }\n\n // Get next list item\n const itemRegex = this.rules.other.listItemRegex(bull);\n let endsWithBlankLine = false;\n // Check if current bullet point can start a new List Item\n while (src) {\n let endEarly = false;\n let raw = '';\n let itemContents = '';\n if (!(cap = itemRegex.exec(src))) {\n break;\n }\n\n if (this.rules.block.hr.test(src)) { // End list if bullet was actually HR (possibly move into itemRegex?)\n break;\n }\n\n raw = cap[0];\n src = src.substring(raw.length);\n\n let line = expandTabs(cap[2].split('\\n', 1)[0], cap[1].length);\n let nextLine = src.split('\\n', 1)[0];\n let blankLine = !line.trim();\n\n let indent = 0;\n if (this.options.pedantic) {\n indent = 2;\n itemContents = line.trimStart();\n } else if (blankLine) {\n indent = cap[1].length + 1;\n } else {\n indent = line.search(this.rules.other.nonSpaceChar); // Find first non-space char\n indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent\n itemContents = line.slice(indent);\n indent += cap[1].length;\n }\n\n if (blankLine && this.rules.other.blankLine.test(nextLine)) { // Items begin with at most one blank line\n raw += nextLine + '\\n';\n src = src.substring(nextLine.length + 1);\n endEarly = true;\n }\n\n if (!endEarly) {\n const nextBulletRegex = this.rules.other.nextBulletRegex(indent);\n const hrRegex = this.rules.other.hrRegex(indent);\n const fencesBeginRegex = this.rules.other.fencesBeginRegex(indent);\n const headingBeginRegex = this.rules.other.headingBeginRegex(indent);\n const htmlBeginRegex = this.rules.other.htmlBeginRegex(indent);\n const blockquoteBeginRegex = this.rules.other.blockquoteBeginRegex(indent);\n\n // Check if following lines should be included in List Item\n while (src) {\n const rawLine = src.split('\\n', 1)[0];\n let nextLineWithoutTabs;\n nextLine = rawLine;\n\n // Re-align to follow commonmark nesting rules\n if (this.options.pedantic) {\n nextLine = nextLine.replace(this.rules.other.listReplaceNesting, ' ');\n nextLineWithoutTabs = nextLine;\n } else {\n nextLineWithoutTabs = nextLine.replace(this.rules.other.tabCharGlobal, ' ');\n }\n\n // End list item if found code fences\n if (fencesBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of new heading\n if (headingBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of html block\n if (htmlBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of blockquote\n if (blockquoteBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of new bullet\n if (nextBulletRegex.test(nextLine)) {\n break;\n }\n\n // Horizontal rule found\n if (hrRegex.test(nextLine)) {\n break;\n }\n\n if (nextLineWithoutTabs.search(this.rules.other.nonSpaceChar) >= indent || !nextLine.trim()) { // Dedent if possible\n itemContents += '\\n' + nextLineWithoutTabs.slice(indent);\n } else {\n // not enough indentation\n if (blankLine) {\n break;\n }\n\n // paragraph continuation unless last line was a different block level element\n if (line.replace(this.rules.other.tabCharGlobal, ' ').search(this.rules.other.nonSpaceChar) >= 4) { // indented code block\n break;\n }\n if (fencesBeginRegex.test(line)) {\n break;\n }\n if (headingBeginRegex.test(line)) {\n break;\n }\n if (hrRegex.test(line)) {\n break;\n }\n\n itemContents += '\\n' + nextLine;\n }\n\n blankLine = !nextLine.trim();\n\n raw += rawLine + '\\n';\n src = src.substring(rawLine.length + 1);\n line = nextLineWithoutTabs.slice(indent);\n }\n }\n\n if (!list.loose) {\n // If the previous item ended with a blank line, the list is loose\n if (endsWithBlankLine) {\n list.loose = true;\n } else if (this.rules.other.doubleBlankLine.test(raw)) {\n endsWithBlankLine = true;\n }\n }\n\n list.items.push({\n type: 'list_item',\n raw,\n task: !!this.options.gfm && this.rules.other.listIsTask.test(itemContents),\n loose: false,\n text: itemContents,\n tokens: [],\n });\n\n list.raw += raw;\n }\n\n // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic\n const lastItem = list.items.at(-1);\n if (lastItem) {\n lastItem.raw = lastItem.raw.trimEnd();\n lastItem.text = lastItem.text.trimEnd();\n } else {\n // not a list since there were no items\n return;\n }\n list.raw = list.raw.trimEnd();\n\n // Item child tokens handled here at end because we needed to have the final item to trim it first\n for (const item of list.items) {\n this.lexer.state.top = false;\n item.tokens = this.lexer.blockTokens(item.text, []);\n const itemToken = item.tokens[0];\n if (item.task && (itemToken?.type === 'text' || itemToken?.type === 'paragraph')) {\n // Remove checkbox markdown from item tokens\n item.text = item.text.replace(this.rules.other.listReplaceTask, '');\n itemToken.raw = itemToken.raw.replace(this.rules.other.listReplaceTask, '');\n itemToken.text = itemToken.text.replace(this.rules.other.listReplaceTask, '');\n for (let i = this.lexer.inlineQueue.length - 1; i >= 0; i--) {\n if (this.rules.other.listIsTask.test(this.lexer.inlineQueue[i].src)) {\n this.lexer.inlineQueue[i].src = this.lexer.inlineQueue[i].src.replace(this.rules.other.listReplaceTask, '');\n break;\n }\n }\n\n const taskRaw = this.rules.other.listTaskCheckbox.exec(item.raw);\n if (taskRaw) {\n const checkboxToken: Tokens.Checkbox = {\n type: 'checkbox',\n raw: taskRaw[0] + ' ',\n checked: taskRaw[0] !== '[ ]',\n };\n item.checked = checkboxToken.checked;\n if (list.loose) {\n if (item.tokens[0] && ['paragraph', 'text'].includes(item.tokens[0].type) && 'tokens' in item.tokens[0] && item.tokens[0].tokens) {\n item.tokens[0].raw = checkboxToken.raw + item.tokens[0].raw;\n item.tokens[0].text = checkboxToken.raw + item.tokens[0].text;\n item.tokens[0].tokens.unshift(checkboxToken);\n } else {\n item.tokens.unshift({\n type: 'paragraph',\n raw: checkboxToken.raw,\n text: checkboxToken.raw,\n tokens: [checkboxToken],\n });\n }\n } else {\n item.tokens.unshift(checkboxToken);\n }\n }\n } else if (item.task) {\n item.task = false;\n }\n\n if (!list.loose) {\n // Check if list should be loose\n const spacers = item.tokens.filter(t => t.type === 'space');\n const hasMultipleLineBreaks = spacers.length > 0 && spacers.some(t => this.rules.other.anyLine.test(t.raw));\n\n list.loose = hasMultipleLineBreaks;\n }\n }\n\n // Set all items to loose if list is loose\n if (list.loose) {\n for (const item of list.items) {\n item.loose = true;\n for (const token of item.tokens) {\n if (token.type === 'text') {\n token.type = 'paragraph';\n }\n }\n }\n }\n\n return list;\n }\n }\n\n html(src: string): Tokens.HTML | undefined {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n const raw = trimTrailingBlankLines(cap[0]);\n const token: Tokens.HTML = {\n type: 'html',\n block: true,\n raw,\n pre: cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style',\n text: raw,\n };\n return token;\n }\n }\n\n def(src: string): Tokens.Def | undefined {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n const tag = cap[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal, ' ');\n const href = cap[2] ? cap[2].replace(this.rules.other.hrefBrackets, '$1').replace(this.rules.inline.anyPunctuation, '$1') : '';\n const title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline.anyPunctuation, '$1') : cap[3];\n return {\n type: 'def',\n tag,\n raw: rtrim(cap[0], '\\n'),\n href,\n title,\n };\n }\n }\n\n table(src: string): Tokens.Table | undefined {\n const cap = this.rules.block.table.exec(src);\n if (!cap) {\n return;\n }\n\n if (!this.rules.other.tableDelimiter.test(cap[2])) {\n // delimiter row must have a pipe (|) or colon (:) otherwise it is a setext heading\n return;\n }\n\n const headers = splitCells(cap[1]);\n const aligns = cap[2].replace(this.rules.other.tableAlignChars, '').split('|');\n const rows = cap[3]?.trim() ? cap[3].replace(this.rules.other.tableRowBlankLine, '').split('\\n') : [];\n\n const item: Tokens.Table = {\n type: 'table',\n raw: rtrim(cap[0], '\\n'),\n header: [],\n align: [],\n rows: [],\n };\n\n if (headers.length !== aligns.length) {\n // header and align columns must be equal, rows can be different.\n return;\n }\n\n for (const align of aligns) {\n if (this.rules.other.tableAlignRight.test(align)) {\n item.align.push('right');\n } else if (this.rules.other.tableAlignCenter.test(align)) {\n item.align.push('center');\n } else if (this.rules.other.tableAlignLeft.test(align)) {\n item.align.push('left');\n } else {\n item.align.push(null);\n }\n }\n\n for (let i = 0; i < headers.length; i++) {\n item.header.push({\n text: headers[i],\n tokens: this.lexer.inline(headers[i]),\n header: true,\n align: item.align[i],\n });\n }\n\n for (const row of rows) {\n item.rows.push(splitCells(row, item.header.length).map((cell, i) => {\n return {\n text: cell,\n tokens: this.lexer.inline(cell),\n header: false,\n align: item.align[i],\n };\n }));\n }\n\n return item;\n }\n\n lheading(src: string): Tokens.Heading | undefined {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n const text = cap[1].trim();\n return {\n type: 'heading',\n raw: rtrim(cap[0], '\\n'),\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text,\n tokens: this.lexer.inline(text),\n };\n }\n }\n\n paragraph(src: string): Tokens.Paragraph | undefined {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n const text = cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1];\n return {\n type: 'paragraph',\n raw: cap[0],\n text,\n tokens: this.lexer.inline(text),\n };\n }\n }\n\n text(src: string): Tokens.Text | undefined {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n tokens: this.lexer.inline(cap[0]),\n };\n }\n }\n\n escape(src: string): Tokens.Escape | undefined {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: cap[1],\n };\n }\n }\n\n tag(src: string): Tokens.Tag | undefined {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!this.lexer.state.inLink && this.rules.other.startATag.test(cap[0])) {\n this.lexer.state.inLink = true;\n } else if (this.lexer.state.inLink && this.rules.other.endATag.test(cap[0])) {\n this.lexer.state.inLink = false;\n }\n if (!this.lexer.state.inRawBlock && this.rules.other.startPreScriptTag.test(cap[0])) {\n this.lexer.state.inRawBlock = true;\n } else if (this.lexer.state.inRawBlock && this.rules.other.endPreScriptTag.test(cap[0])) {\n this.lexer.state.inRawBlock = false;\n }\n\n return {\n type: 'html',\n raw: cap[0],\n inLink: this.lexer.state.inLink,\n inRawBlock: this.lexer.state.inRawBlock,\n block: false,\n text: cap[0],\n };\n }\n }\n\n link(src: string): Tokens.Link | Tokens.Image | undefined {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && this.rules.other.startAngleBracket.test(trimmedUrl)) {\n // commonmark requires matching angle brackets\n if (!(this.rules.other.endAngleBracket.test(trimmedUrl))) {\n return;\n }\n\n // ending angle bracket cannot be escaped\n const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\\\');\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n } else {\n // find closing parenthesis\n const lastParenIndex = findClosingBracket(cap[2], '()');\n if (lastParenIndex === -2) {\n // more open parens than closed\n return;\n }\n\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n let href = cap[2];\n let title = '';\n if (this.options.pedantic) {\n // split pedantic href and title\n const link = this.rules.other.pedanticHrefTitle.exec(href);\n\n if (link) {\n href = link[1];\n title = link[3];\n }\n } else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n\n href = href.trim();\n if (this.rules.other.startAngleBracket.test(href)) {\n if (this.options.pedantic && !(this.rules.other.endAngleBracket.test(trimmedUrl))) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n } else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline.anyPunctuation, '$1') : href,\n title: title ? title.replace(this.rules.inline.anyPunctuation, '$1') : title,\n }, cap[0], this.lexer, this.rules);\n }\n }\n\n reflink(src: string, links: Links): Tokens.Link | Tokens.Image | Tokens.Text | undefined {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src))\n || (cap = this.rules.inline.nolink.exec(src))) {\n const linkString = (cap[2] || cap[1]).replace(this.rules.other.multipleSpaceGlobal, ' ');\n const link = links[linkString.toLowerCase()];\n if (!link) {\n const text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text,\n };\n }\n return outputLink(cap, link, cap[0], this.lexer, this.rules);\n }\n }\n\n emStrong(src: string, maskedSrc: string, prevChar = ''): Tokens.Em | Tokens.Strong | undefined {\n let match = this.rules.inline.emStrongLDelim.exec(src);\n if (!match) return;\n if (!match[1] && !match[2] && !match[3] && !match[4]) return;\n\n // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n if (match[4] && prevChar.match(this.rules.other.unicodeAlphaNumeric)) return;\n\n const nextChar = match[1] || match[3] || '';\n\n if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n // unicode Regex counts emoji as 1 char; spread into array for proper count (used multiple times below)\n const lLength = [...match[0]].length - 1;\n let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n\n const endReg = match[0][0] === '*' ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;\n endReg.lastIndex = 0;\n\n // Clip maskedSrc to same section of string as src (move to lexer?)\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n\n while ((match = endReg.exec(maskedSrc)) !== null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n\n if (!rDelim) continue; // skip single * in __abc*abc__\n\n rLength = [...rDelim].length;\n\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n } else if (match[5] || match[6]) { // either Left or Right Delim\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue; // CommonMark Emphasis Rules 9-10\n }\n }\n\n delimTotal -= rLength;\n\n if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n\n // Remove extra characters. *a*** -> *a*\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n // char length can be >1 for unicode characters;\n const lastCharLength = [...match[0]][0].length;\n const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n\n // Create `em` if smallest delimiter has odd char count. *a***\n if (Math.min(lLength, rLength) % 2) {\n const text = raw.slice(1, -1);\n return {\n type: 'em',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text),\n };\n }\n\n // Create 'strong' if smallest delimiter has even char count. **a***\n const text = raw.slice(2, -2);\n return {\n type: 'strong',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text),\n };\n }\n }\n }\n\n codespan(src: string): Tokens.Codespan | undefined {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(this.rules.other.newLineCharGlobal, ' ');\n const hasNonSpaceChars = this.rules.other.nonSpaceChar.test(text);\n const hasSpaceCharsOnBothEnds = this.rules.other.startingSpaceChar.test(text) && this.rules.other.endingSpaceChar.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n return {\n type: 'codespan',\n raw: cap[0],\n text,\n };\n }\n }\n\n br(src: string): Tokens.Br | undefined {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: 'br',\n raw: cap[0],\n };\n }\n }\n\n del(src: string, maskedSrc: string, prevChar = ''): Tokens.Del | undefined {\n let match = this.rules.inline.delLDelim.exec(src);\n if (!match) return;\n\n const nextChar = match[1] || '';\n\n if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n // unicode Regex counts emoji as 1 char; spread into array for proper count\n const lLength = [...match[0]].length - 1;\n let rDelim, rLength, delimTotal = lLength;\n\n const endReg = this.rules.inline.delRDelim;\n endReg.lastIndex = 0;\n\n // Clip maskedSrc to same section of string as src\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n\n while ((match = endReg.exec(maskedSrc)) !== null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n\n if (!rDelim) continue;\n\n rLength = [...rDelim].length;\n\n if (rLength !== lLength) continue;\n\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n }\n\n delimTotal -= rLength;\n\n if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n\n // Remove extra characters\n rLength = Math.min(rLength, rLength + delimTotal);\n // char length can be >1 for unicode characters\n const lastCharLength = [...match[0]][0].length;\n const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n\n // Create del token - only single ~ or double ~~ supported\n const text = raw.slice(lLength, -lLength);\n return {\n type: 'del',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text),\n };\n }\n }\n }\n\n autolink(src: string): Tokens.Link | undefined {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === '@') {\n text = cap[1];\n href = 'mailto:' + text;\n } else {\n text = cap[1];\n href = text;\n }\n\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text,\n },\n ],\n };\n }\n }\n\n url(src: string): Tokens.Link | undefined {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === '@') {\n text = cap[0];\n href = 'mailto:' + text;\n } else {\n // do extended autolink path validation\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])?.[0] ?? '';\n } while (prevCapZero !== cap[0]);\n text = cap[0];\n if (cap[1] === 'www.') {\n href = 'http://' + cap[0];\n } else {\n href = cap[0];\n }\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text,\n },\n ],\n };\n }\n }\n\n inlineText(src: string): Tokens.Text | undefined {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n const escaped = this.lexer.state.inRawBlock;\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n escaped,\n };\n }\n }\n}\n", "import { _Tokenizer } from './Tokenizer.ts';\nimport { _defaults } from './defaults.ts';\nimport { other, block, inline } from './rules.ts';\nimport type { Token, TokensList, Tokens } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Block Lexer\n */\nexport class _Lexer<ParserOutput = string, RendererOutput = string> {\n tokens: TokensList;\n options: MarkedOptions<ParserOutput, RendererOutput>;\n state: {\n inLink: boolean;\n inRawBlock: boolean;\n top: boolean;\n };\n\n public inlineQueue: { src: string, tokens: Token[] }[];\n\n private tokenizer: _Tokenizer<ParserOutput, RendererOutput>;\n\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n // TokenList cannot be created in one go\n this.tokens = [] as unknown as TokensList;\n this.tokens.links = Object.create(null);\n this.options = options || _defaults;\n this.options.tokenizer = this.options.tokenizer || new _Tokenizer<ParserOutput, RendererOutput>();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n this.tokenizer.lexer = this;\n this.inlineQueue = [];\n this.state = {\n inLink: false,\n inRawBlock: false,\n top: true,\n };\n\n const rules = {\n other,\n block: block.normal,\n inline: inline.normal,\n };\n\n if (this.options.pedantic) {\n rules.block = block.pedantic;\n rules.inline = inline.pedantic;\n } else if (this.options.gfm) {\n rules.block = block.gfm;\n if (this.options.breaks) {\n rules.inline = inline.breaks;\n } else {\n rules.inline = inline.gfm;\n }\n }\n this.tokenizer.rules = rules;\n }\n\n /**\n * Expose Rules\n */\n static get rules() {\n return {\n block,\n inline,\n };\n }\n\n /**\n * Static Lex Method\n */\n static lex<ParserOutput = string, RendererOutput = string>(src: string, options?: MarkedOptions<ParserOutput, RendererOutput>) {\n const lexer = new _Lexer<ParserOutput, RendererOutput>(options);\n return lexer.lex(src);\n }\n\n /**\n * Static Lex Inline Method\n */\n static lexInline<ParserOutput = string, RendererOutput = string>(src: string, options?: MarkedOptions<ParserOutput, RendererOutput>) {\n const lexer = new _Lexer<ParserOutput, RendererOutput>(options);\n return lexer.inlineTokens(src);\n }\n\n /**\n * Preprocessing\n */\n lex(src: string) {\n src = src.replace(other.carriageReturn, '\\n');\n\n this.blockTokens(src, this.tokens);\n\n for (let i = 0; i < this.inlineQueue.length; i++) {\n const next = this.inlineQueue[i];\n this.inlineTokens(next.src, next.tokens);\n }\n this.inlineQueue = [];\n\n return this.tokens;\n }\n\n /**\n * Lexing\n */\n blockTokens(src: string, tokens?: Token[], lastParagraphClipped?: boolean): Token[];\n blockTokens(src: string, tokens?: TokensList, lastParagraphClipped?: boolean): TokensList;\n blockTokens(src: string, tokens: Token[] = [], lastParagraphClipped = false) {\n this.tokenizer.lexer = this;\n if (this.options.pedantic) {\n src = src.replace(other.tabCharGlobal, ' ').replace(other.spaceLine, '');\n }\n\n let srcLength = Infinity;\n while (src) {\n if (src.length < srcLength) {\n srcLength = src.length;\n } else {\n this.infiniteLoopError(src.charCodeAt(0));\n break;\n }\n\n let token: Tokens.Generic | undefined;\n\n if (this.options.extensions?.block?.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n\n // newline\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (token.raw.length === 1 && lastToken !== undefined) {\n // if there's a single \\n as a spacer, it's terminating the last line,\n // so move it there so that we don't get unnecessary paragraph tags\n lastToken.raw += '\\n';\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // code\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n // An indented code block cannot interrupt a paragraph.\n if (lastToken?.type === 'paragraph' || lastToken?.type === 'text') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // fences\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // heading\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // hr\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // blockquote\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // list\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // html\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // def\n if (token = this.tokenizer.def(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'paragraph' || lastToken?.type === 'text') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.raw;\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title,\n };\n tokens.push(token);\n }\n continue;\n }\n\n // table (gfm)\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // lheading\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // top-level paragraph\n // prevent paragraph consuming extensions by clipping 'src' to extension start\n let cutSrc = src;\n if (this.options.extensions?.startBlock) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startBlock.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {\n const lastToken = tokens.at(-1);\n if (lastParagraphClipped && lastToken?.type === 'paragraph') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else {\n tokens.push(token);\n }\n lastParagraphClipped = cutSrc.length !== src.length;\n src = src.substring(token.raw.length);\n continue;\n }\n\n // text\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'text') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n this.infiniteLoopError(src.charCodeAt(0));\n break;\n }\n }\n\n this.state.top = true;\n return tokens;\n }\n\n inline(src: string, tokens: Token[] = []) {\n this.inlineQueue.push({ src, tokens });\n return tokens;\n }\n\n /**\n * Lexing/Compiling\n */\n inlineTokens(src: string, tokens: Token[] = []): Token[] {\n this.tokenizer.lexer = this;\n // String with links masked to avoid interference with em and strong\n let maskedSrc = src;\n let match: RegExpExecArray | null = null;\n\n // Mask out reflinks\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) !== null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index)\n + '[' + 'a'.repeat(match[0].length - 2) + ']'\n + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n\n // Mask out escaped characters\n while ((match = this.tokenizer.rules.inline.anyPunctuation.exec(maskedSrc)) !== null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);\n }\n\n // Mask out other blocks\n let offset;\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) !== null) {\n offset = match[2] ? match[2].length : 0;\n maskedSrc = maskedSrc.slice(0, match.index + offset) + '[' + 'a'.repeat(match[0].length - offset - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n\n // Mask out blocks from extensions\n maskedSrc = this.options.hooks?.emStrongMask?.call({ lexer: this }, maskedSrc) ?? maskedSrc;\n\n let keepPrevChar = false;\n let prevChar = '';\n let srcLength = Infinity;\n while (src) {\n if (src.length < srcLength) {\n srcLength = src.length;\n } else {\n this.infiniteLoopError(src.charCodeAt(0));\n break;\n }\n\n if (!keepPrevChar) {\n prevChar = '';\n }\n keepPrevChar = false;\n\n let token: Tokens.Generic | undefined;\n\n // extensions\n if (this.options.extensions?.inline?.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n\n // escape\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // tag\n if (token = this.tokenizer.tag(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // link\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // reflink, nolink\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (token.type === 'text' && lastToken?.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // em & strong\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // code\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // br\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // del (gfm)\n if (token = this.tokenizer.del(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // autolink\n if (token = this.tokenizer.autolink(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // url (gfm)\n if (!this.state.inLink && (token = this.tokenizer.url(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n // prevent inlineText consuming extensions by clipping 'src' to extension start\n let cutSrc = src;\n if (this.options.extensions?.startInline) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startInline.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (token = this.tokenizer.inlineText(cutSrc)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n this.infiniteLoopError(src.charCodeAt(0));\n break;\n }\n }\n\n return tokens;\n }\n\n private infiniteLoopError(byte: number) {\n const errMsg = 'Infinite loop on byte: ' + byte;\n if (this.options.silent) {\n console.error(errMsg);\n } else {\n throw new Error(errMsg);\n }\n }\n}\n", "import { _defaults } from './defaults.ts';\nimport {\n cleanUrl,\n escapeHtmlEntities,\n} from './helpers.ts';\nimport { other } from './rules.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\nimport type { Tokens } from './Tokens.ts';\nimport type { _Parser } from './Parser.ts';\n\n/**\n * Renderer\n */\nexport class _Renderer<ParserOutput = string, RendererOutput = string> {\n options: MarkedOptions<ParserOutput, RendererOutput>;\n parser!: _Parser<ParserOutput, RendererOutput>; // set by the parser\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n this.options = options || _defaults;\n }\n\n space(token: Tokens.Space): RendererOutput {\n return '' as RendererOutput;\n }\n\n code({ text, lang, escaped }: Tokens.Code): RendererOutput {\n const langString = (lang || '').match(other.notSpaceStart)?.[0];\n\n const code = text.replace(other.endingNewline, '') + '\\n';\n\n if (!langString) {\n return '<pre><code>'\n + (escaped ? code : escapeHtmlEntities(code, true))\n + '</code></pre>\\n' as RendererOutput;\n }\n\n return '<pre><code class=\"language-'\n + escapeHtmlEntities(langString)\n + '\">'\n + (escaped ? code : escapeHtmlEntities(code, true))\n + '</code></pre>\\n' as RendererOutput;\n }\n\n blockquote({ tokens }: Tokens.Blockquote): RendererOutput {\n const body = this.parser.parse(tokens);\n return `<blockquote>\\n${body}</blockquote>\\n` as RendererOutput;\n }\n\n html({ text }: Tokens.HTML | Tokens.Tag): RendererOutput {\n return text as RendererOutput;\n }\n\n def(token: Tokens.Def): RendererOutput {\n return '' as RendererOutput;\n }\n\n heading({ tokens, depth }: Tokens.Heading): RendererOutput {\n return `<h${depth}>${this.parser.parseInline(tokens)}</h${depth}>\\n` as RendererOutput;\n }\n\n hr(token: Tokens.Hr): RendererOutput {\n return '<hr>\\n' as RendererOutput;\n }\n\n list(token: Tokens.List): RendererOutput {\n const ordered = token.ordered;\n const start = token.start;\n\n let body = '';\n for (let j = 0; j < token.items.length; j++) {\n const item = token.items[j];\n body += this.listitem(item);\n }\n\n const type = ordered ? 'ol' : 'ul';\n const startAttr = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n return '<' + type + startAttr + '>\\n' + body + '</' + type + '>\\n' as RendererOutput;\n }\n\n listitem(item: Tokens.ListItem): RendererOutput {\n return `<li>${this.parser.parse(item.tokens)}</li>\\n` as RendererOutput;\n }\n\n checkbox({ checked }: Tokens.Checkbox): RendererOutput {\n return '<input '\n + (checked ? 'checked=\"\" ' : '')\n + 'disabled=\"\" type=\"checkbox\"> ' as RendererOutput;\n }\n\n paragraph({ tokens }: Tokens.Paragraph): RendererOutput {\n return `<p>${this.parser.parseInline(tokens)}</p>\\n` as RendererOutput;\n }\n\n table(token: Tokens.Table): RendererOutput {\n let header = '';\n\n // header\n let cell = '';\n for (let j = 0; j < token.header.length; j++) {\n cell += this.tablecell(token.header[j]);\n }\n header += this.tablerow({ text: cell as ParserOutput });\n\n let body = '';\n for (let j = 0; j < token.rows.length; j++) {\n const row = token.rows[j];\n\n cell = '';\n for (let k = 0; k < row.length; k++) {\n cell += this.tablecell(row[k]);\n }\n\n body += this.tablerow({ text: cell as ParserOutput });\n }\n if (body) body = `<tbody>${body}</tbody>`;\n\n return '<table>\\n'\n + '<thead>\\n'\n + header\n + '</thead>\\n'\n + body\n + '</table>\\n' as RendererOutput;\n }\n\n tablerow({ text }: Tokens.TableRow<ParserOutput>): RendererOutput {\n return `<tr>\\n${text}</tr>\\n` as RendererOutput;\n }\n\n tablecell(token: Tokens.TableCell): RendererOutput {\n const content = this.parser.parseInline(token.tokens);\n const type = token.header ? 'th' : 'td';\n const tag = token.align\n ? `<${type} align=\"${token.align}\">`\n : `<${type}>`;\n return tag + content + `</${type}>\\n` as RendererOutput;\n }\n\n /**\n * span level renderer\n */\n strong({ tokens }: Tokens.Strong): RendererOutput {\n return `<strong>${this.parser.parseInline(tokens)}</strong>` as RendererOutput;\n }\n\n em({ tokens }: Tokens.Em): RendererOutput {\n return `<em>${this.parser.parseInline(tokens)}</em>` as RendererOutput;\n }\n\n codespan({ text }: Tokens.Codespan): RendererOutput {\n return `<code>${escapeHtmlEntities(text, true)}</code>` as RendererOutput;\n }\n\n br(token: Tokens.Br): RendererOutput {\n return '<br>' as RendererOutput;\n }\n\n del({ tokens }: Tokens.Del): RendererOutput {\n return `<del>${this.parser.parseInline(tokens)}</del>` as RendererOutput;\n }\n\n link({ href, title, tokens }: Tokens.Link): RendererOutput {\n const text = this.parser.parseInline(tokens) as string;\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return text as RendererOutput;\n }\n href = cleanHref;\n let out = '<a href=\"' + href + '\"';\n if (title) {\n out += ' title=\"' + (escapeHtmlEntities(title)) + '\"';\n }\n out += '>' + text + '</a>';\n return out as RendererOutput;\n }\n\n image({ href, title, text, tokens }: Tokens.Image): RendererOutput {\n if (tokens) {\n text = this.parser.parseInline(tokens, this.parser.textRenderer) as string;\n }\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return escapeHtmlEntities(text) as RendererOutput;\n }\n href = cleanHref;\n\n let out = `<img src=\"${href}\" alt=\"${escapeHtmlEntities(text)}\"`;\n if (title) {\n out += ` title=\"${escapeHtmlEntities(title)}\"`;\n }\n out += '>';\n return out as RendererOutput;\n }\n\n text(token: Tokens.Text | Tokens.Escape): RendererOutput {\n return 'tokens' in token && token.tokens\n ? this.parser.parseInline(token.tokens) as unknown as RendererOutput\n : ('escaped' in token && token.escaped ? token.text as RendererOutput : escapeHtmlEntities(token.text) as RendererOutput);\n }\n}\n", "import type { Tokens } from './Tokens.ts';\n\n/**\n * TextRenderer\n * returns only the textual part of the token\n */\nexport class _TextRenderer<RendererOutput = string> {\n // no need for block level renderers\n strong({ text }: Tokens.Strong): RendererOutput {\n return text as RendererOutput;\n }\n\n em({ text }: Tokens.Em): RendererOutput {\n return text as RendererOutput;\n }\n\n codespan({ text }: Tokens.Codespan): RendererOutput {\n return text as RendererOutput;\n }\n\n del({ text }: Tokens.Del): RendererOutput {\n return text as RendererOutput;\n }\n\n html({ text }: Tokens.HTML | Tokens.Tag): RendererOutput {\n return text as RendererOutput;\n }\n\n text({ text }: Tokens.Text | Tokens.Escape | Tokens.Tag): RendererOutput {\n return text as RendererOutput;\n }\n\n link({ text }: Tokens.Link): RendererOutput {\n return '' + text as RendererOutput;\n }\n\n image({ text }: Tokens.Image): RendererOutput {\n return '' + text as RendererOutput;\n }\n\n br(): RendererOutput {\n return '' as RendererOutput;\n }\n\n checkbox({ raw }: Tokens.Checkbox): RendererOutput {\n return raw as RendererOutput;\n }\n}\n", "import { _Renderer } from './Renderer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { _defaults } from './defaults.ts';\nimport type { MarkedToken, Token, Tokens } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Parsing & Compiling\n */\nexport class _Parser<ParserOutput = string, RendererOutput = string> {\n options: MarkedOptions<ParserOutput, RendererOutput>;\n renderer: _Renderer<ParserOutput, RendererOutput>;\n textRenderer: _TextRenderer<RendererOutput>;\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n this.options = options || _defaults;\n this.options.renderer = this.options.renderer || new _Renderer<ParserOutput, RendererOutput>();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.renderer.parser = this;\n this.textRenderer = new _TextRenderer<RendererOutput>();\n }\n\n /**\n * Static Parse Method\n */\n static parse<ParserOutput = string, RendererOutput = string>(tokens: Token[], options?: MarkedOptions<ParserOutput, RendererOutput>) {\n const parser = new _Parser<ParserOutput, RendererOutput>(options);\n return parser.parse(tokens);\n }\n\n /**\n * Static Parse Inline Method\n */\n static parseInline<ParserOutput = string, RendererOutput = string>(tokens: Token[], options?: MarkedOptions<ParserOutput, RendererOutput>) {\n const parser = new _Parser<ParserOutput, RendererOutput>(options);\n return parser.parseInline(tokens);\n }\n\n /**\n * Parse Loop\n */\n parse(tokens: Token[]): ParserOutput {\n this.renderer.parser = this;\n let out = '';\n\n for (let i = 0; i < tokens.length; i++) {\n const anyToken = tokens[i];\n\n // Run any renderer extensions\n if (this.options.extensions?.renderers?.[anyToken.type]) {\n const genericToken = anyToken as Tokens.Generic;\n const ret = this.options.extensions.renderers[genericToken.type].call({ parser: this }, genericToken);\n if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'def', 'paragraph', 'text'].includes(genericToken.type)) {\n out += ret || '';\n continue;\n }\n }\n\n const token = anyToken as MarkedToken;\n\n switch (token.type) {\n case 'space': {\n out += this.renderer.space(token);\n break;\n }\n case 'hr': {\n out += this.renderer.hr(token);\n break;\n }\n case 'heading': {\n out += this.renderer.heading(token);\n break;\n }\n case 'code': {\n out += this.renderer.code(token);\n break;\n }\n case 'table': {\n out += this.renderer.table(token);\n break;\n }\n case 'blockquote': {\n out += this.renderer.blockquote(token);\n break;\n }\n case 'list': {\n out += this.renderer.list(token);\n break;\n }\n case 'checkbox': {\n out += this.renderer.checkbox(token);\n break;\n }\n case 'html': {\n out += this.renderer.html(token);\n break;\n }\n case 'def': {\n out += this.renderer.def(token);\n break;\n }\n case 'paragraph': {\n out += this.renderer.paragraph(token);\n break;\n }\n case 'text': {\n out += this.renderer.text(token);\n break;\n }\n\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '' as ParserOutput;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n\n return out as ParserOutput;\n }\n\n /**\n * Parse Inline Tokens\n */\n parseInline(tokens: Token[], renderer: _Renderer<ParserOutput, RendererOutput> | _TextRenderer<RendererOutput> = this.renderer): ParserOutput {\n this.renderer.parser = this;\n let out = '';\n\n for (let i = 0; i < tokens.length; i++) {\n const anyToken = tokens[i];\n\n // Run any renderer extensions\n if (this.options.extensions?.renderers?.[anyToken.type]) {\n const ret = this.options.extensions.renderers[anyToken.type].call({ parser: this }, anyToken);\n if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(anyToken.type)) {\n out += ret || '';\n continue;\n }\n }\n\n const token = anyToken as MarkedToken;\n\n switch (token.type) {\n case 'escape': {\n out += renderer.text(token);\n break;\n }\n case 'html': {\n out += renderer.html(token);\n break;\n }\n case 'link': {\n out += renderer.link(token);\n break;\n }\n case 'image': {\n out += renderer.image(token);\n break;\n }\n case 'checkbox': {\n out += renderer.checkbox(token);\n break;\n }\n case 'strong': {\n out += renderer.strong(token);\n break;\n }\n case 'em': {\n out += renderer.em(token);\n break;\n }\n case 'codespan': {\n out += renderer.codespan(token);\n break;\n }\n case 'br': {\n out += renderer.br(token);\n break;\n }\n case 'del': {\n out += renderer.del(token);\n break;\n }\n case 'text': {\n out += renderer.text(token);\n break;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '' as ParserOutput;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out as ParserOutput;\n }\n}\n", "import { _defaults } from './defaults.ts';\nimport { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, TokensList } from './Tokens.ts';\n\nexport class _Hooks<ParserOutput = string, RendererOutput = string> {\n options: MarkedOptions<ParserOutput, RendererOutput>;\n block?: boolean;\n\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n this.options = options || _defaults;\n }\n\n static passThroughHooks = new Set([\n 'preprocess',\n 'postprocess',\n 'processAllTokens',\n 'emStrongMask',\n ]);\n\n static passThroughHooksRespectAsync = new Set([\n 'preprocess',\n 'postprocess',\n 'processAllTokens',\n ]);\n\n /**\n * Process markdown before marked\n */\n preprocess(markdown: string) {\n return markdown;\n }\n\n /**\n * Process HTML after marked is finished\n */\n postprocess(html: ParserOutput) {\n return html;\n }\n\n /**\n * Process all tokens before walk tokens\n */\n processAllTokens(tokens: Token[] | TokensList) {\n return tokens;\n }\n\n /**\n * Mask contents that should not be interpreted as em/strong delimiters\n */\n emStrongMask(src: string) {\n return src;\n }\n\n /**\n * Provide function to tokenize markdown\n */\n provideLexer(block = this.block) {\n return block ? _Lexer.lex : _Lexer.lexInline;\n }\n\n /**\n * Provide function to parse tokens\n */\n provideParser(block = this.block) {\n return block ? _Parser.parse<ParserOutput, RendererOutput> : _Parser.parseInline<ParserOutput, RendererOutput>;\n }\n}\n", "import { _getDefaults } from './defaults.ts';\nimport { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport { _Hooks } from './Hooks.ts';\nimport { _Renderer } from './Renderer.ts';\nimport { _Tokenizer } from './Tokenizer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { escapeHtmlEntities } from './helpers.ts';\nimport type { MarkedExtension, MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, Tokens, TokensList } from './Tokens.ts';\n\nexport type MaybePromise = void | Promise<void>;\n\ntype UnknownFunction = (...args: unknown[]) => unknown;\ntype GenericRendererFunction = (...args: unknown[]) => string | false;\n\nexport class Marked<ParserOutput = string, RendererOutput = string> {\n defaults = _getDefaults<ParserOutput, RendererOutput>();\n options = this.setOptions;\n\n parse = this.parseMarkdown(true);\n parseInline = this.parseMarkdown(false);\n\n Parser = _Parser<ParserOutput, RendererOutput>;\n Renderer = _Renderer<ParserOutput, RendererOutput>;\n TextRenderer = _TextRenderer<RendererOutput>;\n Lexer = _Lexer;\n Tokenizer = _Tokenizer<ParserOutput, RendererOutput>;\n Hooks = _Hooks<ParserOutput, RendererOutput>;\n\n constructor(...args: MarkedExtension<ParserOutput, RendererOutput>[]) {\n this.use(...args);\n }\n\n /**\n * Run callback for every token\n */\n walkTokens(tokens: Token[] | TokensList, callback: (token: Token) => MaybePromise | MaybePromise[]) {\n let values: MaybePromise[] = [];\n for (const token of tokens) {\n values = values.concat(callback.call(this, token));\n switch (token.type) {\n case 'table': {\n const tableToken = token as Tokens.Table;\n for (const cell of tableToken.header) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n for (const row of tableToken.rows) {\n for (const cell of row) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n }\n break;\n }\n case 'list': {\n const listToken = token as Tokens.List;\n values = values.concat(this.walkTokens(listToken.items, callback));\n break;\n }\n default: {\n const genericToken = token as Tokens.Generic;\n if (this.defaults.extensions?.childTokens?.[genericToken.type]) {\n this.defaults.extensions.childTokens[genericToken.type].forEach((childTokens) => {\n const tokens = genericToken[childTokens].flat(Infinity) as Token[] | TokensList;\n values = values.concat(this.walkTokens(tokens, callback));\n });\n } else if (genericToken.tokens) {\n values = values.concat(this.walkTokens(genericToken.tokens, callback));\n }\n }\n }\n }\n return values;\n }\n\n use(...args: MarkedExtension<ParserOutput, RendererOutput>[]) {\n const extensions: MarkedOptions<ParserOutput, RendererOutput>['extensions'] = this.defaults.extensions || { renderers: {}, childTokens: {} };\n\n args.forEach((pack) => {\n // copy options to new object\n const opts = { ...pack } as MarkedOptions<ParserOutput, RendererOutput>;\n\n // set async to true if it was set to true before\n opts.async = this.defaults.async || opts.async || false;\n\n // ==-- Parse \"addon\" extensions --== //\n if (pack.extensions) {\n pack.extensions.forEach((ext) => {\n if (!ext.name) {\n throw new Error('extension name required');\n }\n if ('renderer' in ext) { // Renderer extensions\n const prevRenderer = extensions.renderers[ext.name];\n if (prevRenderer) {\n // Replace extension with func to run new extension but fall back if false\n extensions.renderers[ext.name] = function(...args) {\n let ret = ext.renderer.apply(this, args);\n if (ret === false) {\n ret = prevRenderer.apply(this, args);\n }\n return ret;\n };\n } else {\n extensions.renderers[ext.name] = ext.renderer;\n }\n }\n if ('tokenizer' in ext) { // Tokenizer Extensions\n if (!ext.level || (ext.level !== 'block' && ext.level !== 'inline')) {\n throw new Error(\"extension level must be 'block' or 'inline'\");\n }\n const extLevel = extensions[ext.level];\n if (extLevel) {\n extLevel.unshift(ext.tokenizer);\n } else {\n extensions[ext.level] = [ext.tokenizer];\n }\n if (ext.start) { // Function to check for start of token\n if (ext.level === 'block') {\n if (extensions.startBlock) {\n extensions.startBlock.push(ext.start);\n } else {\n extensions.startBlock = [ext.start];\n }\n } else if (ext.level === 'inline') {\n if (extensions.startInline) {\n extensions.startInline.push(ext.start);\n } else {\n extensions.startInline = [ext.start];\n }\n }\n }\n }\n if ('childTokens' in ext && ext.childTokens) { // Child tokens to be visited by walkTokens\n extensions.childTokens[ext.name] = ext.childTokens;\n }\n });\n opts.extensions = extensions;\n }\n\n // ==-- Parse \"overwrite\" extensions --== //\n if (pack.renderer) {\n const renderer = this.defaults.renderer || new _Renderer<ParserOutput, RendererOutput>(this.defaults);\n for (const prop in pack.renderer) {\n if (!(prop in renderer)) {\n throw new Error(`renderer '${prop}' does not exist`);\n }\n if (['options', 'parser'].includes(prop)) {\n // ignore options property\n continue;\n }\n const rendererProp = prop as Exclude<keyof _Renderer<ParserOutput, RendererOutput>, 'options' | 'parser'>;\n const rendererFunc = pack.renderer[rendererProp] as GenericRendererFunction;\n const prevRenderer = renderer[rendererProp] as GenericRendererFunction;\n // Replace renderer with func to run extension, but fall back if false\n renderer[rendererProp] = (...args: unknown[]) => {\n let ret = rendererFunc.apply(renderer, args);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n return (ret || '') as RendererOutput;\n };\n }\n opts.renderer = renderer;\n }\n if (pack.tokenizer) {\n const tokenizer = this.defaults.tokenizer || new _Tokenizer<ParserOutput, RendererOutput>(this.defaults);\n for (const prop in pack.tokenizer) {\n if (!(prop in tokenizer)) {\n throw new Error(`tokenizer '${prop}' does not exist`);\n }\n if (['options', 'rules', 'lexer'].includes(prop)) {\n // ignore options, rules, and lexer properties\n continue;\n }\n const tokenizerProp = prop as Exclude<keyof _Tokenizer<ParserOutput, RendererOutput>, 'options' | 'rules' | 'lexer'>;\n const tokenizerFunc = pack.tokenizer[tokenizerProp] as UnknownFunction;\n const prevTokenizer = tokenizer[tokenizerProp] as UnknownFunction;\n // Replace tokenizer with func to run extension, but fall back if false\n // @ts-expect-error cannot type tokenizer function dynamically\n tokenizer[tokenizerProp] = (...args: unknown[]) => {\n let ret = tokenizerFunc.apply(tokenizer, args);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n\n // ==-- Parse Hooks extensions --== //\n if (pack.hooks) {\n const hooks = this.defaults.hooks || new _Hooks<ParserOutput, RendererOutput>();\n for (const prop in pack.hooks) {\n if (!(prop in hooks)) {\n throw new Error(`hook '${prop}' does not exist`);\n }\n if (['options', 'block'].includes(prop)) {\n // ignore options and block properties\n continue;\n }\n const hooksProp = prop as Exclude<keyof _Hooks<ParserOutput, RendererOutput>, 'options' | 'block'>;\n const hooksFunc = pack.hooks[hooksProp] as UnknownFunction;\n const prevHook = hooks[hooksProp] as UnknownFunction;\n if (_Hooks.passThroughHooks.has(prop)) {\n // @ts-expect-error cannot type hook function dynamically\n hooks[hooksProp] = (arg: unknown) => {\n if (this.defaults.async && _Hooks.passThroughHooksRespectAsync.has(prop)) {\n return (async() => {\n const ret = await hooksFunc.call(hooks, arg);\n return prevHook.call(hooks, ret);\n })();\n }\n\n const ret = hooksFunc.call(hooks, arg);\n return prevHook.call(hooks, ret);\n };\n } else {\n // @ts-expect-error cannot type hook function dynamically\n hooks[hooksProp] = (...args: unknown[]) => {\n if (this.defaults.async) {\n return (async() => {\n let ret = await hooksFunc.apply(hooks, args);\n if (ret === false) {\n ret = await prevHook.apply(hooks, args);\n }\n return ret;\n })();\n }\n\n let ret = hooksFunc.apply(hooks, args);\n if (ret === false) {\n ret = prevHook.apply(hooks, args);\n }\n return ret;\n };\n }\n }\n opts.hooks = hooks;\n }\n\n // ==-- Parse WalkTokens extensions --== //\n if (pack.walkTokens) {\n const walkTokens = this.defaults.walkTokens;\n const packWalktokens = pack.walkTokens;\n opts.walkTokens = function(token) {\n let values: MaybePromise[] = [];\n values.push(packWalktokens.call(this, token));\n if (walkTokens) {\n values = values.concat(walkTokens.call(this, token));\n }\n return values;\n };\n }\n\n this.defaults = { ...this.defaults, ...opts };\n });\n\n return this;\n }\n\n setOptions(opt: MarkedOptions<ParserOutput, RendererOutput>) {\n this.defaults = { ...this.defaults, ...opt };\n return this;\n }\n\n lexer(src: string, options?: MarkedOptions<ParserOutput, RendererOutput>) {\n return _Lexer.lex(src, options ?? this.defaults);\n }\n\n parser(tokens: Token[], options?: MarkedOptions<ParserOutput, RendererOutput>) {\n return _Parser.parse<ParserOutput, RendererOutput>(tokens, options ?? this.defaults);\n }\n\n private parseMarkdown(blockType: boolean) {\n type overloadedParse = {\n (src: string, options: MarkedOptions<ParserOutput, RendererOutput> & { async: true }): Promise<ParserOutput>;\n (src: string, options: MarkedOptions<ParserOutput, RendererOutput> & { async: false }): ParserOutput;\n (src: string, options?: MarkedOptions<ParserOutput, RendererOutput> | null): ParserOutput | Promise<ParserOutput>;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const parse: overloadedParse = (src: string, options?: MarkedOptions<ParserOutput, RendererOutput> | null): any => {\n const origOpt = { ...options };\n const opt = { ...this.defaults, ...origOpt };\n\n const throwError = this.onError(!!opt.silent, !!opt.async);\n\n // throw error if an extension set async to true but parse was called with async: false\n if (this.defaults.async === true && origOpt.async === false) {\n return throwError(new Error('marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.'));\n }\n\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n return throwError(new Error('marked(): input parameter is undefined or null'));\n }\n if (typeof src !== 'string') {\n return throwError(new Error('marked(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected'));\n }\n\n if (opt.hooks) {\n opt.hooks.options = opt;\n opt.hooks.block = blockType;\n }\n\n if (opt.async) {\n return (async() => {\n const processedSrc = opt.hooks ? await opt.hooks.preprocess(src) : src;\n const lexer = opt.hooks ? await opt.hooks.provideLexer(blockType) : (blockType ? _Lexer.lex : _Lexer.lexInline);\n const tokens = await lexer(processedSrc, opt);\n const processedTokens = opt.hooks ? await opt.hooks.processAllTokens(tokens) : tokens;\n if (opt.walkTokens) {\n await Promise.all(this.walkTokens(processedTokens, opt.walkTokens));\n }\n const parser = opt.hooks ? await opt.hooks.provideParser(blockType) : (blockType ? _Parser.parse : _Parser.parseInline);\n const html = await parser(processedTokens, opt);\n return opt.hooks ? await opt.hooks.postprocess(html) : html;\n })().catch(throwError);\n }\n\n try {\n if (opt.hooks) {\n src = opt.hooks.preprocess(src) as string;\n }\n const lexer = opt.hooks ? opt.hooks.provideLexer(blockType) : (blockType ? _Lexer.lex : _Lexer.lexInline);\n let tokens = lexer(src, opt);\n if (opt.hooks) {\n tokens = opt.hooks.processAllTokens(tokens);\n }\n if (opt.walkTokens) {\n this.walkTokens(tokens, opt.walkTokens);\n }\n const parser = opt.hooks ? opt.hooks.provideParser(blockType) : (blockType ? _Parser.parse : _Parser.parseInline);\n let html = parser(tokens, opt);\n if (opt.hooks) {\n html = opt.hooks.postprocess(html);\n }\n return html;\n } catch(e) {\n return throwError(e as Error);\n }\n };\n\n return parse;\n }\n\n private onError(silent: boolean, async: boolean) {\n return (e: Error): string | Promise<string> => {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n\n if (silent) {\n const msg = '<p>An error occurred:</p><pre>'\n + escapeHtmlEntities(e.message + '', true)\n + '</pre>';\n if (async) {\n return Promise.resolve(msg);\n }\n return msg;\n }\n\n if (async) {\n return Promise.reject(e);\n }\n throw e;\n };\n }\n}\n", "import { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport { _Tokenizer } from './Tokenizer.ts';\nimport { _Renderer } from './Renderer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { _Hooks } from './Hooks.ts';\nimport { Marked } from './Instance.ts';\nimport {\n _getDefaults,\n changeDefaults,\n _defaults,\n} from './defaults.ts';\nimport type { MarkedExtension, MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, TokensList } from './Tokens.ts';\nimport type { MaybePromise } from './Instance.ts';\n\nconst markedInstance = new Marked();\n\n/**\n * Compiles markdown to HTML asynchronously.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options, having async: true\n * @return Promise of string of compiled HTML\n */\nexport function marked(src: string, options: MarkedOptions & { async: true }): Promise<string>;\n\n/**\n * Compiles markdown to HTML.\n *\n * @param src String of markdown source to be compiled\n * @param options Optional hash of options\n * @return String of compiled HTML. Will be a Promise of string if async is set to true by any extensions.\n */\nexport function marked(src: string, options: MarkedOptions & { async: false }): string;\nexport function marked(src: string, options: MarkedOptions & { async: true }): Promise<string>;\nexport function marked(src: string, options?: MarkedOptions | null): string | Promise<string>;\nexport function marked(src: string, opt?: MarkedOptions | null): string | Promise<string> {\n return markedInstance.parse(src, opt);\n}\n\n/**\n * Sets the default options.\n *\n * @param options Hash of options\n */\nmarked.options =\n marked.setOptions = function(options: MarkedOptions) {\n markedInstance.setOptions(options);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n };\n\n/**\n * Gets the original marked default options.\n */\nmarked.getDefaults = _getDefaults;\n\nmarked.defaults = _defaults;\n\n/**\n * Use Extension\n */\n\nmarked.use = function(...args: MarkedExtension[]) {\n markedInstance.use(...args);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n};\n\n/**\n * Run callback for every token\n */\n\nmarked.walkTokens = function(tokens: Token[] | TokensList, callback: (token: Token) => MaybePromise | MaybePromise[]) {\n return markedInstance.walkTokens(tokens, callback);\n};\n\n/**\n * Compiles markdown to HTML without enclosing `p` tag.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options\n * @return String of compiled HTML\n */\nmarked.parseInline = markedInstance.parseInline;\n\n/**\n * Expose\n */\nmarked.Parser = _Parser;\nmarked.parser = _Parser.parse;\nmarked.Renderer = _Renderer;\nmarked.TextRenderer = _TextRenderer;\nmarked.Lexer = _Lexer;\nmarked.lexer = _Lexer.lex;\nmarked.Tokenizer = _Tokenizer;\nmarked.Hooks = _Hooks;\nmarked.parse = marked;\n\nexport const options = marked.options;\nexport const setOptions = marked.setOptions;\nexport const use = marked.use;\nexport const walkTokens = marked.walkTokens;\nexport const parseInline = marked.parseInline;\nexport const parse = marked;\nexport const parser = _Parser.parse;\nexport const lexer = _Lexer.lex;\nexport { _defaults as defaults, _getDefaults as getDefaults } from './defaults.ts';\nexport { _Lexer as Lexer } from './Lexer.ts';\nexport { _Parser as Parser } from './Parser.ts';\nexport { _Tokenizer as Tokenizer } from './Tokenizer.ts';\nexport { _Renderer as Renderer } from './Renderer.ts';\nexport { _TextRenderer as TextRenderer } from './TextRenderer.ts';\nexport { _Hooks as Hooks } from './Hooks.ts';\nexport { Marked } from './Instance.ts';\nexport type * from './MarkedOptions.ts';\nexport type * from './Tokens.ts';\n", "import DOMPurify from 'dompurify';\nimport { marked } from 'marked';\nimport React from 'react';\n\nmarked.setOptions({\n pedantic: false,\n gfm: true,\n});\n\n/** Renders sanitized Markdown text as HTML. */\nexport function Markdown({ text, className }: { text: string; className?: string }) {\n const html = React.useMemo(() => {\n if (!text) return '';\n const parsed = marked.parse(text, { async: false });\n return DOMPurify.sanitize(typeof parsed === 'string' ? parsed : '');\n }, [text]);\n\n return <div className={className} dangerouslySetInnerHTML={{ __html: html }} />;\n}\n", "import { TimeoutError } from 'ky';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { apiErrorMsg, normalizeTags } from '@/util';\n\nimport * as api from '../api';\nimport { app } from '../globals';\nimport { useTagSuggestions } from '../hooks/useTagSuggestions';\nimport { useBookmarksStore } from '../stores/bookmarksStore';\nimport { TagSuggestionsDropdown } from './TagSuggestionsDropdown';\n\ntype BulkAction = 'read' | 'unread' | 'star' | 'unstar' | 'delete' | 'private' | 'public';\ntype BulkSelection = 'page' | 'all';\n\ninterface Props {\n bcount: number;\n}\n\ntype BulkValidationKey =\n | 'bulkEdit.pleaseAddSelection'\n | 'bulkEdit.pleaseChooseAction'\n | 'bulkEdit.tooManyTags';\n\nfunction disabledReason(\n selection: BulkSelection | null,\n action: BulkAction | null,\n addTags: string,\n removeTags: string,\n bcount: number,\n): BulkValidationKey | null {\n if (selection === null) return 'bulkEdit.pleaseAddSelection';\n if (!action && !addTags.trim() && !removeTags.trim()) return 'bulkEdit.pleaseChooseAction';\n if (bcount > 20000 && addTags.trim().split(/\\s+/).filter(Boolean).length > 10)\n return 'bulkEdit.tooManyTags';\n return null;\n}\n\nfunction navLink<T>(current: T | null, value: T, label: string, onClick: (v: T) => void) {\n return (\n <a\n href=\"#\"\n className={`dib mt1 link${current === value ? ' nav-active' : ' silver hover-alt'}`}\n onClick={(e) => {\n e.preventDefault();\n onClick(value);\n }}\n >\n {label}\n </a>\n );\n}\n\nexport function BulkEdit({ bcount }: Props) {\n const { t } = useTranslation();\n const [visible, setVisible] = useState(false);\n const [selection, setSelection] = useState<BulkSelection | null>(null);\n const [action, setAction] = useState<BulkAction | null>(null);\n const [addTags, setAddTags] = useState('');\n const [removeTags, setRemoveTags] = useState('');\n const [submitting, setSubmitting] = useState(false);\n const [confirmDelete, setConfirmDelete] = useState(false);\n const [confirmPublic, setConfirmPublic] = useState(false);\n const [validationMsg, setValidationMsg] = useState<string | null>(null);\n const [errorFadingOut, setErrorFadingOut] = useState(false);\n const validationTimer = useRef<number | null>(null);\n const fadeTimer = useRef<number | null>(null);\n\n const a = app();\n const suggestEnabled = a.dat.suggestTags === true;\n const bulkFilter = a.dat.filter ?? { tag: 'FilterAll' as const };\n const bulkSharedp = a.dat.sharedp ?? 'all';\n const bulkTags = a.dat.tags ?? [];\n const bulkQuery = a.dat.query ?? null;\n\n const bmarks = useBookmarksStore((s) => s.bmarks);\n const bids = bmarks.map((b) => b.bid);\n const pageCount = bids.length;\n const selectionCount = selection === null ? 0 : selection === 'page' ? pageCount : bcount;\n\n const reason = disabledReason(selection, action, addTags, removeTags, bcount);\n const isVisuallyDisabled = submitting || reason !== null || confirmDelete || confirmPublic;\n\n const {\n tagInputRef: removeTagsRef,\n suggestionState: removeSuggestionState,\n closeSuggestions: closeRemoveSuggestions,\n onTagsChange: onRemoveTagsChange,\n onTagsKeyDown: onRemoveTagsKeyDown,\n onTagsSelect: onRemoveTagsSelect,\n onSuggestionHover: onRemoveSuggestionHover,\n onSuggestionPick: onRemoveSuggestionPick,\n } = useTagSuggestions({\n enabled: suggestEnabled && action !== 'delete',\n tags: removeTags,\n onTagsUpdate: setRemoveTags,\n });\n\n const {\n tagInputRef: addTagsRef,\n suggestionState: addSuggestionState,\n closeSuggestions: closeAddSuggestions,\n onTagsChange: onAddTagsChange,\n onTagsKeyDown: onAddTagsKeyDown,\n onTagsSelect: onAddTagsSelect,\n onSuggestionHover: onAddSuggestionHover,\n onSuggestionPick: onAddSuggestionPick,\n } = useTagSuggestions({\n enabled: suggestEnabled && action !== 'delete',\n tags: addTags,\n onTagsUpdate: setAddTags,\n });\n\n const clearValidationTimers = () => {\n if (validationTimer.current !== null) {\n window.clearTimeout(validationTimer.current);\n validationTimer.current = null;\n }\n if (fadeTimer.current !== null) {\n window.clearTimeout(fadeTimer.current);\n fadeTimer.current = null;\n }\n };\n\n const resetForm = () => {\n setSelection(null);\n setAction(null);\n setAddTags('');\n setRemoveTags('');\n setConfirmDelete(false);\n setConfirmPublic(false);\n setValidationMsg(null);\n setErrorFadingOut(false);\n clearValidationTimers();\n };\n\n useEffect(() => {\n const el = document.getElementById('bulk-edit-toggle');\n if (!el) return;\n const handler = (e: Event) => {\n e.preventDefault();\n resetForm();\n setVisible((v) => !v);\n };\n el.addEventListener('click', handler);\n return () => {\n el.removeEventListener('click', handler);\n };\n }, []);\n\n useEffect(() => {\n const el = document.getElementById('bulk-edit-toggle');\n if (!el) return;\n el.classList.toggle('nav-active', visible);\n el.classList.toggle('silver', !visible);\n }, [visible]);\n\n useEffect(() => {\n setConfirmDelete(false);\n setConfirmPublic(false);\n setValidationMsg(null);\n setErrorFadingOut(false);\n }, [action, selection]);\n\n useEffect(() => {\n return () => {\n clearValidationTimers();\n };\n }, []);\n\n const showValidationMsg = (msg: string) => {\n clearValidationTimers();\n setErrorFadingOut(false);\n setValidationMsg(msg);\n validationTimer.current = window.setTimeout(() => {\n validationTimer.current = null;\n setErrorFadingOut(true);\n fadeTimer.current = window.setTimeout(() => {\n setValidationMsg(null);\n setErrorFadingOut(false);\n fadeTimer.current = null;\n }, 5000);\n }, 3000);\n };\n\n const handleSubmit = async (\n e: React.SyntheticEvent<HTMLFormElement, SubmitEvent>,\n ): Promise<void> => {\n e.preventDefault();\n setValidationMsg(null);\n setErrorFadingOut(false);\n\n const addTagsTrimmed = normalizeTags(addTags);\n const removeTagsTrimmed = normalizeTags(removeTags);\n const r = disabledReason(selection, action, addTagsTrimmed, removeTagsTrimmed, bcount);\n if (r !== null) {\n showValidationMsg(t(r));\n return;\n }\n if (action === 'delete' && !confirmDelete) {\n setConfirmDelete(true);\n return;\n }\n if (action === 'public' && !confirmPublic) {\n setConfirmPublic(true);\n return;\n }\n setConfirmDelete(false);\n setConfirmPublic(false);\n setSubmitting(true);\n try {\n if (selection === null) return;\n const res = await api.bulkEdit(\n selection === 'page'\n ? {\n selection: 'page',\n bids,\n action,\n addTags: addTagsTrimmed,\n removeTags: removeTagsTrimmed,\n selectionCount,\n }\n : {\n selection: 'all',\n filter: bulkFilter,\n sharedp: bulkSharedp,\n tags: bulkTags,\n query: bulkQuery,\n action,\n addTags: addTagsTrimmed,\n removeTags: removeTagsTrimmed,\n selectionCount,\n },\n );\n if (res.ok) {\n window.location.reload();\n } else {\n showValidationMsg(apiErrorMsg(t, res.status, res.bodyText ?? ''));\n }\n } catch (err) {\n if (err instanceof TimeoutError) {\n showValidationMsg(t('error.requestTimedOut'));\n } else {\n showValidationMsg(t('error.networkError'));\n }\n } finally {\n setSubmitting(false);\n }\n };\n\n if (!visible) return null;\n\n const toggleAction = (v: BulkAction) => {\n setAction((cur) => (cur === v ? null : v));\n if (v === 'delete') {\n setAddTags('');\n setRemoveTags('');\n }\n };\n\n return (\n <form\n onSubmit={(e) => {\n void handleSubmit(e);\n }}\n className=\"w-100 mw7 pa2 bulk_bookmark_form mt1\"\n >\n <div className=\"mb2\">\n <div>\n <span className=\"fw7\">{t('bulkEdit.select')}</span>\n {selection !== null && (\n <span className=\"ml2\">\n {selectionCount === 1\n ? t('bulkEdit.oneBookmarkSelected')\n : t('bulkEdit.bookmarksSelected', { count: selectionCount })}\n </span>\n )}\n </div>\n <div>\n {navLink(selection, 'page', t('bulkEdit.thisPage'), setSelection)}\n {' \u2027 '}\n {navLink(selection, 'all', t('bulkEdit.allPages'), setSelection)}\n </div>\n </div>\n\n <div className=\"mb2\">\n <div>\n <span className=\"fw7\">{t('bulkEdit.action')}</span>\n </div>\n <div>\n {navLink(action, 'private', t('bulkEdit.makePrivate'), toggleAction)}\n {' \u2027 '}\n {navLink(action, 'public', t('bulkEdit.makePublic'), toggleAction)}\n {' \u2027 '}\n {navLink(action, 'read', t('bulkEdit.markAsRead'), toggleAction)}\n {' \u2027 '}\n {navLink(action, 'unread', t('bulkEdit.unread'), toggleAction)}\n {' \u2027 '}\n {navLink(action, 'star', t('bulkEdit.addStars'), toggleAction)}\n {' \u2027 '}\n {navLink(action, 'unstar', t('bulkEdit.removeStars'), toggleAction)}\n {' \u2027 '}\n {navLink(action, 'delete', t('delete'), toggleAction)}\n </div>\n </div>\n\n <div className=\"mb2\">\n <div>\n <span className={`fw7${normalizeTags(removeTags) ? ' nav-active' : ''}`}>\n {t('bulkEdit.removeTags')}\n </span>\n </div>\n <div className=\"relative\">\n <input\n ref={removeTagsRef}\n type=\"text\"\n className={`tags w-100 mb1 pt1 edit_form_input${action === 'delete' ? ' o-50 not-allowed' : ''}`}\n disabled={action === 'delete'}\n autoComplete=\"off\"\n autoCapitalize=\"off\"\n value={removeTags}\n onChange={onRemoveTagsChange}\n onKeyDown={onRemoveTagsKeyDown}\n onClick={onRemoveTagsSelect}\n onSelect={onRemoveTagsSelect}\n onBlur={() => {\n window.setTimeout(() => {\n closeRemoveSuggestions();\n }, 0);\n }}\n />\n {removeSuggestionState != null ? (\n <TagSuggestionsDropdown\n suggestionState={removeSuggestionState}\n onHover={onRemoveSuggestionHover}\n onPick={onRemoveSuggestionPick}\n />\n ) : null}\n </div>\n </div>\n\n <div className=\"mb2\">\n <div>\n <span className={`fw7${normalizeTags(addTags) ? ' nav-active' : ''}`}>\n {t('bulkEdit.addTags')}\n </span>\n </div>\n <div className=\"relative\">\n <input\n ref={addTagsRef}\n type=\"text\"\n className={`tags w-100 mb1 pt1 edit_form_input${action === 'delete' ? ' o-50 not-allowed' : ''}`}\n disabled={action === 'delete'}\n autoComplete=\"off\"\n autoCapitalize=\"off\"\n value={addTags}\n onChange={onAddTagsChange}\n onKeyDown={onAddTagsKeyDown}\n onClick={onAddTagsSelect}\n onSelect={onAddTagsSelect}\n onBlur={() => {\n window.setTimeout(() => {\n closeAddSuggestions();\n }, 0);\n }}\n />\n {addSuggestionState != null ? (\n <TagSuggestionsDropdown\n suggestionState={addSuggestionState}\n onHover={onAddSuggestionHover}\n onPick={onAddSuggestionPick}\n />\n ) : null}\n </div>\n </div>\n\n <div className=\"flex items-center\">\n <button\n type=\"submit\"\n disabled={submitting || confirmDelete || confirmPublic}\n className={`mr2 pv1 ph2 thm-text-primary ba thm-border-default rdim${isVisuallyDisabled ? ' thm-bg-disabled not-allowed' : ' thm-bg-secondary pointer'}`}\n onClick={() => {\n if (reason !== null) showValidationMsg(t(reason));\n }}\n >\n {submitting ? t('bulkEdit.submitting') : t('bulkEdit.submit')}\n </button>{' '}\n <button\n type=\"button\"\n className=\"pv1 ph2 thm-text-primary ba thm-border-default thm-bg-secondary pointer rdim\"\n onClick={() => {\n resetForm();\n setVisible(false);\n }}\n >\n {t('cancel')}\n </button>\n {validationMsg != null && (\n <span\n className=\"thm-text-error f6 ml2\"\n style={{\n opacity: errorFadingOut ? 0 : 1,\n transition: errorFadingOut ? 'opacity 5s' : 'none',\n }}\n >\n {validationMsg}\n </span>\n )}\n {confirmDelete && (\n <span className=\"f6 ml2\">\n <span className=\"mr2\">\n {selectionCount === 1\n ? t('bulkEdit.destroyOne')\n : t('bulkEdit.destroyMany', { count: selectionCount })}\n </span>\n <span className=\"nowrap\">\n <button\n type=\"button\"\n onClick={() => {\n setConfirmDelete(false);\n }}\n >\n {t('cancel')}\n </button>\n {' / '}\n <button type=\"submit\" className=\"thm-text-error\">\n {t('destroy')}\n </button>\n </span>\n </span>\n )}\n {confirmPublic && (\n <span className=\"f6 ml2\">\n <span className=\"mr2\">\n {selectionCount === 1\n ? t('bulkEdit.publicOne')\n : t('bulkEdit.publicMany', { count: selectionCount })}\n </span>\n <span className=\"nowrap\">\n <button\n type=\"button\"\n onClick={() => {\n setConfirmPublic(false);\n }}\n >\n {t('cancel')}\n </button>\n {' / '}\n <button type=\"submit\" className=\"thm-text-error\">\n {t('bulkEdit.makePublic')}\n </button>\n </span>\n </span>\n )}\n </div>\n </form>\n );\n}\n", "import React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { app, fromNow, shdatetime } from '../globals';\nimport type { Note } from '../types';\nimport { fromNullableStr } from '../util';\n\nfunction toTextareaPreview(input: string) {\n const lines = input.split('\\n');\n return (\n <>\n {lines[0]}\n {lines.slice(1).map((x, idx) => (\n <React.Fragment key={idx}>\n <br />\n {x}\n </React.Fragment>\n ))}\n </>\n );\n}\n\n/** Renders a list of note summaries with links to individual notes. */\nexport function NList({ initial }: { initial: Note[] }) {\n const { t } = useTranslation();\n const a = app();\n const linkToFilterSingle = (slug: string) => `${fromNullableStr(a.userR)}/notes/${slug}`;\n\n return (\n <div>\n {initial.map((note) => {\n const fromNowVal = React.useMemo(\n () => fromNow(a.lang, note.created),\n [a.lang, note.created],\n );\n return (\n <div\n key={note.id}\n id={String(note.id)}\n className={`note w-100 mw7 pa1 mb2${note.shared ? '' : ' private'}`}\n >\n <div className=\"display\">\n <a href={linkToFilterSingle(note.slug)} className=\"link f5 lh-title\">\n {note.title === '' ? t('noTitle') : note.title}\n </a>\n <br />\n <div className=\"description mt1 thm-text-secondary\">\n {toTextareaPreview(note.text.slice(0, 200))}\n </div>\n <a\n className=\"link f7 dib thm-text-tertiary w4\"\n data-created={note.created}\n title={shdatetime(a.lang, note.created)}\n href={linkToFilterSingle(note.slug)}\n >\n {fromNowVal}\n </a>\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n", "import { TimeoutError } from 'ky';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { destroyNote, editNote } from '../api';\nimport { app, closeWindow, fromNow, setFocus, shdatetime } from '../globals';\nimport type { Note } from '../types';\nimport { apiErrorMsg, curQuerystring, fromNullableStr, lookupQueryStringValue } from '../util';\nimport { Markdown } from './Markdown';\n\nfunction toTextarea(input: string) {\n const lines = input.split('\\n');\n return (\n <>\n {lines[0]}\n {lines.slice(1).map((x, idx) => (\n <React.Fragment key={idx}>\n <br />\n {x}\n </React.Fragment>\n ))}\n </>\n );\n}\n\n/** Displays a single note with inline editing and deletion, used in the popup window. */\nexport function NNote({ initial }: { initial: Note }) {\n const { t } = useTranslation();\n const a = app();\n\n const [note, setNote] = React.useState<Note>(initial);\n const [editNoteState, setEditNoteState] = React.useState<Note>(initial);\n const [deleteAsk, setDeleteAsk] = React.useState(false);\n const [edit, setEdit] = React.useState(initial.id <= 0);\n const [destroyed, setDestroyed] = React.useState(false);\n const [apiError, setApiError] = React.useState<string | null>(null);\n const fromNowVal = fromNow(a.lang, note.created);\n\n const notetextid = `${note.id.toString()}_text`;\n\n function startEdit(next: boolean) {\n setEditNoteState(note);\n setEdit(next);\n const qs = curQuerystring();\n const q = lookupQueryStringValue(qs, 'next');\n if (!next && q === 'closeWindow') closeWindow(window);\n else if (next) setFocus(notetextid);\n }\n\n async function onDestroy() {\n try {\n const res = await destroyNote(note.id);\n if (!res.ok) {\n setApiError(apiErrorMsg(t, res.status, res.bodyText));\n return;\n }\n setDestroyed(true);\n } catch (err) {\n setApiError(\n err instanceof TimeoutError ? t('error.requestTimedOut') : t('error.networkError'),\n );\n }\n }\n\n const onSubmit = async (e: React.SyntheticEvent<HTMLFormElement, SubmitEvent>): Promise<void> => {\n e.preventDefault();\n setApiError(null);\n try {\n const res = await editNote(editNoteState);\n if (res.ok && res.status >= 200 && res.status < 300) {\n const qs = curQuerystring();\n const next = lookupQueryStringValue(qs, 'next');\n const ref = document.referrer;\n const org = window.location.origin;\n\n if (next === 'closeWindow') closeWindow(window);\n else if (next === 'back') {\n if (ref.startsWith(org)) window.location.href = ref;\n else window.location.href = org;\n } else if (editNoteState.id === 0) {\n window.location.href = fromNullableStr(a.noteR);\n } else {\n setNote(editNoteState);\n setEdit(false);\n }\n } else {\n setApiError(apiErrorMsg(t, res.status, res.bodyText));\n }\n } catch (err) {\n setApiError(\n err instanceof TimeoutError ? t('error.requestTimedOut') : t('error.networkError'),\n );\n }\n };\n\n if (destroyed) return <p className=\"thm-text-error\">{t('note.killed')}</p>;\n\n return (\n <div id={String(note.id)} className=\"note w-100 mw7 pa1 mb2\">\n {apiError ? <div className=\"alert alert-err mb2\">{apiError}</div> : null}\n {!edit ? (\n <>\n <div className=\"display\">\n <div className=\"link f5 lh-title\">{note.title === '' ? t('noTitle') : note.title}</div>\n <br />\n {note.isMarkdown ? (\n <div className=\"description mt1\">\n <Markdown text={note.text} />\n </div>\n ) : (\n <div className=\"description mt1 thm-text-secondary\">{toTextarea(note.text)}</div>\n )}\n <div className=\"link f7 mt2 dib thm-text-tertiary w4\">\n <span data-created={note.created} title={shdatetime(a.lang, note.created)}>\n {fromNowVal}\n </span>\n {' - '}\n <span className=\"thm-text-tertiary\">\n {note.shared ? t('filter.public') : t('filter.private')}\n </span>\n </div>\n </div>\n\n {a.dat.isowner ? (\n <div className=\"edit_links db mt3\">\n <button\n type=\"button\"\n onClick={() => {\n startEdit(true);\n }}\n className=\"edit thm-text-muted thm-hover-link-color\"\n >\n {t('edit')} \n </button>\n <div className=\"delete_link di\">\n <button\n type=\"button\"\n onClick={() => {\n setDeleteAsk(true);\n }}\n className={`delete thm-text-muted thm-hover-link-color${deleteAsk ? ' dn' : ''}`}\n >\n {t('delete')}\n </button>\n <span className={`confirm thm-text-error${!deleteAsk ? ' dn' : ''}`}>\n <button\n type=\"button\"\n onClick={() => {\n setDeleteAsk(false);\n }}\n >\n {t('cancel')} / \n </button>\n <button type=\"button\" onClick={() => void onDestroy()} className=\"thm-text-error\">\n {t('destroy')}\n </button>\n </span>\n </div>\n </div>\n ) : null}\n </>\n ) : (\n <form\n onSubmit={(e) => {\n void onSubmit(e);\n }}\n >\n <p className=\"mt2 mb1\">{t('note.titleLabel')}</p>\n <input\n type=\"text\"\n className=\"title w-100 mb1 pt1 edit_form_input\"\n name=\"title\"\n value={editNoteState.title}\n onChange={(e) => {\n setEditNoteState((x) => ({ ...x, title: e.target.value }));\n }}\n autoFocus={editNoteState.title === ''}\n />\n <br />\n <p className=\"mt2 mb1\">{t('note.descriptionLabel')}</p>\n <textarea\n id={notetextid}\n className=\"description w-100 mb1 pt1 edit_form_input\"\n name=\"text\"\n rows={25}\n value={editNoteState.text}\n onChange={(e) => {\n setEditNoteState((x) => ({ ...x, text: e.target.value }));\n }}\n />\n <div className=\"edit_form_checkboxes mb3\">\n <input\n type=\"checkbox\"\n className=\"is-markdown pointer\"\n id=\"edit_ismarkdown\"\n name=\"ismarkdown\"\n checked={editNoteState.isMarkdown}\n onChange={(e) => {\n setEditNoteState((x) => ({ ...x, isMarkdown: e.target.checked }));\n }}\n />{' '}\n <label htmlFor=\"edit_ismarkdown\" className=\"mr2\">\n {t('note.useMarkdown')}\n </label>\n <br />\n </div>\n <div className=\"edit_form_checkboxes mb3\">\n <input\n type=\"checkbox\"\n className=\"is-markdown pointer\"\n id=\"edit_shared\"\n name=\"shared\"\n checked={editNoteState.shared}\n onChange={(e) => {\n setEditNoteState((x) => ({ ...x, shared: e.target.checked }));\n }}\n />{' '}\n <label htmlFor=\"edit_shared\" className=\"mr2\">\n {t('note.publicLabel')}\n </label>\n <br />\n </div>\n <input\n type=\"submit\"\n className=\"mr1 pv1 ph2 thm-text-primary ba thm-border-default thm-bg-secondary pointer rdim\"\n value={t('save')}\n />{' '}\n <input\n type=\"reset\"\n className=\"pv1 ph2 thm-text-primary ba thm-border-default thm-bg-secondary pointer rdim\"\n value={t('cancel')}\n onClick={() => {\n startEdit(false);\n }}\n />\n </form>\n )}\n </div>\n );\n}\n", "import React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { getTagCloud, updateTagCloudMode } from '../api';\nimport { app } from '../globals';\nimport { useTagCloudStore } from '../stores/tagCloudStore';\nimport {\n isExpanded,\n setExpanded,\n type TagCloud,\n type TagCloudModeBrowse,\n type TagCloudModeF,\n tagCloudModeFromF,\n type TagCloudModeRelated,\n} from '../types';\nimport { encodeTag, fromNullableStr } from '../util';\n\n/** Displays the tag cloud, with controls to filter by top tags, frequency, or related tags. */\nexport function TagCloud({ initialMode }: { initialMode: TagCloudModeF }) {\n const { t } = useTranslation();\n const mode = useTagCloudStore((s) => s.mode);\n const tagcloud = useTagCloudStore((s) => s.tagcloud);\n const setMode = useTagCloudStore((s) => s.setMode);\n const setTagCloud = useTagCloudStore((s) => s.setTagCloud);\n\n React.useEffect(() => {\n setMode(initialMode);\n }, [initialMode]);\n\n React.useEffect(() => {\n async function fetchTagCloud(m: TagCloudModeF) {\n if (m.kind === 'none') return;\n const tc = await getTagCloud(tagCloudModeFromF(m));\n setTagCloud(tc ?? {});\n }\n void fetchTagCloud(mode);\n }, [mode, setTagCloud]);\n\n if (mode.kind === 'none') return <div className=\"tag_cloud\" />;\n\n const makeLbMode = (n: number): TagCloudModeBrowse => ({\n kind: 'lowerBound',\n expanded: isExpanded(mode),\n value: n,\n });\n\n const relatedTags =\n mode.kind === 'related' || mode.kind === 'relatedLowerBound' ? mode.value : [];\n const makeRelatedMode = (): TagCloudModeRelated => ({\n kind: 'related',\n expanded: isExpanded(mode),\n value: relatedTags,\n });\n const makeRelatedLbMode = (lb: number): TagCloudModeRelated => ({\n kind: 'relatedLowerBound',\n expanded: isExpanded(mode),\n value: relatedTags,\n lowerBound: lb,\n });\n\n async function onExpanded(expanded: boolean) {\n const next = setExpanded(mode, expanded);\n setMode(next);\n if (app().dat.isowner) {\n await updateTagCloudMode(tagCloudModeFromF(next));\n }\n }\n\n async function onChangeBrowse(next: TagCloudModeBrowse) {\n const isActive =\n (next.kind === 'top' && mode.kind === 'top') ||\n (next.kind === 'lowerBound' && mode.kind === 'lowerBound' && mode.value === next.value);\n if (isActive) {\n await onExpanded(!isExpanded(mode));\n } else {\n setMode(setExpanded(next, true));\n }\n }\n\n function onChangeRelated(next: TagCloudModeRelated) {\n const isActive =\n (next.kind === 'related' && mode.kind === 'related') ||\n (next.kind === 'relatedLowerBound' &&\n mode.kind === 'relatedLowerBound' &&\n mode.lowerBound === next.lowerBound);\n if (isActive) {\n void onExpanded(!isExpanded(mode));\n } else {\n setMode(setExpanded(next, true));\n }\n }\n\n const isTagCloudModeRelated = mode.kind === 'related' || mode.kind === 'relatedLowerBound';\n const activeLb = mode.kind === 'relatedLowerBound' ? mode.lowerBound : 0;\n\n return (\n <div className=\"tag_cloud mv3\">\n <div className=\"tag_cloud_header mb2\">\n {isTagCloudModeRelated ? (\n <>\n <button\n type=\"button\"\n className={`pa1 f7 link thm-hover-link-color mr1${mode.kind === 'related' ? ' b' : ''}`}\n title={t('tagCloud.topTagsTitle')}\n onClick={() => {\n onChangeRelated(makeRelatedMode());\n }}\n >\n {t('tagCloud.relatedTags')}\n </button>\n {(\n [\n [1, 'tagCloud.allTitle'],\n [2, 'tagCloud.min2Title'],\n [5, 'tagCloud.min5Title'],\n [10, 'tagCloud.min10Title'],\n [20, 'tagCloud.min20Title'],\n ] as const\n ).map(([lb, titleKey]) => (\n <React.Fragment key={lb}>\n {lb !== 1 && '\u2027'}\n <button\n type=\"button\"\n className={`pa1 f7 link thm-hover-link-color${lb === 1 ? ' ml2' : ''}${activeLb === lb ? ' b' : ''}`}\n title={t(titleKey)}\n onClick={() => {\n onChangeRelated(makeRelatedLbMode(lb));\n }}\n >\n {lb === 1 ? t('filter.all') : lb}\n </button>\n </React.Fragment>\n ))}\n </>\n ) : (\n <>\n <button\n type=\"button\"\n className={`pa1 f7 link thm-hover-link-color mr1${mode.kind === 'top' ? ' b' : ''}`}\n title={t('tagCloud.topTagsTitle')}\n onClick={() => void onChangeBrowse({ kind: 'top', expanded: isExpanded(mode) })}\n >\n {t('tagCloud.topTags')}\n </button>\n {(\n [\n [1, 'tagCloud.allTitle'],\n [2, 'tagCloud.min2Title'],\n [5, 'tagCloud.min5Title'],\n [10, 'tagCloud.min10Title'],\n [20, 'tagCloud.min20Title'],\n ] as const\n ).map(([n, titleKey]) => (\n <React.Fragment key={n}>\n {n !== 1 && '\u2027'}\n <button\n type=\"button\"\n className={`pa1 f7 link thm-hover-link-color${n === 1 ? ' ml2' : ''}${mode.kind === 'lowerBound' && mode.value === n ? ' b' : ''}`}\n title={t(titleKey)}\n onClick={() => void onChangeBrowse(makeLbMode(n))}\n >\n {n === 1 ? t('filter.all') : n}\n </button>\n </React.Fragment>\n ))}\n </>\n )}\n <button\n type=\"button\"\n className=\"pa1 ml2 f7 link thm-text-faded thm-hover-link-color\"\n onClick={() => void onExpanded(!isExpanded(mode))}\n >\n {isExpanded(mode) ? t('tagCloud.hide') : t('tagCloud.show')}\n </button>\n </div>\n\n {isExpanded(mode) ? (\n <div className=\"tag_cloud_body\">\n {renderLinks(isTagCloudModeRelated ? mode.value : [], tagcloud)}\n </div>\n ) : null}\n </div>\n );\n}\n\nfunction renderLinks(curtags: string[], tagcloud: TagCloud) {\n const a = app();\n const cur = curtags.map((tag) => tag.toLowerCase());\n\n const linkToFilterTag = (rest: string) =>\n `${fromNullableStr(a.userR)}${rest === '' ? '' : `/t:${rest}`}`;\n\n const tagCounts = Object.values(tagcloud);\n const cMin = tagCounts.length ? Math.min(...tagCounts) : 1;\n const cMax = tagCounts.length ? Math.max(...tagCounts) : 1;\n\n return Object.entries(tagcloud)\n .sort((x, y) => x[0].toLowerCase().localeCompare(y[0].toLowerCase()))\n .map(([tag, c]) => {\n const kLower = tag.toLowerCase();\n const fontsize = rescale((x) => Math.log(1.0 + x), c, cMin, cMax, 100.0, 133.0);\n const opacity = rescale((x) => Math.log(1.0 + x), c, cMin, cMax, 0.6, 1.0);\n const style: React.CSSProperties = { fontSize: `${fontsize.toString()}%`, opacity };\n\n const includeExcludeLink =\n cur.length === 0 ? null : !cur.includes(kLower) ? (\n <a\n href={linkToFilterTag(cur.concat([kLower]).map(encodeTag).join('+'))}\n className=\"link mr2 tag-include\"\n >\n \u2295\n </a>\n ) : (\n <a\n href={linkToFilterTag(\n cur\n .filter((t) => t !== kLower)\n .map(encodeTag)\n .join('+'),\n )}\n className=\"link mr2 tag-exclude\"\n >\n \u2296\n </a>\n );\n\n return (\n <React.Fragment key={tag}>\n <a href={linkToFilterTag(encodeTag(tag))} className=\"link tag mr1\" style={style}>\n {tag}\n </a>\n {includeExcludeLink}\n </React.Fragment>\n );\n });\n}\n\n/** Rescales a value v in the range [n, m] to a value in the range [l, h] using a function f.\n * @param f - The function to apply to the value.\n * @param v - The value to rescale.\n * @param n - The minimum of the input range.\n * @param m - The maximum of the input range.\n * @param l - The minimum of the output range.\n * @param h - The maximum of the output range.\n * @returns The rescaled value.\n */\nfunction rescale(\n f: (x: number) => number,\n v: number,\n n: number,\n m: number,\n l: number,\n h: number,\n): number {\n const denom = f(m - n);\n const ratio = m - n < 0.01 || denom === 0 ? 1.0 : f(v - n) / denom;\n return ratio * (h - l) + l;\n}\n", "import { create } from 'zustand';\n\nimport type { TagCloud, TagCloudModeF } from '../types';\n\nexport type TagCloudState = {\n mode: TagCloudModeF;\n tagcloud: TagCloud;\n setMode: (mode: TagCloudModeF) => void;\n setTagCloud: (tagcloud: TagCloud) => void;\n};\n\nexport const useTagCloudStore = create<TagCloudState>((set) => ({\n mode: { kind: 'none' },\n tagcloud: {},\n setMode: (mode) => {\n set({ mode });\n },\n setTagCloud: (tagcloud) => {\n set({ tagcloud });\n },\n}));\n", "/** User's preferred color scheme. */\nexport type ColorSchemePreference = 'light' | 'dark';\n\n/** Unique identifier for a bookmark. */\nexport type BookmarkId = number;\n\nexport type Bookmark = {\n /** The bookmarked URL. */\n url: string;\n /** Display title of the bookmark. */\n title: string;\n /** Optional user-provided description. */\n description: string;\n /** Space-separated list of tags. */\n tags: string;\n /** Whether the bookmark is private (not visible to others). */\n private: boolean;\n /** Whether the bookmark is marked for later reading. */\n toread: boolean;\n /** Whether the bookmark should be archived (request). */\n archiveRequested?: boolean | null;\n /** Database ID of the bookmark. */\n bid: BookmarkId;\n /** URL-friendly slug for the bookmark. */\n slug: string;\n /** Whether the bookmark is starred. */\n selected: boolean;\n /** ISO 8601 creation timestamp. */\n time: string;\n /** URL of the archived copy, or null if not archived. */\n archiveUrl: string | null;\n};\n\n/** Unique identifier for a note. */\nexport type NoteId = number;\n/** URL-friendly slug for a note. */\nexport type NoteSlug = string;\n\nexport type Note = {\n /** Database ID of the note. */\n id: NoteId;\n /** URL-friendly slug for the note. */\n slug: NoteSlug;\n /** Display title of the note. */\n title: string;\n /** Raw text content of the note. */\n text: string;\n /** Character length of the note text. */\n length: number;\n /** Whether the note body should be rendered as Markdown. */\n isMarkdown: boolean;\n /** Whether the note is publicly visible. */\n shared: boolean;\n /** ISO 8601 creation timestamp. */\n created: string;\n /** ISO 8601 last-updated timestamp. */\n updated: string;\n};\n\nexport type Filter =\n | { tag: 'FilterAll' }\n | { tag: 'FilterUnread' }\n | { tag: 'FilterUntagged' }\n | { tag: 'FilterStarred' }\n | { tag: 'FilterSingle'; contents: string };\n\nexport type AccountSettings = {\n /** Whether bookmarks are archived by default. */\n archiveDefault: boolean;\n /** Whether new bookmarks are private by default. */\n privateDefault: boolean;\n /** Whether tag suggestions are enabled. */\n suggestTags: boolean;\n /** Whether the account is locked to private-only mode. */\n privacyLock: boolean;\n /** Whether the tag cloud is visible to non-authenticated visitors. */\n publicTagCloud: boolean;\n /** Whether the archive backend is enabled. */\n archiveBackendEnabled: boolean;\n /** The user's preferred language (null means server default). */\n language: string | null;\n};\n\n/** A single tag suggestion with its usage count. */\nexport type TSuggestion = {\n term: string;\n count: number;\n};\n\n/** Request payload for fetching tag suggestions based on a query and current tags. */\nexport type TagSuggestionRequest = {\n query: string;\n currentTags: string[];\n};\n\n/** Response payload containing a list of tag suggestions. */\nexport type TagSuggestionResponse = {\n suggestions: TSuggestion[];\n};\n\nexport type BulkAction = 'read' | 'unread' | 'star' | 'unstar' | 'delete' | 'private' | 'public';\nexport type SharedP = 'all' | 'public' | 'private';\n\ntype BulkEditRequestBase = {\n action: BulkAction | null;\n addTags: string;\n removeTags: string;\n selectionCount: number;\n};\n\nexport type BulkEditRequest =\n | (BulkEditRequestBase & { selection: 'page'; bids: number[] })\n | (BulkEditRequestBase & {\n selection: 'all';\n filter: Filter;\n sharedp: SharedP;\n tags: string[];\n query: string | null;\n });\n\nexport type BulkEditResponse = {\n ok: boolean;\n status: number;\n bodyText?: string;\n data?: { editedCount: number };\n};\n\n/** Raw tag cloud mode as stored/sent by the server. */\nexport type TagCloudMode = {\n /** The mode name (e.g. 'top', 'lowerBound', 'related', 'none'). */\n mode: string;\n /** Mode-specific parameter value. */\n value: unknown;\n /** Whether the tag cloud panel is expanded. */\n expanded: boolean;\n /** Minimum bookmark count for related tags (only used in 'related' mode). */\n lowerBound?: number;\n};\n\n/** Map of tag name to usage count. */\nexport type TagCloud = Record<string, number>;\n\n/** Discriminated union representing the tag cloud filter mode. */\nexport type TagCloudModeF =\n | { kind: 'top'; expanded: boolean }\n | { kind: 'lowerBound'; expanded: boolean; value: number }\n | { kind: 'related'; expanded: boolean; value: string[] }\n | { kind: 'relatedLowerBound'; expanded: boolean; value: string[]; lowerBound: number }\n | { kind: 'none' };\n\nexport type TagCloudModeBrowse = Extract<TagCloudModeF, { kind: 'top' | 'lowerBound' }>;\nexport type TagCloudModeRelated = Extract<TagCloudModeF, { kind: 'related' | 'relatedLowerBound' }>;\n\nexport function tagCloudModeToF(mode: TagCloudMode): TagCloudModeF {\n switch (mode.mode) {\n case 'top':\n return { kind: 'top', expanded: mode.expanded };\n case 'lowerBound': {\n const n = typeof mode.value === 'number' ? mode.value : Number(mode.value);\n return Number.isFinite(n)\n ? { kind: 'lowerBound', expanded: mode.expanded, value: n }\n : { kind: 'none' };\n }\n case 'related': {\n const s = typeof mode.value === 'string' ? mode.value : '';\n const tags = s ? s.split(' ') : [];\n return { kind: 'related', expanded: mode.expanded, value: tags };\n }\n case 'relatedLowerBound': {\n const s = typeof mode.value === 'string' ? mode.value : '';\n const tags = s ? s.split(' ') : [];\n const lowerBound =\n typeof mode.lowerBound === 'number' && mode.lowerBound > 0 ? mode.lowerBound : 1;\n return { kind: 'relatedLowerBound', expanded: mode.expanded, value: tags, lowerBound };\n }\n default:\n return { kind: 'none' };\n }\n}\n\nexport function tagCloudModeFromF(mode: TagCloudModeF): TagCloudMode {\n switch (mode.kind) {\n case 'top':\n return { mode: 'top', value: null, expanded: mode.expanded };\n case 'lowerBound':\n return { mode: 'lowerBound', value: mode.value, expanded: mode.expanded };\n case 'related':\n return { mode: 'related', value: mode.value.join(' '), expanded: mode.expanded };\n case 'relatedLowerBound':\n return {\n mode: 'relatedLowerBound',\n value: mode.value.join(' '),\n expanded: mode.expanded,\n lowerBound: mode.lowerBound,\n };\n case 'none':\n return { mode: 'none', value: '', expanded: false };\n }\n}\n\nexport function isExpanded(mode: TagCloudModeF): boolean {\n return mode.kind === 'none' ? false : mode.expanded;\n}\n\nexport function setExpanded(mode: TagCloudModeF, expanded: boolean): TagCloudModeF {\n return mode.kind === 'none' ? mode : { ...mode, expanded };\n}\n"], + "mappings": "yhDAAA,IAAAA,GAAAC,GAAAC,GAAA,cAWA,IAAIC,GAAqB,OAAO,IAAI,4BAA4B,EAC9DC,GAAoB,OAAO,IAAI,cAAc,EAC7CC,GAAsB,OAAO,IAAI,gBAAgB,EACjDC,GAAyB,OAAO,IAAI,mBAAmB,EACvDC,GAAsB,OAAO,IAAI,gBAAgB,EACjDC,GAAsB,OAAO,IAAI,gBAAgB,EACjDC,GAAqB,OAAO,IAAI,eAAe,EAC/CC,GAAyB,OAAO,IAAI,mBAAmB,EACvDC,GAAsB,OAAO,IAAI,gBAAgB,EACjDC,GAAkB,OAAO,IAAI,YAAY,EACzCC,GAAkB,OAAO,IAAI,YAAY,EACzCC,GAAsB,OAAO,IAAI,gBAAgB,EACjDC,GAAwB,OAAO,SACjC,SAASC,GAAcC,EAAe,CACpC,OAAaA,IAAT,MAAuC,OAAOA,GAApB,SAA0C,MACxEA,EACGF,IAAyBE,EAAcF,EAAqB,GAC7DE,EAAc,YAAY,EACN,OAAOA,GAAtB,WAAsCA,EAAgB,KAC/D,CACA,IAAIC,GAAuB,CACvB,UAAW,UAAY,CACrB,MAAO,EACT,EACA,mBAAoB,UAAY,CAAC,EACjC,oBAAqB,UAAY,CAAC,EAClC,gBAAiB,UAAY,CAAC,CAChC,EACAC,GAAS,OAAO,OAChBC,GAAc,CAAC,EACjB,SAASC,GAAUC,EAAOC,EAASC,EAAS,CAC1C,KAAK,MAAQF,EACb,KAAK,QAAUC,EACf,KAAK,KAAOH,GACZ,KAAK,QAAUI,GAAWN,EAC5B,CACAG,GAAU,UAAU,iBAAmB,CAAC,EACxCA,GAAU,UAAU,SAAW,SAAUI,EAAcC,EAAU,CAC/D,GACe,OAAOD,GAApB,UACe,OAAOA,GAAtB,YACQA,GAAR,KAEA,MAAM,MACJ,wGACF,EACF,KAAK,QAAQ,gBAAgB,KAAMA,EAAcC,EAAU,UAAU,CACvE,EACAL,GAAU,UAAU,YAAc,SAAUK,EAAU,CACpD,KAAK,QAAQ,mBAAmB,KAAMA,EAAU,aAAa,CAC/D,EACA,SAASC,IAAiB,CAAC,CAC3BA,GAAe,UAAYN,GAAU,UACrC,SAASO,GAAcN,EAAOC,EAASC,EAAS,CAC9C,KAAK,MAAQF,EACb,KAAK,QAAUC,EACf,KAAK,KAAOH,GACZ,KAAK,QAAUI,GAAWN,EAC5B,CACA,IAAIW,GAA0BD,GAAc,UAAY,IAAID,GAC5DE,GAAuB,YAAcD,GACrCT,GAAOU,GAAwBR,GAAU,SAAS,EAClDQ,GAAuB,qBAAuB,GAC9C,IAAIC,GAAc,MAAM,QACxB,SAASC,IAAO,CAAC,CACjB,IAAIC,GAAuB,CAAE,EAAG,KAAM,EAAG,KAAM,EAAG,KAAM,EAAG,IAAK,EAC9DC,GAAiB,OAAO,UAAU,eACpC,SAASC,GAAaC,EAAMC,EAAKd,EAAO,CACtC,IAAIe,EAAUf,EAAM,IACpB,MAAO,CACL,SAAUnB,GACV,KAAMgC,EACN,IAAKC,EACL,IAAgBC,IAAX,OAAqBA,EAAU,KACpC,MAAOf,CACT,CACF,CACA,SAASgB,GAAmBC,EAAYC,EAAQ,CAC9C,OAAON,GAAaK,EAAW,KAAMC,EAAQD,EAAW,KAAK,CAC/D,CACA,SAASE,GAAeC,EAAQ,CAC9B,OACe,OAAOA,GAApB,UACSA,IAAT,MACAA,EAAO,WAAavC,EAExB,CACA,SAASwC,GAAOP,EAAK,CACnB,IAAIQ,EAAgB,CAAE,IAAK,KAAM,IAAK,IAAK,EAC3C,MACE,IACAR,EAAI,QAAQ,QAAS,SAAUS,EAAO,CACpC,OAAOD,EAAcC,CAAK,CAC5B,CAAC,CAEL,CACA,IAAIC,GAA6B,OACjC,SAASC,GAAcC,EAASC,EAAO,CACrC,OAAoB,OAAOD,GAApB,UAAwCA,IAAT,MAA4BA,EAAQ,KAAhB,KACtDL,GAAO,GAAKK,EAAQ,GAAG,EACvBC,EAAM,SAAS,EAAE,CACvB,CACA,SAASC,GAAgBC,EAAU,CACjC,OAAQA,EAAS,OAAQ,CACvB,IAAK,YACH,OAAOA,EAAS,MAClB,IAAK,WACH,MAAMA,EAAS,OACjB,QACE,OACgB,OAAOA,EAAS,QAA7B,SACGA,EAAS,KAAKpB,GAAMA,EAAI,GACtBoB,EAAS,OAAS,UACpBA,EAAS,KACP,SAAUC,EAAgB,CACVD,EAAS,SAAvB,YACIA,EAAS,OAAS,YACnBA,EAAS,MAAQC,EACtB,EACA,SAAUC,EAAO,CACDF,EAAS,SAAvB,YACIA,EAAS,OAAS,WAAcA,EAAS,OAASE,EACxD,CACF,GACJF,EAAS,OACT,CACA,IAAK,YACH,OAAOA,EAAS,MAClB,IAAK,WACH,MAAMA,EAAS,MACnB,CACJ,CACA,MAAMA,CACR,CACA,SAASG,GAAaC,EAAUC,EAAOC,EAAeC,EAAWhC,EAAU,CACzE,IAAIS,EAAO,OAAOoB,GACEpB,IAAhB,aAAsCA,IAAd,aAAoBoB,EAAW,MAC3D,IAAII,EAAiB,GACrB,GAAaJ,IAAT,KAAmBI,EAAiB,OAEtC,QAAQxB,EAAM,CACZ,IAAK,SACL,IAAK,SACL,IAAK,SACHwB,EAAiB,GACjB,MACF,IAAK,SACH,OAAQJ,EAAS,SAAU,CACzB,KAAKpD,GACL,KAAKC,GACHuD,EAAiB,GACjB,MACF,KAAK9C,GACH,OACG8C,EAAiBJ,EAAS,MAC3BD,GACEK,EAAeJ,EAAS,QAAQ,EAChCC,EACAC,EACAC,EACAhC,CACF,CAEN,CACJ,CACF,GAAIiC,EACF,OACGjC,EAAWA,EAAS6B,CAAQ,EAC5BI,EACQD,IAAP,GAAmB,IAAMX,GAAcQ,EAAU,CAAC,EAAIG,EACxD5B,GAAYJ,CAAQ,GACd+B,EAAgB,GACVE,GAAR,OACGF,EACCE,EAAe,QAAQb,GAA4B,KAAK,EAAI,KAChEQ,GAAa5B,EAAU8B,EAAOC,EAAe,GAAI,SAAUG,EAAG,CAC5D,OAAOA,CACT,CAAC,GACOlC,GAAR,OACCe,GAAef,CAAQ,IACrBA,EAAWY,GACVZ,EACA+B,GACW/B,EAAS,KAAjB,MACA6B,GAAYA,EAAS,MAAQ7B,EAAS,IACnC,IACC,GAAKA,EAAS,KAAK,QAClBoB,GACA,KACF,EAAI,KACRa,CACJ,GACFH,EAAM,KAAK9B,CAAQ,GACvB,EAEJiC,EAAiB,EACjB,IAAIE,EAAwBH,IAAP,GAAmB,IAAMA,EAAY,IAC1D,GAAI5B,GAAYyB,CAAQ,EACtB,QAASO,EAAI,EAAGA,EAAIP,EAAS,OAAQO,IAClCJ,EAAYH,EAASO,CAAC,EACpB3B,EAAO0B,EAAiBd,GAAcW,EAAWI,CAAC,EAClDH,GAAkBL,GACjBI,EACAF,EACAC,EACAtB,EACAT,CACF,UACKoC,EAAI9C,GAAcuC,CAAQ,EAAmB,OAAOO,GAAtB,WACvC,IACEP,EAAWO,EAAE,KAAKP,CAAQ,EAAGO,EAAI,EACjC,EAAEJ,EAAYH,EAAS,KAAK,GAAG,MAG9BG,EAAYA,EAAU,MACpBvB,EAAO0B,EAAiBd,GAAcW,EAAWI,GAAG,EACpDH,GAAkBL,GACjBI,EACAF,EACAC,EACAtB,EACAT,CACF,UACgBS,IAAb,SAAmB,CAC1B,GAAmB,OAAOoB,EAAS,MAA/B,WACF,OAAOD,GACLJ,GAAgBK,CAAQ,EACxBC,EACAC,EACAC,EACAhC,CACF,EACF,MAAA8B,EAAQ,OAAOD,CAAQ,EACjB,MACJ,mDACyBC,IAAtB,kBACG,qBAAuB,OAAO,KAAKD,CAAQ,EAAE,KAAK,IAAI,EAAI,IAC1DC,GACJ,2EACJ,CACF,CACA,OAAOG,CACT,CACA,SAASI,GAAYR,EAAUS,EAAMzC,EAAS,CAC5C,GAAYgC,GAAR,KAAkB,OAAOA,EAC7B,IAAIU,EAAS,CAAC,EACZC,EAAQ,EACV,OAAAZ,GAAaC,EAAUU,EAAQ,GAAI,GAAI,SAAUE,EAAO,CACtD,OAAOH,EAAK,KAAKzC,EAAS4C,EAAOD,GAAO,CAC1C,CAAC,EACMD,CACT,CACA,SAASG,GAAgBC,EAAS,CAChC,GAAWA,EAAQ,UAAf,GAAwB,CAC1B,IAAIC,EAAOD,EAAQ,QACnBC,EAAOA,EAAK,EACZA,EAAK,KACH,SAAUC,EAAc,EACZF,EAAQ,UAAd,GAAgCA,EAAQ,UAAf,MAC1BA,EAAQ,QAAU,EAAKA,EAAQ,QAAUE,EAC9C,EACA,SAAUlB,EAAO,EACLgB,EAAQ,UAAd,GAAgCA,EAAQ,UAAf,MAC1BA,EAAQ,QAAU,EAAKA,EAAQ,QAAUhB,EAC9C,CACF,EACOgB,EAAQ,UAAf,KAA4BA,EAAQ,QAAU,EAAKA,EAAQ,QAAUC,EACvE,CACA,GAAUD,EAAQ,UAAd,EAAuB,OAAOA,EAAQ,QAAQ,QAClD,MAAMA,EAAQ,OAChB,CACA,IAAIG,GACe,OAAO,aAAtB,WACI,YACA,SAAUnB,EAAO,CACf,GACe,OAAO,QAApB,UACe,OAAO,OAAO,YAA7B,WACA,CACA,IAAIoB,EAAQ,IAAI,OAAO,WAAW,QAAS,CACzC,QAAS,GACT,WAAY,GACZ,QACe,OAAOpB,GAApB,UACSA,IAAT,MACa,OAAOA,EAAM,SAA1B,SACI,OAAOA,EAAM,OAAO,EACpB,OAAOA,CAAK,EAClB,MAAOA,CACT,CAAC,EACD,GAAI,CAAC,OAAO,cAAcoB,CAAK,EAAG,MACpC,SACe,OAAO,SAApB,UACe,OAAO,QAAQ,MAA9B,WACA,CACA,QAAQ,KAAK,oBAAqBpB,CAAK,EACvC,MACF,CACA,QAAQ,MAAMA,CAAK,CACrB,EACNqB,GAAW,CACT,IAAKX,GACL,QAAS,SAAUR,EAAUoB,EAAaC,EAAgB,CACxDb,GACER,EACA,UAAY,CACVoB,EAAY,MAAM,KAAM,SAAS,CACnC,EACAC,CACF,CACF,EACA,MAAO,SAAUrB,EAAU,CACzB,IAAIsB,EAAI,EACR,OAAAd,GAAYR,EAAU,UAAY,CAChCsB,GACF,CAAC,EACMA,CACT,EACA,QAAS,SAAUtB,EAAU,CAC3B,OACEQ,GAAYR,EAAU,SAAUY,EAAO,CACrC,OAAOA,CACT,CAAC,GAAK,CAAC,CAEX,EACA,KAAM,SAAUZ,EAAU,CACxB,GAAI,CAACd,GAAec,CAAQ,EAC1B,MAAM,MACJ,uEACF,EACF,OAAOA,CACT,CACF,EACFrD,EAAQ,SAAWY,GACnBZ,EAAQ,SAAWwE,GACnBxE,EAAQ,UAAYmB,GACpBnB,EAAQ,SAAWG,GACnBH,EAAQ,SAAWK,GACnBL,EAAQ,cAAgB0B,GACxB1B,EAAQ,WAAaI,GACrBJ,EAAQ,SAAWS,GACnBT,EAAQ,gEACN8B,GACF9B,EAAQ,mBAAqB,CAC3B,UAAW,KACX,EAAG,SAAU4E,EAAM,CACjB,OAAO9C,GAAqB,EAAE,aAAa8C,CAAI,CACjD,CACF,EACA5E,EAAQ,MAAQ,SAAU6E,EAAI,CAC5B,OAAO,UAAY,CACjB,OAAOA,EAAG,MAAM,KAAM,SAAS,CACjC,CACF,EACA7E,EAAQ,YAAc,UAAY,CAChC,OAAO,IACT,EACAA,EAAQ,aAAe,SAAU8C,EAASgC,EAAQzB,EAAU,CAC1D,GAAaP,GAAT,KACF,MAAM,MACJ,wDAA0DA,EAAU,GACtE,EACF,IAAI1B,EAAQH,GAAO,CAAC,EAAG6B,EAAQ,KAAK,EAClCZ,EAAMY,EAAQ,IAChB,GAAYgC,GAAR,KACF,IAAKC,KAAwBD,EAAO,MAAlB,SAA0B5C,EAAM,GAAK4C,EAAO,KAAMA,EAClE,CAAC/C,GAAe,KAAK+C,EAAQC,CAAQ,GACzBA,IAAV,OACaA,IAAb,UACeA,IAAf,YACWA,IAAV,OAAiCD,EAAO,MAAlB,SACtB1D,EAAM2D,CAAQ,EAAID,EAAOC,CAAQ,GACxC,IAAIA,EAAW,UAAU,OAAS,EAClC,GAAUA,IAAN,EAAgB3D,EAAM,SAAWiC,UAC5B,EAAI0B,EAAU,CACrB,QAASC,EAAa,MAAMD,CAAQ,EAAGnB,EAAI,EAAGA,EAAImB,EAAUnB,IAC1DoB,EAAWpB,CAAC,EAAI,UAAUA,EAAI,CAAC,EACjCxC,EAAM,SAAW4D,CACnB,CACA,OAAOhD,GAAac,EAAQ,KAAMZ,EAAKd,CAAK,CAC9C,EACApB,EAAQ,cAAgB,SAAUiF,EAAc,CAC9C,OAAAA,EAAe,CACb,SAAU1E,GACV,cAAe0E,EACf,eAAgBA,EAChB,aAAc,EACd,SAAU,KACV,SAAU,IACZ,EACAA,EAAa,SAAWA,EACxBA,EAAa,SAAW,CACtB,SAAU3E,GACV,SAAU2E,CACZ,EACOA,CACT,EACAjF,EAAQ,cAAgB,SAAUiC,EAAM6C,EAAQzB,EAAU,CACxD,IAAI0B,EACF3D,EAAQ,CAAC,EACTc,EAAM,KACR,GAAY4C,GAAR,KACF,IAAKC,KAAwBD,EAAO,MAAlB,SAA0B5C,EAAM,GAAK4C,EAAO,KAAMA,EAClE/C,GAAe,KAAK+C,EAAQC,CAAQ,GACxBA,IAAV,OACaA,IAAb,UACeA,IAAf,aACC3D,EAAM2D,CAAQ,EAAID,EAAOC,CAAQ,GACxC,IAAIG,EAAiB,UAAU,OAAS,EACxC,GAAUA,IAAN,EAAsB9D,EAAM,SAAWiC,UAClC,EAAI6B,EAAgB,CAC3B,QAASF,EAAa,MAAME,CAAc,EAAGtB,EAAI,EAAGA,EAAIsB,EAAgBtB,IACtEoB,EAAWpB,CAAC,EAAI,UAAUA,EAAI,CAAC,EACjCxC,EAAM,SAAW4D,CACnB,CACA,GAAI/C,GAAQA,EAAK,aACf,IAAK8C,KAAcG,EAAiBjD,EAAK,aAAeiD,EAC3C9D,EAAM2D,CAAQ,IAAzB,SACG3D,EAAM2D,CAAQ,EAAIG,EAAeH,CAAQ,GAChD,OAAO/C,GAAaC,EAAMC,EAAKd,CAAK,CACtC,EACApB,EAAQ,UAAY,UAAY,CAC9B,MAAO,CAAE,QAAS,IAAK,CACzB,EACAA,EAAQ,WAAa,SAAUmF,EAAQ,CACrC,MAAO,CAAE,SAAU3E,GAAwB,OAAQ2E,CAAO,CAC5D,EACAnF,EAAQ,eAAiBuC,GACzBvC,EAAQ,KAAO,SAAUoE,EAAM,CAC7B,MAAO,CACL,SAAUzD,GACV,SAAU,CAAE,QAAS,GAAI,QAASyD,CAAK,EACvC,MAAOF,EACT,CACF,EACAlE,EAAQ,KAAO,SAAUiC,EAAMmD,EAAS,CACtC,MAAO,CACL,SAAU1E,GACV,KAAMuB,EACN,QAAoBmD,IAAX,OAAqB,KAAOA,CACvC,CACF,EACApF,EAAQ,gBAAkB,SAAUqF,EAAO,CACzC,IAAIC,EAAiBxD,GAAqB,EACxCyD,EAAoB,CAAC,EACvBzD,GAAqB,EAAIyD,EACzB,GAAI,CACF,IAAIC,EAAcH,EAAM,EACtBI,EAA0B3D,GAAqB,EACxC2D,IAAT,MACEA,EAAwBF,EAAmBC,CAAW,EAC3C,OAAOA,GAApB,UACWA,IAAT,MACe,OAAOA,EAAY,MAAlC,YACAA,EAAY,KAAK3D,GAAMyC,EAAiB,CAC5C,OAASnB,EAAO,CACdmB,GAAkBnB,CAAK,CACzB,QAAE,CACSmC,IAAT,MACWC,EAAkB,QAA3B,OACCD,EAAe,MAAQC,EAAkB,OACzCzD,GAAqB,EAAIwD,CAC9B,CACF,EACAtF,EAAQ,yBAA2B,UAAY,CAC7C,OAAO8B,GAAqB,EAAE,gBAAgB,CAChD,EACA9B,EAAQ,IAAM,SAAU0F,EAAQ,CAC9B,OAAO5D,GAAqB,EAAE,IAAI4D,CAAM,CAC1C,EACA1F,EAAQ,eAAiB,SAAU2F,EAAQC,EAAcC,EAAW,CAClE,OAAO/D,GAAqB,EAAE,eAAe6D,EAAQC,EAAcC,CAAS,CAC9E,EACA7F,EAAQ,YAAc,SAAUwB,EAAUsE,EAAM,CAC9C,OAAOhE,GAAqB,EAAE,YAAYN,EAAUsE,CAAI,CAC1D,EACA9F,EAAQ,WAAa,SAAU+F,EAAS,CACtC,OAAOjE,GAAqB,EAAE,WAAWiE,CAAO,CAClD,EACA/F,EAAQ,cAAgB,UAAY,CAAC,EACrCA,EAAQ,iBAAmB,SAAUgG,EAAOC,EAAc,CACxD,OAAOnE,GAAqB,EAAE,iBAAiBkE,EAAOC,CAAY,CACpE,EACAjG,EAAQ,UAAY,SAAUkG,EAAQJ,EAAM,CAC1C,OAAOhE,GAAqB,EAAE,UAAUoE,EAAQJ,CAAI,CACtD,EACA9F,EAAQ,eAAiB,SAAUwB,EAAU,CAC3C,OAAOM,GAAqB,EAAE,eAAeN,CAAQ,CACvD,EACAxB,EAAQ,MAAQ,UAAY,CAC1B,OAAO8B,GAAqB,EAAE,MAAM,CACtC,EACA9B,EAAQ,oBAAsB,SAAUmG,EAAKD,EAAQJ,EAAM,CACzD,OAAOhE,GAAqB,EAAE,oBAAoBqE,EAAKD,EAAQJ,CAAI,CACrE,EACA9F,EAAQ,mBAAqB,SAAUkG,EAAQJ,EAAM,CACnD,OAAOhE,GAAqB,EAAE,mBAAmBoE,EAAQJ,CAAI,CAC/D,EACA9F,EAAQ,gBAAkB,SAAUkG,EAAQJ,EAAM,CAChD,OAAOhE,GAAqB,EAAE,gBAAgBoE,EAAQJ,CAAI,CAC5D,EACA9F,EAAQ,QAAU,SAAUkG,EAAQJ,EAAM,CACxC,OAAOhE,GAAqB,EAAE,QAAQoE,EAAQJ,CAAI,CACpD,EACA9F,EAAQ,cAAgB,SAAUoG,EAAaC,EAAS,CACtD,OAAOvE,GAAqB,EAAE,cAAcsE,EAAaC,CAAO,CAClE,EACArG,EAAQ,WAAa,SAAUqG,EAASC,EAAYC,EAAM,CACxD,OAAOzE,GAAqB,EAAE,WAAWuE,EAASC,EAAYC,CAAI,CACpE,EACAvG,EAAQ,OAAS,SAAUiG,EAAc,CACvC,OAAOnE,GAAqB,EAAE,OAAOmE,CAAY,CACnD,EACAjG,EAAQ,SAAW,SAAU4F,EAAc,CACzC,OAAO9D,GAAqB,EAAE,SAAS8D,CAAY,CACrD,EACA5F,EAAQ,qBAAuB,SAC7BwG,EACAC,EACAC,EACA,CACA,OAAO5E,GAAqB,EAAE,qBAC5B0E,EACAC,EACAC,CACF,CACF,EACA1G,EAAQ,cAAgB,UAAY,CAClC,OAAO8B,GAAqB,EAAE,cAAc,CAC9C,EACA9B,EAAQ,QAAU,WC7hBlB,IAAA2G,GAAAC,GAAA,CAAAC,GAAAC,KAAA,cAGEA,GAAO,QAAU,OCHnB,IAAAC,GAAAC,GAAA,CAAAC,GAAAC,KAAA,CAKAA,GAAO,QAAU,CACf,KAAQ,GACR,KAAQ,GACR,GAAM,GACN,IAAO,GACP,MAAS,GACT,GAAM,GACN,IAAO,GACP,MAAS,GACT,KAAQ,GACR,KAAQ,GACR,MAAS,GACT,OAAU,GACV,MAAS,GACT,IAAO,EACT,ICpBA,IAAAC,GAAAC,GAAAC,IAAA,cAWA,IAAIC,GAAQ,KACZ,SAASC,GAAGC,EAAGC,EAAG,CAChB,OAAQD,IAAMC,IAAYD,IAAN,GAAW,EAAIA,IAAM,EAAIC,IAAQD,IAAMA,GAAKC,IAAMA,CACxE,CACA,IAAIC,GAA0B,OAAO,OAAO,IAA7B,WAAkC,OAAO,GAAKH,GAC3DI,GAAWL,GAAM,SACjBM,GAAYN,GAAM,UAClBO,GAAkBP,GAAM,gBACxBQ,GAAgBR,GAAM,cACxB,SAASS,GAAuBC,EAAWC,EAAa,CACtD,IAAIC,EAAQD,EAAY,EACtBE,EAAYR,GAAS,CAAE,KAAM,CAAE,MAAOO,EAAO,YAAaD,CAAY,CAAE,CAAC,EACzEG,EAAOD,EAAU,CAAC,EAAE,KACpBE,EAAcF,EAAU,CAAC,EAC3B,OAAAN,GACE,UAAY,CACVO,EAAK,MAAQF,EACbE,EAAK,YAAcH,EACnBK,GAAuBF,CAAI,GAAKC,EAAY,CAAE,KAAMD,CAAK,CAAC,CAC5D,EACA,CAACJ,EAAWE,EAAOD,CAAW,CAChC,EACAL,GACE,UAAY,CACV,OAAAU,GAAuBF,CAAI,GAAKC,EAAY,CAAE,KAAMD,CAAK,CAAC,EACnDJ,EAAU,UAAY,CAC3BM,GAAuBF,CAAI,GAAKC,EAAY,CAAE,KAAMD,CAAK,CAAC,CAC5D,CAAC,CACH,EACA,CAACJ,CAAS,CACZ,EACAF,GAAcI,CAAK,EACZA,CACT,CACA,SAASI,GAAuBF,EAAM,CACpC,IAAIG,EAAoBH,EAAK,YAC7BA,EAAOA,EAAK,MACZ,GAAI,CACF,IAAII,EAAYD,EAAkB,EAClC,MAAO,CAACb,GAASU,EAAMI,CAAS,CAClC,OAASC,EAAO,CACd,MAAO,EACT,CACF,CACA,SAASC,GAAuBV,EAAWC,EAAa,CACtD,OAAOA,EAAY,CACrB,CACA,IAAIU,GACc,OAAO,OAAvB,KACgB,OAAO,OAAO,SAA9B,KACgB,OAAO,OAAO,SAAS,cAAvC,IACID,GACAX,GACNV,GAAQ,qBACKC,GAAM,uBAAjB,OAAwCA,GAAM,qBAAuBqB,KCjEvE,IAAAC,GAAAC,GAAA,CAAAC,GAAAC,KAAA,cAGEA,GAAO,QAAU,OCHnB,IAAAC,GAAAC,GAAAC,IAAA,cAWA,SAASC,GAAKC,EAAMC,EAAM,CACxB,IAAIC,EAAQF,EAAK,OACjBA,EAAK,KAAKC,CAAI,EACdE,EAAG,KAAO,EAAID,GAAS,CACrB,IAAIE,EAAeF,EAAQ,IAAO,EAChCG,EAASL,EAAKI,CAAW,EAC3B,GAAI,EAAIE,GAAQD,EAAQJ,CAAI,EACzBD,EAAKI,CAAW,EAAIH,EAAQD,EAAKE,CAAK,EAAIG,EAAUH,EAAQE,MAC1D,OAAMD,CACb,CACF,CACA,SAASI,GAAKP,EAAM,CAClB,OAAaA,EAAK,SAAX,EAAoB,KAAOA,EAAK,CAAC,CAC1C,CACA,SAASQ,GAAIR,EAAM,CACjB,GAAUA,EAAK,SAAX,EAAmB,OAAO,KAC9B,IAAIS,EAAQT,EAAK,CAAC,EAChBU,EAAOV,EAAK,IAAI,EAClB,GAAIU,IAASD,EAAO,CAClBT,EAAK,CAAC,EAAIU,EACVP,EAAG,QACGD,EAAQ,EAAGS,EAASX,EAAK,OAAQY,EAAaD,IAAW,EAC7DT,EAAQU,GAER,CACA,IAAIC,EAAY,GAAKX,EAAQ,GAAK,EAChCY,EAAOd,EAAKa,CAAS,EACrBE,EAAaF,EAAY,EACzBG,EAAQhB,EAAKe,CAAU,EACzB,GAAI,EAAIT,GAAQQ,EAAMJ,CAAI,EACxBK,EAAaJ,GAAU,EAAIL,GAAQU,EAAOF,CAAI,GACxCd,EAAKE,CAAK,EAAIc,EACfhB,EAAKe,CAAU,EAAIL,EACnBR,EAAQa,IACPf,EAAKE,CAAK,EAAIY,EACfd,EAAKa,CAAS,EAAIH,EAClBR,EAAQW,WACNE,EAAaJ,GAAU,EAAIL,GAAQU,EAAON,CAAI,EACpDV,EAAKE,CAAK,EAAIc,EAAShB,EAAKe,CAAU,EAAIL,EAAQR,EAAQa,MACxD,OAAMZ,CACb,CACF,CACA,OAAOM,CACT,CACA,SAASH,GAAQH,EAAGc,EAAG,CACrB,IAAIC,EAAOf,EAAE,UAAYc,EAAE,UAC3B,OAAaC,IAAN,EAAaA,EAAOf,EAAE,GAAKc,EAAE,EACtC,CACAnB,GAAQ,aAAe,OACN,OAAO,aAApB,UAAkD,OAAO,YAAY,KAAlC,YACjCqB,GAAmB,YACvBrB,GAAQ,aAAe,UAAY,CACjC,OAAOqB,GAAiB,IAAI,CAC9B,IAEIC,GAAY,KACdC,GAAcD,GAAU,IAAI,EAC9BtB,GAAQ,aAAe,UAAY,CACjC,OAAOsB,GAAU,IAAI,EAAIC,EAC3B,GATI,IAAAF,GAKAC,GACFC,GAKAC,GAAY,CAAC,EACfC,GAAa,CAAC,EACdC,GAAgB,EAChBC,GAAc,KACdC,GAAuB,EACvBC,GAAmB,GACnBC,GAA0B,GAC1BC,GAAyB,GACzBC,GAAa,GACbC,GAAiC,OAAO,YAAtB,WAAmC,WAAa,KAClEC,GAAmC,OAAO,cAAtB,WAAqC,aAAe,KACxEC,GAAoC,OAAO,aAAvB,IAAsC,aAAe,KAC3E,SAASC,GAAcC,EAAa,CAClC,QAASC,EAAQ7B,GAAKgB,EAAU,EAAYa,IAAT,MAAkB,CACnD,GAAaA,EAAM,WAAf,KAAyB5B,GAAIe,EAAU,UAClCa,EAAM,WAAaD,EAC1B3B,GAAIe,EAAU,EACXa,EAAM,UAAYA,EAAM,eACzBrC,GAAKuB,GAAWc,CAAK,MACpB,OACLA,EAAQ7B,GAAKgB,EAAU,CACzB,CACF,CACA,SAASc,GAAcF,EAAa,CAGlC,GAFAN,GAAyB,GACzBK,GAAcC,CAAW,EACrB,CAACP,GACH,GAAarB,GAAKe,EAAS,IAAvB,KACDM,GAA0B,GACzBU,KACIA,GAAuB,GAAKC,GAAiC,OAChE,CACH,IAAIC,EAAajC,GAAKgB,EAAU,EACvBiB,IAAT,MACEC,GAAmBJ,GAAeG,EAAW,UAAYL,CAAW,CACxE,CACJ,CACA,IAAIG,GAAuB,GACzBI,GAAgB,GAChBC,GAAgB,EAChBC,GAAY,GACd,SAASC,IAAoB,CAC3B,OAAOf,GACH,GACA,EAAAhC,GAAQ,aAAa,EAAI8C,GAAYD,GAG3C,CACA,SAASG,IAA2B,CAElC,GADAhB,GAAa,GACTQ,GAAsB,CACxB,IAAIH,EAAcrC,GAAQ,aAAa,EACvC8C,GAAYT,EACZ,IAAIY,EAAc,GAClB,GAAI,CACF5C,EAAG,CACDyB,GAA0B,GAC1BC,KACIA,GAAyB,GAC3BG,GAAkBU,EAAa,EAC9BA,GAAgB,IACnBf,GAAmB,GACnB,IAAIqB,EAAwBtB,GAC5B,GAAI,CACFT,EAAG,CAED,IADAiB,GAAcC,CAAW,EAEvBV,GAAclB,GAAKe,EAAS,EACnBG,KAAT,MACA,EACEA,GAAY,eAAiBU,GAAeU,GAAkB,IAGhE,CACA,IAAII,EAAWxB,GAAY,SAC3B,GAAmB,OAAOwB,GAAtB,WAAgC,CAClCxB,GAAY,SAAW,KACvBC,GAAuBD,GAAY,cACnC,IAAIyB,EAAuBD,EACzBxB,GAAY,gBAAkBU,CAChC,EAEA,GADAA,EAAcrC,GAAQ,aAAa,EAChB,OAAOoD,GAAtB,WAA4C,CAC9CzB,GAAY,SAAWyB,EACvBhB,GAAcC,CAAW,EACzBY,EAAc,GACd,MAAM9B,CACR,CACAQ,KAAgBlB,GAAKe,EAAS,GAAKd,GAAIc,EAAS,EAChDY,GAAcC,CAAW,CAC3B,MAAO3B,GAAIc,EAAS,EACpBG,GAAclB,GAAKe,EAAS,CAC9B,CACA,GAAaG,KAAT,KAAsBsB,EAAc,OACnC,CACH,IAAIP,EAAajC,GAAKgB,EAAU,EACvBiB,IAAT,MACEC,GACEJ,GACAG,EAAW,UAAYL,CACzB,EACFY,EAAc,EAChB,CACF,CACA,MAAM5C,CACR,QAAE,CACCsB,GAAc,KACZC,GAAuBsB,EACvBrB,GAAmB,EACxB,CACAoB,EAAc,MAChB,CACF,QAAE,CACAA,EACIR,GAAiC,EAChCD,GAAuB,EAC9B,CACF,CACF,CACA,IAAIC,GACe,OAAON,IAAtB,WACFM,GAAmC,UAAY,CAC7CN,GAAkBa,EAAwB,CAC5C,EACuB,OAAO,eAAvB,KACHK,GAAU,IAAI,eAChBC,GAAOD,GAAQ,MACjBA,GAAQ,MAAM,UAAYL,GAC1BP,GAAmC,UAAY,CAC7Ca,GAAK,YAAY,IAAI,CACvB,GAEAb,GAAmC,UAAY,CAC7CR,GAAgBe,GAA0B,CAAC,CAC7C,EATI,IAAAK,GACFC,GASJ,SAASX,GAAmBQ,EAAUI,EAAI,CACxCX,GAAgBX,GAAgB,UAAY,CAC1CkB,EAASnD,GAAQ,aAAa,CAAC,CACjC,EAAGuD,CAAE,CACP,CACAvD,GAAQ,sBAAwB,EAChCA,GAAQ,2BAA6B,EACrCA,GAAQ,qBAAuB,EAC/BA,GAAQ,wBAA0B,EAClCA,GAAQ,mBAAqB,KAC7BA,GAAQ,8BAAgC,EACxCA,GAAQ,wBAA0B,SAAUwD,EAAM,CAChDA,EAAK,SAAW,IAClB,EACAxD,GAAQ,wBAA0B,SAAUyD,EAAK,CAC/C,EAAIA,GAAO,IAAMA,EACb,QAAQ,MACN,iHACF,EACCZ,GAAgB,EAAIY,EAAM,KAAK,MAAM,IAAMA,CAAG,EAAI,CACzD,EACAzD,GAAQ,iCAAmC,UAAY,CACrD,OAAO4B,EACT,EACA5B,GAAQ,cAAgB,SAAU0D,EAAc,CAC9C,OAAQ9B,GAAsB,CAC5B,IAAK,GACL,IAAK,GACL,IAAK,GACH,IAAI+B,EAAgB,EACpB,MACF,QACEA,EAAgB/B,EACpB,CACA,IAAIsB,EAAwBtB,GAC5BA,GAAuB+B,EACvB,GAAI,CACF,OAAOD,EAAa,CACtB,QAAE,CACA9B,GAAuBsB,CACzB,CACF,EACAlD,GAAQ,sBAAwB,UAAY,CAC1CgC,GAAa,EACf,EACAhC,GAAQ,yBAA2B,SAAU2D,EAAeD,EAAc,CACxE,OAAQC,EAAe,CACrB,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACH,MACF,QACEA,EAAgB,CACpB,CACA,IAAIT,EAAwBtB,GAC5BA,GAAuB+B,EACvB,GAAI,CACF,OAAOD,EAAa,CACtB,QAAE,CACA9B,GAAuBsB,CACzB,CACF,EACAlD,GAAQ,0BAA4B,SAClC2D,EACAR,EACAS,EACA,CACA,IAAIvB,EAAcrC,GAAQ,aAAa,EAQvC,OAPa,OAAO4D,GAApB,UAAwCA,IAAT,MACzBA,EAAUA,EAAQ,MACnBA,EACc,OAAOA,GAApB,UAA+B,EAAIA,EAC/BvB,EAAcuB,EACdvB,GACLuB,EAAUvB,EACPsB,EAAe,CACrB,IAAK,GACH,IAAIE,EAAU,GACd,MACF,IAAK,GACHA,EAAU,IACV,MACF,IAAK,GACHA,EAAU,WACV,MACF,IAAK,GACHA,EAAU,IACV,MACF,QACEA,EAAU,GACd,CACA,OAAAA,EAAUD,EAAUC,EACpBF,EAAgB,CACd,GAAIjC,KACJ,SAAUyB,EACV,cAAeQ,EACf,UAAWC,EACX,eAAgBC,EAChB,UAAW,EACb,EACAD,EAAUvB,GACJsB,EAAc,UAAYC,EAC5B3D,GAAKwB,GAAYkC,CAAa,EACrBlD,GAAKe,EAAS,IAAvB,MACEmC,IAAkBlD,GAAKgB,EAAU,IAChCM,IACIG,GAAkBU,EAAa,EAAIA,GAAgB,IACnDb,GAAyB,GAC9BY,GAAmBJ,GAAeqB,EAAUvB,CAAW,KACvDsB,EAAc,UAAYE,EAC5B5D,GAAKuB,GAAWmC,CAAa,EAC7B7B,IACED,KACEC,GAA0B,GAC5BU,KACIA,GAAuB,GAAKC,GAAiC,KAChEkB,CACT,EACA3D,GAAQ,qBAAuB+C,GAC/B/C,GAAQ,sBAAwB,SAAUmD,EAAU,CAClD,IAAIW,EAAsBlC,GAC1B,OAAO,UAAY,CACjB,IAAIsB,EAAwBtB,GAC5BA,GAAuBkC,EACvB,GAAI,CACF,OAAOX,EAAS,MAAM,KAAM,SAAS,CACvC,QAAE,CACAvB,GAAuBsB,CACzB,CACF,CACF,ICnVA,IAAAa,GAAAC,GAAA,CAAAC,GAAAC,KAAA,cAGEA,GAAO,QAAU,OCHnB,IAAAC,GAAAC,GAAAC,IAAA,cAWA,IAAIC,GAAQ,KACZ,SAASC,GAAuBC,EAAM,CACpC,IAAIC,EAAM,4BAA8BD,EACxC,GAAI,EAAI,UAAU,OAAQ,CACxBC,GAAO,WAAa,mBAAmB,UAAU,CAAC,CAAC,EACnD,QAASC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IACpCD,GAAO,WAAa,mBAAmB,UAAUC,CAAC,CAAC,CACvD,CACA,MACE,yBACAF,EACA,WACAC,EACA,gHAEJ,CACA,SAASE,IAAO,CAAC,CACjB,IAAIC,GAAY,CACZ,EAAG,CACD,EAAGD,GACH,EAAG,UAAY,CACb,MAAM,MAAMJ,GAAuB,GAAG,CAAC,CACzC,EACA,EAAGI,GACH,EAAGA,GACH,EAAGA,GACH,EAAGA,GACH,EAAGA,GACH,EAAGA,GACH,EAAGA,EACL,EACA,EAAG,EACH,YAAa,IACf,EACAE,GAAoB,OAAO,IAAI,cAAc,EAC/C,SAASC,GAAeC,EAAUC,EAAeC,EAAgB,CAC/D,IAAIC,EACF,EAAI,UAAU,QAAqB,UAAU,CAAC,IAAtB,OAA0B,UAAU,CAAC,EAAI,KACnE,MAAO,CACL,SAAUL,GACV,IAAaK,GAAR,KAAc,KAAO,GAAKA,EAC/B,SAAUH,EACV,cAAeC,EACf,eAAgBC,CAClB,CACF,CACA,IAAIE,GACFb,GAAM,gEACR,SAASc,GAAuBC,EAAIC,EAAO,CACzC,GAAeD,IAAX,OAAe,MAAO,GAC1B,GAAiB,OAAOC,GAApB,SACF,OAA6BA,IAAtB,kBAA8BA,EAAQ,EACjD,CACAjB,GAAQ,6DACNO,GACFP,GAAQ,aAAe,SAAUU,EAAUQ,EAAW,CACpD,IAAIL,EACF,EAAI,UAAU,QAAqB,UAAU,CAAC,IAAtB,OAA0B,UAAU,CAAC,EAAI,KACnE,GACE,CAACK,GACMA,EAAU,WAAhB,GACOA,EAAU,WAAhB,GACOA,EAAU,WAAjB,GAEF,MAAM,MAAMhB,GAAuB,GAAG,CAAC,EACzC,OAAOO,GAAeC,EAAUQ,EAAW,KAAML,CAAG,CACtD,EACAb,GAAQ,UAAY,SAAUmB,EAAI,CAChC,IAAIC,EAAqBN,GAAqB,EAC5CO,EAAyBd,GAAU,EACrC,GAAI,CACF,GAAMO,GAAqB,EAAI,KAAQP,GAAU,EAAI,EAAIY,EAAK,OAAOA,EAAG,CAC1E,QAAE,CACCL,GAAqB,EAAIM,EACvBb,GAAU,EAAIc,EACfd,GAAU,EAAE,EAAE,CAClB,CACF,EACAP,GAAQ,WAAa,SAAUsB,EAAMC,EAAS,CAC/B,OAAOD,GAApB,WACGC,GACKA,EAAUA,EAAQ,YACnBA,EACc,OAAOA,GAApB,SAC0BA,IAAtB,kBACEA,EACA,GACF,QACLA,EAAU,KACfhB,GAAU,EAAE,EAAEe,EAAMC,CAAO,EAC/B,EACAvB,GAAQ,YAAc,SAAUsB,EAAM,CACvB,OAAOA,GAApB,UAA4Bf,GAAU,EAAE,EAAEe,CAAI,CAChD,EACAtB,GAAQ,QAAU,SAAUsB,EAAMC,EAAS,CACzC,GAAiB,OAAOD,GAApB,UAA4BC,GAAwB,OAAOA,EAAQ,IAA5B,SAAgC,CACzE,IAAIP,EAAKO,EAAQ,GACfC,EAAcT,GAAuBC,EAAIO,EAAQ,WAAW,EAC5DE,EACe,OAAOF,EAAQ,WAA5B,SAAwCA,EAAQ,UAAY,OAC9DG,EACe,OAAOH,EAAQ,eAA5B,SACIA,EAAQ,cACR,OACIP,IAAZ,QACIT,GAAU,EAAE,EACVe,EACa,OAAOC,EAAQ,YAA5B,SAAyCA,EAAQ,WAAa,OAC9D,CACE,YAAaC,EACb,UAAWC,EACX,cAAeC,CACjB,CACF,EACaV,IAAb,UACAT,GAAU,EAAE,EAAEe,EAAM,CAClB,YAAaE,EACb,UAAWC,EACX,cAAeC,EACf,MAAoB,OAAOH,EAAQ,OAA5B,SAAoCA,EAAQ,MAAQ,MAC7D,CAAC,CACP,CACF,EACAvB,GAAQ,cAAgB,SAAUsB,EAAMC,EAAS,CAC/C,GAAiB,OAAOD,GAApB,SACF,GAAiB,OAAOC,GAApB,UAAwCA,IAAT,MACjC,GAAYA,EAAQ,IAAhB,MAAmCA,EAAQ,KAArB,SAAyB,CACjD,IAAIC,EAAcT,GAChBQ,EAAQ,GACRA,EAAQ,WACV,EACAhB,GAAU,EAAE,EAAEe,EAAM,CAClB,YAAaE,EACb,UACe,OAAOD,EAAQ,WAA5B,SAAwCA,EAAQ,UAAY,OAC9D,MAAoB,OAAOA,EAAQ,OAA5B,SAAoCA,EAAQ,MAAQ,MAC7D,CAAC,CACH,OACaA,GAAR,MAAmBhB,GAAU,EAAE,EAAEe,CAAI,CAChD,EACAtB,GAAQ,QAAU,SAAUsB,EAAMC,EAAS,CACzC,GACe,OAAOD,GAApB,UACa,OAAOC,GAApB,UACSA,IAAT,MACa,OAAOA,EAAQ,IAA5B,SACA,CACA,IAAIP,EAAKO,EAAQ,GACfC,EAAcT,GAAuBC,EAAIO,EAAQ,WAAW,EAC9DhB,GAAU,EAAE,EAAEe,EAAMN,EAAI,CACtB,YAAaQ,EACb,UACe,OAAOD,EAAQ,WAA5B,SAAwCA,EAAQ,UAAY,OAC9D,MAAoB,OAAOA,EAAQ,OAA5B,SAAoCA,EAAQ,MAAQ,OAC3D,KAAmB,OAAOA,EAAQ,MAA5B,SAAmCA,EAAQ,KAAO,OACxD,cACe,OAAOA,EAAQ,eAA5B,SACIA,EAAQ,cACR,OACN,eACe,OAAOA,EAAQ,gBAA5B,SACIA,EAAQ,eACR,OACN,YACe,OAAOA,EAAQ,aAA5B,SAA0CA,EAAQ,YAAc,OAClE,WACe,OAAOA,EAAQ,YAA5B,SAAyCA,EAAQ,WAAa,OAChE,MAAoB,OAAOA,EAAQ,OAA5B,SAAoCA,EAAQ,MAAQ,MAC7D,CAAC,CACH,CACF,EACAvB,GAAQ,cAAgB,SAAUsB,EAAMC,EAAS,CAC/C,GAAiB,OAAOD,GAApB,SACF,GAAIC,EAAS,CACX,IAAIC,EAAcT,GAAuBQ,EAAQ,GAAIA,EAAQ,WAAW,EACxEhB,GAAU,EAAE,EAAEe,EAAM,CAClB,GACe,OAAOC,EAAQ,IAA5B,UAA+CA,EAAQ,KAArB,SAC9BA,EAAQ,GACR,OACN,YAAaC,EACb,UACe,OAAOD,EAAQ,WAA5B,SAAwCA,EAAQ,UAAY,MAChE,CAAC,CACH,MAAOhB,GAAU,EAAE,EAAEe,CAAI,CAC7B,EACAtB,GAAQ,iBAAmB,SAAU2B,EAAM,CACzCpB,GAAU,EAAE,EAAEoB,CAAI,CACpB,EACA3B,GAAQ,wBAA0B,SAAUmB,EAAIS,EAAG,CACjD,OAAOT,EAAGS,CAAC,CACb,EACA5B,GAAQ,aAAe,SAAU6B,EAAQC,EAAcC,EAAW,CAChE,OAAOjB,GAAqB,EAAE,aAAae,EAAQC,EAAcC,CAAS,CAC5E,EACA/B,GAAQ,cAAgB,UAAY,CAClC,OAAOc,GAAqB,EAAE,wBAAwB,CACxD,EACAd,GAAQ,QAAU,WCjNlB,IAAAgC,GAAAC,GAAA,CAAAC,GAAAC,KAAA,cAEA,SAASC,IAAW,CAElB,GACE,SAAO,+BAAmC,KAC1C,OAAO,+BAA+B,UAAa,YAcrD,GAAI,CAEF,+BAA+B,SAASA,EAAQ,CAClD,OAASC,EAAK,CAGZ,QAAQ,MAAMA,CAAG,CACnB,CACF,CAKED,GAAS,EACTD,GAAO,QAAU,OClCnB,IAAAG,GAAAC,GAAAC,IAAA,cAcA,IAAIC,GAAY,KACdC,GAAQ,KACRC,GAAW,KACb,SAASC,EAAuBC,EAAM,CACpC,IAAIC,EAAM,4BAA8BD,EACxC,GAAI,EAAI,UAAU,OAAQ,CACxBC,GAAO,WAAa,mBAAmB,UAAU,CAAC,CAAC,EACnD,QAASC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IACpCD,GAAO,WAAa,mBAAmB,UAAUC,CAAC,CAAC,CACvD,CACA,MACE,yBACAF,EACA,WACAC,EACA,gHAEJ,CACA,SAASE,GAAiBC,EAAM,CAC9B,MAAO,EACL,CAACA,GACMA,EAAK,WAAX,GAA6BA,EAAK,WAAX,GAA8BA,EAAK,WAAZ,GAEnD,CACA,SAASC,GAAuBC,EAAO,CACrC,IAAIF,EAAOE,EACTC,EAAiBD,EACnB,GAAIA,EAAM,UAAW,KAAOF,EAAK,QAAUA,EAAOA,EAAK,WAClD,CACHE,EAAQF,EACR,GACGA,EAAOE,GACCF,EAAK,MAAQ,QAApB,IAA8BG,EAAiBH,EAAK,QACnDE,EAAQF,EAAK,aACXE,EACT,CACA,OAAaF,EAAK,MAAX,EAAiBG,EAAiB,IAC3C,CACA,SAASC,GAA6BF,EAAO,CAC3C,GAAWA,EAAM,MAAb,GAAkB,CACpB,IAAIG,EAAgBH,EAAM,cAI1B,GAHSG,IAAT,OACIH,EAAQA,EAAM,UACPA,IAAT,OAAmBG,EAAgBH,EAAM,gBAC9BG,IAAT,KAAwB,OAAOA,EAAc,UACnD,CACA,OAAO,IACT,CACA,SAASC,GAA6BJ,EAAO,CAC3C,GAAWA,EAAM,MAAb,GAAkB,CACpB,IAAIK,EAAgBL,EAAM,cAI1B,GAHSK,IAAT,OACIL,EAAQA,EAAM,UACPA,IAAT,OAAmBK,EAAgBL,EAAM,gBAC9BK,IAAT,KAAwB,OAAOA,EAAc,UACnD,CACA,OAAO,IACT,CACA,SAASC,GAAgBN,EAAO,CAC9B,GAAID,GAAuBC,CAAK,IAAMA,EACpC,MAAM,MAAMP,EAAuB,GAAG,CAAC,CAC3C,CACA,SAASc,GAA8BP,EAAO,CAC5C,IAAIQ,EAAYR,EAAM,UACtB,GAAI,CAACQ,EAAW,CAEd,GADAA,EAAYT,GAAuBC,CAAK,EAC3BQ,IAAT,KAAoB,MAAM,MAAMf,EAAuB,GAAG,CAAC,EAC/D,OAAOe,IAAcR,EAAQ,KAAOA,CACtC,CACA,QAASS,EAAIT,EAAOU,EAAIF,IAAe,CACrC,IAAIG,EAAUF,EAAE,OAChB,GAAaE,IAAT,KAAkB,MACtB,IAAIC,EAAUD,EAAQ,UACtB,GAAaC,IAAT,KAAkB,CAEpB,GADAF,EAAIC,EAAQ,OACCD,IAAT,KAAY,CACdD,EAAIC,EACJ,QACF,CACA,KACF,CACA,GAAIC,EAAQ,QAAUC,EAAQ,MAAO,CACnC,IAAKA,EAAUD,EAAQ,MAAOC,GAAW,CACvC,GAAIA,IAAYH,EAAG,OAAOH,GAAgBK,CAAO,EAAGX,EACpD,GAAIY,IAAYF,EAAG,OAAOJ,GAAgBK,CAAO,EAAGH,EACpDI,EAAUA,EAAQ,OACpB,CACA,MAAM,MAAMnB,EAAuB,GAAG,CAAC,CACzC,CACA,GAAIgB,EAAE,SAAWC,EAAE,OAASD,EAAIE,EAAWD,EAAIE,MAC1C,CACH,QAASC,EAAe,GAAIC,EAAUH,EAAQ,MAAOG,GAAW,CAC9D,GAAIA,IAAYL,EAAG,CACjBI,EAAe,GACfJ,EAAIE,EACJD,EAAIE,EACJ,KACF,CACA,GAAIE,IAAYJ,EAAG,CACjBG,EAAe,GACfH,EAAIC,EACJF,EAAIG,EACJ,KACF,CACAE,EAAUA,EAAQ,OACpB,CACA,GAAI,CAACD,EAAc,CACjB,IAAKC,EAAUF,EAAQ,MAAOE,GAAW,CACvC,GAAIA,IAAYL,EAAG,CACjBI,EAAe,GACfJ,EAAIG,EACJF,EAAIC,EACJ,KACF,CACA,GAAIG,IAAYJ,EAAG,CACjBG,EAAe,GACfH,EAAIE,EACJH,EAAIE,EACJ,KACF,CACAG,EAAUA,EAAQ,OACpB,CACA,GAAI,CAACD,EAAc,MAAM,MAAMpB,EAAuB,GAAG,CAAC,CAC5D,CACF,CACA,GAAIgB,EAAE,YAAcC,EAAG,MAAM,MAAMjB,EAAuB,GAAG,CAAC,CAChE,CACA,GAAUgB,EAAE,MAAR,EAAa,MAAM,MAAMhB,EAAuB,GAAG,CAAC,EACxD,OAAOgB,EAAE,UAAU,UAAYA,EAAIT,EAAQQ,CAC7C,CACA,SAASO,GAAyBjB,EAAM,CACtC,IAAIkB,EAAMlB,EAAK,IACf,GAAUkB,IAAN,GAAoBA,IAAP,IAAqBA,IAAP,IAAoBA,IAAN,EAAW,OAAOlB,EAC/D,IAAKA,EAAOA,EAAK,MAAgBA,IAAT,MAAiB,CAEvC,GADAkB,EAAMD,GAAyBjB,CAAI,EACtBkB,IAAT,KAAc,OAAOA,EACzBlB,EAAOA,EAAK,OACd,CACA,OAAO,IACT,CACA,IAAImB,GAAS,OAAO,OAClBC,GAA4B,OAAO,IAAI,eAAe,EACtDC,GAAqB,OAAO,IAAI,4BAA4B,EAC5DC,GAAoB,OAAO,IAAI,cAAc,EAC7CC,GAAsB,OAAO,IAAI,gBAAgB,EACjDC,GAAyB,OAAO,IAAI,mBAAmB,EACvDC,GAAsB,OAAO,IAAI,gBAAgB,EACjDC,GAAsB,OAAO,IAAI,gBAAgB,EACjDC,GAAqB,OAAO,IAAI,eAAe,EAC/CC,GAAyB,OAAO,IAAI,mBAAmB,EACvDC,GAAsB,OAAO,IAAI,gBAAgB,EACjDC,GAA2B,OAAO,IAAI,qBAAqB,EAC3DC,GAAkB,OAAO,IAAI,YAAY,EACzCC,GAAkB,OAAO,IAAI,YAAY,EAEvCC,GAAsB,OAAO,IAAI,gBAAgB,EAGjDC,GAA4B,OAAO,IAAI,2BAA2B,EAElEC,GAAwB,OAAO,SACnC,SAASC,GAAcC,EAAe,CACpC,OAAaA,IAAT,MAAuC,OAAOA,GAApB,SAA0C,MACxEA,EACGF,IAAyBE,EAAcF,EAAqB,GAC7DE,EAAc,YAAY,EACN,OAAOA,GAAtB,WAAsCA,EAAgB,KAC/D,CACA,IAAIC,GAAyB,OAAO,IAAI,wBAAwB,EAChE,SAASC,GAAyBC,EAAM,CACtC,GAAYA,GAAR,KAAc,OAAO,KACzB,GAAmB,OAAOA,GAAtB,WACF,OAAOA,EAAK,WAAaF,GACrB,KACAE,EAAK,aAAeA,EAAK,MAAQ,KACvC,GAAiB,OAAOA,GAApB,SAA0B,OAAOA,EACrC,OAAQA,EAAM,CACZ,KAAKjB,GACH,MAAO,WACT,KAAKE,GACH,MAAO,WACT,KAAKD,GACH,MAAO,aACT,KAAKK,GACH,MAAO,WACT,KAAKC,GACH,MAAO,eACT,KAAKG,GACH,MAAO,UACX,CACA,GAAiB,OAAOO,GAApB,SACF,OAAQA,EAAK,SAAU,CACrB,KAAKlB,GACH,MAAO,SACT,KAAKK,GACH,OAAOa,EAAK,aAAe,UAC7B,KAAKd,GACH,OAAQc,EAAK,SAAS,aAAe,WAAa,YACpD,KAAKZ,GACH,IAAIa,EAAYD,EAAK,OACrB,OAAAA,EAAOA,EAAK,YACZA,IACIA,EAAOC,EAAU,aAAeA,EAAU,MAAQ,GACnDD,EAAcA,IAAP,GAAc,cAAgBA,EAAO,IAAM,cAC9CA,EACT,KAAKT,GACH,OACGU,EAAYD,EAAK,aAAe,KACxBC,IAAT,KACIA,EACAF,GAAyBC,EAAK,IAAI,GAAK,OAE/C,KAAKR,GACHS,EAAYD,EAAK,SACjBA,EAAOA,EAAK,MACZ,GAAI,CACF,OAAOD,GAAyBC,EAAKC,CAAS,CAAC,CACjD,OAASC,EAAG,CAAC,CACjB,CACF,OAAO,IACT,CACA,IAAIC,GAAc,MAAM,QACtBC,EACEnD,GAAM,gEACRoD,GACEnD,GAAS,6DACXoD,GAAyB,CACvB,QAAS,GACT,KAAM,KACN,OAAQ,KACR,OAAQ,IACV,EACAC,GAAa,CAAC,EACdC,GAAQ,GACV,SAASC,GAAaC,EAAc,CAClC,MAAO,CAAE,QAASA,CAAa,CACjC,CACA,SAASC,GAAIC,EAAQ,CACnB,EAAIJ,KACAI,EAAO,QAAUL,GAAWC,EAAK,EAAKD,GAAWC,EAAK,EAAI,KAAOA,KACvE,CACA,SAASK,GAAKD,EAAQE,EAAO,CAC3BN,KACAD,GAAWC,EAAK,EAAII,EAAO,QAC3BA,EAAO,QAAUE,CACnB,CACA,IAAIC,GAAqBN,GAAa,IAAI,EACxCO,GAA0BP,GAAa,IAAI,EAC3CQ,GAA0BR,GAAa,IAAI,EAC3CS,GAA+BT,GAAa,IAAI,EAClD,SAASU,GAAkBzD,EAAO0D,EAAkB,CAIlD,OAHAP,GAAKI,GAAyBG,CAAgB,EAC9CP,GAAKG,GAAyBtD,CAAK,EACnCmD,GAAKE,GAAoB,IAAI,EACrBK,EAAiB,SAAU,CACjC,IAAK,GACL,IAAK,IACH1D,GAASA,EAAQ0D,EAAiB,mBAC7B1D,EAAQA,EAAM,cACb2D,GAAkB3D,CAAK,EAEzB,EACJ,MACF,QACE,GACIA,EAAQ0D,EAAiB,QAC1BA,EAAmBA,EAAiB,aAEpCA,EAAmBC,GAAkBD,CAAgB,EACnD1D,EAAQ4D,GAAwBF,EAAkB1D,CAAK,MAE1D,QAAQA,EAAO,CACb,IAAK,MACHA,EAAQ,EACR,MACF,IAAK,OACHA,EAAQ,EACR,MACF,QACEA,EAAQ,CACZ,CACN,CACAiD,GAAII,EAAkB,EACtBF,GAAKE,GAAoBrD,CAAK,CAChC,CACA,SAAS6D,IAAmB,CAC1BZ,GAAII,EAAkB,EACtBJ,GAAIK,EAAuB,EAC3BL,GAAIM,EAAuB,CAC7B,CACA,SAASO,GAAgB9D,EAAO,CACrBA,EAAM,gBAAf,MAAgCmD,GAAKK,GAA8BxD,CAAK,EACxE,IAAI+D,EAAUV,GAAmB,QAC7BW,EAA2BJ,GAAwBG,EAAS/D,EAAM,IAAI,EAC1E+D,IAAYC,IACTb,GAAKG,GAAyBtD,CAAK,EACpCmD,GAAKE,GAAoBW,CAAwB,EACrD,CACA,SAASC,GAAejE,EAAO,CAC7BsD,GAAwB,UAAYtD,IACjCiD,GAAII,EAAkB,EAAGJ,GAAIK,EAAuB,GACvDE,GAA6B,UAAYxD,IACtCiD,GAAIO,EAA4B,EAChCU,GAAsB,cAAgBtB,GAC3C,CACA,IAAIuB,GAAQC,GACZ,SAASC,GAA8BC,EAAM,CAC3C,GAAeH,KAAX,OACF,GAAI,CACF,MAAM,MAAM,CACd,OAAS3B,EAAG,CACV,IAAI+B,EAAQ/B,EAAE,MAAM,KAAK,EAAE,MAAM,cAAc,EAC/C2B,GAAUI,GAASA,EAAM,CAAC,GAAM,GAChCH,GACE,GAAK5B,EAAE,MAAM,QAAQ,UAAU,EAC3B,iBACA,GAAKA,EAAE,MAAM,QAAQ,GAAG,EACtB,eACA,EACV,CACF,MAAO,KAAO2B,GAASG,EAAOF,EAChC,CACA,IAAII,GAAU,GACd,SAASC,GAA6BC,EAAIC,EAAW,CACnD,GAAI,CAACD,GAAMF,GAAS,MAAO,GAC3BA,GAAU,GACV,IAAII,EAA4B,MAAM,kBACtC,MAAM,kBAAoB,OAC1B,GAAI,CACF,IAAIC,EAAiB,CACnB,4BAA6B,UAAY,CACvC,GAAI,CACF,GAAIF,EAAW,CACb,IAAIG,EAAO,UAAY,CACrB,MAAM,MAAM,CACd,EAMA,GALA,OAAO,eAAeA,EAAK,UAAW,QAAS,CAC7C,IAAK,UAAY,CACf,MAAM,MAAM,CACd,CACF,CAAC,EACgB,OAAO,SAApB,UAA+B,QAAQ,UAAW,CACpD,GAAI,CACF,QAAQ,UAAUA,EAAM,CAAC,CAAC,CAC5B,OAAStC,EAAG,CACV,IAAIuC,EAAUvC,CAChB,CACA,QAAQ,UAAUkC,EAAI,CAAC,EAAGI,CAAI,CAChC,KAAO,CACL,GAAI,CACFA,EAAK,KAAK,CACZ,OAASE,EAAK,CACZD,EAAUC,CACZ,CACAN,EAAG,KAAKI,EAAK,SAAS,CACxB,CACF,KAAO,CACL,GAAI,CACF,MAAM,MAAM,CACd,OAASG,EAAK,CACZF,EAAUE,CACZ,EACCH,EAAOJ,EAAG,IACM,OAAOI,EAAK,OAA3B,YACAA,EAAK,MAAM,UAAY,CAAC,CAAC,CAC7B,CACF,OAASI,EAAQ,CACf,GAAIA,GAAUH,GAAwB,OAAOG,EAAO,OAA3B,SACvB,MAAO,CAACA,EAAO,MAAOH,EAAQ,KAAK,CACvC,CACA,MAAO,CAAC,KAAM,IAAI,CACpB,CACF,EACAF,EAAe,4BAA4B,YACzC,8BACF,IAAIM,EAAqB,OAAO,yBAC9BN,EAAe,4BACf,MACF,EACAM,GACEA,EAAmB,cACnB,OAAO,eACLN,EAAe,4BACf,OACA,CAAE,MAAO,6BAA8B,CACzC,EACF,IAAIO,EAAwBP,EAAe,4BAA4B,EACrEQ,EAAcD,EAAsB,CAAC,EACrCE,EAAeF,EAAsB,CAAC,EACxC,GAAIC,GAAeC,EAAc,CAC/B,IAAIC,EAAcF,EAAY,MAAM,IAAI,EACtCG,EAAeF,EAAa,MAAM,IAAI,EACxC,IACEH,EAAqBN,EAAiB,EACtCA,EAAiBU,EAAY,QAC7B,CAACA,EAAYV,CAAc,EAAE,SAAS,6BAA6B,GAGnEA,IACF,KAEEM,EAAqBK,EAAa,QAClC,CAACA,EAAaL,CAAkB,EAAE,SAChC,6BACF,GAGAA,IACF,GACEN,IAAmBU,EAAY,QAC/BJ,IAAuBK,EAAa,OAEpC,IACEX,EAAiBU,EAAY,OAAS,EACpCJ,EAAqBK,EAAa,OAAS,EAC7C,GAAKX,GACL,GAAKM,GACLI,EAAYV,CAAc,IAAMW,EAAaL,CAAkB,GAG/DA,IACJ,KAEE,GAAKN,GAAkB,GAAKM,EAC5BN,IAAkBM,IAElB,GAAII,EAAYV,CAAc,IAAMW,EAAaL,CAAkB,EAAG,CACpE,GAAUN,IAAN,GAA8BM,IAAN,EAC1B,EACE,IACGN,IACDM,IACA,EAAIA,GACFI,EAAYV,CAAc,IACxBW,EAAaL,CAAkB,EACnC,CACA,IAAIM,EACF,KACAF,EAAYV,CAAc,EAAE,QAAQ,WAAY,MAAM,EACxD,OAAAH,EAAG,aACDe,EAAM,SAAS,aAAa,IAC3BA,EAAQA,EAAM,QAAQ,cAAef,EAAG,WAAW,GAC/Ce,CACT,OACK,GAAKZ,GAAkB,GAAKM,GAErC,KACF,CACJ,CACF,QAAE,CACCX,GAAU,GAAM,MAAM,kBAAoBI,CAC7C,CACA,OAAQA,EAA4BF,EAAKA,EAAG,aAAeA,EAAG,KAAO,IACjEL,GAA8BO,CAAyB,EACvD,EACN,CACA,SAASc,GAAc1F,EAAO2F,EAAY,CACxC,OAAQ3F,EAAM,IAAK,CACjB,IAAK,IACL,IAAK,IACL,IAAK,GACH,OAAOqE,GAA8BrE,EAAM,IAAI,EACjD,IAAK,IACH,OAAOqE,GAA8B,MAAM,EAC7C,IAAK,IACH,OAAOrE,EAAM,QAAU2F,GAAuBA,IAAT,KACjCtB,GAA8B,mBAAmB,EACjDA,GAA8B,UAAU,EAC9C,IAAK,IACH,OAAOA,GAA8B,cAAc,EACrD,IAAK,GACL,IAAK,IACH,OAAOI,GAA6BzE,EAAM,KAAM,EAAE,EACpD,IAAK,IACH,OAAOyE,GAA6BzE,EAAM,KAAK,OAAQ,EAAE,EAC3D,IAAK,GACH,OAAOyE,GAA6BzE,EAAM,KAAM,EAAE,EACpD,IAAK,IACH,OAAOqE,GAA8B,UAAU,EACjD,QACE,MAAO,EACX,CACF,CACA,SAASuB,GAA4BC,EAAgB,CACnD,GAAI,CACF,IAAIC,EAAO,GACTC,EAAW,KACb,GACGD,GAAQJ,GAAcG,EAAgBE,CAAQ,EAC5CA,EAAWF,EACXA,EAAiBA,EAAe,aAC9BA,GACP,OAAOC,CACT,OAAStD,EAAG,CACV,MAAO,6BAA+BA,EAAE,QAAU,KAAOA,EAAE,KAC7D,CACF,CACA,IAAIwD,GAAiB,OAAO,UAAU,eACpCC,GAAqB3G,GAAU,0BAC/B4G,GAAmB5G,GAAU,wBAC7B6G,GAAc7G,GAAU,qBACxB8G,GAAe9G,GAAU,sBACzB+G,GAAM/G,GAAU,aAChBgH,GAA0BhH,GAAU,iCACpCiH,GAAoBjH,GAAU,2BAC9BkH,GAAuBlH,GAAU,8BACjCmH,GAAmBnH,GAAU,wBAC7BoH,GAAcpH,GAAU,qBACxBqH,GAAerH,GAAU,sBACzBsH,GAAQtH,GAAU,IAClBuH,GAAgCvH,GAAU,8BAC1CwH,GAAa,KACbC,GAAe,KACjB,SAASC,GAA2BC,EAAiB,CAEnD,GADe,OAAOL,IAAtB,YAA+BC,GAA8BI,CAAe,EACxEF,IAA+B,OAAOA,GAAa,eAAnC,WAClB,GAAI,CACFA,GAAa,cAAcD,GAAYG,CAAe,CACxD,OAASC,EAAK,CAAC,CACnB,CACA,IAAIC,GAAQ,KAAK,MAAQ,KAAK,MAAQC,GACpCC,GAAM,KAAK,IACXC,GAAM,KAAK,IACb,SAASF,GAAc5E,EAAG,CACxB,OAAAA,KAAO,EACMA,IAAN,EAAU,GAAM,IAAO6E,GAAI7E,CAAC,EAAI8E,GAAO,GAAM,CACtD,CACA,IAAIC,GAA2B,IAC7BC,GAA6B,OAC7BC,GAAgB,QAClB,SAASC,GAAwBC,EAAO,CACtC,IAAIC,EAAmBD,EAAQ,GAC/B,GAAUC,IAAN,EAAwB,OAAOA,EACnC,OAAQD,EAAQ,CAACA,EAAO,CACtB,IAAK,GACH,MAAO,GACT,IAAK,GACH,MAAO,GACT,IAAK,GACH,MAAO,GACT,IAAK,GACH,MAAO,GACT,IAAK,IACH,MAAO,IACT,IAAK,IACH,MAAO,IACT,IAAK,IACH,MAAO,IACT,IAAK,KACH,MAAO,KACT,IAAK,KACL,IAAK,KACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,OACL,IAAK,OACL,IAAK,OACL,IAAK,QACH,OAAOA,EAAQ,OACjB,IAAK,QACL,IAAK,QACL,IAAK,SACL,IAAK,SACH,OAAOA,EAAQ,QACjB,IAAK,SACL,IAAK,SACL,IAAK,UACL,IAAK,UACH,OAAOA,EAAQ,SACjB,IAAK,UACH,MAAO,UACT,IAAK,WACH,MAAO,WACT,IAAK,WACH,MAAO,WACT,IAAK,WACH,MAAO,WACT,IAAK,YACH,MAAO,GACT,QACE,OAAOA,CACX,CACF,CACA,SAASE,GAAaC,EAAMC,EAAUC,EAAsB,CAC1D,IAAIC,EAAeH,EAAK,aACxB,GAAUG,IAAN,EAAoB,MAAO,GAC/B,IAAIC,EAAY,EACdC,EAAiBL,EAAK,eACtBM,EAAcN,EAAK,YACrBA,EAAOA,EAAK,UACZ,IAAIO,EAAsBJ,EAAe,UACzC,OAAMI,IAAN,GACMJ,EAAeI,EAAsB,CAACF,EAClCF,IAAN,EACKC,EAAYR,GAAwBO,CAAY,GAC/CG,GAAeC,EACXD,IAAN,EACKF,EAAYR,GAAwBU,CAAW,EAChDJ,IACEA,EAAuBK,EAAsB,CAACP,EAC1CE,IAAN,IACGE,EAAYR,GAAwBM,CAAoB,OACjEK,EAAsBJ,EAAe,CAACE,EAClCE,IAAN,EACKH,EAAYR,GAAwBW,CAAmB,EAClDD,IAAN,EACGF,EAAYR,GAAwBU,CAAW,EAChDJ,IACEA,EAAuBC,EAAe,CAACH,EACnCE,IAAN,IACGE,EAAYR,GAAwBM,CAAoB,KACxDE,IAAN,EACH,EACMH,IAAN,GACEA,IAAaG,IACNH,EAAWI,KAAlB,IACEA,EAAiBD,EAAY,CAACA,EAC/BF,EAAuBD,EAAW,CAACA,EACpCI,GAAkBH,GACRG,IAAP,KAAgCH,EAAuB,WAA9B,GAC5BD,EACAG,CACR,CACA,SAASI,GAA0BR,EAAMS,EAAa,CACpD,OAEGT,EAAK,aACJ,EAAEA,EAAK,eAAiB,CAACA,EAAK,aAC9BS,KAHF,CAKJ,CACA,SAASC,GAAsBC,EAAMC,EAAa,CAChD,OAAQD,EAAM,CACZ,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,IACH,OAAOC,EAAc,IACvB,IAAK,IACL,IAAK,IACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,OACL,IAAK,OACL,IAAK,OACL,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,SACL,IAAK,SACH,OAAOA,EAAc,IACvB,IAAK,SACL,IAAK,SACL,IAAK,UACL,IAAK,UACH,MAAO,GACT,IAAK,UACL,IAAK,WACL,IAAK,WACL,IAAK,WACL,IAAK,YACH,MAAO,GACT,QACE,MAAO,EACX,CACF,CACA,SAASC,IAAqB,CAC5B,IAAIF,EAAOhB,GACX,OAAAA,KAAkB,GACXA,GAAgB,YAAvB,IAAqCA,GAAgB,SAC9CgB,CACT,CACA,SAASG,GAAcC,EAAS,CAC9B,QAASC,EAAU,CAAC,EAAGlJ,EAAI,EAAG,GAAKA,EAAGA,IAAKkJ,EAAQ,KAAKD,CAAO,EAC/D,OAAOC,CACT,CACA,SAASC,GAAkBjB,EAAMkB,EAAY,CAC3ClB,EAAK,cAAgBkB,EACPA,IAAd,YACIlB,EAAK,eAAiB,EAAKA,EAAK,YAAc,EAAKA,EAAK,UAAY,EAC1E,CACA,SAASmB,GACPnB,EACAoB,EACAC,EACAC,EACAC,EACAC,EACA,CACA,IAAIC,EAAyBzB,EAAK,aAClCA,EAAK,aAAeqB,EACpBrB,EAAK,eAAiB,EACtBA,EAAK,YAAc,EACnBA,EAAK,UAAY,EACjBA,EAAK,cAAgBqB,EACrBrB,EAAK,gBAAkBqB,EACvBrB,EAAK,4BAA8BqB,EACnCrB,EAAK,oBAAsB,EAC3B,IAAI0B,EAAgB1B,EAAK,cACvB2B,EAAkB3B,EAAK,gBACvB4B,EAAgB5B,EAAK,cACvB,IACEqB,EAAiBI,EAAyB,CAACJ,EAC3C,EAAIA,GAEJ,CACA,IAAIQ,EAAU,GAAKxC,GAAMgC,CAAc,EACrCV,EAAO,GAAKkB,EACdH,EAAcG,CAAO,EAAI,EACzBF,EAAgBE,CAAO,EAAI,GAC3B,IAAIC,EAAuBF,EAAcC,CAAO,EAChD,GAAaC,IAAT,KACF,IACEF,EAAcC,CAAO,EAAI,KAAMA,EAAU,EACzCA,EAAUC,EAAqB,OAC/BD,IACA,CACA,IAAIE,EAASD,EAAqBD,CAAO,EAChCE,IAAT,OAAoBA,EAAO,MAAQ,WACrC,CACFV,GAAkB,CAACV,CACrB,CACMW,IAAN,GAAqBU,GAAwBhC,EAAMsB,EAAa,CAAC,EAC3DE,IAAN,GACQD,IAAN,GACMvB,EAAK,MAAX,IACCA,EAAK,gBACJwB,EAAsB,EAAEC,EAAyB,CAACL,GACxD,CACA,SAASY,GAAwBhC,EAAMsB,EAAaW,EAAgB,CAClEjC,EAAK,cAAgBsB,EACrBtB,EAAK,gBAAkB,CAACsB,EACxB,IAAIY,EAAmB,GAAK7C,GAAMiC,CAAW,EAC7CtB,EAAK,gBAAkBsB,EACvBtB,EAAK,cAAckC,CAAgB,EACjClC,EAAK,cAAckC,CAAgB,EACnC,WACCD,EAAiB,MACtB,CACA,SAASE,GAAkBnC,EAAMiC,EAAgB,CAC/C,IAAIG,EAAsBpC,EAAK,gBAAkBiC,EACjD,IAAKjC,EAAOA,EAAK,cAAeoC,GAAsB,CACpD,IAAIC,EAAU,GAAKhD,GAAM+C,CAAkB,EACzCzB,EAAO,GAAK0B,EACb1B,EAAOsB,EAAmBjC,EAAKqC,CAAO,EAAIJ,IACxCjC,EAAKqC,CAAO,GAAKJ,GACpBG,GAAsB,CAACzB,CACzB,CACF,CACA,SAAS2B,GAA0BtC,EAAMS,EAAa,CACpD,IAAI8B,EAAa9B,EAAc,CAACA,EAChC,OAAA8B,GACSA,EAAa,MAApB,EAA0B,EAAIC,GAAgCD,CAAU,GAC5DA,GAAcvC,EAAK,eAAiBS,MAA3C,EACH,EACA8B,CACN,CACA,SAASC,GAAgC7B,EAAM,CAC7C,OAAQA,EAAM,CACZ,IAAK,GACHA,EAAO,EACP,MACF,IAAK,GACHA,EAAO,EACP,MACF,IAAK,IACHA,EAAO,GACP,MACF,IAAK,KACL,IAAK,KACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,OACL,IAAK,OACL,IAAK,OACL,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,UACL,IAAK,UACHA,EAAO,IACP,MACF,IAAK,WACHA,EAAO,UACP,MACF,QACEA,EAAO,CACX,CACA,OAAOA,CACT,CACA,SAAS8B,GAAqB5C,EAAO,CACnC,OAAAA,GAAS,CAACA,EACH,EAAIA,EACP,EAAIA,GACKA,EAAQ,aAAf,EACE,GACA,UACF,EACF,CACN,CACA,SAAS6C,IAAwB,CAC/B,IAAIC,EAAiB9H,GAAwB,EAC7C,OAAU8H,IAAN,EAA6BA,GACjCA,EAAiB,OAAO,MACNA,IAAX,OAA4B,GAAKC,GAAiBD,EAAe,IAAI,EAC9E,CACA,SAASE,GAAgBC,EAAUlG,EAAI,CACrC,IAAImG,EAAmBlI,GAAwB,EAC/C,GAAI,CACF,OAAQA,GAAwB,EAAIiI,EAAWlG,EAAG,CACpD,QAAE,CACA/B,GAAwB,EAAIkI,CAC9B,CACF,CACA,IAAIC,GAAY,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC,EAChDC,GAAsB,gBAAkBD,GACxCE,GAAmB,gBAAkBF,GACrCG,GAA+B,oBAAsBH,GACrDI,GAA2B,iBAAmBJ,GAC9CK,GAAmC,oBAAsBL,GACzDM,GAA6B,kBAAoBN,GACjDO,GAA+B,oBAAsBP,GACrDQ,GAA0B,iBAAmBR,GAC/C,SAASS,GAAsBzL,EAAM,CACnC,OAAOA,EAAKiL,EAAmB,EAC/B,OAAOjL,EAAKkL,EAAgB,EAC5B,OAAOlL,EAAKoL,EAAwB,EACpC,OAAOpL,EAAKqL,EAAgC,EAC5C,OAAOrL,EAAKsL,EAA0B,CACxC,CACA,SAASI,GAA2BC,EAAY,CAC9C,IAAIC,EAAaD,EAAWV,EAAmB,EAC/C,GAAIW,EAAY,OAAOA,EACvB,QAASC,EAAaF,EAAW,WAAYE,GAAc,CACzD,GACGD,EACCC,EAAWV,EAA4B,GACvCU,EAAWZ,EAAmB,EAChC,CAEA,GADAY,EAAaD,EAAW,UAEbA,EAAW,QAApB,MACUC,IAAT,MAAgCA,EAAW,QAApB,KAExB,IACEF,EAAaG,GAA2BH,CAAU,EACzCA,IAAT,MAEA,CACA,GAAKE,EAAaF,EAAWV,EAAmB,EAAI,OAAOY,EAC3DF,EAAaG,GAA2BH,CAAU,CACpD,CACF,OAAOC,CACT,CACAD,EAAaE,EACbA,EAAaF,EAAW,UAC1B,CACA,OAAO,IACT,CACA,SAASI,GAAoB/L,EAAM,CACjC,GACGA,EAAOA,EAAKiL,EAAmB,GAAKjL,EAAKmL,EAA4B,EACtE,CACA,IAAIjK,EAAMlB,EAAK,IACf,GACQkB,IAAN,GACMA,IAAN,GACOA,IAAP,IACOA,IAAP,IACOA,IAAP,IACOA,IAAP,IACMA,IAAN,EAEA,OAAOlB,CACX,CACA,OAAO,IACT,CACA,SAASgM,GAAoBC,EAAM,CACjC,IAAI/K,EAAM+K,EAAK,IACf,GAAU/K,IAAN,GAAoBA,IAAP,IAAqBA,IAAP,IAAoBA,IAAN,EAAW,OAAO+K,EAAK,UACpE,MAAM,MAAMtM,EAAuB,EAAE,CAAC,CACxC,CACA,SAASuM,GAAqBlE,EAAM,CAClC,IAAImE,EAAYnE,EAAKuD,EAA4B,EACjD,OAAAY,IACGA,EAAYnE,EAAKuD,EAA4B,EAC5C,CAAE,gBAAiB,IAAI,IAAO,iBAAkB,IAAI,GAAM,GACvDY,CACT,CACA,SAASC,GAAoBpM,EAAM,CACjCA,EAAKwL,EAAuB,EAAI,EAClC,CACA,IAAIa,GAAkB,IAAI,IACxBC,GAA+B,CAAC,EAClC,SAASC,GAAsBC,EAAkBC,EAAc,CAC7DC,GAAoBF,EAAkBC,CAAY,EAClDC,GAAoBF,EAAmB,UAAWC,CAAY,CAChE,CACA,SAASC,GAAoBF,EAAkBC,EAAc,CAE3D,IADAH,GAA6BE,CAAgB,EAAIC,EAE/CD,EAAmB,EACnBA,EAAmBC,EAAa,OAChCD,IAEAH,GAAgB,IAAII,EAAaD,CAAgB,CAAC,CACtD,CACA,IAAIG,GAA6B,OAC7B,+YACF,EACAC,GAA4B,CAAC,EAC7BC,GAA8B,CAAC,EACjC,SAASC,GAAoBC,EAAe,CAC1C,OAAI7G,GAAe,KAAK2G,GAA6BE,CAAa,EACzD,GACL7G,GAAe,KAAK0G,GAA2BG,CAAa,EAAU,GACtEJ,GAA2B,KAAKI,CAAa,EACvCF,GAA4BE,CAAa,EAAI,IACvDH,GAA0BG,CAAa,EAAI,GACpC,GACT,CACA,SAASC,GAAqBhN,EAAMwE,EAAMlB,EAAO,CAC/C,GAAIwJ,GAAoBtI,CAAI,EAC1B,GAAalB,IAAT,KAAgBtD,EAAK,gBAAgBwE,CAAI,MACxC,CACH,OAAQ,OAAOlB,EAAO,CACpB,IAAK,YACL,IAAK,WACL,IAAK,SACHtD,EAAK,gBAAgBwE,CAAI,EACzB,OACF,IAAK,UACH,IAAIyI,EAAYzI,EAAK,YAAY,EAAE,MAAM,EAAG,CAAC,EAC7C,GAAgByI,IAAZ,SAAqCA,IAAZ,QAAuB,CAClDjN,EAAK,gBAAgBwE,CAAI,EACzB,MACF,CACJ,CACAxE,EAAK,aAAawE,EAAM,GAAKlB,CAAK,CACpC,CACJ,CACA,SAAS4J,GAA0BlN,EAAMwE,EAAMlB,EAAO,CACpD,GAAaA,IAAT,KAAgBtD,EAAK,gBAAgBwE,CAAI,MACxC,CACH,OAAQ,OAAOlB,EAAO,CACpB,IAAK,YACL,IAAK,WACL,IAAK,SACL,IAAK,UACHtD,EAAK,gBAAgBwE,CAAI,EACzB,MACJ,CACAxE,EAAK,aAAawE,EAAM,GAAKlB,CAAK,CACpC,CACF,CACA,SAAS6J,GAA+BnN,EAAMoN,EAAW5I,EAAMlB,EAAO,CACpE,GAAaA,IAAT,KAAgBtD,EAAK,gBAAgBwE,CAAI,MACxC,CACH,OAAQ,OAAOlB,EAAO,CACpB,IAAK,YACL,IAAK,WACL,IAAK,SACL,IAAK,UACHtD,EAAK,gBAAgBwE,CAAI,EACzB,MACJ,CACAxE,EAAK,eAAeoN,EAAW5I,EAAM,GAAKlB,CAAK,CACjD,CACF,CACA,SAAS+J,GAAiB/J,EAAO,CAC/B,OAAQ,OAAOA,EAAO,CACpB,IAAK,SACL,IAAK,UACL,IAAK,SACL,IAAK,SACL,IAAK,YACH,OAAOA,EACT,IAAK,SACH,OAAOA,EACT,QACE,MAAO,EACX,CACF,CACA,SAASgK,GAAYC,EAAM,CACzB,IAAI/K,EAAO+K,EAAK,KAChB,OACGA,EAAOA,EAAK,WACDA,EAAK,YAAY,IAA7B,UACgB/K,IAAf,YAAmCA,IAAZ,QAE5B,CACA,SAASgL,GAAiBxN,EAAMyN,EAAYC,EAAc,CACxD,IAAIC,EAAa,OAAO,yBACtB3N,EAAK,YAAY,UACjByN,CACF,EACA,GACE,CAACzN,EAAK,eAAeyN,CAAU,GACf,OAAOE,EAAvB,KACe,OAAOA,EAAW,KAAjC,YACe,OAAOA,EAAW,KAAjC,WACA,CACA,IAAIC,EAAMD,EAAW,IACnBE,EAAMF,EAAW,IACnB,cAAO,eAAe3N,EAAMyN,EAAY,CACtC,aAAc,GACd,IAAK,UAAY,CACf,OAAOG,EAAI,KAAK,IAAI,CACtB,EACA,IAAK,SAAUtK,EAAO,CACpBoK,EAAe,GAAKpK,EACpBuK,EAAI,KAAK,KAAMvK,CAAK,CACtB,CACF,CAAC,EACD,OAAO,eAAetD,EAAMyN,EAAY,CACtC,WAAYE,EAAW,UACzB,CAAC,EACM,CACL,SAAU,UAAY,CACpB,OAAOD,CACT,EACA,SAAU,SAAUpK,EAAO,CACzBoK,EAAe,GAAKpK,CACtB,EACA,aAAc,UAAY,CACxBtD,EAAK,cAAgB,KACrB,OAAOA,EAAKyN,CAAU,CACxB,CACF,CACF,CACF,CACA,SAASK,GAAM9N,EAAM,CACnB,GAAI,CAACA,EAAK,cAAe,CACvB,IAAIyN,EAAaH,GAAYtN,CAAI,EAAI,UAAY,QACjDA,EAAK,cAAgBwN,GACnBxN,EACAyN,EACA,GAAKzN,EAAKyN,CAAU,CACtB,CACF,CACF,CACA,SAASM,GAAqB/N,EAAM,CAClC,GAAI,CAACA,EAAM,MAAO,GAClB,IAAIgO,EAAUhO,EAAK,cACnB,GAAI,CAACgO,EAAS,MAAO,GACrB,IAAIC,EAAYD,EAAQ,SAAS,EAC7B1K,EAAQ,GACZ,OAAAtD,IACGsD,EAAQgK,GAAYtN,CAAI,EACrBA,EAAK,QACH,OACA,QACFA,EAAK,OACXA,EAAOsD,EACAtD,IAASiO,GAAaD,EAAQ,SAAShO,CAAI,EAAG,IAAM,EAC7D,CACA,SAASkO,GAAiBC,EAAK,CAE7B,GADAA,EAAMA,IAAwB,OAAO,SAAvB,IAAkC,SAAW,QACvC,OAAOA,EAAvB,IAA4B,OAAO,KACvC,GAAI,CACF,OAAOA,EAAI,eAAiBA,EAAI,IAClC,OAASC,EAAG,CACV,OAAOD,EAAI,IACb,CACF,CACA,IAAIE,GAAsD,WAC1D,SAASC,GAA+ChL,EAAO,CAC7D,OAAOA,EAAM,QACX+K,GACA,SAAUE,EAAI,CACZ,MAAO,KAAOA,EAAG,WAAW,CAAC,EAAE,SAAS,EAAE,EAAI,GAChD,CACF,CACF,CACA,SAASC,GACPC,EACAnL,EACAJ,EACAwL,EACAC,EACAC,EACApM,EACAgC,EACA,CACAiK,EAAQ,KAAO,GACPjM,GAAR,MACe,OAAOA,GAAtB,YACa,OAAOA,GAApB,UACc,OAAOA,GAArB,UACKiM,EAAQ,KAAOjM,EAChBiM,EAAQ,gBAAgB,MAAM,EACtBnL,GAAR,KACed,IAAb,UACSc,IAAN,GAAsBmL,EAAQ,QAAf,IAAyBA,EAAQ,OAASnL,KAC5DmL,EAAQ,MAAQ,GAAKpB,GAAiB/J,CAAK,GAE7CmL,EAAQ,QAAU,GAAKpB,GAAiB/J,CAAK,IAC1CmL,EAAQ,MAAQ,GAAKpB,GAAiB/J,CAAK,GAElCd,IAAb,UAAiCA,IAAZ,SAAqBiM,EAAQ,gBAAgB,OAAO,EACpEnL,GAAR,KACIuL,GAAgBJ,EAASjM,EAAM6K,GAAiB/J,CAAK,CAAC,EAC9CJ,GAAR,KACE2L,GAAgBJ,EAASjM,EAAM6K,GAAiBnK,CAAY,CAAC,EACrDwL,GAAR,MAA4BD,EAAQ,gBAAgB,OAAO,EACzDE,GAAR,MACUC,GAAR,OACCH,EAAQ,eAAiB,CAAC,CAACG,GACtBD,GAAR,OACGF,EAAQ,QACPE,GAA0B,OAAOA,GAAtB,YAA8C,OAAOA,GAApB,UACxCnK,GAAR,MACe,OAAOA,GAAtB,YACa,OAAOA,GAApB,UACc,OAAOA,GAArB,UACKiK,EAAQ,KAAO,GAAKpB,GAAiB7I,CAAI,EAC1CiK,EAAQ,gBAAgB,MAAM,CACpC,CACA,SAASK,GACPL,EACAnL,EACAJ,EACAyL,EACAC,EACApM,EACAgC,EACAuK,EACA,CAMA,GALQvM,GAAR,MACiB,OAAOA,GAAtB,YACa,OAAOA,GAApB,UACc,OAAOA,GAArB,YACCiM,EAAQ,KAAOjM,GACNc,GAAR,MAAyBJ,GAAR,KAAsB,CACzC,GACE,EACgBV,IAAb,UAAiCA,IAAZ,SACQc,GAAT,MAEvB,CACAwK,GAAMW,CAAO,EACb,MACF,CACAvL,EACUA,GAAR,KAAuB,GAAKmK,GAAiBnK,CAAY,EAAI,GAC/DI,EAAgBA,GAAR,KAAgB,GAAK+J,GAAiB/J,CAAK,EAAIJ,EACvD6L,GAAezL,IAAUmL,EAAQ,QAAUA,EAAQ,MAAQnL,GAC3DmL,EAAQ,aAAenL,CACzB,CACAqL,EAAkBA,GAAR,KAAkBA,EAAUC,EACtCD,EACiB,OAAOA,GAAtB,YAA8C,OAAOA,GAApB,UAA+B,CAAC,CAACA,EACpEF,EAAQ,QAAUM,EAAcN,EAAQ,QAAU,CAAC,CAACE,EACpDF,EAAQ,eAAiB,CAAC,CAACE,EACnBnK,GAAR,MACiB,OAAOA,GAAtB,YACa,OAAOA,GAApB,UACc,OAAOA,GAArB,YACCiK,EAAQ,KAAOjK,GAClBsJ,GAAMW,CAAO,CACf,CACA,SAASI,GAAgB7O,EAAMwC,EAAMc,EAAO,CAC5Bd,IAAb,UAAqB0L,GAAiBlO,EAAK,aAAa,IAAMA,GAC7DA,EAAK,eAAiB,GAAKsD,IAC1BtD,EAAK,aAAe,GAAKsD,EAC9B,CACA,SAAS0L,GAAchP,EAAMiP,EAAUC,EAAWC,EAAoB,CAEpE,GADAnP,EAAOA,EAAK,QACRiP,EAAU,CACZA,EAAW,CAAC,EACZ,QAASnP,EAAI,EAAGA,EAAIoP,EAAU,OAAQpP,IACpCmP,EAAS,IAAMC,EAAUpP,CAAC,CAAC,EAAI,GACjC,IAAKoP,EAAY,EAAGA,EAAYlP,EAAK,OAAQkP,IAC1CpP,EAAImP,EAAS,eAAe,IAAMjP,EAAKkP,CAAS,EAAE,KAAK,EACtDlP,EAAKkP,CAAS,EAAE,WAAapP,IAAME,EAAKkP,CAAS,EAAE,SAAWpP,GAC9DA,GAAKqP,IAAuBnP,EAAKkP,CAAS,EAAE,gBAAkB,GACpE,KAAO,CAGL,IAFAA,EAAY,GAAK7B,GAAiB6B,CAAS,EAC3CD,EAAW,KACNnP,EAAI,EAAGA,EAAIE,EAAK,OAAQF,IAAK,CAChC,GAAIE,EAAKF,CAAC,EAAE,QAAUoP,EAAW,CAC/BlP,EAAKF,CAAC,EAAE,SAAW,GACnBqP,IAAuBnP,EAAKF,CAAC,EAAE,gBAAkB,IACjD,MACF,CACSmP,IAAT,MAAqBjP,EAAKF,CAAC,EAAE,WAAamP,EAAWjP,EAAKF,CAAC,EAC7D,CACSmP,IAAT,OAAsBA,EAAS,SAAW,GAC5C,CACF,CACA,SAASG,GAAeX,EAASnL,EAAOJ,EAAc,CACpD,GACUI,GAAR,OACEA,EAAQ,GAAK+J,GAAiB/J,CAAK,EACrCA,IAAUmL,EAAQ,QAAUA,EAAQ,MAAQnL,GACpCJ,GAAR,MACA,CACAuL,EAAQ,eAAiBnL,IAAUmL,EAAQ,aAAenL,GAC1D,MACF,CACAmL,EAAQ,aACEvL,GAAR,KAAuB,GAAKmK,GAAiBnK,CAAY,EAAI,EACjE,CACA,SAASmM,GAAaZ,EAASnL,EAAOJ,EAAcoM,EAAU,CAC5D,GAAYhM,GAAR,KAAe,CACjB,GAAYgM,GAAR,KAAkB,CACpB,GAAYpM,GAAR,KAAsB,MAAM,MAAMvD,EAAuB,EAAE,CAAC,EAChE,GAAIgD,GAAY2M,CAAQ,EAAG,CACzB,GAAI,EAAIA,EAAS,OAAQ,MAAM,MAAM3P,EAAuB,EAAE,CAAC,EAC/D2P,EAAWA,EAAS,CAAC,CACvB,CACApM,EAAeoM,CACjB,CACQpM,GAAR,OAAyBA,EAAe,IACxCI,EAAQJ,CACV,CACAA,EAAemK,GAAiB/J,CAAK,EACrCmL,EAAQ,aAAevL,EACvBoM,EAAWb,EAAQ,YACnBa,IAAapM,GACJoM,IAAP,IACSA,IAAT,OACCb,EAAQ,MAAQa,GACnBxB,GAAMW,CAAO,CACf,CACA,SAASc,GAAevP,EAAMwP,EAAM,CAClC,GAAIA,EAAM,CACR,IAAIC,EAAazP,EAAK,WACtB,GACEyP,GACAA,IAAezP,EAAK,WACdyP,EAAW,WAAjB,EACA,CACAA,EAAW,UAAYD,EACvB,MACF,CACF,CACAxP,EAAK,YAAcwP,CACrB,CACA,IAAIE,GAAkB,IAAI,IACxB,26BAA26B,MACz6B,GACF,CACF,EACA,SAASC,GAAiBC,EAAOC,EAAWvM,EAAO,CACjD,IAAIwM,EAAyBD,EAAU,QAAQ,IAAI,IAA5B,EACfvM,GAAR,MAA+B,OAAOA,GAArB,WAAqCA,IAAP,GAC3CwM,EACEF,EAAM,YAAYC,EAAW,EAAE,EACnBA,IAAZ,QACGD,EAAM,SAAW,GACjBA,EAAMC,CAAS,EAAI,GACxBC,EACEF,EAAM,YAAYC,EAAWvM,CAAK,EACrB,OAAOA,GAApB,UACQA,IAAN,GACAoM,GAAgB,IAAIG,CAAS,EACjBA,IAAZ,QACGD,EAAM,SAAWtM,EACjBsM,EAAMC,CAAS,GAAK,GAAKvM,GAAO,KAAK,EACvCsM,EAAMC,CAAS,EAAIvM,EAAQ,IACtC,CACA,SAASyM,GAAkB/P,EAAMgQ,EAAQC,EAAY,CACnD,GAAYD,GAAR,MAA+B,OAAOA,GAApB,SACpB,MAAM,MAAMrQ,EAAuB,EAAE,CAAC,EAExC,GADAK,EAAOA,EAAK,MACAiQ,GAAR,KAAoB,CACtB,QAASJ,KAAaI,EACpB,CAACA,EAAW,eAAeJ,CAAS,GACzBG,GAAR,MAAkBA,EAAO,eAAeH,CAAS,IAC3CA,EAAU,QAAQ,IAAI,IAA5B,EACG7P,EAAK,YAAY6P,EAAW,EAAE,EAClBA,IAAZ,QACG7P,EAAK,SAAW,GAChBA,EAAK6P,CAAS,EAAI,IAC7B,QAASK,KAAgBF,EACtBH,EAAYG,EAAOE,CAAY,EAC9BF,EAAO,eAAeE,CAAY,GAChCD,EAAWC,CAAY,IAAML,GAC7BF,GAAiB3P,EAAMkQ,EAAcL,CAAS,CACtD,KACE,SAASM,KAAgBH,EACvBA,EAAO,eAAeG,CAAY,GAChCR,GAAiB3P,EAAMmQ,EAAcH,EAAOG,CAAY,CAAC,CACjE,CACA,SAASC,GAAgBC,EAAS,CAChC,GAAWA,EAAQ,QAAQ,GAAG,IAA1B,GAA6B,MAAO,GACxC,OAAQA,EAAS,CACf,IAAK,iBACL,IAAK,gBACL,IAAK,YACL,IAAK,gBACL,IAAK,gBACL,IAAK,mBACL,IAAK,iBACL,IAAK,gBACH,MAAO,GACT,QACE,MAAO,EACX,CACF,CACA,IAAIC,GAAU,IAAI,IAAI,CAClB,CAAC,gBAAiB,gBAAgB,EAClC,CAAC,UAAW,KAAK,EACjB,CAAC,YAAa,YAAY,EAC1B,CAAC,cAAe,aAAa,EAC7B,CAAC,eAAgB,eAAe,EAChC,CAAC,oBAAqB,oBAAoB,EAC1C,CAAC,aAAc,aAAa,EAC5B,CAAC,gBAAiB,gBAAgB,EAClC,CAAC,YAAa,YAAY,EAC1B,CAAC,WAAY,WAAW,EACxB,CAAC,WAAY,WAAW,EACxB,CAAC,qBAAsB,qBAAqB,EAC5C,CAAC,4BAA6B,6BAA6B,EAC3D,CAAC,eAAgB,eAAe,EAChC,CAAC,iBAAkB,iBAAiB,EACpC,CAAC,mBAAoB,mBAAmB,EACxC,CAAC,mBAAoB,mBAAmB,EACxC,CAAC,cAAe,cAAc,EAC9B,CAAC,WAAY,WAAW,EACxB,CAAC,aAAc,aAAa,EAC5B,CAAC,eAAgB,eAAe,EAChC,CAAC,aAAc,aAAa,EAC5B,CAAC,WAAY,WAAW,EACxB,CAAC,iBAAkB,kBAAkB,EACrC,CAAC,cAAe,cAAc,EAC9B,CAAC,YAAa,YAAY,EAC1B,CAAC,cAAe,cAAc,EAC9B,CAAC,aAAc,aAAa,EAC5B,CAAC,YAAa,YAAY,EAC1B,CAAC,6BAA8B,8BAA8B,EAC7D,CAAC,2BAA4B,4BAA4B,EACzD,CAAC,YAAa,aAAa,EAC3B,CAAC,eAAgB,gBAAgB,EACjC,CAAC,iBAAkB,iBAAiB,EACpC,CAAC,gBAAiB,gBAAgB,EAClC,CAAC,gBAAiB,gBAAgB,EAClC,CAAC,YAAa,YAAY,EAC1B,CAAC,YAAa,YAAY,EAC1B,CAAC,cAAe,cAAc,EAC9B,CAAC,mBAAoB,mBAAmB,EACxC,CAAC,oBAAqB,oBAAoB,EAC1C,CAAC,aAAc,aAAa,EAC5B,CAAC,WAAY,UAAU,EACvB,CAAC,gBAAiB,gBAAgB,EAClC,CAAC,kBAAmB,kBAAkB,EACtC,CAAC,iBAAkB,iBAAiB,EACpC,CAAC,YAAa,YAAY,EAC1B,CAAC,cAAe,cAAc,EAC9B,CAAC,wBAAyB,wBAAwB,EAClD,CAAC,yBAA0B,yBAAyB,EACpD,CAAC,kBAAmB,kBAAkB,EACtC,CAAC,mBAAoB,mBAAmB,EACxC,CAAC,gBAAiB,gBAAgB,EAClC,CAAC,iBAAkB,iBAAiB,EACpC,CAAC,mBAAoB,mBAAmB,EACxC,CAAC,gBAAiB,gBAAgB,EAClC,CAAC,cAAe,cAAc,EAC9B,CAAC,aAAc,aAAa,EAC5B,CAAC,iBAAkB,iBAAiB,EACpC,CAAC,gBAAiB,gBAAgB,EAClC,CAAC,kBAAmB,kBAAkB,EACtC,CAAC,oBAAqB,oBAAoB,EAC1C,CAAC,qBAAsB,qBAAqB,EAC5C,CAAC,cAAe,cAAc,EAC9B,CAAC,eAAgB,eAAe,EAChC,CAAC,aAAc,cAAc,EAC7B,CAAC,cAAe,cAAc,EAC9B,CAAC,WAAY,WAAW,EACxB,CAAC,eAAgB,eAAe,EAChC,CAAC,gBAAiB,gBAAgB,EAClC,CAAC,eAAgB,eAAe,EAChC,CAAC,WAAY,YAAY,EACzB,CAAC,cAAe,eAAe,EAC/B,CAAC,cAAe,eAAe,EAC/B,CAAC,cAAe,cAAc,EAC9B,CAAC,cAAe,cAAc,EAC9B,CAAC,aAAc,aAAa,EAC5B,CAAC,UAAW,UAAU,CACxB,CAAC,EACDC,GACE,2HACJ,SAASC,GAAY3Q,EAAK,CACxB,OAAO0Q,GAAqB,KAAK,GAAK1Q,CAAG,EACrC,8FACAA,CACN,CACA,SAAS4Q,IAAS,CAAC,CACnB,IAAIC,GAAwB,KAC5B,SAASC,GAAeC,EAAa,CACnC,OAAAA,EAAcA,EAAY,QAAUA,EAAY,YAAc,OAC9DA,EAAY,0BACTA,EAAcA,EAAY,yBAChBA,EAAY,WAAlB,EAA6BA,EAAY,WAAaA,CAC/D,CACA,IAAIC,GAAgB,KAClBC,GAAe,KACjB,SAASC,GAAqBC,EAAQ,CACpC,IAAIC,EAAmBlF,GAAoBiF,CAAM,EACjD,GAAIC,IAAqBD,EAASC,EAAiB,WAAY,CAC7D,IAAIC,EAAQF,EAAO9F,EAAgB,GAAK,KACxCvK,EAAG,OAAUqQ,EAASC,EAAiB,UAAYA,EAAiB,KAAO,CACzE,IAAK,QAYH,GAXAzC,GACEwC,EACAE,EAAM,MACNA,EAAM,aACNA,EAAM,aACNA,EAAM,QACNA,EAAM,eACNA,EAAM,KACNA,EAAM,IACR,EACAD,EAAmBC,EAAM,KACTA,EAAM,OAAlB,SAAkCD,GAAR,KAA0B,CACtD,IAAKC,EAAQF,EAAQE,EAAM,YAAcA,EAAQA,EAAM,WAQvD,IAPAA,EAAQA,EAAM,iBACZ,eACE5C,GACE,GAAK2C,CACP,EACA,kBACJ,EAEEA,EAAmB,EACnBA,EAAmBC,EAAM,OACzBD,IACA,CACA,IAAIE,EAAYD,EAAMD,CAAgB,EACtC,GAAIE,IAAcH,GAAUG,EAAU,OAASH,EAAO,KAAM,CAC1D,IAAII,EAAaD,EAAUjG,EAAgB,GAAK,KAChD,GAAI,CAACkG,EAAY,MAAM,MAAMzR,EAAuB,EAAE,CAAC,EACvD6O,GACE2C,EACAC,EAAW,MACXA,EAAW,aACXA,EAAW,aACXA,EAAW,QACXA,EAAW,eACXA,EAAW,KACXA,EAAW,IACb,CACF,CACF,CACA,IACEH,EAAmB,EACnBA,EAAmBC,EAAM,OACzBD,IAECE,EAAYD,EAAMD,CAAgB,EACjCE,EAAU,OAASH,EAAO,MAAQjD,GAAqBoD,CAAS,CACtE,CACA,MAAMxQ,EACR,IAAK,WACHyO,GAAe4B,EAAQE,EAAM,MAAOA,EAAM,YAAY,EACtD,MAAMvQ,EACR,IAAK,SACFsQ,EAAmBC,EAAM,MAChBD,GAAR,MACEjC,GAAcgC,EAAQ,CAAC,CAACE,EAAM,SAAUD,EAAkB,EAAE,CACpE,CACF,CACF,CACA,IAAII,GAAuB,GAC3B,SAASC,GAAiB1M,EAAIjE,EAAGC,EAAG,CAClC,GAAIyQ,GAAsB,OAAOzM,EAAGjE,EAAGC,CAAC,EACxCyQ,GAAuB,GACvB,GAAI,CACF,IAAInN,EAA2BU,EAAGjE,CAAC,EACnC,OAAOuD,CACT,QAAE,CACA,GACImN,GAAuB,IAChBR,KAAT,MAAmCC,KAAT,QAGvBS,GAAgB,EACjBV,KACIlQ,EAAIkQ,GACLjM,EAAKkM,GACLA,GAAeD,GAAgB,KAChCE,GAAqBpQ,CAAC,EACtBiE,IAEF,IAAKjE,EAAI,EAAGA,EAAIiE,EAAG,OAAQjE,IAAKoQ,GAAqBnM,EAAGjE,CAAC,CAAC,CAChE,CACF,CACA,SAAS6Q,GAAYvF,EAAMO,EAAkB,CAC3C,IAAIiF,EAAYxF,EAAK,UACrB,GAAawF,IAAT,KAAoB,OAAO,KAC/B,IAAIP,EAAQO,EAAUvG,EAAgB,GAAK,KAC3C,GAAagG,IAAT,KAAgB,OAAO,KAC3BO,EAAYP,EAAM1E,CAAgB,EAClC7L,EAAG,OAAQ6L,EAAkB,CAC3B,IAAK,UACL,IAAK,iBACL,IAAK,gBACL,IAAK,uBACL,IAAK,cACL,IAAK,qBACL,IAAK,cACL,IAAK,qBACL,IAAK,YACL,IAAK,mBACL,IAAK,gBACF0E,EAAQ,CAACA,EAAM,YACZjF,EAAOA,EAAK,KACbiF,EAAQ,EACMjF,IAAb,UACYA,IAAZ,SACaA,IAAb,UACeA,IAAf,aAEJA,EAAO,CAACiF,EACR,MAAMvQ,EACR,QACEsL,EAAO,EACX,CACA,GAAIA,EAAM,OAAO,KACjB,GAAIwF,GAA4B,OAAOA,GAAtB,WACf,MAAM,MACJ9R,EAAuB,IAAK6M,EAAkB,OAAOiF,CAAS,CAChE,EACF,OAAOA,CACT,CACA,IAAIC,GAAY,EACI,OAAO,OAAvB,KACgB,OAAO,OAAO,SAA9B,KACgB,OAAO,OAAO,SAAS,cAAvC,KAEFC,GAAgC,GAClC,GAAID,GACF,GAAI,CACEE,GAAU,CAAC,EACf,OAAO,eAAeA,GAAS,UAAW,CACxC,IAAK,UAAY,CACfD,GAAgC,EAClC,CACF,CAAC,EACD,OAAO,iBAAiB,OAAQC,GAASA,EAAO,EAChD,OAAO,oBAAoB,OAAQA,GAASA,EAAO,CACrD,OAAS,EAAG,CACVD,GAAgC,EAClC,CAVM,IAAAC,GAWJ5J,GAAO,KACT6J,GAAY,KACZC,GAAe,KACjB,SAASC,IAAU,CACjB,GAAID,GAAc,OAAOA,GACzB,IAAIE,EACFC,EAAaJ,GACbK,EAAcD,EAAW,OACzBE,EACAC,EAAW,UAAWpK,GAAOA,GAAK,MAAQA,GAAK,YAC/CqK,EAAYD,EAAS,OACvB,IACEJ,EAAQ,EACRA,EAAQE,GAAeD,EAAWD,CAAK,IAAMI,EAASJ,CAAK,EAC3DA,IACD,CACD,IAAIM,EAASJ,EAAcF,EAC3B,IACEG,EAAM,EACNA,GAAOG,GACPL,EAAWC,EAAcC,CAAG,IAAMC,EAASC,EAAYF,CAAG,EAC1DA,IACD,CACD,OAAQL,GAAeM,EAAS,MAAMJ,EAAO,EAAIG,EAAM,EAAIA,EAAM,MAAM,CACzE,CACA,SAASI,GAAiB3B,EAAa,CACrC,IAAI4B,EAAU5B,EAAY,QAC1B,mBAAcA,GACRA,EAAcA,EAAY,SACtBA,IAAN,GAA4B4B,IAAP,KAAmB5B,EAAc,KACrDA,EAAc4B,EACZ5B,IAAP,KAAuBA,EAAc,IAC9B,IAAMA,GAAsBA,IAAP,GAAqBA,EAAc,CACjE,CACA,SAAS6B,IAA0B,CACjC,MAAO,EACT,CACA,SAASC,IAA2B,CAClC,MAAO,EACT,CACA,SAASC,GAAqBC,EAAW,CACvC,SAASC,EACPC,EACAC,EACAnH,EACAgF,EACAoC,EACA,CACA,KAAK,WAAaF,EAClB,KAAK,YAAclH,EACnB,KAAK,KAAOmH,EACZ,KAAK,YAAcnC,EACnB,KAAK,OAASoC,EACd,KAAK,cAAgB,KACrB,QAASC,KAAYL,EACnBA,EAAU,eAAeK,CAAQ,IAC7BH,EAAYF,EAAUK,CAAQ,EAC/B,KAAKA,CAAQ,EAAIH,EACdA,EAAUlC,CAAW,EACrBA,EAAYqC,CAAQ,GAC5B,YAAK,oBACKrC,EAAY,kBAApB,KACIA,EAAY,iBACLA,EAAY,cAAnB,IAEF6B,GACAC,GACJ,KAAK,qBAAuBA,GACrB,IACT,CACA,OAAAvR,GAAO0R,EAAmB,UAAW,CACnC,eAAgB,UAAY,CAC1B,KAAK,iBAAmB,GACxB,IAAIK,EAAQ,KAAK,YACjBA,IACGA,EAAM,eACHA,EAAM,eAAe,EACP,OAAOA,EAAM,aAA3B,YAA2CA,EAAM,YAAc,IAClE,KAAK,mBAAqBT,GAC/B,EACA,gBAAiB,UAAY,CAC3B,IAAIS,EAAQ,KAAK,YACjBA,IACGA,EAAM,gBACHA,EAAM,gBAAgB,EACR,OAAOA,EAAM,cAA3B,YACCA,EAAM,aAAe,IACzB,KAAK,qBAAuBT,GACjC,EACA,QAAS,UAAY,CAAC,EACtB,aAAcA,EAChB,CAAC,EACMI,CACT,CACA,IAAIM,GAAiB,CACjB,WAAY,EACZ,QAAS,EACT,WAAY,EACZ,UAAW,SAAUD,EAAO,CAC1B,OAAOA,EAAM,WAAa,KAAK,IAAI,CACrC,EACA,iBAAkB,EAClB,UAAW,CACb,EACAE,GAAiBT,GAAqBQ,EAAc,EACpDE,GAAmBlS,GAAO,CAAC,EAAGgS,GAAgB,CAAE,KAAM,EAAG,OAAQ,CAAE,CAAC,EACpEG,GAAmBX,GAAqBU,EAAgB,EACxDE,GACAC,GACAC,GACAC,GAAsBvS,GAAO,CAAC,EAAGkS,GAAkB,CACjD,QAAS,EACT,QAAS,EACT,QAAS,EACT,QAAS,EACT,MAAO,EACP,MAAO,EACP,QAAS,EACT,SAAU,EACV,OAAQ,EACR,QAAS,EACT,iBAAkBM,GAClB,OAAQ,EACR,QAAS,EACT,cAAe,SAAUT,EAAO,CAC9B,OAAkBA,EAAM,gBAAjB,OACHA,EAAM,cAAgBA,EAAM,WAC1BA,EAAM,UACNA,EAAM,YACRA,EAAM,aACZ,EACA,UAAW,SAAUA,EAAO,CAC1B,MAAI,cAAeA,EAAcA,EAAM,WACvCA,IAAUO,KACPA,IAAkCP,EAAM,OAAtB,aACbK,GAAgBL,EAAM,QAAUO,GAAe,QAChDD,GAAgBN,EAAM,QAAUO,GAAe,SAC/CD,GAAgBD,GAAgB,EACpCE,GAAiBP,GACbK,GACT,EACA,UAAW,SAAUL,EAAO,CAC1B,MAAO,cAAeA,EAAQA,EAAM,UAAYM,EAClD,CACF,CAAC,EACDI,GAAsBjB,GAAqBe,EAAmB,EAC9DG,GAAqB1S,GAAO,CAAC,EAAGuS,GAAqB,CAAE,aAAc,CAAE,CAAC,EACxEI,GAAqBnB,GAAqBkB,EAAkB,EAC5DE,GAAsB5S,GAAO,CAAC,EAAGkS,GAAkB,CAAE,cAAe,CAAE,CAAC,EACvEW,GAAsBrB,GAAqBoB,EAAmB,EAC9DE,GAA0B9S,GAAO,CAAC,EAAGgS,GAAgB,CACnD,cAAe,EACf,YAAa,EACb,cAAe,CACjB,CAAC,EACDe,GAA0BvB,GAAqBsB,EAAuB,EACtEE,GAA0BhT,GAAO,CAAC,EAAGgS,GAAgB,CACnD,cAAe,SAAUD,EAAO,CAC9B,MAAO,kBAAmBA,EACtBA,EAAM,cACN,OAAO,aACb,CACF,CAAC,EACDkB,GAA0BzB,GAAqBwB,EAAuB,EACtEE,GAA4BlT,GAAO,CAAC,EAAGgS,GAAgB,CAAE,KAAM,CAAE,CAAC,EAClEmB,GAA4B3B,GAAqB0B,EAAyB,EAC1EE,GAAe,CACb,IAAK,SACL,SAAU,IACV,KAAM,YACN,GAAI,UACJ,MAAO,aACP,KAAM,YACN,IAAK,SACL,IAAK,KACL,KAAM,cACN,KAAM,cACN,OAAQ,aACR,gBAAiB,cACnB,EACAC,GAAiB,CACf,EAAG,YACH,EAAG,MACH,GAAI,QACJ,GAAI,QACJ,GAAI,QACJ,GAAI,UACJ,GAAI,MACJ,GAAI,QACJ,GAAI,WACJ,GAAI,SACJ,GAAI,IACJ,GAAI,SACJ,GAAI,WACJ,GAAI,MACJ,GAAI,OACJ,GAAI,YACJ,GAAI,UACJ,GAAI,aACJ,GAAI,YACJ,GAAI,SACJ,GAAI,SACJ,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,UACL,IAAK,aACL,IAAK,MACP,EACAC,GAAoB,CAClB,IAAK,SACL,QAAS,UACT,KAAM,UACN,MAAO,UACT,EACF,SAASC,GAAoBC,EAAQ,CACnC,IAAI/D,EAAc,KAAK,YACvB,OAAOA,EAAY,iBACfA,EAAY,iBAAiB+D,CAAM,GAClCA,EAASF,GAAkBE,CAAM,GAChC,CAAC,CAAC/D,EAAY+D,CAAM,EACpB,EACR,CACA,SAAShB,IAAwB,CAC/B,OAAOe,EACT,CACA,IAAIE,GAAyBzT,GAAO,CAAC,EAAGkS,GAAkB,CACtD,IAAK,SAAUzC,EAAa,CAC1B,GAAIA,EAAY,IAAK,CACnB,IAAIiE,EAAMN,GAAa3D,EAAY,GAAG,GAAKA,EAAY,IACvD,GAAuBiE,IAAnB,eAAwB,OAAOA,CACrC,CACA,OAAsBjE,EAAY,OAA3B,YACDA,EAAc2B,GAAiB3B,CAAW,EACrCA,IAAP,GAAqB,QAAU,OAAO,aAAaA,CAAW,GAChDA,EAAY,OAA1B,WAA8CA,EAAY,OAAxB,QAChC4D,GAAe5D,EAAY,OAAO,GAAK,eACvC,EACR,EACA,KAAM,EACN,SAAU,EACV,QAAS,EACT,SAAU,EACV,OAAQ,EACR,QAAS,EACT,OAAQ,EACR,OAAQ,EACR,iBAAkB+C,GAClB,SAAU,SAAUT,EAAO,CACzB,OAAsBA,EAAM,OAArB,WAA4BX,GAAiBW,CAAK,EAAI,CAC/D,EACA,QAAS,SAAUA,EAAO,CACxB,OAAqBA,EAAM,OAApB,WAAwCA,EAAM,OAAlB,QAC/BA,EAAM,QACN,CACN,EACA,MAAO,SAAUA,EAAO,CACtB,OAAsBA,EAAM,OAArB,WACHX,GAAiBW,CAAK,EACRA,EAAM,OAApB,WAAwCA,EAAM,OAAlB,QAC1BA,EAAM,QACN,CACR,CACF,CAAC,EACD4B,GAAyBnC,GAAqBiC,EAAsB,EACpEG,GAAwB5T,GAAO,CAAC,EAAGuS,GAAqB,CACtD,UAAW,EACX,MAAO,EACP,OAAQ,EACR,SAAU,EACV,mBAAoB,EACpB,MAAO,EACP,MAAO,EACP,MAAO,EACP,YAAa,EACb,UAAW,CACb,CAAC,EACDsB,GAAwBrC,GAAqBoC,EAAqB,EAClEE,GAAsB9T,GAAO,CAAC,EAAGkS,GAAkB,CACjD,QAAS,EACT,cAAe,EACf,eAAgB,EAChB,OAAQ,EACR,QAAS,EACT,QAAS,EACT,SAAU,EACV,iBAAkBM,EACpB,CAAC,EACDuB,GAAsBvC,GAAqBsC,EAAmB,EAC9DE,GAA2BhU,GAAO,CAAC,EAAGgS,GAAgB,CACpD,aAAc,EACd,YAAa,EACb,cAAe,CACjB,CAAC,EACDiC,GAA2BzC,GAAqBwC,EAAwB,EACxEE,GAAsBlU,GAAO,CAAC,EAAGuS,GAAqB,CACpD,OAAQ,SAAUR,EAAO,CACvB,MAAO,WAAYA,EACfA,EAAM,OACN,gBAAiBA,EACf,CAACA,EAAM,YACP,CACR,EACA,OAAQ,SAAUA,EAAO,CACvB,MAAO,WAAYA,EACfA,EAAM,OACN,gBAAiBA,EACf,CAACA,EAAM,YACP,eAAgBA,EACd,CAACA,EAAM,WACP,CACV,EACA,OAAQ,EACR,UAAW,CACb,CAAC,EACDoC,GAAsB3C,GAAqB0C,EAAmB,EAC9DE,GAAuBpU,GAAO,CAAC,EAAGgS,GAAgB,CAChD,SAAU,EACV,SAAU,CACZ,CAAC,EACDqC,GAAuB7C,GAAqB4C,EAAoB,EAChEE,GAAe,CAAC,EAAG,GAAI,GAAI,EAAE,EAC7BC,GAAyBhE,IAAa,qBAAsB,OAC5DiE,GAAe,KACjBjE,IACE,iBAAkB,WACjBiE,GAAe,SAAS,cAC3B,IAAIC,GAAuBlE,IAAa,cAAe,QAAU,CAACiE,GAChEE,GACEnE,KACC,CAACgE,IACCC,IAAgB,EAAIA,IAAgB,IAAMA,IAC/CG,GAAgB,IAChBC,GAAmB,GACrB,SAASC,GAAyBC,EAAcrF,EAAa,CAC3D,OAAQqF,EAAc,CACpB,IAAK,QACH,OAAcR,GAAa,QAAQ7E,EAAY,OAAO,IAA/C,GACT,IAAK,UACH,OAAeA,EAAY,UAApB,IACT,IAAK,WACL,IAAK,YACL,IAAK,WACH,MAAO,GACT,QACE,MAAO,EACX,CACF,CACA,SAASsF,GAAuBtF,EAAa,CAC3C,OAAAA,EAAcA,EAAY,OACN,OAAOA,GAApB,UAAmC,SAAUA,EAChDA,EAAY,KACZ,IACN,CACA,IAAIuF,GAAc,GAClB,SAASC,GAA0BH,EAAcrF,EAAa,CAC5D,OAAQqF,EAAc,CACpB,IAAK,iBACH,OAAOC,GAAuBtF,CAAW,EAC3C,IAAK,WACH,OAAWA,EAAY,QAAnB,GAAiC,MACrCmF,GAAmB,GACZD,IACT,IAAK,YACH,OACGG,EAAerF,EAAY,KAC5BqF,IAAiBH,IAAiBC,GAAmB,KAAOE,EAEhE,QACE,OAAO,IACX,CACF,CACA,SAASI,GAA4BJ,EAAcrF,EAAa,CAC9D,GAAIuF,GACF,OAA4BF,IAArB,kBACJ,CAACP,IACAM,GAAyBC,EAAcrF,CAAW,GAChDqF,EAAelE,GAAQ,EACxBD,GAAeD,GAAY7J,GAAO,KAClCmO,GAAc,GACfF,GACA,KACN,OAAQA,EAAc,CACpB,IAAK,QACH,OAAO,KACT,IAAK,WACH,GACE,EAAErF,EAAY,SAAWA,EAAY,QAAUA,EAAY,UAC1DA,EAAY,SAAWA,EAAY,OACpC,CACA,GAAIA,EAAY,MAAQ,EAAIA,EAAY,KAAK,OAC3C,OAAOA,EAAY,KACrB,GAAIA,EAAY,MAAO,OAAO,OAAO,aAAaA,EAAY,KAAK,CACrE,CACA,OAAO,KACT,IAAK,iBACH,OAAOiF,IAAuCjF,EAAY,SAArB,KACjC,KACAA,EAAY,KAClB,QACE,OAAO,IACX,CACF,CACA,IAAI0F,GAAsB,CACxB,MAAO,GACP,KAAM,GACN,SAAU,GACV,iBAAkB,GAClB,MAAO,GACP,MAAO,GACP,OAAQ,GACR,SAAU,GACV,MAAO,GACP,OAAQ,GACR,IAAK,GACL,KAAM,GACN,KAAM,GACN,IAAK,GACL,KAAM,EACR,EACA,SAASC,GAAmBhJ,EAAM,CAChC,IAAIiJ,EAAWjJ,GAAQA,EAAK,UAAYA,EAAK,SAAS,YAAY,EAClE,OAAmBiJ,IAAZ,QACH,CAAC,CAACF,GAAoB/I,EAAK,IAAI,EAChBiJ,IAAf,UAGN,CACA,SAASC,GACPC,EACAzK,EACA2E,EACAI,EACA,CACAH,GACIC,GACEA,GAAa,KAAKE,CAAM,EACvBF,GAAe,CAACE,CAAM,EACxBH,GAAgBG,EACrB/E,EAAO0K,GAA4B1K,EAAM,UAAU,EACnD,EAAIA,EAAK,SACL2E,EAAc,IAAIwC,GAClB,WACA,SACA,KACAxC,EACAI,CACF,EACA0F,EAAc,KAAK,CAAE,MAAO9F,EAAa,UAAW3E,CAAK,CAAC,EAC9D,CACA,IAAI2K,GAAkB,KACpBC,GAAsB,KACxB,SAASC,GAAgBJ,EAAe,CACtCK,GAAqBL,EAAe,CAAC,CACvC,CACA,SAASM,GAAsBpL,EAAY,CACzC,IAAID,EAAaK,GAAoBJ,CAAU,EAC/C,GAAImC,GAAqBpC,CAAU,EAAG,OAAOC,CAC/C,CACA,SAASqL,GAA4BhB,EAAcrK,EAAY,CAC7D,GAAiBqK,IAAb,SAA2B,OAAOrK,CACxC,CACA,IAAIsL,GAAwB,GACxBxF,KAEEA,IACEyF,GAAgC,YAAa,SAC5CA,KACCC,GAA4B,SAAS,cAAc,KAAK,EAC5DA,GAA0B,aAAa,UAAW,SAAS,EAC3DD,GACiB,OAAOC,GAA0B,SAAhD,YAEJC,GAAsCF,IACjCE,GAAsC,GAC7CH,GACEG,KACC,CAAC,SAAS,cAAgB,EAAI,SAAS,eAbtC,IAAAA,GAEEF,GAEEC,GAWV,SAASE,IAA6B,CACpCV,KACGA,GAAgB,YAAY,mBAAoBW,EAAoB,EACpEV,GAAsBD,GAAkB,KAC7C,CACA,SAASW,GAAqB3G,EAAa,CACzC,GACcA,EAAY,eAAxB,SACAoG,GAAsBH,EAAmB,EACzC,CACA,IAAIH,EAAgB,CAAC,EACrBD,GACEC,EACAG,GACAjG,EACAD,GAAeC,CAAW,CAC5B,EACAU,GAAiBwF,GAAiBJ,CAAa,CACjD,CACF,CACA,SAASc,GAAkCvB,EAAcjF,EAAQpF,EAAY,CAC7DqK,IAAd,WACKqB,GAA2B,EAC3BV,GAAkB5F,EAClB6F,GAAsBjL,EACvBgL,GAAgB,YAAY,mBAAoBW,EAAoB,GACrDtB,IAAf,YAA+BqB,GAA2B,CAChE,CACA,SAASG,GAAmCxB,EAAc,CACxD,GACwBA,IAAtB,mBACYA,IAAZ,SACcA,IAAd,UAEA,OAAOe,GAAsBH,EAAmB,CACpD,CACA,SAASa,GAA2BzB,EAAcrK,EAAY,CAC5D,GAAgBqK,IAAZ,QAA0B,OAAOe,GAAsBpL,CAAU,CACvE,CACA,SAAS+L,GAAmC1B,EAAcrK,EAAY,CACpE,GAAgBqK,IAAZ,SAAyCA,IAAb,SAC9B,OAAOe,GAAsBpL,CAAU,CAC3C,CACA,SAASgM,GAAGlV,EAAGmV,EAAG,CAChB,OAAQnV,IAAMmV,IAAYnV,IAAN,GAAW,EAAIA,IAAM,EAAImV,IAAQnV,IAAMA,GAAKmV,IAAMA,CACxE,CACA,IAAIC,GAA0B,OAAO,OAAO,IAA7B,WAAkC,OAAO,GAAKF,GAC7D,SAASG,GAAaC,EAAMC,EAAM,CAChC,GAAIH,GAASE,EAAMC,CAAI,EAAG,MAAO,GACjC,GACe,OAAOD,GAApB,UACSA,IAAT,MACa,OAAOC,GAApB,UACSA,IAAT,KAEA,MAAO,GACT,IAAIC,EAAQ,OAAO,KAAKF,CAAI,EAC1BG,EAAQ,OAAO,KAAKF,CAAI,EAC1B,GAAIC,EAAM,SAAWC,EAAM,OAAQ,MAAO,GAC1C,IAAKA,EAAQ,EAAGA,EAAQD,EAAM,OAAQC,IAAS,CAC7C,IAAIC,EAAaF,EAAMC,CAAK,EAC5B,GACE,CAACjS,GAAe,KAAK+R,EAAMG,CAAU,GACrC,CAACN,GAASE,EAAKI,CAAU,EAAGH,EAAKG,CAAU,CAAC,EAE5C,MAAO,EACX,CACA,MAAO,EACT,CACA,SAASC,GAAYrY,EAAM,CACzB,KAAOA,GAAQA,EAAK,YAAcA,EAAOA,EAAK,WAC9C,OAAOA,CACT,CACA,SAASsY,GAA0BtQ,EAAMuQ,EAAQ,CAC/C,IAAIvY,EAAOqY,GAAYrQ,CAAI,EAC3BA,EAAO,EACP,QAASwQ,EAASxY,GAAQ,CACxB,GAAUA,EAAK,WAAX,EAAqB,CAEvB,GADAwY,EAAUxQ,EAAOhI,EAAK,YAAY,OAC9BgI,GAAQuQ,GAAUC,GAAWD,EAC/B,MAAO,CAAE,KAAMvY,EAAM,OAAQuY,EAASvQ,CAAK,EAC7CA,EAAOwQ,CACT,CACA7X,EAAG,CACD,KAAOX,GAAQ,CACb,GAAIA,EAAK,YAAa,CACpBA,EAAOA,EAAK,YACZ,MAAMW,CACR,CACAX,EAAOA,EAAK,UACd,CACAA,EAAO,MACT,CACAA,EAAOqY,GAAYrY,CAAI,CACzB,CACF,CACA,SAASyY,GAAaC,EAAWC,EAAW,CAC1C,OAAOD,GAAaC,EAChBD,IAAcC,EACZ,GACAD,GAAmBA,EAAU,WAAhB,EACX,GACAC,GAAmBA,EAAU,WAAhB,EACXF,GAAaC,EAAWC,EAAU,UAAU,EAC5C,aAAcD,EACZA,EAAU,SAASC,CAAS,EAC5BD,EAAU,wBACR,CAAC,EAAEA,EAAU,wBAAwBC,CAAS,EAAI,IAClD,GACV,EACN,CACA,SAASC,GAAqBC,EAAe,CAC3CA,EACUA,GAAR,MACQA,EAAc,eAAtB,MACQA,EAAc,cAAc,aAApC,KACIA,EAAc,cAAc,YAC5B,OACN,QACMpK,EAAUP,GAAiB2K,EAAc,QAAQ,EACrDpK,aAAmBoK,EAAc,mBAEjC,CACA,GAAI,CACF,IAAI3U,EACW,OAAOuK,EAAQ,cAAc,SAAS,MAAnD,QACJ,OAASrH,EAAK,CACZlD,EAA2B,EAC7B,CACA,GAAIA,EAA0B2U,EAAgBpK,EAAQ,kBACjD,OACLA,EAAUP,GAAiB2K,EAAc,QAAQ,CACnD,CACA,OAAOpK,CACT,CACA,SAASqK,GAAyBvL,EAAM,CACtC,IAAIiJ,EAAWjJ,GAAQA,EAAK,UAAYA,EAAK,SAAS,YAAY,EAClE,OACEiJ,IACcA,IAAZ,UACYjJ,EAAK,OAAhB,QACcA,EAAK,OAAlB,UACUA,EAAK,OAAf,OACUA,EAAK,OAAf,OACeA,EAAK,OAApB,aACaiJ,IAAf,YACWjJ,EAAK,kBAAhB,OAEN,CACA,IAAIwL,GACArH,IAAa,iBAAkB,UAAY,IAAM,SAAS,aAC5DsH,GAAgB,KAChBC,GAAoB,KACpBC,GAAgB,KAChBC,GAAY,GACd,SAASC,GAAqB1C,EAAe9F,EAAaoC,EAAmB,CAC3E,IAAI7E,EACF6E,EAAkB,SAAWA,EACzBA,EAAkB,SACZA,EAAkB,WAAxB,EACEA,EACAA,EAAkB,cAC1BmG,IACUH,IAAR,MACAA,KAAkB9K,GAAiBC,CAAG,IACpCA,EAAM6K,GACR,mBAAoB7K,GAAO2K,GAAyB3K,CAAG,EAClDA,EAAM,CAAE,MAAOA,EAAI,eAAgB,IAAKA,EAAI,YAAa,GACxDA,GACCA,EAAI,eAAiBA,EAAI,cAAc,aACxC,QACA,aAAa,EACdA,EAAM,CACL,WAAYA,EAAI,WAChB,aAAcA,EAAI,aAClB,UAAWA,EAAI,UACf,YAAaA,EAAI,WACnB,GACH+K,IAAiBnB,GAAamB,GAAe/K,CAAG,IAC7C+K,GAAgB/K,EACjBA,EAAMwI,GAA4BsC,GAAmB,UAAU,EAChE,EAAI9K,EAAI,SACJyC,EAAc,IAAIwC,GAClB,WACA,SACA,KACAxC,EACAoC,CACF,EACA0D,EAAc,KAAK,CAAE,MAAO9F,EAAa,UAAWzC,CAAI,CAAC,EACxDyC,EAAY,OAASoI,KAC9B,CACA,SAASK,GAAcC,EAAWC,EAAW,CAC3C,IAAIC,EAAW,CAAC,EAChB,OAAAA,EAASF,EAAU,YAAY,CAAC,EAAIC,EAAU,YAAY,EAC1DC,EAAS,SAAWF,CAAS,EAAI,SAAWC,EAC5CC,EAAS,MAAQF,CAAS,EAAI,MAAQC,EAC/BC,CACT,CACA,IAAIC,GAAiB,CACjB,aAAcJ,GAAc,YAAa,cAAc,EACvD,mBAAoBA,GAAc,YAAa,oBAAoB,EACnE,eAAgBA,GAAc,YAAa,gBAAgB,EAC3D,cAAeA,GAAc,aAAc,eAAe,EAC1D,gBAAiBA,GAAc,aAAc,iBAAiB,EAC9D,iBAAkBA,GAAc,aAAc,kBAAkB,EAChE,cAAeA,GAAc,aAAc,eAAe,CAC5D,EACAK,GAAqB,CAAC,EACtB9J,GAAQ,CAAC,EACX8B,KACI9B,GAAQ,SAAS,cAAc,KAAK,EAAE,MACxC,mBAAoB,SACjB,OAAO6J,GAAe,aAAa,UACpC,OAAOA,GAAe,mBAAmB,UACzC,OAAOA,GAAe,eAAe,WACvC,oBAAqB,QACnB,OAAOA,GAAe,cAAc,YACxC,SAASE,GAA2BJ,EAAW,CAC7C,GAAIG,GAAmBH,CAAS,EAAG,OAAOG,GAAmBH,CAAS,EACtE,GAAI,CAACE,GAAeF,CAAS,EAAG,OAAOA,EACvC,IAAIK,EAAYH,GAAeF,CAAS,EACtCD,EACF,IAAKA,KAAaM,EAChB,GAAIA,EAAU,eAAeN,CAAS,GAAKA,KAAa1J,GACtD,OAAQ8J,GAAmBH,CAAS,EAAIK,EAAUN,CAAS,EAC/D,OAAOC,CACT,CACA,IAAIM,GAAgBF,GAA2B,cAAc,EAC3DG,GAAsBH,GAA2B,oBAAoB,EACrEI,GAAkBJ,GAA2B,gBAAgB,EAC7DK,GAAiBL,GAA2B,eAAe,EAC3DM,GAAmBN,GAA2B,iBAAiB,EAC/DO,GAAoBP,GAA2B,kBAAkB,EACjEQ,GAAiBR,GAA2B,eAAe,EAC3DS,GAA6B,IAAI,IACjCC,GACE,mnBAAmnB,MACjnB,GACF,EACJA,GAAwB,KAAK,WAAW,EACxC,SAASC,GAAoBrE,EAAcnD,EAAW,CACpDsH,GAA2B,IAAInE,EAAcnD,CAAS,EACtDvG,GAAsBuG,EAAW,CAACmD,CAAY,CAAC,CACjD,CACA,IAAIsE,GACe,OAAO,aAAtB,WACI,YACA,SAAUC,EAAO,CACf,GACe,OAAO,QAApB,UACe,OAAO,OAAO,YAA7B,WACA,CACA,IAAItH,EAAQ,IAAI,OAAO,WAAW,QAAS,CACzC,QAAS,GACT,WAAY,GACZ,QACe,OAAOsH,GAApB,UACSA,IAAT,MACa,OAAOA,EAAM,SAA1B,SACI,OAAOA,EAAM,OAAO,EACpB,OAAOA,CAAK,EAClB,MAAOA,CACT,CAAC,EACD,GAAI,CAAC,OAAO,cAActH,CAAK,EAAG,MACpC,SACe,OAAO,SAApB,UACe,OAAO,QAAQ,MAA9B,WACA,CACA,QAAQ,KAAK,oBAAqBsH,CAAK,EACvC,MACF,CACA,QAAQ,MAAMA,CAAK,CACrB,EACNC,GAAmB,CAAC,EACpBC,GAAwB,EACxBC,GAA2B,EAC7B,SAASC,IAAkC,CACzC,QACMC,EAAWH,GACb5a,EAAK6a,GAA2BD,GAAwB,EAC1D5a,EAAI+a,GAEJ,CACA,IAAI3a,EAAQua,GAAiB3a,CAAC,EAC9B2a,GAAiB3a,GAAG,EAAI,KACxB,IAAIgb,EAAQL,GAAiB3a,CAAC,EAC9B2a,GAAiB3a,GAAG,EAAI,KACxB,IAAIiK,EAAS0Q,GAAiB3a,CAAC,EAC/B2a,GAAiB3a,GAAG,EAAI,KACxB,IAAI6I,EAAO8R,GAAiB3a,CAAC,EAE7B,GADA2a,GAAiB3a,GAAG,EAAI,KACXgb,IAAT,MAA2B/Q,IAAT,KAAiB,CACrC,IAAIgR,EAAUD,EAAM,QACXC,IAAT,KACKhR,EAAO,KAAOA,GACbA,EAAO,KAAOgR,EAAQ,KAAQA,EAAQ,KAAOhR,GACnD+Q,EAAM,QAAU/Q,CAClB,CACMpB,IAAN,GAAcqS,GAA8B9a,EAAO6J,EAAQpB,CAAI,CACjE,CACF,CACA,SAASsS,GAAgB/a,EAAO4a,EAAO/Q,EAAQpB,EAAM,CACnD8R,GAAiBC,IAAuB,EAAIxa,EAC5Cua,GAAiBC,IAAuB,EAAII,EAC5CL,GAAiBC,IAAuB,EAAI3Q,EAC5C0Q,GAAiBC,IAAuB,EAAI/R,EAC5CgS,IAA4BhS,EAC5BzI,EAAM,OAASyI,EACfzI,EAAQA,EAAM,UACLA,IAAT,OAAmBA,EAAM,OAASyI,EACpC,CACA,SAASuS,GAA4Bhb,EAAO4a,EAAO/Q,EAAQpB,EAAM,CAC/D,OAAAsS,GAAgB/a,EAAO4a,EAAO/Q,EAAQpB,CAAI,EACnCwS,GAAuBjb,CAAK,CACrC,CACA,SAASkb,GAA+Blb,EAAOyI,EAAM,CACnD,OAAAsS,GAAgB/a,EAAO,KAAM,KAAMyI,CAAI,EAChCwS,GAAuBjb,CAAK,CACrC,CACA,SAAS8a,GAA8BK,EAAatR,EAAQpB,EAAM,CAChE0S,EAAY,OAAS1S,EACrB,IAAIjI,EAAY2a,EAAY,UACnB3a,IAAT,OAAuBA,EAAU,OAASiI,GAC1C,QAAS2S,EAAW,GAAIC,EAASF,EAAY,OAAiBE,IAAT,MAClDA,EAAO,YAAc5S,EACnBjI,EAAY6a,EAAO,UACX7a,IAAT,OAAuBA,EAAU,YAAciI,GACxC4S,EAAO,MAAd,KACIF,EAAcE,EAAO,UACdF,IAAT,MAAwBA,EAAY,YAAc,IAAMC,EAAW,KACpED,EAAcE,EACdA,EAASA,EAAO,OACrB,OAAaF,EAAY,MAAlB,GACDE,EAASF,EAAY,UACvBC,GACWvR,IAAT,OACEuR,EAAW,GAAKjU,GAAMsB,CAAI,EAC3B0S,EAAcE,EAAO,cACrB7a,EAAY2a,EAAYC,CAAQ,EACxB5a,IAAT,KACK2a,EAAYC,CAAQ,EAAI,CAACvR,CAAM,EAChCrJ,EAAU,KAAKqJ,CAAM,EACxBA,EAAO,KAAOpB,EAAO,WACxB4S,GACA,IACN,CACA,SAASJ,GAAuBE,EAAa,CAC3C,GAAI,GAAKG,GACP,MACIA,GAAoB,EACrBC,GAAwB,KACzB,MAAM9b,EAAuB,GAAG,CAAC,EAErC,QAAS4b,EAASF,EAAY,OAAiBE,IAAT,MACnCF,EAAcE,EAAUA,EAASF,EAAY,OAChD,OAAaA,EAAY,MAAlB,EAAwBA,EAAY,UAAY,IACzD,CACA,IAAIK,GAAqB,CAAC,EAC1B,SAASC,GAAUza,EAAK0a,EAAc/G,EAAKgH,EAAM,CAC/C,KAAK,IAAM3a,EACX,KAAK,IAAM2T,EACX,KAAK,QACH,KAAK,MACL,KAAK,OACL,KAAK,UACL,KAAK,KACL,KAAK,YACH,KACJ,KAAK,MAAQ,EACb,KAAK,WAAa,KAAK,IAAM,KAC7B,KAAK,aAAe+G,EACpB,KAAK,aACH,KAAK,cACL,KAAK,YACL,KAAK,cACH,KACJ,KAAK,KAAOC,EACZ,KAAK,aAAe,KAAK,MAAQ,EACjC,KAAK,UAAY,KACjB,KAAK,WAAa,KAAK,MAAQ,EAC/B,KAAK,UAAY,IACnB,CACA,SAASC,GAAqB5a,EAAK0a,EAAc/G,EAAKgH,EAAM,CAC1D,OAAO,IAAIF,GAAUza,EAAK0a,EAAc/G,EAAKgH,CAAI,CACnD,CACA,SAASE,GAAgBC,EAAW,CAClC,OAAAA,EAAYA,EAAU,UACf,EAAE,CAACA,GAAa,CAACA,EAAU,iBACpC,CACA,SAASC,GAAqBC,EAASN,EAAc,CACnD,IAAI7V,EAAiBmW,EAAQ,UAC7B,OAASnW,IAAT,MACMA,EAAiB+V,GACjBI,EAAQ,IACRN,EACAM,EAAQ,IACRA,EAAQ,IACV,EACCnW,EAAe,YAAcmW,EAAQ,YACrCnW,EAAe,KAAOmW,EAAQ,KAC9BnW,EAAe,UAAYmW,EAAQ,UACnCnW,EAAe,UAAYmW,EAC3BA,EAAQ,UAAYnW,IACnBA,EAAe,aAAe6V,EAC/B7V,EAAe,KAAOmW,EAAQ,KAC9BnW,EAAe,MAAQ,EACvBA,EAAe,aAAe,EAC9BA,EAAe,UAAY,MAChCA,EAAe,MAAQmW,EAAQ,MAAQ,SACvCnW,EAAe,WAAamW,EAAQ,WACpCnW,EAAe,MAAQmW,EAAQ,MAC/BnW,EAAe,MAAQmW,EAAQ,MAC/BnW,EAAe,cAAgBmW,EAAQ,cACvCnW,EAAe,cAAgBmW,EAAQ,cACvCnW,EAAe,YAAcmW,EAAQ,YACrCN,EAAeM,EAAQ,aACvBnW,EAAe,aACJ6V,IAAT,KACI,KACA,CAAE,MAAOA,EAAa,MAAO,aAAcA,EAAa,YAAa,EAC3E7V,EAAe,QAAUmW,EAAQ,QACjCnW,EAAe,MAAQmW,EAAQ,MAC/BnW,EAAe,IAAMmW,EAAQ,IAC7BnW,EAAe,WAAamW,EAAQ,WAC7BnW,CACT,CACA,SAASoW,GAAoBpW,EAAgB0C,EAAa,CACxD1C,EAAe,OAAS,SACxB,IAAImW,EAAUnW,EAAe,UAC7B,OAASmW,IAAT,MACMnW,EAAe,WAAa,EAC7BA,EAAe,MAAQ0C,EACvB1C,EAAe,MAAQ,KACvBA,EAAe,aAAe,EAC9BA,EAAe,cAAgB,KAC/BA,EAAe,cAAgB,KAC/BA,EAAe,YAAc,KAC7BA,EAAe,aAAe,KAC9BA,EAAe,UAAY,OAC1BA,EAAe,WAAamW,EAAQ,WACrCnW,EAAe,MAAQmW,EAAQ,MAC/BnW,EAAe,MAAQmW,EAAQ,MAC/BnW,EAAe,aAAe,EAC9BA,EAAe,UAAY,KAC3BA,EAAe,cAAgBmW,EAAQ,cACvCnW,EAAe,cAAgBmW,EAAQ,cACvCnW,EAAe,YAAcmW,EAAQ,YACrCnW,EAAe,KAAOmW,EAAQ,KAC9BzT,EAAcyT,EAAQ,aACtBnW,EAAe,aACL0C,IAAT,KACI,KACA,CACE,MAAOA,EAAY,MACnB,aAAcA,EAAY,YAC5B,GACH1C,CACT,CACA,SAASqW,GACP5Z,EACAqS,EACA+G,EACAS,EACAR,EACAhU,EACA,CACA,IAAIyU,EAAW,EAEf,GADAD,EAAQ7Z,EACW,OAAOA,GAAtB,WAA4BuZ,GAAgBvZ,CAAI,IAAM8Z,EAAW,WAC/C,OAAO9Z,GAApB,SACP8Z,EAAWC,GACT/Z,EACAoZ,EACArY,GAAmB,OACrB,EACI,GACWf,IAAX,QAA8BA,IAAX,QAA8BA,IAAX,OACpC,GACA,OAEN7B,EAAG,OAAQ6B,EAAM,CACf,KAAKP,GACH,OACGO,EAAOsZ,GAAqB,GAAIF,EAAc/G,EAAKgH,CAAI,EACvDrZ,EAAK,YAAcP,GACnBO,EAAK,MAAQqF,EACdrF,EAEJ,KAAKjB,GACH,OAAOib,GAAwBZ,EAAa,SAAUC,EAAMhU,EAAOgN,CAAG,EACxE,KAAKrT,GACH8a,EAAW,EACXT,GAAQ,GACR,MACF,KAAKpa,GACH,OACGe,EAAOsZ,GAAqB,GAAIF,EAAc/G,EAAKgH,EAAO,CAAC,EAC3DrZ,EAAK,YAAcf,GACnBe,EAAK,MAAQqF,EACdrF,EAEJ,KAAKX,GACH,OACGW,EAAOsZ,GAAqB,GAAIF,EAAc/G,EAAKgH,CAAI,EACvDrZ,EAAK,YAAcX,GACnBW,EAAK,MAAQqF,EACdrF,EAEJ,KAAKV,GACH,OACGU,EAAOsZ,GAAqB,GAAIF,EAAc/G,EAAKgH,CAAI,EACvDrZ,EAAK,YAAcV,GACnBU,EAAK,MAAQqF,EACdrF,EAEJ,QACE,GAAiB,OAAOA,GAApB,UAAqCA,IAAT,KAC9B,OAAQA,EAAK,SAAU,CACrB,KAAKb,GACH2a,EAAW,GACX,MAAM3b,EACR,KAAKe,GACH4a,EAAW,EACX,MAAM3b,EACR,KAAKiB,GACH0a,EAAW,GACX,MAAM3b,EACR,KAAKoB,GACHua,EAAW,GACX,MAAM3b,EACR,KAAKqB,GACHsa,EAAW,GACXD,EAAQ,KACR,MAAM1b,CACV,CACF2b,EAAW,GACXV,EAAe,MACbjc,EAAuB,IAAc6C,IAAT,KAAgB,OAAS,OAAOA,EAAM,EAAE,CACtE,EACA6Z,EAAQ,IACZ,CACF,OAAAxH,EAAMiH,GAAqBQ,EAAUV,EAAc/G,EAAKgH,CAAI,EAC5DhH,EAAI,YAAcrS,EAClBqS,EAAI,KAAOwH,EACXxH,EAAI,MAAQhN,EACLgN,CACT,CACA,SAAS2H,GAAwBC,EAAUZ,EAAMhU,EAAOgN,EAAK,CAC3D,OAAA4H,EAAWX,GAAqB,EAAGW,EAAU5H,EAAKgH,CAAI,EACtDY,EAAS,MAAQ5U,EACV4U,CACT,CACA,SAASC,GAAoBC,EAASd,EAAMhU,EAAO,CACjD,OAAA8U,EAAUb,GAAqB,EAAGa,EAAS,KAAMd,CAAI,EACrDc,EAAQ,MAAQ9U,EACT8U,CACT,CACA,SAASC,GAAkCC,EAAgB,CACzD,IAAI3c,EAAQ4b,GAAqB,GAAI,KAAM,KAAM,CAAC,EAClD,OAAA5b,EAAM,UAAY2c,EACX3c,CACT,CACA,SAAS4c,GAAsBC,EAAQlB,EAAMhU,EAAO,CAClD,OAAAgU,EAAOC,GACL,EACSiB,EAAO,WAAhB,KAA2BA,EAAO,SAAW,CAAC,EAC9CA,EAAO,IACPlB,CACF,EACAA,EAAK,MAAQhU,EACbgU,EAAK,UAAY,CACf,cAAekB,EAAO,cACtB,gBAAiB,KACjB,eAAgBA,EAAO,cACzB,EACOlB,CACT,CACA,IAAImB,GAAiB,IAAI,QACzB,SAASC,GAA2B3Z,EAAO4Z,EAAQ,CACjD,GAAiB,OAAO5Z,GAApB,UAAsCA,IAAT,KAAgB,CAC/C,IAAI6Z,EAAWH,GAAe,IAAI1Z,CAAK,EACvC,OAAe6Z,IAAX,OAA4BA,GAChCD,EAAS,CACP,MAAO5Z,EACP,OAAQ4Z,EACR,MAAOpX,GAA4BoX,CAAM,CAC3C,EACAF,GAAe,IAAI1Z,EAAO4Z,CAAM,EACzBA,EACT,CACA,MAAO,CACL,MAAO5Z,EACP,OAAQ4Z,EACR,MAAOpX,GAA4BoX,CAAM,CAC3C,CACF,CACA,IAAIE,GAAY,CAAC,EACfC,GAAiB,EACjBC,GAAmB,KACnBC,GAAgB,EAChBC,GAAU,CAAC,EACXC,GAAe,EACfC,GAAsB,KACtBC,GAAgB,EAChBC,GAAsB,GACxB,SAASC,GAAa9X,EAAgB+X,EAAe,CACnDV,GAAUC,IAAgB,EAAIE,GAC9BH,GAAUC,IAAgB,EAAIC,GAC9BA,GAAmBvX,EACnBwX,GAAgBO,CAClB,CACA,SAASC,GAAWhY,EAAgB+X,EAAe9a,EAAO,CACxDwa,GAAQC,IAAc,EAAIE,GAC1BH,GAAQC,IAAc,EAAIG,GAC1BJ,GAAQC,IAAc,EAAIC,GAC1BA,GAAsB3X,EACtB,IAAIiY,EAAuBL,GAC3B5X,EAAiB6X,GACjB,IAAIK,EAAa,GAAK5W,GAAM2W,CAAoB,EAAI,EACpDA,GAAwB,EAAE,GAAKC,GAC/Bjb,GAAS,EACT,IAAIkb,EAAS,GAAK7W,GAAMyW,CAAa,EAAIG,EACzC,GAAI,GAAKC,EAAQ,CACf,IAAIC,EAAuBF,EAAcA,EAAa,EACtDC,GACEF,GACE,GAAKG,GAAwB,GAC/B,SAAS,EAAE,EACbH,IAAyBG,EACzBF,GAAcE,EACdR,GACG,GAAM,GAAKtW,GAAMyW,CAAa,EAAIG,EAClCjb,GAASib,EACVD,EACFJ,GAAsBM,EAASnY,CACjC,MACG4X,GACE,GAAKO,EAAWlb,GAASib,EAAcD,EACvCJ,GAAsB7X,CAC7B,CACA,SAASqY,GAAuBrY,EAAgB,CACrCA,EAAe,SAAxB,OACG8X,GAAa9X,EAAgB,CAAC,EAAGgY,GAAWhY,EAAgB,EAAG,CAAC,EACrE,CACA,SAASsY,GAAetY,EAAgB,CACtC,KAAOA,IAAmBuX,IACvBA,GAAmBF,GAAU,EAAEC,EAAc,EAC3CD,GAAUC,EAAc,EAAI,KAC5BE,GAAgBH,GAAU,EAAEC,EAAc,EAC1CD,GAAUC,EAAc,EAAI,KACjC,KAAOtX,IAAmB2X,IACvBA,GAAsBF,GAAQ,EAAEC,EAAY,EAC1CD,GAAQC,EAAY,EAAI,KACxBG,GAAsBJ,GAAQ,EAAEC,EAAY,EAC5CD,GAAQC,EAAY,EAAI,KACxBE,GAAgBH,GAAQ,EAAEC,EAAY,EACtCD,GAAQC,EAAY,EAAI,IAC/B,CACA,SAASa,GAA4BvY,EAAgBwY,EAAkB,CACrEf,GAAQC,IAAc,EAAIE,GAC1BH,GAAQC,IAAc,EAAIG,GAC1BJ,GAAQC,IAAc,EAAIC,GAC1BC,GAAgBY,EAAiB,GACjCX,GAAsBW,EAAiB,SACvCb,GAAsB3X,CACxB,CACA,IAAIyY,GAAuB,KACzBC,GAAyB,KACzB1P,GAAc,GACd2P,GAAkB,KAClBC,GAAyB,GACzBC,GAA6B,MAAMjf,EAAuB,GAAG,CAAC,EAChE,SAASkf,GAAyB3e,EAAO,CACvC,IAAIsa,EAAQ,MACV7a,EACE,IACA,EAAI,UAAU,QAAqB,UAAU,CAAC,IAAtB,QAA2B,UAAU,CAAC,EAC1D,OACA,OACJ,EACF,CACF,EACA,MAAAmf,GAAoB7B,GAA2BzC,EAAOta,CAAK,CAAC,EACtD0e,EACR,CACA,SAASG,GAA6B7e,EAAO,CAC3C,IAAI8e,EAAW9e,EAAM,UACnBsC,EAAOtC,EAAM,KACbgR,EAAQhR,EAAM,cAGhB,OAFA8e,EAAS/T,EAAmB,EAAI/K,EAChC8e,EAAS9T,EAAgB,EAAIgG,EACrB1O,EAAM,CACZ,IAAK,SACHyc,GAA0B,SAAUD,CAAQ,EAC5CC,GAA0B,QAASD,CAAQ,EAC3C,MACF,IAAK,SACL,IAAK,SACL,IAAK,QACHC,GAA0B,OAAQD,CAAQ,EAC1C,MACF,IAAK,QACL,IAAK,QACH,IAAKxc,EAAO,EAAGA,EAAO0c,GAAgB,OAAQ1c,IAC5Cyc,GAA0BC,GAAgB1c,CAAI,EAAGwc,CAAQ,EAC3D,MACF,IAAK,SACHC,GAA0B,QAASD,CAAQ,EAC3C,MACF,IAAK,MACL,IAAK,QACL,IAAK,OACHC,GAA0B,QAASD,CAAQ,EAC3CC,GAA0B,OAAQD,CAAQ,EAC1C,MACF,IAAK,UACHC,GAA0B,SAAUD,CAAQ,EAC5C,MACF,IAAK,QACHC,GAA0B,UAAWD,CAAQ,EAC7ClQ,GACEkQ,EACA9N,EAAM,MACNA,EAAM,aACNA,EAAM,QACNA,EAAM,eACNA,EAAM,KACNA,EAAM,KACN,EACF,EACA,MACF,IAAK,SACH+N,GAA0B,UAAWD,CAAQ,EAC7C,MACF,IAAK,WACHC,GAA0B,UAAWD,CAAQ,EAC3C3P,GAAa2P,EAAU9N,EAAM,MAAOA,EAAM,aAAcA,EAAM,QAAQ,CAC5E,CACA1O,EAAO0O,EAAM,SACC,OAAO1O,GAApB,UACc,OAAOA,GAApB,UACa,OAAOA,GAApB,UACFwc,EAAS,cAAgB,GAAKxc,GACvB0O,EAAM,2BAAb,IACAiO,GAAsBH,EAAS,YAAaxc,CAAI,GACnC0O,EAAM,SAAd,OACE+N,GAA0B,eAAgBD,CAAQ,EACnDC,GAA0B,SAAUD,CAAQ,GACtC9N,EAAM,UAAd,MAA0B+N,GAA0B,SAAUD,CAAQ,EAC9D9N,EAAM,aAAd,MACE+N,GAA0B,YAAaD,CAAQ,EACzC9N,EAAM,SAAd,OAA0B8N,EAAS,QAAUvO,IAC5CuO,EAAW,IACXA,EAAW,GAChBA,GAAYH,GAAyB3e,EAAO,EAAE,CAChD,CACA,SAASkf,GAAoBlf,EAAO,CAClC,IAAKse,GAAuBte,EAAM,OAAQse,IACxC,OAAQA,GAAqB,IAAK,CAChC,IAAK,GACL,IAAK,IACL,IAAK,IACHG,GAAyB,GACzB,OACF,IAAK,IACL,IAAK,GACHA,GAAyB,GACzB,OACF,QACEH,GAAuBA,GAAqB,MAChD,CACJ,CACA,SAASa,GAAkBnf,EAAO,CAChC,GAAIA,IAAUse,GAAsB,MAAO,GAC3C,GAAI,CAACzP,GAAa,OAAOqQ,GAAoBlf,CAAK,EAAI6O,GAAc,GAAK,GACzE,IAAI7N,EAAMhB,EAAM,IACdof,EAWF,IAVKA,EAAwBpe,IAAN,GAAoBA,IAAP,OAC7Boe,EAAwBpe,IAAN,KACpBoe,EAAkBpf,EAAM,KACtBof,EACC,EAAaA,IAAX,QAA2CA,IAAb,WAChCC,GAAqBrf,EAAM,KAAMA,EAAM,aAAa,GAC1Dof,EAAkB,CAACA,GAErBA,GAAmBb,IAA0BI,GAAyB3e,CAAK,EAC3Ekf,GAAoBlf,CAAK,EACdgB,IAAP,GAAY,CAGd,GAFAhB,EAAQA,EAAM,cACdA,EAAiBA,IAAT,KAAiBA,EAAM,WAAa,KACxC,CAACA,EAAO,MAAM,MAAMP,EAAuB,GAAG,CAAC,EACnD8e,GACEe,GAAgDtf,CAAK,CACzD,SAAkBgB,IAAP,GAAY,CAGrB,GAFAhB,EAAQA,EAAM,cACdA,EAAiBA,IAAT,KAAiBA,EAAM,WAAa,KACxC,CAACA,EAAO,MAAM,MAAMP,EAAuB,GAAG,CAAC,EACnD8e,GACEe,GAAgDtf,CAAK,CACzD,MACSgB,IAAP,IACMA,EAAMud,GACRgB,GAAiBvf,EAAM,IAAI,GACrBA,EAAQwf,GACTA,GAA8C,KAC9CjB,GAAyBve,GACzBue,GAAyBvd,GAC7Bud,GAAyBD,GACtBmB,GAAkBzf,EAAM,UAAU,WAAW,EAC7C,KACV,MAAO,EACT,CACA,SAAS0f,IAAsB,CAC7BnB,GAAyBD,GAAuB,KAChDzP,GAAc,EAChB,CACA,SAAS8Q,IAAsC,CAC7C,IAAIC,EAAepB,GACnB,OAASoB,IAAT,OACYC,KAAT,KACIA,GAAsCD,EACvCC,GAAoC,KAAK,MACvCA,GACAD,CACF,EACHpB,GAAkB,MACdoB,CACT,CACA,SAAShB,GAAoBtE,EAAO,CACzBkE,KAAT,KACKA,GAAkB,CAAClE,CAAK,EACzBkE,GAAgB,KAAKlE,CAAK,CAChC,CACA,IAAIwF,GAAc/c,GAAa,IAAI,EACjCgd,GAA4B,KAC5BC,GAAwB,KAC1B,SAASC,GAAaC,EAAenc,EAASoc,EAAW,CACvDhd,GAAK2c,GAAa/b,EAAQ,aAAa,EACvCA,EAAQ,cAAgBoc,CAC1B,CACA,SAASC,GAAYrc,EAAS,CAC5BA,EAAQ,cAAgB+b,GAAY,QACpC7c,GAAI6c,EAAW,CACjB,CACA,SAASO,GAAgChF,EAAQ9S,EAAa+X,EAAiB,CAC7E,KAAgBjF,IAAT,MAAmB,CACxB,IAAI7a,EAAY6a,EAAO,UAOvB,IANCA,EAAO,WAAa9S,KAAiBA,GAChC8S,EAAO,YAAc9S,EACd/H,IAAT,OAAuBA,EAAU,YAAc+H,IACtC/H,IAAT,OACCA,EAAU,WAAa+H,KAAiBA,IACxC/H,EAAU,YAAc+H,GACzB8S,IAAWiF,EAAiB,MAChCjF,EAASA,EAAO,MAClB,CACF,CACA,SAASkF,GACP1a,EACA2a,EACAjY,EACAkY,EACA,CACA,IAAIzgB,EAAQ6F,EAAe,MAE3B,IADS7F,IAAT,OAAmBA,EAAM,OAAS6F,GAClB7F,IAAT,MAAkB,CACvB,IAAI0gB,EAAO1gB,EAAM,aACjB,GAAa0gB,IAAT,KAAe,CACjB,IAAIC,EAAY3gB,EAAM,MACtB0gB,EAAOA,EAAK,aACZjgB,EAAG,KAAgBigB,IAAT,MAAiB,CACzB,IAAIE,EAAaF,EACjBA,EAAO1gB,EACP,QAASJ,EAAI,EAAGA,EAAI4gB,EAAS,OAAQ5gB,IACnC,GAAIghB,EAAW,UAAYJ,EAAS5gB,CAAC,EAAG,CACtC8gB,EAAK,OAASnY,EACdqY,EAAaF,EAAK,UACTE,IAAT,OAAwBA,EAAW,OAASrY,GAC5C8X,GACEK,EAAK,OACLnY,EACA1C,CACF,EACA4a,IAA6BE,EAAY,MACzC,MAAMlgB,CACR,CACFigB,EAAOE,EAAW,IACpB,CACF,SAAkB5gB,EAAM,MAAb,GAAkB,CAE3B,GADA2gB,EAAY3gB,EAAM,OACL2gB,IAAT,KAAoB,MAAM,MAAMlhB,EAAuB,GAAG,CAAC,EAC/DkhB,EAAU,OAASpY,EACnBmY,EAAOC,EAAU,UACRD,IAAT,OAAkBA,EAAK,OAASnY,GAChC8X,GAAgCM,EAAWpY,EAAa1C,CAAc,EACtE8a,EAAY,IACd,MAAOA,EAAY3gB,EAAM,MACzB,GAAa2gB,IAAT,KAAoBA,EAAU,OAAS3gB,MAEzC,KAAK2gB,EAAY3gB,EAAgB2gB,IAAT,MAAsB,CAC5C,GAAIA,IAAc9a,EAAgB,CAChC8a,EAAY,KACZ,KACF,CAEA,GADA3gB,EAAQ2gB,EAAU,QACL3gB,IAAT,KAAgB,CAClBA,EAAM,OAAS2gB,EAAU,OACzBA,EAAY3gB,EACZ,KACF,CACA2gB,EAAYA,EAAU,MACxB,CACF3gB,EAAQ2gB,CACV,CACF,CACA,SAASE,GACP7E,EACAnW,EACA0C,EACAkY,EACA,CACAzE,EAAU,KACV,QACMX,EAASxV,EAAgBib,EAA6B,GACjDzF,IAAT,MAEA,CACA,GAAI,CAACyF,GACH,IAAWzF,EAAO,MAAQ,UAAtB,EAA+ByF,EAA6B,YAChDzF,EAAO,MAAQ,UAAtB,EAA+B,MAC1C,GAAWA,EAAO,MAAd,GAAmB,CACrB,IAAI0F,EAAgB1F,EAAO,UAC3B,GAAa0F,IAAT,KAAwB,MAAM,MAAMthB,EAAuB,GAAG,CAAC,EAEnE,GADAshB,EAAgBA,EAAc,cACjBA,IAAT,KAAwB,CAC1B,IAAIhd,EAAUsX,EAAO,KACrBzD,GAASyD,EAAO,aAAa,MAAO0F,EAAc,KAAK,IAC3C/E,IAAT,KAAmBA,EAAQ,KAAKjY,CAAO,EAAKiY,EAAU,CAACjY,CAAO,EACnE,CACF,SAAWsX,IAAW7X,GAA6B,QAAS,CAE1D,GADAud,EAAgB1F,EAAO,UACV0F,IAAT,KAAwB,MAAM,MAAMthB,EAAuB,GAAG,CAAC,EACnEshB,EAAc,cAAc,gBAC1B1F,EAAO,cAAc,gBACXW,IAAT,KACGA,EAAQ,KAAK9X,EAAqB,EACjC8X,EAAU,CAAC9X,EAAqB,EACzC,CACAmX,EAASA,EAAO,MAClB,CACSW,IAAT,MACEuE,GACE1a,EACAmW,EACAzT,EACAkY,CACF,EACF5a,EAAe,OAAS,MAC1B,CACA,SAASmb,GAAsBC,EAAqB,CAClD,IACEA,EAAsBA,EAAoB,aACjCA,IAAT,MAEA,CACA,GACE,CAACrJ,GACCqJ,EAAoB,QAAQ,cAC5BA,EAAoB,aACtB,EAEA,MAAO,GACTA,EAAsBA,EAAoB,IAC5C,CACA,MAAO,EACT,CACA,SAASC,GAAqBrb,EAAgB,CAC5Cka,GAA4Bla,EAC5Bma,GAAwB,KACxBna,EAAiBA,EAAe,aACvBA,IAAT,OAA4BA,EAAe,aAAe,KAC5D,CACA,SAASsb,GAAYpd,EAAS,CAC5B,OAAOqd,GAAuBrB,GAA2Bhc,CAAO,CAClE,CACA,SAASsd,GAAgCC,EAAUvd,EAAS,CAC1D,OAASgc,KAAT,MAAsCmB,GAAqBI,CAAQ,EAC5DF,GAAuBE,EAAUvd,CAAO,CACjD,CACA,SAASqd,GAAuBE,EAAUvd,EAAS,CACjD,IAAIX,EAAQW,EAAQ,cAEpB,GADAA,EAAU,CAAE,QAASA,EAAS,cAAeX,EAAO,KAAM,IAAK,EAClD4c,KAAT,KAAgC,CAClC,GAAasB,IAAT,KAAmB,MAAM,MAAM7hB,EAAuB,GAAG,CAAC,EAC9DugB,GAAwBjc,EACxBud,EAAS,aAAe,CAAE,MAAO,EAAG,aAAcvd,CAAQ,EAC1Dud,EAAS,OAAS,MACpB,MAAOtB,GAAwBA,GAAsB,KAAOjc,EAC5D,OAAOX,CACT,CACA,IAAIme,GACgB,OAAO,gBAAvB,IACI,gBACA,UAAY,CACV,IAAIC,EAAY,CAAC,EACfC,EAAU,KAAK,OAAS,CACtB,QAAS,GACT,iBAAkB,SAAUnf,EAAMof,EAAU,CAC1CF,EAAU,KAAKE,CAAQ,CACzB,CACF,EACF,KAAK,MAAQ,UAAY,CACvBD,EAAO,QAAU,GACjBD,EAAU,QAAQ,SAAUE,EAAU,CACpC,OAAOA,EAAS,CAClB,CAAC,CACH,CACF,EACNC,GAAqBriB,GAAU,0BAC/BsiB,GAAiBtiB,GAAU,wBAC3BuiB,GAAe,CACb,SAAUpgB,GACV,SAAU,KACV,SAAU,KACV,cAAe,KACf,eAAgB,KAChB,aAAc,CAChB,EACF,SAASqgB,IAAc,CACrB,MAAO,CACL,WAAY,IAAIP,GAChB,KAAM,IAAI,IACV,SAAU,CACZ,CACF,CACA,SAASQ,GAAaC,EAAO,CAC3BA,EAAM,WACAA,EAAM,WAAZ,GACEL,GAAmBC,GAAgB,UAAY,CAC7CI,EAAM,WAAW,MAAM,CACzB,CAAC,CACL,CACA,IAAIC,GAA4B,KAC9BC,GAA+B,EAC/BC,GAAuB,EACvBC,GAAiC,KACnC,SAASC,GAAoBC,EAAYC,EAAU,CACjD,GAAaN,KAAT,KAAoC,CACtC,IAAIO,EAAsBP,GAA4B,CAAC,EACvDC,GAA+B,EAC/BC,GAAuBM,GAAsB,EAC7CL,GAAiC,CAC/B,OAAQ,UACR,MAAO,OACP,KAAM,SAAUM,EAAS,CACvBF,EAAmB,KAAKE,CAAO,CACjC,CACF,CACF,CACA,OAAAR,KACAK,EAAS,KAAKI,GAA2BA,EAAyB,EAC3DJ,CACT,CACA,SAASI,IAA4B,CACnC,GACQ,EAAET,KAAR,GACSD,KAAT,KACA,CACSG,KAAT,OACGA,GAA+B,OAAS,aAC3C,IAAIZ,EAAYS,GAChBA,GAA4B,KAC5BE,GAAuB,EACvBC,GAAiC,KACjC,QAASxiB,EAAI,EAAGA,EAAI4hB,EAAU,OAAQ5hB,OAAS4hB,EAAU5hB,CAAC,GAAG,CAC/D,CACF,CACA,SAASgjB,GAAmBL,EAAUM,EAAQ,CAC5C,IAAIrB,EAAY,CAAC,EACfsB,EAAuB,CACrB,OAAQ,UACR,MAAO,KACP,OAAQ,KACR,KAAM,SAAUJ,EAAS,CACvBlB,EAAU,KAAKkB,CAAO,CACxB,CACF,EACF,OAAAH,EAAS,KACP,UAAY,CACVO,EAAqB,OAAS,YAC9BA,EAAqB,MAAQD,EAC7B,QAASjjB,EAAI,EAAGA,EAAI4hB,EAAU,OAAQ5hB,OAAS4hB,EAAU5hB,CAAC,GAAGijB,CAAM,CACrE,EACA,SAAUvI,EAAO,CAGf,IAFAwI,EAAqB,OAAS,WAC9BA,EAAqB,OAASxI,EACzBA,EAAQ,EAAGA,EAAQkH,EAAU,OAAQlH,OACpCkH,EAAUlH,CAAK,GAAG,MAAM,CAChC,CACF,EACOwI,CACT,CACA,IAAIC,GAA8BrgB,EAAqB,EACvDA,EAAqB,EAAI,SAAU4f,EAAYU,EAAa,CAC1DC,GAAiC5c,GAAI,EACxB,OAAO2c,GAApB,UACWA,IAAT,MACe,OAAOA,EAAY,MAAlC,YACAX,GAAoBC,EAAYU,CAAW,EACpCD,KAAT,MACEA,GAA4BT,EAAYU,CAAW,CACvD,EACA,IAAIE,GAAengB,GAAa,IAAI,EACpC,SAASogB,IAAoB,CAC3B,IAAIC,EAAiCF,GAAa,QAClD,OAAgBE,IAAT,KACHA,EACAC,GAAmB,WACzB,CACA,SAASC,GAAeC,EAAyBC,EAAe,CACrDA,IAAT,KACIrgB,GAAK+f,GAAcA,GAAa,OAAO,EACvC/f,GAAK+f,GAAcM,EAAc,IAAI,CAC3C,CACA,SAASC,IAAoB,CAC3B,IAAIC,EAAgBP,GAAkB,EACtC,OAAgBO,IAAT,KACH,KACA,CAAE,OAAQ7B,GAAa,cAAe,KAAM6B,CAAc,CAChE,CACA,IAAIC,GAAoB,MAAMlkB,EAAuB,GAAG,CAAC,EACvDmkB,GAA2B,MAAMnkB,EAAuB,GAAG,CAAC,EAC5DokB,GAA0B,MAAMpkB,EAAuB,GAAG,CAAC,EAC3DqkB,GAA8B,CAAE,KAAM,UAAY,CAAC,CAAE,EACvD,SAASC,GAAmBxB,EAAU,CACpC,OAAAA,EAAWA,EAAS,OACGA,IAAhB,aAA2CA,IAAf,UACrC,CACA,SAASyB,GAAkBC,EAAe1B,EAAUzf,EAAO,CAKzD,OAJAA,EAAQmhB,EAAcnhB,CAAK,EAChBA,IAAX,OACImhB,EAAc,KAAK1B,CAAQ,EAC3Bzf,IAAUyf,IAAaA,EAAS,KAAKhS,GAAQA,EAAM,EAAIgS,EAAWzf,GAC9Dyf,EAAS,OAAQ,CACvB,IAAK,YACH,OAAOA,EAAS,MAClB,IAAK,WACH,MACI0B,EAAgB1B,EAAS,OAC3B2B,GAA8BD,CAAa,EAC3CA,EAEJ,QACE,GAAiB,OAAO1B,EAAS,QAA7B,SAAqCA,EAAS,KAAKhS,GAAQA,EAAM,MAChE,CAEH,GADA0T,EAAgBZ,GACHY,IAAT,MAA0B,IAAMA,EAAc,oBAChD,MAAM,MAAMxkB,EAAuB,GAAG,CAAC,EACzCwkB,EAAgB1B,EAChB0B,EAAc,OAAS,UACvBA,EAAc,KACZ,SAAUE,EAAgB,CACxB,GAAkB5B,EAAS,SAAvB,UAA+B,CACjC,IAAI6B,EAAoB7B,EACxB6B,EAAkB,OAAS,YAC3BA,EAAkB,MAAQD,CAC5B,CACF,EACA,SAAU7J,EAAO,CACf,GAAkBiI,EAAS,SAAvB,UAA+B,CACjC,IAAI8B,EAAmB9B,EACvB8B,EAAiB,OAAS,WAC1BA,EAAiB,OAAS/J,CAC5B,CACF,CACF,CACF,CACA,OAAQiI,EAAS,OAAQ,CACvB,IAAK,YACH,OAAOA,EAAS,MAClB,IAAK,WACH,MACI0B,EAAgB1B,EAAS,OAC3B2B,GAA8BD,CAAa,EAC3CA,CAEN,CACA,MAAAK,GAAoB/B,EACdoB,EACV,CACF,CACA,SAASY,GAAYC,EAAU,CAC7B,GAAI,CACF,IAAIC,EAAOD,EAAS,MACpB,OAAOC,EAAKD,EAAS,QAAQ,CAC/B,OAAShiB,EAAG,CACV,MAAaA,IAAT,MAA2B,OAAOA,GAApB,UAAwC,OAAOA,EAAE,MAAxB,YACjC8hB,GAAoB9hB,EAAImhB,IAC5BnhB,CACR,CACF,CACA,IAAI8hB,GAAoB,KACxB,SAASI,IAAuB,CAC9B,GAAaJ,KAAT,KAA4B,MAAM,MAAM7kB,EAAuB,GAAG,CAAC,EACvE,IAAI8iB,EAAW+B,GACf,OAAAA,GAAoB,KACb/B,CACT,CACA,SAAS2B,GAA8BS,EAAgB,CACrD,GACEA,IAAmBhB,IACnBgB,IAAmBd,GAEnB,MAAM,MAAMpkB,EAAuB,GAAG,CAAC,CAC3C,CACA,IAAImlB,GAAkB,KACpBC,GAAyB,EAC3B,SAASC,GAAevC,EAAU,CAChC,IAAIzf,EAAQ+hB,GACZ,OAAAA,IAA0B,EACjBD,KAAT,OAA6BA,GAAkB,CAAC,GACzCZ,GAAkBY,GAAiBrC,EAAUzf,CAAK,CAC3D,CACA,SAASiiB,GAAUlf,EAAgB0I,EAAS,CAC1CA,EAAUA,EAAQ,MAAM,IACxB1I,EAAe,IAAiB0I,IAAX,OAAqBA,EAAU,IACtD,CACA,SAASyW,GAA6BC,EAAaC,EAAU,CAC3D,MAAIA,EAAS,WAAahkB,GAClB,MAAMzB,EAAuB,GAAG,CAAC,GACzCwlB,EAAc,OAAO,UAAU,SAAS,KAAKC,CAAQ,EAC/C,MACJzlB,EACE,GACsBwlB,IAAtB,kBACI,qBAAuB,OAAO,KAAKC,CAAQ,EAAE,KAAK,IAAI,EAAI,IAC1DD,CACN,CACF,EACF,CACA,SAASE,GAAsBC,EAAwB,CACrD,SAASC,EAAYJ,EAAaK,EAAe,CAC/C,GAAIF,EAAwB,CAC1B,IAAIG,EAAYN,EAAY,UACnBM,IAAT,MACMN,EAAY,UAAY,CAACK,CAAa,EAAKL,EAAY,OAAS,IAClEM,EAAU,KAAKD,CAAa,CAClC,CACF,CACA,SAASE,EAAwBP,EAAaQ,EAAmB,CAC/D,GAAI,CAACL,EAAwB,OAAO,KACpC,KAAgBK,IAAT,MACLJ,EAAYJ,EAAaQ,CAAiB,EACvCA,EAAoBA,EAAkB,QAC3C,OAAO,IACT,CACA,SAASC,EAAqBD,EAAmB,CAC/C,QAASE,EAAmB,IAAI,IAAgBF,IAAT,MAC5BA,EAAkB,MAA3B,KACIE,EAAiB,IAAIF,EAAkB,IAAKA,CAAiB,EAC7DE,EAAiB,IAAIF,EAAkB,MAAOA,CAAiB,EAChEA,EAAoBA,EAAkB,QAC3C,OAAOE,CACT,CACA,SAASC,EAAS5lB,EAAO0b,EAAc,CACrC,OAAA1b,EAAQ+b,GAAqB/b,EAAO0b,CAAY,EAChD1b,EAAM,MAAQ,EACdA,EAAM,QAAU,KACTA,CACT,CACA,SAAS6lB,EAAWC,EAAUC,EAAiBC,EAAU,CAEvD,OADAF,EAAS,MAAQE,EACZZ,GAELY,EAAWF,EAAS,UACPE,IAAT,MAECA,EAAWA,EAAS,MACrBA,EAAWD,GACLD,EAAS,OAAS,SAAWC,GAC/BC,IAERF,EAAS,OAAS,SACXC,KAVGD,EAAS,OAAS,QAAUC,EAWxC,CACA,SAASE,EAAiBH,EAAU,CAClC,OAAAV,GACWU,EAAS,YAAlB,OACCA,EAAS,OAAS,UACdA,CACT,CACA,SAASI,EAAejB,EAAajJ,EAASmK,EAAaxe,EAAO,CAChE,OAAaqU,IAAT,MAA0BA,EAAQ,MAAd,GAEnBA,EAAUQ,GAAoB2J,EAAalB,EAAY,KAAMtd,CAAK,EAClEqU,EAAQ,OAASiJ,EAClBjJ,IAEJA,EAAU4J,EAAS5J,EAASmK,CAAW,EACvCnK,EAAQ,OAASiJ,EACVjJ,EACT,CACA,SAASoK,EAAcnB,EAAajJ,EAASzN,EAAS5G,EAAO,CAC3D,IAAI0e,EAAc9X,EAAQ,KAC1B,OAAI8X,IAAgBhlB,GACXilB,EACLrB,EACAjJ,EACAzN,EAAQ,MAAM,SACd5G,EACA4G,EAAQ,GACV,EAESyN,IAAT,OACCA,EAAQ,cAAgBqK,GACT,OAAOA,GAApB,UACUA,IAAT,MACAA,EAAY,WAAavkB,IACzByiB,GAAY8B,CAAW,IAAMrK,EAAQ,OAGtCA,EAAU4J,EAAS5J,EAASzN,EAAQ,KAAK,EAC1CwW,GAAU/I,EAASzN,CAAO,EACzByN,EAAQ,OAASiJ,EAClBjJ,IAEJA,EAAUE,GACR3N,EAAQ,KACRA,EAAQ,IACRA,EAAQ,MACR,KACA0W,EAAY,KACZtd,CACF,EACAod,GAAU/I,EAASzN,CAAO,EAC1ByN,EAAQ,OAASiJ,EACVjJ,EACT,CACA,SAASuK,EAAatB,EAAajJ,EAASa,EAAQlV,EAAO,CACzD,OACWqU,IAAT,MACMA,EAAQ,MAAd,GACAA,EAAQ,UAAU,gBAAkBa,EAAO,eAC3Cb,EAAQ,UAAU,iBAAmBa,EAAO,gBAGzCb,EAAUY,GAAsBC,EAAQoI,EAAY,KAAMtd,CAAK,EAC/DqU,EAAQ,OAASiJ,EAClBjJ,IAEJA,EAAU4J,EAAS5J,EAASa,EAAO,UAAY,CAAC,CAAC,EACjDb,EAAQ,OAASiJ,EACVjJ,EACT,CACA,SAASsK,EAAerB,EAAajJ,EAASwK,EAAU7e,EAAOgN,EAAK,CAClE,OAAaqH,IAAT,MAA0BA,EAAQ,MAAd,GAEnBA,EAAUM,GACTkK,EACAvB,EAAY,KACZtd,EACAgN,CACF,EACCqH,EAAQ,OAASiJ,EAClBjJ,IAEJA,EAAU4J,EAAS5J,EAASwK,CAAQ,EACpCxK,EAAQ,OAASiJ,EACVjJ,EACT,CACA,SAASyK,EAAYxB,EAAaC,EAAUvd,EAAO,CACjD,GACgB,OAAOud,GAApB,UAAuCA,IAAP,IACpB,OAAOA,GAApB,UACa,OAAOA,GAApB,SAEA,OACGA,EAAW1I,GACV,GAAK0I,EACLD,EAAY,KACZtd,CACF,EACCud,EAAS,OAASD,EACnBC,EAEJ,GAAiB,OAAOA,GAApB,UAAyCA,IAAT,KAAmB,CACrD,OAAQA,EAAS,SAAU,CACzB,KAAK/jB,GACH,OACGwG,EAAQuU,GACPgJ,EAAS,KACTA,EAAS,IACTA,EAAS,MACT,KACAD,EAAY,KACZtd,CACF,EACAod,GAAUpd,EAAOud,CAAQ,EACxBvd,EAAM,OAASsd,EAChBtd,EAEJ,KAAKvG,GACH,OACG8jB,EAAWtI,GACVsI,EACAD,EAAY,KACZtd,CACF,EACCud,EAAS,OAASD,EACnBC,EAEJ,KAAKpjB,GACH,OACGojB,EAAWX,GAAYW,CAAQ,EAChCuB,EAAYxB,EAAaC,EAAUvd,CAAK,CAE9C,CACA,GAAIlF,GAAYyiB,CAAQ,GAAKhjB,GAAcgjB,CAAQ,EACjD,OACGA,EAAW5I,GACV4I,EACAD,EAAY,KACZtd,EACA,IACF,EACCud,EAAS,OAASD,EACnBC,EAEJ,GAAmB,OAAOA,EAAS,MAA/B,WACF,OAAOuB,EAAYxB,EAAaH,GAAeI,CAAQ,EAAGvd,CAAK,EACjE,GAAIud,EAAS,WAAazjB,GACxB,OAAOglB,EACLxB,EACA5D,GAAgC4D,EAAaC,CAAQ,EACrDvd,CACF,EACFqd,GAA6BC,EAAaC,CAAQ,CACpD,CACA,OAAO,IACT,CACA,SAASwB,EAAWzB,EAAa0B,EAAUzB,EAAUvd,EAAO,CAC1D,IAAIgN,EAAegS,IAAT,KAAoBA,EAAS,IAAM,KAC7C,GACgB,OAAOzB,GAApB,UAAuCA,IAAP,IACpB,OAAOA,GAApB,UACa,OAAOA,GAApB,SAEA,OAAgBvQ,IAAT,KACH,KACAuR,EAAejB,EAAa0B,EAAU,GAAKzB,EAAUvd,CAAK,EAChE,GAAiB,OAAOud,GAApB,UAAyCA,IAAT,KAAmB,CACrD,OAAQA,EAAS,SAAU,CACzB,KAAK/jB,GACH,OAAO+jB,EAAS,MAAQvQ,EACpByR,EAAcnB,EAAa0B,EAAUzB,EAAUvd,CAAK,EACpD,KACN,KAAKvG,GACH,OAAO8jB,EAAS,MAAQvQ,EACpB4R,EAAatB,EAAa0B,EAAUzB,EAAUvd,CAAK,EACnD,KACN,KAAK7F,GACH,OACGojB,EAAWX,GAAYW,CAAQ,EAChCwB,EAAWzB,EAAa0B,EAAUzB,EAAUvd,CAAK,CAEvD,CACA,GAAIlF,GAAYyiB,CAAQ,GAAKhjB,GAAcgjB,CAAQ,EACjD,OAAgBvQ,IAAT,KACH,KACA2R,EAAerB,EAAa0B,EAAUzB,EAAUvd,EAAO,IAAI,EACjE,GAAmB,OAAOud,EAAS,MAA/B,WACF,OAAOwB,EACLzB,EACA0B,EACA7B,GAAeI,CAAQ,EACvBvd,CACF,EACF,GAAIud,EAAS,WAAazjB,GACxB,OAAOilB,EACLzB,EACA0B,EACAtF,GAAgC4D,EAAaC,CAAQ,EACrDvd,CACF,EACFqd,GAA6BC,EAAaC,CAAQ,CACpD,CACA,OAAO,IACT,CACA,SAAS0B,EACPjB,EACAV,EACA4B,EACA3B,EACAvd,EACA,CACA,GACgB,OAAOud,GAApB,UAAuCA,IAAP,IACpB,OAAOA,GAApB,UACa,OAAOA,GAApB,SAEA,OACGS,EAAmBA,EAAiB,IAAIkB,CAAM,GAAK,KACpDX,EAAejB,EAAaU,EAAkB,GAAKT,EAAUvd,CAAK,EAEtE,GAAiB,OAAOud,GAApB,UAAyCA,IAAT,KAAmB,CACrD,OAAQA,EAAS,SAAU,CACzB,KAAK/jB,GACH,OACGwkB,EACCA,EAAiB,IACNT,EAAS,MAAlB,KAAwB2B,EAAS3B,EAAS,GAC5C,GAAK,KACPkB,EAAcnB,EAAaU,EAAkBT,EAAUvd,CAAK,EAEhE,KAAKvG,GACH,OACGukB,EACCA,EAAiB,IACNT,EAAS,MAAlB,KAAwB2B,EAAS3B,EAAS,GAC5C,GAAK,KACPqB,EAAatB,EAAaU,EAAkBT,EAAUvd,CAAK,EAE/D,KAAK7F,GACH,OACGojB,EAAWX,GAAYW,CAAQ,EAChC0B,EACEjB,EACAV,EACA4B,EACA3B,EACAvd,CACF,CAEN,CACA,GAAIlF,GAAYyiB,CAAQ,GAAKhjB,GAAcgjB,CAAQ,EACjD,OACGS,EAAmBA,EAAiB,IAAIkB,CAAM,GAAK,KACpDP,EAAerB,EAAaU,EAAkBT,EAAUvd,EAAO,IAAI,EAEvE,GAAmB,OAAOud,EAAS,MAA/B,WACF,OAAO0B,EACLjB,EACAV,EACA4B,EACA/B,GAAeI,CAAQ,EACvBvd,CACF,EACF,GAAIud,EAAS,WAAazjB,GACxB,OAAOmlB,EACLjB,EACAV,EACA4B,EACAxF,GAAgC4D,EAAaC,CAAQ,EACrDvd,CACF,EACFqd,GAA6BC,EAAaC,CAAQ,CACpD,CACA,OAAO,IACT,CACA,SAAS4B,EACP7B,EACAQ,EACAsB,EACApf,EACA,CACA,QACMqf,EAAsB,KACxBC,EAAmB,KACnBN,EAAWlB,EACXoB,EAAUpB,EAAoB,EAC9ByB,EAAe,KACRP,IAAT,MAAqBE,EAASE,EAAY,OAC1CF,IACA,CACAF,EAAS,MAAQE,GACXK,EAAeP,EAAYA,EAAW,MACvCO,EAAeP,EAAS,QAC7B,IAAIb,EAAWY,EACbzB,EACA0B,EACAI,EAAYF,CAAM,EAClBlf,CACF,EACA,GAAame,IAAT,KAAmB,CACZa,IAAT,OAAsBA,EAAWO,GACjC,KACF,CACA9B,GACEuB,GACSb,EAAS,YAAlB,MACAT,EAAYJ,EAAa0B,CAAQ,EACnClB,EAAoBI,EAAWC,EAAUL,EAAmBoB,CAAM,EACzDI,IAAT,KACKD,EAAsBlB,EACtBmB,EAAiB,QAAUnB,EAChCmB,EAAmBnB,EACnBa,EAAWO,CACb,CACA,GAAIL,IAAWE,EAAY,OACzB,OACEvB,EAAwBP,EAAa0B,CAAQ,EAC7C9X,IAAe8O,GAAasH,EAAa4B,CAAM,EAC/CG,EAEJ,GAAaL,IAAT,KAAmB,CACrB,KAAOE,EAASE,EAAY,OAAQF,IACjCF,EAAWF,EAAYxB,EAAa8B,EAAYF,CAAM,EAAGlf,CAAK,EACpDgf,IAAT,OACIlB,EAAoBI,EACpBc,EACAlB,EACAoB,CACF,EACSI,IAAT,KACKD,EAAsBL,EACtBM,EAAiB,QAAUN,EAC/BM,EAAmBN,GAC1B,OAAA9X,IAAe8O,GAAasH,EAAa4B,CAAM,EACxCG,CACT,CACA,IACEL,EAAWjB,EAAqBiB,CAAQ,EACxCE,EAASE,EAAY,OACrBF,IAECK,EAAeN,EACdD,EACA1B,EACA4B,EACAE,EAAYF,CAAM,EAClBlf,CACF,EACWuf,IAAT,OACG9B,GACU8B,EAAa,YAAtB,MACAP,EAAS,OACEO,EAAa,MAAtB,KAA4BL,EAASK,EAAa,GACpD,EACDzB,EAAoBI,EACnBqB,EACAzB,EACAoB,CACF,EACSI,IAAT,KACKD,EAAsBE,EACtBD,EAAiB,QAAUC,EAC/BD,EAAmBC,GAC1B,OAAA9B,GACEuB,EAAS,QAAQ,SAAUQ,GAAO,CAChC,OAAO9B,EAAYJ,EAAakC,EAAK,CACvC,CAAC,EACHtY,IAAe8O,GAAasH,EAAa4B,CAAM,EACxCG,CACT,CACA,SAASI,EACPnC,EACAQ,EACAsB,EACApf,EACA,CACA,GAAYof,GAAR,KAAqB,MAAM,MAAMtnB,EAAuB,GAAG,CAAC,EAChE,QACMunB,EAAsB,KACxBC,EAAmB,KACnBN,EAAWlB,EACXoB,EAAUpB,EAAoB,EAC9ByB,EAAe,KACfG,EAAON,EAAY,KAAK,EACjBJ,IAAT,MAAqB,CAACU,EAAK,KAC3BR,IAAUQ,EAAON,EAAY,KAAK,EAClC,CACAJ,EAAS,MAAQE,GACXK,EAAeP,EAAYA,EAAW,MACvCO,EAAeP,EAAS,QAC7B,IAAIb,GAAWY,EAAWzB,EAAa0B,EAAUU,EAAK,MAAO1f,CAAK,EAClE,GAAame,KAAT,KAAmB,CACZa,IAAT,OAAsBA,EAAWO,GACjC,KACF,CACA9B,GACEuB,GACSb,GAAS,YAAlB,MACAT,EAAYJ,EAAa0B,CAAQ,EACnClB,EAAoBI,EAAWC,GAAUL,EAAmBoB,CAAM,EACzDI,IAAT,KACKD,EAAsBlB,GACtBmB,EAAiB,QAAUnB,GAChCmB,EAAmBnB,GACnBa,EAAWO,CACb,CACA,GAAIG,EAAK,KACP,OACE7B,EAAwBP,EAAa0B,CAAQ,EAC7C9X,IAAe8O,GAAasH,EAAa4B,CAAM,EAC/CG,EAEJ,GAAaL,IAAT,KAAmB,CACrB,KAAO,CAACU,EAAK,KAAMR,IAAUQ,EAAON,EAAY,KAAK,EAClDM,EAAOZ,EAAYxB,EAAaoC,EAAK,MAAO1f,CAAK,EACvC0f,IAAT,OACI5B,EAAoBI,EAAWwB,EAAM5B,EAAmBoB,CAAM,EACvDI,IAAT,KACKD,EAAsBK,EACtBJ,EAAiB,QAAUI,EAC/BJ,EAAmBI,GAC1B,OAAAxY,IAAe8O,GAAasH,EAAa4B,CAAM,EACxCG,CACT,CACA,IACEL,EAAWjB,EAAqBiB,CAAQ,EACxC,CAACU,EAAK,KACNR,IAAUQ,EAAON,EAAY,KAAK,EAEjCM,EAAOT,EAAcD,EAAU1B,EAAa4B,EAAQQ,EAAK,MAAO1f,CAAK,EAC3D0f,IAAT,OACGjC,GACUiC,EAAK,YAAd,MACAV,EAAS,OAAgBU,EAAK,MAAd,KAAoBR,EAASQ,EAAK,GAAG,EACtD5B,EAAoBI,EAAWwB,EAAM5B,EAAmBoB,CAAM,EACtDI,IAAT,KACKD,EAAsBK,EACtBJ,EAAiB,QAAUI,EAC/BJ,EAAmBI,GAC1B,OAAAjC,GACEuB,EAAS,QAAQ,SAAUQ,EAAO,CAChC,OAAO9B,EAAYJ,EAAakC,CAAK,CACvC,CAAC,EACHtY,IAAe8O,GAAasH,EAAa4B,CAAM,EACxCG,CACT,CACA,SAASM,EACPrC,EACAQ,EACAP,EACAvd,EACA,CAMA,GALa,OAAOud,GAApB,UACWA,IAAT,MACAA,EAAS,OAAS7jB,IACT6jB,EAAS,MAAlB,OACCA,EAAWA,EAAS,MAAM,UACZ,OAAOA,GAApB,UAAyCA,IAAT,KAAmB,CACrD,OAAQA,EAAS,SAAU,CACzB,KAAK/jB,GACHV,EAAG,CACD,QAASkU,EAAMuQ,EAAS,IAAcO,IAAT,MAA8B,CACzD,GAAIA,EAAkB,MAAQ9Q,EAAK,CAEjC,GADAA,EAAMuQ,EAAS,KACXvQ,IAAQtT,IACV,GAAUokB,EAAkB,MAAxB,EAA6B,CAC/BD,EACEP,EACAQ,EAAkB,OACpB,EACA9d,EAAQie,EACNH,EACAP,EAAS,MAAM,QACjB,EACAvd,EAAM,OAASsd,EACfA,EAActd,EACd,MAAMlH,CACR,UAEAglB,EAAkB,cAAgB9Q,GACpB,OAAOA,GAApB,UACUA,IAAT,MACAA,EAAI,WAAa7S,IACjByiB,GAAY5P,CAAG,IAAM8Q,EAAkB,KACzC,CACAD,EACEP,EACAQ,EAAkB,OACpB,EACA9d,EAAQie,EAASH,EAAmBP,EAAS,KAAK,EAClDH,GAAUpd,EAAOud,CAAQ,EACzBvd,EAAM,OAASsd,EACfA,EAActd,EACd,MAAMlH,CACR,CACA+kB,EAAwBP,EAAaQ,CAAiB,EACtD,KACF,MAAOJ,EAAYJ,EAAaQ,CAAiB,EACjDA,EAAoBA,EAAkB,OACxC,CACAP,EAAS,OAAS7jB,IACZsG,EAAQ2U,GACR4I,EAAS,MAAM,SACfD,EAAY,KACZtd,EACAud,EAAS,GACX,EACCvd,EAAM,OAASsd,EACfA,EAActd,IACbA,EAAQuU,GACRgJ,EAAS,KACTA,EAAS,IACTA,EAAS,MACT,KACAD,EAAY,KACZtd,CACF,EACAod,GAAUpd,EAAOud,CAAQ,EACxBvd,EAAM,OAASsd,EACfA,EAActd,EACrB,CACA,OAAOse,EAAiBhB,CAAW,EACrC,KAAK7jB,GACHX,EAAG,CACD,IAAKkU,EAAMuQ,EAAS,IAAcO,IAAT,MAA8B,CACrD,GAAIA,EAAkB,MAAQ9Q,EAC5B,GACQ8Q,EAAkB,MAAxB,GACAA,EAAkB,UAAU,gBAC1BP,EAAS,eACXO,EAAkB,UAAU,iBAC1BP,EAAS,eACX,CACAM,EACEP,EACAQ,EAAkB,OACpB,EACA9d,EAAQie,EAASH,EAAmBP,EAAS,UAAY,CAAC,CAAC,EAC3Dvd,EAAM,OAASsd,EACfA,EAActd,EACd,MAAMlH,CACR,KAAO,CACL+kB,EAAwBP,EAAaQ,CAAiB,EACtD,KACF,MACGJ,EAAYJ,EAAaQ,CAAiB,EAC/CA,EAAoBA,EAAkB,OACxC,CACA9d,EAAQiV,GAAsBsI,EAAUD,EAAY,KAAMtd,CAAK,EAC/DA,EAAM,OAASsd,EACfA,EAActd,CAChB,CACA,OAAOse,EAAiBhB,CAAW,EACrC,KAAKnjB,GACH,OACGojB,EAAWX,GAAYW,CAAQ,EAChCoC,EACErC,EACAQ,EACAP,EACAvd,CACF,CAEN,CACA,GAAIlF,GAAYyiB,CAAQ,EACtB,OAAO4B,EACL7B,EACAQ,EACAP,EACAvd,CACF,EACF,GAAIzF,GAAcgjB,CAAQ,EAAG,CAE3B,GADAvQ,EAAMzS,GAAcgjB,CAAQ,EACT,OAAOvQ,GAAtB,WAA2B,MAAM,MAAMlV,EAAuB,GAAG,CAAC,EACtE,OAAAylB,EAAWvQ,EAAI,KAAKuQ,CAAQ,EACrBkC,EACLnC,EACAQ,EACAP,EACAvd,CACF,CACF,CACA,GAAmB,OAAOud,EAAS,MAA/B,WACF,OAAOoC,EACLrC,EACAQ,EACAX,GAAeI,CAAQ,EACvBvd,CACF,EACF,GAAIud,EAAS,WAAazjB,GACxB,OAAO6lB,EACLrC,EACAQ,EACApE,GAAgC4D,EAAaC,CAAQ,EACrDvd,CACF,EACFqd,GAA6BC,EAAaC,CAAQ,CACpD,CACA,OAAqB,OAAOA,GAApB,UAAuCA,IAAP,IACzB,OAAOA,GAApB,UACa,OAAOA,GAApB,UACIA,EAAW,GAAKA,EACTO,IAAT,MAAoCA,EAAkB,MAAxB,GACzBD,EAAwBP,EAAaQ,EAAkB,OAAO,EAC9D9d,EAAQie,EAASH,EAAmBP,CAAQ,EAC5Cvd,EAAM,OAASsd,EACfA,EAActd,IACd6d,EAAwBP,EAAaQ,CAAiB,EACtD9d,EAAQ6U,GAAoB0I,EAAUD,EAAY,KAAMtd,CAAK,EAC7DA,EAAM,OAASsd,EACfA,EAActd,GACnBse,EAAiBhB,CAAW,GAC5BO,EAAwBP,EAAaQ,CAAiB,CAC5D,CACA,OAAO,SAAUR,EAAaQ,EAAmBP,EAAUvd,EAAO,CAChE,GAAI,CACFkd,GAAyB,EACzB,IAAI0C,EAAkBD,EACpBrC,EACAQ,EACAP,EACAvd,CACF,EACA,OAAAid,GAAkB,KACX2C,CACT,OAAS/kB,EAAG,CACV,GAAIA,IAAMmhB,IAAqBnhB,IAAMqhB,GAAyB,MAAMrhB,EACpE,IAAIxC,EAAQ4b,GAAqB,GAAIpZ,EAAG,KAAMyiB,EAAY,IAAI,EAC9D,OAAAjlB,EAAM,MAAQ2H,EACd3H,EAAM,OAASilB,EACRjlB,CACT,CAEF,CACF,CACA,IAAIwnB,GAAuBrC,GAAsB,EAAE,EACjDsC,GAAmBtC,GAAsB,EAAE,EAC3CuC,GAAiB,GACnB,SAASC,GAAsB3nB,EAAO,CACpCA,EAAM,YAAc,CAClB,UAAWA,EAAM,cACjB,gBAAiB,KACjB,eAAgB,KAChB,OAAQ,CAAE,QAAS,KAAM,MAAO,EAAG,gBAAiB,IAAK,EACzD,UAAW,IACb,CACF,CACA,SAAS4nB,GAAiB5L,EAASnW,EAAgB,CACjDmW,EAAUA,EAAQ,YAClBnW,EAAe,cAAgBmW,IAC5BnW,EAAe,YAAc,CAC5B,UAAWmW,EAAQ,UACnB,gBAAiBA,EAAQ,gBACzB,eAAgBA,EAAQ,eACxB,OAAQA,EAAQ,OAChB,UAAW,IACb,EACJ,CACA,SAAS6L,GAAapf,EAAM,CAC1B,MAAO,CAAE,KAAMA,EAAM,IAAK,EAAG,QAAS,KAAM,SAAU,KAAM,KAAM,IAAK,CACzE,CACA,SAASqf,GAAc9nB,EAAO6J,EAAQpB,EAAM,CAC1C,IAAIsf,EAAc/nB,EAAM,YACxB,GAAa+nB,IAAT,KAAsB,OAAO,KAEjC,GADAA,EAAcA,EAAY,QACfC,GAAmB,KAA1B,EAA8B,CAChC,IAAInN,EAAUkN,EAAY,QAC1B,OAASlN,IAAT,KACKhR,EAAO,KAAOA,GACbA,EAAO,KAAOgR,EAAQ,KAAQA,EAAQ,KAAOhR,GACnDke,EAAY,QAAUle,EACtBA,EAASoR,GAAuBjb,CAAK,EACrC8a,GAA8B9a,EAAO,KAAMyI,CAAI,EACxCoB,CACT,CACA,OAAAkR,GAAgB/a,EAAO+nB,EAAale,EAAQpB,CAAI,EACzCwS,GAAuBjb,CAAK,CACrC,CACA,SAASioB,GAAoBngB,EAAM9H,EAAOyI,EAAM,CAE9C,GADAzI,EAAQA,EAAM,YACDA,IAAT,OAAoBA,EAAQA,EAAM,QAAgByI,EAAO,WAAd,GAAyB,CACtE,IAAIyf,EAAaloB,EAAM,MACvBkoB,GAAcpgB,EAAK,aACnBW,GAAQyf,EACRloB,EAAM,MAAQyI,EACdwB,GAAkBnC,EAAMW,CAAI,CAC9B,CACF,CACA,SAAS0f,GAAsBtiB,EAAgBuiB,EAAgB,CAC7D,IAAIxN,EAAQ/U,EAAe,YACzBmW,EAAUnW,EAAe,UAC3B,GACWmW,IAAT,OACEA,EAAUA,EAAQ,YAAcpB,IAAUoB,GAC5C,CACA,IAAIqM,EAAW,KACbC,EAAU,KAEZ,GADA1N,EAAQA,EAAM,gBACDA,IAAT,KAAgB,CAClB,EAAG,CACD,IAAI2N,EAAQ,CACV,KAAM3N,EAAM,KACZ,IAAKA,EAAM,IACX,QAASA,EAAM,QACf,SAAU,KACV,KAAM,IACR,EACS0N,IAAT,KACKD,EAAWC,EAAUC,EACrBD,EAAUA,EAAQ,KAAOC,EAC9B3N,EAAQA,EAAM,IAChB,OAAkBA,IAAT,MACA0N,IAAT,KACKD,EAAWC,EAAUF,EACrBE,EAAUA,EAAQ,KAAOF,CAChC,MAAOC,EAAWC,EAAUF,EAC5BxN,EAAQ,CACN,UAAWoB,EAAQ,UACnB,gBAAiBqM,EACjB,eAAgBC,EAChB,OAAQtM,EAAQ,OAChB,UAAWA,EAAQ,SACrB,EACAnW,EAAe,YAAc+U,EAC7B,MACF,CACA/U,EAAiB+U,EAAM,eACd/U,IAAT,KACK+U,EAAM,gBAAkBwN,EACxBviB,EAAe,KAAOuiB,EAC3BxN,EAAM,eAAiBwN,CACzB,CACA,IAAII,GAAkC,GACtC,SAASC,IAA8C,CACrD,GAAID,GAAiC,CACnC,IAAIE,EAA0BtG,GAC9B,GAAasG,IAAT,KAAkC,MAAMA,CAC9C,CACF,CACA,SAASC,GACPC,EACA5X,EACA6X,EACAtgB,EACA,CACAigB,GAAkC,GAClC,IAAI5N,EAAQgO,EAAwB,YACpClB,GAAiB,GACjB,IAAIoB,EAAkBlO,EAAM,gBAC1BmO,EAAiBnO,EAAM,eACvBoO,EAAepO,EAAM,OAAO,QAC9B,GAAaoO,IAAT,KAAuB,CACzBpO,EAAM,OAAO,QAAU,KACvB,IAAIqO,EAAoBD,EACtBE,EAAqBD,EAAkB,KACzCA,EAAkB,KAAO,KAChBF,IAAT,KACKD,EAAkBI,EAClBH,EAAe,KAAOG,EAC3BH,EAAiBE,EACjB,IAAIjN,EAAU4M,EAAwB,UAC7B5M,IAAT,OACIA,EAAUA,EAAQ,YACnBgN,EAAehN,EAAQ,eACxBgN,IAAiBD,IACLC,IAAT,KACIhN,EAAQ,gBAAkBkN,EAC1BF,EAAa,KAAOE,EACxBlN,EAAQ,eAAiBiN,GAChC,CACA,GAAaH,IAAT,KAA0B,CAC5B,IAAIK,EAAWvO,EAAM,UACrBmO,EAAiB,EACjB/M,EAAUkN,EAAqBD,EAAoB,KACnDD,EAAeF,EACf,EAAG,CACD,IAAI9f,EAAaggB,EAAa,KAAO,WACnCI,EAAiBpgB,IAAeggB,EAAa,KAC/C,GACEI,GACKC,GAAgCrgB,KAAgBA,GAChDT,EAAcS,KAAgBA,EACnC,CACMA,IAAN,GACEA,IAAemZ,KACdqG,GAAkC,IAC5BxM,IAAT,OACGA,EAAUA,EAAQ,KACjB,CACE,KAAM,EACN,IAAKgN,EAAa,IAClB,QAASA,EAAa,QACtB,SAAU,KACV,KAAM,IACR,GACJvoB,EAAG,CACD,IAAIoF,EAAiB+iB,EACnB/e,EAASmf,EACXhgB,EAAagI,EACb,IAAI8N,EAAW+J,EACf,OAAQhf,EAAO,IAAK,CAClB,IAAK,GAEH,GADAhE,EAAiBgE,EAAO,QACL,OAAOhE,GAAtB,WAAsC,CACxCsjB,EAAWtjB,EAAe,KAAKiZ,EAAUqK,EAAUngB,CAAU,EAC7D,MAAMvI,CACR,CACA0oB,EAAWtjB,EACX,MAAMpF,EACR,IAAK,GACHoF,EAAe,MAASA,EAAe,MAAQ,OAAU,IAC3D,IAAK,GAMH,GALAA,EAAiBgE,EAAO,QACxBb,EACiB,OAAOnD,GAAtB,WACIA,EAAe,KAAKiZ,EAAUqK,EAAUngB,CAAU,EAClDnD,EACOmD,GAAT,KAA8C,MAAMvI,EACxD0oB,EAAWloB,GAAO,CAAC,EAAGkoB,EAAUngB,CAAU,EAC1C,MAAMvI,EACR,IAAK,GACHinB,GAAiB,EACrB,CACF,CACA1e,EAAaggB,EAAa,SACjBhgB,IAAT,OACI4f,EAAwB,OAAS,GACnCQ,IAAmBR,EAAwB,OAAS,MACnDQ,EAAiBxO,EAAM,UACfwO,IAAT,KACKxO,EAAM,UAAY,CAAC5R,CAAU,EAC9BogB,EAAe,KAAKpgB,CAAU,EACtC,MACGogB,EAAiB,CAChB,KAAMpgB,EACN,IAAKggB,EAAa,IAClB,QAASA,EAAa,QACtB,SAAUA,EAAa,SACvB,KAAM,IACR,EACWhN,IAAT,MACMkN,EAAqBlN,EAAUoN,EAChCH,EAAoBE,GACpBnN,EAAUA,EAAQ,KAAOoN,EAC7BL,GAAkB/f,EAEvB,GADAggB,EAAeA,EAAa,KACfA,IAAT,KACF,IAAMA,EAAepO,EAAM,OAAO,QAAmBoO,IAAT,KAC1C,MAECI,EAAiBJ,EACfA,EAAeI,EAAe,KAC9BA,EAAe,KAAO,KACtBxO,EAAM,eAAiBwO,EACvBxO,EAAM,OAAO,QAAU,KAChC,OAAS,IACAoB,IAAT,OAAqBiN,EAAoBE,GACzCvO,EAAM,UAAYqO,EAClBrO,EAAM,gBAAkBsO,EACxBtO,EAAM,eAAiBoB,EACd8M,IAAT,OAA6BlO,EAAM,OAAO,MAAQ,GAClD0O,IAAkCP,EAClCH,EAAwB,MAAQG,EAChCH,EAAwB,cAAgBO,CAC1C,CACF,CACA,SAASI,GAAaC,EAAUzlB,EAAS,CACvC,GAAmB,OAAOylB,GAAtB,WACF,MAAM,MAAM/pB,EAAuB,IAAK+pB,CAAQ,CAAC,EACnDA,EAAS,KAAKzlB,CAAO,CACvB,CACA,SAAS0lB,GAAgB1B,EAAahkB,EAAS,CAC7C,IAAI2lB,EAAY3B,EAAY,UAC5B,GAAa2B,IAAT,KACF,IACE3B,EAAY,UAAY,KAAMA,EAAc,EAC5CA,EAAc2B,EAAU,OACxB3B,IAEAwB,GAAaG,EAAU3B,CAAW,EAAGhkB,CAAO,CAClD,CACA,IAAI4lB,GAA+B5mB,GAAa,IAAI,EAClD6mB,GAAiC7mB,GAAa,CAAC,EACjD,SAAS8mB,GAAkB7pB,EAAO+D,EAAS,CACzC/D,EAAQ8pB,GACR3mB,GAAKymB,GAAgC5pB,CAAK,EAC1CmD,GAAKwmB,GAA8B5lB,CAAO,EAC1C+lB,GAAuB9pB,EAAQ+D,EAAQ,SACzC,CACA,SAASgmB,IAA4B,CACnC5mB,GAAKymB,GAAgCE,EAAoB,EACzD3mB,GAAKwmB,GAA8BA,GAA6B,OAAO,CACzE,CACA,SAASK,IAAmB,CAC1BF,GAAuBF,GAA+B,QACtD3mB,GAAI0mB,EAA4B,EAChC1mB,GAAI2mB,EAA8B,CACpC,CACA,IAAIK,GAA6BlnB,GAAa,IAAI,EAChDmnB,GAAgB,KAClB,SAASC,GAA+BC,EAAS,CAC/C,IAAIpO,EAAUoO,EAAQ,UACtBjnB,GAAKknB,GAAqBA,GAAoB,QAAU,CAAC,EACzDlnB,GAAK8mB,GAA4BG,CAAO,EAC/BF,KAAT,OACYlO,IAAT,MAA6B2N,GAA6B,UAAtC,MAER3N,EAAQ,gBAAjB,QAAmCkO,GAAgBE,EAC3D,CACA,SAASE,GAAsCtqB,EAAO,CACpDmD,GAAKknB,GAAqBA,GAAoB,OAAO,EACrDlnB,GAAK8mB,GAA4BjqB,CAAK,EAC7BkqB,KAAT,OAA2BA,GAAgBlqB,EAC7C,CACA,SAASuqB,GAA6BvqB,EAAO,CACpCA,EAAM,MAAb,IACKmD,GAAKknB,GAAqBA,GAAoB,OAAO,EACtDlnB,GAAK8mB,GAA4BjqB,CAAK,EAC7BkqB,KAAT,OAA2BA,GAAgBlqB,IAC3CwqB,GAA4BxqB,CAAK,CACvC,CACA,SAASwqB,IAA8B,CACrCrnB,GAAKknB,GAAqBA,GAAoB,OAAO,EACrDlnB,GAAK8mB,GAA4BA,GAA2B,OAAO,CACrE,CACA,SAASQ,GAAmBzqB,EAAO,CACjCiD,GAAIgnB,EAA0B,EAC9BC,KAAkBlqB,IAAUkqB,GAAgB,MAC5CjnB,GAAIonB,EAAmB,CACzB,CACA,IAAIA,GAAsBtnB,GAAa,CAAC,EACxC,SAAS2nB,GAAmBC,EAAK,CAC/B,QAAS7qB,EAAO6qB,EAAc7qB,IAAT,MAAiB,CACpC,GAAWA,EAAK,MAAZ,GAAiB,CACnB,IAAI8qB,EAAQ9qB,EAAK,cACjB,GACW8qB,IAAT,OACEA,EAAQA,EAAM,WACPA,IAAT,MACEC,GAA0BD,CAAK,GAC/BE,GAA2BF,CAAK,GAElC,OAAO9qB,CACX,SACSA,EAAK,MAAZ,KACgBA,EAAK,cAAc,cAAlC,YACiBA,EAAK,cAAc,cAAnC,aACgCA,EAAK,cAAc,cAAnD,6BACeA,EAAK,cAAc,cAAlC,aAEF,IAAWA,EAAK,MAAQ,OAApB,EAA0B,OAAOA,UACnBA,EAAK,QAAd,KAAqB,CAC9BA,EAAK,MAAM,OAASA,EACpBA,EAAOA,EAAK,MACZ,QACF,CACA,GAAIA,IAAS6qB,EAAK,MAClB,KAAgB7qB,EAAK,UAAd,MAAyB,CAC9B,GAAaA,EAAK,SAAd,MAAwBA,EAAK,SAAW6qB,EAAK,OAAO,KACxD7qB,EAAOA,EAAK,MACd,CACAA,EAAK,QAAQ,OAASA,EAAK,OAC3BA,EAAOA,EAAK,OACd,CACA,OAAO,IACT,CACA,IAAIyI,GAAc,EAChBwiB,EAA0B,KAC1BC,GAAc,KACdC,GAAqB,KACrBC,GAA+B,GAC/BC,GAA6C,GAC7CC,GAAsC,GACtCC,GAAiB,EACjBC,GAAuB,EACvBrH,GAAgB,KAChBsH,GAAwB,EAC1B,SAASC,IAAwB,CAC/B,MAAM,MAAM/rB,EAAuB,GAAG,CAAC,CACzC,CACA,SAASgsB,GAAmBC,EAAUC,EAAU,CAC9C,GAAaA,IAAT,KAAmB,MAAO,GAC9B,QAAS/rB,EAAI,EAAGA,EAAI+rB,EAAS,QAAU/rB,EAAI8rB,EAAS,OAAQ9rB,IAC1D,GAAI,CAACgY,GAAS8T,EAAS9rB,CAAC,EAAG+rB,EAAS/rB,CAAC,CAAC,EAAG,MAAO,GAClD,MAAO,EACT,CACA,SAASgsB,GACP5P,EACAnW,EACAiW,EACA9K,EACA6a,EACAC,EACA,CACA,OAAAvjB,GAAcujB,EACdf,EAA0BllB,EAC1BA,EAAe,cAAgB,KAC/BA,EAAe,YAAc,KAC7BA,EAAe,MAAQ,EACvBnD,EAAqB,EACVsZ,IAAT,MAA6BA,EAAQ,gBAAjB,KAChB+P,GACAC,GACNZ,GAAsC,GACtCU,EAAkBhQ,EAAU9K,EAAO6a,CAAS,EAC5CT,GAAsC,GACtCD,KACGW,EAAkBG,GACjBpmB,EACAiW,EACA9K,EACA6a,CACF,GACFK,GAAqBlQ,CAAO,EACrB8P,CACT,CACA,SAASI,GAAqBlQ,EAAS,CACrCtZ,EAAqB,EAAIypB,GACzB,IAAIC,EAAgCpB,KAAT,MAAiCA,GAAY,OAArB,KAMnD,GALAziB,GAAc,EACd0iB,GAAqBD,GAAcD,EAA0B,KAC7DG,GAA+B,GAC/BI,GAAuB,EACvBrH,GAAgB,KACZmI,EAAsB,MAAM,MAAM3sB,EAAuB,GAAG,CAAC,EACxDuc,IAAT,MACEqQ,KACErQ,EAAUA,EAAQ,aACXA,IAAT,MACEgF,GAAsBhF,CAAO,IAC5BqQ,GAAmB,IAC1B,CACA,SAASJ,GAAqBpmB,EAAgBiW,EAAW9K,EAAO6a,EAAW,CACzEd,EAA0BllB,EAC1B,IAAIymB,EAAoB,EACxB,EAAG,CAID,GAHAnB,KAA+ClH,GAAgB,MAC/DqH,GAAuB,EACvBH,GAA6C,GACzC,IAAMmB,EAAmB,MAAM,MAAM7sB,EAAuB,GAAG,CAAC,EAGpE,GAFA6sB,GAAqB,EACrBrB,GAAqBD,GAAc,KACvBnlB,EAAe,aAAvB,KAAoC,CACtC,IAAIuJ,EAAWvJ,EAAe,YAC9BuJ,EAAS,WAAa,KACtBA,EAAS,OAAS,KAClBA,EAAS,OAAS,KACVA,EAAS,WAAjB,OAA+BA,EAAS,UAAU,MAAQ,EAC5D,CACA1M,EAAqB,EAAI6pB,GACzBnd,EAAW0M,EAAU9K,EAAO6a,CAAS,CACvC,OAASV,IACT,OAAO/b,CACT,CACA,SAASod,IAA+B,CACtC,IAAIC,EAAa/pB,EAAqB,EACpCgqB,EAAgBD,EAAW,SAAS,EAAE,CAAC,EACzC,OAAAC,EACiB,OAAOA,EAAc,MAApC,WACIC,GAAYD,CAAa,EACzBA,EACND,EAAaA,EAAW,SAAS,EAAE,CAAC,GAC1BzB,KAAT,KAAuBA,GAAY,cAAgB,QAAUyB,IAC3D1B,EAAwB,OAAS,MAC7B2B,CACT,CACA,SAASE,IAAuB,CAC9B,IAAIC,EAAwBxB,KAAN,EACtB,OAAAA,GAAiB,EACVwB,CACT,CACA,SAASC,GAAa9Q,EAASnW,EAAgB8B,EAAO,CACpD9B,EAAe,YAAcmW,EAAQ,YACrCnW,EAAe,OAAS,MACxBmW,EAAQ,OAAS,CAACrU,CACpB,CACA,SAASolB,GAAmBlnB,EAAgB,CAC1C,GAAIqlB,GAA8B,CAChC,IACErlB,EAAiBA,EAAe,cACvBA,IAAT,MAEA,CACA,IAAI+U,EAAQ/U,EAAe,MAClB+U,IAAT,OAAmBA,EAAM,QAAU,MACnC/U,EAAiBA,EAAe,IAClC,CACAqlB,GAA+B,EACjC,CACA3iB,GAAc,EACd0iB,GAAqBD,GAAcD,EAA0B,KAC7DI,GAA6C,GAC7CG,GAAuBD,GAAiB,EACxCpH,GAAgB,IAClB,CACA,SAAS+I,IAA0B,CACjC,IAAIC,EAAO,CACT,cAAe,KACf,UAAW,KACX,UAAW,KACX,MAAO,KACP,KAAM,IACR,EACA,OAAShC,KAAT,KACKF,EAAwB,cAAgBE,GAAqBgC,EAC7DhC,GAAqBA,GAAmB,KAAOgC,EAC7ChC,EACT,CACA,SAASiC,IAA2B,CAClC,GAAalC,KAAT,KAAsB,CACxB,IAAImC,EAAkBpC,EAAwB,UAC9CoC,EACWA,IAAT,KAA2BA,EAAgB,cAAgB,IAC/D,MAAOA,EAAkBnC,GAAY,KACrC,IAAIoC,EACOnC,KAAT,KACIF,EAAwB,cACxBE,GAAmB,KACzB,GAAamC,IAAT,KACDnC,GAAqBmC,EACnBpC,GAAcmC,MACd,CACH,GAAaA,IAAT,KACF,MAAapC,EAAwB,YAAjC,KACI,MAAMtrB,EAAuB,GAAG,CAAC,EACnC,MAAMA,EAAuB,GAAG,CAAC,EAEzCurB,GAAcmC,EACdA,EAAkB,CAChB,cAAenC,GAAY,cAC3B,UAAWA,GAAY,UACvB,UAAWA,GAAY,UACvB,MAAOA,GAAY,MACnB,KAAM,IACR,EACSC,KAAT,KACKF,EAAwB,cAAgBE,GACvCkC,EACDlC,GAAqBA,GAAmB,KAAOkC,CACtD,CACA,OAAOlC,EACT,CACA,SAASoC,IAAqC,CAC5C,MAAO,CAAE,WAAY,KAAM,OAAQ,KAAM,OAAQ,KAAM,UAAW,IAAK,CACzE,CACA,SAASV,GAAYpK,EAAU,CAC7B,IAAIzf,EAAQwoB,GACZ,OAAAA,IAAwB,EACfrH,KAAT,OAA2BA,GAAgB,CAAC,GAC5C1B,EAAWyB,GAAkBC,GAAe1B,EAAUzf,CAAK,EAC3DA,EAAQioB,GAEIE,KAAT,KACGnoB,EAAM,cACNmoB,GAAmB,QAHzB,OAIInoB,EAAQA,EAAM,UACfJ,EAAqB,EACXI,IAAT,MAA2BA,EAAM,gBAAf,KACdipB,GACAC,IACDzJ,CACT,CACA,SAAS+K,GAAIC,EAAQ,CACnB,GAAaA,IAAT,MAAgC,OAAOA,GAApB,SAA4B,CACjD,GAAmB,OAAOA,EAAO,MAA7B,WAAmC,OAAOZ,GAAYY,CAAM,EAChE,GAAIA,EAAO,WAAa9rB,GAAoB,OAAO0f,GAAYoM,CAAM,CACvE,CACA,MAAM,MAAM9tB,EAAuB,IAAK,OAAO8tB,CAAM,CAAC,CAAC,CACzD,CACA,SAASC,GAAaC,EAAM,CAC1B,IAAIC,EAAY,KACd3F,EAAcgD,EAAwB,YAExC,GADShD,IAAT,OAAyB2F,EAAY3F,EAAY,WACrC2F,GAAR,KAAmB,CACrB,IAAI1R,EAAU+O,EAAwB,UAC7B/O,IAAT,OACIA,EAAUA,EAAQ,YACXA,IAAT,OACIA,EAAUA,EAAQ,UACZA,GAAR,OACG0R,EAAY,CACX,KAAM1R,EAAQ,KAAK,IAAI,SAAU2R,EAAO,CACtC,OAAOA,EAAM,MAAM,CACrB,CAAC,EACD,MAAO,CACT,IACR,CAOA,GANQD,GAAR,OAAsBA,EAAY,CAAE,KAAM,CAAC,EAAG,MAAO,CAAE,GAC9C3F,IAAT,OACIA,EAAcsF,GAAmC,EAClDtC,EAAwB,YAAchD,GACzCA,EAAY,UAAY2F,EACxB3F,EAAc2F,EAAU,KAAKA,EAAU,KAAK,EAC7B3F,IAAX,OACF,IACEA,EAAc2F,EAAU,KAAKA,EAAU,KAAK,EAAI,MAAMD,CAAI,EAAGzR,EAAU,EACvEA,EAAUyR,EACVzR,IAEA+L,EAAY/L,CAAO,EAAIha,GAC3B,OAAA0rB,EAAU,QACH3F,CACT,CACA,SAAS6F,GAAkBhD,EAAOiD,EAAQ,CACxC,OAAsB,OAAOA,GAAtB,WAA+BA,EAAOjD,CAAK,EAAIiD,CACxD,CACA,SAASC,GAAcC,EAAS,CAC9B,IAAId,EAAOC,GAAyB,EACpC,OAAOc,GAAkBf,EAAMjC,GAAa+C,CAAO,CACrD,CACA,SAASC,GAAkBf,EAAMjR,EAAS+R,EAAS,CACjD,IAAInT,EAAQqS,EAAK,MACjB,GAAarS,IAAT,KAAgB,MAAM,MAAMnb,EAAuB,GAAG,CAAC,EAC3Dmb,EAAM,oBAAsBmT,EAC5B,IAAIE,EAAYhB,EAAK,UACnBjE,EAAepO,EAAM,QACvB,GAAaoO,IAAT,KAAuB,CACzB,GAAaiF,IAAT,KAAoB,CACtB,IAAIC,EAAYD,EAAU,KAC1BA,EAAU,KAAOjF,EAAa,KAC9BA,EAAa,KAAOkF,CACtB,CACAlS,EAAQ,UAAYiS,EAAYjF,EAChCpO,EAAM,QAAU,IAClB,CAEA,GADAoO,EAAeiE,EAAK,UACPgB,IAAT,KAAoBhB,EAAK,cAAgBjE,MACxC,CACHhN,EAAUiS,EAAU,KACpB,IAAIE,EAAqBD,EAAY,KACnCE,EAAmB,KACnBvkB,EAASmS,EACTqS,EAAqC,GACvC,EAAG,CACD,IAAIrlB,EAAaa,EAAO,KAAO,WAC/B,GACEb,IAAea,EAAO,MACjBwf,GAAgCrgB,KAAgBA,GAChDT,GAAcS,KAAgBA,EACnC,CACA,IAAIslB,EAAazkB,EAAO,WACxB,GAAUykB,IAAN,EACOF,IAAT,OACGA,EAAmBA,EAAiB,KACnC,CACE,KAAM,EACN,WAAY,EACZ,QAAS,KACT,OAAQvkB,EAAO,OACf,cAAeA,EAAO,cACtB,WAAYA,EAAO,WACnB,KAAM,IACR,GACFb,IAAemZ,KACZkM,EAAqC,aAClC9lB,GAAc+lB,KAAgBA,EAAY,CAClDzkB,EAASA,EAAO,KAChBykB,IAAenM,KACZkM,EAAqC,IACxC,QACF,MACGrlB,EAAa,CACZ,KAAM,EACN,WAAYa,EAAO,WACnB,QAAS,KACT,OAAQA,EAAO,OACf,cAAeA,EAAO,cACtB,WAAYA,EAAO,WACnB,KAAM,IACR,EACWukB,IAAT,MACMD,EAAoBC,EAAmBplB,EACxCklB,EAAYlF,GACZoF,EAAmBA,EAAiB,KAAOplB,EAC/C+hB,EAAwB,OAASuD,EACjChF,IAAkCgF,EACvCtlB,EAAaa,EAAO,OACpBuhB,IACE2C,EAAQ/E,EAAchgB,CAAU,EAClCggB,EAAenf,EAAO,cAClBA,EAAO,WACPkkB,EAAQ/E,EAAchgB,CAAU,CACtC,MACGslB,EAAa,CACZ,KAAMtlB,EACN,WAAYa,EAAO,WACnB,QAASA,EAAO,QAChB,OAAQA,EAAO,OACf,cAAeA,EAAO,cACtB,WAAYA,EAAO,WACnB,KAAM,IACR,EACWukB,IAAT,MACMD,EAAoBC,EAAmBE,EACxCJ,EAAYlF,GACZoF,EAAmBA,EAAiB,KAAOE,EAC/CvD,EAAwB,OAAS/hB,EACjCsgB,IAAkCtgB,EACvCa,EAASA,EAAO,IAClB,OAAkBA,IAAT,MAAmBA,IAAWmS,GAIvC,GAHSoS,IAAT,KACKF,EAAYlF,EACZoF,EAAiB,KAAOD,EAE3B,CAACvW,GAASoR,EAAciE,EAAK,aAAa,IACxCZ,GAAmB,GACrBgC,IACIN,EAAU3L,GAA0C2L,IAAT,OAE/C,MAAMA,EACRd,EAAK,cAAgBjE,EACrBiE,EAAK,UAAYiB,EACjBjB,EAAK,UAAYmB,EACjBxT,EAAM,kBAAoBoO,CAC5B,CACA,OAASiF,IAAT,OAAuBrT,EAAM,MAAQ,GAC9B,CAACqS,EAAK,cAAerS,EAAM,QAAQ,CAC5C,CACA,SAAS2T,GAAgBR,EAAS,CAChC,IAAId,EAAOC,GAAyB,EAClCtS,EAAQqS,EAAK,MACf,GAAarS,IAAT,KAAgB,MAAM,MAAMnb,EAAuB,GAAG,CAAC,EAC3Dmb,EAAM,oBAAsBmT,EAC5B,IAAIS,EAAW5T,EAAM,SACnB6T,EAAwB7T,EAAM,QAC9BuO,EAAW8D,EAAK,cAClB,GAAawB,IAAT,KAAgC,CAClC7T,EAAM,QAAU,KAChB,IAAI/Q,EAAU4kB,EAAwBA,EAAsB,KAC5D,GAAItF,EAAW4E,EAAQ5E,EAAUtf,EAAO,MAAM,EAAKA,EAASA,EAAO,WAC5DA,IAAW4kB,GAClB7W,GAASuR,EAAU8D,EAAK,aAAa,IAAMZ,GAAmB,IAC9DY,EAAK,cAAgB9D,EACZ8D,EAAK,YAAd,OAA4BA,EAAK,UAAY9D,GAC7CvO,EAAM,kBAAoBuO,CAC5B,CACA,MAAO,CAACA,EAAUqF,CAAQ,CAC5B,CACA,SAASE,GAAwBC,EAAWC,EAAaC,EAAmB,CAC1E,IAAI7uB,EAAQ+qB,EACVkC,EAAOC,GAAyB,EAChC4B,EAAuBjgB,GACzB,GAAIigB,EAAsB,CACxB,GAAeD,IAAX,OAA8B,MAAM,MAAMpvB,EAAuB,GAAG,CAAC,EACzEovB,EAAoBA,EAAkB,CACxC,MAAOA,EAAoBD,EAAY,EACvC,IAAIG,EAAkB,CAACnX,IACpBoT,IAAeiC,GAAM,cACtB4B,CACF,EAOA,GANAE,IACI9B,EAAK,cAAgB4B,EAAqBxC,GAAmB,IACjEY,EAAOA,EAAK,MACZ+B,GAAaC,GAAiB,KAAK,KAAMjvB,EAAOitB,EAAM0B,CAAS,EAAG,CAChEA,CACF,CAAC,EAEC1B,EAAK,cAAgB2B,GACrBG,GACU9D,KAAT,MAA+BA,GAAmB,cAAc,IAAM,EACvE,CAcA,GAbAjrB,EAAM,OAAS,KACfkvB,GACE,EACA,CAAE,QAAS,MAAO,EAClBC,GAAoB,KAClB,KACAnvB,EACAitB,EACA4B,EACAD,CACF,EACA,IACF,EACavL,KAAT,KAA6B,MAAM,MAAM5jB,EAAuB,GAAG,CAAC,EACxEqvB,IACSvmB,GAAc,OAArB,GACA6mB,GAA0BpvB,EAAO4uB,EAAaC,CAAiB,CACnE,CACA,OAAOA,CACT,CACA,SAASO,GAA0BpvB,EAAO4uB,EAAaS,EAAkB,CACvErvB,EAAM,OAAS,MACfA,EAAQ,CAAE,YAAa4uB,EAAa,MAAOS,CAAiB,EAC5DT,EAAc7D,EAAwB,YAC7B6D,IAAT,MACMA,EAAcvB,GAAmC,EAClDtC,EAAwB,YAAc6D,EACtCA,EAAY,OAAS,CAAC5uB,CAAK,IAC1BqvB,EAAmBT,EAAY,OACxBS,IAAT,KACKT,EAAY,OAAS,CAAC5uB,CAAK,EAC5BqvB,EAAiB,KAAKrvB,CAAK,EACrC,CACA,SAASmvB,GAAoBnvB,EAAO+L,EAAMujB,EAAcV,EAAa,CACnE7iB,EAAK,MAAQujB,EACbvjB,EAAK,YAAc6iB,EACnBW,GAAuBxjB,CAAI,GAAKyjB,GAAmBxvB,CAAK,CAC1D,CACA,SAASivB,GAAiBjvB,EAAO+L,EAAM4iB,EAAW,CAChD,OAAOA,EAAU,UAAY,CAC3BY,GAAuBxjB,CAAI,GAAKyjB,GAAmBxvB,CAAK,CAC1D,CAAC,CACH,CACA,SAASuvB,GAAuBxjB,EAAM,CACpC,IAAI0jB,EAAoB1jB,EAAK,YAC7BA,EAAOA,EAAK,MACZ,GAAI,CACF,IAAIoU,EAAYsP,EAAkB,EAClC,MAAO,CAAC7X,GAAS7L,EAAMoU,CAAS,CAClC,OAAS7F,EAAO,CACd,MAAO,EACT,CACF,CACA,SAASkV,GAAmBxvB,EAAO,CACjC,IAAI8H,EAAOoT,GAA+Blb,EAAO,CAAC,EACzC8H,IAAT,MAAiB4nB,GAAsB5nB,EAAM9H,EAAO,CAAC,CACvD,CACA,SAAS2vB,GAAeC,EAAc,CACpC,IAAI3C,EAAOD,GAAwB,EACnC,GAAmB,OAAO4C,GAAtB,WAAoC,CACtC,IAAIC,EAA0BD,EAE9B,GADAA,EAAeC,EAAwB,EACnCzE,GAAqC,CACvCpkB,GAA2B,EAAE,EAC7B,GAAI,CACF6oB,EAAwB,CAC1B,QAAE,CACA7oB,GAA2B,EAAE,CAC/B,CACF,CACF,CACA,OAAAimB,EAAK,cAAgBA,EAAK,UAAY2C,EACtC3C,EAAK,MAAQ,CACX,QAAS,KACT,MAAO,EACP,SAAU,KACV,oBAAqBW,GACrB,kBAAmBgC,CACrB,EACO3C,CACT,CACA,SAAS6C,GAAqB7C,EAAMjR,EAAS+T,EAAahC,EAAS,CACjE,OAAAd,EAAK,UAAY8C,EACV/B,GACLf,EACAjC,GACe,OAAO+C,GAAtB,WAAgCA,EAAUH,EAC5C,CACF,CACA,SAASoC,GACPhwB,EACAiwB,EACAC,EACAC,EACAC,EACA,CACA,GAAIC,GAAoBrwB,CAAK,EAAG,MAAM,MAAMP,EAAuB,GAAG,CAAC,EAEvE,GADAO,EAAQiwB,EAAY,OACPjwB,IAAT,KAAgB,CAClB,IAAIswB,EAAa,CACf,QAASF,EACT,OAAQpwB,EACR,KAAM,KACN,aAAc,GACd,OAAQ,UACR,MAAO,KACP,OAAQ,KACR,UAAW,CAAC,EACZ,KAAM,SAAU0hB,EAAU,CACxB4O,EAAW,UAAU,KAAK5O,CAAQ,CACpC,CACF,EACShf,EAAqB,IAA9B,KACIwtB,EAAgB,EAAE,EACjBI,EAAW,aAAe,GAC/BH,EAASG,CAAU,EACnBJ,EAAkBD,EAAY,QACrBC,IAAT,MACMI,EAAW,KAAOL,EAAY,QAAUK,EAC1CC,GAAqBN,EAAaK,CAAU,IAC1CA,EAAW,KAAOJ,EAAgB,KACnCD,EAAY,QAAUC,EAAgB,KAAOI,EACpD,CACF,CACA,SAASC,GAAqBN,EAAanwB,EAAM,CAC/C,IAAI+tB,EAAS/tB,EAAK,OAChBswB,EAAUtwB,EAAK,QACf0wB,EAAYP,EAAY,MAC1B,GAAInwB,EAAK,aAAc,CACrB,IAAI2wB,EAAiB/tB,EAAqB,EACxCguB,EAAoB,CAAC,EACvBhuB,EAAqB,EAAIguB,EACzB,GAAI,CACF,IAAI1N,EAAc6K,EAAO2C,EAAWJ,CAAO,EACzCO,EAA0BjuB,EAAqB,EACxCiuB,IAAT,MACEA,EAAwBD,EAAmB1N,CAAW,EACxD4N,GAAwBX,EAAanwB,EAAMkjB,CAAW,CACxD,OAAS1I,EAAO,CACduW,GAAcZ,EAAanwB,EAAMwa,CAAK,CACxC,QAAE,CACSmW,IAAT,MACWC,EAAkB,QAA3B,OACCD,EAAe,MAAQC,EAAkB,OACzChuB,EAAqB,EAAI+tB,CAC9B,CACF,KACE,IAAI,CACDA,EAAiB5C,EAAO2C,EAAWJ,CAAO,EACzCQ,GAAwBX,EAAanwB,EAAM2wB,CAAc,CAC7D,OAASK,EAAU,CACjBD,GAAcZ,EAAanwB,EAAMgxB,CAAQ,CAC3C,CACJ,CACA,SAASF,GAAwBX,EAAanwB,EAAMkjB,EAAa,CACtDA,IAAT,MACa,OAAOA,GAApB,UACe,OAAOA,EAAY,MAAlC,WACIA,EAAY,KACV,SAAU+N,EAAW,CACnBC,GAAgBf,EAAanwB,EAAMixB,CAAS,CAC9C,EACA,SAAUzW,EAAO,CACf,OAAOuW,GAAcZ,EAAanwB,EAAMwa,CAAK,CAC/C,CACF,EACA0W,GAAgBf,EAAanwB,EAAMkjB,CAAW,CACpD,CACA,SAASgO,GAAgBf,EAAaK,EAAYS,EAAW,CAC3DT,EAAW,OAAS,YACpBA,EAAW,MAAQS,EACnBE,GAAsBX,CAAU,EAChCL,EAAY,MAAQc,EACpBT,EAAaL,EAAY,QAChBK,IAAT,OACIS,EAAYT,EAAW,KACzBS,IAAcT,EACTL,EAAY,QAAU,MACrBc,EAAYA,EAAU,KACvBT,EAAW,KAAOS,EACnBR,GAAqBN,EAAac,CAAS,GACnD,CACA,SAASF,GAAcZ,EAAaK,EAAYhW,EAAO,CACrD,IAAI4W,EAAOjB,EAAY,QAEvB,GADAA,EAAY,QAAU,KACTiB,IAAT,KAAe,CACjBA,EAAOA,EAAK,KACZ,GACGZ,EAAW,OAAS,WAClBA,EAAW,OAAShW,EACrB2W,GAAsBX,CAAU,EAC/BA,EAAaA,EAAW,WACtBA,IAAeY,EACxB,CACAjB,EAAY,OAAS,IACvB,CACA,SAASgB,GAAsBX,EAAY,CACzCA,EAAaA,EAAW,UACxB,QAAS1wB,EAAI,EAAGA,EAAI0wB,EAAW,OAAQ1wB,OAAS0wB,EAAW1wB,CAAC,GAAG,CACjE,CACA,SAASuxB,GAAmBC,EAAUjI,EAAU,CAC9C,OAAOA,CACT,CACA,SAASkI,GAAiBxD,EAAQyD,EAAkB,CAClD,GAAIziB,GAAa,CACf,IAAI0iB,EAAelO,GAAmB,UACtC,GAAakO,IAAT,KAAuB,CACzB9wB,EAAG,CACD,IAAIuD,EAA2B+mB,EAC/B,GAAIlc,GAAa,CACf,GAAI0P,GAAwB,CAC1B7d,EAAG,CAED,QADI8wB,EAAoCjT,GAElCkT,EAAoBhT,GAClB+S,EAAkC,WAAxC,GAEA,CACA,GAAI,CAACC,EAAmB,CACtBD,EAAoC,KACpC,MAAM9wB,CACR,CAIA,GAHA8wB,EAAoC/R,GAClC+R,EAAkC,WACpC,EACaA,IAAT,KAA4C,CAC9CA,EAAoC,KACpC,MAAM9wB,CACR,CACF,CACA+wB,EAAoBD,EAAkC,KACtDA,EACWC,IAAT,MAAsCA,IAAR,IAC1BD,EACA,IACR,CACA,GAAIA,EAAmC,CACrCjT,GAAyBkB,GACvB+R,EAAkC,WACpC,EACAxtB,EACWwtB,EAAkC,OAA3C,KACF,MAAM/wB,CACR,CACF,CACAke,GAAyB3a,CAAwB,CACnD,CACAA,EAA2B,EAC7B,CACAA,IAA6BstB,EAAmBC,EAAa,CAAC,EAChE,CACF,CACA,OAAAA,EAAevE,GAAwB,EACvCuE,EAAa,cAAgBA,EAAa,UAAYD,EACtDttB,EAA2B,CACzB,QAAS,KACT,MAAO,EACP,SAAU,KACV,oBAAqBmtB,GACrB,kBAAmBG,CACrB,EACAC,EAAa,MAAQvtB,EACrButB,EAAeG,GAAiB,KAC9B,KACA3G,EACA/mB,CACF,EACAA,EAAyB,SAAWutB,EACpCvtB,EAA2B2rB,GAAe,EAAE,EAC5C8B,EAAoBE,GAA2B,KAC7C,KACA5G,EACA,GACA/mB,EAAyB,KAC3B,EACAA,EAA2BgpB,GAAwB,EACnDwE,EAAoC,CAClC,MAAOF,EACP,SAAU,KACV,OAAQzD,EACR,QAAS,IACX,EACA7pB,EAAyB,MAAQwtB,EACjCD,EAAevB,GAAoB,KACjC,KACAjF,EACAyG,EACAC,EACAF,CACF,EACAC,EAAkC,SAAWD,EAC7CvtB,EAAyB,cAAgB6pB,EAClC,CAACyD,EAAkBC,EAAc,EAAE,CAC5C,CACA,SAASK,GAAkB/D,EAAQ,CACjC,IAAIgE,EAAY3E,GAAyB,EACzC,OAAO4E,GAAsBD,EAAW7G,GAAa6C,CAAM,CAC7D,CACA,SAASiE,GAAsBD,EAAWE,EAAkBlE,EAAQ,CAOlE,GANAkE,EAAmB/D,GACjB6D,EACAE,EACAZ,EACF,EAAE,CAAC,EACHU,EAAY/D,GAAcF,EAAiB,EAAE,CAAC,EAE/B,OAAOmE,GAApB,UACSA,IAAT,MACe,OAAOA,EAAiB,MAAvC,WAEA,GAAI,CACF,IAAInH,EAAQ+B,GAAYoF,CAAgB,CAC1C,OAASvvB,EAAG,CACV,MAAIA,IAAMmhB,GAAyBE,GAC7BrhB,CACR,MACGooB,EAAQmH,EACbA,EAAmB7E,GAAyB,EAC5C,IAAI+C,EAAc8B,EAAiB,MACjCvD,EAAWyB,EAAY,SACzB,OAAApC,IAAWkE,EAAiB,gBACxBhH,EAAwB,OAAS,KACnCmE,GACE,EACA,CAAE,QAAS,MAAO,EAClB8C,GAAwB,KAAK,KAAM/B,EAAapC,CAAM,EACtD,IACF,GACK,CAACjD,EAAO4D,EAAUqD,CAAS,CACpC,CACA,SAASG,GAAwB/B,EAAapC,EAAQ,CACpDoC,EAAY,OAASpC,CACvB,CACA,SAASoE,GAAoBpE,EAAQ,CACnC,IAAIgE,EAAY3E,GAAyB,EACvC6E,EAAmB/G,GACrB,GAAa+G,IAAT,KACF,OAAOD,GAAsBD,EAAWE,EAAkBlE,CAAM,EAClEX,GAAyB,EACzB2E,EAAYA,EAAU,cACtBE,EAAmB7E,GAAyB,EAC5C,IAAIsB,EAAWuD,EAAiB,MAAM,SACtC,OAAAA,EAAiB,cAAgBlE,EAC1B,CAACgE,EAAWrD,EAAU,EAAE,CACjC,CACA,SAASU,GAAiBluB,EAAK+K,EAAMmmB,EAAQC,EAAM,CACjD,OAAAnxB,EAAM,CAAE,IAAKA,EAAK,OAAQkxB,EAAQ,KAAMC,EAAM,KAAMpmB,EAAM,KAAM,IAAK,EACrEA,EAAOgf,EAAwB,YACtBhf,IAAT,OACIA,EAAOshB,GAAmC,EAC3CtC,EAAwB,YAAchf,GACzCmmB,EAASnmB,EAAK,WACLmmB,IAAT,KACKnmB,EAAK,WAAa/K,EAAI,KAAOA,GAC5BmxB,EAAOD,EAAO,KACfA,EAAO,KAAOlxB,EACdA,EAAI,KAAOmxB,EACXpmB,EAAK,WAAa/K,GAChBA,CACT,CACA,SAASoxB,IAAY,CACnB,OAAOlF,GAAyB,EAAE,aACpC,CACA,SAASmF,GAAgBC,EAAYC,EAAWL,EAAQC,EAAM,CAC5D,IAAIlF,EAAOD,GAAwB,EACnCjC,EAAwB,OAASuH,EACjCrF,EAAK,cAAgBiC,GACnB,EAAIqD,EACJ,CAAE,QAAS,MAAO,EAClBL,EACWC,IAAX,OAAkB,KAAOA,CAC3B,CACF,CACA,SAASK,GAAiBF,EAAYC,EAAWL,EAAQC,EAAM,CAC7D,IAAIlF,EAAOC,GAAyB,EACpCiF,EAAkBA,IAAX,OAAkB,KAAOA,EAChC,IAAIpmB,EAAOkhB,EAAK,cAAc,KACrBjC,KAAT,MACSmH,IAAT,MACA1G,GAAmB0G,EAAMnH,GAAY,cAAc,IAAI,EAClDiC,EAAK,cAAgBiC,GAAiBqD,EAAWxmB,EAAMmmB,EAAQC,CAAI,GAClEpH,EAAwB,OAASuH,EAClCrF,EAAK,cAAgBiC,GACpB,EAAIqD,EACJxmB,EACAmmB,EACAC,CACF,EACN,CACA,SAASM,GAAYP,EAAQC,EAAM,CACjCE,GAAgB,QAAS,EAAGH,EAAQC,CAAI,CAC1C,CACA,SAASnD,GAAakD,EAAQC,EAAM,CAClCK,GAAiB,KAAM,EAAGN,EAAQC,CAAI,CACxC,CACA,SAASO,GAAmBtC,EAAS,CACnCrF,EAAwB,OAAS,EACjC,IAAI4H,EAAuB5H,EAAwB,YACnD,GAAa4H,IAAT,KACDA,EAAuBtF,GAAmC,EACxDtC,EAAwB,YAAc4H,EACtCA,EAAqB,OAAS,CAACvC,CAAO,MACtC,CACH,IAAIwC,EAASD,EAAqB,OACzBC,IAAT,KACKD,EAAqB,OAAS,CAACvC,CAAO,EACvCwC,EAAO,KAAKxC,CAAO,CACzB,CACF,CACA,SAASyC,GAAYrJ,EAAU,CAC7B,IAAIsJ,EAAM5F,GAAyB,EAAE,cACrC,OAAAwF,GAAmB,CAAE,IAAKI,EAAK,SAAUtJ,CAAS,CAAC,EAC5C,UAAY,CACjB,IAAWxB,GAAmB,KAA1B,EAA8B,MAAM,MAAMvoB,EAAuB,GAAG,CAAC,EACzE,OAAOqzB,EAAI,KAAK,MAAM,OAAQ,SAAS,CACzC,CACF,CACA,SAASC,GAAsBb,EAAQC,EAAM,CAC3C,OAAOK,GAAiB,EAAG,EAAGN,EAAQC,CAAI,CAC5C,CACA,SAASa,GAAmBd,EAAQC,EAAM,CACxC,OAAOK,GAAiB,EAAG,EAAGN,EAAQC,CAAI,CAC5C,CACA,SAASc,GAAuBf,EAAQY,EAAK,CAC3C,GAAmB,OAAOA,GAAtB,WAA2B,CAC7BZ,EAASA,EAAO,EAChB,IAAIgB,EAAaJ,EAAIZ,CAAM,EAC3B,OAAO,UAAY,CACF,OAAOgB,GAAtB,WAAmCA,EAAW,EAAIJ,EAAI,IAAI,CAC5D,CACF,CACA,GAAaA,GAAT,KACF,OACGZ,EAASA,EAAO,EAChBY,EAAI,QAAUZ,EACf,UAAY,CACVY,EAAI,QAAU,IAChB,CAEN,CACA,SAASK,GAAuBL,EAAKZ,EAAQC,EAAM,CACjDA,EAAgBA,GAAT,KAAmCA,EAAK,OAAO,CAACW,CAAG,CAAC,EAAI,KAC/DN,GAAiB,EAAG,EAAGS,GAAuB,KAAK,KAAMf,EAAQY,CAAG,EAAGX,CAAI,CAC7E,CACA,SAASiB,IAAkB,CAAC,CAC5B,SAASC,GAAe7J,EAAU2I,EAAM,CACtC,IAAIlF,EAAOC,GAAyB,EACpCiF,EAAkBA,IAAX,OAAkB,KAAOA,EAChC,IAAI3B,EAAYvD,EAAK,cACrB,OAAakF,IAAT,MAAiB1G,GAAmB0G,EAAM3B,EAAU,CAAC,CAAC,EACjDA,EAAU,CAAC,GACpBvD,EAAK,cAAgB,CAACzD,EAAU2I,CAAI,EAC7B3I,EACT,CACA,SAAS8J,GAAWC,EAAYpB,EAAM,CACpC,IAAIlF,EAAOC,GAAyB,EACpCiF,EAAkBA,IAAX,OAAkB,KAAOA,EAChC,IAAI3B,EAAYvD,EAAK,cACrB,GAAakF,IAAT,MAAiB1G,GAAmB0G,EAAM3B,EAAU,CAAC,CAAC,EACxD,OAAOA,EAAU,CAAC,EAEpB,GADAA,EAAY+C,EAAW,EACnBnI,GAAqC,CACvCpkB,GAA2B,EAAE,EAC7B,GAAI,CACFusB,EAAW,CACb,QAAE,CACAvsB,GAA2B,EAAE,CAC/B,CACF,CACA,OAAAimB,EAAK,cAAgB,CAACuD,EAAW2B,CAAI,EAC9B3B,CACT,CACA,SAASgD,GAAuBvG,EAAM7pB,EAAOqwB,EAAc,CACzD,OACaA,IAAX,SACQlrB,GAAc,cAArB,IACQ8gB,GAAgC,UAAvC,EAEM4D,EAAK,cAAgB7pB,GAC/B6pB,EAAK,cAAgBwG,EACrBxG,EAAOyG,GAAoB,EAC3B3I,EAAwB,OAASkC,EACjC3D,IAAkC2D,EAC3BwG,EACT,CACA,SAASE,GAAwB1G,EAAM2G,EAAWxwB,EAAOqwB,EAAc,CACrE,OAAI7b,GAASxU,EAAOwwB,CAAS,EAAUxwB,EAC1BumB,GAA6B,UAAtC,MAECsD,EAAOuG,GAAuBvG,EAAM7pB,EAAOqwB,CAAY,EACxD7b,GAASqV,EAAM2G,CAAS,IAAMvH,GAAmB,IACjDY,IAGK1kB,GAAc,MAArB,IACQA,GAAc,cAArB,IACQ8gB,GAAgC,UAAvC,GAEMgD,GAAmB,GAAMY,EAAK,cAAgB7pB,IACxD6pB,EAAOyG,GAAoB,EAC3B3I,EAAwB,OAASkC,EACjC3D,IAAkC2D,EAC3B2G,EACT,CACA,SAASC,GAAgB7zB,EAAO4a,EAAOkZ,EAAcC,EAAevK,EAAU,CAC5E,IAAI3e,EAAmBlI,GAAwB,EAC/CA,GAAwB,EAChBkI,IAAN,GAA0B,EAAIA,EAAmBA,EAAmB,EACtE,IAAI4lB,EAAiB/tB,EAAqB,EACxCguB,EAAoB,CAAC,EACvBhuB,EAAqB,EAAIguB,EACzBiB,GAA2B3xB,EAAO,GAAI4a,EAAOkZ,CAAY,EACzD,GAAI,CACF,IAAI9Q,EAAcwG,EAAS,EACzBmH,EAA0BjuB,EAAqB,EAGjD,GAFSiuB,IAAT,MACEA,EAAwBD,EAAmB1N,CAAW,EAE7CA,IAAT,MACa,OAAOA,GAApB,UACe,OAAOA,EAAY,MAAlC,WACA,CACA,IAAIgR,EAA2BpR,GAC7BI,EACA+Q,CACF,EACAE,GACEj0B,EACA4a,EACAoZ,EACAE,GAAkBl0B,CAAK,CACzB,CACF,MACEi0B,GACEj0B,EACA4a,EACAmZ,EACAG,GAAkBl0B,CAAK,CACzB,CACJ,OAASsa,EAAO,CACd2Z,GACEj0B,EACA4a,EACA,CAAE,KAAM,UAAY,CAAC,EAAG,OAAQ,WAAY,OAAQN,CAAM,EAC1D4Z,GAAkB,CACpB,CACF,QAAE,CACCvxB,GAAwB,EAAIkI,EAClB4lB,IAAT,MACWC,EAAkB,QAA3B,OACCD,EAAe,MAAQC,EAAkB,OAC3ChuB,EAAqB,EAAI+tB,CAC9B,CACF,CACA,SAAS0D,IAAO,CAAC,CACjB,SAASC,GAAoBC,EAAWP,EAAcjG,EAAQyG,EAAU,CACtE,GAAUD,EAAU,MAAhB,EAAqB,MAAM,MAAM50B,EAAuB,GAAG,CAAC,EAChE,IAAImb,EAAQ2Z,GAA8BF,CAAS,EAAE,MACrDR,GACEQ,EACAzZ,EACAkZ,EACAlxB,GACSirB,IAAT,KACIsG,GACA,UAAY,CACV,OAAAK,GAAmBH,CAAS,EACrBxG,EAAOyG,CAAQ,CACxB,CACN,CACF,CACA,SAASC,GAA8BF,EAAW,CAChD,IAAII,EAAoBJ,EAAU,cAClC,GAAaI,IAAT,KAA4B,OAAOA,EACvCA,EAAoB,CAClB,cAAe7xB,GACf,UAAWA,GACX,UAAW,KACX,MAAO,CACL,QAAS,KACT,MAAO,EACP,SAAU,KACV,oBAAqBgrB,GACrB,kBAAmBhrB,EACrB,EACA,KAAM,IACR,EACA,IAAI8xB,EAAoB,CAAC,EACzB,OAAAD,EAAkB,KAAO,CACvB,cAAeC,EACf,UAAWA,EACX,UAAW,KACX,MAAO,CACL,QAAS,KACT,MAAO,EACP,SAAU,KACV,oBAAqB9G,GACrB,kBAAmB8G,CACrB,EACA,KAAM,IACR,EACAL,EAAU,cAAgBI,EAC1BJ,EAAYA,EAAU,UACbA,IAAT,OAAuBA,EAAU,cAAgBI,GAC1CA,CACT,CACA,SAASD,GAAmBH,EAAW,CACrC,IAAIxC,EAAY0C,GAA8BF,CAAS,EAC9CxC,EAAU,OAAnB,OAA4BA,EAAYwC,EAAU,UAAU,eAC5DJ,GACEI,EACAxC,EAAU,KAAK,MACf,CAAC,EACDqC,GAAkB,CACpB,CACF,CACA,SAASS,IAA0B,CACjC,OAAOxT,GAAYjd,EAAqB,CAC1C,CACA,SAAS0wB,IAAW,CAClB,OAAO1H,GAAyB,EAAE,aACpC,CACA,SAAS2H,IAAgB,CACvB,OAAO3H,GAAyB,EAAE,aACpC,CACA,SAAS4H,GAAa90B,EAAO,CAC3B,QAAS+0B,EAAW/0B,EAAM,OAAiB+0B,IAAT,MAAqB,CACrD,OAAQA,EAAS,IAAK,CACpB,IAAK,IACL,IAAK,GACH,IAAItsB,EAAOyrB,GAAkB,EAC7Bl0B,EAAQ6nB,GAAapf,CAAI,EACzB,IAAIusB,EAAUlN,GAAciN,EAAU/0B,EAAOyI,CAAI,EACxCusB,IAAT,OACGtF,GAAsBsF,EAASD,EAAUtsB,CAAI,EAC9Cwf,GAAoB+M,EAASD,EAAUtsB,CAAI,GAC7CssB,EAAW,CAAE,MAAOjT,GAAY,CAAE,EAClC9hB,EAAM,QAAU+0B,EAChB,MACJ,CACAA,EAAWA,EAAS,MACtB,CACF,CACA,SAASE,GAAsBj1B,EAAO4a,EAAOiT,EAAQ,CACnD,IAAIplB,EAAOyrB,GAAkB,EAC7BrG,EAAS,CACP,KAAMplB,EACN,WAAY,EACZ,QAAS,KACT,OAAQolB,EACR,cAAe,GACf,WAAY,KACZ,KAAM,IACR,EACAwC,GAAoBrwB,CAAK,EACrBk1B,GAAyBta,EAAOiT,CAAM,GACpCA,EAAS7S,GAA4Bhb,EAAO4a,EAAOiT,EAAQplB,CAAI,EACxDolB,IAAT,OACG6B,GAAsB7B,EAAQ7tB,EAAOyI,CAAI,EAC1C0sB,GAAyBtH,EAAQjT,EAAOnS,CAAI,GACpD,CACA,SAASipB,GAAiB1xB,EAAO4a,EAAOiT,EAAQ,CAC9C,IAAIplB,EAAOyrB,GAAkB,EAC7BD,GAAyBj0B,EAAO4a,EAAOiT,EAAQplB,CAAI,CACrD,CACA,SAASwrB,GAAyBj0B,EAAO4a,EAAOiT,EAAQplB,EAAM,CAC5D,IAAIoB,EAAS,CACX,KAAMpB,EACN,WAAY,EACZ,QAAS,KACT,OAAQolB,EACR,cAAe,GACf,WAAY,KACZ,KAAM,IACR,EACA,GAAIwC,GAAoBrwB,CAAK,EAAGk1B,GAAyBta,EAAO/Q,CAAM,MACjE,CACH,IAAIrJ,EAAYR,EAAM,UACtB,GACQA,EAAM,QAAZ,IACUQ,IAAT,MAA4BA,EAAU,QAAhB,KACrBA,EAAYoa,EAAM,oBAA+Bpa,IAAT,MAE1C,GAAI,CACF,IAAI40B,EAAexa,EAAM,kBACvBya,EAAa70B,EAAU40B,EAAcvH,CAAM,EAG7C,GAFAhkB,EAAO,cAAgB,GACvBA,EAAO,WAAawrB,EAChBzd,GAASyd,EAAYD,CAAY,EACnC,OACEra,GAAgB/a,EAAO4a,EAAO/Q,EAAQ,CAAC,EAC9BwZ,KAAT,MAA+B3I,GAAgC,EAC/D,EAEN,OAASJ,EAAO,CAChB,CAGF,GADAuT,EAAS7S,GAA4Bhb,EAAO4a,EAAO/Q,EAAQpB,CAAI,EAClDolB,IAAT,KACF,OACE6B,GAAsB7B,EAAQ7tB,EAAOyI,CAAI,EACzC0sB,GAAyBtH,EAAQjT,EAAOnS,CAAI,EAC5C,EAEN,CACA,MAAO,EACT,CACA,SAASkpB,GAA2B3xB,EAAOs1B,EAAqB1a,EAAOiT,EAAQ,CAU7E,GATAA,EAAS,CACP,KAAM,EACN,WAAYpL,GAAsB,EAClC,QAAS,KACT,OAAQoL,EACR,cAAe,GACf,WAAY,KACZ,KAAM,IACR,EACIwC,GAAoBrwB,CAAK,GAC3B,GAAIs1B,EAAqB,MAAM,MAAM71B,EAAuB,GAAG,CAAC,OAE/D61B,EAAsBta,GACrBhb,EACA4a,EACAiT,EACA,CACF,EACWyH,IAAT,MACE5F,GAAsB4F,EAAqBt1B,EAAO,CAAC,CAC3D,CACA,SAASqwB,GAAoBrwB,EAAO,CAClC,IAAIQ,EAAYR,EAAM,UACtB,OACEA,IAAU+qB,GACAvqB,IAAT,MAAsBA,IAAcuqB,CAEzC,CACA,SAASmK,GAAyBta,EAAO/Q,EAAQ,CAC/CshB,GAA6CD,GAC3C,GACF,IAAIrQ,EAAUD,EAAM,QACXC,IAAT,KACKhR,EAAO,KAAOA,GACbA,EAAO,KAAOgR,EAAQ,KAAQA,EAAQ,KAAOhR,GACnD+Q,EAAM,QAAU/Q,CAClB,CACA,SAASsrB,GAAyBrtB,EAAM8S,EAAOnS,EAAM,CACnD,IAAWA,EAAO,WAAd,EAAwB,CAC1B,IAAIyf,EAAatN,EAAM,MACvBsN,GAAcpgB,EAAK,aACnBW,GAAQyf,EACRtN,EAAM,MAAQnS,EACdwB,GAAkBnC,EAAMW,CAAI,CAC9B,CACF,CACA,IAAI0jB,GAAwB,CAC1B,YAAahL,GACb,IAAKmM,GACL,YAAa9B,GACb,WAAYA,GACZ,UAAWA,GACX,oBAAqBA,GACrB,gBAAiBA,GACjB,mBAAoBA,GACpB,QAASA,GACT,WAAYA,GACZ,OAAQA,GACR,SAAUA,GACV,cAAeA,GACf,iBAAkBA,GAClB,cAAeA,GACf,qBAAsBA,GACtB,MAAOA,GACP,wBAAyBA,GACzB,aAAcA,GACd,eAAgBA,GAChB,cAAeA,GACf,aAAcA,GACd,gBAAiBA,EACnB,EACAW,GAAsB,eAAiBX,GACvC,IAAIO,GAAyB,CACzB,YAAa5K,GACb,IAAKmM,GACL,YAAa,SAAU9D,EAAU2I,EAAM,CACrC,OAAAnF,GAAwB,EAAE,cAAgB,CACxCxD,EACW2I,IAAX,OAAkB,KAAOA,CAC3B,EACO3I,CACT,EACA,WAAYrI,GACZ,UAAWsR,GACX,oBAAqB,SAAUK,EAAKZ,EAAQC,EAAM,CAChDA,EAAgBA,GAAT,KAAmCA,EAAK,OAAO,CAACW,CAAG,CAAC,EAAI,KAC/DT,GACE,QACA,EACAY,GAAuB,KAAK,KAAMf,EAAQY,CAAG,EAC7CX,CACF,CACF,EACA,gBAAiB,SAAUD,EAAQC,EAAM,CACvC,OAAOE,GAAgB,QAAS,EAAGH,EAAQC,CAAI,CACjD,EACA,mBAAoB,SAAUD,EAAQC,EAAM,CAC1CE,GAAgB,EAAG,EAAGH,EAAQC,CAAI,CACpC,EACA,QAAS,SAAUoB,EAAYpB,EAAM,CACnC,IAAIlF,EAAOD,GAAwB,EACnCmF,EAAkBA,IAAX,OAAkB,KAAOA,EAChC,IAAIhS,EAAYoT,EAAW,EAC3B,GAAInI,GAAqC,CACvCpkB,GAA2B,EAAE,EAC7B,GAAI,CACFusB,EAAW,CACb,QAAE,CACAvsB,GAA2B,EAAE,CAC/B,CACF,CACA,OAAAimB,EAAK,cAAgB,CAAC9M,EAAWgS,CAAI,EAC9BhS,CACT,EACA,WAAY,SAAU4N,EAASwH,EAAY9Q,EAAM,CAC/C,IAAIwI,EAAOD,GAAwB,EACnC,GAAevI,IAAX,OAAiB,CACnB,IAAImL,EAAenL,EAAK8Q,CAAU,EAClC,GAAInK,GAAqC,CACvCpkB,GAA2B,EAAE,EAC7B,GAAI,CACFyd,EAAK8Q,CAAU,CACjB,QAAE,CACAvuB,GAA2B,EAAE,CAC/B,CACF,CACF,MAAO4oB,EAAe2F,EACtB,OAAAtI,EAAK,cAAgBA,EAAK,UAAY2C,EACtC7B,EAAU,CACR,QAAS,KACT,MAAO,EACP,SAAU,KACV,oBAAqBA,EACrB,kBAAmB6B,CACrB,EACA3C,EAAK,MAAQc,EACbA,EAAUA,EAAQ,SAAWkH,GAAsB,KACjD,KACAlK,EACAgD,CACF,EACO,CAACd,EAAK,cAAec,CAAO,CACrC,EACA,OAAQ,SAAU0F,EAAc,CAC9B,IAAIxG,EAAOD,GAAwB,EACnC,OAAAyG,EAAe,CAAE,QAASA,CAAa,EAC/BxG,EAAK,cAAgBwG,CAC/B,EACA,SAAU,SAAU7D,EAAc,CAChCA,EAAeD,GAAeC,CAAY,EAC1C,IAAIhV,EAAQgV,EAAa,MACvBpB,EAAWkD,GAAiB,KAAK,KAAM3G,EAAyBnQ,CAAK,EACvE,OAAAA,EAAM,SAAW4T,EACV,CAACoB,EAAa,cAAepB,CAAQ,CAC9C,EACA,cAAe4E,GACf,iBAAkB,SAAUhwB,EAAOqwB,EAAc,CAC/C,IAAIxG,EAAOD,GAAwB,EACnC,OAAOwG,GAAuBvG,EAAM7pB,EAAOqwB,CAAY,CACzD,EACA,cAAe,UAAY,CACzB,IAAI5B,EAAYlC,GAAe,EAAE,EACjC,OAAAkC,EAAYgC,GAAgB,KAC1B,KACA9I,EACA8G,EAAU,MACV,GACA,EACF,EACA7E,GAAwB,EAAE,cAAgB6E,EACnC,CAAC,GAAIA,CAAS,CACvB,EACA,qBAAsB,SAAUlD,EAAWC,EAAaC,EAAmB,CACzE,IAAI7uB,EAAQ+qB,EACVkC,EAAOD,GAAwB,EACjC,GAAIne,GAAa,CACf,GAAeggB,IAAX,OACF,MAAM,MAAMpvB,EAAuB,GAAG,CAAC,EACzCovB,EAAoBA,EAAkB,CACxC,KAAO,CAEL,GADAA,EAAoBD,EAAY,EACnBvL,KAAT,KACF,MAAM,MAAM5jB,EAAuB,GAAG,CAAC,GAClC4pB,GAAgC,OAAvC,GACE+F,GAA0BpvB,EAAO4uB,EAAaC,CAAiB,CACnE,CACA5B,EAAK,cAAgB4B,EACrB,IAAI9iB,EAAO,CAAE,MAAO8iB,EAAmB,YAAaD,CAAY,EAChE,OAAA3B,EAAK,MAAQlhB,EACb0mB,GAAYxD,GAAiB,KAAK,KAAMjvB,EAAO+L,EAAM4iB,CAAS,EAAG,CAC/DA,CACF,CAAC,EACD3uB,EAAM,OAAS,KACfkvB,GACE,EACA,CAAE,QAAS,MAAO,EAClBC,GAAoB,KAClB,KACAnvB,EACA+L,EACA8iB,EACAD,CACF,EACA,IACF,EACOC,CACT,EACA,MAAO,UAAY,CACjB,IAAI5B,EAAOD,GAAwB,EACjCwI,EAAmBnS,GAAmB,iBACxC,GAAIxU,GAAa,CACf,IAAI7K,EAA2B0Z,GAC3B+X,EAAmBhY,GACvBzZ,GAEIyxB,EAAmB,EAAE,GAAM,GAAKtuB,GAAMsuB,CAAgB,EAAI,IAC1D,SAAS,EAAE,EAAIzxB,EACnBwxB,EACE,IAAMA,EAAmB,KAAOxxB,EAClCA,EAA2BqnB,KAC3B,EAAIrnB,IACDwxB,GAAoB,IAAMxxB,EAAyB,SAAS,EAAE,GACjEwxB,GAAoB,GACtB,MACGxxB,EAA2BunB,KACzBiK,EACC,IACAA,EACA,KACAxxB,EAAyB,SAAS,EAAE,EACpC,IACN,OAAQipB,EAAK,cAAgBuI,CAC/B,EACA,wBAAyBb,GACzB,aAActD,GACd,eAAgBA,GAChB,cAAe,SAAUtB,EAAa,CACpC,IAAI9C,EAAOD,GAAwB,EACnCC,EAAK,cAAgBA,EAAK,UAAY8C,EACtC,IAAInV,EAAQ,CACV,QAAS,KACT,MAAO,EACP,SAAU,KACV,oBAAqB,KACrB,kBAAmB,IACrB,EACA,OAAAqS,EAAK,MAAQrS,EACbqS,EAAO0E,GAA2B,KAChC,KACA5G,EACA,GACAnQ,CACF,EACAA,EAAM,SAAWqS,EACV,CAAC8C,EAAa9C,CAAI,CAC3B,EACA,aAAcO,GACd,gBAAiB,UAAY,CAC3B,OAAQR,GAAwB,EAAE,cAAgB8H,GAAa,KAC7D,KACA/J,CACF,CACF,EACA,eAAgB,SAAUvB,EAAU,CAClC,IAAIyD,EAAOD,GAAwB,EACjC8F,EAAM,CAAE,KAAMtJ,CAAS,EACzB,OAAAyD,EAAK,cAAgB6F,EACd,UAAY,CACjB,IAAW9K,GAAmB,KAA1B,EACF,MAAM,MAAMvoB,EAAuB,GAAG,CAAC,EACzC,OAAOqzB,EAAI,KAAK,MAAM,OAAQ,SAAS,CACzC,CACF,CACF,EACA9G,GAA0B,CACxB,YAAa7K,GACb,IAAKmM,GACL,YAAa+F,GACb,WAAYlS,GACZ,UAAW6N,GACX,oBAAqBmE,GACrB,mBAAoBJ,GACpB,gBAAiBC,GACjB,QAASM,GACT,WAAYxF,GACZ,OAAQsE,GACR,SAAU,UAAY,CACpB,OAAOtE,GAAcF,EAAiB,CACxC,EACA,cAAewF,GACf,iBAAkB,SAAUhwB,EAAOqwB,EAAc,CAC/C,IAAIxG,EAAOC,GAAyB,EACpC,OAAOyG,GACL1G,EACAjC,GAAY,cACZ5nB,EACAqwB,CACF,CACF,EACA,cAAe,UAAY,CACzB,IAAIiC,EAAoB5H,GAAcF,EAAiB,EAAE,CAAC,EACxD9b,EAAQob,GAAyB,EAAE,cACrC,MAAO,CACS,OAAOwI,GAArB,UACIA,EACA/I,GAAY+I,CAAiB,EACjC5jB,CACF,CACF,EACA,qBAAsB4c,GACtB,MAAOkG,GACP,wBAAyBD,GACzB,aAAc/C,GACd,eAAgBA,GAChB,cAAe,SAAU7B,EAAahC,EAAS,CAC7C,IAAId,EAAOC,GAAyB,EACpC,OAAO4C,GAAqB7C,EAAMjC,GAAa+E,EAAahC,CAAO,CACrE,EACA,aAAcP,GACd,gBAAiBqH,EACnB,EACF7I,GAAwB,eAAiB6G,GACzC,IAAItG,GAA4B,CAC9B,YAAapL,GACb,IAAKmM,GACL,YAAa+F,GACb,WAAYlS,GACZ,UAAW6N,GACX,oBAAqBmE,GACrB,mBAAoBJ,GACpB,gBAAiBC,GACjB,QAASM,GACT,WAAY/E,GACZ,OAAQ6D,GACR,SAAU,UAAY,CACpB,OAAO7D,GAAgBX,EAAiB,CAC1C,EACA,cAAewF,GACf,iBAAkB,SAAUhwB,EAAOqwB,EAAc,CAC/C,IAAIxG,EAAOC,GAAyB,EACpC,OAAgBlC,KAAT,KACHwI,GAAuBvG,EAAM7pB,EAAOqwB,CAAY,EAChDE,GACE1G,EACAjC,GAAY,cACZ5nB,EACAqwB,CACF,CACN,EACA,cAAe,UAAY,CACzB,IAAIiC,EAAoBnH,GAAgBX,EAAiB,EAAE,CAAC,EAC1D9b,EAAQob,GAAyB,EAAE,cACrC,MAAO,CACS,OAAOwI,GAArB,UACIA,EACA/I,GAAY+I,CAAiB,EACjC5jB,CACF,CACF,EACA,qBAAsB4c,GACtB,MAAOkG,GACP,wBAAyBD,GACzB,aAAc1C,GACd,eAAgBA,GAChB,cAAe,SAAUlC,EAAahC,EAAS,CAC7C,IAAId,EAAOC,GAAyB,EACpC,OAAalC,KAAT,KACK8E,GAAqB7C,EAAMjC,GAAa+E,EAAahC,CAAO,GACrEd,EAAK,UAAY8C,EACV,CAACA,EAAa9C,EAAK,MAAM,QAAQ,EAC1C,EACA,aAAcO,GACd,gBAAiBqH,EACnB,EACAtI,GAA0B,eAAiBsG,GAC3C,SAAS8C,GACP9vB,EACA+vB,EACAC,EACAC,EACA,CACAF,EAAO/vB,EAAe,cACtBgwB,EAA2BA,EAAyBC,EAAWF,CAAI,EACnEC,EACWA,GAAT,KACID,EACA30B,GAAO,CAAC,EAAG20B,EAAMC,CAAwB,EAC/ChwB,EAAe,cAAgBgwB,EACzBhwB,EAAe,QAArB,IACGA,EAAe,YAAY,UAAYgwB,EAC5C,CACA,IAAIE,GAAwB,CAC1B,gBAAiB,SAAUhqB,EAAMqkB,EAAS5G,EAAU,CAClDzd,EAAOA,EAAK,gBACZ,IAAItD,EAAOyrB,GAAkB,EAC3BrqB,EAASge,GAAapf,CAAI,EAC5BoB,EAAO,QAAUumB,EACe5G,GAAT,OAAsB3f,EAAO,SAAW2f,GAC/D4G,EAAUtI,GAAc/b,EAAMlC,EAAQpB,CAAI,EACjC2nB,IAAT,OACGV,GAAsBU,EAASrkB,EAAMtD,CAAI,EAC1Cwf,GAAoBmI,EAASrkB,EAAMtD,CAAI,EAC3C,EACA,oBAAqB,SAAUsD,EAAMqkB,EAAS5G,EAAU,CACtDzd,EAAOA,EAAK,gBACZ,IAAItD,EAAOyrB,GAAkB,EAC3BrqB,EAASge,GAAapf,CAAI,EAC5BoB,EAAO,IAAM,EACbA,EAAO,QAAUumB,EACe5G,GAAT,OAAsB3f,EAAO,SAAW2f,GAC/D4G,EAAUtI,GAAc/b,EAAMlC,EAAQpB,CAAI,EACjC2nB,IAAT,OACGV,GAAsBU,EAASrkB,EAAMtD,CAAI,EAC1Cwf,GAAoBmI,EAASrkB,EAAMtD,CAAI,EAC3C,EACA,mBAAoB,SAAUsD,EAAMyd,EAAU,CAC5Czd,EAAOA,EAAK,gBACZ,IAAItD,EAAOyrB,GAAkB,EAC3BrqB,EAASge,GAAapf,CAAI,EAC5BoB,EAAO,IAAM,EACmB2f,GAAT,OAAsB3f,EAAO,SAAW2f,GAC/DA,EAAW1B,GAAc/b,EAAMlC,EAAQpB,CAAI,EAClC+gB,IAAT,OACGkG,GAAsBlG,EAAUzd,EAAMtD,CAAI,EAC3Cwf,GAAoBuB,EAAUzd,EAAMtD,CAAI,EAC5C,CACF,EACA,SAASutB,GACPnwB,EACA+vB,EACAK,EACAC,EACA9E,EACAjI,EACAgN,EACA,CACA,OAAAtwB,EAAiBA,EAAe,UACV,OAAOA,EAAe,uBAArC,WACHA,EAAe,sBAAsBqwB,EAAU/M,EAAUgN,CAAW,EACpEP,EAAK,WAAaA,EAAK,UAAU,qBAC/B,CAAC/d,GAAaoe,EAAUC,CAAQ,GAAK,CAACre,GAAauZ,EAAUjI,CAAQ,EACrE,EACR,CACA,SAASiN,GACPvwB,EACAiZ,EACAoX,EACAC,EACA,CACAtwB,EAAiBiZ,EAAS,MACX,OAAOA,EAAS,2BAA/B,YACEA,EAAS,0BAA0BoX,EAAUC,CAAW,EAC3C,OAAOrX,EAAS,kCAA/B,YACEA,EAAS,iCAAiCoX,EAAUC,CAAW,EACjErX,EAAS,QAAUjZ,GACjBkwB,GAAsB,oBAAoBjX,EAAUA,EAAS,MAAO,IAAI,CAC5E,CACA,SAASuX,GAA2Bva,EAAWwa,EAAW,CACxD,IAAIJ,EAAWI,EACf,GAAI,QAASA,EAAW,CACtBJ,EAAW,CAAC,EACZ,QAASnjB,KAAYujB,EACTvjB,IAAV,QAAuBmjB,EAASnjB,CAAQ,EAAIujB,EAAUvjB,CAAQ,EAClE,CACA,GAAK+I,EAAYA,EAAU,aAAe,CACxCoa,IAAaI,IAAcJ,EAAWj1B,GAAO,CAAC,EAAGi1B,CAAQ,GACzD,QAASK,KAAeza,EACXoa,EAASK,CAAW,IAA/B,SACGL,EAASK,CAAW,EAAIza,EAAUya,CAAW,EACpD,CACA,OAAOL,CACT,CACA,SAASM,GAAuBlc,EAAO,CACrCD,GAAkBC,CAAK,CACzB,CACA,SAASmc,GAAqBnc,EAAO,CACnC,QAAQ,MAAMA,CAAK,CACrB,CACA,SAASoc,GAA0Bpc,EAAO,CACxCD,GAAkBC,CAAK,CACzB,CACA,SAASqc,GAAiB7uB,EAAM8uB,EAAW,CACzC,GAAI,CACF,IAAIC,EAAkB/uB,EAAK,gBAC3B+uB,EAAgBD,EAAU,MAAO,CAAE,eAAgBA,EAAU,KAAM,CAAC,CACtE,OAASE,EAAM,CACb,WAAW,UAAY,CACrB,MAAMA,CACR,CAAC,CACH,CACF,CACA,SAASC,GAAejvB,EAAMkvB,EAAUJ,EAAW,CACjD,GAAI,CACF,IAAIK,EAAgBnvB,EAAK,cACzBmvB,EAAcL,EAAU,MAAO,CAC7B,eAAgBA,EAAU,MAC1B,cAAqBI,EAAS,MAAf,EAAqBA,EAAS,UAAY,IAC3D,CAAC,CACH,OAASE,EAAM,CACb,WAAW,UAAY,CACrB,MAAMA,CACR,CAAC,CACH,CACF,CACA,SAASC,GAAsBrvB,EAAM8uB,EAAWnuB,EAAM,CACpD,OAAAA,EAAOof,GAAapf,CAAI,EACxBA,EAAK,IAAM,EACXA,EAAK,QAAU,CAAE,QAAS,IAAK,EAC/BA,EAAK,SAAW,UAAY,CAC1BkuB,GAAiB7uB,EAAM8uB,CAAS,CAClC,EACOnuB,CACT,CACA,SAAS2uB,GAAuB3uB,EAAM,CACpC,OAAAA,EAAOof,GAAapf,CAAI,EACxBA,EAAK,IAAM,EACJA,CACT,CACA,SAAS4uB,GAA2BxtB,EAAQ/B,EAAM9H,EAAO42B,EAAW,CAClE,IAAIU,EAA2Bt3B,EAAM,KAAK,yBAC1C,GAAmB,OAAOs3B,GAAtB,WAAgD,CAClD,IAAIhd,EAAQsc,EAAU,MACtB/sB,EAAO,QAAU,UAAY,CAC3B,OAAOytB,EAAyBhd,CAAK,CACvC,EACAzQ,EAAO,SAAW,UAAY,CAC5BktB,GAAejvB,EAAM9H,EAAO42B,CAAS,CACvC,CACF,CACA,IAAI7qB,EAAO/L,EAAM,UACR+L,IAAT,MACiB,OAAOA,EAAK,mBAA3B,aACClC,EAAO,SAAW,UAAY,CAC7BktB,GAAejvB,EAAM9H,EAAO42B,CAAS,EACtB,OAAOU,GAAtB,aACYC,KAAT,KACIA,GAAyC,IAAI,IAAI,CAAC,IAAI,CAAC,EACxDA,GAAuC,IAAI,IAAI,GACrD,IAAIC,EAAQZ,EAAU,MACtB,KAAK,kBAAkBA,EAAU,MAAO,CACtC,eAAyBY,IAAT,KAAiBA,EAAQ,EAC3C,CAAC,CACH,EACJ,CACA,SAASC,GACP3vB,EACAmd,EACA9J,EACA/X,EACAs0B,EACA,CAEA,GADAvc,EAAY,OAAS,MAEV/X,IAAT,MACa,OAAOA,GAApB,UACe,OAAOA,EAAM,MAA5B,WACA,CAUA,GATA6hB,EAAc9J,EAAY,UACjB8J,IAAT,MACEpE,GACEoE,EACA9J,EACAuc,EACA,EACF,EACFvc,EAAc8O,GAA2B,QAC5B9O,IAAT,KAAsB,CACxB,OAAQA,EAAY,IAAK,CACvB,IAAK,IACL,IAAK,IACH,OACW+O,KAAT,KACIyN,GAAgC,EACvBxc,EAAY,YAArB,MACMyc,KAAN,IACCA,GAA+B,GACnCzc,EAAY,OAAS,KACrBA,EAAY,OAAS,MACrBA,EAAY,MAAQuc,EACrBt0B,IAAU0gB,GACL3I,EAAY,OAAS,OACpB8J,EAAc9J,EAAY,YACnB8J,IAAT,KACK9J,EAAY,YAAc,IAAI,IAAI,CAAC/X,CAAK,CAAC,EAC1C6hB,EAAY,IAAI7hB,CAAK,EACzBy0B,GAAmB/vB,EAAM1E,EAAOs0B,CAAe,GACnD,GAEJ,IAAK,IACH,OACGvc,EAAY,OAAS,MACtB/X,IAAU0gB,GACL3I,EAAY,OAAS,OACpB8J,EAAc9J,EAAY,YACnB8J,IAAT,MACMA,EAAc,CACd,YAAa,KACb,gBAAiB,KACjB,WAAY,IAAI,IAAI,CAAC7hB,CAAK,CAAC,CAC7B,EACC+X,EAAY,YAAc8J,IACzB9J,EAAc8J,EAAY,WACnB9J,IAAT,KACK8J,EAAY,WAAa,IAAI,IAAI,CAAC7hB,CAAK,CAAC,EACzC+X,EAAY,IAAI/X,CAAK,GAC7By0B,GAAmB/vB,EAAM1E,EAAOs0B,CAAe,GACnD,EAEN,CACA,MAAM,MAAMj4B,EAAuB,IAAK0b,EAAY,GAAG,CAAC,CAC1D,CACA,OAAA0c,GAAmB/vB,EAAM1E,EAAOs0B,CAAe,EAC/CC,GAAgC,EACzB,EACT,CACA,GAAI9oB,GACF,OACGoW,EAAcgF,GAA2B,QACjChF,IAAT,OACYA,EAAY,MAAQ,SAA3B,IAAsCA,EAAY,OAAS,KAC3DA,EAAY,OAAS,MACrBA,EAAY,MAAQyS,EACrBt0B,IAAUsb,KACN5W,EAAO,MAAMrI,EAAuB,GAAG,EAAG,CAAE,MAAO2D,CAAM,CAAC,EAC5Dwb,GAAoB7B,GAA2BjV,EAAMqT,CAAW,CAAC,KAClE/X,IAAUsb,KACPuG,EAAc,MAAMxlB,EAAuB,GAAG,EAAG,CACjD,MAAO2D,CACT,CAAC,EACDwb,GACE7B,GAA2BkI,EAAa9J,CAAW,CACrD,GACDrT,EAAOA,EAAK,QAAQ,UACpBA,EAAK,OAAS,MACd4vB,GAAmB,CAACA,EACpB5vB,EAAK,OAAS4vB,EACdt0B,EAAQ2Z,GAA2B3Z,EAAO+X,CAAW,EACrDuc,EAAkBP,GACjBrvB,EAAK,UACL1E,EACAs0B,CACF,EACAvP,GAAsBrgB,EAAM4vB,CAAe,EACrCE,KAAN,IACGA,GAA+B,IACtC,GAEJ,IAAIE,EAAe,MAAMr4B,EAAuB,GAAG,EAAG,CAAE,MAAO2D,CAAM,CAAC,EAMtE,GALA00B,EAAe/a,GAA2B+a,EAAc3c,CAAW,EAC1D4c,KAAT,KACKA,GAAqC,CAACD,CAAY,EACnDC,GAAmC,KAAKD,CAAY,EAClDF,KAAN,IAAuCA,GAA+B,GACzD3S,IAAT,KAAsB,MAAO,GACjC7hB,EAAQ2Z,GAA2B3Z,EAAO+X,CAAW,EACrDA,EAAc8J,EACd,EAAG,CACD,OAAQ9J,EAAY,IAAK,CACvB,IAAK,GACH,OACGA,EAAY,OAAS,MACrBrT,EAAO4vB,EAAkB,CAACA,EAC1Bvc,EAAY,OAASrT,EACrBA,EAAOqvB,GAAsBhc,EAAY,UAAW/X,EAAO0E,CAAI,EAChEqgB,GAAsBhN,EAAarT,CAAI,EACvC,GAEJ,IAAK,GACH,GACImd,EAAc9J,EAAY,KAC3B2c,EAAe3c,EAAY,WACrBA,EAAY,MAAQ,OAA3B,IACkB,OAAO8J,EAAY,0BAAlC,YACW6S,IAAT,MACgB,OAAOA,EAAa,mBAAnC,aACUP,KAAT,MACC,CAACA,GAAuC,IAAIO,CAAY,IAEhE,OACG3c,EAAY,OAAS,MACrBuc,GAAmB,CAACA,EACpBvc,EAAY,OAASuc,EACrBA,EAAkBN,GAAuBM,CAAe,EACzDL,GACEK,EACA5vB,EACAqT,EACA/X,CACF,EACA+kB,GAAsBhN,EAAauc,CAAe,EAClD,EAER,CACAvc,EAAcA,EAAY,MAC5B,OAAkBA,IAAT,MACT,MAAO,EACT,CACA,IAAI6c,GAA8B,MAAMv4B,EAAuB,GAAG,CAAC,EACjE4sB,GAAmB,GACrB,SAAS4L,GAAkBjc,EAASnW,EAAgBqyB,EAAc3vB,EAAa,CAC7E1C,EAAe,MACJmW,IAAT,KACIyL,GAAiB5hB,EAAgB,KAAMqyB,EAAc3vB,CAAW,EAChEif,GACE3hB,EACAmW,EAAQ,MACRkc,EACA3vB,CACF,CACR,CACA,SAAS4vB,GACPnc,EACAnW,EACAiW,EACAga,EACAvtB,EACA,CACAuT,EAAYA,EAAU,OACtB,IAAIgX,EAAMjtB,EAAe,IACzB,GAAI,QAASiwB,EAAW,CACtB,IAAIsC,EAAkB,CAAC,EACvB,QAASzjB,KAAOmhB,EACJnhB,IAAV,QAAkByjB,EAAgBzjB,CAAG,EAAImhB,EAAUnhB,CAAG,EAC1D,MAAOyjB,EAAkBtC,EAWzB,OAVA5U,GAAqBrb,CAAc,EACnCiwB,EAAYlK,GACV5P,EACAnW,EACAiW,EACAsc,EACAtF,EACAvqB,CACF,EACAoM,EAAMiY,GAAqB,EACd5Q,IAAT,MAAoB,CAACqQ,IAErBS,GAAa9Q,EAASnW,EAAgB0C,CAAW,EACjD8vB,GAA6Brc,EAASnW,EAAgB0C,CAAW,IAErEsG,IAAe8F,GAAOuJ,GAAuBrY,CAAc,EAC3DA,EAAe,OAAS,EACxBoyB,GAAkBjc,EAASnW,EAAgBiwB,EAAWvtB,CAAW,EAC1D1C,EAAe,MACxB,CACA,SAASyyB,GACPtc,EACAnW,EACAiW,EACAga,EACAvtB,EACA,CACA,GAAayT,IAAT,KAAkB,CACpB,IAAI1Z,EAAOwZ,EAAU,KACrB,OACiB,OAAOxZ,GAAtB,YACA,CAACuZ,GAAgBvZ,CAAI,GACVA,EAAK,eAAhB,QACSwZ,EAAU,UAAnB,MAGGjW,EAAe,IAAM,GACrBA,EAAe,KAAOvD,EACvBi2B,GACEvc,EACAnW,EACAvD,EACAwzB,EACAvtB,CACF,IAEJyT,EAAUE,GACRJ,EAAU,KACV,KACAga,EACAjwB,EACAA,EAAe,KACf0C,CACF,EACAyT,EAAQ,IAAMnW,EAAe,IAC7BmW,EAAQ,OAASnW,EACTA,EAAe,MAAQmW,EACjC,CAEA,GADA1Z,EAAO0Z,EAAQ,MACX,CAACwc,GAA8Bxc,EAASzT,CAAW,EAAG,CACxD,IAAIkwB,EAAYn2B,EAAK,cAGrB,GAFAwZ,EAAYA,EAAU,QACtBA,EAAqBA,IAAT,KAAqBA,EAAYjE,GACzCiE,EAAU2c,EAAW3C,CAAS,GAAK9Z,EAAQ,MAAQnW,EAAe,IACpE,OAAOwyB,GAA6Brc,EAASnW,EAAgB0C,CAAW,CAC5E,CACA,OAAA1C,EAAe,OAAS,EACxBmW,EAAUD,GAAqBzZ,EAAMwzB,CAAS,EAC9C9Z,EAAQ,IAAMnW,EAAe,IAC7BmW,EAAQ,OAASnW,EACTA,EAAe,MAAQmW,CACjC,CACA,SAASuc,GACPvc,EACAnW,EACAiW,EACAga,EACAvtB,EACA,CACA,GAAayT,IAAT,KAAkB,CACpB,IAAIyc,EAAYzc,EAAQ,cACxB,GACEnE,GAAa4gB,EAAW3C,CAAS,GACjC9Z,EAAQ,MAAQnW,EAAe,IAE/B,GACIwmB,GAAmB,GACpBxmB,EAAe,aAAeiwB,EAAY2C,EAC3CD,GAA8Bxc,EAASzT,CAAW,GAE3CyT,EAAQ,MAAQ,UAAvB,IAAmCqQ,GAAmB,QAEtD,QACGxmB,EAAe,MAAQmW,EAAQ,MAChCqc,GAA6Brc,EAASnW,EAAgB0C,CAAW,CAEzE,CACA,OAAOmwB,GACL1c,EACAnW,EACAiW,EACAga,EACAvtB,CACF,CACF,CACA,SAASowB,GACP3c,EACAnW,EACA0C,EACAutB,EACA,CACA,IAAIoC,EAAepC,EAAU,SAC3BtF,EAAqBxU,IAAT,KAAmBA,EAAQ,cAAgB,KASzD,GARSA,IAAT,MACWnW,EAAe,YAAxB,OACCA,EAAe,UAAY,CAC1B,YAAa,EACb,gBAAiB,KACjB,YAAa,KACb,aAAc,IAChB,GACeiwB,EAAU,OAAvB,SAA6B,CAC/B,IAAWjwB,EAAe,MAAQ,OAA9B,EAAoC,CAGtC,GAFA2qB,EACWA,IAAT,KAAqBA,EAAU,UAAYjoB,EAAcA,EAC9CyT,IAAT,KAAkB,CAEpB,IADA8Z,EAAYjwB,EAAe,MAAQmW,EAAQ,MACtCkc,EAAe,EAAYpC,IAAT,MACpBoC,EACCA,EAAepC,EAAU,MAAQA,EAAU,WAC1CA,EAAYA,EAAU,QAC3BA,EAAYoC,EAAe,CAAC1H,CAC9B,MAAQsF,EAAY,EAAKjwB,EAAe,MAAQ,KAChD,OAAO+yB,GACL5c,EACAnW,EACA2qB,EACAjoB,EACAutB,CACF,CACF,CACA,IAAWvtB,EAAc,aAArB,EACD1C,EAAe,cAAgB,CAAE,UAAW,EAAG,UAAW,IAAK,EACrDmW,IAAT,MACEsH,GACEzd,EACS2qB,IAAT,KAAqBA,EAAU,UAAY,IAC7C,EACOA,IAAT,KACI3G,GAAkBhkB,EAAgB2qB,CAAS,EAC3CzG,GAA0B,EAC9BQ,GAA6B1kB,CAAc,MAE7C,QACGiwB,EAAYjwB,EAAe,MAAQ,UACpC+yB,GACE5c,EACAnW,EACS2qB,IAAT,KAAqBA,EAAU,UAAYjoB,EAAcA,EACzDA,EACAutB,CACF,CAEN,MACWtF,IAAT,MACKlN,GAAezd,EAAgB2qB,EAAU,SAAS,EACnD3G,GAAkBhkB,EAAgB2qB,CAAS,EAC3ChG,GAA4B3kB,CAAc,EACzCA,EAAe,cAAgB,OACtBmW,IAAT,MAAoBsH,GAAezd,EAAgB,IAAI,EACxDkkB,GAA0B,EAC1BS,GAA4B3kB,CAAc,GAChD,OAAAoyB,GAAkBjc,EAASnW,EAAgBqyB,EAAc3vB,CAAW,EAC7D1C,EAAe,KACxB,CACA,SAASgzB,GAA0B7c,EAASnW,EAAgB,CAC1D,OAAUmW,IAAT,MAA2BA,EAAQ,MAAf,IACVnW,EAAe,YAAxB,OACCA,EAAe,UAAY,CAC1B,YAAa,EACb,gBAAiB,KACjB,YAAa,KACb,aAAc,IAChB,GACKA,EAAe,OACxB,CACA,SAAS+yB,GACP5c,EACAnW,EACAizB,EACAvwB,EACAwwB,EACA,CACA,IAAI/0B,EAA2Bmf,GAAkB,EACjD,OAAAnf,EACWA,IAAT,KACI,KACA,CAAE,OAAQ6d,GAAa,cAAe,KAAM7d,CAAyB,EAC3E6B,EAAe,cAAgB,CAC7B,UAAWizB,EACX,UAAW90B,CACb,EACSgY,IAAT,MAAoBsH,GAAezd,EAAgB,IAAI,EACvDkkB,GAA0B,EAC1BQ,GAA6B1kB,CAAc,EAClCmW,IAAT,MACE6E,GAA8B7E,EAASnW,EAAgB0C,EAAa,EAAE,EACxE1C,EAAe,WAAakzB,EACrB,IACT,CACA,SAASC,GAAsBnzB,EAAgBiwB,EAAW,CACxD,OAAAA,EAAYmD,GACV,CAAE,KAAMnD,EAAU,KAAM,SAAUA,EAAU,QAAS,EACrDjwB,EAAe,IACjB,EACAiwB,EAAU,IAAMjwB,EAAe,IAC/BA,EAAe,MAAQiwB,EACvBA,EAAU,OAASjwB,EACZiwB,CACT,CACA,SAASoD,GACPld,EACAnW,EACA0C,EACA,CACA,OAAAif,GAAqB3hB,EAAgBmW,EAAQ,MAAO,KAAMzT,CAAW,EACrEyT,EAAUgd,GAAsBnzB,EAAgBA,EAAe,YAAY,EAC3EmW,EAAQ,OAAS,EACjByO,GAAmB5kB,CAAc,EACjCA,EAAe,cAAgB,KACxBmW,CACT,CACA,SAASmd,GAAwBnd,EAASnW,EAAgB0C,EAAa,CACrE,IAAIutB,EAAYjwB,EAAe,aAC7BuzB,GAAoBvzB,EAAe,MAAQ,OAA9B,EAEf,GADAA,EAAe,OAAS,KACXmW,IAAT,KAAkB,CACpB,GAAInN,GAAa,CACf,GAAiBinB,EAAU,OAAvB,SACF,OACG9Z,EAAUgd,GAAsBnzB,EAAgBiwB,CAAS,EACzDjwB,EAAe,MAAQ,UACxBgzB,GAA0B,KAAM7c,CAAO,EAyB3C,GAvBAsO,GAAsCzkB,CAAc,GACnDmW,EAAUuC,KACLvC,EAAUqd,GACVrd,EACAyC,EACF,EACCzC,EAAmBA,IAAT,MAA4BA,EAAQ,OAAhB,IAAuBA,EAAU,KACvDA,IAAT,OACInW,EAAe,cAAgB,CAC/B,WAAYmW,EACZ,YACWwB,KAAT,KACI,CAAE,GAAIC,GAAe,SAAUC,EAAoB,EACnD,KACN,UAAW,UACX,gBAAiB,IACnB,EACCnV,EAAcmU,GAAkCV,CAAO,EACvDzT,EAAY,OAAS1C,EACrBA,EAAe,MAAQ0C,EACvB+V,GAAuBzY,EACvB0Y,GAAyB,OAC3BvC,EAAU,KACFA,IAAT,KAAkB,MAAM2C,GAAyB9Y,CAAc,EACnE,OAAAA,EAAe,MAAQ,UAChB,IACT,CACA,OAAOmzB,GAAsBnzB,EAAgBiwB,CAAS,CACxD,CACA,IAAItF,EAAYxU,EAAQ,cACxB,GAAawU,IAAT,KAAoB,CACtB,IAAI8I,EAAa9I,EAAU,WAE3B,GADAlG,GAAsCzkB,CAAc,EAChDuzB,EACF,GAAIvzB,EAAe,MAAQ,IACxBA,EAAe,OAAS,KACtBA,EAAiBqzB,GAChBld,EACAnW,EACA0C,CACF,UACc1C,EAAe,gBAAxB,KACNA,EAAe,MAAQmW,EAAQ,MAC7BnW,EAAe,OAAS,IACxBA,EAAiB,SACjB,OAAM,MAAMpG,EAAuB,GAAG,CAAC,UAE3C4sB,IACCxL,GAA8B7E,EAASnW,EAAgB0C,EAAa,EAAE,EACvE6wB,GAAoB7wB,EAAcyT,EAAQ,cAA7B,EACdqQ,IAAoB+M,EACpB,CAEA,GADAtD,EAAYzS,GAEDyS,IAAT,OACEwD,EAAalvB,GAA0B0rB,EAAWvtB,CAAW,EACzD+wB,IAAN,GAAoBA,IAAe9I,EAAU,WAE7C,MACIA,EAAU,UAAY8I,EACxBpe,GAA+Bc,EAASsd,CAAU,EAClD5J,GAAsBoG,EAAW9Z,EAASsd,CAAU,EACpDtB,GAEJL,GAAgC,EAChC9xB,EAAiBqzB,GACfld,EACAnW,EACA0C,CACF,CACF,MACGyT,EAAUwU,EAAU,YAClBjS,GAAyBkB,GAAkB6Z,EAAW,WAAW,EACjEhb,GAAuBzY,EACvBgJ,GAAc,GACd2P,GAAkB,KAClBC,GAAyB,GACjBzC,IAAT,MACEoC,GAA4BvY,EAAgBmW,CAAO,EACpDnW,EAAiBmzB,GAAsBnzB,EAAgBiwB,CAAS,EAChEjwB,EAAe,OAAS,KAC7B,OAAOA,CACT,CACA,OAAAmW,EAAUD,GAAqBC,EAAQ,MAAO,CAC5C,KAAM8Z,EAAU,KAChB,SAAUA,EAAU,QACtB,CAAC,EACD9Z,EAAQ,IAAMnW,EAAe,IAC7BA,EAAe,MAAQmW,EACvBA,EAAQ,OAASnW,EACVmW,CACT,CACA,SAASud,GAAQvd,EAASnW,EAAgB,CACxC,IAAIitB,EAAMjtB,EAAe,IACzB,GAAaitB,IAAT,KACO9W,IAAT,MACWA,EAAQ,MAAjB,OACCnW,EAAe,OAAS,aACxB,CACH,GAAmB,OAAOitB,GAAtB,YAA0C,OAAOA,GAApB,SAC/B,MAAM,MAAMrzB,EAAuB,GAAG,CAAC,GAC5Buc,IAAT,MAAoBA,EAAQ,MAAQ8W,KACtCjtB,EAAe,OAAS,QAC5B,CACF,CACA,SAAS6yB,GACP1c,EACAnW,EACAiW,EACAga,EACAvtB,EACA,CAWA,OAVA2Y,GAAqBrb,CAAc,EACnCiW,EAAY8P,GACV5P,EACAnW,EACAiW,EACAga,EACA,OACAvtB,CACF,EACAutB,EAAYlJ,GAAqB,EACpB5Q,IAAT,MAAoB,CAACqQ,IAErBS,GAAa9Q,EAASnW,EAAgB0C,CAAW,EACjD8vB,GAA6Brc,EAASnW,EAAgB0C,CAAW,IAErEsG,IAAeinB,GAAa5X,GAAuBrY,CAAc,EACjEA,EAAe,OAAS,EACxBoyB,GAAkBjc,EAASnW,EAAgBiW,EAAWvT,CAAW,EAC1D1C,EAAe,MACxB,CACA,SAAS2zB,GACPxd,EACAnW,EACAiwB,EACAha,EACA+P,EACAtjB,EACA,CAWA,OAVA2Y,GAAqBrb,CAAc,EACnCA,EAAe,YAAc,KAC7BiwB,EAAY7J,GACVpmB,EACAiW,EACAga,EACAjK,CACF,EACAK,GAAqBlQ,CAAO,EAC5BF,EAAY8Q,GAAqB,EACpB5Q,IAAT,MAAoB,CAACqQ,IAErBS,GAAa9Q,EAASnW,EAAgB0C,CAAW,EACjD8vB,GAA6Brc,EAASnW,EAAgB0C,CAAW,IAErEsG,IAAeiN,GAAaoC,GAAuBrY,CAAc,EACjEA,EAAe,OAAS,EACxBoyB,GAAkBjc,EAASnW,EAAgBiwB,EAAWvtB,CAAW,EAC1D1C,EAAe,MACxB,CACA,SAAS4zB,GACPzd,EACAnW,EACAiW,EACAga,EACAvtB,EACA,CAEA,GADA2Y,GAAqBrb,CAAc,EACtBA,EAAe,YAAxB,KAAmC,CACrC,IAAI9B,EAAUyX,GACZke,EAAc5d,EAAU,YACb,OAAO4d,GAApB,UACWA,IAAT,OACC31B,EAAUod,GAAYuY,CAAW,GACpC31B,EAAU,IAAI+X,EAAUga,EAAW/xB,CAAO,EAC1C8B,EAAe,cACJ9B,EAAQ,QAAjB,MAAqCA,EAAQ,QAAnB,OAA2BA,EAAQ,MAAQ,KACvEA,EAAQ,QAAUgyB,GAClBlwB,EAAe,UAAY9B,EAC3BA,EAAQ,gBAAkB8B,EAC1B9B,EAAU8B,EAAe,UACzB9B,EAAQ,MAAQ+xB,EAChB/xB,EAAQ,MAAQ8B,EAAe,cAC/B9B,EAAQ,KAAO,CAAC,EAChB4jB,GAAsB9hB,CAAc,EACpC6zB,EAAc5d,EAAU,YACxB/X,EAAQ,QACO,OAAO21B,GAApB,UAA4CA,IAAT,KAC/BvY,GAAYuY,CAAW,EACvBle,GACNzX,EAAQ,MAAQ8B,EAAe,cAC/B6zB,EAAc5d,EAAU,yBACT,OAAO4d,GAAtB,aACG/D,GACC9vB,EACAiW,EACA4d,EACA5D,CACF,EACC/xB,EAAQ,MAAQ8B,EAAe,eACnB,OAAOiW,EAAU,0BAAhC,YACiB,OAAO/X,EAAQ,yBAA9B,YACgB,OAAOA,EAAQ,2BAA9B,YACgB,OAAOA,EAAQ,oBAA9B,aACA21B,EAAc31B,EAAQ,MACT,OAAOA,EAAQ,oBAA9B,YACEA,EAAQ,mBAAmB,EACd,OAAOA,EAAQ,2BAA9B,YACEA,EAAQ,0BAA0B,EACpC21B,IAAgB31B,EAAQ,OACtBgyB,GAAsB,oBAAoBhyB,EAASA,EAAQ,MAAO,IAAI,EACxE4kB,GAAmB9iB,EAAgBiwB,EAAW/xB,EAASwE,CAAW,EAClEkgB,GAA4C,EAC3C1kB,EAAQ,MAAQ8B,EAAe,eACnB,OAAO9B,EAAQ,mBAA9B,aACG8B,EAAe,OAAS,SAC3BiwB,EAAY,EACd,SAAoB9Z,IAAT,KAAkB,CAC3BjY,EAAU8B,EAAe,UACzB,IAAI8zB,EAAqB9zB,EAAe,cACtCowB,EAAWI,GAA2Bva,EAAW6d,CAAkB,EACrE51B,EAAQ,MAAQkyB,EAChB,IAAI2D,EAAa71B,EAAQ,QACvB81B,EAAuB/d,EAAU,YACnC4d,EAAcle,GACD,OAAOqe,GAApB,UACWA,IAAT,OACCH,EAAcvY,GAAY0Y,CAAoB,GACjD,IAAIhE,EAA2B/Z,EAAU,yBACzC+d,EACiB,OAAOhE,GAAtB,YACe,OAAO9xB,EAAQ,yBAA9B,WACF41B,EAAqB9zB,EAAe,eAAiB8zB,EACrDE,GACkB,OAAO91B,EAAQ,kCAA9B,YACgB,OAAOA,EAAQ,2BAA9B,aACA41B,GAAsBC,IAAeF,IACrCtD,GACEvwB,EACA9B,EACA+xB,EACA4D,CACF,EACJhS,GAAiB,GACjB,IAAI0J,EAAWvrB,EAAe,cAC9B9B,EAAQ,MAAQqtB,EAChBzI,GAAmB9iB,EAAgBiwB,EAAW/xB,EAASwE,CAAW,EAClEkgB,GAA4C,EAC5CmR,EAAa/zB,EAAe,cAC5B8zB,GAAsBvI,IAAawI,GAAclS,IAC7B,OAAOmO,GAAtB,aACEF,GACC9vB,EACAiW,EACA+Z,EACAC,CACF,EACC8D,EAAa/zB,EAAe,gBAC9BowB,EACCvO,IACAsO,GACEnwB,EACAiW,EACAma,EACAH,EACA1E,EACAwI,EACAF,CACF,IACGG,GACiB,OAAO91B,EAAQ,2BAA9B,YACgB,OAAOA,EAAQ,oBAA9B,aACc,OAAOA,EAAQ,oBAA9B,YACCA,EAAQ,mBAAmB,EACd,OAAOA,EAAQ,2BAA9B,YACEA,EAAQ,0BAA0B,GACvB,OAAOA,EAAQ,mBAA9B,aACG8B,EAAe,OAAS,WACX,OAAO9B,EAAQ,mBAA9B,aACE8B,EAAe,OAAS,SAC1BA,EAAe,cAAgBiwB,EAC/BjwB,EAAe,cAAgB+zB,GACnC71B,EAAQ,MAAQ+xB,EAChB/xB,EAAQ,MAAQ61B,EAChB71B,EAAQ,QAAU21B,EAClB5D,EAAYG,IACG,OAAOlyB,EAAQ,mBAA9B,aACE8B,EAAe,OAAS,SAC1BiwB,EAAY,GACnB,KAAO,CACL/xB,EAAU8B,EAAe,UACzB+hB,GAAiB5L,EAASnW,CAAc,EACxC6zB,EAAc7zB,EAAe,cAC7Bg0B,EAAuBxD,GAA2Bva,EAAW4d,CAAW,EACxE31B,EAAQ,MAAQ81B,EAChBhE,EAA2BhwB,EAAe,aAC1CurB,EAAWrtB,EAAQ,QACnB61B,EAAa9d,EAAU,YACvBma,EAAWza,GACE,OAAOoe,GAApB,UACWA,IAAT,OACC3D,EAAW9U,GAAYyY,CAAU,GACpCD,EAAqB7d,EAAU,0BAC9B8d,EACgB,OAAOD,GAAtB,YACe,OAAO51B,EAAQ,yBAA9B,aACgB,OAAOA,EAAQ,kCAA9B,YACgB,OAAOA,EAAQ,2BAA9B,aACA21B,IAAgB7D,GAA4BzE,IAAa6E,IACzDG,GACEvwB,EACA9B,EACA+xB,EACAG,CACF,EACJvO,GAAiB,GACjB0J,EAAWvrB,EAAe,cAC1B9B,EAAQ,MAAQqtB,EAChBzI,GAAmB9iB,EAAgBiwB,EAAW/xB,EAASwE,CAAW,EAClEkgB,GAA4C,EAC5C,IAAIU,EAAWtjB,EAAe,cAC9B6zB,IAAgB7D,GAChBzE,IAAajI,GACbzB,IACU1L,IAAT,MACUA,EAAQ,eAAjB,MACAgF,GAAsBhF,EAAQ,YAAY,GACxB,OAAO2d,GAAtB,aACEhE,GACC9vB,EACAiW,EACA6d,EACA7D,CACF,EACC3M,EAAWtjB,EAAe,gBAC5Bg0B,EACCnS,IACAsO,GACEnwB,EACAiW,EACA+d,EACA/D,EACA1E,EACAjI,EACA8M,CACF,GACUja,IAAT,MACUA,EAAQ,eAAjB,MACAgF,GAAsBhF,EAAQ,YAAY,IACzC4d,GACiB,OAAO71B,EAAQ,4BAA9B,YACgB,OAAOA,EAAQ,qBAA9B,aACc,OAAOA,EAAQ,qBAA9B,YACCA,EAAQ,oBAAoB+xB,EAAW3M,EAAU8M,CAAQ,EAC5C,OAAOlyB,EAAQ,4BAA9B,YACEA,EAAQ,2BACN+xB,EACA3M,EACA8M,CACF,GACW,OAAOlyB,EAAQ,oBAA9B,aACG8B,EAAe,OAAS,GACZ,OAAO9B,EAAQ,yBAA9B,aACG8B,EAAe,OAAS,QACX,OAAO9B,EAAQ,oBAA9B,YACE21B,IAAgB1d,EAAQ,eACvBoV,IAAapV,EAAQ,gBACtBnW,EAAe,OAAS,GACZ,OAAO9B,EAAQ,yBAA9B,YACG21B,IAAgB1d,EAAQ,eACvBoV,IAAapV,EAAQ,gBACtBnW,EAAe,OAAS,MAC1BA,EAAe,cAAgBiwB,EAC/BjwB,EAAe,cAAgBsjB,GACnCplB,EAAQ,MAAQ+xB,EAChB/xB,EAAQ,MAAQolB,EAChBplB,EAAQ,QAAUkyB,EAClBH,EAAY+D,IACG,OAAO91B,EAAQ,oBAA9B,YACE21B,IAAgB1d,EAAQ,eACvBoV,IAAapV,EAAQ,gBACtBnW,EAAe,OAAS,GACZ,OAAO9B,EAAQ,yBAA9B,YACG21B,IAAgB1d,EAAQ,eACvBoV,IAAapV,EAAQ,gBACtBnW,EAAe,OAAS,MAC1BiwB,EAAY,GACnB,CACA,OAAA/xB,EAAU+xB,EACVyD,GAAQvd,EAASnW,CAAc,EAC/BiwB,GAAmBjwB,EAAe,MAAQ,OAA9B,EACZ9B,GAAW+xB,GACL/xB,EAAU8B,EAAe,UAC1BiW,EACCga,GAA4B,OAAOha,EAAU,0BAAhC,WACT,KACA/X,EAAQ,OAAO,EACpB8B,EAAe,OAAS,EAChBmW,IAAT,MAAoB8Z,GACdjwB,EAAe,MAAQ2hB,GACvB3hB,EACAmW,EAAQ,MACR,KACAzT,CACF,EACC1C,EAAe,MAAQ2hB,GACtB3hB,EACA,KACAiW,EACAvT,CACF,GACA0vB,GAAkBjc,EAASnW,EAAgBiW,EAAWvT,CAAW,EACpE1C,EAAe,cAAgB9B,EAAQ,MACvCiY,EAAUnW,EAAe,OACzBmW,EAAUqc,GACTrc,EACAnW,EACA0C,CACF,EACGyT,CACT,CACA,SAAS8d,GACP9d,EACAnW,EACAqyB,EACA3vB,EACA,CACA,OAAAmX,GAAoB,EACpB7Z,EAAe,OAAS,IACxBoyB,GAAkBjc,EAASnW,EAAgBqyB,EAAc3vB,CAAW,EAC7D1C,EAAe,KACxB,CACA,IAAIk0B,GAAmB,CACrB,WAAY,KACZ,YAAa,KACb,UAAW,EACX,gBAAiB,IACnB,EACA,SAASC,GAA4BzxB,EAAa,CAChD,MAAO,CAAE,UAAWA,EAAa,UAAWkb,GAAkB,CAAE,CAClE,CACA,SAASwW,GACPje,EACAke,EACA3xB,EACA,CACA,OAAAyT,EAAmBA,IAAT,KAAmBA,EAAQ,WAAa,CAACzT,EAAc,EACjE2xB,IAAwBle,GAAWme,IAC5Bne,CACT,CACA,SAASoe,GAAwBpe,EAASnW,EAAgB0C,EAAa,CACrE,IAAIutB,EAAYjwB,EAAe,aAC7Bw0B,EAAe,GACfjB,GAAoBvzB,EAAe,MAAQ,OAA9B,EACbuZ,EASF,IARCA,EAAkBga,KAChBha,EACUpD,IAAT,MAA6BA,EAAQ,gBAAjB,KAChB,IACOqO,GAAoB,QAAU,KAArC,GACRjL,IAAqBib,EAAe,GAAMx0B,EAAe,OAAS,MAClEuZ,GAAyBvZ,EAAe,MAAQ,MAA9B,EAClBA,EAAe,OAAS,IACXmW,IAAT,KAAkB,CACpB,GAAInN,GAAa,CA0Bf,GAzBAwrB,EACIlQ,GAA+BtkB,CAAc,EAC7C2kB,GAA4B3kB,CAAc,GAC7CmW,EAAUuC,KACLvC,EAAUqd,GACVrd,EACAyC,EACF,EACCzC,EAAmBA,IAAT,MAA4BA,EAAQ,OAAhB,IAAuBA,EAAU,KACvDA,IAAT,OACInW,EAAe,cAAgB,CAC/B,WAAYmW,EACZ,YACWwB,KAAT,KACI,CAAE,GAAIC,GAAe,SAAUC,EAAoB,EACnD,KACN,UAAW,UACX,gBAAiB,IACnB,EACCnV,EAAcmU,GAAkCV,CAAO,EACvDzT,EAAY,OAAS1C,EACrBA,EAAe,MAAQ0C,EACvB+V,GAAuBzY,EACvB0Y,GAAyB,OAC3BvC,EAAU,KACFA,IAAT,KAAkB,MAAM2C,GAAyB9Y,CAAc,EACnE,OAAAilB,GAA2B9O,CAAO,EAC7BnW,EAAe,MAAQ,GACvBA,EAAe,MAAQ,UACrB,IACT,CACA,IAAIy0B,EAAsBxE,EAAU,SAEpC,OADAA,EAAYA,EAAU,SAClBuE,GAEA7P,GAA4B3kB,CAAc,EACzCw0B,EAAex0B,EAAe,KAC9By0B,EAAsBrB,GACrB,CAAE,KAAM,SAAU,SAAUqB,CAAoB,EAChDD,CACF,EACCvE,EAAYxZ,GACXwZ,EACAuE,EACA9xB,EACA,IACF,EACC+xB,EAAoB,OAASz0B,EAC7BiwB,EAAU,OAASjwB,EACnBy0B,EAAoB,QAAUxE,EAC9BjwB,EAAe,MAAQy0B,EACvBxE,EAAYjwB,EAAe,MAC3BiwB,EAAU,cAAgBkE,GAA4BzxB,CAAW,EACjEutB,EAAU,WAAamE,GACtBje,EACAoD,EACA7W,CACF,EACC1C,EAAe,cAAgBk0B,GAChClB,GAA0B,KAAM/C,CAAS,IAE7C3L,GAA+BtkB,CAAc,EACtC00B,GAA6B10B,EAAgBy0B,CAAmB,EACzE,CACA,IAAI9J,EAAYxU,EAAQ,cACxB,GACWwU,IAAT,OACE8J,EAAsB9J,EAAU,WAAsB8J,IAAT,MAC/C,CACA,GAAIlB,EACFvzB,EAAe,MAAQ,KAClBskB,GAA+BtkB,CAAc,EAC7CA,EAAe,OAAS,KACxBA,EAAiB20B,GAChBxe,EACAnW,EACA0C,CACF,GACS1C,EAAe,gBAAxB,MACG2kB,GAA4B3kB,CAAc,EAC1CA,EAAe,MAAQmW,EAAQ,MAC/BnW,EAAe,OAAS,IACxBA,EAAiB,OACjB2kB,GAA4B3kB,CAAc,EAC1Cy0B,EAAsBxE,EAAU,SAChCuE,EAAex0B,EAAe,KAC9BiwB,EAAYmD,GACX,CAAE,KAAM,UAAW,SAAUnD,EAAU,QAAS,EAChDuE,CACF,EACCC,EAAsBhe,GACrBge,EACAD,EACA9xB,EACA,IACF,EACC+xB,EAAoB,OAAS,EAC7BxE,EAAU,OAASjwB,EACnBy0B,EAAoB,OAASz0B,EAC7BiwB,EAAU,QAAUwE,EACpBz0B,EAAe,MAAQiwB,EACxBtO,GACE3hB,EACAmW,EAAQ,MACR,KACAzT,CACF,EACCutB,EAAYjwB,EAAe,MAC3BiwB,EAAU,cACTkE,GAA4BzxB,CAAW,EACxCutB,EAAU,WAAamE,GACtBje,EACAoD,EACA7W,CACF,EACC1C,EAAe,cAAgBk0B,GAC/Bl0B,EAAiBgzB,GAA0B,KAAM/C,CAAS,WAEhE3L,GAA+BtkB,CAAc,EAC9CilB,GAA2BwP,CAAmB,EAC9C,CAIA,GAHAlb,EACEkb,EAAoB,aACpBA,EAAoB,YAAY,QAC9Blb,EAAiB,IAAIqb,EAASrb,EAAgB,KAClDA,EAAkBqb,EAClB3E,EAAY,MAAMr2B,EAAuB,GAAG,CAAC,EAC7Cq2B,EAAU,MAAQ,GAClBA,EAAU,OAAS1W,EACnBR,GAAoB,CAAE,MAAOkX,EAAW,OAAQ,KAAM,MAAO,IAAK,CAAC,EACnEjwB,EAAiB20B,GACfxe,EACAnW,EACA0C,CACF,CACF,SACG8jB,IACCxL,GAA8B7E,EAASnW,EAAgB0C,EAAa,EAAE,EACvE6W,GAAyB7W,EAAcyT,EAAQ,cAA7B,EACnBqQ,IAAoBjN,EACpB,CAEA,GADAA,EAAkBiE,GAEPjE,IAAT,OACE0W,EAAY1rB,GAA0BgV,EAAiB7W,CAAW,EAC9DutB,IAAN,GAAmBA,IAActF,EAAU,WAE3C,MACIA,EAAU,UAAYsF,EACxB5a,GAA+Bc,EAAS8Z,CAAS,EACjDpG,GAAsBtQ,EAAiBpD,EAAS8Z,CAAS,EACzDkC,GAEJnN,GAA0ByP,CAAmB,GAC3C3C,GAAgC,EAClC9xB,EAAiB20B,GACfxe,EACAnW,EACA0C,CACF,CACF,MACEsiB,GAA0ByP,CAAmB,GACvCz0B,EAAe,OAAS,IACzBA,EAAe,MAAQmW,EAAQ,MAC/BnW,EAAiB,OAChBmW,EAAUwU,EAAU,YACrBjS,GAAyBkB,GACxB6a,EAAoB,WACtB,EACChc,GAAuBzY,EACvBgJ,GAAc,GACd2P,GAAkB,KAClBC,GAAyB,GACjBzC,IAAT,MACEoC,GAA4BvY,EAAgBmW,CAAO,EACpDnW,EAAiB00B,GAChB10B,EACAiwB,EAAU,QACZ,EACCjwB,EAAe,OAAS,MAC/B,OAAOA,CACT,CACA,OAAIw0B,GAEA7P,GAA4B3kB,CAAc,EACzCy0B,EAAsBxE,EAAU,SAChCuE,EAAex0B,EAAe,KAC9B2qB,EAAYxU,EAAQ,MACpBye,EAASjK,EAAU,QACnBsF,EAAY/Z,GAAqByU,EAAW,CAC3C,KAAM,SACN,SAAUsF,EAAU,QACtB,CAAC,EACAA,EAAU,aAAetF,EAAU,aAAe,SAC1CiK,IAAT,KACKH,EAAsBve,GACrB0e,EACAH,CACF,GACEA,EAAsBhe,GACtBge,EACAD,EACA9xB,EACA,IACF,EACC+xB,EAAoB,OAAS,GACjCA,EAAoB,OAASz0B,EAC7BiwB,EAAU,OAASjwB,EACnBiwB,EAAU,QAAUwE,EACpBz0B,EAAe,MAAQiwB,EACxB+C,GAA0B,KAAM/C,CAAS,EACxCA,EAAYjwB,EAAe,MAC3By0B,EAAsBte,EAAQ,MAAM,cAC5Bse,IAAT,KACKA,EAAsBN,GAA4BzxB,CAAW,GAC5D8xB,EAAeC,EAAoB,UAC5BD,IAAT,MACM7J,EAAY3O,GAAa,cAC1BwY,EACCA,EAAa,SAAW7J,EACpB,CAAE,OAAQA,EAAW,KAAMA,CAAU,EACrC6J,GACLA,EAAe5W,GAAkB,EACrC6W,EAAsB,CACrB,UAAWA,EAAoB,UAAY/xB,EAC3C,UAAW8xB,CACb,GACHvE,EAAU,cAAgBwE,EAC1BxE,EAAU,WAAamE,GACtBje,EACAoD,EACA7W,CACF,EACC1C,EAAe,cAAgBk0B,GAChClB,GAA0B7c,EAAQ,MAAO8Z,CAAS,IAEtD3L,GAA+BtkB,CAAc,EAC7C0C,EAAcyT,EAAQ,MACtBA,EAAUzT,EAAY,QACtBA,EAAcwT,GAAqBxT,EAAa,CAC9C,KAAM,UACN,SAAUutB,EAAU,QACtB,CAAC,EACDvtB,EAAY,OAAS1C,EACrB0C,EAAY,QAAU,KACbyT,IAAT,OACIoD,EAAkBvZ,EAAe,UAC1BuZ,IAAT,MACMvZ,EAAe,UAAY,CAACmW,CAAO,EAAKnW,EAAe,OAAS,IAClEuZ,EAAgB,KAAKpD,CAAO,GAClCnW,EAAe,MAAQ0C,EACvB1C,EAAe,cAAgB,KACxB0C,EACT,CACA,SAASgyB,GAA6B10B,EAAgB60B,EAAiB,CACrE,OAAAA,EAAkBzB,GAChB,CAAE,KAAM,UAAW,SAAUyB,CAAgB,EAC7C70B,EAAe,IACjB,EACA60B,EAAgB,OAAS70B,EACjBA,EAAe,MAAQ60B,CACjC,CACA,SAASzB,GAAkC0B,EAAgBhf,EAAM,CAC/D,OAAAgf,EAAiB/e,GAAqB,GAAI+e,EAAgB,KAAMhf,CAAI,EACpEgf,EAAe,MAAQ,EAChBA,CACT,CACA,SAASH,GACPxe,EACAnW,EACA0C,EACA,CACA,OAAAif,GAAqB3hB,EAAgBmW,EAAQ,MAAO,KAAMzT,CAAW,EACrEyT,EAAUue,GACR10B,EACAA,EAAe,aAAa,QAC9B,EACAmW,EAAQ,OAAS,EACjBnW,EAAe,cAAgB,KACxBmW,CACT,CACA,SAAS4e,GAA4B56B,EAAOuI,EAAa+X,EAAiB,CACxEtgB,EAAM,OAASuI,EACf,IAAI/H,EAAYR,EAAM,UACbQ,IAAT,OAAuBA,EAAU,OAAS+H,GAC1C8X,GAAgCrgB,EAAM,OAAQuI,EAAa+X,CAAe,CAC5E,CACA,SAASua,GACPh1B,EACAi1B,EACAC,EACAC,EACAC,EACA5d,EACA,CACA,IAAI6d,EAAcr1B,EAAe,cACxBq1B,IAAT,KACKr1B,EAAe,cAAgB,CAC9B,YAAai1B,EACb,UAAW,KACX,mBAAoB,EACpB,KAAME,EACN,KAAMD,EACN,SAAUE,EACV,cAAe5d,CACjB,GACE6d,EAAY,YAAcJ,EAC3BI,EAAY,UAAY,KACxBA,EAAY,mBAAqB,EACjCA,EAAY,KAAOF,EACnBE,EAAY,KAAOH,EACnBG,EAAY,SAAWD,EACvBC,EAAY,cAAgB7d,EACnC,CACA,SAAS8d,GAA4Bnf,EAASnW,EAAgB0C,EAAa,CACzE,IAAIutB,EAAYjwB,EAAe,aAC7Bu1B,EAActF,EAAU,YACxBmF,EAAWnF,EAAU,KACvBA,EAAYA,EAAU,SACtB,IAAIuF,EAAkBhR,GAAoB,QACxCiR,GAA6BD,EAAkB,KAAzB,EAQxB,GAPAC,GACMD,EAAmBA,EAAkB,EAAK,EAC3Cx1B,EAAe,OAAS,KACxBw1B,GAAmB,EACxBl4B,GAAKknB,GAAqBgR,CAAe,EACzCpD,GAAkBjc,EAASnW,EAAgBiwB,EAAWvtB,CAAW,EACjEutB,EAAYjnB,GAAcwO,GAAgB,EACtC,CAACie,GAAgCtf,IAAT,OAA2BA,EAAQ,MAAQ,OAAvB,EAC9Cvb,EAAG,IAAKub,EAAUnW,EAAe,MAAgBmW,IAAT,MAAoB,CAC1D,GAAWA,EAAQ,MAAf,GACOA,EAAQ,gBAAjB,MACE4e,GAA4B5e,EAASzT,EAAa1C,CAAc,UACpDmW,EAAQ,MAAf,GACP4e,GAA4B5e,EAASzT,EAAa1C,CAAc,UAChDmW,EAAQ,QAAjB,KAAwB,CAC/BA,EAAQ,MAAM,OAASA,EACvBA,EAAUA,EAAQ,MAClB,QACF,CACA,GAAIA,IAAYnW,EAAgB,MAAMpF,EACtC,KAAgBub,EAAQ,UAAjB,MAA4B,CACjC,GAAaA,EAAQ,SAAjB,MAA2BA,EAAQ,SAAWnW,EAChD,MAAMpF,EACRub,EAAUA,EAAQ,MACpB,CACAA,EAAQ,QAAQ,OAASA,EAAQ,OACjCA,EAAUA,EAAQ,OACpB,CACF,OAAQof,EAAa,CACnB,IAAK,WAEH,IADA7yB,EAAc1C,EAAe,MACxBu1B,EAAc,KAAe7yB,IAAT,MACtByT,EAAUzT,EAAY,UACZyT,IAAT,MACW0O,GAAmB1O,CAAO,IAAnC,OACCof,EAAc7yB,GAChBA,EAAcA,EAAY,QAC/BA,EAAc6yB,EACL7yB,IAAT,MACM6yB,EAAcv1B,EAAe,MAASA,EAAe,MAAQ,OAC7Du1B,EAAc7yB,EAAY,QAAWA,EAAY,QAAU,MACjEsyB,GACEh1B,EACA,GACAu1B,EACA7yB,EACA0yB,EACAnF,CACF,EACA,MACF,IAAK,YACL,IAAK,4BAGH,IAFAvtB,EAAc,KACd6yB,EAAcv1B,EAAe,MACxBA,EAAe,MAAQ,KAAeu1B,IAAT,MAAwB,CAExD,GADApf,EAAUof,EAAY,UACTpf,IAAT,MAA6B0O,GAAmB1O,CAAO,IAAnC,KAAsC,CAC5DnW,EAAe,MAAQu1B,EACvB,KACF,CACApf,EAAUof,EAAY,QACtBA,EAAY,QAAU7yB,EACtBA,EAAc6yB,EACdA,EAAcpf,CAChB,CACA6e,GACEh1B,EACA,GACA0C,EACA,KACA0yB,EACAnF,CACF,EACA,MACF,IAAK,WACH+E,GACEh1B,EACA,GACA,KACA,KACA,OACAiwB,CACF,EACA,MACF,QACEjwB,EAAe,cAAgB,IACnC,CACA,OAAOA,EAAe,KACxB,CACA,SAASwyB,GAA6Brc,EAASnW,EAAgB0C,EAAa,CAG1E,GAFSyT,IAAT,OAAqBnW,EAAe,aAAemW,EAAQ,cAC3DsN,IAAkCzjB,EAAe,OACtC0C,EAAc1C,EAAe,cAApC,EACF,GAAamW,IAAT,MACF,GACG6E,GACC7E,EACAnW,EACA0C,EACA,EACF,GACOA,EAAc1C,EAAe,cAApC,EAEA,OAAO,SACJ,QAAO,KAChB,GAAamW,IAAT,MAAoBnW,EAAe,QAAUmW,EAAQ,MACvD,MAAM,MAAMvc,EAAuB,GAAG,CAAC,EACzC,GAAaoG,EAAe,QAAxB,KAA+B,CAIjC,IAHAmW,EAAUnW,EAAe,MACzB0C,EAAcwT,GAAqBC,EAASA,EAAQ,YAAY,EAChEnW,EAAe,MAAQ0C,EAClBA,EAAY,OAAS1C,EAAyBmW,EAAQ,UAAjB,MACvCA,EAAUA,EAAQ,QAChBzT,EAAcA,EAAY,QACzBwT,GAAqBC,EAASA,EAAQ,YAAY,EACnDzT,EAAY,OAAS1C,EAC1B0C,EAAY,QAAU,IACxB,CACA,OAAO1C,EAAe,KACxB,CACA,SAAS2yB,GAA8Bxc,EAASzT,EAAa,CAC3D,OAAWyT,EAAQ,MAAQzT,KAAvB,EAA4C,IAChDyT,EAAUA,EAAQ,aACX,GAASA,IAAT,MAAoBgF,GAAsBhF,CAAO,GAC1D,CACA,SAASuf,GACPvf,EACAnW,EACA0C,EACA,CACA,OAAQ1C,EAAe,IAAK,CAC1B,IAAK,GACHpC,GAAkBoC,EAAgBA,EAAe,UAAU,aAAa,EACxEoa,GAAapa,EAAgBgc,GAAc7F,EAAQ,cAAc,KAAK,EACtE0D,GAAoB,EACpB,MACF,IAAK,IACL,IAAK,GACH5b,GAAgB+B,CAAc,EAC9B,MACF,IAAK,GACHpC,GAAkBoC,EAAgBA,EAAe,UAAU,aAAa,EACxE,MACF,IAAK,IACHoa,GACEpa,EACAA,EAAe,KACfA,EAAe,cAAc,KAC/B,EACA,MACF,IAAK,IACH,GAAaA,EAAe,gBAAxB,KACF,OACGA,EAAe,OAAS,IACzBykB,GAAsCzkB,CAAc,EACpD,KAEJ,MACF,IAAK,IACH,IAAI21B,EAAY31B,EAAe,cAC/B,GAAa21B,IAAT,KACF,OAAaA,EAAU,aAAnB,MAEArR,GAA+BtkB,CAAc,EAC5CA,EAAe,OAAS,IACzB,OAEO0C,EAAc1C,EAAe,MAAM,cAA1C,EACKu0B,GAAwBpe,EAASnW,EAAgB0C,CAAW,GACrE4hB,GAA+BtkB,CAAc,EAC7CmW,EAAUqc,GACRrc,EACAnW,EACA0C,CACF,EACgByT,IAAT,KAAmBA,EAAQ,QAAU,MAE9CmO,GAA+BtkB,CAAc,EAC7C,MACF,IAAK,IACH,IAAI41B,GAA0Bzf,EAAQ,MAAQ,OAAvB,EAUvB,GATAwf,GAAmBjzB,EAAc1C,EAAe,cAApC,EACZ21B,IACG3a,GACC7E,EACAnW,EACA0C,EACA,EACF,EACCizB,GAAmBjzB,EAAc1C,EAAe,cAApC,GACX41B,EAAkB,CACpB,GAAID,EACF,OAAOL,GACLnf,EACAnW,EACA0C,CACF,EACF1C,EAAe,OAAS,GAC1B,CAOA,GANA41B,EAAmB51B,EAAe,cACzB41B,IAAT,OACIA,EAAiB,UAAY,KAC9BA,EAAiB,KAAO,KACxBA,EAAiB,WAAa,MACjCt4B,GAAKknB,GAAqBA,GAAoB,OAAO,EACjDmR,EAAW,MACV,OAAO,KACd,IAAK,IACH,OACG31B,EAAe,MAAQ,EACxB8yB,GACE3c,EACAnW,EACA0C,EACA1C,EAAe,YACjB,EAEJ,IAAK,IACHoa,GAAapa,EAAgBgc,GAAc7F,EAAQ,cAAc,KAAK,CAC1E,CACA,OAAOqc,GAA6Brc,EAASnW,EAAgB0C,CAAW,CAC1E,CACA,SAASmzB,GAAU1f,EAASnW,EAAgB0C,EAAa,CACvD,GAAayT,IAAT,KACF,GAAIA,EAAQ,gBAAkBnW,EAAe,aAC3CwmB,GAAmB,OAChB,CACH,GACE,CAACmM,GAA8Bxc,EAASzT,CAAW,IAC5C1C,EAAe,MAAQ,OAA9B,EAEA,OACGwmB,GAAmB,GACpBkP,GACEvf,EACAnW,EACA0C,CACF,EAEJ8jB,IAA0BrQ,EAAQ,MAAQ,UAAvB,CACrB,MAECqQ,GAAmB,GAClBxd,KACShJ,EAAe,MAAQ,WAA9B,GACAgY,GAAWhY,EAAgBwX,GAAexX,EAAe,KAAK,EAEpE,OADAA,EAAe,MAAQ,EACfA,EAAe,IAAK,CAC1B,IAAK,IACHpF,EAAG,CACD,IAAIuQ,EAAQnL,EAAe,aAG3B,GAFAmW,EAAUuI,GAAY1e,EAAe,WAAW,EAChDA,EAAe,KAAOmW,EACH,OAAOA,GAAtB,WACFH,GAAgBG,CAAO,GACjBhL,EAAQqlB,GAA2Bra,EAAShL,CAAK,EAClDnL,EAAe,IAAM,EACrBA,EAAiB4zB,GAChB,KACA5zB,EACAmW,EACAhL,EACAzI,CACF,IACE1C,EAAe,IAAM,EACtBA,EAAiB6yB,GAChB,KACA7yB,EACAmW,EACAhL,EACAzI,CACF,OACD,CACH,GAAmCyT,GAAT,KAAkB,CAC1C,IAAI2f,EAAW3f,EAAQ,SACvB,GAAI2f,IAAaj6B,GAAwB,CACvCmE,EAAe,IAAM,GACrBA,EAAiBsyB,GACf,KACAtyB,EACAmW,EACAhL,EACAzI,CACF,EACA,MAAM9H,CACR,SAAWk7B,IAAa95B,GAAiB,CACvCgE,EAAe,IAAM,GACrBA,EAAiByyB,GACf,KACAzyB,EACAmW,EACAhL,EACAzI,CACF,EACA,MAAM9H,CACR,CACF,CACA,MAAAoF,EAAiBxD,GAAyB2Z,CAAO,GAAKA,EAChD,MAAMvc,EAAuB,IAAKoG,EAAgB,EAAE,CAAC,CAC7D,CACF,CACA,OAAOA,EACT,IAAK,GACH,OAAO6yB,GACL1c,EACAnW,EACAA,EAAe,KACfA,EAAe,aACf0C,CACF,EACF,IAAK,GACH,OACGyI,EAAQnL,EAAe,KACvB81B,EAAWtF,GACVrlB,EACAnL,EAAe,YACjB,EACA4zB,GACEzd,EACAnW,EACAmL,EACA2qB,EACApzB,CACF,EAEJ,IAAK,GACH9H,EAAG,CAKD,GAJAgD,GACEoC,EACAA,EAAe,UAAU,aAC3B,EACamW,IAAT,KAAkB,MAAM,MAAMvc,EAAuB,GAAG,CAAC,EAC7DuR,EAAQnL,EAAe,aACvB,IAAI2qB,EAAY3qB,EAAe,cAC/B81B,EAAWnL,EAAU,QACrB5I,GAAiB5L,EAASnW,CAAc,EACxC8iB,GAAmB9iB,EAAgBmL,EAAO,KAAMzI,CAAW,EAC3D,IAAIwoB,EAAYlrB,EAAe,cAY/B,GAXAmL,EAAQ+f,EAAU,MAClB9Q,GAAapa,EAAgBgc,GAAc7Q,CAAK,EAChDA,IAAUwf,EAAU,OAClBjQ,GACE1a,EACA,CAACgc,EAAY,EACbtZ,EACA,EACF,EACFkgB,GAA4C,EAC5CzX,EAAQ+f,EAAU,QACdP,EAAU,aACZ,GACIA,EAAY,CACZ,QAASxf,EACT,aAAc,GACd,MAAO+f,EAAU,KACnB,EACClrB,EAAe,YAAY,UAAY2qB,EACvC3qB,EAAe,cAAgB2qB,EAChC3qB,EAAe,MAAQ,IACvB,CACAA,EAAiBi0B,GACf9d,EACAnW,EACAmL,EACAzI,CACF,EACA,MAAM9H,CACR,SAAWuQ,IAAU2qB,EAAU,CAC7BA,EAAW5e,GACT,MAAMtd,EAAuB,GAAG,CAAC,EACjCoG,CACF,EACA+Y,GAAoB+c,CAAQ,EAC5B91B,EAAiBi0B,GACf9d,EACAnW,EACAmL,EACAzI,CACF,EACA,MAAM9H,CACR,KAuBE,KAtBAub,EAAUnW,EAAe,UAAU,cAC3BmW,EAAQ,WACT,EACHA,EAAUA,EAAQ,KAGlBA,EACaA,EAAQ,WAAnB,OACIA,EAAQ,cAAc,KACtBA,EAEVuC,GAAyBkB,GAAkBzD,EAAQ,UAAU,EAC7DsC,GAAuBzY,EACvBgJ,GAAc,GACd2P,GAAkB,KAClBC,GAAyB,GACzBlW,EAAckf,GACZ5hB,EACA,KACAmL,EACAzI,CACF,EACK1C,EAAe,MAAQ0C,EAAaA,GACtCA,EAAY,MAASA,EAAY,MAAQ,GAAM,KAC7CA,EAAcA,EAAY,YAE9B,CAEH,GADAmX,GAAoB,EAChB1O,IAAU2qB,EAAU,CACtB91B,EAAiBwyB,GACfrc,EACAnW,EACA0C,CACF,EACA,MAAM9H,CACR,CACAw3B,GAAkBjc,EAASnW,EAAgBmL,EAAOzI,CAAW,CAC/D,CACA1C,EAAiBA,EAAe,KAClC,CACA,OAAOA,EACT,IAAK,IACH,OACE0zB,GAAQvd,EAASnW,CAAc,EACtBmW,IAAT,MACKzT,EAAcqzB,GACb/1B,EAAe,KACf,KACAA,EAAe,aACf,IACF,GACGA,EAAe,cAAgB0C,EAChCsG,KACEtG,EAAc1C,EAAe,KAC9BmW,EAAUnW,EAAe,aACzBmL,EAAQ6qB,GACPt4B,GAAwB,OAC1B,EAAE,cAAcgF,CAAW,EAC1ByI,EAAMjG,EAAmB,EAAIlF,EAC7BmL,EAAMhG,EAAgB,EAAIgR,EAC3B8f,GAAqB9qB,EAAOzI,EAAayT,CAAO,EAChD9P,GAAoB8E,CAAK,EACxBnL,EAAe,UAAYmL,GAC7BnL,EAAe,cAAgB+1B,GAC9B/1B,EAAe,KACfmW,EAAQ,cACRnW,EAAe,aACfmW,EAAQ,aACV,EACJ,KAEJ,IAAK,IACH,OACElY,GAAgB+B,CAAc,EACrBmW,IAAT,MACEnN,KACEmC,EAAQnL,EAAe,UACvBk2B,GACEl2B,EAAe,KACfA,EAAe,aACftC,GAAwB,OAC1B,EACD+a,GAAuBzY,EACvB4Y,GAAyB,GACzBkd,EAAWpd,GACZgB,GAAiB1Z,EAAe,IAAI,GAC9B2Z,GAA8Cmc,EAC/Cpd,GAAyBkB,GAAkBzO,EAAM,UAAU,GAC3DuN,GAAyBod,GAChC1D,GACEjc,EACAnW,EACAA,EAAe,aAAa,SAC5B0C,CACF,EACAgxB,GAAQvd,EAASnW,CAAc,EACtBmW,IAAT,OAAqBnW,EAAe,OAAS,SAC7CA,EAAe,MAEnB,IAAK,GACH,OAAamW,IAAT,MAAoBnN,MACjB8sB,EAAW3qB,EAAQuN,MACrBvN,EAAQgrB,GACPhrB,EACAnL,EAAe,KACfA,EAAe,aACf4Y,EACF,EACWzN,IAAT,MACMnL,EAAe,UAAYmL,EAC5BsN,GAAuBzY,EACvB0Y,GAAyBkB,GAAkBzO,EAAM,UAAU,EAC3DyN,GAAyB,GACzBkd,EAAW,IACXA,EAAW,IACpBA,GAAYhd,GAAyB9Y,CAAc,GAErD/B,GAAgB+B,CAAc,EAC9B81B,EAAW91B,EAAe,KAC1B2qB,EAAY3qB,EAAe,aAC3BkrB,EAAqB/U,IAAT,KAAmBA,EAAQ,cAAgB,KACvDhL,EAAQwf,EAAU,SAClBnR,GAAqBsc,EAAUnL,CAAS,EACnCxf,EAAQ,KACA+f,IAAT,MACA1R,GAAqBsc,EAAU5K,CAAS,IACvClrB,EAAe,OAAS,IACpBA,EAAe,gBAAxB,OACI81B,EAAW/P,GACX5P,EACAnW,EACA2mB,GACA,KACA,KACAjkB,CACF,EACCrE,GAAsB,cAAgBy3B,GACzCpC,GAAQvd,EAASnW,CAAc,EAC/BoyB,GAAkBjc,EAASnW,EAAgBmL,EAAOzI,CAAW,EACtD1C,EAAe,MACxB,IAAK,GACH,OAAamW,IAAT,MAAoBnN,MACjBmN,EAAUzT,EAAcgW,MAC1BhW,EAAc0zB,GACb1zB,EACA1C,EAAe,aACf4Y,EACF,EACWlW,IAAT,MACM1C,EAAe,UAAY0C,EAC5B+V,GAAuBzY,EACvB0Y,GAAyB,KACzBvC,EAAU,IACVA,EAAU,IACnBA,GAAW2C,GAAyB9Y,CAAc,GAE7C,KACT,IAAK,IACH,OAAOu0B,GAAwBpe,EAASnW,EAAgB0C,CAAW,EACrE,IAAK,GACH,OACE9E,GACEoC,EACAA,EAAe,UAAU,aAC3B,EACCmL,EAAQnL,EAAe,aACfmW,IAAT,KACKnW,EAAe,MAAQ2hB,GACtB3hB,EACA,KACAmL,EACAzI,CACF,EACA0vB,GAAkBjc,EAASnW,EAAgBmL,EAAOzI,CAAW,EACjE1C,EAAe,MAEnB,IAAK,IACH,OAAOsyB,GACLnc,EACAnW,EACAA,EAAe,KACfA,EAAe,aACf0C,CACF,EACF,IAAK,GACH,OACE0vB,GACEjc,EACAnW,EACAA,EAAe,aACf0C,CACF,EACA1C,EAAe,MAEnB,IAAK,GACH,OACEoyB,GACEjc,EACAnW,EACAA,EAAe,aAAa,SAC5B0C,CACF,EACA1C,EAAe,MAEnB,IAAK,IACH,OACEoyB,GACEjc,EACAnW,EACAA,EAAe,aAAa,SAC5B0C,CACF,EACA1C,EAAe,MAEnB,IAAK,IACH,OACGmL,EAAQnL,EAAe,aACxBoa,GAAapa,EAAgBA,EAAe,KAAMmL,EAAM,KAAK,EAC7DinB,GAAkBjc,EAASnW,EAAgBmL,EAAM,SAAUzI,CAAW,EACtE1C,EAAe,MAEnB,IAAK,GACH,OACG81B,EAAW91B,EAAe,KAAK,SAC/BmL,EAAQnL,EAAe,aAAa,SACrCqb,GAAqBrb,CAAc,EAClC81B,EAAWxa,GAAYwa,CAAQ,EAC/B3qB,EAAQA,EAAM2qB,CAAQ,EACtB91B,EAAe,OAAS,EACzBoyB,GAAkBjc,EAASnW,EAAgBmL,EAAOzI,CAAW,EAC7D1C,EAAe,MAEnB,IAAK,IACH,OAAOyyB,GACLtc,EACAnW,EACAA,EAAe,KACfA,EAAe,aACf0C,CACF,EACF,IAAK,IACH,OAAOgwB,GACLvc,EACAnW,EACAA,EAAe,KACfA,EAAe,aACf0C,CACF,EACF,IAAK,IACH,OAAO4yB,GAA4Bnf,EAASnW,EAAgB0C,CAAW,EACzE,IAAK,IACH,OAAO4wB,GAAwBnd,EAASnW,EAAgB0C,CAAW,EACrE,IAAK,IACH,OAAOowB,GACL3c,EACAnW,EACA0C,EACA1C,EAAe,YACjB,EACF,IAAK,IACH,OACEqb,GAAqBrb,CAAc,EAClCmL,EAAQmQ,GAAYU,EAAY,EACxB7F,IAAT,MACM2f,EAAWxY,GAAkB,EACtBwY,IAAT,OACIA,EAAWtY,GACZmN,EAAY1O,GAAY,EACxB6Z,EAAS,YAAcnL,EACxBA,EAAU,WACDA,IAAT,OAAuBmL,EAAS,kBAAoBpzB,GACnDozB,EAAWnL,GACb3qB,EAAe,cAAgB,CAAE,OAAQmL,EAAO,MAAO2qB,CAAS,EACjEhU,GAAsB9hB,CAAc,EACpCoa,GAAapa,EAAgBgc,GAAc8Z,CAAQ,KAC3C3f,EAAQ,MAAQzT,KAAvB,IACEqf,GAAiB5L,EAASnW,CAAc,EACzC8iB,GAAmB9iB,EAAgB,KAAM,KAAM0C,CAAW,EAC1DkgB,GAA4C,GAC7CkT,EAAW3f,EAAQ,cACnBwU,EAAY3qB,EAAe,cAC5B81B,EAAS,SAAW3qB,GACd2qB,EAAW,CAAE,OAAQ3qB,EAAO,MAAOA,CAAM,EAC1CnL,EAAe,cAAgB81B,EAC1B91B,EAAe,QAArB,IACGA,EAAe,cACdA,EAAe,YAAY,UACzB81B,GACN1b,GAAapa,EAAgBgc,GAAc7Q,CAAK,IAC9CA,EAAQwf,EAAU,MACpBvQ,GAAapa,EAAgBgc,GAAc7Q,CAAK,EAChDA,IAAU2qB,EAAS,OACjBpb,GACE1a,EACA,CAACgc,EAAY,EACbtZ,EACA,EACF,IACV0vB,GACEjc,EACAnW,EACAA,EAAe,aAAa,SAC5B0C,CACF,EACA1C,EAAe,MAEnB,IAAK,IACH,MAAMA,EAAe,YACzB,CACA,MAAM,MAAMpG,EAAuB,IAAKoG,EAAe,GAAG,CAAC,CAC7D,CACA,SAASq2B,GAAWr2B,EAAgB,CAClCA,EAAe,OAAS,CAC1B,CACA,SAASs2B,GACPt2B,EACAvD,EACA2zB,EACAC,EACA3tB,EACA,CAEA,IADKjG,GAAcuD,EAAe,KAAO,MAA7B,KAAmCvD,EAAO,IAClDA,GACF,GACIuD,EAAe,OAAS,UACzB0C,EAAc,aAAeA,EAE9B,GAAI1C,EAAe,UAAU,SAAUA,EAAe,OAAS,aACtDu2B,GAA6B,EAAGv2B,EAAe,OAAS,SAE/D,OACIye,GAAoBR,GACtBF,QAED/d,EAAe,OAAS,SACjC,CACA,SAASw2B,GAAkCx2B,EAAgBy2B,EAAU,CACnE,GAAqBA,EAAS,OAA1B,eAAyCA,EAAS,MAAM,QAAU,KAAhC,EACpCz2B,EAAe,OAAS,kBACfA,EAAe,OAAS,SAAW,CAAC02B,GAAgBD,CAAQ,EACrE,GAAIF,GAA6B,EAAGv2B,EAAe,OAAS,SAE1D,OACIye,GAAoBR,GACtBF,EAER,CACA,SAAS4Y,GAAoB32B,EAAgB42B,EAAY,CAC9CA,IAAT,OAAwB52B,EAAe,OAAS,GAChDA,EAAe,MAAQ,QACnB42B,EACO52B,EAAe,MAAtB,GAA4B8C,GAAmB,EAAI,UACpD9C,EAAe,OAAS42B,EACxBC,IAAqCD,EAC1C,CACA,SAASE,GAAmBzB,EAAa0B,EAA0B,CACjE,GAAI,CAAC/tB,GACH,OAAQqsB,EAAY,SAAU,CAC5B,IAAK,SACH0B,EAA2B1B,EAAY,KACvC,QAAS2B,EAAe,KAAeD,IAAT,MACnBA,EAAyB,YAAlC,OACGC,EAAeD,GACfA,EAA2BA,EAAyB,QAChDC,IAAT,KACK3B,EAAY,KAAO,KACnB2B,EAAa,QAAU,KAC5B,MACF,IAAK,YACHA,EAAe3B,EAAY,KAC3B,QAAS4B,EAAmB,KAAeD,IAAT,MACvBA,EAAa,YAAtB,OAAoCC,EAAmBD,GACpDA,EAAeA,EAAa,QACxBC,IAAT,KACIF,GAAqC1B,EAAY,OAArB,KACzBA,EAAY,KAAO,KACnBA,EAAY,KAAK,QAAU,KAC7B4B,EAAiB,QAAU,IACpC,CACJ,CACA,SAASC,GAAiBC,EAAe,CACvC,IAAIC,EACSD,EAAc,YAAvB,MACAA,EAAc,UAAU,QAAUA,EAAc,MAClDE,EAAgB,EAChBC,EAAe,EACjB,GAAIF,EACF,QAASG,EAAYJ,EAAc,MAAgBI,IAAT,MACvCF,GAAiBE,EAAU,MAAQA,EAAU,WAC3CD,GAAgBC,EAAU,aAAe,SACzCD,GAAgBC,EAAU,MAAQ,SAClCA,EAAU,OAASJ,EACnBI,EAAYA,EAAU,YAE3B,KAAKA,EAAYJ,EAAc,MAAgBI,IAAT,MACnCF,GAAiBE,EAAU,MAAQA,EAAU,WAC3CD,GAAgBC,EAAU,aAC1BD,GAAgBC,EAAU,MAC1BA,EAAU,OAASJ,EACnBI,EAAYA,EAAU,QAC7B,OAAAJ,EAAc,cAAgBG,EAC9BH,EAAc,WAAaE,EACpBD,CACT,CACA,SAASI,GAAarhB,EAASnW,EAAgB0C,EAAa,CAC1D,IAAI2tB,EAAWrwB,EAAe,aAE9B,OADAsY,GAAetY,CAAc,EACrBA,EAAe,IAAK,CAC1B,IAAK,IACL,IAAK,IACL,IAAK,GACL,IAAK,IACL,IAAK,GACL,IAAK,GACL,IAAK,IACL,IAAK,GACL,IAAK,IACH,OAAOk3B,GAAiBl3B,CAAc,EAAG,KAC3C,IAAK,GACH,OAAOk3B,GAAiBl3B,CAAc,EAAG,KAC3C,IAAK,GACH,OAAA0C,EAAc1C,EAAe,UAC7BqwB,EAAW,KACFla,IAAT,OAAqBka,EAAWla,EAAQ,cAAc,OACtDnW,EAAe,cAAc,QAAUqwB,IACpCrwB,EAAe,OAAS,MAC3Bua,GAAYyB,EAAY,EACxBhe,GAAiB,EACjB0E,EAAY,iBACRA,EAAY,QAAUA,EAAY,eACnCA,EAAY,eAAiB,OACnByT,IAAT,MAA6BA,EAAQ,QAAjB,QACtBmD,GAAkBtZ,CAAc,EAC5Bq2B,GAAWr2B,CAAc,EAChBmW,IAAT,MACCA,EAAQ,cAAc,eACdnW,EAAe,MAAQ,OAA9B,IACAA,EAAe,OAAS,KAC1B8Z,GAAoC,IAC1Cod,GAAiBl3B,CAAc,EACxB,KACT,IAAK,IACH,IAAIvD,EAAOuD,EAAe,KACxBy3B,EAAez3B,EAAe,cAChC,OAASmW,IAAT,MACKkgB,GAAWr2B,CAAc,EACjBy3B,IAAT,MACKP,GAAiBl3B,CAAc,EAChCw2B,GAAkCx2B,EAAgBy3B,CAAY,IAC7DP,GAAiBl3B,CAAc,EAChCs2B,GACEt2B,EACAvD,EACA,KACA4zB,EACA3tB,CACF,IACJ+0B,EACEA,IAAiBthB,EAAQ,eACtBkgB,GAAWr2B,CAAc,EAC1Bk3B,GAAiBl3B,CAAc,EAC/Bw2B,GAAkCx2B,EAAgBy3B,CAAY,IAC7DP,GAAiBl3B,CAAc,EAC/BA,EAAe,OAAS,YACzBmW,EAAUA,EAAQ,cACpBA,IAAYka,GAAYgG,GAAWr2B,CAAc,EACjDk3B,GAAiBl3B,CAAc,EAC/Bs2B,GACEt2B,EACAvD,EACA0Z,EACAka,EACA3tB,CACF,GACC,KACT,IAAK,IAIH,GAHAtE,GAAe4B,CAAc,EAC7B0C,EAAchF,GAAwB,QACtCjB,EAAOuD,EAAe,KACTmW,IAAT,MAA4BnW,EAAe,WAAvB,KACtBmW,EAAQ,gBAAkBka,GAAYgG,GAAWr2B,CAAc,MAC5D,CACH,GAAI,CAACqwB,EAAU,CACb,GAAarwB,EAAe,YAAxB,KACF,MAAM,MAAMpG,EAAuB,GAAG,CAAC,EACzC,OAAAs9B,GAAiBl3B,CAAc,EACxB,IACT,CACAmW,EAAU3Y,GAAmB,QAC7B8b,GAAkBtZ,CAAc,EAC5BgZ,GAA6BhZ,EAAgBmW,CAAO,GAClDA,EAAU+f,GAAyBz5B,EAAM4zB,EAAU3tB,CAAW,EAC/D1C,EAAe,UAAYmW,EAC5BkgB,GAAWr2B,CAAc,EAC/B,CACA,OAAAk3B,GAAiBl3B,CAAc,EACxB,KACT,IAAK,GAGH,GAFA5B,GAAe4B,CAAc,EAC7BvD,EAAOuD,EAAe,KACTmW,IAAT,MAA4BnW,EAAe,WAAvB,KACtBmW,EAAQ,gBAAkBka,GAAYgG,GAAWr2B,CAAc,MAC5D,CACH,GAAI,CAACqwB,EAAU,CACb,GAAarwB,EAAe,YAAxB,KACF,MAAM,MAAMpG,EAAuB,GAAG,CAAC,EACzC,OAAAs9B,GAAiBl3B,CAAc,EACxB,IACT,CAEA,GADAy3B,EAAej6B,GAAmB,QAC9B8b,GAAkBtZ,CAAc,EAClCgZ,GAA6BhZ,EAAgBy3B,CAAY,MACtD,CACH,IAAIC,EAAgB1B,GAClBt4B,GAAwB,OAC1B,EACA,OAAQ+5B,EAAc,CACpB,IAAK,GACHA,EAAeC,EAAc,gBAC3B,6BACAj7B,CACF,EACA,MACF,IAAK,GACHg7B,EAAeC,EAAc,gBAC3B,qCACAj7B,CACF,EACA,MACF,QACE,OAAQA,EAAM,CACZ,IAAK,MACHg7B,EAAeC,EAAc,gBAC3B,6BACAj7B,CACF,EACA,MACF,IAAK,OACHg7B,EAAeC,EAAc,gBAC3B,qCACAj7B,CACF,EACA,MACF,IAAK,SACHg7B,EAAeC,EAAc,cAAc,KAAK,EAChDD,EAAa,UAAY,qBACzBA,EAAeA,EAAa,YAC1BA,EAAa,UACf,EACA,MACF,IAAK,SACHA,EACe,OAAOpH,EAAS,IAA7B,SACIqH,EAAc,cAAc,SAAU,CACpC,GAAIrH,EAAS,EACf,CAAC,EACDqH,EAAc,cAAc,QAAQ,EAC1CrH,EAAS,SACJoH,EAAa,SAAW,GACzBpH,EAAS,OAASoH,EAAa,KAAOpH,EAAS,MACnD,MACF,QACEoH,EACe,OAAOpH,EAAS,IAA7B,SACIqH,EAAc,cAAcj7B,EAAM,CAAE,GAAI4zB,EAAS,EAAG,CAAC,EACrDqH,EAAc,cAAcj7B,CAAI,CAC1C,CACJ,CACAg7B,EAAavyB,EAAmB,EAAIlF,EACpCy3B,EAAatyB,EAAgB,EAAIkrB,EACjCz1B,EAAG,IACD88B,EAAgB13B,EAAe,MACtB03B,IAAT,MAEA,CACA,GAAUA,EAAc,MAApB,GAAiCA,EAAc,MAApB,EAC7BD,EAAa,YAAYC,EAAc,SAAS,UAE1CA,EAAc,MAApB,GACOA,EAAc,MAArB,IACSA,EAAc,QAAvB,KACA,CACAA,EAAc,MAAM,OAASA,EAC7BA,EAAgBA,EAAc,MAC9B,QACF,CACA,GAAIA,IAAkB13B,EAAgB,MAAMpF,EAC5C,KAAgB88B,EAAc,UAAvB,MAAkC,CACvC,GACWA,EAAc,SAAvB,MACAA,EAAc,SAAW13B,EAEzB,MAAMpF,EACR88B,EAAgBA,EAAc,MAChC,CACAA,EAAc,QAAQ,OAASA,EAAc,OAC7CA,EAAgBA,EAAc,OAChC,CACA13B,EAAe,UAAYy3B,EAC3B78B,EAAG,OACAq7B,GAAqBwB,EAAch7B,EAAM4zB,CAAQ,EAAG5zB,EACrD,CACA,IAAK,SACL,IAAK,QACL,IAAK,SACL,IAAK,WACH4zB,EAAW,CAAC,CAACA,EAAS,UACtB,MAAMz1B,EACR,IAAK,MACHy1B,EAAW,GACX,MAAMz1B,EACR,QACEy1B,EAAW,EACf,CACAA,GAAYgG,GAAWr2B,CAAc,CACvC,CACF,CACA,OAAAk3B,GAAiBl3B,CAAc,EAC/Bs2B,GACEt2B,EACAA,EAAe,KACNmW,IAAT,KAAmB,KAAOA,EAAQ,cAClCnW,EAAe,aACf0C,CACF,EACO,KACT,IAAK,GACH,GAAIyT,GAAmBnW,EAAe,WAAvB,KACbmW,EAAQ,gBAAkBka,GAAYgG,GAAWr2B,CAAc,MAC5D,CACH,GAAiB,OAAOqwB,GAApB,UAAyCrwB,EAAe,YAAxB,KAClC,MAAM,MAAMpG,EAAuB,GAAG,CAAC,EAEzC,GADAuc,EAAUzY,GAAwB,QAC9B4b,GAAkBtZ,CAAc,EAAG,CAKrC,GAJAmW,EAAUnW,EAAe,UACzB0C,EAAc1C,EAAe,cAC7BqwB,EAAW,KACX5zB,EAAOgc,GACMhc,IAAT,KACF,OAAQA,EAAK,IAAK,CAChB,IAAK,IACL,IAAK,GACH4zB,EAAW5zB,EAAK,aACpB,CACF0Z,EAAQjR,EAAmB,EAAIlF,EAC/BmW,EACE,GAAAA,EAAQ,YAAczT,GACZ2tB,IAAT,MAA4BA,EAAS,2BAAhB,IACtBjX,GAAsBjD,EAAQ,UAAWzT,CAAW,GAGtDyT,GAAW2C,GAAyB9Y,EAAgB,EAAE,CACxD,MACGmW,EACC6f,GAAkC7f,CAAO,EAAE,eACzCka,CACF,EACCla,EAAQjR,EAAmB,EAAIlF,EAC/BA,EAAe,UAAYmW,CAClC,CACA,OAAA+gB,GAAiBl3B,CAAc,EACxB,KACT,IAAK,IAEH,GADA0C,EAAc1C,EAAe,cAChBmW,IAAT,MAA6BA,EAAQ,gBAAjB,KAAgC,CAEtD,GADAka,EAAW/W,GAAkBtZ,CAAc,EAC9B0C,IAAT,KAAsB,CACxB,GAAayT,IAAT,KAAkB,CACpB,GAAI,CAACka,EAAU,MAAM,MAAMz2B,EAAuB,GAAG,CAAC,EAGtD,GAFAuc,EAAUnW,EAAe,cACzBmW,EAAmBA,IAAT,KAAmBA,EAAQ,WAAa,KAC9C,CAACA,EAAS,MAAM,MAAMvc,EAAuB,GAAG,CAAC,EACrDuc,EAAQjR,EAAmB,EAAIlF,CACjC,MACE6Z,GAAoB,GACX7Z,EAAe,MAAQ,OAA9B,IACGA,EAAe,cAAgB,MACjCA,EAAe,OAAS,EAC7Bk3B,GAAiBl3B,CAAc,EAC/BmW,EAAU,EACZ,MACGzT,EAAcoX,GAAoC,EACxC3D,IAAT,MACWA,EAAQ,gBAAjB,OACCA,EAAQ,cAAc,gBAAkBzT,GAC1CyT,EAAU,GACf,GAAI,CAACA,EACH,OAAInW,EAAe,MAAQ,KAClB4kB,GAAmB5kB,CAAc,EAAGA,IAC7C4kB,GAAmB5kB,CAAc,EAC1B,MAET,IAAWA,EAAe,MAAQ,OAA9B,EACF,MAAM,MAAMpG,EAAuB,GAAG,CAAC,CAC3C,CACA,OAAAs9B,GAAiBl3B,CAAc,EACxB,KACT,IAAK,IAEH,GADAqwB,EAAWrwB,EAAe,cAEfmW,IAAT,MACUA,EAAQ,gBAAjB,MACUA,EAAQ,cAAc,aAA/B,KACF,CAEA,GADA1Z,EAAO6c,GAAkBtZ,CAAc,EAC1BqwB,IAAT,MAA8BA,EAAS,aAAlB,KAA8B,CACrD,GAAala,IAAT,KAAkB,CACpB,GAAI,CAAC1Z,EAAM,MAAM,MAAM7C,EAAuB,GAAG,CAAC,EAGlD,GAFA6C,EAAOuD,EAAe,cACtBvD,EAAgBA,IAAT,KAAgBA,EAAK,WAAa,KACrC,CAACA,EAAM,MAAM,MAAM7C,EAAuB,GAAG,CAAC,EAClD6C,EAAKyI,EAAmB,EAAIlF,CAC9B,MACE6Z,GAAoB,GACX7Z,EAAe,MAAQ,OAA9B,IACGA,EAAe,cAAgB,MACjCA,EAAe,OAAS,EAC7Bk3B,GAAiBl3B,CAAc,EAC/BvD,EAAO,EACT,MACGA,EAAOqd,GAAoC,EACjC3D,IAAT,MACWA,EAAQ,gBAAjB,OACCA,EAAQ,cAAc,gBAAkB1Z,GAC1CA,EAAO,GACZ,GAAI,CAACA,EACH,OAAIuD,EAAe,MAAQ,KAClB4kB,GAAmB5kB,CAAc,EAAGA,IAC7C4kB,GAAmB5kB,CAAc,EAC1B,KAEX,CAEA,OADA4kB,GAAmB5kB,CAAc,GACtBA,EAAe,MAAQ,OAA9B,GACMA,EAAe,MAAQ0C,EAAc1C,IAC/C0C,EAAuB2tB,IAAT,KACdla,EAAmBA,IAAT,MAA6BA,EAAQ,gBAAjB,KAC9BzT,IACI2tB,EAAWrwB,EAAe,MAC3BvD,EAAO,KACC4zB,EAAS,YAAlB,MACWA,EAAS,UAAU,gBAA5B,MACSA,EAAS,UAAU,cAAc,YAA1C,OACC5zB,EAAO4zB,EAAS,UAAU,cAAc,UAAU,MACpDoH,EAAe,KACPpH,EAAS,gBAAlB,MACWA,EAAS,cAAc,YAAhC,OACCoH,EAAepH,EAAS,cAAc,UAAU,MACnDoH,IAAiBh7B,IAAS4zB,EAAS,OAAS,OAC9C3tB,IAAgByT,GACdzT,IACC1C,EAAe,MAAM,OAAS,MACjC22B,GAAoB32B,EAAgBA,EAAe,WAAW,EAC9Dk3B,GAAiBl3B,CAAc,EACxB,MACT,IAAK,GACH,OACEhC,GAAiB,EACRmY,IAAT,MACEwhB,GAA2B33B,EAAe,UAAU,aAAa,EACnEk3B,GAAiBl3B,CAAc,EAC/B,KAEJ,IAAK,IACH,OACEua,GAAYva,EAAe,IAAI,EAAGk3B,GAAiBl3B,CAAc,EAAG,KAExE,IAAK,IAGH,GAFA5C,GAAIonB,EAAmB,EACvB6L,EAAWrwB,EAAe,cACbqwB,IAAT,KAAmB,OAAO6G,GAAiBl3B,CAAc,EAAG,KAGhE,GAFAvD,GAAcuD,EAAe,MAAQ,OAA9B,EACPy3B,EAAepH,EAAS,UACXoH,IAAT,KACF,GAAIh7B,EAAMq6B,GAAmBzG,EAAU,EAAE,MACpC,CACH,GACQ0B,KAAN,GACU5b,IAAT,OAA2BA,EAAQ,MAAQ,OAAvB,EAErB,IAAKA,EAAUnW,EAAe,MAAgBmW,IAAT,MAAoB,CAEvD,GADAshB,EAAe5S,GAAmB1O,CAAO,EAC5BshB,IAAT,KAAuB,CAQzB,IAPAz3B,EAAe,OAAS,IACxB82B,GAAmBzG,EAAU,EAAE,EAC/Bla,EAAUshB,EAAa,YACvBz3B,EAAe,YAAcmW,EAC7BwgB,GAAoB32B,EAAgBmW,CAAO,EAC3CnW,EAAe,aAAe,EAC9BmW,EAAUzT,EACLA,EAAc1C,EAAe,MAAgB0C,IAAT,MACvC0T,GAAoB1T,EAAayT,CAAO,EACrCzT,EAAcA,EAAY,QAC/B,OAAApF,GACEknB,GACCA,GAAoB,QAAU,EAAK,CACtC,EACAxb,IACE8O,GAAa9X,EAAgBqwB,EAAS,aAAa,EAC9CrwB,EAAe,KACxB,CACAmW,EAAUA,EAAQ,OACpB,CACOka,EAAS,OAAlB,MACE7vB,GAAI,EAAIo3B,KACN53B,EAAe,OAAS,IACzBvD,EAAO,GACRq6B,GAAmBzG,EAAU,EAAE,EAC9BrwB,EAAe,MAAQ,QAC5B,KACG,CACH,GAAI,CAACvD,EACH,GACI0Z,EAAU0O,GAAmB4S,CAAY,EAAathB,IAAT,MAE/C,GACInW,EAAe,OAAS,IACzBvD,EAAO,GACP0Z,EAAUA,EAAQ,YAClBnW,EAAe,YAAcmW,EAC9BwgB,GAAoB32B,EAAgBmW,CAAO,EAC3C2gB,GAAmBzG,EAAU,EAAE,EACtBA,EAAS,OAAlB,MACeA,EAAS,WAAtB,UACA,CAACoH,EAAa,WACd,CAACzuB,GAEH,OAAOkuB,GAAiBl3B,CAAc,EAAG,SAE3C,GAAIQ,GAAI,EAAI6vB,EAAS,mBACnBuH,IACcl1B,IAAd,YACE1C,EAAe,OAAS,IACzBvD,EAAO,GACRq6B,GAAmBzG,EAAU,EAAE,EAC9BrwB,EAAe,MAAQ,SAC9BqwB,EAAS,aACHoH,EAAa,QAAUz3B,EAAe,MACvCA,EAAe,MAAQy3B,IACtBthB,EAAUka,EAAS,KACZla,IAAT,KACKA,EAAQ,QAAUshB,EAClBz3B,EAAe,MAAQy3B,EAC3BpH,EAAS,KAAOoH,EACvB,CACA,OAAapH,EAAS,OAAlB,MAECla,EAAUka,EAAS,KACnBA,EAAS,UAAYla,EACrBka,EAAS,KAAOla,EAAQ,QACxBka,EAAS,mBAAqB7vB,GAAI,EAClC2V,EAAQ,QAAU,KAClBzT,EAAc8hB,GAAoB,QACnClnB,GACEknB,GACA/nB,EAAQiG,EAAc,EAAK,EAAIA,EAAc,CAC/C,EACAsG,IAAe8O,GAAa9X,EAAgBqwB,EAAS,aAAa,EAClEla,IAEJ+gB,GAAiBl3B,CAAc,EACxB,MACT,IAAK,IACL,IAAK,IACH,OACE4kB,GAAmB5kB,CAAc,EACjCmkB,GAAiB,EAChBkM,EAAoBrwB,EAAe,gBAAxB,KACHmW,IAAT,KACcA,EAAQ,gBAAjB,OAAoCka,IACpCrwB,EAAe,OAAS,MACzBqwB,IAAarwB,EAAe,OAAS,MACzCqwB,GACW3tB,EAAc,aAArB,IACO1C,EAAe,MAAQ,OAA9B,IACCk3B,GAAiBl3B,CAAc,EAChCA,EAAe,aAAe,IAAMA,EAAe,OAAS,OAC5Dk3B,GAAiBl3B,CAAc,EAClC0C,EAAc1C,EAAe,YACrB0C,IAAT,MACEi0B,GAAoB32B,EAAgB0C,EAAY,UAAU,EAC3DA,EAAc,KACNyT,IAAT,MACWA,EAAQ,gBAAjB,MACSA,EAAQ,cAAc,YAA/B,OACCzT,EAAcyT,EAAQ,cAAc,UAAU,MAChDka,EAAW,KACHrwB,EAAe,gBAAxB,MACWA,EAAe,cAAc,YAAtC,OACCqwB,EAAWrwB,EAAe,cAAc,UAAU,MACrDqwB,IAAa3tB,IAAgB1C,EAAe,OAAS,MAC5CmW,IAAT,MAAoB/Y,GAAIigB,EAAY,EACpC,KAEJ,IAAK,IACH,OACG3a,EAAc,KACNyT,IAAT,OAAqBzT,EAAcyT,EAAQ,cAAc,OACzDnW,EAAe,cAAc,QAAU0C,IACpC1C,EAAe,OAAS,MAC3Bua,GAAYyB,EAAY,EACxBkb,GAAiBl3B,CAAc,EAC/B,KAEJ,IAAK,IACH,OAAO,KACT,IAAK,IACH,OAAO,IACX,CACA,MAAM,MAAMpG,EAAuB,IAAKoG,EAAe,GAAG,CAAC,CAC7D,CACA,SAAS63B,GAAW1hB,EAASnW,EAAgB,CAE3C,OADAsY,GAAetY,CAAc,EACrBA,EAAe,IAAK,CAC1B,IAAK,GACH,OACGmW,EAAUnW,EAAe,MAC1BmW,EAAU,OACJnW,EAAe,MAASmW,EAAU,OAAU,IAAMnW,GACpD,KAER,IAAK,GACH,OACEua,GAAYyB,EAAY,EACxBhe,GAAiB,EAChBmY,EAAUnW,EAAe,OACnBmW,EAAU,SAAjB,IAAkCA,EAAU,OAAjB,GACrBnW,EAAe,MAASmW,EAAU,OAAU,IAAMnW,GACpD,KAER,IAAK,IACL,IAAK,IACL,IAAK,GACH,OAAO5B,GAAe4B,CAAc,EAAG,KACzC,IAAK,IACH,GAAaA,EAAe,gBAAxB,KAAuC,CAEzC,GADA4kB,GAAmB5kB,CAAc,EACpBA,EAAe,YAAxB,KACF,MAAM,MAAMpG,EAAuB,GAAG,CAAC,EACzCigB,GAAoB,CACtB,CACA,OAAA1D,EAAUnW,EAAe,MAClBmW,EAAU,OACXnW,EAAe,MAASmW,EAAU,OAAU,IAAMnW,GACpD,KACN,IAAK,IAGH,GAFA4kB,GAAmB5kB,CAAc,EACjCmW,EAAUnW,EAAe,cACZmW,IAAT,MAA6BA,EAAQ,aAAjB,KAA6B,CACnD,GAAanW,EAAe,YAAxB,KACF,MAAM,MAAMpG,EAAuB,GAAG,CAAC,EACzCigB,GAAoB,CACtB,CACA,OAAA1D,EAAUnW,EAAe,MAClBmW,EAAU,OACXnW,EAAe,MAASmW,EAAU,OAAU,IAAMnW,GACpD,KACN,IAAK,IACH,OAAO5C,GAAIonB,EAAmB,EAAG,KACnC,IAAK,GACH,OAAOxmB,GAAiB,EAAG,KAC7B,IAAK,IACH,OAAOuc,GAAYva,EAAe,IAAI,EAAG,KAC3C,IAAK,IACL,IAAK,IACH,OACE4kB,GAAmB5kB,CAAc,EACjCmkB,GAAiB,EACRhO,IAAT,MAAoB/Y,GAAIigB,EAAY,EACnClH,EAAUnW,EAAe,MAC1BmW,EAAU,OACJnW,EAAe,MAASmW,EAAU,OAAU,IAAMnW,GACpD,KAER,IAAK,IACH,OAAOua,GAAYyB,EAAY,EAAG,KACpC,IAAK,IACH,OAAO,KACT,QACE,OAAO,IACX,CACF,CACA,SAAS8b,GAAsB3hB,EAAS4hB,EAAiB,CAEvD,OADAzf,GAAeyf,CAAe,EACtBA,EAAgB,IAAK,CAC3B,IAAK,GACHxd,GAAYyB,EAAY,EACxBhe,GAAiB,EACjB,MACF,IAAK,IACL,IAAK,IACL,IAAK,GACHI,GAAe25B,CAAe,EAC9B,MACF,IAAK,GACH/5B,GAAiB,EACjB,MACF,IAAK,IACM+5B,EAAgB,gBAAzB,MACEnT,GAAmBmT,CAAe,EACpC,MACF,IAAK,IACHnT,GAAmBmT,CAAe,EAClC,MACF,IAAK,IACH36B,GAAIonB,EAAmB,EACvB,MACF,IAAK,IACHjK,GAAYwd,EAAgB,IAAI,EAChC,MACF,IAAK,IACL,IAAK,IACHnT,GAAmBmT,CAAe,EAClC5T,GAAiB,EACRhO,IAAT,MAAoB/Y,GAAIigB,EAAY,EACpC,MACF,IAAK,IACH9C,GAAYyB,EAAY,CAC5B,CACF,CACA,SAASgc,GAA0BC,EAAOC,EAAc,CACtD,GAAI,CACF,IAAIhW,EAAcgW,EAAa,YAC7BC,EAAsBjW,IAAT,KAAuBA,EAAY,WAAa,KAC/D,GAAaiW,IAAT,KAAqB,CACvB,IAAIC,EAAcD,EAAW,KAC7BjW,EAAckW,EACd,EAAG,CACD,IAAKlW,EAAY,IAAM+V,KAAWA,EAAO,CACvCE,EAAa,OACb,IAAI9L,EAASnK,EAAY,OACvBhc,EAAOgc,EAAY,KACrBiW,EAAa9L,EAAO,EACpBnmB,EAAK,QAAUiyB,CACjB,CACAjW,EAAcA,EAAY,IAC5B,OAASA,IAAgBkW,EAC3B,CACF,OAAS3jB,EAAO,CACd4jB,GAAwBH,EAAcA,EAAa,OAAQzjB,CAAK,CAClE,CACF,CACA,SAAS6jB,GACPL,EACAC,EACAK,EACA,CACA,GAAI,CACF,IAAIrW,EAAcgW,EAAa,YAC7BC,EAAsBjW,IAAT,KAAuBA,EAAY,WAAa,KAC/D,GAAaiW,IAAT,KAAqB,CACvB,IAAIC,EAAcD,EAAW,KAC7BjW,EAAckW,EACd,EAAG,CACD,IAAKlW,EAAY,IAAM+V,KAAWA,EAAO,CACvC,IAAI/xB,EAAOgc,EAAY,KACrBsW,EAAUtyB,EAAK,QACjB,GAAesyB,IAAX,OAAoB,CACtBtyB,EAAK,QAAU,OACfiyB,EAAaD,EACb,IAAIO,EAAyBF,EAC3BG,EAAWF,EACb,GAAI,CACFE,EAAS,CACX,OAASjkB,EAAO,CACd4jB,GACEF,EACAM,EACAhkB,CACF,CACF,CACF,CACF,CACAyN,EAAcA,EAAY,IAC5B,OAASA,IAAgBkW,EAC3B,CACF,OAAS3jB,EAAO,CACd4jB,GAAwBH,EAAcA,EAAa,OAAQzjB,CAAK,CAClE,CACF,CACA,SAASkkB,GAAqBT,EAAc,CAC1C,IAAIhW,EAAcgW,EAAa,YAC/B,GAAahW,IAAT,KAAsB,CACxB,IAAIjJ,EAAWif,EAAa,UAC5B,GAAI,CACFtU,GAAgB1B,EAAajJ,CAAQ,CACvC,OAASxE,EAAO,CACd4jB,GAAwBH,EAAcA,EAAa,OAAQzjB,CAAK,CAClE,CACF,CACF,CACA,SAASmkB,GACPziB,EACAsiB,EACAxf,EACA,CACAA,EAAS,MAAQuX,GACfra,EAAQ,KACRA,EAAQ,aACV,EACA8C,EAAS,MAAQ9C,EAAQ,cACzB,GAAI,CACF8C,EAAS,qBAAqB,CAChC,OAASxE,EAAO,CACd4jB,GAAwBliB,EAASsiB,EAAwBhkB,CAAK,CAChE,CACF,CACA,SAASokB,GAAgB1iB,EAASsiB,EAAwB,CACxD,GAAI,CACF,IAAIxL,EAAM9W,EAAQ,IAClB,GAAa8W,IAAT,KAAc,CAChB,OAAQ9W,EAAQ,IAAK,CACnB,IAAK,IACL,IAAK,IACL,IAAK,GACH,IAAI2iB,EAAgB3iB,EAAQ,UAC5B,MACF,IAAK,IACH2iB,EAAgB3iB,EAAQ,UACxB,MACF,QACE2iB,EAAgB3iB,EAAQ,SAC5B,CACe,OAAO8W,GAAtB,WACK9W,EAAQ,WAAa8W,EAAI6L,CAAa,EACtC7L,EAAI,QAAU6L,CACrB,CACF,OAASrkB,EAAO,CACd4jB,GAAwBliB,EAASsiB,EAAwBhkB,CAAK,CAChE,CACF,CACA,SAASskB,GAAgB5iB,EAASsiB,EAAwB,CACxD,IAAIxL,EAAM9W,EAAQ,IAChBkX,EAAalX,EAAQ,WACvB,GAAa8W,IAAT,KACF,GAAmB,OAAOI,GAAtB,WACF,GAAI,CACFA,EAAW,CACb,OAAS5Y,EAAO,CACd4jB,GAAwBliB,EAASsiB,EAAwBhkB,CAAK,CAChE,QAAE,CACC0B,EAAQ,WAAa,KACnBA,EAAUA,EAAQ,UACXA,GAAR,OAAoBA,EAAQ,WAAa,KAC7C,SACsB,OAAO8W,GAAtB,WACP,GAAI,CACFA,EAAI,IAAI,CACV,OAAS+L,EAAW,CAClBX,GAAwBliB,EAASsiB,EAAwBO,CAAS,CACpE,MACG/L,EAAI,QAAU,IACvB,CACA,SAASgM,GAAgBf,EAAc,CACrC,IAAIz7B,EAAOy7B,EAAa,KACtB/sB,EAAQ+sB,EAAa,cACrBjf,EAAWif,EAAa,UAC1B,GAAI,CACFt9B,EAAG,OAAQ6B,EAAM,CACf,IAAK,SACL,IAAK,QACL,IAAK,SACL,IAAK,WACH0O,EAAM,WAAa8N,EAAS,MAAM,EAClC,MAAMre,EACR,IAAK,MACHuQ,EAAM,IACD8N,EAAS,IAAM9N,EAAM,IACtBA,EAAM,SAAW8N,EAAS,OAAS9N,EAAM,OACjD,CACF,OAASsJ,EAAO,CACd4jB,GAAwBH,EAAcA,EAAa,OAAQzjB,CAAK,CAClE,CACF,CACA,SAASykB,GAAiBhB,EAAc7H,EAAUD,EAAU,CAC1D,GAAI,CACF,IAAI+I,EAAajB,EAAa,UAC9BkB,GAAiBD,EAAYjB,EAAa,KAAM9H,EAAUC,CAAQ,EAClE8I,EAAWh0B,EAAgB,EAAIkrB,CACjC,OAAS5b,EAAO,CACd4jB,GAAwBH,EAAcA,EAAa,OAAQzjB,CAAK,CAClE,CACF,CACA,SAAS4kB,GAAal/B,EAAO,CAC3B,OACQA,EAAM,MAAZ,GACMA,EAAM,MAAZ,GACOA,EAAM,MAAb,IACQA,EAAM,MAAb,IAAoBuf,GAAiBvf,EAAM,IAAI,GAC1CA,EAAM,MAAZ,CAEJ,CACA,SAASm/B,GAAen/B,EAAO,CAC7BS,EAAG,OAAS,CACV,KAAgBT,EAAM,UAAf,MAA0B,CAC/B,GAAaA,EAAM,SAAf,MAAyBk/B,GAAal/B,EAAM,MAAM,EAAG,OAAO,KAChEA,EAAQA,EAAM,MAChB,CAEA,IADAA,EAAM,QAAQ,OAASA,EAAM,OAE3BA,EAAQA,EAAM,QACRA,EAAM,MAAZ,GAAyBA,EAAM,MAAZ,GAA0BA,EAAM,MAAb,IAEtC,CAGA,GAFWA,EAAM,MAAb,IAAoBuf,GAAiBvf,EAAM,IAAI,GAC/CA,EAAM,MAAQ,GACLA,EAAM,QAAf,MAA8BA,EAAM,MAAZ,EAAiB,SAASS,EAChDT,EAAM,MAAM,OAASA,EAASA,EAAQA,EAAM,KACpD,CACA,GAAI,EAAEA,EAAM,MAAQ,GAAI,OAAOA,EAAM,SACvC,CACF,CACA,SAASo/B,GAAyCt/B,EAAMu/B,EAAQhkB,EAAQ,CACtE,IAAIra,EAAMlB,EAAK,IACf,GAAUkB,IAAN,GAAmBA,IAAN,EACdlB,EAAOA,EAAK,UACXu/B,GACWhkB,EAAO,WAAb,EACGA,EAAO,KACIA,EAAO,WAAlB,OACEA,EAAO,cAAc,KACrBA,GACJ,aAAavb,EAAMu/B,CAAM,GACzBA,EACMhkB,EAAO,WAAb,EACIA,EAAO,KACIA,EAAO,WAAlB,OACEA,EAAO,cAAc,KACrBA,EACRgkB,EAAO,YAAYv/B,CAAI,EACtBub,EAASA,EAAO,oBACPA,GAAT,MACUgkB,EAAO,UAAhB,OACCA,EAAO,QAAU9uB,aAEpBvP,IAAN,IACQA,IAAP,IACCue,GAAiBzf,EAAK,IAAI,IACxBub,EAASvb,EAAK,UAAau/B,EAAS,MACvCv/B,EAAOA,EAAK,MACJA,IAAT,MAEA,IACEs/B,GAAyCt/B,EAAMu/B,EAAQhkB,CAAM,EAC3Dvb,EAAOA,EAAK,QACLA,IAAT,MAGAs/B,GAAyCt/B,EAAMu/B,EAAQhkB,CAAM,EAC1Dvb,EAAOA,EAAK,OACrB,CACA,SAASw/B,GAA4Bx/B,EAAMu/B,EAAQhkB,EAAQ,CACzD,IAAIra,EAAMlB,EAAK,IACf,GAAUkB,IAAN,GAAmBA,IAAN,EACdlB,EAAOA,EAAK,UACXu/B,EAAShkB,EAAO,aAAavb,EAAMu/B,CAAM,EAAIhkB,EAAO,YAAYvb,CAAI,UAEhEkB,IAAN,IACQA,IAAP,IAAcue,GAAiBzf,EAAK,IAAI,IAAMub,EAASvb,EAAK,WAC5DA,EAAOA,EAAK,MACJA,IAAT,MAEA,IACEw/B,GAA4Bx/B,EAAMu/B,EAAQhkB,CAAM,EAAGvb,EAAOA,EAAK,QACtDA,IAAT,MAGAw/B,GAA4Bx/B,EAAMu/B,EAAQhkB,CAAM,EAAIvb,EAAOA,EAAK,OACtE,CACA,SAASy/B,GAA+BxB,EAAc,CACpD,IAAIyB,EAAYzB,EAAa,UAC3B/sB,EAAQ+sB,EAAa,cACvB,GAAI,CACF,QACMz7B,EAAOy7B,EAAa,KAAM0B,EAAaD,EAAU,WACrDC,EAAW,QAGXD,EAAU,oBAAoBC,EAAW,CAAC,CAAC,EAC7C3D,GAAqB0D,EAAWl9B,EAAM0O,CAAK,EAC3CwuB,EAAUz0B,EAAmB,EAAIgzB,EACjCyB,EAAUx0B,EAAgB,EAAIgG,CAChC,OAASsJ,EAAO,CACd4jB,GAAwBH,EAAcA,EAAa,OAAQzjB,CAAK,CAClE,CACF,CACA,IAAIolB,GAA2B,GAC7BC,GAA4B,GAC5BC,GAAiB,GACjBC,GAAiC,OAAO,SAAtB,WAAgC,QAAU,IAC5DC,GAAa,KACf,SAASC,GAA4Bj4B,EAAMyH,EAAY,CAIrD,GAHAzH,EAAOA,EAAK,cACZk4B,GAAgBC,GAChBn4B,EAAO4Q,GAAqB5Q,CAAI,EAC5B8Q,GAAyB9Q,CAAI,EAAG,CAClC,GAAI,mBAAoBA,EACtB,IAAIsX,EAAkB,CACpB,MAAOtX,EAAK,eACZ,IAAKA,EAAK,YACZ,OAEArH,EAAG,CACD2e,GACIA,EAAkBtX,EAAK,gBACvBsX,EAAgB,aAClB,OACF,IAAI8gB,EACF9gB,EAAgB,cAAgBA,EAAgB,aAAa,EAC/D,GAAI8gB,GAAmBA,EAAU,aAAhB,EAA4B,CAC3C9gB,EAAkB8gB,EAAU,WAC5B,IAAIC,EAAeD,EAAU,aAC3BE,EAAYF,EAAU,UACxBA,EAAYA,EAAU,YACtB,GAAI,CACF9gB,EAAgB,SAAUghB,EAAU,QACtC,OAASC,EAAM,CACbjhB,EAAkB,KAClB,MAAM3e,CACR,CACA,IAAIud,EAAS,EACXlM,EAAQ,GACRG,EAAM,GACNquB,EAAoB,EACpBC,EAAmB,EACnBzgC,EAAOgI,EACP6D,EAAa,KACfjL,EAAG,OAAS,CACV,QAAS8/B,EACP1gC,IAASsf,GACA+gB,IAAN,GAA4BrgC,EAAK,WAAX,IACtBgS,EAAQkM,EAASmiB,GACpBrgC,IAASsgC,GACAF,IAAN,GAAyBpgC,EAAK,WAAX,IACnBmS,EAAM+L,EAASkiB,GACZpgC,EAAK,WAAX,IAAwBke,GAAUle,EAAK,UAAU,SACnC0gC,EAAO1gC,EAAK,cAAtB,MACJ6L,EAAa7L,EACbA,EAAO0gC,EAET,OAAS,CACP,GAAI1gC,IAASgI,EAAM,MAAMpH,EAOzB,GANAiL,IAAeyT,GACb,EAAEkhB,IAAsBH,IACvBruB,EAAQkM,GACXrS,IAAey0B,GACb,EAAEG,IAAqBL,IACtBjuB,EAAM+L,IACKwiB,EAAO1gC,EAAK,eAAtB,KAAoC,MACxCA,EAAO6L,EACPA,EAAa7L,EAAK,UACpB,CACAA,EAAO0gC,CACT,CACAphB,EACStN,IAAP,IAAuBG,IAAP,GAAa,KAAO,CAAE,MAAOH,EAAO,IAAKG,CAAI,CACjE,MAAOmN,EAAkB,IAC3B,CACFA,EAAkBA,GAAmB,CAAE,MAAO,EAAG,IAAK,CAAE,CAC1D,MAAOA,EAAkB,KAGzB,IAFAqhB,GAAuB,CAAE,YAAa34B,EAAM,eAAgBsX,CAAgB,EAC5E6gB,GAAW,GACNH,GAAavwB,EAAqBuwB,KAAT,MAC5B,GACIvwB,EAAauwB,GACdh4B,EAAOyH,EAAW,OACZA,EAAW,aAAe,QAAjC,GAAmDzH,IAAT,KAEzCA,EAAK,OAASyH,EAAcuwB,GAAah4B,MAE1C,MAAgBg4B,KAAT,MAAuB,CAI5B,OAHAvwB,EAAauwB,GACbM,EAAY7wB,EAAW,UACvBzH,EAAOyH,EAAW,MACVA,EAAW,IAAK,CACtB,IAAK,GACH,IACSzH,EAAO,KAAd,IACEA,EAAOyH,EAAW,YACnBzH,EAAgBA,IAAT,KAAgBA,EAAK,OAAS,KAC7BA,IAAT,MAEA,IACEsX,EAAkB,EAClBA,EAAkBtX,EAAK,OACvBsX,IAEC+gB,EAAer4B,EAAKsX,CAAe,EACjC+gB,EAAa,IAAI,KAAOA,EAAa,SAC5C,MACF,IAAK,IACL,IAAK,IACH,MACF,IAAK,GACH,IAAWr4B,EAAO,QAAd,GAAgCs4B,IAAT,KAAoB,CAC7Ct4B,EAAO,OACPsX,EAAkB7P,EAClB4wB,EAAeC,EAAU,cACzBA,EAAYA,EAAU,cACtBF,EAAY9gB,EAAgB,UAC5B,GAAI,CACF,IAAIshB,EAAoBrK,GACtBjX,EAAgB,KAChB+gB,CACF,EACAr4B,EAAOo4B,EAAU,wBACfQ,EACAN,CACF,EACAF,EAAU,oCAAsCp4B,CAClD,OAASwS,EAAO,CACd4jB,GACE9e,EACAA,EAAgB,OAChB9E,CACF,CACF,CACF,CACA,MACF,IAAK,GACH,IAAWxS,EAAO,QAAd,GACF,GACIA,EAAOyH,EAAW,UAAU,cAC7B6P,EAAkBtX,EAAK,SAClBsX,IAAN,EAEAuhB,GAAwB74B,CAAI,UACfsX,IAAN,EACP,OAAQtX,EAAK,SAAU,CACrB,IAAK,OACL,IAAK,OACL,IAAK,OACH64B,GAAwB74B,CAAI,EAC5B,MACF,QACEA,EAAK,YAAc,EACvB,EACJ,MACF,IAAK,GACL,IAAK,IACL,IAAK,IACL,IAAK,GACL,IAAK,GACL,IAAK,IACH,MACF,QACE,IAAWA,EAAO,QAAd,EAAqB,MAAM,MAAMrI,EAAuB,GAAG,CAAC,CACpE,CAEA,GADAqI,EAAOyH,EAAW,QACLzH,IAAT,KAAe,CACjBA,EAAK,OAASyH,EAAW,OACzBuwB,GAAah4B,EACb,KACF,CACAg4B,GAAavwB,EAAW,MAC1B,CACN,CACA,SAASqxB,GAA0BC,EAAc7kB,EAAS+hB,EAAc,CACtE,IAAID,EAAQC,EAAa,MACzB,OAAQA,EAAa,IAAK,CACxB,IAAK,GACL,IAAK,IACL,IAAK,IACH+C,GAAiCD,EAAc9C,CAAY,EAC3DD,EAAQ,GAAKD,GAA0B,EAAGE,CAAY,EACtD,MACF,IAAK,GAEH,GADA+C,GAAiCD,EAAc9C,CAAY,EACvDD,EAAQ,EACV,GAAM+C,EAAe9C,EAAa,UAAqB/hB,IAAT,KAC5C,GAAI,CACF6kB,EAAa,kBAAkB,CACjC,OAASvmB,EAAO,CACd4jB,GAAwBH,EAAcA,EAAa,OAAQzjB,CAAK,CAClE,KACG,CACH,IAAIme,EAAYpC,GACd0H,EAAa,KACb/hB,EAAQ,aACV,EACAA,EAAUA,EAAQ,cAClB,GAAI,CACF6kB,EAAa,mBACXpI,EACAzc,EACA6kB,EAAa,mCACf,CACF,OAASE,EAAW,CAClB7C,GACEH,EACAA,EAAa,OACbgD,CACF,CACF,CACF,CACFjD,EAAQ,IAAMU,GAAqBT,CAAY,EAC/CD,EAAQ,KAAOY,GAAgBX,EAAcA,EAAa,MAAM,EAChE,MACF,IAAK,GAEH,GADA+C,GAAiCD,EAAc9C,CAAY,EAEzDD,EAAQ,KACN+C,EAAe9C,EAAa,YAAuB8C,IAAT,MAC5C,CAEA,GADA7kB,EAAU,KACG+hB,EAAa,QAAtB,KACF,OAAQA,EAAa,MAAM,IAAK,CAC9B,IAAK,IACL,IAAK,GACH/hB,EAAU+hB,EAAa,MAAM,UAC7B,MACF,IAAK,GACH/hB,EAAU+hB,EAAa,MAAM,SACjC,CACF,GAAI,CACFtU,GAAgBoX,EAAc7kB,CAAO,CACvC,OAAS1B,EAAO,CACd4jB,GAAwBH,EAAcA,EAAa,OAAQzjB,CAAK,CAClE,CACF,CACA,MACF,IAAK,IACM0B,IAAT,MACE8hB,EAAQ,GACRyB,GAA+BxB,CAAY,EAC/C,IAAK,IACL,IAAK,GACH+C,GAAiCD,EAAc9C,CAAY,EAClD/hB,IAAT,MAAoB8hB,EAAQ,GAAKgB,GAAgBf,CAAY,EAC7DD,EAAQ,KAAOY,GAAgBX,EAAcA,EAAa,MAAM,EAChE,MACF,IAAK,IACH+C,GAAiCD,EAAc9C,CAAY,EAC3D,MACF,IAAK,IACH+C,GAAiCD,EAAc9C,CAAY,EAC3DD,EAAQ,GAAKkD,GAAiCH,EAAc9C,CAAY,EACxE,MACF,IAAK,IACH+C,GAAiCD,EAAc9C,CAAY,EAC3DD,EAAQ,GAAKmD,GAAiCJ,EAAc9C,CAAY,EACxED,EAAQ,KACJ+C,EAAe9C,EAAa,cACrB8C,IAAT,OACIA,EAAeA,EAAa,WACrBA,IAAT,OACI9C,EAAemD,GAAgC,KAC/C,KACAnD,CACF,EACAoD,GAA8BN,EAAc9C,CAAY,KAC9D,MACF,IAAK,IAEH,GADAD,EAAiBC,EAAa,gBAAtB,MAAuC2B,GAC3C,CAAC5B,EAAO,CACV9hB,EACYA,IAAT,MAA6BA,EAAQ,gBAAjB,MACrB2jB,GACFlH,EAAYiH,GACZ,IAAI0B,EAAgCzB,GACpCD,GAA2B5B,GAC1B6B,GAA4B3jB,IAAY,CAAColB,EACtCC,GACER,EACA9C,GACOA,EAAa,aAAe,QAAnC,CACF,EACA+C,GAAiCD,EAAc9C,CAAY,EAC/D2B,GAA2BjH,EAC3BkH,GAA4ByB,CAC9B,CACA,MACF,IAAK,IACH,MACF,QACEN,GAAiCD,EAAc9C,CAAY,CAC/D,CACF,CACA,SAASuD,GAAwBthC,EAAO,CACtC,IAAIQ,EAAYR,EAAM,UACbQ,IAAT,OACIR,EAAM,UAAY,KAAOshC,GAAwB9gC,CAAS,GAC9DR,EAAM,MAAQ,KACdA,EAAM,UAAY,KAClBA,EAAM,QAAU,KACVA,EAAM,MAAZ,IACIQ,EAAYR,EAAM,UACXQ,IAAT,MAAsB+K,GAAsB/K,CAAS,GACvDR,EAAM,UAAY,KAClBA,EAAM,OAAS,KACfA,EAAM,aAAe,KACrBA,EAAM,cAAgB,KACtBA,EAAM,cAAgB,KACtBA,EAAM,aAAe,KACrBA,EAAM,UAAY,KAClBA,EAAM,YAAc,IACtB,CACA,IAAIuhC,GAAa,KACfC,GAAwB,GAC1B,SAASC,GACPZ,EACAvC,EACAjjB,EACA,CACA,IAAKA,EAASA,EAAO,MAAgBA,IAAT,MAC1BqmB,GAA6Bb,EAAcvC,EAAwBjjB,CAAM,EACtEA,EAASA,EAAO,OACvB,CACA,SAASqmB,GACPb,EACAvC,EACAqD,EACA,CACA,GAAI56B,IAA+B,OAAOA,GAAa,sBAAnC,WAClB,GAAI,CACFA,GAAa,qBAAqBD,GAAY66B,CAAY,CAC5D,OAASz6B,EAAK,CAAC,CACjB,OAAQy6B,EAAa,IAAK,CACxB,IAAK,IACHhC,IACEf,GAAgB+C,EAAcrD,CAAsB,EACtDmD,GACEZ,EACAvC,EACAqD,CACF,EACAA,EAAa,cACTA,EAAa,cAAc,QAC3BA,EAAa,YACXA,EAAeA,EAAa,UAC9BA,EAAa,WAAW,YAAYA,CAAY,GACpD,MACF,IAAK,IACHhC,IACEf,GAAgB+C,EAAcrD,CAAsB,EACtD,IAAIsD,EAAiBL,GACnBM,EAA4BL,GAC9BjiB,GAAiBoiB,EAAa,IAAI,IAC9BJ,GAAaI,EAAa,UAAaH,GAAwB,IACnEC,GACEZ,EACAvC,EACAqD,CACF,EACAG,GAAyBH,EAAa,SAAS,EAC/CJ,GAAaK,EACbJ,GAAwBK,EACxB,MACF,IAAK,GACHlC,IACEf,GAAgB+C,EAAcrD,CAAsB,EACxD,IAAK,GAWH,GAVAsD,EAAiBL,GACjBM,EAA4BL,GAC5BD,GAAa,KACbE,GACEZ,EACAvC,EACAqD,CACF,EACAJ,GAAaK,EACbJ,GAAwBK,EACXN,KAAT,KACF,GAAIC,GACF,GAAI,EACKD,GAAW,WAAjB,EACGA,GAAW,KACAA,GAAW,WAAtB,OACEA,GAAW,cAAc,KACzBA,IACJ,YAAYI,EAAa,SAAS,CACtC,OAASrnB,EAAO,CACd4jB,GACEyD,EACArD,EACAhkB,CACF,CACF,KAEA,IAAI,CACFinB,GAAW,YAAYI,EAAa,SAAS,CAC/C,OAASrnB,EAAO,CACd4jB,GACEyD,EACArD,EACAhkB,CACF,CACF,CACJ,MACF,IAAK,IACMinB,KAAT,OACGC,IACKX,EAAeU,GACjBQ,GACQlB,EAAa,WAAnB,EACIA,EAAa,KACFA,EAAa,WAAxB,OACEA,EAAa,cAAc,KAC3BA,EACNc,EAAa,SACf,EACAK,GAAiBnB,CAAY,GAC7BkB,GAAuBR,GAAYI,EAAa,SAAS,GAC/D,MACF,IAAK,GACHC,EAAiBL,GACjBM,EAA4BL,GAC5BD,GAAaI,EAAa,UAAU,cACpCH,GAAwB,GACxBC,GACEZ,EACAvC,EACAqD,CACF,EACAJ,GAAaK,EACbJ,GAAwBK,EACxB,MACF,IAAK,GACL,IAAK,IACL,IAAK,IACL,IAAK,IACH1D,GAA4B,EAAGwD,EAAcrD,CAAsB,EACnEqB,IACExB,GAA4B,EAAGwD,EAAcrD,CAAsB,EACrEmD,GACEZ,EACAvC,EACAqD,CACF,EACA,MACF,IAAK,GACHhC,KACGf,GAAgB+C,EAAcrD,CAAsB,EACpDsD,EAAiBD,EAAa,UAChB,OAAOC,EAAe,sBAArC,YACEnD,GACEkD,EACArD,EACAsD,CACF,GACJH,GACEZ,EACAvC,EACAqD,CACF,EACA,MACF,IAAK,IACHF,GACEZ,EACAvC,EACAqD,CACF,EACA,MACF,IAAK,IACHhC,IACGiC,EAAiBjC,KACTgC,EAAa,gBAAtB,KACFF,GACEZ,EACAvC,EACAqD,CACF,EACAhC,GAA4BiC,EAC5B,MACF,QACEH,GACEZ,EACAvC,EACAqD,CACF,CACJ,CACF,CACA,SAASX,GAAiCH,EAAc9C,EAAc,CACpE,GACWA,EAAa,gBAAtB,OACE8C,EAAe9C,EAAa,UACrB8C,IAAT,OACIA,EAAeA,EAAa,cAAyBA,IAAT,OAChD,CACAA,EAAeA,EAAa,WAC5B,GAAI,CACFmB,GAAiBnB,CAAY,CAC/B,OAASvmB,EAAO,CACd4jB,GAAwBH,EAAcA,EAAa,OAAQzjB,CAAK,CAClE,CACF,CACF,CACA,SAAS2mB,GAAiCJ,EAAc9C,EAAc,CACpE,GACWA,EAAa,gBAAtB,OACE8C,EAAe9C,EAAa,UACrB8C,IAAT,OACIA,EAAeA,EAAa,cACrBA,IAAT,OACIA,EAAeA,EAAa,WAAsBA,IAAT,QAE/C,GAAI,CACFmB,GAAiBnB,CAAY,CAC/B,OAASvmB,EAAO,CACd4jB,GAAwBH,EAAcA,EAAa,OAAQzjB,CAAK,CAClE,CACJ,CACA,SAAS2nB,GAAclE,EAAc,CACnC,OAAQA,EAAa,IAAK,CACxB,IAAK,IACL,IAAK,IACL,IAAK,IACH,IAAImE,EAAanE,EAAa,UAC9B,OAASmE,IAAT,OACGA,EAAanE,EAAa,UAAY,IAAI8B,IACtCqC,EACT,IAAK,IACH,OACGnE,EAAeA,EAAa,UAC5BmE,EAAanE,EAAa,YAClBmE,IAAT,OACGA,EAAanE,EAAa,YAAc,IAAI8B,IAC/CqC,EAEJ,QACE,MAAM,MAAMziC,EAAuB,IAAKs+B,EAAa,GAAG,CAAC,CAC7D,CACF,CACA,SAASoE,GAA6BpE,EAAcqE,EAAW,CAC7D,IAAIF,EAAaD,GAAclE,CAAY,EAC3CqE,EAAU,QAAQ,SAAUC,EAAU,CACpC,GAAI,CAACH,EAAW,IAAIG,CAAQ,EAAG,CAC7BH,EAAW,IAAIG,CAAQ,EACvB,IAAIC,EAAQC,GAAqB,KAAK,KAAMxE,EAAcsE,CAAQ,EAClEA,EAAS,KAAKC,EAAOA,CAAK,CAC5B,CACF,CAAC,CACH,CACA,SAASE,GAAmCC,EAAeC,EAAa,CACtE,IAAInd,EAAYmd,EAAY,UAC5B,GAAand,IAAT,KACF,QAAS3lB,EAAI,EAAGA,EAAI2lB,EAAU,OAAQ3lB,IAAK,CACzC,IAAI0lB,EAAgBC,EAAU3lB,CAAC,EAC7BkI,EAAO26B,EACPxd,EAAcyd,EACdrnB,EAAS4J,EACXxkB,EAAG,KAAgB4a,IAAT,MAAmB,CAC3B,OAAQA,EAAO,IAAK,CAClB,IAAK,IACH,GAAIkE,GAAiBlE,EAAO,IAAI,EAAG,CACjCkmB,GAAalmB,EAAO,UACpBmmB,GAAwB,GACxB,MAAM/gC,CACR,CACA,MACF,IAAK,GACH8gC,GAAalmB,EAAO,UACpBmmB,GAAwB,GACxB,MAAM/gC,EACR,IAAK,GACL,IAAK,GACH8gC,GAAalmB,EAAO,UAAU,cAC9BmmB,GAAwB,GACxB,MAAM/gC,CACV,CACA4a,EAASA,EAAO,MAClB,CACA,GAAakmB,KAAT,KAAqB,MAAM,MAAM9hC,EAAuB,GAAG,CAAC,EAChEiiC,GAA6B55B,EAAMmd,EAAaK,CAAa,EAC7Dic,GAAa,KACbC,GAAwB,GACxB15B,EAAOwd,EAAc,UACZxd,IAAT,OAAkBA,EAAK,OAAS,MAChCwd,EAAc,OAAS,IACzB,CACF,GAAIod,EAAY,aAAe,MAC7B,IAAKA,EAAcA,EAAY,MAAgBA,IAAT,MACpCC,GAA6BD,EAAaD,CAAa,EACpDC,EAAcA,EAAY,OACnC,CACA,IAAIE,GAAuB,KAC3B,SAASD,GAA6B5E,EAAcj2B,EAAM,CACxD,IAAIkU,EAAU+hB,EAAa,UACzBD,EAAQC,EAAa,MACvB,OAAQA,EAAa,IAAK,CACxB,IAAK,GACL,IAAK,IACL,IAAK,IACL,IAAK,IACHyE,GAAmC16B,EAAMi2B,CAAY,EACrD8E,GAA4B9E,CAAY,EACxCD,EAAQ,IACLK,GAA4B,EAAGJ,EAAcA,EAAa,MAAM,EACjEF,GAA0B,EAAGE,CAAY,EACzCI,GAA4B,EAAGJ,EAAcA,EAAa,MAAM,GAClE,MACF,IAAK,GACHyE,GAAmC16B,EAAMi2B,CAAY,EACrD8E,GAA4B9E,CAAY,EACxCD,EAAQ,MACL6B,IACU3jB,IAAT,MACA4iB,GAAgB5iB,EAASA,EAAQ,MAAM,GAC3C8hB,EAAQ,IACN4B,KACE3B,EAAeA,EAAa,YACrBA,IAAT,OACID,EAAQC,EAAa,UACdD,IAAT,OACI9hB,EAAU+hB,EAAa,OAAO,gBAC/BA,EAAa,OAAO,gBACV/hB,IAAT,KAAmB8hB,EAAQ9hB,EAAQ,OAAO8hB,CAAK,KACvD,MACF,IAAK,IACH,IAAIgF,EAAgBF,GAOpB,GANAJ,GAAmC16B,EAAMi2B,CAAY,EACrD8E,GAA4B9E,CAAY,EACxCD,EAAQ,MACL6B,IACU3jB,IAAT,MACA4iB,GAAgB5iB,EAASA,EAAQ,MAAM,GACvC8hB,EAAQ,EAAG,CACb,IAAIiF,EAA2B/mB,IAAT,KAAmBA,EAAQ,cAAgB,KAEjE,GADA8hB,EAAQC,EAAa,cACR/hB,IAAT,KACF,GAAa8hB,IAAT,KACF,GAAaC,EAAa,YAAtB,KAAiC,CACnCt9B,EAAG,CACDq9B,EAAQC,EAAa,KACrB/hB,EAAU+hB,EAAa,cACvB+E,EAAgBA,EAAc,eAAiBA,EAC/CpiC,EAAG,OAAQo9B,EAAO,CAChB,IAAK,QACHiF,EACED,EAAc,qBAAqB,OAAO,EAAE,CAAC,GAE7C,CAACC,GACDA,EAAgBz3B,EAAuB,GACvCy3B,EAAgBh4B,EAAmB,GAEjCg4B,EAAgB,eADlB,8BAEAA,EAAgB,aAAa,UAAU,KAEtCA,EAAkBD,EAAc,cAAchF,CAAK,EAClDgF,EAAc,KAAK,aACjBC,EACAD,EAAc,cAAc,cAAc,CAC5C,GACJhH,GAAqBiH,EAAiBjF,EAAO9hB,CAAO,EACpD+mB,EAAgBh4B,EAAmB,EAAIgzB,EACvC7xB,GAAoB62B,CAAe,EACnCjF,EAAQiF,EACR,MAAMtiC,EACR,IAAK,OACH,IAAIuiC,EAAaC,GACf,OACA,OACAH,CACF,EAAE,IAAIhF,GAAS9hB,EAAQ,MAAQ,GAAG,EAClC,GAAIgnB,GACF,QAASpjC,EAAI,EAAGA,EAAIojC,EAAW,OAAQpjC,IACrC,GACImjC,EAAkBC,EAAWpjC,CAAC,EAChCmjC,EAAgB,aAAa,MAAM,KACxB/mB,EAAQ,MAAhB,MAA+BA,EAAQ,OAAf,GACrB,KACAA,EAAQ,OACZ+mB,EAAgB,aAAa,KAAK,KACvB/mB,EAAQ,KAAhB,KAAsB,KAAOA,EAAQ,MACxC+mB,EAAgB,aAAa,OAAO,KACzB/mB,EAAQ,OAAhB,KAAwB,KAAOA,EAAQ,QAC1C+mB,EAAgB,aAAa,aAAa,KAC/B/mB,EAAQ,aAAhB,KACG,KACAA,EAAQ,aAChB,CACAgnB,EAAW,OAAOpjC,EAAG,CAAC,EACtB,MAAMc,CACR,EACJqiC,EAAkBD,EAAc,cAAchF,CAAK,EACnDhC,GAAqBiH,EAAiBjF,EAAO9hB,CAAO,EACpD8mB,EAAc,KAAK,YAAYC,CAAe,EAC9C,MACF,IAAK,OACH,GACGC,EAAaC,GACZ,OACA,UACAH,CACF,EAAE,IAAIhF,GAAS9hB,EAAQ,SAAW,GAAG,GAErC,IAAKpc,EAAI,EAAGA,EAAIojC,EAAW,OAAQpjC,IACjC,GACImjC,EAAkBC,EAAWpjC,CAAC,EAChCmjC,EAAgB,aAAa,SAAS,KAC3B/mB,EAAQ,SAAhB,KACG,KACA,GAAKA,EAAQ,UACjB+mB,EAAgB,aAAa,MAAM,KACxB/mB,EAAQ,MAAhB,KAAuB,KAAOA,EAAQ,OACzC+mB,EAAgB,aAAa,UAAU,KAC5B/mB,EAAQ,UAAhB,KACG,KACAA,EAAQ,WACd+mB,EAAgB,aAAa,YAAY,KAC9B/mB,EAAQ,WAAhB,KACG,KACAA,EAAQ,YACd+mB,EAAgB,aAAa,SAAS,KAC3B/mB,EAAQ,SAAhB,KACG,KACAA,EAAQ,SAChB,CACAgnB,EAAW,OAAOpjC,EAAG,CAAC,EACtB,MAAMc,CACR,EACJqiC,EAAkBD,EAAc,cAAchF,CAAK,EACnDhC,GAAqBiH,EAAiBjF,EAAO9hB,CAAO,EACpD8mB,EAAc,KAAK,YAAYC,CAAe,EAC9C,MACF,QACE,MAAM,MAAMtjC,EAAuB,IAAKq+B,CAAK,CAAC,CAClD,CACAiF,EAAgBh4B,EAAmB,EAAIgzB,EACvC7xB,GAAoB62B,CAAe,EACnCjF,EAAQiF,CACV,CACAhF,EAAa,UAAYD,CAC3B,MACEoF,GACEJ,EACA/E,EAAa,KACbA,EAAa,SACf,OAEFA,EAAa,UAAYoF,GACvBL,EACAhF,EACAC,EAAa,aACf,OAEFgF,IAAoBjF,GACNiF,IAAT,KACY/mB,EAAQ,YAAjB,OACEA,EAAUA,EAAQ,UACpBA,EAAQ,WAAW,YAAYA,CAAO,GACtC+mB,EAAgB,QACXjF,IAAT,KACIoF,GACEJ,EACA/E,EAAa,KACbA,EAAa,SACf,EACAoF,GACEL,EACAhF,EACAC,EAAa,aACf,GACKD,IAAT,MACSC,EAAa,YAAtB,MACAgB,GACEhB,EACAA,EAAa,cACb/hB,EAAQ,aACV,CACR,CACA,MACF,IAAK,IACHwmB,GAAmC16B,EAAMi2B,CAAY,EACrD8E,GAA4B9E,CAAY,EACxCD,EAAQ,MACL6B,IACU3jB,IAAT,MACA4iB,GAAgB5iB,EAASA,EAAQ,MAAM,GAClCA,IAAT,MACE8hB,EAAQ,GACRiB,GACEhB,EACAA,EAAa,cACb/hB,EAAQ,aACV,EACF,MACF,IAAK,GAOH,GANAwmB,GAAmC16B,EAAMi2B,CAAY,EACrD8E,GAA4B9E,CAAY,EACxCD,EAAQ,MACL6B,IACU3jB,IAAT,MACA4iB,GAAgB5iB,EAASA,EAAQ,MAAM,GACvC+hB,EAAa,MAAQ,GAAI,CAC3B+E,EAAgB/E,EAAa,UAC7B,GAAI,CACF1uB,GAAeyzB,EAAe,EAAE,CAClC,OAASxoB,EAAO,CACd4jB,GAAwBH,EAAcA,EAAa,OAAQzjB,CAAK,CAClE,CACF,CACAwjB,EAAQ,GACEC,EAAa,WAArB,OACE+E,EAAgB/E,EAAa,cAC/BgB,GACEhB,EACA+E,EACS9mB,IAAT,KAAmBA,EAAQ,cAAgB8mB,CAC7C,GACFhF,EAAQ,OAAS8B,GAAiB,IAClC,MACF,IAAK,GAGH,GAFA4C,GAAmC16B,EAAMi2B,CAAY,EACrD8E,GAA4B9E,CAAY,EACpCD,EAAQ,EAAG,CACb,GAAaC,EAAa,YAAtB,KACF,MAAM,MAAMt+B,EAAuB,GAAG,CAAC,EACzCq+B,EAAQC,EAAa,cACrB/hB,EAAU+hB,EAAa,UACvB,GAAI,CACF/hB,EAAQ,UAAY8hB,CACtB,OAASxjB,EAAO,CACd4jB,GAAwBH,EAAcA,EAAa,OAAQzjB,CAAK,CAClE,CACF,CACA,MACF,IAAK,GAOH,GANA8oB,GAAY,KACZN,EAAgBF,GAChBA,GAAuBS,GAAiBv7B,EAAK,aAAa,EAC1D06B,GAAmC16B,EAAMi2B,CAAY,EACrD6E,GAAuBE,EACvBD,GAA4B9E,CAAY,EACpCD,EAAQ,GAAc9hB,IAAT,MAAoBA,EAAQ,cAAc,aACzD,GAAI,CACFgmB,GAAiBl6B,EAAK,aAAa,CACrC,OAASwS,EAAO,CACd4jB,GAAwBH,EAAcA,EAAa,OAAQzjB,CAAK,CAClE,CACFslB,KACIA,GAAiB,GAAK0D,GAAsBvF,CAAY,GAC5D,MACF,IAAK,GACHD,EAAQ8E,GACRA,GAAuBS,GACrBtF,EAAa,UAAU,aACzB,EACAyE,GAAmC16B,EAAMi2B,CAAY,EACrD8E,GAA4B9E,CAAY,EACxC6E,GAAuB9E,EACvB,MACF,IAAK,IACH0E,GAAmC16B,EAAMi2B,CAAY,EACrD8E,GAA4B9E,CAAY,EACxC,MACF,IAAK,IACHyE,GAAmC16B,EAAMi2B,CAAY,EACrD8E,GAA4B9E,CAAY,EACxCD,EAAQ,IACJA,EAAQC,EAAa,YACdD,IAAT,OACIC,EAAa,YAAc,KAC7BoE,GAA6BpE,EAAcD,CAAK,IACpD,MACF,IAAK,IACH0E,GAAmC16B,EAAMi2B,CAAY,EACrD8E,GAA4B9E,CAAY,EACxCA,EAAa,MAAM,MAAQ,MACfA,EAAa,gBAAtB,OACW/hB,IAAT,MAA6BA,EAAQ,gBAAjB,QACtBunB,GAA+Bl9B,GAAI,GACtCy3B,EAAQ,IACJA,EAAQC,EAAa,YACdD,IAAT,OACIC,EAAa,YAAc,KAC7BoE,GAA6BpE,EAAcD,CAAK,IACpD,MACF,IAAK,IACHgF,EAAyB/E,EAAa,gBAAtB,KAChB,IAAIyF,EAAqBxnB,IAAT,MAA6BA,EAAQ,gBAAjB,KAClCynB,EAA+B/D,GAC/B0B,EAAgCzB,GAOlC,GANAD,GAA2B+D,GAAgCX,EAC3DnD,GAA4ByB,GAAiCoC,EAC7DhB,GAAmC16B,EAAMi2B,CAAY,EACrD4B,GAA4ByB,EAC5B1B,GAA2B+D,EAC3BZ,GAA4B9E,CAAY,EACpCD,EAAQ,KACVr9B,EAAG,IACDqH,EAAOi2B,EAAa,UAClBj2B,EAAK,YAAcg7B,EACfh7B,EAAK,YAAc,GACnBA,EAAK,YAAc,EACvBg7B,IACY9mB,IAAT,MACCwnB,GACA9D,IACAC,IACA+D,GAA0C3F,CAAY,GAC1D/hB,EAAU,KACVlU,EAAOi2B,IAGT,CACA,GAAUj2B,EAAK,MAAX,GAAyBA,EAAK,MAAZ,IACpB,GAAakU,IAAT,KAAkB,CACpBwnB,EAAYxnB,EAAUlU,EACtB,GAAI,CACF,GAAMi7B,EAAkBS,EAAU,UAAYV,EAC3CE,EAAaD,EAAgB,MACb,OAAOC,EAAW,aAAjC,WACIA,EAAW,YAAY,UAAW,OAAQ,WAAW,EACpDA,EAAW,QAAU,WACzB,CACHpjC,EAAI4jC,EAAU,UACd,IAAIpqB,EAAYoqB,EAAU,cAAc,MACtCG,EAEWvqB,GAAT,MACAA,EAAU,eAAe,SAAS,EAC9BA,EAAU,QACV,KACRxZ,EAAE,MAAM,QACE+jC,GAAR,MAAiC,OAAOA,GAArB,UACf,IACC,GAAKA,GAAS,KAAK,CAC5B,CACF,OAASrpB,EAAO,CACd4jB,GAAwBsF,EAAWA,EAAU,OAAQlpB,CAAK,CAC5D,CACF,UACexS,EAAK,MAAX,GACT,GAAakU,IAAT,KAAkB,CACpBwnB,EAAY17B,EACZ,GAAI,CACF07B,EAAU,UAAU,UAAYV,EAC5B,GACAU,EAAU,aAChB,OAASlpB,EAAO,CACd4jB,GAAwBsF,EAAWA,EAAU,OAAQlpB,CAAK,CAC5D,CACF,UACgBxS,EAAK,MAAZ,IACT,GAAakU,IAAT,KAAkB,CACpBwnB,EAAY17B,EACZ,GAAI,CACF,IAAIgX,EAAW0kB,EAAU,UACzBV,EACIc,GAA+B9kB,EAAU,EAAE,EAC3C8kB,GAA+BJ,EAAU,UAAW,EAAE,CAC5D,OAASlpB,EAAO,CACd4jB,GAAwBsF,EAAWA,EAAU,OAAQlpB,CAAK,CAC5D,CACF,WAESxS,EAAK,MAAZ,IAA0BA,EAAK,MAAZ,IACVA,EAAK,gBAAd,MACAA,IAASi2B,IACFj2B,EAAK,QAAd,KACA,CACAA,EAAK,MAAM,OAASA,EACpBA,EAAOA,EAAK,MACZ,QACF,CACA,GAAIA,IAASi2B,EAAc,MAAMt9B,EACjC,KAAgBqH,EAAK,UAAd,MAAyB,CAC9B,GAAaA,EAAK,SAAd,MAAwBA,EAAK,SAAWi2B,EAAc,MAAMt9B,EAChEub,IAAYlU,IAASkU,EAAU,MAC/BlU,EAAOA,EAAK,MACd,CACAkU,IAAYlU,IAASkU,EAAU,MAC/BlU,EAAK,QAAQ,OAASA,EAAK,OAC3BA,EAAOA,EAAK,OACd,CACFg2B,EAAQ,IACJA,EAAQC,EAAa,YACdD,IAAT,OACI9hB,EAAU8hB,EAAM,WACT9hB,IAAT,OACI8hB,EAAM,WAAa,KACrBqE,GAA6BpE,EAAc/hB,CAAO,KACxD,MACF,IAAK,IACHwmB,GAAmC16B,EAAMi2B,CAAY,EACrD8E,GAA4B9E,CAAY,EACxCD,EAAQ,IACJA,EAAQC,EAAa,YACdD,IAAT,OACIC,EAAa,YAAc,KAC7BoE,GAA6BpE,EAAcD,CAAK,IACpD,MACF,IAAK,IACH,MACF,IAAK,IACH,MACF,QACE0E,GAAmC16B,EAAMi2B,CAAY,EACnD8E,GAA4B9E,CAAY,CAC9C,CACF,CACA,SAAS8E,GAA4B9E,EAAc,CACjD,IAAID,EAAQC,EAAa,MACzB,GAAID,EAAQ,EAAG,CACb,GAAI,CACF,QACM+F,EAAiBnB,EAAc3E,EAAa,OACvC2E,IAAT,MAEA,CACA,GAAIxD,GAAawD,CAAW,EAAG,CAC7BmB,EAAkBnB,EAClB,KACF,CACAA,EAAcA,EAAY,MAC5B,CACA,GAAYmB,GAAR,KAAyB,MAAM,MAAMpkC,EAAuB,GAAG,CAAC,EACpE,OAAQokC,EAAgB,IAAK,CAC3B,IAAK,IACH,IAAIxoB,EAASwoB,EAAgB,UAC3BxE,EAASF,GAAepB,CAAY,EACtCuB,GAA4BvB,EAAcsB,EAAQhkB,CAAM,EACxD,MACF,IAAK,GACH,IAAIyoB,EAAaD,EAAgB,UACjCA,EAAgB,MAAQ,KACrBx0B,GAAey0B,EAAY,EAAE,EAAID,EAAgB,OAAS,KAC7D,IAAIE,EAAa5E,GAAepB,CAAY,EAC5CuB,GAA4BvB,EAAcgG,EAAYD,CAAU,EAChE,MACF,IAAK,GACL,IAAK,GACH,IAAIE,EAAaH,EAAgB,UAAU,cACzCI,EAAa9E,GAAepB,CAAY,EAC1CqB,GACErB,EACAkG,EACAD,CACF,EACA,MACF,QACE,MAAM,MAAMvkC,EAAuB,GAAG,CAAC,CAC3C,CACF,OAAS6a,EAAO,CACd4jB,GAAwBH,EAAcA,EAAa,OAAQzjB,CAAK,CAClE,CACAyjB,EAAa,OAAS,EACxB,CACAD,EAAQ,OAASC,EAAa,OAAS,MACzC,CACA,SAASuF,GAAsBZ,EAAa,CAC1C,GAAIA,EAAY,aAAe,KAC7B,IAAKA,EAAcA,EAAY,MAAgBA,IAAT,MAAwB,CAC5D,IAAI1iC,EAAQ0iC,EACZY,GAAsBtjC,CAAK,EACrBA,EAAM,MAAZ,GAAmBA,EAAM,MAAQ,MAAQA,EAAM,UAAU,MAAM,EAC/D0iC,EAAcA,EAAY,OAC5B,CACJ,CACA,SAAS5B,GAAiCh5B,EAAM46B,EAAa,CAC3D,GAAIA,EAAY,aAAe,KAC7B,IAAKA,EAAcA,EAAY,MAAgBA,IAAT,MACpC9B,GAA0B94B,EAAM46B,EAAY,UAAWA,CAAW,EAC/DA,EAAcA,EAAY,OACnC,CACA,SAASgB,GAA0ChB,EAAa,CAC9D,IAAKA,EAAcA,EAAY,MAAgBA,IAAT,MAAwB,CAC5D,IAAI3E,EAAe2E,EACnB,OAAQ3E,EAAa,IAAK,CACxB,IAAK,GACL,IAAK,IACL,IAAK,IACL,IAAK,IACHI,GAA4B,EAAGJ,EAAcA,EAAa,MAAM,EAChE2F,GAA0C3F,CAAY,EACtD,MACF,IAAK,GACHa,GAAgBb,EAAcA,EAAa,MAAM,EACjD,IAAIjf,EAAWif,EAAa,UACb,OAAOjf,EAAS,sBAA/B,YACE2f,GACEV,EACAA,EAAa,OACbjf,CACF,EACF4kB,GAA0C3F,CAAY,EACtD,MACF,IAAK,IACH+D,GAAyB/D,EAAa,SAAS,EACjD,IAAK,IACL,IAAK,GACHa,GAAgBb,EAAcA,EAAa,MAAM,EACjD2F,GAA0C3F,CAAY,EACtD,MACF,IAAK,IACMA,EAAa,gBAAtB,MACE2F,GAA0C3F,CAAY,EACxD,MACF,IAAK,IACH2F,GAA0C3F,CAAY,EACtD,MACF,QACE2F,GAA0C3F,CAAY,CAC1D,CACA2E,EAAcA,EAAY,OAC5B,CACF,CACA,SAASrB,GACP6C,EACAxB,EACAyB,EACA,CAGA,IAFAA,EACEA,IAAuCzB,EAAY,aAAe,QAAlC,EAC7BA,EAAcA,EAAY,MAAgBA,IAAT,MAAwB,CAC5D,IAAI1mB,EAAU0mB,EAAY,UACxB7B,EAAeqD,EACfnG,EAAe2E,EACf5E,EAAQC,EAAa,MACvB,OAAQA,EAAa,IAAK,CACxB,IAAK,GACL,IAAK,IACL,IAAK,IACHsD,GACER,EACA9C,EACAoG,CACF,EACAtG,GAA0B,EAAGE,CAAY,EACzC,MACF,IAAK,GAQH,GAPAsD,GACER,EACA9C,EACAoG,CACF,EACAnoB,EAAU+hB,EACV8C,EAAe7kB,EAAQ,UACJ,OAAO6kB,EAAa,mBAAnC,WACF,GAAI,CACFA,EAAa,kBAAkB,CACjC,OAASvmB,EAAO,CACd4jB,GAAwBliB,EAASA,EAAQ,OAAQ1B,CAAK,CACxD,CAGF,GAFA0B,EAAU+hB,EACV8C,EAAe7kB,EAAQ,YACV6kB,IAAT,KAAuB,CACzB,IAAI/hB,EAAW9C,EAAQ,UACvB,GAAI,CACF,IAAIooB,EAAkBvD,EAAa,OAAO,gBAC1C,GAAauD,IAAT,KACF,IACEvD,EAAa,OAAO,gBAAkB,KAAMA,EAAe,EAC3DA,EAAeuD,EAAgB,OAC/BvD,IAEAtX,GAAa6a,EAAgBvD,CAAY,EAAG/hB,CAAQ,CAC1D,OAASxE,EAAO,CACd4jB,GAAwBliB,EAASA,EAAQ,OAAQ1B,CAAK,CACxD,CACF,CACA6pB,GACErG,EAAQ,IACRU,GAAqBT,CAAY,EACnCW,GAAgBX,EAAcA,EAAa,MAAM,EACjD,MACF,IAAK,IACHwB,GAA+BxB,CAAY,EAC7C,IAAK,IACL,IAAK,GACHsD,GACER,EACA9C,EACAoG,CACF,EACAA,GACWnoB,IAAT,MACA8hB,EAAQ,GACRgB,GAAgBf,CAAY,EAC9BW,GAAgBX,EAAcA,EAAa,MAAM,EACjD,MACF,IAAK,IACHsD,GACER,EACA9C,EACAoG,CACF,EACA,MACF,IAAK,IACH9C,GACER,EACA9C,EACAoG,CACF,EACAA,GACErG,EAAQ,GACRkD,GAAiCH,EAAc9C,CAAY,EAC7D,MACF,IAAK,IACHsD,GACER,EACA9C,EACAoG,CACF,EACAA,GACErG,EAAQ,GACRmD,GAAiCJ,EAAc9C,CAAY,EAC7D,MACF,IAAK,IACMA,EAAa,gBAAtB,MACEsD,GACER,EACA9C,EACAoG,CACF,EACFzF,GAAgBX,EAAcA,EAAa,MAAM,EACjD,MACF,IAAK,IACH,MACF,QACEsD,GACER,EACA9C,EACAoG,CACF,CACJ,CACAzB,EAAcA,EAAY,OAC5B,CACF,CACA,SAAS2B,GAAmCroB,EAAS+hB,EAAc,CACjE,IAAIuG,EAAgB,KACXtoB,IAAT,MACWA,EAAQ,gBAAjB,MACSA,EAAQ,cAAc,YAA/B,OACCsoB,EAAgBtoB,EAAQ,cAAc,UAAU,MACnDA,EAAU,KACD+hB,EAAa,gBAAtB,MACWA,EAAa,cAAc,YAApC,OACC/hB,EAAU+hB,EAAa,cAAc,UAAU,MAClD/hB,IAAYsoB,IACDtoB,GAAR,MAAmBA,EAAQ,WACpBsoB,GAAR,MAAyBviB,GAAauiB,CAAa,EACvD,CACA,SAASC,GAA8BvoB,EAAS+hB,EAAc,CAC5D/hB,EAAU,KACD+hB,EAAa,YAAtB,OACG/hB,EAAU+hB,EAAa,UAAU,cAAc,OAClDA,EAAeA,EAAa,cAAc,MAC1CA,IAAiB/hB,IACd+hB,EAAa,WAAoB/hB,GAAR,MAAmB+F,GAAa/F,CAAO,EACrE,CACA,SAASwoB,GACP18B,EACA46B,EACA+B,EACAC,EACA,CACA,GAAIhC,EAAY,aAAe,MAC7B,IAAKA,EAAcA,EAAY,MAAgBA,IAAT,MACpCiC,GACE78B,EACA46B,EACA+B,EACAC,CACF,EACGhC,EAAcA,EAAY,OACnC,CACA,SAASiC,GACP9D,EACA9C,EACA0G,EACAC,EACA,CACA,IAAI5G,EAAQC,EAAa,MACzB,OAAQA,EAAa,IAAK,CACxB,IAAK,GACL,IAAK,IACL,IAAK,IACHyG,GACE3D,EACA9C,EACA0G,EACAC,CACF,EACA5G,EAAQ,MAAQD,GAA0B,EAAGE,CAAY,EACzD,MACF,IAAK,GACHyG,GACE3D,EACA9C,EACA0G,EACAC,CACF,EACA,MACF,IAAK,GACHF,GACE3D,EACA9C,EACA0G,EACAC,CACF,EACA5G,EAAQ,OACJ+C,EAAe,KACR9C,EAAa,YAAtB,OACG8C,EAAe9C,EAAa,UAAU,cAAc,OACtDA,EAAeA,EAAa,cAAc,MAC3CA,IAAiB8C,IACd9C,EAAa,WACN8C,GAAR,MAAwB9e,GAAa8e,CAAY,IACrD,MACF,IAAK,IACH,GAAI/C,EAAQ,KAAM,CAChB0G,GACE3D,EACA9C,EACA0G,EACAC,CACF,EACA7D,EAAe9C,EAAa,UAC5B,GAAI,CACF,IAAI6G,EAAyB7G,EAAa,cACxC8G,EAAKD,EAAuB,GAC5BE,EAAeF,EAAuB,aACzB,OAAOE,GAAtB,YACEA,EACED,EACS9G,EAAa,YAAtB,KAAkC,QAAU,SAC5C8C,EAAa,sBACb,EACF,CACJ,OAASvmB,EAAO,CACd4jB,GAAwBH,EAAcA,EAAa,OAAQzjB,CAAK,CAClE,CACF,MACEkqB,GACE3D,EACA9C,EACA0G,EACAC,CACF,EACF,MACF,IAAK,IACHF,GACE3D,EACA9C,EACA0G,EACAC,CACF,EACA,MACF,IAAK,IACHF,GACE3D,EACA9C,EACA0G,EACAC,CACF,EACA,MACF,IAAK,IACH,MACF,IAAK,IACHE,EAAyB7G,EAAa,UACtC8G,EAAK9G,EAAa,UACTA,EAAa,gBAAtB,KACI6G,EAAuB,YAAc,EACnCJ,GACE3D,EACA9C,EACA0G,EACAC,CACF,EACAK,GAAwClE,EAAc9C,CAAY,EACpE6G,EAAuB,YAAc,EACnCJ,GACE3D,EACA9C,EACA0G,EACAC,CACF,GACEE,EAAuB,aAAe,EACxCI,GACEnE,EACA9C,EACA0G,EACAC,GACO3G,EAAa,aAAe,SAAnC,GAA6C,EAC/C,GACND,EAAQ,MAAQuG,GAAmCQ,EAAI9G,CAAY,EACnE,MACF,IAAK,IACHyG,GACE3D,EACA9C,EACA0G,EACAC,CACF,EACA5G,EAAQ,MACNyG,GAA8BxG,EAAa,UAAWA,CAAY,EACpE,MACF,QACEyG,GACE3D,EACA9C,EACA0G,EACAC,CACF,CACJ,CACF,CACA,SAASM,GACPd,EACAxB,EACAuC,EACAC,EACAf,EACA,CAIA,IAHAA,EACEA,KACQzB,EAAY,aAAe,SAAlC,GAA4C,IAC1CA,EAAcA,EAAY,MAAgBA,IAAT,MAAwB,CAC5D,IAAI7B,EAAeqD,EACjBnG,EAAe2E,EACf+B,EAAiBQ,EACjBP,EAAuBQ,EACvBpH,EAAQC,EAAa,MACvB,OAAQA,EAAa,IAAK,CACxB,IAAK,GACL,IAAK,IACL,IAAK,IACHiH,GACEnE,EACA9C,EACA0G,EACAC,EACAP,CACF,EACAtG,GAA0B,EAAGE,CAAY,EACzC,MACF,IAAK,IACH,MACF,IAAK,IACH,IAAIjf,EAAWif,EAAa,UACnBA,EAAa,gBAAtB,KACIjf,EAAS,YAAc,EACrBkmB,GACEnE,EACA9C,EACA0G,EACAC,EACAP,CACF,EACAY,GACElE,EACA9C,CACF,GACAjf,EAAS,aAAe,EAC1BkmB,GACEnE,EACA9C,EACA0G,EACAC,EACAP,CACF,GACJA,GACErG,EAAQ,MACRuG,GACEtG,EAAa,UACbA,CACF,EACF,MACF,IAAK,IACHiH,GACEnE,EACA9C,EACA0G,EACAC,EACAP,CACF,EACAA,GACErG,EAAQ,MACRyG,GAA8BxG,EAAa,UAAWA,CAAY,EACpE,MACF,QACEiH,GACEnE,EACA9C,EACA0G,EACAC,EACAP,CACF,CACJ,CACAzB,EAAcA,EAAY,OAC5B,CACF,CACA,SAASqC,GACPb,EACAxB,EACA,CACA,GAAIA,EAAY,aAAe,MAC7B,IAAKA,EAAcA,EAAY,MAAgBA,IAAT,MAAwB,CAC5D,IAAI7B,EAAeqD,EACjBnG,EAAe2E,EACf5E,EAAQC,EAAa,MACvB,OAAQA,EAAa,IAAK,CACxB,IAAK,IACHgH,GAAwClE,EAAc9C,CAAY,EAClED,EAAQ,MACNuG,GACEtG,EAAa,UACbA,CACF,EACF,MACF,IAAK,IACHgH,GAAwClE,EAAc9C,CAAY,EAClED,EAAQ,MACNyG,GAA8BxG,EAAa,UAAWA,CAAY,EACpE,MACF,QACEgH,GAAwClE,EAAc9C,CAAY,CACtE,CACA2E,EAAcA,EAAY,OAC5B,CACJ,CACA,IAAIyC,GAAsB,KAC1B,SAASC,GACP1C,EACA+B,EACAY,EACA,CACA,GAAI3C,EAAY,aAAeyC,GAC7B,IAAKzC,EAAcA,EAAY,MAAgBA,IAAT,MACpC4C,GACE5C,EACA+B,EACAY,CACF,EACG3C,EAAcA,EAAY,OACnC,CACA,SAAS4C,GACPtlC,EACAykC,EACAY,EACA,CACA,OAAQrlC,EAAM,IAAK,CACjB,IAAK,IACHolC,GACEplC,EACAykC,EACAY,CACF,EACArlC,EAAM,MAAQmlC,IACHnlC,EAAM,gBAAf,MACAulC,GACEF,EACAzC,GACA5iC,EAAM,cACNA,EAAM,aACR,EACF,MACF,IAAK,GACHolC,GACEplC,EACAykC,EACAY,CACF,EACA,MACF,IAAK,GACL,IAAK,GACH,IAAIG,EAAwB5C,GAC5BA,GAAuBS,GAAiBrjC,EAAM,UAAU,aAAa,EACrEolC,GACEplC,EACAykC,EACAY,CACF,EACAzC,GAAuB4C,EACvB,MACF,IAAK,IACMxlC,EAAM,gBAAf,OACIwlC,EAAwBxlC,EAAM,UACvBwlC,IAAT,MACSA,EAAsB,gBAA/B,MACMA,EAAwBL,GACzBA,GAAsB,SACvBC,GACEplC,EACAykC,EACAY,CACF,EACCF,GAAsBK,GACvBJ,GACEplC,EACAykC,EACAY,CACF,GACN,MACF,QACED,GACEplC,EACAykC,EACAY,CACF,CACJ,CACF,CACA,SAASI,GAAwB/C,EAAa,CAC5C,IAAIgD,EAAgBhD,EAAY,UAChC,GACWgD,IAAT,OACEhD,EAAcgD,EAAc,MAAiBhD,IAAT,MACtC,CACAgD,EAAc,MAAQ,KACtB,GACGA,EAAgBhD,EAAY,QAC1BA,EAAY,QAAU,KACtBA,EAAcgD,QACHhD,IAAT,KACT,CACF,CACA,SAASiD,GAAyCjD,EAAa,CAC7D,IAAInd,EAAYmd,EAAY,UAC5B,IAAWA,EAAY,MAAQ,MAA3B,EAAgC,CAClC,GAAand,IAAT,KACF,QAAS3lB,EAAI,EAAGA,EAAI2lB,EAAU,OAAQ3lB,IAAK,CACzC,IAAI0lB,EAAgBC,EAAU3lB,CAAC,EAC/BkgC,GAAaxa,EACbsgB,GACEtgB,EACAod,CACF,CACF,CACF+C,GAAwB/C,C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AAaA,EAAO,MACnC,IAAK,GACH2/B,GACEI,EACA//B,EACAwyB,GACA,CAACoM,EACH,EACA,MAAM9lC,EACR,IAAK,GACHof,GAAsC,KACtC,MACF,IAAK,GACL,IAAK,GACH,MACF,QACE,MAAM,MAAMpgB,EAAuB,GAAG,CAAC,CAC3C,CACA,IACGkI,EAAQ,YAAcA,IACrBggC,EAAapE,GAA+B,IAAMl9B,GAAI,EACxD,GAAKshC,GACL,CAOA,GANAL,GACEI,EACA//B,EACAwyB,GACA,CAACoM,EACH,EACU1+B,GAAa6/B,EAAiB,EAAG,EAAE,IAAzC,EAA4C,MAAMjnC,EACtDwmC,GAAsBt/B,EACtB+/B,EAAgB,cAAgBO,GAC9BC,GAAoB,KAClB,KACAR,EACAD,EACA5nB,GACAgnB,GACAD,GACAj/B,EACAwyB,GACAuM,GACAhK,GACA6J,GACAuB,EACA,YACA,GACA,CACF,EACAH,CACF,EACA,MAAMlnC,CACR,CACAynC,GACER,EACAD,EACA5nB,GACAgnB,GACAD,GACAj/B,EACAwyB,GACAuM,GACAhK,GACA6J,GACAuB,EACA,KACA,GACA,CACF,CACF,CACF,CACA,KACF,OAAS,IACTP,GAAsB9E,CAAa,CACrC,CACA,SAASyF,GACPpgC,EACAi2B,EACAoK,EACAC,EACAC,EACA1gC,EACAyB,EACAC,EACAC,EACAg/B,EACAX,EACAY,EACAC,EACAC,EACA,CAGA,GAFA3gC,EAAK,cAAgB,GACrBygC,EAAwBxK,EAAa,aAEnCwK,EAAwB,OACVA,EAAwB,YAAtC,SACA,CACAA,EAAwB,CACtB,YAAa,KACb,MAAO,EACP,SAAU,EACV,SAAU,EACV,gBAAiB,CAAC,EAClB,iBAAkB,GAClB,yBAA0B,GAC1B,UAAWh4B,EACb,EACA+0B,GACEvH,EACAp2B,EACA4gC,CACF,EACA,IAAIG,GACD/gC,EAAQ,YAAcA,EACnB47B,GAA+Bl9B,GAAI,GAClCsB,EAAQ,WAAaA,EACpBsb,GAAiC5c,GAAI,EACrC,EAKR,GAJAqiC,EAAgBC,GACdJ,EACAG,CACF,EACaA,IAAT,KAAwB,C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AAW,aAAarqB,EAAKvR,CAAK,EAClC47B,EAAW,gBAAgBrqB,CAAG,EACpC,MACF,IAAK,OACL,IAAK,OACL,IAAK,OACL,IAAK,OACKvR,GAAR,MACe,OAAOA,GAAtB,YACa,OAAOA,GAApB,UACA,CAAC,MAAMA,CAAK,GACZ,GAAKA,EACD47B,EAAW,aAAarqB,EAAKvR,CAAK,EAClC47B,EAAW,gBAAgBrqB,CAAG,EAClC,MACF,IAAK,UACL,IAAK,QACKvR,GAAR,MACe,OAAOA,GAAtB,YACa,OAAOA,GAApB,UACA,MAAMA,CAAK,EACP47B,EAAW,gBAAgBrqB,CAAG,EAC9BqqB,EAAW,aAAarqB,EAAKvR,CAAK,EACtC,MACF,IAAK,UACH2b,GAA0B,eAAgBigB,CAAU,EACpDjgB,GAA0B,SAAUigB,CAAU,EAC9ClyB,GAAqBkyB,EAAY,UAAW57B,CAAK,EACjD,MACF,IAAK,eACH6J,GACE+xB,EACA,+BACA,gBACA57B,CACF,EACA,MACF,IAAK,eACH6J,GACE+xB,EACA,+BACA,gBACA57B,CACF,EACA,MACF,IAAK,YACH6J,GACE+xB,EACA,+BACA,aACA57B,CACF,EACA,MACF,IAAK,YACH6J,GACE+xB,EACA,+BACA,aACA57B,CACF,EACA,MACF,IAAK,aACH6J,GACE+xB,EACA,+BACA,cACA57B,CACF,EACA,MACF,IAAK,YACH6J,GACE+xB,EACA,+BACA,aACA57B,CACF,EACA,MACF,IAAK,UACH6J,GACE+xB,EACA,uCACA,WACA57B,CACF,EACA,MACF,IAAK,UACH6J,GACE+xB,EACA,uCACA,WACA57B,CACF,EACA,MACF,IAAK,WACH6J,GACE+xB,EACA,uCACA,YACA57B,CACF,EACA,MACF,IAAK,KACH0J,GAAqBkyB,EAAY,KAAM57B,CAAK,EAC5C,MACF,IAAK,YACL,IAAK,cACH,MACF,SAEI,EAAE,EAAIuR,EAAI,SACDA,EAAI,CAAC,IAAb,KAA0BA,EAAI,CAAC,IAAb,KACVA,EAAI,CAAC,IAAb,KAA0BA,EAAI,CAAC,IAAb,OAElBA,EAAMvE,GAAQ,IAA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AAK,QACL,IAAK,cACL,IAAK,OACL,IAAK,MACL,IAAK,WACL,IAAK,WACL,IAAK,UACL,IAAK,YACL,IAAK,OACL,IAAK,UACL,IAAK,WACL,IAAK,QACL,IAAK,UACL,IAAK,UACL,IAAK,WACL,IAAK,QACL,IAAK,YACL,IAAK,UACL,IAAK,QACL,IAAK,QACL,IAAK,OACL,IAAK,gBACL,IAAK,cACL,IAAK,YACL,IAAK,aACL,IAAK,QACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,cACL,IAAK,WACL,IAAK,aACL,IAAK,eACL,IAAK,SACL,IAAK,kBACL,IAAK,YACL,IAAK,mBACL,IAAK,iBACL,IAAK,oBACL,IAAK,aACL,IAAK,YACL,IAAK,cACL,IAAK,OACL,IAAK,mBACL,IAAK,QACL,IAAK,aACL,IAAK,WACL,IAAK,SACL,IAAK,cACH,MAAO,GACT,IAAK,OACL,IAAK,YACL,IAAK,WACL,IAAK,YACL,IAAK,WACL,IAAK,YACL,IAAK,WACL,IAAK,YACL,IAAK,cACL,IAAK,aACL,IAAK,cACL,IAAK,SACL,IAAK,YACL,IAAK,QACL,IAAK,aACL,IAAK,aACL,IAAK,eACL,IAAK,eACH,MAAO,GACT,IAAK,UACH,OAAQzP,GAAwB,EAAG,CACjC,KAAKC,GACH,MAAO,GACT,KAAKC,GACH,MAAO,GACT,KAAKC,GACL,KAAKC,GACH,MAAO,IACT,KAAKC,GACH,MAAO,WACT,QACE,MAAO,GACX,CACF,QACE,MAAO,GACX,CACF,CACA,IAAIuzC,GAA4B,GAC9BC,GAAc,KACdC,GAAa,KACbC,GAAc,KACdC,GAAiB,IAAI,IACrBC,GAAwB,IAAI,IAC5BC,GAAiC,CAAC,EAClCR,GACE,sPAAsP,MACpP,GACF,EACJ,SAASF,GAAuB/jC,EAAcrF,EAAa,CACzD,OAAQqF,EAAc,CACpB,IAAK,UACL,IAAK,WACHokC,GAAc,KACd,MACF,IAAK,YACL,IAAK,YACHC,GAAa,KACb,MACF,IAAK,YACL,IAAK,WACHC,GAAc,KACd,MACF,IAAK,cACL,IAAK,aACHC,GAA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CzB,IACA,OACA,UACA,UACA,OACA,UACA,QACA,QACA,IACA,MACA,MACA,MACA,QACA,aACA,OACA,KACA,SACA,SACA,UACA,SACA,OACA,OACA,MACA,WACA,UACA,OACA,WACA,KACA,YACA,MACA,UACA,MACA,SACA,MACA,MACA,KACA,KACA,UACA,KACA,WACA,aACA,SACA,OACA,SACA,OACA,KACA,KACA,KACA,KACA,KACA,KACA,OACA,SACA,SACA,KACA,OACA,IACA,MACA,QACA,MACA,MACA,QACA,SACA,KACA,OACA,MACA,OACA,UACA,OACA,WACA,QACA,MACA,OACA,KACA,WACA,SACA,SACA,IACA,UACA,MACA,WACA,IACA,KACA,KACA,OACA,IACA,OACA,SACA,UACA,SACA,SACA,OACA,QACA,SACA,SACA,OACA,SACA,SACA,QACA,MACA,UACA,MACA,QACA,QACA,KACA,WACA,WACA,QACA,KACA,QACA,OACA,KACA,QACA,KACA,IACA,KACA,MACA,QACA,KAAK,CACG,EAEGkG,GAAMlG,GAAO,CACxB,MACA,IACA,WACA,cACA,eACA,eACA,gBACA,mBACA,SACA,WACA,OACA,OACA,UACA,eACA,cACA,SACA,OACA,IACA,QACA,WACA,QACA,QACA,YACA,OACA,iBACA,SACA,OACA,WACA,QACA,OACA,OACA,UACA,UACA,WACA,iBACA,OACA,OACA,QACA,SACA,SACA,OACA,WACA,QACA,OACA,QACA,OACA,OAAO,CACC,EAEGmG,GAAanG,GAAO,CAC/B,UACA,gBACA,sBACA,cACA,mBACA,oBACA,oBACA,iBACA,eACA,UACA,UACA,UACA,UACA,UACA,iBACA,UACA,UACA,cACA,eACA,WACA,eACA,qBACA,cACA,SACA,cAAc,CACN,EAMGoG,GAAgBpG,GAAO,CAClC,UACA,gBACA,SACA,UACA,YACA,mBACA,iBACA,gBACA,gBACA,gBACA,QACA,YACA,OACA,eACA,YACA,UACA,gBACA,SACA,MACA,aACA,UACA,KAAK,CACG,EAEGqG,GAASrG,GAAO,CAC3B,OACA,WACA,SACA,UACA,QACA,SACA,KACA,aACA,gBACA,KACA,KACA,QACA,UACA,WACA,QACA,OACA,KACA,SACA,QACA,SACA,OACA,OACA,UACA,SACA,MACA,QACA,MACA,SACA,aACA,aAAa,CACL,EAIGsG,GAAmBtG,GAAO,CACrC,UACA,cACA,aACA,WACA,YACA,UACA,UACA,SACA,SACA,QACA,YACA,aACA,iBACA,cACA,MAAM,CACE,EAEGuG,GAAOvG,GAAO,CAAC,OAAO,CAAU,EC1RhCiG,GAAOjG,GAAO,CACzB,SACA,SACA,QACA,MACA,iBACA,eACA,uBACA,WACA,aACA,UACA,SACA,UACA,cACA,cACA,UACA,OACA,QACA,QACA,QACA,OACA,UACA,UACA,aACA,WACA,eACA,SACA,cACA,WACA,WACA,UACA,MACA,WACA,0BACA,wBACA,WACA,YACA,UACA,eACA,cACA,OACA,MACA,UACA,SACA,SACA,OACA,OACA,WACA,KACA,QACA,YACA,YACA,QACA,OACA,QACA,OACA,OACA,UACA,OACA,MACA,MACA,YACA,QACA,SACA,MACA,YACA,WACA,QACA,OACA,QACA,UACA,aACA,SACA,OACA,UACA,OACA,UACA,cACA,cACA,UACA,gBACA,sBACA,SACA,UACA,UACA,aACA,WACA,MACA,WACA,MACA,WACA,OACA,OACA,UACA,aACA,QACA,WACA,QACA,OACA,QACA,OACA,OACA,UACA,QACA,MACA,SACA,OACA,QACA,UACA,WACA,QACA,YACA,OACA,SACA,SACA,QACA,QACA,OACA,OAAO,CACC,EAEGkG,GAAMlG,GAAO,CACxB,gBACA,aACA,WACA,qBACA,YACA,SACA,gBACA,gBACA,UACA,gBACA,iBACA,QACA,OACA,KACA,QACA,OACA,gBACA,YACA,YACA,QACA,sBACA,8BACA,gBACA,kBACA,KACA,KACA,IACA,KACA,KACA,kBACA,YACA,UACA,UACA,MACA,WACA,YACA,MACA,WACA,OACA,eACA,YACA,SACA,cACA,cACA,gBACA,cACA,YACA,mBACA,eACA,aACA,eACA,cACA,KACA,KACA,KACA,KACA,aACA,WACA,gBACA,oBACA,SACA,OACA,KACA,kBACA,KACA,MACA,YACA,IACA,KACA,KACA,KACA,KACA,UACA,YACA,aACA,WACA,OACA,eACA,iBACA,eACA,mBACA,iBACA,QACA,aACA,aACA,eACA,eACA,cACA,cACA,mBACA,YACA,MACA,OACA,YACA,QACA,SACA,OACA,MACA,OACA,aACA,SACA,WACA,UACA,QACA,SACA,cACA,SACA,WACA,cACA,OACA,aACA,sBACA,mBACA,eACA,SACA,gBACA,sBACA,iBACA,IACA,KACA,KACA,SACA,OACA,OACA,cACA,YACA,UACA,SACA,SACA,QACA,OACA,kBACA,QACA,mBACA,mBACA,eACA,cACA,eACA,cACA,aACA,eACA,mBACA,oBACA,iBACA,kBACA,oBACA,iBACA,SACA,eACA,QACA,eACA,iBACA,WACA,cACA,UACA,UACA,YACA,mBACA,cACA,kBACA,iBACA,aACA,OACA,KACA,KACA,UACA,SACA,UACA,aACA,UACA,aACA,gBACA,gBACA,QACA,eACA,OACA,eACA,mBACA,mBACA,IACA,KACA,KACA,QACA,IACA,KACA,KACA,IACA,YAAY,CACJ,EAEGqG,GAASrG,GAAO,CAC3B,SACA,cACA,QACA,WACA,QACA,cACA,cACA,gBACA,aACA,aACA,QACA,MACA,UACA,eACA,WACA,QACA,QACA,SACA,OACA,KACA,UACA,SACA,gBACA,SACA,SACA,iBACA,YACA,WACA,cACA,UACA,UACA,gBACA,WACA,WACA,OACA,WACA,WACA,aACA,UACA,SACA,SACA,cACA,gBACA,uBACA,YACA,YACA,aACA,WACA,iBACA,iBACA,YACA,UACA,QACA,OAAO,CACR,EAEYwG,GAAMxG,GAAO,CACxB,aACA,SACA,cACA,YACA,aAAa,CACL,ECvXGyG,GAAgBxG,GAAK,uBAAuB,EAC5CyG,GAAWzG,GAAK,uBAAuB,EACvC0G,GAAc1G,GAAK,aAAa,EAChC2G,GAAY3G,GAAK,8BAA8B,EAC/C4G,GAAY5G,GAAK,gBAAgB,EACjC6G,GAAiB7G,GAC5B,oGAEW8G,GAAoB9G,GAAK,uBAAuB,EAChD+G,GAAkB/G,GAC7B,+DAEWgH,GAAehH,GAAK,SAAS,EAC7BiH,GAAiBjH,GAAK,0BAA0B,EC0BvDkH,GAAY,CAChB1C,QAAS,EACT2C,UAAW,EACXb,KAAM,EACNc,aAAc,EACdC,gBAAiB,EACjBC,WAAY,EACZC,uBAAwB,EACxBC,QAAS,EACTC,SAAU,EACVC,aAAc,GACdC,iBAAkB,GAClBC,SAAU,IAGNC,GAAY,UAAA,CAChB,OAAO,OAAOC,OAAW,IAAc,KAAOA,MAChD,EAUMC,GAA4B,SAChCC,EACAC,EAAoC,CAEpC,GACE,OAAOD,GAAiB,UACxB,OAAOA,EAAaE,cAAiB,WAErC,OAAO,KAMT,IAAIC,EAAS,KACPC,EAAY,wBACdH,GAAqBA,EAAkBI,aAAaD,CAAS,IAC/DD,EAASF,EAAkBK,aAAaF,CAAS,GAGnD,IAAMG,EAAa,aAAeJ,EAAS,IAAMA,EAAS,IAE1D,GAAI,CACF,OAAOH,EAAaE,aAAaK,EAAY,CAC3CC,WAAWxC,EAAI,CACb,OAAOA,CACT,EACAyC,gBAAgBC,EAAS,CACvB,OAAOA,CACT,CACD,CAAA,CACH,OAASC,EAAG,CAIVC,eAAQC,KACN,uBAAyBN,EAAa,wBAAwB,EAEzD,IACT,CACF,EAEMO,GAAkB,UAAA,CACtB,MAAO,CACLC,wBAAyB,CAAA,EACzBC,sBAAuB,CAAA,EACvBC,uBAAwB,CAAA,EACxBC,yBAA0B,CAAA,EAC1BC,uBAAwB,CAAA,EACxBC,wBAAyB,CAAA,EACzBC,sBAAuB,CAAA,EACvBC,oBAAqB,CAAA,EACrBC,uBAAwB,CAAA,EAE5B,EAEA,SAASC,IAAgD,CAAA,IAAhC1B,EAAApH,UAAAC,OAAA,GAAAD,UAAA,CAAA,IAAA+I,OAAA/I,UAAA,CAAA,EAAqBmH,GAAS,EAC/C6B,EAAwBC,GAAqBH,GAAgBG,CAAI,EAMvE,GAJAD,EAAUE,QAAUC,QAEpBH,EAAUI,QAAU,CAAA,EAGlB,CAAChC,GACD,CAACA,EAAOL,UACRK,EAAOL,SAASsC,WAAa7C,GAAUO,UACvC,CAACK,EAAOkC,QAIRN,OAAAA,EAAUO,YAAc,GAEjBP,EAGT,IAAMjC,EAAaK,EAAbL,SAEAyC,EAAmBzC,EACnB0C,EACJD,EAAiBC,cAWfrC,EATFsC,qBACAC,EAQEvC,EARFuC,oBACAC,EAOExC,EAPFwC,KACAN,EAMElC,EANFkC,QACAO,EAKEzC,EALFyC,WAAUC,EAKR1C,EAJF2C,aAAYD,IAAA,SAAG1C,EAAO2C,cAAiB3C,EAAe4C,iBAIpD5C,EAHF6C,oBACAC,EAEE9C,EAFF8C,UACA5C,EACEF,EADFE,aAGI6C,EAAmBb,EAAQ5I,UAE3B0J,EAAYtF,GAAaqF,EAAkB,WAAW,EACtDE,EAASvF,GAAaqF,EAAkB,QAAQ,EAChDG,EAAiBxF,GAAaqF,EAAkB,aAAa,EAC7DI,EAAgBzF,GAAaqF,EAAkB,YAAY,EAC3DK,EAAgB1F,GAAaqF,EAAkB,YAAY,EAC3DM,EAAgB3F,GAAaqF,EAAkB,YAAY,EAC3DO,EAAgB5F,GAAaqF,EAAkB,YAAY,EAC3DQ,EACJf,GAAQA,EAAKlJ,UAAYoE,GAAa8E,EAAKlJ,UAAW,UAAU,EAAI,KAChEkK,EACJhB,GAAQA,EAAKlJ,UAAYoE,GAAa8E,EAAKlJ,UAAW,UAAU,EAAI,KAQtE,GAAI,OAAOiJ,GAAwB,WAAY,CAC7C,IAAMkB,EAAW9D,EAAS+D,cAAc,UAAU,EAC9CD,EAASE,SAAWF,EAASE,QAAQC,gBACvCjE,EAAW8D,EAASE,QAAQC,cAEhC,CAEA,IAAIC,EACAC,EAAY,GAEhBC,EAKIpE,EAJFqE,EAAcD,EAAdC,eACAC,EAAkBF,EAAlBE,mBACAC,GAAsBH,EAAtBG,uBACAC,EAAoBJ,EAApBI,qBAEMC,EAAehC,EAAfgC,WAEJC,EAAQrD,GAAe,EAK3BY,EAAUO,YACR,OAAOxK,IAAY,YACnB,OAAOyL,GAAkB,YACzBY,GACAA,EAAeM,qBAAuB3C,OAExC,IACEjD,EAQE6F,GAPF5F,GAOE4F,GANF3F,GAME2F,GALF1F,GAKE0F,GAJFzF,GAIEyF,GAHFvF,GAGEuF,GAFFtF,GAEEsF,GADFpF,GACEoF,GAEExF,GAAmBwF,GAQrBC,GAAe,KACbC,GAAuBpI,EAAS,CAAA,EAAI,CACxC,GAAGqI,GACH,GAAGA,GACH,GAAGA,GACH,GAAGA,GACH,GAAGA,EAAS,CACb,EAGGC,GAAe,KACbC,GAAuBvI,EAAS,CAAA,EAAI,CACxC,GAAGwI,GACH,GAAGA,GACH,GAAGA,GACH,GAAGA,EAAS,CACb,EAQGC,GAA0BlN,OAAOM,KACnCC,GAAO,KAAM,CACX4M,aAAc,CACZC,SAAU,GACVC,aAAc,GACdC,WAAY,GACZ7H,MAAO,MAET8H,mBAAoB,CAClBH,SAAU,GACVC,aAAc,GACdC,WAAY,GACZ7H,MAAO,MAET+H,+BAAgC,CAC9BJ,SAAU,GACVC,aAAc,GACdC,WAAY,GACZ7H,MAAO,EACR,CACF,CAAA,CAAC,EAIAgI,GAAc,KAGdC,GAAc,KAGZC,GAAyB3N,OAAOM,KACpCC,GAAO,KAAM,CACXqN,SAAU,CACRR,SAAU,GACVC,aAAc,GACdC,WAAY,GACZ7H,MAAO,MAEToI,eAAgB,CACdT,SAAU,GACVC,aAAc,GACdC,WAAY,GACZ7H,MAAO,IACR,CACF,CAAA,CAAC,EAIAqI,EAAkB,GAGlBC,GAAkB,GAGlBC,GAA0B,GAI1BC,GAA2B,GAK3BC,GAAqB,GAKrBC,GAAe,GAGfC,GAAiB,GAGjBC,GAAa,GAIbC,GAAa,GAMbC,GAAa,GAIbC,GAAsB,GAItBC,GAAsB,GAKtBC,GAAe,GAefC,GAAuB,GACrBC,GAA8B,gBAGhCC,GAAe,GAIfC,GAAW,GAGXC,GAA0C,CAAA,EAG1CC,GAAkB,KAChBC,GAA0BxK,EAAS,CAAA,EAAI,CAC3C,iBACA,QACA,WACA,OACA,gBACA,OACA,SACA,OACA,KACA,KACA,KACA,KACA,QACA,UACA,WACA,WACA,YACA,SACA,QACA,MACA,WACA,QACA,QACA,QACA,KAAK,CACN,EAGGyK,GAAgB,KACdC,GAAwB1K,EAAS,CAAA,EAAI,CACzC,QACA,QACA,MACA,SACA,QACA,OAAO,CACR,EAGG2K,GAAsB,KACpBC,GAA8B5K,EAAS,CAAA,EAAI,CAC/C,MACA,QACA,MACA,KACA,QACA,OACA,UACA,cACA,OACA,UACA,QACA,QACA,QACA,OAAO,CACR,EAEK6K,GAAmB,qCACnBC,GAAgB,6BAChBC,GAAiB,+BAEnBC,GAAYD,GACZE,GAAiB,GAGjBC,GAAqB,KACnBC,GAA6BnL,EACjC,CAAA,EACA,CAAC6K,GAAkBC,GAAeC,EAAc,EAChD/M,EAAc,EAGZoN,GAAiCpL,EAAS,CAAA,EAAI,CAChD,KACA,KACA,KACA,KACA,OAAO,CACR,EAEGqL,GAA0BrL,EAAS,CAAA,EAAI,CAAC,gBAAgB,CAAC,EAMvDsL,GAA+BtL,EAAS,CAAA,EAAI,CAChD,QACA,QACA,OACA,IACA,QAAQ,CACT,EAGGuL,GAAmD,KACjDC,GAA+B,CAAC,wBAAyB,WAAW,EACpEC,GAA4B,YAC9BtL,GAA2D,KAG3DuL,GAAwB,KAKtBC,GAAcrI,EAAS+D,cAAc,MAAM,EAE3CuE,GAAoB,SACxBC,EAAkB,CAElB,OAAOA,aAAqBvM,QAAUuM,aAAqBC,QAC7D,EAQMC,GAAe,UAA0B,CAAA,IAAhBC,EAAAzP,UAAAC,OAAA,GAAAD,UAAA,CAAA,IAAA+I,OAAA/I,UAAA,CAAA,EAAc,CAAA,EAC3C,GAAImP,IAAUA,KAAWM,EACvB,QAIE,CAACA,GAAO,OAAOA,GAAQ,YACzBA,EAAM,CAAA,GAIRA,EAAMvL,GAAMuL,CAAG,EAEfT,GAEEC,GAA6BjN,QAAQyN,EAAIT,iBAAiB,IAAM,GAC5DE,GACAO,EAAIT,kBAGVpL,GACEoL,KAAsB,wBAClBvN,GACAH,GAGNsK,GACEjJ,GAAqB8M,EAAK,cAAc,GACxCrO,GAAaqO,EAAI7D,YAAY,EACzBnI,EAAS,CAAA,EAAIgM,EAAI7D,aAAchI,EAAiB,EAChDiI,GACNE,GACEpJ,GAAqB8M,EAAK,cAAc,GACxCrO,GAAaqO,EAAI1D,YAAY,EACzBtI,EAAS,CAAA,EAAIgM,EAAI1D,aAAcnI,EAAiB,EAChDoI,GACN2C,GACEhM,GAAqB8M,EAAK,oBAAoB,GAC9CrO,GAAaqO,EAAId,kBAAkB,EAC/BlL,EAAS,CAAA,EAAIgM,EAAId,mBAAoBlN,EAAc,EACnDmN,GACNR,GACEzL,GAAqB8M,EAAK,mBAAmB,GAC7CrO,GAAaqO,EAAIC,iBAAiB,EAC9BjM,EACES,GAAMmK,EAA2B,EACjCoB,EAAIC,kBACJ9L,EAAiB,EAEnByK,GACNH,GACEvL,GAAqB8M,EAAK,mBAAmB,GAC7CrO,GAAaqO,EAAIE,iBAAiB,EAC9BlM,EACES,GAAMiK,EAAqB,EAC3BsB,EAAIE,kBACJ/L,EAAiB,EAEnBuK,GACNH,GACErL,GAAqB8M,EAAK,iBAAiB,GAC3CrO,GAAaqO,EAAIzB,eAAe,EAC5BvK,EAAS,CAAA,EAAIgM,EAAIzB,gBAAiBpK,EAAiB,EACnDqK,GACNxB,GACE9J,GAAqB8M,EAAK,aAAa,GAAKrO,GAAaqO,EAAIhD,WAAW,EACpEhJ,EAAS,CAAA,EAAIgM,EAAIhD,YAAa7I,EAAiB,EAC/CM,GAAM,CAAA,CAAE,EACdwI,GACE/J,GAAqB8M,EAAK,aAAa,GAAKrO,GAAaqO,EAAI/C,WAAW,EACpEjJ,EAAS,CAAA,EAAIgM,EAAI/C,YAAa9I,EAAiB,EAC/CM,GAAM,CAAA,CAAE,EACd6J,GAAepL,GAAqB8M,EAAK,cAAc,EACnDA,EAAI1B,cAAgB,OAAO0B,EAAI1B,cAAiB,SAC9C7J,GAAMuL,EAAI1B,YAAY,EACtB0B,EAAI1B,aACN,GAEJjB,EAAkB2C,EAAI3C,kBAAoB,GAC1CC,GAAkB0C,EAAI1C,kBAAoB,GAC1CC,GAA0ByC,EAAIzC,yBAA2B,GACzDC,GAA2BwC,EAAIxC,2BAA6B,GAC5DC,GAAqBuC,EAAIvC,oBAAsB,GAC/CC,GAAesC,EAAItC,eAAiB,GACpCC,GAAiBqC,EAAIrC,gBAAkB,GACvCG,GAAakC,EAAIlC,YAAc,GAC/BC,GAAsBiC,EAAIjC,qBAAuB,GACjDC,GAAsBgC,EAAIhC,qBAAuB,GACjDH,GAAamC,EAAInC,YAAc,GAC/BI,GAAe+B,EAAI/B,eAAiB,GACpCC,GAAuB8B,EAAI9B,sBAAwB,GACnDE,GAAe4B,EAAI5B,eAAiB,GACpCC,GAAW2B,EAAI3B,UAAY,GAC3B3H,GAAiBf,GAAQqK,EAAIG,kBAAkB,EAC3CH,EAAIG,mBACJjE,GAEJ8C,GACE,OAAOgB,EAAIhB,WAAc,SAAWgB,EAAIhB,UAAYD,GAEtDK,GACElM,GAAqB8M,EAAK,gCAAgC,GAC1DA,EAAIZ,gCACJ,OAAOY,EAAIZ,gCAAmC,SAC1C3K,GAAMuL,EAAIZ,8BAA8B,EACxCpL,EAAS,CAAA,EAAI,CAAC,KAAM,KAAM,KAAM,KAAM,OAAO,CAAC,EAEpDqL,GACEnM,GAAqB8M,EAAK,yBAAyB,GACnDA,EAAIX,yBACJ,OAAOW,EAAIX,yBAA4B,SACnC5K,GAAMuL,EAAIX,uBAAuB,EACjCrL,EAAS,CAAA,EAAI,CAAC,gBAAgB,CAAC,EAErC,IAAMoM,EACJlN,GAAqB8M,EAAK,yBAAyB,GACnDA,EAAIvD,yBACJ,OAAOuD,EAAIvD,yBAA4B,SACnChI,GAAMuL,EAAIvD,uBAAuB,EACjC3M,GAAO,IAAI,EA6IjB,GA3IA2M,GAA0B3M,GAAO,IAAI,EAGnCoD,GAAqBkN,EAAuB,cAAc,GAC1DR,GAAkBQ,EAAsB1D,YAAY,IAEpDD,GAAwBC,aAAe0D,EAAsB1D,cAI7DxJ,GAAqBkN,EAAuB,oBAAoB,GAChER,GAAkBQ,EAAsBtD,kBAAkB,IAE1DL,GAAwBK,mBACtBsD,EAAsBtD,oBAIxB5J,GACEkN,EACA,gCAAgC,GAElC,OAAOA,EAAsBrD,gCAAmC,YAEhEN,GAAwBM,+BACtBqD,EAAsBrD,gCAGtBU,KACFH,GAAkB,IAGhBS,KACFD,GAAa,IAIXQ,KACFnC,GAAenI,EAAS,CAAA,EAAIqI,EAAS,EACrCC,GAAexM,GAAO,IAAI,EACtBwO,GAAazI,OAAS,KACxB7B,EAASmI,GAAcE,EAAS,EAChCrI,EAASsI,GAAcE,EAAU,GAG/B8B,GAAaxI,MAAQ,KACvB9B,EAASmI,GAAcE,EAAQ,EAC/BrI,EAASsI,GAAcE,EAAS,EAChCxI,EAASsI,GAAcE,EAAS,GAG9B8B,GAAavI,aAAe,KAC9B/B,EAASmI,GAAcE,EAAe,EACtCrI,EAASsI,GAAcE,EAAS,EAChCxI,EAASsI,GAAcE,EAAS,GAG9B8B,GAAarI,SAAW,KAC1BjC,EAASmI,GAAcE,EAAW,EAClCrI,EAASsI,GAAcE,EAAY,EACnCxI,EAASsI,GAAcE,EAAS,IAMpCU,GAAuBC,SAAW,KAClCD,GAAuBE,eAAiB,KAGpClK,GAAqB8M,EAAK,UAAU,IAClC,OAAOA,EAAIK,UAAa,WAC1BnD,GAAuBC,SAAW6C,EAAIK,SAC7B1O,GAAaqO,EAAIK,QAAQ,IAC9BlE,KAAiBC,KACnBD,GAAe1H,GAAM0H,EAAY,GAGnCnI,EAASmI,GAAc6D,EAAIK,SAAUlM,EAAiB,IAItDjB,GAAqB8M,EAAK,UAAU,IAClC,OAAOA,EAAIM,UAAa,WAC1BpD,GAAuBE,eAAiB4C,EAAIM,SACnC3O,GAAaqO,EAAIM,QAAQ,IAC9BhE,KAAiBC,KACnBD,GAAe7H,GAAM6H,EAAY,GAGnCtI,EAASsI,GAAc0D,EAAIM,SAAUnM,EAAiB,IAKxDjB,GAAqB8M,EAAK,mBAAmB,GAC7CrO,GAAaqO,EAAIC,iBAAiB,GAElCjM,EAAS2K,GAAqBqB,EAAIC,kBAAmB9L,EAAiB,EAItEjB,GAAqB8M,EAAK,iBAAiB,GAC3CrO,GAAaqO,EAAIzB,eAAe,IAE5BA,KAAoBC,KACtBD,GAAkB9J,GAAM8J,EAAe,GAGzCvK,EAASuK,GAAiByB,EAAIzB,gBAAiBpK,EAAiB,GAIhEjB,GAAqB8M,EAAK,qBAAqB,GAC/CrO,GAAaqO,EAAIO,mBAAmB,IAEhChC,KAAoBC,KACtBD,GAAkB9J,GAAM8J,EAAe,GAGzCvK,EAASuK,GAAiByB,EAAIO,oBAAqBpM,EAAiB,GAIlEiK,KACFjC,GAAa,OAAO,EAAI,IAItBwB,IACF3J,EAASmI,GAAc,CAAC,OAAQ,OAAQ,MAAM,CAAC,EAI7CA,GAAaqE,QACfxM,EAASmI,GAAc,CAAC,OAAO,CAAC,EAChC,OAAOa,GAAYyD,OAGjBT,EAAIU,qBAAsB,CAC5B,GAAI,OAAOV,EAAIU,qBAAqBrI,YAAe,WACjD,MAAM7E,GACJ,6EAA6E,EAIjF,GAAI,OAAOwM,EAAIU,qBAAqBpI,iBAAoB,WACtD,MAAM9E,GACJ,kFAAkF,EAKtFgI,EAAqBwE,EAAIU,qBAGzBjF,EAAYD,EAAmBnD,WAAW,EAAE,CAC9C,MAEMmD,IAAuBlC,SACzBkC,EAAqB5D,GACnBC,EACAmC,CAAa,GAKbwB,IAAuB,MAAQ,OAAOC,GAAc,WACtDA,EAAYD,EAAmBnD,WAAW,EAAE,IAc7C2D,EAAM7C,oBAAoB3I,OAAS,GAClCwL,EAAM9C,sBAAsB1I,OAAS,IACvC2L,KAAiBC,KAEjBD,GAAe1H,GAAM0H,EAAY,GAIjCH,EAAM9C,sBAAsB1I,OAAS,GACrC8L,KAAiBC,KAEjBD,GAAe7H,GAAM6H,EAAY,GAK/B1M,IACFA,GAAOoQ,CAAG,EAGZN,GAASM,CACX,EAKMW,GAAe3M,EAAS,CAAA,EAAI,CAChC,GAAGqI,GACH,GAAGA,GACH,GAAGA,EAAkB,CACtB,EACKuE,GAAkB5M,EAAS,CAAA,EAAI,CACnC,GAAGqI,GACH,GAAGA,EAAqB,CACzB,EAQKwE,GAAuB,SAAUxM,EAAgB,CACrD,IAAIyM,EAAS/F,EAAc1G,CAAO,GAI9B,CAACyM,GAAU,CAACA,EAAOC,WACrBD,EAAS,CACPE,aAAchC,GACd+B,QAAS,aAIb,IAAMA,EAAUlP,GAAkBwC,EAAQ0M,OAAO,EAC3CE,GAAgBpP,GAAkBiP,EAAOC,OAAO,EAEtD,OAAK7B,GAAmB7K,EAAQ2M,YAAY,EAIxC3M,EAAQ2M,eAAiBlC,GAIvBgC,EAAOE,eAAiBjC,GACnBgC,IAAY,MAMjBD,EAAOE,eAAiBnC,GAExBkC,IAAY,QACXE,KAAkB,kBACjB7B,GAA+B6B,EAAa,GAM3CpO,EAAQ8N,GAAaI,CAAO,EAGjC1M,EAAQ2M,eAAiBnC,GAIvBiC,EAAOE,eAAiBjC,GACnBgC,IAAY,OAKjBD,EAAOE,eAAiBlC,GACnBiC,IAAY,QAAU1B,GAAwB4B,EAAa,EAK7DpO,EAAQ+N,GAAgBG,CAAO,EAGpC1M,EAAQ2M,eAAiBjC,GAKzB+B,EAAOE,eAAiBlC,IACxB,CAACO,GAAwB4B,EAAa,GAMtCH,EAAOE,eAAiBnC,IACxB,CAACO,GAA+B6B,EAAa,EAEtC,GAMP,CAACL,GAAgBG,CAAO,IACvBzB,GAA6ByB,CAAO,GAAK,CAACJ,GAAaI,CAAO,GAMjExB,GAAAA,KAAsB,yBACtBL,GAAmB7K,EAAQ2M,YAAY,GA3EhC,EAqFX,EAOME,GAAe,SAAUC,EAAU,CACvC5P,GAAUgI,EAAUI,QAAS,CAAEtF,QAAS8M,CAAI,CAAE,EAE9C,GAAI,CAEFpG,EAAcoG,CAAI,EAAEC,YAAYD,CAAI,CACtC,OAAS3I,EAAG,CACVoC,EAAOuG,CAAI,CACb,CACF,EAQME,GAAmB,SAAUC,EAAcjN,EAAgB,CAC/D,GAAI,CACF9C,GAAUgI,EAAUI,QAAS,CAC3B3C,UAAW3C,EAAQkN,iBAAiBD,CAAI,EACxCE,KAAMnN,CACP,CAAA,CACH,OAASmE,EAAG,CACVjH,GAAUgI,EAAUI,QAAS,CAC3B3C,UAAW,KACXwK,KAAMnN,CACP,CAAA,CACH,CAKA,GAHAA,EAAQoN,gBAAgBH,CAAI,EAGxBA,IAAS,KACX,GAAIxD,IAAcC,GAChB,GAAI,CACFmD,GAAa7M,CAAO,CACtB,OAASmE,EAAG,CAAC,KAEb,IAAI,CACFnE,EAAQqN,aAAaJ,EAAM,EAAE,CAC/B,OAAS9I,EAAG,CAAC,CAGnB,EAQMmJ,GAAgB,SAAUC,EAAa,CAE3C,IAAIC,EAAM,KACNC,EAAoB,KAExB,GAAIjE,GACF+D,EAAQ,oBAAsBA,MACzB,CAEL,IAAMG,GAAU7P,GAAY0P,EAAO,aAAa,EAChDE,EAAoBC,IAAWA,GAAQ,CAAC,CAC1C,CAGExC,KAAsB,yBACtBP,KAAcD,KAGd6C,EACE,iEACAA,EACA,kBAGJ,IAAMI,GAAexG,EACjBA,EAAmBnD,WAAWuJ,CAAK,EACnCA,EAKJ,GAAI5C,KAAcD,GAChB,GAAI,CACF8C,EAAM,IAAIpH,EAAS,EAAGwH,gBAAgBD,GAAczC,EAAiB,CACvE,OAAS/G,GAAG,CAAC,CAIf,GAAI,CAACqJ,GAAO,CAACA,EAAIK,gBAAiB,CAChCL,EAAMlG,EAAewG,eAAenD,GAAW,WAAY,IAAI,EAC/D,GAAI,CACF6C,EAAIK,gBAAgBE,UAAYnD,GAC5BxD,EACAuG,EACN,OAASxJ,GAAG,CACV,CAEJ,CAEA,IAAM6J,GAAOR,EAAIQ,MAAQR,EAAIK,gBAU7B,OARIN,GAASE,GACXO,GAAKC,aACHhL,EAASiL,eAAeT,CAAiB,EACzCO,GAAKG,WAAW,CAAC,GAAK,IAAI,EAK1BxD,KAAcD,GACTjD,EAAqB2G,KAC1BZ,EACAlE,GAAiB,OAAS,MAAM,EAChC,CAAC,EAGEA,GAAiBkE,EAAIK,gBAAkBG,EAChD,EAQMK,GAAsB,SAAUlJ,EAAU,CAC9C,OAAOoC,EAAmB6G,KACxBjJ,EAAK+B,eAAiB/B,EACtBA,EAEAY,EAAWuI,aACTvI,EAAWwI,aACXxI,EAAWyI,UACXzI,EAAW0I,4BACX1I,EAAW2I,mBACb,IAAI,CAER,EAqBMC,GAA4B,SAAU7B,EAAa,CACvDA,EAAK8B,UAAS,EACd,IAAMC,EAAStH,EAAmB6G,KAChCtB,EAAK5F,eAAiB4F,EACtBA,EAEA/G,EAAWyI,UACTzI,EAAWwI,aACXxI,EAAW2I,mBACX3I,EAAW0I,4BACb,IAAI,EAGFK,EAAcD,EAAOE,SAAQ,EACjC,KAAOD,GAAa,CAClB,IAAIE,GAAOF,EAAYE,KACvBtS,GAAa,CAACsF,EAAeC,GAAUC,EAAW,EAAI+M,IAAgB,CACpED,GAAOjR,GAAciR,GAAMC,GAAM,GAAG,CACtC,CAAC,EACDH,EAAYE,KAAOA,GACnBF,EAAcD,EAAOE,SAAQ,CAC/B,CACF,EAcMG,GAAe,SAAUlP,EAAgB,CAI7C,IAAMmP,EAAcrI,EAAcA,EAAY9G,CAAO,EAAI,KAKzD,OAJI,OAAOmP,GAAgB,UAIvBrP,GAAkBqP,CAAW,IAAM,OAC9B,GAIP,OAAOnP,EAAQoP,UAAa,UAC5B,OAAOpP,EAAQqP,aAAgB,UAC/B,OAAOrP,EAAQ+M,aAAgB,YAM/B/M,EAAQsP,aAAe1I,EAAc5G,CAAO,GAC5C,OAAOA,EAAQoN,iBAAoB,YACnC,OAAOpN,EAAQqN,cAAiB,YAChC,OAAOrN,EAAQ2M,cAAiB,UAChC,OAAO3M,EAAQiO,cAAiB,YAChC,OAAOjO,EAAQuP,eAAkB,YAQjCvP,EAAQuF,WAAasB,EAAY7G,CAAO,GAYxCA,EAAQmO,aAAe1H,EAAczG,CAAO,CAEhD,EAaMwP,GAAsB,SAAU7O,EAAc,CAClD,GAAI,CAACkG,GAAe,OAAOlG,GAAU,UAAYA,IAAU,KACzD,MAAO,GAGT,GAAI,CACF,OAAOkG,EAAYlG,CAAa,IAAM+B,GAAUS,gBAClD,OAASgB,EAAG,CACV,MAAO,EACT,CACF,EAaMsL,GAAU,SAAU9O,EAAc,CACtC,GAAI,CAACkG,GAAe,OAAOlG,GAAU,UAAYA,IAAU,KACzD,MAAO,GAGT,GAAI,CACF,OAAO,OAAOkG,EAAYlG,CAAK,GAAM,QACvC,OAASwD,EAAG,CACV,MAAO,EACT,CACF,EAEA,SAASuL,GACP/H,EACAmH,EACAE,EAAsB,CAEtBtS,GAAaiL,EAAQgI,GAAW,CAC9BA,EAAKvB,KAAKlJ,EAAW4J,EAAaE,EAAM3D,EAAM,CAChD,CAAC,CACH,CAWA,IAAMuE,GAAoB,SAAUd,EAAgB,CAClD,IAAI7H,EAAU,KAMd,GAHAyI,GAAc/H,EAAMhD,uBAAwBmK,EAAa,IAAI,EAGzDI,GAAaJ,CAAW,EAC1BjC,OAAAA,GAAaiC,CAAW,EACjB,GAIT,IAAMpC,EAAU5M,GAAkBgP,EAAYM,QAAQ,EAsCtD,GAnCAM,GAAc/H,EAAM7C,oBAAqBgK,EAAa,CACpDpC,QAAAA,EACAmD,YAAa/H,EACd,CAAA,EAICuB,IACAyF,EAAYS,cAAa,GACzB,CAACE,GAAQX,EAAYgB,iBAAiB,GACtC9Q,GAAW,WAAY8P,EAAYf,SAAS,GAC5C/O,GAAW,WAAY8P,EAAYO,WAAW,GAQ9ChG,IACAyF,EAAYnC,eAAiBjC,IAC7BgC,IAAY,SACZ+C,GAAQX,EAAYgB,iBAAiB,GAOnChB,EAAYvJ,WAAa7C,GAAUK,wBAOrCsG,IACAyF,EAAYvJ,WAAa7C,GAAUM,SACnChE,GAAW,UAAW8P,EAAYE,IAAI,EAEtCnC,OAAAA,GAAaiC,CAAW,EACjB,GAIT,GACEnG,GAAY+D,CAAO,GAClB,EACC7D,GAAuBC,oBAAoB2C,UAC3C5C,GAAuBC,SAAS4D,CAAO,IAEvC,CAAC5E,GAAa4E,CAAO,EACvB,CAEA,GAAI,CAAC/D,GAAY+D,CAAO,GAAKqD,GAAsBrD,CAAO,IAEtDtE,GAAwBC,wBAAwBpJ,QAChDD,GAAWoJ,GAAwBC,aAAcqE,CAAO,GAMxDtE,GAAwBC,wBAAwBoD,UAChDrD,GAAwBC,aAAaqE,CAAO,GAE5C,MAAO,GAYX,GAAI3C,IAAgB,CAACG,GAAgBwC,CAAO,EAAG,CAC7C,IAAMsD,GAAatJ,EAAcoI,CAAW,EACtCX,GAAa1H,EAAcqI,CAAW,EAE5C,GAAIX,IAAc6B,GAAY,CAC5B,IAAMC,GAAa9B,GAAWhS,OAE9B,QAAS+T,GAAID,GAAa,EAAGC,IAAK,EAAG,EAAEA,GAAG,CACxC,IAAMC,GAAa7J,EAAU6H,GAAW+B,EAAC,EAAG,EAAI,EAChDF,GAAW/B,aAAakC,GAAY3J,EAAesI,CAAW,CAAC,CACjE,CACF,CACF,CAEAjC,OAAAA,GAAaiC,CAAW,EACjB,EACT,CAeA,OAPWjI,EAAcA,EAAYiI,CAAW,EAAIA,EAAYvJ,YACrD7C,GAAU1C,SAAW,CAACwM,GAAqBsC,CAAW,IAO9DpC,IAAY,YACXA,IAAY,WACZA,IAAY,aACd1N,GAAW,8BAA+B8P,EAAYf,SAAS,GAE/DlB,GAAaiC,CAAW,EACjB,KAIL1F,IAAsB0F,EAAYvJ,WAAa7C,GAAUZ,OAE3DmF,EAAU6H,EAAYO,YAEtB3S,GAAa,CAACsF,EAAeC,GAAUC,EAAW,EAAI+M,IAAgB,CACpEhI,EAAUlJ,GAAckJ,EAASgI,GAAM,GAAG,CAC5C,CAAC,EAEGH,EAAYO,cAAgBpI,IAC9B/J,GAAUgI,EAAUI,QAAS,CAAEtF,QAAS8O,EAAYxI,UAAS,CAAE,CAAE,EACjEwI,EAAYO,YAAcpI,IAK9ByI,GAAc/H,EAAMnD,sBAAuBsK,EAAa,IAAI,EAErD,GACT,EAWMsB,GAAoB,SACxBC,EACAC,EACA3P,EAAa,CAQb,GALIiI,GAAY0H,CAAM,GAMpB1G,KACC0G,IAAW,MAAQA,IAAW,UAC9B3P,KAASsC,GAAYtC,KAAS2K,IAE/B,MAAO,GAGT,IAAMiF,GACJtI,GAAaqI,CAAM,GAClBzH,GAAuBE,0BAA0B0C,UAChD5C,GAAuBE,eAAeuH,EAAQD,CAAK,EAMvD,GACEpH,EAAAA,IACA,CAACL,GAAY0H,CAAM,GACnBtR,GAAWmD,GAAWmO,CAAM,IAGvB,GAAItH,EAAAA,GAAmBhK,GAAWoD,GAAWkO,CAAM,IAGnD,GAAI,CAACC,IAAmB3H,GAAY0H,CAAM,GAC/C,GAIGP,EAAAA,GAAsBM,CAAK,IACxBjI,GAAwBC,wBAAwBpJ,QAChDD,GAAWoJ,GAAwBC,aAAcgI,CAAK,GACrDjI,GAAwBC,wBAAwBoD,UAC/CrD,GAAwBC,aAAagI,CAAK,KAC5CjI,GAAwBK,8BAA8BxJ,QACtDD,GAAWoJ,GAAwBK,mBAAoB6H,CAAM,GAC5DlI,GAAwBK,8BAA8BgD,UACrDrD,GAAwBK,mBAAmB6H,EAAQD,CAAK,IAG7DC,IAAW,MACVlI,GAAwBM,iCACtBN,GAAwBC,wBAAwBpJ,QAChDD,GAAWoJ,GAAwBC,aAAc1H,CAAK,GACrDyH,GAAwBC,wBAAwBoD,UAC/CrD,GAAwBC,aAAa1H,CAAK,IAKhD,MAAO,WAGA2J,CAAAA,GAAoBgG,CAAM,GAI9B,GACLtR,CAAAA,GAAWqD,GAAgBtE,GAAc4C,EAAO4B,GAAiB,EAAE,CAAC,GAK/D,GACJ+N,GAAAA,IAAW,OAASA,IAAW,cAAgBA,IAAW,SAC3DD,IAAU,UACVpS,GAAc0C,EAAO,OAAO,IAAM,GAClCyJ,GAAciG,CAAK,IAMd,GACLnH,EAAAA,IACA,CAAClK,GAAWsD,GAAmBvE,GAAc4C,EAAO4B,GAAiB,EAAE,CAAC,IAInE,GAAI5B,EACT,MAAO,QAMT,MAAO,EACT,EAKM6P,GAAgC7Q,EAAS,CAAA,EAAI,CACjD,iBACA,gBACA,YACA,mBACA,iBACA,gBACA,gBACA,eAAe,CAChB,EAUKoQ,GAAwB,SAAUrD,EAAe,CACrD,MACE,CAAC8D,GAA8BhT,GAAkBkP,CAAO,CAAC,GACzD1N,GAAWyD,GAAgBiK,CAAO,CAEtC,EAYM+D,GAAsB,SAAU3B,EAAoB,CAExDY,GAAc/H,EAAMjD,yBAA0BoK,EAAa,IAAI,EAE/D,IAAQQ,EAAeR,EAAfQ,WAGR,GAAI,CAACA,GAAcJ,GAAaJ,CAAW,EACzC,OAGF,IAAM4B,EAAY,CAChBC,SAAU,GACVC,UAAW,GACXC,SAAU,GACVC,kBAAmB7I,GACnB8I,cAAe9L,QAEblF,GAAIuP,EAAWnT,OAGnB,KAAO4D,MAAK,CACV,IAAMiR,GAAO1B,EAAWvP,EAAC,EACjBkN,GAAyC+D,GAAzC/D,KAAMN,GAAmCqE,GAAnCrE,aAAqBiE,GAAcI,GAArBrQ,MACtB2P,GAASxQ,GAAkBmN,EAAI,EAE/BgE,GAAYL,GACdjQ,GAAQsM,KAAS,QAAUgE,GAAY9S,GAAW8S,EAAS,EA2B/D,GAxBAP,EAAUC,SAAWL,GACrBI,EAAUE,UAAYjQ,GACtB+P,EAAUG,SAAW,GACrBH,EAAUK,cAAgB9L,OAC1ByK,GAAc/H,EAAM9C,sBAAuBiK,EAAa4B,CAAS,EACjE/P,GAAQ+P,EAAUE,UAMhB/G,KACCyG,KAAW,MAAQA,KAAW,SAC/BrS,GAAc0C,GAAOmJ,EAA2B,IAAM,IAGtDkD,GAAiBC,GAAM6B,CAAW,EAElCnO,GAAQmJ,GAA8BnJ,IAOtC0I,IACArK,GACE,qFACA2B,EAAK,EAEP,CACAqM,GAAiBC,GAAM6B,CAAW,EAClC,QACF,CAGA,GAAIwB,KAAW,iBAAmBzS,GAAY8C,GAAO,MAAM,EAAG,CAC5DqM,GAAiBC,GAAM6B,CAAW,EAClC,QACF,CAGA,GAAI4B,EAAUK,cACZ,SAIF,GAAI,CAACL,EAAUG,SAAU,CACvB7D,GAAiBC,GAAM6B,CAAW,EAClC,QACF,CAGA,GAAI,CAAC3F,IAA4BnK,GAAW,OAAQ2B,EAAK,EAAG,CAC1DqM,GAAiBC,GAAM6B,CAAW,EAClC,QACF,CAGI1F,IACF1M,GAAa,CAACsF,EAAeC,GAAUC,EAAW,EAAI+M,IAAgB,CACpEtO,GAAQ5C,GAAc4C,GAAOsO,GAAM,GAAG,CACxC,CAAC,EAIH,IAAMoB,GAAQvQ,GAAkBgP,EAAYM,QAAQ,EACpD,GAAI,CAACgB,GAAkBC,GAAOC,GAAQ3P,EAAK,EAAG,CAC5CqM,GAAiBC,GAAM6B,CAAW,EAClC,QACF,CAGA,GACE3H,GACA,OAAO3D,GAAiB,UACxB,OAAOA,EAAa0N,kBAAqB,YAErCvE,CAAAA,GAGF,OAAQnJ,EAAa0N,iBAAiBb,GAAOC,EAAM,EAAC,CAClD,IAAK,cAAe,CAClB3P,GAAQwG,EAAmBnD,WAAWrD,EAAK,EAC3C,KACF,CAEA,IAAK,mBAAoB,CACvBA,GAAQwG,EAAmBlD,gBAAgBtD,EAAK,EAChD,KACF,CAKF,CAKJ,GAAIA,KAAUsQ,GACZ,GAAI,CACEtE,GACFmC,EAAYqC,eAAexE,GAAcM,GAAMtM,EAAK,EAGpDmO,EAAYzB,aAAaJ,GAAMtM,EAAK,EAGlCuO,GAAaJ,CAAW,EAC1BjC,GAAaiC,CAAW,EAExB9R,GAASkI,EAAUI,OAAO,CAE9B,OAASnB,GAAG,CACV6I,GAAiBC,GAAM6B,CAAW,CACpC,CAEJ,CAGAY,GAAc/H,EAAMpD,wBAAyBuK,EAAa,IAAI,CAChE,EAOMsC,GAAqB,SAAUC,EAA0B,CAC7D,IAAIC,EAAa,KACXC,EAAiBlD,GAAoBgD,CAAQ,EAKnD,IAFA3B,GAAc/H,EAAM/C,wBAAyByM,EAAU,IAAI,EAEnDC,EAAaC,EAAexC,SAAQ,GA+B1C,GA7BAW,GAAc/H,EAAM5C,uBAAwBuM,EAAY,IAAI,EAG5D1B,GAAkB0B,CAAU,EAG5Bb,GAAoBa,CAAU,EAM1B9B,GAAoB8B,EAAWrK,OAAO,GACxCmK,GAAmBE,EAAWrK,OAAO,GAahBJ,EACnBA,EAAYyK,CAAU,EACrBA,EAAoB/L,YACF7C,GAAU1C,QAAS,CACxC,IAAMwR,GAAU7K,EACZA,EAAc2K,CAAU,EACvBA,EAAuBG,WACxBjC,GAAoBgC,EAAO,IAC7BE,GAA6BF,EAAO,EACpCJ,GAAmBI,EAAO,EAE9B,CAIF9B,GAAc/H,EAAMlD,uBAAwB4M,EAAU,IAAI,CAC5D,EAqBMK,GAA+B,SAAUvM,EAAU,CACvD,IAAMI,EAAWsB,EAAcA,EAAY1B,CAAI,EAAKA,EAAaI,SAEjE,GAAIA,IAAa7C,GAAU1C,QAAS,CAClC,IAAM2R,GAAKhL,EACPA,EAAcxB,CAAI,EACjBA,EAAiBsM,WAQlBjC,GAAoBmC,EAAE,IAGxBD,GAA6BC,EAAE,EAC/BP,GAAmBO,EAAE,EAEzB,CAMA,IAAMxD,EAAa1H,EACfA,EAActB,CAAI,EACjBA,EAAiBgJ,WACtB,GAAI,CAACA,EACH,OAGF,IAAMyD,GAAmB,CAAA,EACzBlV,GAAayR,EAAa0D,IAAS,CACjC3U,GAAU0U,GAAUC,EAAK,CAC3B,CAAC,EAED,QAAWA,MAASD,GAClBF,GAA6BG,EAAK,EAIpC,GAAItM,IAAa7C,GAAU1C,QAAS,CAClC,IAAM8R,GAAWhL,EAAcA,EAAY3B,CAAI,EAAI,KACnD,GACE,OAAO2M,IAAa,UACpBhS,GAAkBgS,EAAQ,IAAM,WAChC,CACA,IAAM7K,GAAW9B,EAA6B8B,QAC1CuI,GAAoBvI,EAAO,GAC7ByK,GAA6BzK,EAAO,CAExC,CACF,CACF,EAGA/B,OAAAA,EAAU6M,SAAW,SAAUxE,EAAe,CAAA,IAAR5B,EAAGzP,UAAAC,OAAA,GAAAD,UAAA,CAAA,IAAA+I,OAAA/I,UAAA,CAAA,EAAG,CAAA,EACtC8R,EAAO,KACPgE,EAAe,KACflD,GAAc,KACdmD,GAAa,KAUjB,GANArH,GAAiB,CAAC2C,EACd3C,KACF2C,EAAQ,SAIN,OAAOA,GAAU,UAAY,CAACkC,GAAQlC,CAAK,IAC7CA,EAAQ1M,GAAe0M,CAAK,EAExB,OAAOA,GAAU,UACnB,MAAMpO,GAAgB,iCAAiC,EAK3D,GAAI,CAAC+F,EAAUO,YACb,OAAO8H,EAgBT,GAZKhE,IACHmC,GAAaC,CAAG,EAIlBzG,EAAUI,QAAU,CAAA,EAGhB,OAAOiI,GAAU,WACnBvD,GAAW,IAGTA,GAAU,CAMZ,IAAMkI,GAAKpL,EACPA,EAAYyG,CAAa,EACxBA,EAAe6B,SACpB,GAAI,OAAO8C,IAAO,SAAU,CAC1B,IAAMxF,GAAU5M,GAAkBoS,EAAE,EACpC,GAAI,CAACpK,GAAa4E,EAAO,GAAK/D,GAAY+D,EAAO,EAC/C,MAAMvN,GACJ,yDAAyD,CAG/D,CAYA,GAAI+P,GAAa3B,CAAgB,EAC/B,MAAMpO,GACJ,yDAAyD,EAM7DuS,GAA6BnE,CAAa,CAC5C,SAAWkC,GAAQlC,CAAK,EAGtBS,EAAOV,GAAc,SAAS,EAC9B0E,EAAehE,EAAK9G,cAAcQ,WAAW6F,EAAO,EAAI,EAEtDyE,EAAazM,WAAa7C,GAAU1C,SACpCgS,EAAa5C,WAAa,QAIjB4C,EAAa5C,WAAa,OADnCpB,EAAOgE,EAKPhE,EAAKmE,YAAYH,CAAY,EAQ/BN,GAA6BM,CAAY,MACpC,CAEL,GACE,CAACvI,IACD,CAACL,IACD,CAACE,IAEDiE,EAAMrP,QAAQ,GAAG,IAAM,GAEvB,OAAOiJ,GAAsBwC,GACzBxC,EAAmBnD,WAAWuJ,CAAK,EACnCA,EAON,GAHAS,EAAOV,GAAcC,CAAK,EAGtB,CAACS,EACH,OAAOvE,GAAa,KAAOE,GAAsBvC,EAAY,EAEjE,CAGI4G,GAAQxE,IACVqD,GAAamB,EAAKoE,UAAU,EAI9B,IAAMC,GAAehE,GAAoBrE,GAAWuD,EAAQS,CAAI,EAGhE,KAAQc,GAAcuD,GAAatD,SAAQ,GAEzCa,GAAkBd,EAAW,EAG7B2B,GAAoB3B,EAAW,EAM3BU,GAAoBV,GAAY7H,OAAO,GACzCmK,GAAmBtC,GAAY7H,OAAO,EAK1C,GAAI+C,GACF,OAAIZ,IACFuF,GAA0BpB,CAAgB,EAGrCA,EAIT,GAAI9D,GAAY,CAKd,GAJIL,IACFuF,GAA0BX,CAAI,EAG5BtE,GAGF,IAFAuI,GAAazK,GAAuB4G,KAAKJ,EAAK9G,aAAa,EAEpD8G,EAAKoE,YAEVH,GAAWE,YAAYnE,EAAKoE,UAAU,OAGxCH,GAAajE,EAGf,OAAI/F,GAAaqK,YAAcrK,GAAasK,kBAQ1CN,GAAavK,EAAW0G,KAAK1I,EAAkBuM,GAAY,EAAI,GAG1DA,EACT,CAEA,IAAIO,GAAiBlJ,GAAiB0E,EAAKyE,UAAYzE,EAAKD,UAG5D,OACEzE,IACAxB,GAAa,UAAU,GACvBkG,EAAK9G,eACL8G,EAAK9G,cAAcwL,SACnB1E,EAAK9G,cAAcwL,QAAQzF,MAC3BjO,GAAW6I,GAA0BmG,EAAK9G,cAAcwL,QAAQzF,IAAI,IAEpEuF,GACE,aAAexE,EAAK9G,cAAcwL,QAAQzF,KAAO,MAAQuF,IAIzDpJ,IACF1M,GAAa,CAACsF,EAAeC,GAAUC,EAAW,EAAI+M,IAAgB,CACpEuD,GAAiBzU,GAAcyU,GAAgBvD,GAAM,GAAG,CAC1D,CAAC,EAGI9H,GAAsBwC,GACzBxC,EAAmBnD,WAAWwO,EAAc,EAC5CA,EACN,EAEAtN,EAAUyN,UAAY,UAAkB,CAAA,IAARhH,EAAGzP,UAAAC,OAAA,GAAAD,UAAA,CAAA,IAAA+I,OAAA/I,UAAA,CAAA,EAAG,CAAA,EACpCwP,GAAaC,CAAG,EAChBpC,GAAa,EACf,EAEArE,EAAU0N,YAAc,UAAA,CACtBvH,GAAS,KACT9B,GAAa,EACf,EAEArE,EAAU2N,iBAAmB,SAAUC,EAAK9B,EAAMrQ,EAAK,CAEhD0K,IACHK,GAAa,CAAA,CAAE,EAGjB,IAAM2E,EAAQvQ,GAAkBgT,CAAG,EAC7BxC,GAASxQ,GAAkBkR,CAAI,EACrC,OAAOZ,GAAkBC,EAAOC,GAAQ3P,CAAK,CAC/C,EAEAuE,EAAU6N,QAAU,SAClBC,EACAC,EAA0B,CAEtB,OAAOA,GAAiB,YAI5B/V,GAAUyK,EAAMqL,CAAU,EAAGC,CAAY,CAC3C,EAEA/N,EAAUgO,WAAa,SACrBF,EACAC,EAA0B,CAE1B,GAAIA,IAAiBhO,OAAW,CAC9B,IAAM9E,EAAQrD,GAAiB6K,EAAMqL,CAAU,EAAGC,CAAY,EAE9D,OAAO9S,IAAU,GACb8E,OACA7H,GAAYuK,EAAMqL,CAAU,EAAG7S,EAAO,CAAC,EAAE,CAAC,CAChD,CAEA,OAAOnD,GAAS2K,EAAMqL,CAAU,CAAC,CACnC,EAEA9N,EAAUiO,YAAc,SAAUH,EAA0B,CAC1DrL,EAAMqL,CAAU,EAAI,CAAA,CACtB,EAEA9N,EAAUkO,eAAiB,UAAA,CACzBzL,EAAQrD,GAAe,CACzB,EAEOY,CACT,CAEA,IAAAmO,GAAerO,GAAe,ECllEvB,SAASsO,IAA4G,CAC1H,MAAO,CACL,MAAO,GACP,OAAQ,GACR,WAAY,KACZ,IAAK,GACL,MAAO,KACP,SAAU,GACV,SAAU,KACV,OAAQ,GACR,UAAW,KACX,WAAY,IACd,CACF,CAEO,IAAIC,GAAqCD,GAAa,EAEtD,SAASE,GAA+DC,EAA0D,CACvIF,GAAYE,CACd,CCxBA,IAAMC,GAAW,CAAE,KAAM,IAAM,IAAK,EAEpC,SAASC,GAAkBC,EAAyC,CAClE,IAAMC,EAAkB,CAAC,EACzB,OAAQC,GAAmB,CACzB,IAAMC,EAAa,KAAK,IAAI,EAAG,KAAK,IAAI,EAAGD,EAAS,CAAC,CAAC,EAClDE,EAAQH,EAAME,CAAU,EAC5B,OAAKC,IACHA,EAAQJ,EAAYG,CAAU,EAC9BF,EAAME,CAAU,EAAIC,GAEfA,CACT,CACF,CAEA,SAASC,GAAKD,EAAwBE,EAAM,GAAI,CAC9C,IAAIC,EAAS,OAAOH,GAAU,SAAWA,EAAQA,EAAM,OACjDI,EAAM,CACV,QAAS,CAACC,EAAuBC,IAAyB,CACxD,IAAIC,EAAY,OAAOD,GAAQ,SAAWA,EAAMA,EAAI,OACpD,OAAAC,EAAYA,EAAU,QAAQC,GAAM,MAAO,IAAI,EAC/CL,EAASA,EAAO,QAAQE,EAAME,CAAS,EAChCH,CACT,EACA,SAAU,IACD,IAAI,OAAOD,EAAQD,CAAG,CAEjC,EACA,OAAOE,CACT,CAGA,IAAMK,IAAsB,CAACC,EAAI,KAAO,CACxC,GAAI,CACF,MAAO,CAAC,CAAC,IAAI,OAAO,eAAiBA,CAAC,CACxC,OAAQC,EAAA,CAGN,MAAO,EACT,CACA,GAAG,EAEUH,GAAQ,CACnB,iBAAkB,yBAClB,kBAAmB,cACnB,uBAAwB,gBACxB,eAAgB,OAChB,WAAY,KACZ,kBAAmB,KACnB,gBAAiB,KACjB,aAAc,OACd,kBAAmB,MACnB,cAAe,MACf,oBAAqB,OACrB,UAAW,WACX,gBAAiB,oBACjB,gBAAiB,WACjB,wBAAyB,iCACzB,yBAA0B,mBAC1B,mBAAoB,0BACpB,WAAY,iBACZ,gBAAiB,eACjB,iBAAkB,YAClB,QAAS,SACT,aAAc,WACd,eAAgB,OAChB,gBAAiB,aACjB,kBAAmB,YACnB,gBAAiB,YACjB,iBAAkB,aAClB,eAAgB,YAChB,UAAW,QACX,QAAS,UACT,kBAAmB,iCACnB,gBAAiB,mCACjB,kBAAmB,KACnB,gBAAiB,KACjB,kBAAmB,gCACnB,oBAAqB,gBACrB,WAAY,UACZ,cAAe,WACf,mBAAoB,oDACpB,sBAAuB,qDACvB,MAAO,eACP,cAAe,OACf,SAAU,MACV,UAAW,MACX,UAAW,QACX,eAAgB,WAChB,UAAW,SACX,cAAe,OACf,cAAe,MACf,cAAgBI,GAAiB,IAAI,OAAO,WAAWA,OAAAA,EAAI,+BAA+B,EAC1F,gBAAiBjB,GAAmBG,GAAmB,IAAI,OAAO,QAAQA,OAAAA,EAAM,qDAAqD,CAAC,EACtI,QAASH,GAAmBG,GAAmB,IAAI,OAAO,QAAQA,OAAAA,EAAM,qDAAoD,CAAC,EAC7H,iBAAkBH,GAAmBG,GAAmB,IAAI,OAAO,QAAQA,OAAAA,EAAM,eAAiB,CAAC,EACnG,kBAAmBH,GAAmBG,GAAmB,IAAI,OAAO,QAAQA,OAAAA,EAAM,KAAI,CAAC,EACvF,eAAgBH,GAAmBG,GAAmB,IAAI,OAAO,QAAQA,OAAAA,EAAM,sBAAsB,GAAG,CAAC,EACzG,qBAAsBH,GAAmBG,GAAmB,IAAI,OAAO,QAAQA,OAAAA,EAAM,KAAI,CAAC,CAC5F,EAMMe,GAAU,uBACVC,GAAY,wDACZC,GAAS,8GACTC,GAAK,qEACLC,GAAU,uCACVC,GAAS,8BACTC,GAAe,iKACfC,GAAWnB,GAAKkB,EAAY,EAC/B,QAAQ,QAASD,EAAM,EACvB,QAAQ,aAAc,mBAAmB,EACzC,QAAQ,UAAW,uBAAuB,EAC1C,QAAQ,cAAe,SAAS,EAChC,QAAQ,WAAY,cAAc,EAClC,QAAQ,QAAS,mBAAmB,EACpC,QAAQ,WAAY,EAAE,EACtB,SAAS,EACNG,GAAcpB,GAAKkB,EAAY,EAClC,QAAQ,QAASD,EAAM,EACvB,QAAQ,aAAc,mBAAmB,EACzC,QAAQ,UAAW,uBAAuB,EAC1C,QAAQ,cAAe,SAAS,EAChC,QAAQ,WAAY,cAAc,EAClC,QAAQ,QAAS,mBAAmB,EACpC,QAAQ,SAAU,mCAAmC,EACrD,SAAS,EACNI,GAAa,uFACbC,GAAY,UACZC,GAAc,mCACdC,GAAMxB,GAAK,6GAA6G,EAC3H,QAAQ,QAASuB,EAAW,EAC5B,QAAQ,QAAS,8DAA8D,EAC/E,SAAS,EAENE,GAAOzB,GAAK,gCAAgC,EAC/C,QAAQ,QAASiB,EAAM,EACvB,SAAS,EAENS,GAAO,gWAMPC,GAAW,gCACXC,GAAO5B,GACX,4dASK,GAAG,EACP,QAAQ,UAAW2B,EAAQ,EAC3B,QAAQ,MAAOD,EAAI,EACnB,QAAQ,YAAa,0EAA0E,EAC/F,SAAS,EAENG,GAAY7B,GAAKqB,EAAU,EAC9B,QAAQ,KAAMN,EAAE,EAChB,QAAQ,UAAW,uBAAuB,EAC1C,QAAQ,YAAa,EAAE,EACvB,QAAQ,SAAU,EAAE,EACpB,QAAQ,aAAc,SAAS,EAC/B,QAAQ,SAAU,gDAAgD,EAClE,QAAQ,OAAQ,6BAA6B,EAC7C,QAAQ,OAAQ,6DAA6D,EAC7E,QAAQ,MAAOW,EAAI,EACnB,SAAS,EAENI,GAAa9B,GAAK,yCAAyC,EAC9D,QAAQ,YAAa6B,EAAS,EAC9B,SAAS,EAMNE,GAAc,CAClB,WAAAD,GACA,KAAMjB,GACN,IAAAW,GACA,OAAAV,GACA,QAAAE,GACA,GAAAD,GACA,KAAAa,GACA,SAAAT,GACA,KAAAM,GACA,QAAAb,GACA,UAAAiB,GACA,MAAOpC,GACP,KAAM6B,EACR,EAQMU,GAAWhC,GACf,6JAEsF,EACrF,QAAQ,KAAMe,EAAE,EAChB,QAAQ,UAAW,uBAAuB,EAC1C,QAAQ,aAAc,SAAS,EAC/B,QAAQ,OAAQ,wBAAyB,EACzC,QAAQ,SAAU,gDAAgD,EAClE,QAAQ,OAAQ,6BAA6B,EAC7C,QAAQ,OAAQ,6DAA6D,EAC7E,QAAQ,MAAOW,EAAI,EACnB,SAAS,EAENO,GAAsCC,EAAAC,EAAA,GACvCJ,IADuC,CAE1C,SAAUX,GACV,MAAOY,GACP,UAAWhC,GAAKqB,EAAU,EACvB,QAAQ,KAAMN,EAAE,EAChB,QAAQ,UAAW,uBAAuB,EAC1C,QAAQ,YAAa,EAAE,EACvB,QAAQ,QAASiB,EAAQ,EACzB,QAAQ,aAAc,SAAS,EAC/B,QAAQ,SAAU,gDAAgD,EAClE,QAAQ,OAAQ,6BAA6B,EAC7C,QAAQ,OAAQ,6DAA6D,EAC7E,QAAQ,MAAON,EAAI,EACnB,SAAS,CACd,GAMMU,GAA2CF,EAAAC,EAAA,GAC5CJ,IAD4C,CAE/C,KAAM/B,GACJ,4IAEwE,EACvE,QAAQ,UAAW2B,EAAQ,EAC3B,QAAQ,OAAQ,mKAGkB,EAClC,SAAS,EACZ,IAAK,oEACL,QAAS,yBACT,OAAQlC,GACR,SAAU,mCACV,UAAWO,GAAKqB,EAAU,EACvB,QAAQ,KAAMN,EAAE,EAChB,QAAQ,UAAW,iBAAiB,EACpC,QAAQ,WAAYI,EAAQ,EAC5B,QAAQ,SAAU,EAAE,EACpB,QAAQ,aAAc,SAAS,EAC/B,QAAQ,UAAW,EAAE,EACrB,QAAQ,QAAS,EAAE,EACnB,QAAQ,QAAS,EAAE,EACnB,QAAQ,OAAQ,EAAE,EAClB,SAAS,CACd,GAMMkB,GAAS,8CACTC,GAAa,sCACbC,GAAK,wBACLC,GAAa,8EAGbC,GAAe,gBACfC,GAAsB,kBACtBC,GAAyB,mBACzBC,GAAc5C,GAAK,wBAAyB,GAAG,EAClD,QAAQ,cAAe0C,EAAmB,EAAE,SAAS,EAGlDG,GAA0B,qBAC1BC,GAAiC,uBACjCC,GAAoC,yBAGpCC,GAAYhD,GAAK,yBAA0B,GAAG,EACjD,QAAQ,OAAQ,WAAA,4HAAmG,GACnH,QAAQ,WAAYQ,GAAqB,WAAa,WAAW,EACjE,QAAQ,OAAQ,WAAA,0BAAyB,GACzC,QAAQ,OAAQ,gBAAgB,EAChC,SAAS,EAENyC,GAAqB,oEAErBC,GAAiBlD,GAAKiD,GAAoB,GAAG,EAChD,QAAQ,SAAUR,EAAY,EAC9B,SAAS,EAENU,GAAoBnD,GAAKiD,GAAoB,GAAG,EACnD,QAAQ,SAAUJ,EAAuB,EACzC,SAAS,EAENO,GACJ,wQASIC,GAAoBrD,GAAKoD,GAAuB,IAAI,EACvD,QAAQ,iBAAkBT,EAAsB,EAChD,QAAQ,cAAeD,EAAmB,EAC1C,QAAQ,SAAUD,EAAY,EAC9B,SAAS,EAENa,GAAuBtD,GAAKoD,GAAuB,IAAI,EAC1D,QAAQ,iBAAkBL,EAAiC,EAC3D,QAAQ,cAAeD,EAA8B,EACrD,QAAQ,SAAUD,EAAuB,EACzC,SAAS,EAGNU,GAAoBvD,GACxB,mNAMiC,IAAI,EACpC,QAAQ,iBAAkB2C,EAAsB,EAChD,QAAQ,cAAeD,EAAmB,EAC1C,QAAQ,SAAUD,EAAY,EAC9B,SAAS,EAGNe,GAAYxD,GAAK,8BAA+B,GAAG,EACtD,QAAQ,SAAUyC,EAAY,EAC9B,SAAS,EAGNgB,GACJ,qNAQIC,GAAY1D,GAAKyD,GAAe,IAAI,EACvC,QAAQ,iBAAkBd,EAAsB,EAChD,QAAQ,cAAeD,EAAmB,EAC1C,QAAQ,SAAUD,EAAY,EAC9B,SAAS,EAENkB,GAAiB3D,GAAK,YAAa,IAAI,EAC1C,QAAQ,SAAUyC,EAAY,EAC9B,SAAS,EAENmB,GAAW5D,GAAK,qCAAqC,EACxD,QAAQ,SAAU,8BAA8B,EAChD,QAAQ,QAAS,8IAA8I,EAC/J,SAAS,EAEN6D,GAAiB7D,GAAK2B,EAAQ,EAAE,QAAQ,YAAa,KAAK,EAAE,SAAS,EACrEmC,GAAM9D,GACV,0JAKsC,EACrC,QAAQ,UAAW6D,EAAc,EACjC,QAAQ,YAAa,6EAA6E,EAClG,SAAS,EAENE,GAAe,uFAEfC,GAAOhE,GAAK,4EAA4E,EAC3F,QAAQ,QAAS+D,EAAY,EAC7B,QAAQ,OAAQ,yCAAyC,EACzD,QAAQ,QAAS,6DAA6D,EAC9E,SAAS,EAENE,GAAUjE,GAAK,yBAAyB,EAC3C,QAAQ,QAAS+D,EAAY,EAC7B,QAAQ,MAAOxC,EAAW,EAC1B,SAAS,EAEN2C,GAASlE,GAAK,uBAAuB,EACxC,QAAQ,MAAOuB,EAAW,EAC1B,SAAS,EAEN4C,GAAgBnE,GAAK,wBAAyB,GAAG,EACpD,QAAQ,UAAWiE,EAAO,EAC1B,QAAQ,SAAUC,EAAM,EACxB,SAAS,EAENE,GAA2B,qCAM3BC,GAAe,CACnB,WAAY5E,GACZ,eAAAkE,GACA,SAAAC,GACA,UAAAZ,GACA,GAAAT,GACA,KAAMD,GACN,IAAK7C,GACL,UAAWA,GACX,UAAWA,GACX,eAAAyD,GACA,kBAAAG,GACA,kBAAAE,GACA,OAAAlB,GACA,KAAA2B,GACA,OAAAE,GACA,YAAAtB,GACA,QAAAqB,GACA,cAAAE,GACA,IAAAL,GACA,KAAMtB,GACN,IAAK/C,EACP,EAQM6E,GAA6CpC,EAAAC,EAAA,GAC9CkC,IAD8C,CAEjD,KAAMrE,GAAK,yBAAyB,EACjC,QAAQ,QAAS+D,EAAY,EAC7B,SAAS,EACZ,QAAS/D,GAAK,+BAA+B,EAC1C,QAAQ,QAAS+D,EAAY,EAC7B,SAAS,CACd,GAMMQ,GAAwCrC,EAAAC,EAAA,GACzCkC,IADyC,CAE5C,kBAAmBf,GACnB,eAAgBH,GAChB,UAAAK,GACA,UAAAE,GACA,IAAK1D,GAAK,gEAAgE,EACvE,QAAQ,WAAYoE,EAAwB,EAC5C,QAAQ,QAAS,2EAA2E,EAC5F,SAAS,EACZ,WAAY,6EACZ,IAAK,0EACL,KAAMpE,GAAK,qNAAqN,EAC7N,QAAQ,WAAYoE,EAAwB,EAC5C,SAAS,CACd,GAMMI,GAA2CtC,EAAAC,EAAA,GAC5CoC,IAD4C,CAE/C,GAAIvE,GAAKuC,EAAE,EAAE,QAAQ,OAAQ,GAAG,EAAE,SAAS,EAC3C,KAAMvC,GAAKuE,GAAU,IAAI,EACtB,QAAQ,OAAQ,eAAe,EAC/B,QAAQ,UAAW,GAAG,EACtB,SAAS,CACd,GAMaE,GAAQ,CACnB,OAAQ1C,GACR,IAAKE,GACL,SAAUG,EACZ,EAEasC,GAAS,CACpB,OAAQL,GACR,IAAKE,GACL,OAAQC,GACR,SAAUF,EACZ,ECpfMK,GAAkD,CACtD,IAAK,QACL,IAAK,OACL,IAAK,OACL,IAAK,SACL,IAAK,OACP,EACMC,GAAwBC,GAAeF,GAAmBE,CAAE,EAE3D,SAASC,GAAmBlD,EAAcmD,EAAkB,CACjE,GAAIA,GACF,GAAIxE,GAAM,WAAW,KAAKqB,CAAI,EAC5B,OAAOA,EAAK,QAAQrB,GAAM,cAAeqE,EAAoB,UAG3DrE,GAAM,mBAAmB,KAAKqB,CAAI,EACpC,OAAOA,EAAK,QAAQrB,GAAM,sBAAuBqE,EAAoB,EAIzE,OAAOhD,CACT,CAEO,SAASoD,GAASC,EAAc,CACrC,GAAI,CACFA,EAAO,UAAUA,CAAI,EAAE,QAAQ1E,GAAM,cAAe,GAAG,CACzD,OAAQG,EAAA,CACN,OAAO,IACT,CACA,OAAOuE,CACT,CAEO,SAASC,GAAWC,EAAkBC,EAAgB,OAG3D,IAAMC,EAAMF,EAAS,QAAQ5E,GAAM,SAAU,CAAC+E,EAAOC,EAAQC,IAAQ,CACjE,IAAIC,EAAU,GACVC,EAAOH,EACX,KAAO,EAAEG,GAAQ,GAAKF,EAAIE,CAAI,IAAM,MAAMD,EAAU,CAACA,EACrD,OAAIA,EAGK,IAGA,IAEX,CAAC,EACDE,EAAQN,EAAI,MAAM9E,GAAM,SAAS,EAC/BqF,EAAI,EAUR,GAPKD,EAAM,CAAC,EAAE,KAAK,GACjBA,EAAM,MAAM,EAEVA,EAAM,OAAS,GAAK,GAACA,EAAAA,EAAM,GAAG,EAAE,IAAXA,MAAAA,EAAc,SACrCA,EAAM,IAAI,EAGRP,EACF,GAAIO,EAAM,OAASP,EACjBO,EAAM,OAAOP,CAAK,MAElB,MAAOO,EAAM,OAASP,GAAOO,EAAM,KAAK,EAAE,EAI9C,KAAOC,EAAID,EAAM,OAAQC,IAEvBD,EAAMC,CAAC,EAAID,EAAMC,CAAC,EAAE,KAAK,EAAE,QAAQrF,GAAM,UAAW,GAAG,EAEzD,OAAOoF,CACT,CAUO,SAASE,GAAML,EAAaM,EAAWC,EAAkB,CAC9D,IAAMC,EAAIR,EAAI,OACd,GAAIQ,IAAM,EACR,MAAO,GAIT,IAAIC,EAAU,EAGd,KAAOA,EAAUD,GAAG,CAClB,IAAME,EAAWV,EAAI,OAAOQ,EAAIC,EAAU,CAAC,EAC3C,GAAIC,IAAaJ,GAAK,CAACC,EACrBE,YACSC,IAAaJ,GAAKC,EAC3BE,QAEA,MAEJ,CAEA,OAAOT,EAAI,MAAM,EAAGQ,EAAIC,CAAO,CACjC,CAEO,SAASE,GAAuBX,EAAa,CAClD,IAAMY,EAAQZ,EAAI,MAAM,IAAI,EACxBa,EAAMD,EAAM,OAAS,EACzB,KAAOC,GAAO,GAAK9F,GAAM,UAAU,KAAK6F,EAAMC,CAAG,CAAC,GAChDA,IAEF,OAAID,EAAM,OAASC,GAAO,EAEjBb,EAGFY,EAAM,MAAM,EAAGC,EAAM,CAAC,EAAE,KAAK,IAAI,CAC1C,CAEO,SAASC,GAAmBd,EAAae,EAAW,CACzD,GAAIf,EAAI,QAAQe,EAAE,CAAC,CAAC,IAAM,GACxB,MAAO,GAGT,IAAIC,EAAQ,EACZ,QAASZ,EAAI,EAAGA,EAAIJ,EAAI,OAAQI,IAC9B,GAAIJ,EAAII,CAAC,IAAM,KACbA,YACSJ,EAAII,CAAC,IAAMW,EAAE,CAAC,EACvBC,YACShB,EAAII,CAAC,IAAMW,EAAE,CAAC,IACvBC,IACIA,EAAQ,GACV,OAAOZ,EAIb,OAAIY,EAAQ,EACH,GAGF,EACT,CAEO,SAASC,GAAWC,EAAc7G,EAAS,EAAG,CACnD,IAAI8G,EAAM9G,EACN+G,EAAW,GACf,QAAWC,KAAQH,EACjB,GAAIG,IAAS,IAAM,CACjB,IAAMC,EAAQ,EAAKH,EAAM,EACzBC,GAAY,IAAI,OAAOE,CAAK,EAC5BH,GAAOG,CACT,MACEF,GAAYC,EACZF,IAIJ,OAAOC,CACT,CCxJA,SAASG,GAAWC,EAAehD,EAA2CiD,EAAaC,EAAeC,EAA0C,CAClJ,IAAMlC,EAAOjB,EAAK,KACZoD,EAAQpD,EAAK,OAAS,KACtBqD,EAAOL,EAAI,CAAC,EAAE,QAAQG,EAAM,MAAM,kBAAmB,IAAI,EAE/DD,EAAM,MAAM,OAAS,GACrB,IAAMI,EAAoC,CACxC,KAAMN,EAAI,CAAC,EAAE,OAAO,CAAC,IAAM,IAAM,QAAU,OAC3C,IAAAC,EACA,KAAAhC,EACA,MAAAmC,EACA,KAAAC,EACA,OAAQH,EAAM,aAAaG,CAAI,CACjC,EACA,OAAAH,EAAM,MAAM,OAAS,GACdI,CACT,CAEA,SAASC,GAAuBN,EAAaI,EAAcF,EAAc,CACvE,IAAMK,EAAoBP,EAAI,MAAME,EAAM,MAAM,sBAAsB,EAEtE,GAAIK,IAAsB,KACxB,OAAOH,EAGT,IAAMI,EAAeD,EAAkB,CAAC,EAExC,OAAOH,EACJ,MAAM,IAAI,EACV,IAAIK,GAAQ,CACX,IAAMC,EAAoBD,EAAK,MAAMP,EAAM,MAAM,cAAc,EAC/D,GAAIQ,IAAsB,KACxB,OAAOD,EAGT,GAAM,CAACE,CAAY,EAAID,EAEvB,OAAIC,EAAa,QAAUH,EAAa,OAC/BC,EAAK,MAAMD,EAAa,MAAM,EAGhCC,CACT,CAAC,EACA,KAAK,IAAI,CACd,CAKO,IAAMG,GAAN,KAAiE,CAKtE,YAAYC,EAAuD,CAJnEC,EAAA,gBACAA,EAAA,cACAA,EAAA,cAGE,KAAK,QAAUD,GAAWxI,EAC5B,CAEA,MAAM0I,EAAuC,CAC3C,IAAMhB,EAAM,KAAK,MAAM,MAAM,QAAQ,KAAKgB,CAAG,EAC7C,GAAIhB,GAAOA,EAAI,CAAC,EAAE,OAAS,EACzB,MAAO,CACL,KAAM,QACN,IAAKA,EAAI,CAAC,CACZ,CAEJ,CAEA,KAAKgB,EAAsC,CACzC,IAAMhB,EAAM,KAAK,MAAM,MAAM,KAAK,KAAKgB,CAAG,EAC1C,GAAIhB,EAAK,CACP,IAAMC,EAAM,KAAK,QAAQ,SACrBD,EAAI,CAAC,EACLb,GAAuBa,EAAI,CAAC,CAAC,EAC3BK,EAAOJ,EAAI,QAAQ,KAAK,MAAM,MAAM,iBAAkB,EAAE,EAC9D,MAAO,CACL,KAAM,OACN,IAAAA,EACA,eAAgB,WAChB,KAAAI,CACF,CACF,CACF,CAEA,OAAOW,EAAsC,CAC3C,IAAMhB,EAAM,KAAK,MAAM,MAAM,OAAO,KAAKgB,CAAG,EAC5C,GAAIhB,EAAK,CACP,IAAMC,EAAMD,EAAI,CAAC,EACXK,EAAOE,GAAuBN,EAAKD,EAAI,CAAC,GAAK,GAAI,KAAK,KAAK,EAEjE,MAAO,CACL,KAAM,OACN,IAAAC,EACA,KAAMD,EAAI,CAAC,EAAIA,EAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,KAAK,MAAM,OAAO,eAAgB,IAAI,EAAIA,EAAI,CAAC,EACpF,KAAAK,CACF,CACF,CACF,CAEA,QAAQW,EAAyC,CAC/C,IAAMhB,EAAM,KAAK,MAAM,MAAM,QAAQ,KAAKgB,CAAG,EAC7C,GAAIhB,EAAK,CACP,IAAIK,EAAOL,EAAI,CAAC,EAAE,KAAK,EAGvB,GAAI,KAAK,MAAM,MAAM,WAAW,KAAKK,CAAI,EAAG,CAC1C,IAAMY,EAAUpC,GAAMwB,EAAM,GAAG,GAC3B,KAAK,QAAQ,UAEN,CAACY,GAAW,KAAK,MAAM,MAAM,gBAAgB,KAAKA,CAAO,KAElEZ,EAAOY,EAAQ,KAAK,EAExB,CAEA,MAAO,CACL,KAAM,UACN,IAAKpC,GAAMmB,EAAI,CAAC,EAAG,IAAI,EACvB,MAAOA,EAAI,CAAC,EAAE,OACd,KAAAK,EACA,OAAQ,KAAK,MAAM,OAAOA,CAAI,CAChC,CACF,CACF,CAEA,GAAGW,EAAoC,CACrC,IAAMhB,EAAM,KAAK,MAAM,MAAM,GAAG,KAAKgB,CAAG,EACxC,GAAIhB,EACF,MAAO,CACL,KAAM,KACN,IAAKnB,GAAMmB,EAAI,CAAC,EAAG,IAAI,CACzB,CAEJ,CAEA,WAAWgB,EAA4C,CACrD,IAAMhB,EAAM,KAAK,MAAM,MAAM,WAAW,KAAKgB,CAAG,EAChD,GAAIhB,EAAK,CACP,IAAIZ,EAAQP,GAAMmB,EAAI,CAAC,EAAG,IAAI,EAAE,MAAM,IAAI,EACtCC,EAAM,GACNI,EAAO,GACLa,EAAkB,CAAC,EAEzB,KAAO9B,EAAM,OAAS,GAAG,CACvB,IAAI+B,EAAe,GACbC,EAAe,CAAC,EAElBxC,EACJ,IAAKA,EAAI,EAAGA,EAAIQ,EAAM,OAAQR,IAE5B,GAAI,KAAK,MAAM,MAAM,gBAAgB,KAAKQ,EAAMR,CAAC,CAAC,EAChDwC,EAAa,KAAKhC,EAAMR,CAAC,CAAC,EAC1BuC,EAAe,WACN,CAACA,EACVC,EAAa,KAAKhC,EAAMR,CAAC,CAAC,MAE1B,OAGJQ,EAAQA,EAAM,MAAMR,CAAC,EAErB,IAAMyC,EAAaD,EAAa,KAAK,IAAI,EACnCE,EAAcD,EAEjB,QAAQ,KAAK,MAAM,MAAM,wBAAyB,UAAU,EAC5D,QAAQ,KAAK,MAAM,MAAM,yBAA0B,EAAE,EACxDpB,EAAMA,EAAM,GAAGA,OAAAA,EAAG,MAAKoB,OAAAA,GAAeA,EACtChB,EAAOA,EAAO,GAAGA,OAAAA,EAAI,MAAKiB,OAAAA,GAAgBA,EAI1C,IAAMC,EAAM,KAAK,MAAM,MAAM,IAM7B,GALA,KAAK,MAAM,MAAM,IAAM,GACvB,KAAK,MAAM,YAAYD,EAAaJ,EAAQ,EAAI,EAChD,KAAK,MAAM,MAAM,IAAMK,EAGnBnC,EAAM,SAAW,EACnB,MAGF,IAAMoC,EAAYN,EAAO,GAAG,EAAE,EAE9B,IAAIM,GAAAA,YAAAA,EAAW,QAAS,OAEtB,MACK,IAAIA,GAAAA,YAAAA,EAAW,QAAS,aAAc,CAE3C,IAAMC,EAAWD,EACXE,EAAUD,EAAS,IAAM,KAAOrC,EAAM,KAAK,IAAI,EAC/CuC,EAAW,KAAK,WAAWD,CAAO,EACxCR,EAAOA,EAAO,OAAS,CAAC,EAAIS,EAE5B1B,EAAMA,EAAI,UAAU,EAAGA,EAAI,OAASwB,EAAS,IAAI,MAAM,EAAIE,EAAS,IACpEtB,EAAOA,EAAK,UAAU,EAAGA,EAAK,OAASoB,EAAS,KAAK,MAAM,EAAIE,EAAS,KACxE,KACF,UAAWH,GAAAA,YAAAA,EAAW,QAAS,OAAQ,CAErC,IAAMC,EAAWD,EACXE,EAAUD,EAAS,IAAM,KAAOrC,EAAM,KAAK,IAAI,EAC/CuC,EAAW,KAAK,KAAKD,CAAO,EAClCR,EAAOA,EAAO,OAAS,CAAC,EAAIS,EAE5B1B,EAAMA,EAAI,UAAU,EAAGA,EAAI,OAASuB,EAAU,IAAI,MAAM,EAAIG,EAAS,IACrEtB,EAAOA,EAAK,UAAU,EAAGA,EAAK,OAASoB,EAAS,IAAI,MAAM,EAAIE,EAAS,IACvEvC,EAAQsC,EAAQ,UAAUR,EAAO,GAAG,EAAE,EAAG,IAAI,MAAM,EAAE,MAAM,IAAI,EAC/D,QACF,CACF,CAEA,MAAO,CACL,KAAM,aACN,IAAAjB,EACA,OAAAiB,EACA,KAAAb,CACF,CACF,CACF,CAEA,KAAKW,EAAsC,CACzC,IAAIhB,EAAM,KAAK,MAAM,MAAM,KAAK,KAAKgB,CAAG,EACxC,GAAIhB,EAAK,CACP,IAAIrG,EAAOqG,EAAI,CAAC,EAAE,KAAK,EACjB4B,EAAYjI,EAAK,OAAS,EAE1Bc,EAAoB,CACxB,KAAM,OACN,IAAK,GACL,QAASmH,EACT,MAAOA,EAAY,CAACjI,EAAK,MAAM,EAAG,EAAE,EAAI,GACxC,MAAO,GACP,MAAO,CAAC,CACV,EAEAA,EAAOiI,EAAY,aAAajI,SAAK,MAAM,EAAE,GAAM,KAAKA,UAEpD,KAAK,QAAQ,WACfA,EAAOiI,EAAYjI,EAAO,SAI5B,IAAMkI,EAAY,KAAK,MAAM,MAAM,cAAclI,CAAI,EACjDmI,EAAoB,GAExB,KAAOd,GAAK,CACV,IAAIe,EAAW,GACX9B,EAAM,GACN+B,EAAe,GAKnB,GAJI,EAAEhC,EAAM6B,EAAU,KAAKb,CAAG,IAI1B,KAAK,MAAM,MAAM,GAAG,KAAKA,CAAG,EAC9B,MAGFf,EAAMD,EAAI,CAAC,EACXgB,EAAMA,EAAI,UAAUf,EAAI,MAAM,EAE9B,IAAIP,EAAOD,GAAWO,EAAI,CAAC,EAAE,MAAM,KAAM,CAAC,EAAE,CAAC,EAAGA,EAAI,CAAC,EAAE,MAAM,EACzDiC,EAAWjB,EAAI,MAAM,KAAM,CAAC,EAAE,CAAC,EAC/BkB,EAAY,CAACxC,EAAK,KAAK,EAEvB7G,EAAS,EAmBb,GAlBI,KAAK,QAAQ,UACfA,EAAS,EACTmJ,EAAetC,EAAK,UAAU,GACrBwC,EACTrJ,EAASmH,EAAI,CAAC,EAAE,OAAS,GAEzBnH,EAAS6G,EAAK,OAAO,KAAK,MAAM,MAAM,YAAY,EAClD7G,EAASA,EAAS,EAAI,EAAIA,EAC1BmJ,EAAetC,EAAK,MAAM7G,CAAM,EAChCA,GAAUmH,EAAI,CAAC,EAAE,QAGfkC,GAAa,KAAK,MAAM,MAAM,UAAU,KAAKD,CAAQ,IACvDhC,GAAOgC,EAAW,KAClBjB,EAAMA,EAAI,UAAUiB,EAAS,OAAS,CAAC,EACvCF,EAAW,IAGT,CAACA,EAAU,CACb,IAAMI,EAAkB,KAAK,MAAM,MAAM,gBAAgBtJ,CAAM,EACzDuJ,EAAU,KAAK,MAAM,MAAM,QAAQvJ,CAAM,EACzCwJ,EAAmB,KAAK,MAAM,MAAM,iBAAiBxJ,CAAM,EAC3DyJ,EAAoB,KAAK,MAAM,MAAM,kBAAkBzJ,CAAM,EAC7D0J,EAAiB,KAAK,MAAM,MAAM,eAAe1J,CAAM,EACvD2J,EAAuB,KAAK,MAAM,MAAM,qBAAqB3J,CAAM,EAGzE,KAAOmI,GAAK,CACV,IAAMyB,EAAUzB,EAAI,MAAM,KAAM,CAAC,EAAE,CAAC,EAChC0B,EAqCJ,GApCAT,EAAWQ,EAGP,KAAK,QAAQ,UACfR,EAAWA,EAAS,QAAQ,KAAK,MAAM,MAAM,mBAAoB,IAAI,EACrES,EAAsBT,GAEtBS,EAAsBT,EAAS,QAAQ,KAAK,MAAM,MAAM,cAAe,MAAM,EAI3EI,EAAiB,KAAKJ,CAAQ,GAK9BK,EAAkB,KAAKL,CAAQ,GAK/BM,EAAe,KAAKN,CAAQ,GAK5BO,EAAqB,KAAKP,CAAQ,GAKlCE,EAAgB,KAAKF,CAAQ,GAK7BG,EAAQ,KAAKH,CAAQ,EACvB,MAGF,GAAIS,EAAoB,OAAO,KAAK,MAAM,MAAM,YAAY,GAAK7J,GAAU,CAACoJ,EAAS,KAAK,EACxFD,GAAgB,KAAOU,EAAoB,MAAM7J,CAAM,MAClD,CAgBL,GAdIqJ,GAKAxC,EAAK,QAAQ,KAAK,MAAM,MAAM,cAAe,MAAM,EAAE,OAAO,KAAK,MAAM,MAAM,YAAY,GAAK,GAG9F2C,EAAiB,KAAK3C,CAAI,GAG1B4C,EAAkB,KAAK5C,CAAI,GAG3B0C,EAAQ,KAAK1C,CAAI,EACnB,MAGFsC,GAAgB,KAAOC,CACzB,CAEAC,EAAY,CAACD,EAAS,KAAK,EAE3BhC,GAAOwC,EAAU,KACjBzB,EAAMA,EAAI,UAAUyB,EAAQ,OAAS,CAAC,EACtC/C,EAAOgD,EAAoB,MAAM7J,CAAM,CACzC,CACF,CAEK4B,EAAK,QAEJqH,EACFrH,EAAK,MAAQ,GACJ,KAAK,MAAM,MAAM,gBAAgB,KAAKwF,CAAG,IAClD6B,EAAoB,KAIxBrH,EAAK,MAAM,KAAK,CACd,KAAM,YACN,IAAAwF,EACA,KAAM,CAAC,CAAC,KAAK,QAAQ,KAAO,KAAK,MAAM,MAAM,WAAW,KAAK+B,CAAY,EACzE,MAAO,GACP,KAAMA,EACN,OAAQ,CAAC,CACX,CAAC,EAEDvH,EAAK,KAAOwF,CACd,CAGA,IAAM0C,EAAWlI,EAAK,MAAM,GAAG,EAAE,EACjC,GAAIkI,EACFA,EAAS,IAAMA,EAAS,IAAI,QAAQ,EACpCA,EAAS,KAAOA,EAAS,KAAK,QAAQ,MAGtC,QAEFlI,EAAK,IAAMA,EAAK,IAAI,QAAQ,EAG5B,QAAWmI,KAAQnI,EAAK,MAAO,CAC7B,KAAK,MAAM,MAAM,IAAM,GACvBmI,EAAK,OAAS,KAAK,MAAM,YAAYA,EAAK,KAAM,CAAC,CAAC,EAClD,IAAMC,EAAYD,EAAK,OAAO,CAAC,EAC/B,GAAIA,EAAK,QAASC,GAAAA,YAAAA,EAAW,QAAS,SAAUA,GAAAA,YAAAA,EAAW,QAAS,aAAc,CAEhFD,EAAK,KAAOA,EAAK,KAAK,QAAQ,KAAK,MAAM,MAAM,gBAAiB,EAAE,EAClEC,EAAU,IAAMA,EAAU,IAAI,QAAQ,KAAK,MAAM,MAAM,gBAAiB,EAAE,EAC1EA,EAAU,KAAOA,EAAU,KAAK,QAAQ,KAAK,MAAM,MAAM,gBAAiB,EAAE,EAC5E,QAASjE,EAAI,KAAK,MAAM,YAAY,OAAS,EAAGA,GAAK,EAAGA,IACtD,GAAI,KAAK,MAAM,MAAM,WAAW,KAAK,KAAK,MAAM,YAAYA,CAAC,EAAE,GAAG,EAAG,CACnE,KAAK,MAAM,YAAYA,CAAC,EAAE,IAAM,KAAK,MAAM,YAAYA,CAAC,EAAE,IAAI,QAAQ,KAAK,MAAM,MAAM,gBAAiB,EAAE,EAC1G,KACF,CAGF,IAAMkE,EAAU,KAAK,MAAM,MAAM,iBAAiB,KAAKF,EAAK,GAAG,EAC/D,GAAIE,EAAS,CACX,IAAMC,EAAiC,CACrC,KAAM,WACN,IAAKD,EAAQ,CAAC,EAAI,IAClB,QAASA,EAAQ,CAAC,IAAM,KAC1B,EACAF,EAAK,QAAUG,EAAc,QACzBtI,EAAK,MACHmI,EAAK,OAAO,CAAC,GAAK,CAAC,YAAa,MAAM,EAAE,SAASA,EAAK,OAAO,CAAC,EAAE,IAAI,GAAK,WAAYA,EAAK,OAAO,CAAC,GAAKA,EAAK,OAAO,CAAC,EAAE,QACxHA,EAAK,OAAO,CAAC,EAAE,IAAMG,EAAc,IAAMH,EAAK,OAAO,CAAC,EAAE,IACxDA,EAAK,OAAO,CAAC,EAAE,KAAOG,EAAc,IAAMH,EAAK,OAAO,CAAC,EAAE,KACzDA,EAAK,OAAO,CAAC,EAAE,OAAO,QAAQG,CAAa,GAE3CH,EAAK,OAAO,QAAQ,CAClB,KAAM,YACN,IAAKG,EAAc,IACnB,KAAMA,EAAc,IACpB,OAAQ,CAACA,CAAa,CACxB,CAAC,EAGHH,EAAK,OAAO,QAAQG,CAAa,CAErC,CACF,MAAWH,EAAK,OACdA,EAAK,KAAO,IAGd,GAAI,CAACnI,EAAK,MAAO,CAEf,IAAMuI,EAAUJ,EAAK,OAAO,OAAOK,GAAKA,EAAE,OAAS,OAAO,EACpDC,EAAwBF,EAAQ,OAAS,GAAKA,EAAQ,KAAKC,GAAK,KAAK,MAAM,MAAM,QAAQ,KAAKA,EAAE,GAAG,CAAC,EAE1GxI,EAAK,MAAQyI,CACf,CACF,CAGA,GAAIzI,EAAK,MACP,QAAWmI,KAAQnI,EAAK,MAAO,CAC7BmI,EAAK,MAAQ,GACb,QAAWtC,KAASsC,EAAK,OACnBtC,EAAM,OAAS,SACjBA,EAAM,KAAO,YAGnB,CAGF,OAAO7F,CACT,CACF,CAEA,KAAKuG,EAAsC,CACzC,IAAMhB,EAAM,KAAK,MAAM,MAAM,KAAK,KAAKgB,CAAG,EAC1C,GAAIhB,EAAK,CACP,IAAMC,EAAMd,GAAuBa,EAAI,CAAC,CAAC,EAQzC,MAP2B,CACzB,KAAM,OACN,MAAO,GACP,IAAAC,EACA,IAAKD,EAAI,CAAC,IAAM,OAASA,EAAI,CAAC,IAAM,UAAYA,EAAI,CAAC,IAAM,QAC3D,KAAMC,CACR,CAEF,CACF,CAEA,IAAIe,EAAqC,CACvC,IAAMhB,EAAM,KAAK,MAAM,MAAM,IAAI,KAAKgB,CAAG,EACzC,GAAIhB,EAAK,CACP,IAAMlD,EAAMkD,EAAI,CAAC,EAAE,YAAY,EAAE,QAAQ,KAAK,MAAM,MAAM,oBAAqB,GAAG,EAC5E/B,EAAO+B,EAAI,CAAC,EAAIA,EAAI,CAAC,EAAE,QAAQ,KAAK,MAAM,MAAM,aAAc,IAAI,EAAE,QAAQ,KAAK,MAAM,OAAO,eAAgB,IAAI,EAAI,GACtHI,EAAQJ,EAAI,CAAC,EAAIA,EAAI,CAAC,EAAE,UAAU,EAAGA,EAAI,CAAC,EAAE,OAAS,CAAC,EAAE,QAAQ,KAAK,MAAM,OAAO,eAAgB,IAAI,EAAIA,EAAI,CAAC,EACrH,MAAO,CACL,KAAM,MACN,IAAAlD,EACA,IAAK+B,GAAMmB,EAAI,CAAC,EAAG,IAAI,EACvB,KAAA/B,EACA,MAAAmC,CACF,CACF,CACF,CAEA,MAAMY,EAAuC,OAC3C,IAAMhB,EAAM,KAAK,MAAM,MAAM,MAAM,KAAKgB,CAAG,EAK3C,GAJI,CAAChB,GAID,CAAC,KAAK,MAAM,MAAM,eAAe,KAAKA,EAAI,CAAC,CAAC,EAE9C,OAGF,IAAMmD,EAAUjF,GAAW8B,EAAI,CAAC,CAAC,EAC3BoD,EAASpD,EAAI,CAAC,EAAE,QAAQ,KAAK,MAAM,MAAM,gBAAiB,EAAE,EAAE,MAAM,GAAG,EACvEqD,GAAOrD,EAAAA,EAAI,CAAC,IAALA,MAAAA,EAAQ,OAASA,EAAI,CAAC,EAAE,QAAQ,KAAK,MAAM,MAAM,kBAAmB,EAAE,EAAE,MAAM,IAAI,EAAI,CAAC,EAE9F4C,EAAqB,CACzB,KAAM,QACN,IAAK/D,GAAMmB,EAAI,CAAC,EAAG,IAAI,EACvB,OAAQ,CAAC,EACT,MAAO,CAAC,EACR,KAAM,CAAC,CACT,EAEA,GAAImD,EAAQ,SAAWC,EAAO,OAK9B,CAAA,QAAWE,KAASF,EACd,KAAK,MAAM,MAAM,gBAAgB,KAAKE,CAAK,EAC7CV,EAAK,MAAM,KAAK,OAAO,EACd,KAAK,MAAM,MAAM,iBAAiB,KAAKU,CAAK,EACrDV,EAAK,MAAM,KAAK,QAAQ,EACf,KAAK,MAAM,MAAM,eAAe,KAAKU,CAAK,EACnDV,EAAK,MAAM,KAAK,MAAM,EAEtBA,EAAK,MAAM,KAAK,IAAI,EAIxB,QAAShE,EAAI,EAAGA,EAAIuE,EAAQ,OAAQvE,IAClCgE,EAAK,OAAO,KAAK,CACf,KAAMO,EAAQvE,CAAC,EACf,OAAQ,KAAK,MAAM,OAAOuE,EAAQvE,CAAC,CAAC,EACpC,OAAQ,GACR,MAAOgE,EAAK,MAAMhE,CAAC,CACrB,CAAC,EAGH,QAAWP,KAAOgF,EAChBT,EAAK,KAAK,KAAK1E,GAAWG,EAAKuE,EAAK,OAAO,MAAM,EAAE,IAAI,CAACW,EAAM3E,KACrD,CACL,KAAM2E,EACN,OAAQ,KAAK,MAAM,OAAOA,CAAI,EAC9B,OAAQ,GACR,MAAOX,EAAK,MAAMhE,CAAC,CACrB,EACD,CAAC,EAGJ,OAAOgE,CAAAA,CACT,CAEA,SAAS5B,EAAyC,CAChD,IAAMhB,EAAM,KAAK,MAAM,MAAM,SAAS,KAAKgB,CAAG,EAC9C,GAAIhB,EAAK,CACP,IAAMK,EAAOL,EAAI,CAAC,EAAE,KAAK,EACzB,MAAO,CACL,KAAM,UACN,IAAKnB,GAAMmB,EAAI,CAAC,EAAG,IAAI,EACvB,MAAOA,EAAI,CAAC,EAAE,OAAO,CAAC,IAAM,IAAM,EAAI,EACtC,KAAAK,EACA,OAAQ,KAAK,MAAM,OAAOA,CAAI,CAChC,CACF,CACF,CAEA,UAAUW,EAA2C,CACnD,IAAMhB,EAAM,KAAK,MAAM,MAAM,UAAU,KAAKgB,CAAG,EAC/C,GAAIhB,EAAK,CACP,IAAMK,EAAOL,EAAI,CAAC,EAAE,OAAOA,EAAI,CAAC,EAAE,OAAS,CAAC,IAAM,KAC9CA,EAAI,CAAC,EAAE,MAAM,EAAG,EAAE,EAClBA,EAAI,CAAC,EACT,MAAO,CACL,KAAM,YACN,IAAKA,EAAI,CAAC,EACV,KAAAK,EACA,OAAQ,KAAK,MAAM,OAAOA,CAAI,CAChC,CACF,CACF,CAEA,KAAKW,EAAsC,CACzC,IAAMhB,EAAM,KAAK,MAAM,MAAM,KAAK,KAAKgB,CAAG,EAC1C,GAAIhB,EACF,MAAO,CACL,KAAM,OACN,IAAKA,EAAI,CAAC,EACV,KAAMA,EAAI,CAAC,EACX,OAAQ,KAAK,MAAM,OAAOA,EAAI,CAAC,CAAC,CAClC,CAEJ,CAEA,OAAOgB,EAAwC,CAC7C,IAAMhB,EAAM,KAAK,MAAM,OAAO,OAAO,KAAKgB,CAAG,EAC7C,GAAIhB,EACF,MAAO,CACL,KAAM,SACN,IAAKA,EAAI,CAAC,EACV,KAAMA,EAAI,CAAC,CACb,CAEJ,CAEA,IAAIgB,EAAqC,CACvC,IAAMhB,EAAM,KAAK,MAAM,OAAO,IAAI,KAAKgB,CAAG,EAC1C,GAAIhB,EACF,MAAI,CAAC,KAAK,MAAM,MAAM,QAAU,KAAK,MAAM,MAAM,UAAU,KAAKA,EAAI,CAAC,CAAC,EACpE,KAAK,MAAM,MAAM,OAAS,GACjB,KAAK,MAAM,MAAM,QAAU,KAAK,MAAM,MAAM,QAAQ,KAAKA,EAAI,CAAC,CAAC,IACxE,KAAK,MAAM,MAAM,OAAS,IAExB,CAAC,KAAK,MAAM,MAAM,YAAc,KAAK,MAAM,MAAM,kBAAkB,KAAKA,EAAI,CAAC,CAAC,EAChF,KAAK,MAAM,MAAM,WAAa,GACrB,KAAK,MAAM,MAAM,YAAc,KAAK,MAAM,MAAM,gBAAgB,KAAKA,EAAI,CAAC,CAAC,IACpF,KAAK,MAAM,MAAM,WAAa,IAGzB,CACL,KAAM,OACN,IAAKA,EAAI,CAAC,EACV,OAAQ,KAAK,MAAM,MAAM,OACzB,WAAY,KAAK,MAAM,MAAM,WAC7B,MAAO,GACP,KAAMA,EAAI,CAAC,CACb,CAEJ,CAEA,KAAKgB,EAAqD,CACxD,IAAMhB,EAAM,KAAK,MAAM,OAAO,KAAK,KAAKgB,CAAG,EAC3C,GAAIhB,EAAK,CACP,IAAMwD,EAAaxD,EAAI,CAAC,EAAE,KAAK,EAC/B,GAAI,CAAC,KAAK,QAAQ,UAAY,KAAK,MAAM,MAAM,kBAAkB,KAAKwD,CAAU,EAAG,CAEjF,GAAI,CAAE,KAAK,MAAM,MAAM,gBAAgB,KAAKA,CAAU,EACpD,OAIF,IAAMC,EAAa5E,GAAM2E,EAAW,MAAM,EAAG,EAAE,EAAG,IAAI,EACtD,IAAKA,EAAW,OAASC,EAAW,QAAU,IAAM,EAClD,MAEJ,KAAO,CAEL,IAAMC,EAAiBpE,GAAmBU,EAAI,CAAC,EAAG,IAAI,EACtD,GAAI0D,IAAmB,GAErB,OAGF,GAAIA,EAAiB,GAAI,CAEvB,IAAMC,GADQ3D,EAAI,CAAC,EAAE,QAAQ,GAAG,IAAM,EAAI,EAAI,GACtBA,EAAI,CAAC,EAAE,OAAS0D,EACxC1D,EAAI,CAAC,EAAIA,EAAI,CAAC,EAAE,UAAU,EAAG0D,CAAc,EAC3C1D,EAAI,CAAC,EAAIA,EAAI,CAAC,EAAE,UAAU,EAAG2D,CAAO,EAAE,KAAK,EAC3C3D,EAAI,CAAC,EAAI,EACX,CACF,CACA,IAAI/B,EAAO+B,EAAI,CAAC,EACZI,EAAQ,GACZ,GAAI,KAAK,QAAQ,SAAU,CAEzB,IAAMpD,EAAO,KAAK,MAAM,MAAM,kBAAkB,KAAKiB,CAAI,EAErDjB,IACFiB,EAAOjB,EAAK,CAAC,EACboD,EAAQpD,EAAK,CAAC,EAElB,MACEoD,EAAQJ,EAAI,CAAC,EAAIA,EAAI,CAAC,EAAE,MAAM,EAAG,EAAE,EAAI,GAGzC,OAAA/B,EAAOA,EAAK,KAAK,EACb,KAAK,MAAM,MAAM,kBAAkB,KAAKA,CAAI,IAC1C,KAAK,QAAQ,UAAY,CAAE,KAAK,MAAM,MAAM,gBAAgB,KAAKuF,CAAU,EAE7EvF,EAAOA,EAAK,MAAM,CAAC,EAEnBA,EAAOA,EAAK,MAAM,EAAG,EAAE,GAGpB8B,GAAWC,EAAK,CACrB,KAAM/B,GAAOA,EAAK,QAAQ,KAAK,MAAM,OAAO,eAAgB,IAAI,EAChE,MAAOmC,GAAQA,EAAM,QAAQ,KAAK,MAAM,OAAO,eAAgB,IAAI,CACrE,EAAGJ,EAAI,CAAC,EAAG,KAAK,MAAO,KAAK,KAAK,CACnC,CACF,CAEA,QAAQgB,EAAa4C,EAAoE,CACvF,IAAI5D,EACJ,IAAKA,EAAM,KAAK,MAAM,OAAO,QAAQ,KAAKgB,CAAG,KACvChB,EAAM,KAAK,MAAM,OAAO,OAAO,KAAKgB,CAAG,GAAI,CAC/C,IAAM6C,GAAc7D,EAAI,CAAC,GAAKA,EAAI,CAAC,GAAG,QAAQ,KAAK,MAAM,MAAM,oBAAqB,GAAG,EACjFhD,EAAO4G,EAAMC,EAAW,YAAY,CAAC,EAC3C,GAAI,CAAC7G,EAAM,CACT,IAAMqD,EAAOL,EAAI,CAAC,EAAE,OAAO,CAAC,EAC5B,MAAO,CACL,KAAM,OACN,IAAKK,EACL,KAAAA,CACF,CACF,CACA,OAAON,GAAWC,EAAKhD,EAAMgD,EAAI,CAAC,EAAG,KAAK,MAAO,KAAK,KAAK,CAC7D,CACF,CAEA,SAASgB,EAAa8C,EAAmBC,EAAW,GAA2C,CAC7F,IAAIzF,EAAQ,KAAK,MAAM,OAAO,eAAe,KAAK0C,CAAG,EAKrD,GAJI,GAAC1C,GACD,CAACA,EAAM,CAAC,GAAK,CAACA,EAAM,CAAC,GAAK,CAACA,EAAM,CAAC,GAAK,CAACA,EAAM,CAAC,GAG/CA,EAAM,CAAC,GAAKyF,EAAS,MAAM,KAAK,MAAM,MAAM,mBAAmB,KAI/D,EAFazF,EAAM,CAAC,GAAKA,EAAM,CAAC,IAEnB,CAACyF,GAAY,KAAK,MAAM,OAAO,YAAY,KAAKA,CAAQ,GAAG,CAE1E,IAAMC,EAAU,CAAC,GAAG1F,EAAM,CAAC,CAAC,EAAE,OAAS,EACnC2F,EAAQC,EAASC,EAAaH,EAASI,EAAgB,EAErDC,EAAS/F,EAAM,CAAC,EAAE,CAAC,IAAM,IAAM,KAAK,MAAM,OAAO,kBAAoB,KAAK,MAAM,OAAO,kBAM7F,IALA+F,EAAO,UAAY,EAGnBP,EAAYA,EAAU,MAAM,GAAK9C,EAAI,OAASgD,CAAO,GAE7C1F,EAAQ+F,EAAO,KAAKP,CAAS,KAAO,MAAM,CAGhD,GAFAG,EAAS3F,EAAM,CAAC,GAAKA,EAAM,CAAC,GAAKA,EAAM,CAAC,GAAKA,EAAM,CAAC,GAAKA,EAAM,CAAC,GAAKA,EAAM,CAAC,EAExE,CAAC2F,EAAQ,SAIb,GAFAC,EAAU,CAAC,GAAGD,CAAM,EAAE,OAElB3F,EAAM,CAAC,GAAKA,EAAM,CAAC,EAAG,CACxB6F,GAAcD,EACd,QACF,UAAW5F,EAAM,CAAC,GAAKA,EAAM,CAAC,IACxB0F,EAAU,GAAK,GAAGA,EAAUE,GAAW,GAAI,CAC7CE,GAAiBF,EACjB,QACF,CAKF,GAFAC,GAAcD,EAEVC,EAAa,EAAG,SAGpBD,EAAU,KAAK,IAAIA,EAASA,EAAUC,EAAaC,CAAa,EAEhE,IAAME,EAAiB,CAAC,GAAGhG,EAAM,CAAC,CAAC,EAAE,CAAC,EAAE,OAClC2B,EAAMe,EAAI,MAAM,EAAGgD,EAAU1F,EAAM,MAAQgG,EAAiBJ,CAAO,EAGzE,GAAI,KAAK,IAAIF,EAASE,CAAO,EAAI,EAAG,CAClC,IAAM7D,EAAOJ,EAAI,MAAM,EAAG,EAAE,EAC5B,MAAO,CACL,KAAM,KACN,IAAAA,EACA,KAAAI,EACA,OAAQ,KAAK,MAAM,aAAaA,CAAI,CACtC,CACF,CAGA,IAAMA,EAAOJ,EAAI,MAAM,EAAG,EAAE,EAC5B,MAAO,CACL,KAAM,SACN,IAAAA,EACA,KAAAI,EACA,OAAQ,KAAK,MAAM,aAAaA,CAAI,CACtC,CACF,CACF,CACF,CAEA,SAASW,EAA0C,CACjD,IAAMhB,EAAM,KAAK,MAAM,OAAO,KAAK,KAAKgB,CAAG,EAC3C,GAAIhB,EAAK,CACP,IAAIK,EAAOL,EAAI,CAAC,EAAE,QAAQ,KAAK,MAAM,MAAM,kBAAmB,GAAG,EAC3DuE,EAAmB,KAAK,MAAM,MAAM,aAAa,KAAKlE,CAAI,EAC1DmE,EAA0B,KAAK,MAAM,MAAM,kBAAkB,KAAKnE,CAAI,GAAK,KAAK,MAAM,MAAM,gBAAgB,KAAKA,CAAI,EAC3H,OAAIkE,GAAoBC,IACtBnE,EAAOA,EAAK,UAAU,EAAGA,EAAK,OAAS,CAAC,GAEnC,CACL,KAAM,WACN,IAAKL,EAAI,CAAC,EACV,KAAAK,CACF,CACF,CACF,CAEA,GAAGW,EAAoC,CACrC,IAAMhB,EAAM,KAAK,MAAM,OAAO,GAAG,KAAKgB,CAAG,EACzC,GAAIhB,EACF,MAAO,CACL,KAAM,KACN,IAAKA,EAAI,CAAC,CACZ,CAEJ,CAEA,IAAIgB,EAAa8C,EAAmBC,EAAW,GAA4B,CACzE,IAAIzF,EAAQ,KAAK,MAAM,OAAO,UAAU,KAAK0C,CAAG,EAChD,GAAK1C,IAID,CAFaA,EAAM,CAAC,GAEP,CAACyF,GAAY,KAAK,MAAM,OAAO,YAAY,KAAKA,CAAQ,GAAG,CAE1E,IAAMC,EAAU,CAAC,GAAG1F,EAAM,CAAC,CAAC,EAAE,OAAS,EACnC2F,EAAQC,EAASC,EAAaH,EAE5BK,EAAS,KAAK,MAAM,OAAO,UAMjC,IALAA,EAAO,UAAY,EAGnBP,EAAYA,EAAU,MAAM,GAAK9C,EAAI,OAASgD,CAAO,GAE7C1F,EAAQ+F,EAAO,KAAKP,CAAS,KAAO,MAAM,CAOhD,GANAG,EAAS3F,EAAM,CAAC,GAAKA,EAAM,CAAC,GAAKA,EAAM,CAAC,GAAKA,EAAM,CAAC,GAAKA,EAAM,CAAC,GAAKA,EAAM,CAAC,EAExE,CAAC2F,IAELC,EAAU,CAAC,GAAGD,CAAM,EAAE,OAElBC,IAAYF,GAAS,SAEzB,GAAI1F,EAAM,CAAC,GAAKA,EAAM,CAAC,EAAG,CACxB6F,GAAcD,EACd,QACF,CAIA,GAFAC,GAAcD,EAEVC,EAAa,EAAG,SAGpBD,EAAU,KAAK,IAAIA,EAASA,EAAUC,CAAU,EAEhD,IAAMG,EAAiB,CAAC,GAAGhG,EAAM,CAAC,CAAC,EAAE,CAAC,EAAE,OAClC2B,EAAMe,EAAI,MAAM,EAAGgD,EAAU1F,EAAM,MAAQgG,EAAiBJ,CAAO,EAGnE7D,EAAOJ,EAAI,MAAM+D,EAAS,CAACA,CAAO,EACxC,MAAO,CACL,KAAM,MACN,IAAA/D,EACA,KAAAI,EACA,OAAQ,KAAK,MAAM,aAAaA,CAAI,CACtC,CACF,CACF,CACF,CAEA,SAASW,EAAsC,CAC7C,IAAMhB,EAAM,KAAK,MAAM,OAAO,SAAS,KAAKgB,CAAG,EAC/C,GAAIhB,EAAK,CACP,IAAIK,EAAMpC,EACV,OAAI+B,EAAI,CAAC,IAAM,KACbK,EAAOL,EAAI,CAAC,EACZ/B,EAAO,UAAYoC,IAEnBA,EAAOL,EAAI,CAAC,EACZ/B,EAAOoC,GAGF,CACL,KAAM,OACN,IAAKL,EAAI,CAAC,EACV,KAAAK,EACA,KAAApC,EACA,OAAQ,CACN,CACE,KAAM,OACN,IAAKoC,EACL,KAAAA,CACF,CACF,CACF,CACF,CACF,CAEA,IAAIW,EAAsC,SACxC,IAAIhB,EACJ,GAAIA,EAAM,KAAK,MAAM,OAAO,IAAI,KAAKgB,CAAG,EAAG,CACzC,IAAIX,EAAMpC,EACV,GAAI+B,EAAI,CAAC,IAAM,IACbK,EAAOL,EAAI,CAAC,EACZ/B,EAAO,UAAYoC,MACd,CAEL,IAAIoE,EACJ,GACEA,EAAczE,EAAI,CAAC,EACnBA,EAAI,CAAC,GAAI0E,GAAAC,EAAA,KAAK,MAAM,OAAO,WAAW,KAAK3E,EAAI,CAAC,CAAC,IAAxC,YAAA2E,EAA4C,KAA5C,KAAAD,EAAkD,SACpDD,IAAgBzE,EAAI,CAAC,GAC9BK,EAAOL,EAAI,CAAC,EACRA,EAAI,CAAC,IAAM,OACb/B,EAAO,UAAY+B,EAAI,CAAC,EAExB/B,EAAO+B,EAAI,CAAC,CAEhB,CACA,MAAO,CACL,KAAM,OACN,IAAKA,EAAI,CAAC,EACV,KAAAK,EACA,KAAApC,EACA,OAAQ,CACN,CACE,KAAM,OACN,IAAKoC,EACL,KAAAA,CACF,CACF,CACF,CACF,CACF,CAEA,WAAWW,EAAsC,CAC/C,IAAMhB,EAAM,KAAK,MAAM,OAAO,KAAK,KAAKgB,CAAG,EAC3C,GAAIhB,EAAK,CACP,IAAMvB,EAAU,KAAK,MAAM,MAAM,WACjC,MAAO,CACL,KAAM,OACN,IAAKuB,EAAI,CAAC,EACV,KAAMA,EAAI,CAAC,EACX,QAAAvB,CACF,CACF,CACF,CACF,ECx7BamG,GAAN,MAAMC,EAAuD,CAalE,YAAY/D,EAAuD,CAZnEC,EAAA,eACAA,EAAA,gBACAA,EAAA,cAMOA,EAAA,oBAECA,EAAA,kBAIN,KAAK,OAAS,CAAC,EACf,KAAK,OAAO,MAAQ,OAAO,OAAO,IAAI,EACtC,KAAK,QAAUD,GAAWxI,GAC1B,KAAK,QAAQ,UAAY,KAAK,QAAQ,WAAa,IAAIuI,GACvD,KAAK,UAAY,KAAK,QAAQ,UAC9B,KAAK,UAAU,QAAU,KAAK,QAC9B,KAAK,UAAU,MAAQ,KACvB,KAAK,YAAc,CAAC,EACpB,KAAK,MAAQ,CACX,OAAQ,GACR,WAAY,GACZ,IAAK,EACP,EAEA,IAAMV,EAAQ,CACZ,MAAA5G,GACA,MAAOkE,GAAM,OACb,OAAQC,GAAO,MACjB,EAEI,KAAK,QAAQ,UACfyC,EAAM,MAAQ1C,GAAM,SACpB0C,EAAM,OAASzC,GAAO,UACb,KAAK,QAAQ,MACtByC,EAAM,MAAQ1C,GAAM,IAChB,KAAK,QAAQ,OACf0C,EAAM,OAASzC,GAAO,OAEtByC,EAAM,OAASzC,GAAO,KAG1B,KAAK,UAAU,MAAQyC,CACzB,CAKA,WAAW,OAAQ,CACjB,MAAO,CACL,MAAA1C,GACA,OAAAC,EACF,CACF,CAKA,OAAO,IAAoDsD,EAAaF,EAAuD,CAE7H,OADc,IAAI+D,GAAqC/D,CAAO,EACjD,IAAIE,CAAG,CACtB,CAKA,OAAO,UAA0DA,EAAaF,EAAuD,CAEnI,OADc,IAAI+D,GAAqC/D,CAAO,EACjD,aAAaE,CAAG,CAC/B,CAKA,IAAIA,EAAa,CACfA,EAAMA,EAAI,QAAQzH,GAAM,eAAgB,IAAI,EAE5C,KAAK,YAAYyH,EAAK,KAAK,MAAM,EAEjC,QAASpC,EAAI,EAAGA,EAAI,KAAK,YAAY,OAAQA,IAAK,CAChD,IAAMkG,EAAO,KAAK,YAAYlG,CAAC,EAC/B,KAAK,aAAakG,EAAK,IAAKA,EAAK,MAAM,CACzC,CACA,OAAA,KAAK,YAAc,CAAC,EAEb,KAAK,MACd,CAOA,YAAY9D,EAAaE,EAAkB,CAAC,EAAG6D,EAAuB,GAAO,WAC3E,KAAK,UAAU,MAAQ,KACnB,KAAK,QAAQ,WACf/D,EAAMA,EAAI,QAAQzH,GAAM,cAAe,MAAM,EAAE,QAAQA,GAAM,UAAW,EAAE,GAG5E,IAAIyL,EAAY,IAChB,KAAOhE,GAAK,CACV,GAAIA,EAAI,OAASgE,EACfA,EAAYhE,EAAI,WACX,CACL,KAAK,kBAAkBA,EAAI,WAAW,CAAC,CAAC,EACxC,KACF,CAEA,IAAIV,EAEJ,IAAIoE,GAAAC,EAAA,KAAK,QAAQ,aAAb,YAAAA,EAAyB,QAAzB,MAAAD,EAAgC,KAAMO,IACpC3E,EAAQ2E,EAAa,KAAK,CAAE,MAAO,IAAK,EAAGjE,EAAKE,CAAM,IACxDF,EAAMA,EAAI,UAAUV,EAAM,IAAI,MAAM,EACpCY,EAAO,KAAKZ,CAAK,EACV,IAEF,IAEP,SAIF,GAAIA,EAAQ,KAAK,UAAU,MAAMU,CAAG,EAAG,CACrCA,EAAMA,EAAI,UAAUV,EAAM,IAAI,MAAM,EACpC,IAAMkB,EAAYN,EAAO,GAAG,EAAE,EAC1BZ,EAAM,IAAI,SAAW,GAAKkB,IAAc,OAG1CA,EAAU,KAAO,KAEjBN,EAAO,KAAKZ,CAAK,EAEnB,QACF,CAGA,GAAIA,EAAQ,KAAK,UAAU,KAAKU,CAAG,EAAG,CACpCA,EAAMA,EAAI,UAAUV,EAAM,IAAI,MAAM,EACpC,IAAMkB,EAAYN,EAAO,GAAG,EAAE,GAE1BM,GAAAA,YAAAA,EAAW,QAAS,cAAeA,GAAAA,YAAAA,EAAW,QAAS,QACzDA,EAAU,MAAQA,EAAU,IAAI,SAAS,IAAI,EAAI,GAAK,MAAQlB,EAAM,IACpEkB,EAAU,MAAQ,KAAOlB,EAAM,KAC/B,KAAK,YAAY,GAAG,EAAE,EAAG,IAAMkB,EAAU,MAEzCN,EAAO,KAAKZ,CAAK,EAEnB,QACF,CAGA,GAAIA,EAAQ,KAAK,UAAU,OAAOU,CAAG,EAAG,CACtCA,EAAMA,EAAI,UAAUV,EAAM,IAAI,MAAM,EACpCY,EAAO,KAAKZ,CAAK,EACjB,QACF,CAGA,GAAIA,EAAQ,KAAK,UAAU,QAAQU,CAAG,EAAG,CACvCA,EAAMA,EAAI,UAAUV,EAAM,IAAI,MAAM,EACpCY,EAAO,KAAKZ,CAAK,EACjB,QACF,CAGA,GAAIA,EAAQ,KAAK,UAAU,GAAGU,CAAG,EAAG,CAClCA,EAAMA,EAAI,UAAUV,EAAM,IAAI,MAAM,EACpCY,EAAO,KAAKZ,CAAK,EACjB,QACF,CAGA,GAAIA,EAAQ,KAAK,UAAU,WAAWU,CAAG,EAAG,CAC1CA,EAAMA,EAAI,UAAUV,EAAM,IAAI,MAAM,EACpCY,EAAO,KAAKZ,CAAK,EACjB,QACF,CAGA,GAAIA,EAAQ,KAAK,UAAU,KAAKU,CAAG,EAAG,CACpCA,EAAMA,EAAI,UAAUV,EAAM,IAAI,MAAM,EACpCY,EAAO,KAAKZ,CAAK,EACjB,QACF,CAGA,GAAIA,EAAQ,KAAK,UAAU,KAAKU,CAAG,EAAG,CACpCA,EAAMA,EAAI,UAAUV,EAAM,IAAI,MAAM,EACpCY,EAAO,KAAKZ,CAAK,EACjB,QACF,CAGA,GAAIA,EAAQ,KAAK,UAAU,IAAIU,CAAG,EAAG,CACnCA,EAAMA,EAAI,UAAUV,EAAM,IAAI,MAAM,EACpC,IAAMkB,EAAYN,EAAO,GAAG,EAAE,GAC1BM,GAAAA,YAAAA,EAAW,QAAS,cAAeA,GAAAA,YAAAA,EAAW,QAAS,QACzDA,EAAU,MAAQA,EAAU,IAAI,SAAS,IAAI,EAAI,GAAK,MAAQlB,EAAM,IACpEkB,EAAU,MAAQ,KAAOlB,EAAM,IAC/B,KAAK,YAAY,GAAG,EAAE,EAAG,IAAMkB,EAAU,MAC/B,KAAK,OAAO,MAAMlB,EAAM,GAAG,IACrC,KAAK,OAAO,MAAMA,EAAM,GAAG,EAAI,CAC7B,KAAMA,EAAM,KACZ,MAAOA,EAAM,KACf,EACAY,EAAO,KAAKZ,CAAK,GAEnB,QACF,CAGA,GAAIA,EAAQ,KAAK,UAAU,MAAMU,CAAG,EAAG,CACrCA,EAAMA,EAAI,UAAUV,EAAM,IAAI,MAAM,EACpCY,EAAO,KAAKZ,CAAK,EACjB,QACF,CAGA,GAAIA,EAAQ,KAAK,UAAU,SAASU,CAAG,EAAG,CACxCA,EAAMA,EAAI,UAAUV,EAAM,IAAI,MAAM,EACpCY,EAAO,KAAKZ,CAAK,EACjB,QACF,CAIA,IAAI4E,EAASlE,EACb,IAAImE,EAAA,KAAK,QAAQ,aAAb,MAAAA,EAAyB,WAAY,CACvC,IAAIC,EAAa,IACXC,EAAUrE,EAAI,MAAM,CAAC,EACvBsE,EACJ,KAAK,QAAQ,WAAW,WAAW,QAASC,GAAkB,CAC5DD,EAAYC,EAAc,KAAK,CAAE,MAAO,IAAK,EAAGF,CAAO,EACnD,OAAOC,GAAc,UAAYA,GAAa,IAChDF,EAAa,KAAK,IAAIA,EAAYE,CAAS,EAE/C,CAAC,EACGF,EAAa,KAAYA,GAAc,IACzCF,EAASlE,EAAI,UAAU,EAAGoE,EAAa,CAAC,EAE5C,CACA,GAAI,KAAK,MAAM,MAAQ9E,EAAQ,KAAK,UAAU,UAAU4E,CAAM,GAAI,CAChE,IAAM1D,EAAYN,EAAO,GAAG,EAAE,EAC1B6D,IAAwBvD,GAAAA,YAAAA,EAAW,QAAS,aAC9CA,EAAU,MAAQA,EAAU,IAAI,SAAS,IAAI,EAAI,GAAK,MAAQlB,EAAM,IACpEkB,EAAU,MAAQ,KAAOlB,EAAM,KAC/B,KAAK,YAAY,IAAI,EACrB,KAAK,YAAY,GAAG,EAAE,EAAG,IAAMkB,EAAU,MAEzCN,EAAO,KAAKZ,CAAK,EAEnByE,EAAuBG,EAAO,SAAWlE,EAAI,OAC7CA,EAAMA,EAAI,UAAUV,EAAM,IAAI,MAAM,EACpC,QACF,CAGA,GAAIA,EAAQ,KAAK,UAAU,KAAKU,CAAG,EAAG,CACpCA,EAAMA,EAAI,UAAUV,EAAM,IAAI,MAAM,EACpC,IAAMkB,EAAYN,EAAO,GAAG,EAAE,GAC1BM,GAAAA,YAAAA,EAAW,QAAS,QACtBA,EAAU,MAAQA,EAAU,IAAI,SAAS,IAAI,EAAI,GAAK,MAAQlB,EAAM,IACpEkB,EAAU,MAAQ,KAAOlB,EAAM,KAC/B,KAAK,YAAY,IAAI,EACrB,KAAK,YAAY,GAAG,EAAE,EAAG,IAAMkB,EAAU,MAEzCN,EAAO,KAAKZ,CAAK,EAEnB,QACF,CAEA,GAAIU,EAAK,CACP,KAAK,kBAAkBA,EAAI,WAAW,CAAC,CAAC,EACxC,KACF,CACF,CAEA,OAAA,KAAK,MAAM,IAAM,GACVE,CACT,CAEA,OAAOF,EAAaE,EAAkB,CAAC,EAAG,CACxC,OAAA,KAAK,YAAY,KAAK,CAAE,IAAAF,EAAK,OAAAE,CAAO,CAAC,EAC9BA,CACT,CAKA,aAAaF,EAAaE,EAAkB,CAAC,EAAY,iBACvD,KAAK,UAAU,MAAQ,KAEvB,IAAI4C,EAAY9C,EACZ1C,EAAgC,KAGpC,GAAI,KAAK,OAAO,MAAO,CACrB,IAAMsF,EAAQ,OAAO,KAAK,KAAK,OAAO,KAAK,EAC3C,GAAIA,EAAM,OAAS,EACjB,MAAQtF,EAAQ,KAAK,UAAU,MAAM,OAAO,cAAc,KAAKwF,CAAS,KAAO,MACzEF,EAAM,SAAStF,EAAM,CAAC,EAAE,MAAMA,EAAM,CAAC,EAAE,YAAY,GAAG,EAAI,EAAG,EAAE,CAAC,IAClEwF,EAAYA,EAAU,MAAM,EAAGxF,EAAM,KAAK,EACtC,IAAM,IAAI,OAAOA,EAAM,CAAC,EAAE,OAAS,CAAC,EAAI,IACxCwF,EAAU,MAAM,KAAK,UAAU,MAAM,OAAO,cAAc,SAAS,EAI/E,CAGA,MAAQxF,EAAQ,KAAK,UAAU,MAAM,OAAO,eAAe,KAAKwF,CAAS,KAAO,MAC9EA,EAAYA,EAAU,MAAM,EAAGxF,EAAM,KAAK,EAAI,KAAOwF,EAAU,MAAM,KAAK,UAAU,MAAM,OAAO,eAAe,SAAS,EAI3H,IAAIvF,EACJ,MAAQD,EAAQ,KAAK,UAAU,MAAM,OAAO,UAAU,KAAKwF,CAAS,KAAO,MACzEvF,EAASD,EAAM,CAAC,EAAIA,EAAM,CAAC,EAAE,OAAS,EACtCwF,EAAYA,EAAU,MAAM,EAAGxF,EAAM,MAAQC,CAAM,EAAI,IAAM,IAAI,OAAOD,EAAM,CAAC,EAAE,OAASC,EAAS,CAAC,EAAI,IAAMuF,EAAU,MAAM,KAAK,UAAU,MAAM,OAAO,UAAU,SAAS,EAI/KA,GAAYqB,GAAAT,GAAAC,EAAA,KAAK,QAAQ,QAAb,YAAAA,EAAoB,eAApB,YAAAD,EAAkC,KAAK,CAAE,MAAO,IAAK,EAAGZ,KAAxD,KAAAqB,EAAsErB,EAElF,IAAI0B,EAAe,GACfzB,EAAW,GACXiB,EAAY,IAChB,KAAOhE,GAAK,CACV,GAAIA,EAAI,OAASgE,EACfA,EAAYhE,EAAI,WACX,CACL,KAAK,kBAAkBA,EAAI,WAAW,CAAC,CAAC,EACxC,KACF,CAEKwE,IACHzB,EAAW,IAEbyB,EAAe,GAEf,IAAIlF,EAGJ,IAAImF,GAAAC,EAAA,KAAK,QAAQ,aAAb,YAAAA,EAAyB,SAAzB,MAAAD,EAAiC,KAAMR,IACrC3E,EAAQ2E,EAAa,KAAK,CAAE,MAAO,IAAK,EAAGjE,EAAKE,CAAM,IACxDF,EAAMA,EAAI,UAAUV,EAAM,IAAI,MAAM,EACpCY,EAAO,KAAKZ,CAAK,EACV,IAEF,IAEP,SAIF,GAAIA,EAAQ,KAAK,UAAU,OAAOU,CAAG,EAAG,CACtCA,EAAMA,EAAI,UAAUV,EAAM,IAAI,MAAM,EACpCY,EAAO,KAAKZ,CAAK,EACjB,QACF,CAGA,GAAIA,EAAQ,KAAK,UAAU,IAAIU,CAAG,EAAG,CACnCA,EAAMA,EAAI,UAAUV,EAAM,IAAI,MAAM,EACpCY,EAAO,KAAKZ,CAAK,EACjB,QACF,CAGA,GAAIA,EAAQ,KAAK,UAAU,KAAKU,CAAG,EAAG,CACpCA,EAAMA,EAAI,UAAUV,EAAM,IAAI,MAAM,EACpCY,EAAO,KAAKZ,CAAK,EACjB,QACF,CAGA,GAAIA,EAAQ,KAAK,UAAU,QAAQU,EAAK,KAAK,OAAO,KAAK,EAAG,CAC1DA,EAAMA,EAAI,UAAUV,EAAM,IAAI,MAAM,EACpC,IAAMkB,EAAYN,EAAO,GAAG,EAAE,EAC1BZ,EAAM,OAAS,SAAUkB,GAAAA,YAAAA,EAAW,QAAS,QAC/CA,EAAU,KAAOlB,EAAM,IACvBkB,EAAU,MAAQlB,EAAM,MAExBY,EAAO,KAAKZ,CAAK,EAEnB,QACF,CAGA,GAAIA,EAAQ,KAAK,UAAU,SAASU,EAAK8C,EAAWC,CAAQ,EAAG,CAC7D/C,EAAMA,EAAI,UAAUV,EAAM,IAAI,MAAM,EACpCY,EAAO,KAAKZ,CAAK,EACjB,QACF,CAGA,GAAIA,EAAQ,KAAK,UAAU,SAASU,CAAG,EAAG,CACxCA,EAAMA,EAAI,UAAUV,EAAM,IAAI,MAAM,EACpCY,EAAO,KAAKZ,CAAK,EACjB,QACF,CAGA,GAAIA,EAAQ,KAAK,UAAU,GAAGU,CAAG,EAAG,CAClCA,EAAMA,EAAI,UAAUV,EAAM,IAAI,MAAM,EACpCY,EAAO,KAAKZ,CAAK,EACjB,QACF,CAGA,GAAIA,EAAQ,KAAK,UAAU,IAAIU,EAAK8C,EAAWC,CAAQ,EAAG,CACxD/C,EAAMA,EAAI,UAAUV,EAAM,IAAI,MAAM,EACpCY,EAAO,KAAKZ,CAAK,EACjB,QACF,CAGA,GAAIA,EAAQ,KAAK,UAAU,SAASU,CAAG,EAAG,CACxCA,EAAMA,EAAI,UAAUV,EAAM,IAAI,MAAM,EACpCY,EAAO,KAAKZ,CAAK,EACjB,QACF,CAGA,GAAI,CAAC,KAAK,MAAM,SAAWA,EAAQ,KAAK,UAAU,IAAIU,CAAG,GAAI,CAC3DA,EAAMA,EAAI,UAAUV,EAAM,IAAI,MAAM,EACpCY,EAAO,KAAKZ,CAAK,EACjB,QACF,CAIA,IAAI4E,EAASlE,EACb,IAAI2E,EAAA,KAAK,QAAQ,aAAb,MAAAA,EAAyB,YAAa,CACxC,IAAIP,EAAa,IACXC,EAAUrE,EAAI,MAAM,CAAC,EACvBsE,EACJ,KAAK,QAAQ,WAAW,YAAY,QAASC,GAAkB,CAC7DD,EAAYC,EAAc,KAAK,CAAE,MAAO,IAAK,EAAGF,CAAO,EACnD,OAAOC,GAAc,UAAYA,GAAa,IAChDF,EAAa,KAAK,IAAIA,EAAYE,CAAS,EAE/C,CAAC,EACGF,EAAa,KAAYA,GAAc,IACzCF,EAASlE,EAAI,UAAU,EAAGoE,EAAa,CAAC,EAE5C,CACA,GAAI9E,EAAQ,KAAK,UAAU,WAAW4E,CAAM,EAAG,CAC7ClE,EAAMA,EAAI,UAAUV,EAAM,IAAI,MAAM,EAChCA,EAAM,IAAI,MAAM,EAAE,IAAM,MAC1ByD,EAAWzD,EAAM,IAAI,MAAM,EAAE,GAE/BkF,EAAe,GACf,IAAMhE,EAAYN,EAAO,GAAG,EAAE,GAC1BM,GAAAA,YAAAA,EAAW,QAAS,QACtBA,EAAU,KAAOlB,EAAM,IACvBkB,EAAU,MAAQlB,EAAM,MAExBY,EAAO,KAAKZ,CAAK,EAEnB,QACF,CAEA,GAAIU,EAAK,CACP,KAAK,kBAAkBA,EAAI,WAAW,CAAC,CAAC,EACxC,KACF,CACF,CAEA,OAAOE,CACT,CAEQ,kBAAkB0E,EAAc,CACtC,IAAMC,EAAS,0BAA4BD,EAC3C,GAAI,KAAK,QAAQ,OACf,QAAQ,MAAMC,CAAM,MAEpB,OAAM,IAAI,MAAMA,CAAM,CAE1B,CACF,ECheaC,GAAN,KAAgE,CAGrE,YAAYhF,EAAuD,CAFnEC,EAAA,gBACAA,EAAA,eAEE,KAAK,QAAUD,GAAWxI,EAC5B,CAEA,MAAMgI,EAAqC,CACzC,MAAO,EACT,CAEA,KAAK,CAAE,KAAAD,EAAM,KAAA0F,EAAM,QAAAtH,CAAQ,EAAgC,OACzD,IAAMuH,GAAcD,GAAAA,GAAQ,IAAI,MAAMxM,GAAM,aAAa,IAArCwM,YAAAA,EAAyC,GAEvDE,EAAO5F,EAAK,QAAQ9G,GAAM,cAAe,EAAE,EAAI,KAErD,OAAKyM,EAME,8BACHlI,GAAmBkI,CAAU,EAC7B,MACCvH,EAAUwH,EAAOnI,GAAmBmI,EAAM,EAAI,GAC/C,kBATK,eACFxH,EAAUwH,EAAOnI,GAAmBmI,EAAM,EAAI,GAC/C,iBAQR,CAEA,WAAW,CAAE,OAAA/E,CAAO,EAAsC,CAExD,MAAO,iBADM,YAAK,OAAO,MAAMA,CAAM,EACT,kBAC9B,CAEA,KAAK,CAAE,KAAAb,CAAK,EAA6C,CACvD,OAAOA,CACT,CAEA,IAAIC,EAAmC,CACrC,MAAO,EACT,CAEA,QAAQ,CAAE,OAAAY,EAAQ,MAAAgF,CAAM,EAAmC,CACzD,MAAO,KAAKA,SAAK,KAAI,YAAK,OAAO,YAAYhF,CAAM,EAAC,OAAMgF,SAAK,MACjE,CAEA,GAAG5F,EAAkC,CACnC,MAAO,QACT,CAEA,KAAKA,EAAoC,CACvC,IAAM6F,EAAU7F,EAAM,QAChB8F,EAAQ9F,EAAM,MAEhB+F,EAAO,GACX,QAASC,EAAI,EAAGA,EAAIhG,EAAM,MAAM,OAAQgG,IAAK,CAC3C,IAAM1D,EAAOtC,EAAM,MAAMgG,CAAC,EAC1BD,GAAQ,KAAK,SAASzD,CAAI,CAC5B,CAEA,IAAM2D,EAAOJ,EAAU,KAAO,KACxBK,EAAaL,GAAWC,IAAU,EAAM,WAAaA,EAAQ,IAAO,GAC1E,MAAO,IAAMG,EAAOC,EAAY,MAAQH,EAAO,KAAOE,EAAO,KAC/D,CAEA,SAAS3D,EAAuC,CAC9C,MAAO,OAAO,YAAK,OAAO,MAAMA,EAAK,MAAM,EAAC,UAC9C,CAEA,SAAS,CAAE,QAAA6D,CAAQ,EAAoC,CACrD,MAAO,WACFA,EAAU,cAAgB,IAC3B,+BACN,CAEA,UAAU,CAAE,OAAAvF,CAAO,EAAqC,CACtD,MAAO,MAAM,YAAK,OAAO,YAAYA,CAAM,EAAC,SAC9C,CAEA,MAAMZ,EAAqC,CACzC,IAAIoG,EAAS,GAGTnD,EAAO,GACX,QAAS+C,EAAI,EAAGA,EAAIhG,EAAM,OAAO,OAAQgG,IACvC/C,GAAQ,KAAK,UAAUjD,EAAM,OAAOgG,CAAC,CAAC,EAExCI,GAAU,KAAK,SAAS,CAAE,KAAMnD,CAAqB,CAAC,EAEtD,IAAI8C,EAAO,GACX,QAASC,EAAI,EAAGA,EAAIhG,EAAM,KAAK,OAAQgG,IAAK,CAC1C,IAAMjI,EAAMiC,EAAM,KAAKgG,CAAC,EAExB/C,EAAO,GACP,QAASoD,EAAI,EAAGA,EAAItI,EAAI,OAAQsI,IAC9BpD,GAAQ,KAAK,UAAUlF,EAAIsI,CAAC,CAAC,EAG/BN,GAAQ,KAAK,SAAS,CAAE,KAAM9C,CAAqB,CAAC,CACtD,CACA,OAAI8C,IAAMA,EAAO,UAAUA,OAAAA,EAAI,aAExB,qBAEHK,EACA,aACAL,EACA,YACN,CAEA,SAAS,CAAE,KAAAhG,CAAK,EAAkD,CAChE,MAAO,SAASA,SAAI,UACtB,CAEA,UAAUC,EAAyC,CACjD,IAAMsG,EAAU,KAAK,OAAO,YAAYtG,EAAM,MAAM,EAC9CiG,EAAOjG,EAAM,OAAS,KAAO,KAInC,OAHYA,EAAM,MACd,IAAIiG,SAAI,YAAWjG,SAAM,MAAK,MAC9B,IAAIiG,SAAI,MACCK,EAAU,KAAKL,SAAI,MAClC,CAKA,OAAO,CAAE,OAAArF,CAAO,EAAkC,CAChD,MAAO,WAAW,YAAK,OAAO,YAAYA,CAAM,EAAC,YACnD,CAEA,GAAG,CAAE,OAAAA,CAAO,EAA8B,CACxC,MAAO,OAAO,YAAK,OAAO,YAAYA,CAAM,EAAC,QAC/C,CAEA,SAAS,CAAE,KAAAb,CAAK,EAAoC,CAClD,MAAO,SAASvC,OAAAA,GAAmBuC,EAAM,EAAI,EAAC,UAChD,CAEA,GAAGC,EAAkC,CACnC,MAAO,MACT,CAEA,IAAI,CAAE,OAAAY,CAAO,EAA+B,CAC1C,MAAO,QAAQ,YAAK,OAAO,YAAYA,CAAM,EAAC,SAChD,CAEA,KAAK,CAAE,KAAAjD,EAAM,MAAAmC,EAAO,OAAAc,CAAO,EAAgC,CACzD,IAAMb,EAAO,KAAK,OAAO,YAAYa,CAAM,EACrC2F,EAAY7I,GAASC,CAAI,EAC/B,GAAI4I,IAAc,KAChB,OAAOxG,EAETpC,EAAO4I,EACP,IAAIC,EAAM,YAAc7I,EAAO,IAC/B,OAAImC,IACF0G,GAAO,WAAchJ,GAAmBsC,CAAK,EAAK,KAEpD0G,GAAO,IAAMzG,EAAO,OACbyG,CACT,CAEA,MAAM,CAAE,KAAA7I,EAAM,MAAAmC,EAAO,KAAAC,EAAM,OAAAa,CAAO,EAAiC,CAC7DA,IACFb,EAAO,KAAK,OAAO,YAAYa,EAAQ,KAAK,OAAO,YAAY,GAEjE,IAAM2F,EAAY7I,GAASC,CAAI,EAC/B,GAAI4I,IAAc,KAChB,OAAO/I,GAAmBuC,CAAI,EAEhCpC,EAAO4I,EAEP,IAAIC,EAAM,aAAa7I,SAAI,WAAUH,OAAAA,GAAmBuC,CAAI,EAAC,KAC7D,OAAID,IACF0G,GAAO,WAAWhJ,OAAAA,GAAmBsC,CAAK,EAAC,MAE7C0G,GAAO,IACAA,CACT,CAEA,KAAKxG,EAAoD,CACvD,MAAO,WAAYA,GAASA,EAAM,OAC9B,KAAK,OAAO,YAAYA,EAAM,MAAM,EACnC,YAAaA,GAASA,EAAM,QAAUA,EAAM,KAAyBxC,GAAmBwC,EAAM,IAAI,CACzG,CACF,EC/LayG,GAAN,KAA6C,CAElD,OAAO,CAAE,KAAA1G,CAAK,EAAkC,CAC9C,OAAOA,CACT,CAEA,GAAG,CAAE,KAAAA,CAAK,EAA8B,CACtC,OAAOA,CACT,CAEA,SAAS,CAAE,KAAAA,CAAK,EAAoC,CAClD,OAAOA,CACT,CAEA,IAAI,CAAE,KAAAA,CAAK,EAA+B,CACxC,OAAOA,CACT,CAEA,KAAK,CAAE,KAAAA,CAAK,EAA6C,CACvD,OAAOA,CACT,CAEA,KAAK,CAAE,KAAAA,CAAK,EAA6D,CACvE,OAAOA,CACT,CAEA,KAAK,CAAE,KAAAA,CAAK,EAAgC,CAC1C,MAAO,GAAKA,CACd,CAEA,MAAM,CAAE,KAAAA,CAAK,EAAiC,CAC5C,MAAO,GAAKA,CACd,CAEA,IAAqB,CACnB,MAAO,EACT,CAEA,SAAS,CAAE,IAAAJ,CAAI,EAAoC,CACjD,OAAOA,CACT,CACF,ECtCa+G,GAAN,MAAMC,EAAwD,CAInE,YAAYnG,EAAuD,CAHnEC,EAAA,gBACAA,EAAA,iBACAA,EAAA,qBAEE,KAAK,QAAUD,GAAWxI,GAC1B,KAAK,QAAQ,SAAW,KAAK,QAAQ,UAAY,IAAIwN,GACrD,KAAK,SAAW,KAAK,QAAQ,SAC7B,KAAK,SAAS,QAAU,KAAK,QAC7B,KAAK,SAAS,OAAS,KACvB,KAAK,aAAe,IAAIiB,EAC1B,CAKA,OAAO,MAAsD7F,EAAiBJ,EAAuD,CAEnI,OADe,IAAImG,GAAsCnG,CAAO,EAClD,MAAMI,CAAM,CAC5B,CAKA,OAAO,YAA4DA,EAAiBJ,EAAuD,CAEzI,OADe,IAAImG,GAAsCnG,CAAO,EAClD,YAAYI,CAAM,CAClC,CAKA,MAAMA,EAA+B,SACnC,KAAK,SAAS,OAAS,KACvB,IAAI4F,EAAM,GAEV,QAASlI,EAAI,EAAGA,EAAIsC,EAAO,OAAQtC,IAAK,CACtC,IAAMsI,EAAWhG,EAAOtC,CAAC,EAGzB,IAAI8F,GAAAC,EAAA,KAAK,QAAQ,aAAb,YAAAA,EAAyB,YAAzB,MAAAD,EAAqCwC,EAAS,MAAO,CACvD,IAAMC,EAAeD,EACfE,EAAM,KAAK,QAAQ,WAAW,UAAUD,EAAa,IAAI,EAAE,KAAK,CAAE,OAAQ,IAAK,EAAGA,CAAY,EACpG,GAAIC,IAAQ,IAAS,CAAC,CAAC,QAAS,KAAM,UAAW,OAAQ,QAAS,aAAc,OAAQ,OAAQ,MAAO,YAAa,MAAM,EAAE,SAASD,EAAa,IAAI,EAAG,CACvJL,GAAOM,GAAO,GACd,QACF,CACF,CAEA,IAAM9G,EAAQ4G,EAEd,OAAQ5G,EAAM,KAAM,CAClB,IAAK,QAAS,CACZwG,GAAO,KAAK,SAAS,MAAMxG,CAAK,EAChC,KACF,CACA,IAAK,KAAM,CACTwG,GAAO,KAAK,SAAS,GAAGxG,CAAK,EAC7B,KACF,CACA,IAAK,UAAW,CACdwG,GAAO,KAAK,SAAS,QAAQxG,CAAK,EAClC,KACF,CACA,IAAK,OAAQ,CACXwG,GAAO,KAAK,SAAS,KAAKxG,CAAK,EAC/B,KACF,CACA,IAAK,QAAS,CACZwG,GAAO,KAAK,SAAS,MAAMxG,CAAK,EAChC,KACF,CACA,IAAK,aAAc,CACjBwG,GAAO,KAAK,SAAS,WAAWxG,CAAK,EACrC,KACF,CACA,IAAK,OAAQ,CACXwG,GAAO,KAAK,SAAS,KAAKxG,CAAK,EAC/B,KACF,CACA,IAAK,WAAY,CACfwG,GAAO,KAAK,SAAS,SAASxG,CAAK,EACnC,KACF,CACA,IAAK,OAAQ,CACXwG,GAAO,KAAK,SAAS,KAAKxG,CAAK,EAC/B,KACF,CACA,IAAK,MAAO,CACVwG,GAAO,KAAK,SAAS,IAAIxG,CAAK,EAC9B,KACF,CACA,IAAK,YAAa,CAChBwG,GAAO,KAAK,SAAS,UAAUxG,CAAK,EACpC,KACF,CACA,IAAK,OAAQ,CACXwG,GAAO,KAAK,SAAS,KAAKxG,CAAK,EAC/B,KACF,CAEA,QAAS,CACP,IAAMuF,EAAS,eAAiBvF,EAAM,KAAO,wBAC7C,GAAI,KAAK,QAAQ,OACf,OAAA,QAAQ,MAAMuF,CAAM,EACb,GAEP,MAAM,IAAI,MAAMA,CAAM,CAE1B,CACF,CACF,CAEA,OAAOiB,CACT,CAKA,YAAY5F,EAAiBmG,EAAoF,KAAK,SAAwB,SAC5I,KAAK,SAAS,OAAS,KACvB,IAAIP,EAAM,GAEV,QAASlI,EAAI,EAAGA,EAAIsC,EAAO,OAAQtC,IAAK,CACtC,IAAMsI,EAAWhG,EAAOtC,CAAC,EAGzB,IAAI8F,GAAAC,EAAA,KAAK,QAAQ,aAAb,YAAAA,EAAyB,YAAzB,MAAAD,EAAqCwC,EAAS,MAAO,CACvD,IAAME,EAAM,KAAK,QAAQ,WAAW,UAAUF,EAAS,IAAI,EAAE,KAAK,CAAE,OAAQ,IAAK,EAAGA,CAAQ,EAC5F,GAAIE,IAAQ,IAAS,CAAC,CAAC,SAAU,OAAQ,OAAQ,QAAS,SAAU,KAAM,WAAY,KAAM,MAAO,MAAM,EAAE,SAASF,EAAS,IAAI,EAAG,CAClIJ,GAAOM,GAAO,GACd,QACF,CACF,CAEA,IAAM9G,EAAQ4G,EAEd,OAAQ5G,EAAM,KAAM,CAClB,IAAK,SAAU,CACbwG,GAAOO,EAAS,KAAK/G,CAAK,EAC1B,KACF,CACA,IAAK,OAAQ,CACXwG,GAAOO,EAAS,KAAK/G,CAAK,EAC1B,KACF,CACA,IAAK,OAAQ,CACXwG,GAAOO,EAAS,KAAK/G,CAAK,EAC1B,KACF,CACA,IAAK,QAAS,CACZwG,GAAOO,EAAS,MAAM/G,CAAK,EAC3B,KACF,CACA,IAAK,WAAY,CACfwG,GAAOO,EAAS,SAAS/G,CAAK,EAC9B,KACF,CACA,IAAK,SAAU,CACbwG,GAAOO,EAAS,OAAO/G,CAAK,EAC5B,KACF,CACA,IAAK,KAAM,CACTwG,GAAOO,EAAS,GAAG/G,CAAK,EACxB,KACF,CACA,IAAK,WAAY,CACfwG,GAAOO,EAAS,SAAS/G,CAAK,EAC9B,KACF,CACA,IAAK,KAAM,CACTwG,GAAOO,EAAS,GAAG/G,CAAK,EACxB,KACF,CACA,IAAK,MAAO,CACVwG,GAAOO,EAAS,IAAI/G,CAAK,EACzB,KACF,CACA,IAAK,OAAQ,CACXwG,GAAOO,EAAS,KAAK/G,CAAK,EAC1B,KACF,CACA,QAAS,CACP,IAAMuF,EAAS,eAAiBvF,EAAM,KAAO,wBAC7C,GAAI,KAAK,QAAQ,OACf,OAAA,QAAQ,MAAMuF,CAAM,EACb,GAEP,MAAM,IAAI,MAAMA,CAAM,CAE1B,CACF,CACF,CACA,OAAOiB,CACT,CACF,KCtMaQ,IAAN3C,GAAA,KAA6D,CAIlE,YAAY7D,EAAuD,CAHnEC,EAAA,gBACAA,EAAA,cAGE,KAAK,QAAUD,GAAWxI,EAC5B,CAkBA,WAAWiP,EAAkB,CAC3B,OAAOA,CACT,CAKA,YAAY3M,EAAoB,CAC9B,OAAOA,CACT,CAKA,iBAAiBsG,EAA8B,CAC7C,OAAOA,CACT,CAKA,aAAaF,EAAa,CACxB,OAAOA,CACT,CAKA,aAAavD,EAAQ,KAAK,MAAO,CAC/B,OAAOA,EAAQmH,GAAO,IAAMA,GAAO,SACrC,CAKA,cAAcnH,EAAQ,KAAK,MAAO,CAChC,OAAOA,EAAQuJ,GAAQ,MAAsCA,GAAQ,WACvE,CACF,EAtDEjG,EARK4D,GAQE,mBAAmB,IAAI,IAAI,CAChC,aACA,cACA,mBACA,cACF,CAAC,GAED5D,EAfK4D,GAeE,+BAA+B,IAAI,IAAI,CAC5C,aACA,cACA,kBACF,CAAC,GAnBIA,ICUM6C,GAAN,KAA6D,CAclE,eAAeC,EAAuD,CAbtE1G,EAAA,gBAAW1I,GAA2C,GACtD0I,EAAA,eAAU,KAAK,YAEfA,EAAA,aAAQ,KAAK,cAAc,EAAI,GAC/BA,EAAA,mBAAc,KAAK,cAAc,EAAK,GAEtCA,EAAA,cAASiG,IACTjG,EAAA,gBAAW+E,IACX/E,EAAA,oBAAegG,IACfhG,EAAA,aAAQ6D,IACR7D,EAAA,iBAAYF,IACZE,EAAA,aAAQuG,IAGN,KAAK,IAAI,GAAGG,CAAI,CAClB,CAKA,WAAWvG,EAA8BwG,EAA2D,SAClG,IAAIC,EAAyB,CAAC,EAC9B,QAAWrH,KAASY,EAElB,OADAyG,EAASA,EAAO,OAAOD,EAAS,KAAK,KAAMpH,CAAK,CAAC,EACzCA,EAAM,KAAM,CAClB,IAAK,QAAS,CACZ,IAAMsH,EAAatH,EACnB,QAAWiD,KAAQqE,EAAW,OAC5BD,EAASA,EAAO,OAAO,KAAK,WAAWpE,EAAK,OAAQmE,CAAQ,CAAC,EAE/D,QAAWrJ,KAAOuJ,EAAW,KAC3B,QAAWrE,KAAQlF,EACjBsJ,EAASA,EAAO,OAAO,KAAK,WAAWpE,EAAK,OAAQmE,CAAQ,CAAC,EAGjE,KACF,CACA,IAAK,OAAQ,CACX,IAAMG,EAAYvH,EAClBqH,EAASA,EAAO,OAAO,KAAK,WAAWE,EAAU,MAAOH,CAAQ,CAAC,EACjE,KACF,CACA,QAAS,CACP,IAAMP,EAAe7G,GACjBoE,GAAAC,EAAA,KAAK,SAAS,aAAd,YAAAA,EAA0B,cAA1B,MAAAD,EAAwCyC,EAAa,MACvD,KAAK,SAAS,WAAW,YAAYA,EAAa,IAAI,EAAE,QAASW,GAAgB,CAC/E,IAAM5G,EAASiG,EAAaW,CAAW,EAAE,KAAK,GAAQ,EACtDH,EAASA,EAAO,OAAO,KAAK,WAAWzG,EAAQwG,CAAQ,CAAC,CAC1D,CAAC,EACQP,EAAa,SACtBQ,EAASA,EAAO,OAAO,KAAK,WAAWR,EAAa,OAAQO,CAAQ,CAAC,EAEzE,CACF,CAEF,OAAOC,CACT,CAEA,OAAOF,EAAuD,CAC5D,IAAMM,EAAwE,KAAK,SAAS,YAAc,CAAE,UAAW,CAAC,EAAG,YAAa,CAAC,CAAE,EAE3I,OAAAN,EAAK,QAASO,GAAS,CAErB,IAAMC,EAAO9M,EAAA,GAAK6M,GA4DlB,GAzDAC,EAAK,MAAQ,KAAK,SAAS,OAASA,EAAK,OAAS,GAG9CD,EAAK,aACPA,EAAK,WAAW,QAASE,GAAQ,CAC/B,GAAI,CAACA,EAAI,KACP,MAAM,IAAI,MAAM,yBAAyB,EAE3C,GAAI,aAAcA,EAAK,CACrB,IAAMC,EAAeJ,EAAW,UAAUG,EAAI,IAAI,EAC9CC,EAEFJ,EAAW,UAAUG,EAAI,IAAI,EAAI,YAAYT,EAAM,CACjD,IAAIL,EAAMc,EAAI,SAAS,MAAM,KAAMT,CAAI,EACvC,OAAIL,IAAQ,KACVA,EAAMe,EAAa,MAAM,KAAMV,CAAI,GAE9BL,CACT,EAEAW,EAAW,UAAUG,EAAI,IAAI,EAAIA,EAAI,QAEzC,CACA,GAAI,cAAeA,EAAK,CACtB,GAAI,CAACA,EAAI,OAAUA,EAAI,QAAU,SAAWA,EAAI,QAAU,SACxD,MAAM,IAAI,MAAM,6CAA6C,EAE/D,IAAME,EAAWL,EAAWG,EAAI,KAAK,EACjCE,EACFA,EAAS,QAAQF,EAAI,SAAS,EAE9BH,EAAWG,EAAI,KAAK,EAAI,CAACA,EAAI,SAAS,EAEpCA,EAAI,QACFA,EAAI,QAAU,QACZH,EAAW,WACbA,EAAW,WAAW,KAAKG,EAAI,KAAK,EAEpCH,EAAW,WAAa,CAACG,EAAI,KAAK,EAE3BA,EAAI,QAAU,WACnBH,EAAW,YACbA,EAAW,YAAY,KAAKG,EAAI,KAAK,EAErCH,EAAW,YAAc,CAACG,EAAI,KAAK,GAI3C,CACI,gBAAiBA,GAAOA,EAAI,cAC9BH,EAAW,YAAYG,EAAI,IAAI,EAAIA,EAAI,YAE3C,CAAC,EACDD,EAAK,WAAaF,GAIhBC,EAAK,SAAU,CACjB,IAAMX,EAAW,KAAK,SAAS,UAAY,IAAIvB,GAAwC,KAAK,QAAQ,EACpG,QAAWuC,KAAQL,EAAK,SAAU,CAChC,GAAI,EAAEK,KAAQhB,GACZ,MAAM,IAAI,MAAM,aAAagB,SAAI,mBAAkB,EAErD,GAAI,CAAC,UAAW,QAAQ,EAAE,SAASA,CAAI,EAErC,SAEF,IAAMC,EAAeD,EACfE,EAAeP,EAAK,SAASM,CAAY,EACzCH,EAAed,EAASiB,CAAY,EAE1CjB,EAASiB,CAAY,EAAI,IAAIb,IAAoB,CAC/C,IAAIL,EAAMmB,EAAa,MAAMlB,EAAUI,CAAI,EAC3C,OAAIL,IAAQ,KACVA,EAAMe,EAAa,MAAMd,EAAUI,CAAI,GAEjCL,GAAO,EACjB,CACF,CACAa,EAAK,SAAWZ,CAClB,CACA,GAAIW,EAAK,UAAW,CAClB,IAAMQ,EAAY,KAAK,SAAS,WAAa,IAAI3H,GAAyC,KAAK,QAAQ,EACvG,QAAWwH,KAAQL,EAAK,UAAW,CACjC,GAAI,EAAEK,KAAQG,GACZ,MAAM,IAAI,MAAM,cAAcH,SAAI,mBAAkB,EAEtD,GAAI,CAAC,UAAW,QAAS,OAAO,EAAE,SAASA,CAAI,EAE7C,SAEF,IAAMI,EAAgBJ,EAChBK,EAAgBV,EAAK,UAAUS,CAAa,EAC5CE,EAAgBH,EAAUC,CAAa,EAG7CD,EAAUC,CAAa,EAAI,IAAIhB,IAAoB,CACjD,IAAIL,EAAMsB,EAAc,MAAMF,EAAWf,CAAI,EAC7C,OAAIL,IAAQ,KACVA,EAAMuB,EAAc,MAAMH,EAAWf,CAAI,GAEpCL,CACT,CACF,CACAa,EAAK,UAAYO,CACnB,CAGA,GAAIR,EAAK,MAAO,CACd,IAAMY,EAAQ,KAAK,SAAS,OAAS,IAAItB,GACzC,QAAWe,KAAQL,EAAK,MAAO,CAC7B,GAAI,EAAEK,KAAQO,GACZ,MAAM,IAAI,MAAM,SAASP,SAAI,mBAAkB,EAEjD,GAAI,CAAC,UAAW,OAAO,EAAE,SAASA,CAAI,EAEpC,SAEF,IAAMQ,EAAYR,EACZS,EAAYd,EAAK,MAAMa,CAAS,EAChCE,EAAWH,EAAMC,CAAS,EAC5BvB,GAAO,iBAAiB,IAAIe,CAAI,EAElCO,EAAMC,CAAS,EAAKG,GAAiB,CACnC,GAAI,KAAK,SAAS,OAAS1B,GAAO,6BAA6B,IAAIe,CAAI,EACrE,OAAQ,SAAW,CACjB,IAAMjB,EAAM,MAAM0B,EAAU,KAAKF,EAAOI,CAAG,EAC3C,OAAOD,EAAS,KAAKH,EAAOxB,CAAG,CACjC,GAAG,EAGL,IAAMA,EAAM0B,EAAU,KAAKF,EAAOI,CAAG,EACrC,OAAOD,EAAS,KAAKH,EAAOxB,CAAG,CACjC,EAGAwB,EAAMC,CAAS,EAAI,IAAIpB,IAAoB,CACzC,GAAI,KAAK,SAAS,MAChB,OAAQ,SAAW,CACjB,IAAIL,EAAM,MAAM0B,EAAU,MAAMF,EAAOnB,CAAI,EAC3C,OAAIL,IAAQ,KACVA,EAAM,MAAM2B,EAAS,MAAMH,EAAOnB,CAAI,GAEjCL,CACT,GAAG,EAGL,IAAIA,EAAM0B,EAAU,MAAMF,EAAOnB,CAAI,EACrC,OAAIL,IAAQ,KACVA,EAAM2B,EAAS,MAAMH,EAAOnB,CAAI,GAE3BL,CACT,CAEJ,CACAa,EAAK,MAAQW,CACf,CAGA,GAAIZ,EAAK,WAAY,CACnB,IAAMiB,EAAa,KAAK,SAAS,WAC3BC,EAAiBlB,EAAK,WAC5BC,EAAK,WAAa,SAAS3H,EAAO,CAChC,IAAIqH,EAAyB,CAAC,EAC9B,OAAAA,EAAO,KAAKuB,EAAe,KAAK,KAAM5I,CAAK,CAAC,EACxC2I,IACFtB,EAASA,EAAO,OAAOsB,EAAW,KAAK,KAAM3I,CAAK,CAAC,GAE9CqH,CACT,CACF,CAEA,KAAK,SAAWxM,IAAA,GAAK,KAAK,UAAa8M,EACzC,CAAC,EAEM,IACT,CAEA,WAAWhP,EAAkD,CAC3D,OAAA,KAAK,SAAWkC,IAAA,GAAK,KAAK,UAAalC,GAChC,IACT,CAEA,MAAM+H,EAAaF,EAAuD,CACxE,OAAO8D,GAAO,IAAI5D,EAAKF,UAAW,KAAK,QAAQ,CACjD,CAEA,OAAOI,EAAiBJ,EAAuD,CAC7E,OAAOkG,GAAQ,MAAoC9F,EAAQJ,UAAW,KAAK,QAAQ,CACrF,CAEQ,cAAcqI,EAAoB,CAuExC,MA/D+B,CAACnI,EAAaF,IAAsE,CACjH,IAAMsI,EAAUjO,EAAA,GAAK2F,GACf7H,EAAMkC,IAAA,GAAK,KAAK,UAAaiO,GAE7BC,EAAa,KAAK,QAAQ,CAAC,CAACpQ,EAAI,OAAQ,CAAC,CAACA,EAAI,KAAK,EAGzD,GAAI,KAAK,SAAS,QAAU,IAAQmQ,EAAQ,QAAU,GACpD,OAAOC,EAAW,IAAI,MAAM,oIAAoI,CAAC,EAInK,GAAI,OAAOrI,EAAQ,KAAeA,IAAQ,KACxC,OAAOqI,EAAW,IAAI,MAAM,gDAAgD,CAAC,EAE/E,GAAI,OAAOrI,GAAQ,SACjB,OAAOqI,EAAW,IAAI,MAAM,wCACxB,OAAO,UAAU,SAAS,KAAKrI,CAAG,EAAI,mBAAmB,CAAC,EAQhE,GALI/H,EAAI,QACNA,EAAI,MAAM,QAAUA,EACpBA,EAAI,MAAM,MAAQkQ,GAGhBlQ,EAAI,MACN,OAAQ,SAAW,CACjB,IAAMqQ,EAAerQ,EAAI,MAAQ,MAAMA,EAAI,MAAM,WAAW+H,CAAG,EAAIA,EAE7DE,EAAS,MADDjI,EAAI,MAAQ,MAAMA,EAAI,MAAM,aAAakQ,CAAS,EAAKA,EAAYvE,GAAO,IAAMA,GAAO,WAC1E0E,EAAcrQ,CAAG,EACtCsQ,EAAkBtQ,EAAI,MAAQ,MAAMA,EAAI,MAAM,iBAAiBiI,CAAM,EAAIA,EAC3EjI,EAAI,YACN,MAAM,QAAQ,IAAI,KAAK,WAAWsQ,EAAiBtQ,EAAI,UAAU,CAAC,EAGpE,IAAM2B,EAAO,MADE3B,EAAI,MAAQ,MAAMA,EAAI,MAAM,cAAckQ,CAAS,EAAKA,EAAYnC,GAAQ,MAAQA,GAAQ,aACjFuC,EAAiBtQ,CAAG,EAC9C,OAAOA,EAAI,MAAQ,MAAMA,EAAI,MAAM,YAAY2B,CAAI,EAAIA,CACzD,GAAG,EAAE,MAAMyO,CAAU,EAGvB,GAAI,CACEpQ,EAAI,QACN+H,EAAM/H,EAAI,MAAM,WAAW+H,CAAG,GAGhC,IAAIE,GADUjI,EAAI,MAAQA,EAAI,MAAM,aAAakQ,CAAS,EAAKA,EAAYvE,GAAO,IAAMA,GAAO,WAC5E5D,EAAK/H,CAAG,EACvBA,EAAI,QACNiI,EAASjI,EAAI,MAAM,iBAAiBiI,CAAM,GAExCjI,EAAI,YACN,KAAK,WAAWiI,EAAQjI,EAAI,UAAU,EAGxC,IAAI2B,GADW3B,EAAI,MAAQA,EAAI,MAAM,cAAckQ,CAAS,EAAKA,EAAYnC,GAAQ,MAAQA,GAAQ,aACnF9F,EAAQjI,CAAG,EAC7B,OAAIA,EAAI,QACN2B,EAAO3B,EAAI,MAAM,YAAY2B,CAAI,GAE5BA,CACT,OAAQlB,EAAG,CACT,OAAO2P,EAAW3P,CAAU,CAC9B,CACF,CAGF,CAEQ,QAAQ8P,EAAiBC,EAAgB,CAC/C,OAAQ/P,GAAuC,CAG7C,GAFAA,EAAE,SAAW,8DAET8P,EAAQ,CACV,IAAME,EAAM,iCACR5L,GAAmBpE,EAAE,QAAU,GAAI,EAAI,EACvC,SACJ,OAAI+P,EACK,QAAQ,QAAQC,CAAG,EAErBA,CACT,CAEA,GAAID,EACF,OAAO,QAAQ,OAAO/P,CAAC,EAEzB,MAAMA,CACR,CACF,CACF,EChWMiQ,GAAiB,IAAInC,GAqBpB,SAASoC,GAAO5I,EAAa/H,EAAsD,CACxF,OAAO0Q,GAAe,MAAM3I,EAAK/H,CAAG,CACtC,CAOA2Q,GAAO,QACLA,GAAO,WAAa,SAAS9I,EAAwB,CACnD,OAAA6I,GAAe,WAAW7I,CAAO,EACjC8I,GAAO,SAAWD,GAAe,SACjCpR,GAAeqR,GAAO,QAAQ,EACvBA,EACT,EAKFA,GAAO,YAAcvR,GAErBuR,GAAO,SAAWtR,GAMlBsR,GAAO,IAAM,YAAYnC,EAAyB,CAChD,OAAAkC,GAAe,IAAI,GAAGlC,CAAI,EAC1BmC,GAAO,SAAWD,GAAe,SACjCpR,GAAeqR,GAAO,QAAQ,EACvBA,EACT,EAMAA,GAAO,WAAa,SAAS1I,EAA8BwG,EAA2D,CACpH,OAAOiC,GAAe,WAAWzI,EAAQwG,CAAQ,CACnD,EASAkC,GAAO,YAAcD,GAAe,YAKpCC,GAAO,OAAS5C,GAChB4C,GAAO,OAAS5C,GAAQ,MACxB4C,GAAO,SAAW9D,GAClB8D,GAAO,aAAe7C,GACtB6C,GAAO,MAAQhF,GACfgF,GAAO,MAAQhF,GAAO,IACtBgF,GAAO,UAAY/I,GACnB+I,GAAO,MAAQtC,GACfsC,GAAO,MAAQA,GAER,IAAM9I,GAAU8I,GAAO,QACjBC,GAAaD,GAAO,WACpBE,GAAMF,GAAO,IACbX,GAAaW,GAAO,WACpBG,GAAcH,GAAO,YAJ3B,IAMMI,GAASC,GAAQ,MACjBC,GAAQC,GAAO,IC3G5B,IAAAC,GAAkB,QAeTC,GAAA,QAbTC,GAAO,WAAW,CAChB,SAAU,GACV,IAAK,EACP,CAAC,EAGM,SAASC,GAAS,CAAE,KAAAC,EAAM,UAAAC,CAAU,EAAyC,CAClF,IAAMC,EAAO,GAAAC,QAAM,QAAQ,IAAM,CAC/B,GAAI,CAACH,EAAM,MAAO,GAClB,IAAMI,EAASN,GAAO,MAAME,EAAM,CAAE,MAAO,EAAM,CAAC,EAClD,OAAOK,GAAU,SAAS,OAAOD,GAAW,SAAWA,EAAS,EAAE,CACpE,EAAG,CAACJ,CAAI,CAAC,EAET,SAAO,QAAC,OAAI,UAAWC,EAAW,wBAAyB,CAAE,OAAQC,CAAK,EAAG,CAC/E,CjBuMU,IAAAI,EAAA,QA5MH,SAASC,GAAM,CACpB,QAAAC,EACA,eAAAC,EACA,UAAAC,CACF,EAIG,CArBH,IAAAC,GAsBE,GAAM,CAAE,EAAAC,CAAE,EAAIC,GAAe,EACvBC,EAAIC,GAAI,EACR,CAACC,EAAIC,CAAK,EAAI,GAAAC,QAAM,SAAmBV,CAAO,EAC9C,CAACW,EAAQC,CAAS,EAAI,GAAAF,QAAM,SAAmBV,CAAO,EACtD,CAACa,EAAWC,CAAY,EAAI,GAAAJ,QAAM,SAAS,EAAK,EAChD,CAACK,EAAMC,CAAO,EAAI,GAAAN,QAAM,SAAS,EAAK,EACtC,CAACO,EAASC,CAAU,EAAI,GAAAR,QAAM,SAAS,EAAK,EAC5C,CAACS,EAAWC,CAAY,EAAI,GAAAV,QAAM,SAAS,EAAK,EAChD,CAACW,EAAaC,CAAc,EAAI,GAAAZ,QAAM,SAAwB,IAAI,EAClE,CAACa,EAAgBC,CAAiB,EAAI,GAAAd,QAAM,SAAS,EAAK,EAC1De,EAAa,GAAAf,QAAM,OAAsB,IAAI,EAC7CgB,EAAY,GAAAhB,QAAM,OAAsB,IAAI,EAElD,GAAAA,QAAM,UAAU,IACP,IAAM,CACPe,EAAW,UAAY,MAAM,OAAO,aAAaA,EAAW,OAAO,EACnEC,EAAU,UAAY,MAAM,OAAO,aAAaA,EAAU,OAAO,CACvE,EACC,CAAC,CAAC,EAEL,SAASC,GAAmB,CACtBF,EAAW,UAAY,OACzB,OAAO,aAAaA,EAAW,OAAO,EACtCA,EAAW,QAAU,MAEnBC,EAAU,UAAY,OACxB,OAAO,aAAaA,EAAU,OAAO,EACrCA,EAAU,QAAU,KAExB,CAEA,SAASE,EAAgBC,EAAa,CACpCF,EAAiB,EACjBH,EAAkB,EAAK,EACvBF,EAAeO,CAAG,EAClBJ,EAAW,QAAU,OAAO,WAAW,IAAM,CAC3CA,EAAW,QAAU,KACrBD,EAAkB,EAAI,EACtBE,EAAU,QAAU,OAAO,WAAW,IAAM,CAC1CJ,EAAe,IAAI,EACnBE,EAAkB,EAAK,EACvBE,EAAU,QAAU,IACtB,EAAG,GAAI,CACT,EAAG,GAAI,CACT,CAEA,IAAMI,EAAa,GAAG,OAAAtB,EAAG,IAAI,SAAS,EAAC,SAEjCuB,EAAqB,GAAG,OAAAC,GAAgB1B,EAAE,KAAK,EAAC,OAAM,OAAAE,EAAG,MACzDyB,GAAmBC,GAAgB,GAAG,OAAAF,GAAgB1B,EAAE,KAAK,EAAC,OAAM,OAAA6B,GAAUD,CAAG,GACjFE,EAAqBC,GAAe,CACxC,IAAMjC,GAAI,IAAI,KAAKiC,CAAI,EAEvB,OADW,IAAI,KAAKjC,GAAE,QAAQ,EAAI,CAAC,EACzB,YAAY,CACxB,EACMkC,EAAsB,GAAG,OAAAN,GAAgB1B,EAAE,KAAK,EAAC,YAAW,0BAAmB8B,EAAkB,IAAI,KAAK5B,EAAG,IAAI,CAAC,CAAC,GAEnH+B,EAAiBjC,EAAE,IAAI,cAAgB,GAEvC,CACJ,YAAAkC,EACA,gBAAAC,GACA,iBAAAC,GACA,aAAAC,GACA,cAAAC,GACA,aAAAC,GACA,kBAAAC,GACA,iBAAAC,EACF,EAAIC,GAAkB,CACpB,QAAST,EACT,KAAM5B,EAAO,KACb,aAAesC,GAAS,CACtBrC,EAAWsC,IAAOC,EAAAC,EAAA,GAAKF,IAAL,CAAQ,KAAAD,CAAK,EAAE,CACnC,CACF,CAAC,EAED,eAAeI,GAAOC,EAAe,CACnC,GAAI,CACF,IAAMC,GAAM,MAAMC,GAAWhD,EAAG,IAAK8C,EAAO,OAAS,QAAQ,EAC7D,GAAI,CAACC,GAAI,GAAI,CACX3B,EAAgB6B,GAAYrD,EAAGmD,GAAI,OAAQA,GAAI,QAAQ,CAAC,EACxD,MACF,CACA5B,EAAiB,EACjBL,EAAe,IAAI,EACnB,IAAMoC,GAAUP,EAAAC,EAAA,GAAK5C,GAAL,CAAS,SAAU8C,CAAK,GACxC7C,EAAMiD,EAAO,EACb9C,EAAWsC,IAAOC,EAAAC,EAAA,GAAKF,IAAL,CAAQ,SAAUI,CAAK,EAAE,EAC3CpD,EAAUwD,EAAO,CACnB,OAASC,GAAK,CACZ/B,EACE+B,cAAeC,GAAexD,EAAE,uBAAuB,EAAIA,EAAE,oBAAoB,CACnF,CACF,CACF,CAEA,eAAeyD,IAAY,CACzB,GAAI,CACF,IAAMN,EAAM,MAAMO,GAAQtD,EAAG,GAAG,EAChC,GAAI,CAAC+C,EAAI,GAAI,CACX3B,EAAgB6B,GAAYrD,EAAGmD,EAAI,OAAQA,EAAI,QAAQ,CAAC,EACxD,MACF,CACAtD,EAAe,CACjB,OAAS0D,EAAK,CACZ/B,EACE+B,aAAeC,GAAexD,EAAE,uBAAuB,EAAIA,EAAE,oBAAoB,CACnF,CACF,CACF,CAEA,eAAe2D,IAAa,CAC1B,GAAI,CACF,IAAMR,EAAM,MAAMS,GAASxD,EAAG,GAAG,EACjC,GAAI,CAAC+C,EAAI,GAAI,CACX3B,EAAgB6B,GAAYrD,EAAGmD,EAAI,OAAQA,EAAI,QAAQ,CAAC,EACxD,MACF,CACA5B,EAAiB,EACjBL,EAAe,IAAI,EACnB,IAAMoC,GAAUP,EAAAC,EAAA,GAAK5C,GAAL,CAAS,OAAQ,EAAM,GACvCC,EAAMiD,EAAO,EACbxD,EAAUwD,EAAO,CACnB,OAASC,EAAK,CACZ/B,EACE+B,aAAeC,GAAexD,EAAE,uBAAuB,EAAIA,EAAE,oBAAoB,CACnF,CACF,CACF,CAEA,SAAS6D,GAAUX,EAAe,CAChC1C,EAAUJ,CAAE,EACZQ,EAAQsC,CAAI,EACZ3B,EAAiB,EACjBL,EAAe,IAAI,EACnBE,EAAkB,EAAK,EACvBJ,EAAa,EAAK,EAClBsB,GAAiB,EACbY,GAAMY,GAASpC,CAAU,CAC/B,CAEA,eAAeqC,IAAe,CAC5BjD,EAAW,EAAI,EACf,GAAI,CACF,IAAMkD,EAAQ,MAAMC,GAAY1D,CAAM,EAClCyD,GAAS,MAAMxD,EAAWsC,IAAOC,EAAAC,EAAA,GAAKF,IAAL,CAAQ,MAAAkB,CAAM,EAAE,CACvD,QAAE,CACAlD,EAAW,EAAK,CAClB,CACF,CAEA,eAAeoD,IAAY,CACzBlD,EAAa,EAAI,EACjB,GAAI,CACF,IAAMmC,EAAM,MAAMgB,GAAgB/D,EAAG,GAAG,EACxC,GAAI,CAAC+C,EAAI,GAAI,CACX3B,EAAgB6B,GAAYrD,EAAGmD,EAAI,OAAQA,EAAI,QAAQ,CAAC,EACxD,MACF,CACF,QAAE,CACAnC,EAAa,EAAK,CACpB,CACF,CAEA,IAAMoD,GAAW,MAAOC,GAAyE,CAC/FA,EAAE,eAAe,EACjB9C,EAAiB,EACjBL,EAAe,IAAI,EACnBE,EAAkB,EAAK,EACvB,IAAMkD,GAAUvB,EAAAC,EAAA,GAAKzC,GAAL,CAAa,KAAMgE,GAAchE,EAAO,IAAI,CAAE,GAC9D,GAAI,CACF,IAAM4C,GAAM,MAAMqB,GAAaF,EAAO,EAClCnB,GAAI,IAAMA,GAAI,QAAU,KAAOA,GAAI,OAAS,KAC9C9C,EAAMiE,EAAO,EACb1D,EAAQ,EAAK,EACbd,EAAUwE,EAAO,GAEjB9C,EAAgB6B,GAAYrD,EAAGmD,GAAI,OAAQA,GAAI,QAAQ,CAAC,CAE5D,OAASI,GAAK,CACZ/B,EACE+B,cAAeC,GAAexD,EAAE,uBAAuB,EAAIA,EAAE,oBAAoB,CACnF,CACF,CACF,EAEMyE,GAAoB1D,GAAaR,EAAO,SAAWH,EAAG,MAAQG,EAAO,IAE3E,SACE,QAAC,OACC,GAAI,OAAOH,EAAG,GAAG,EACjB,UAAW,6BAA6B,OAAAA,EAAG,QAAU,WAAa,IAEjE,UAAAF,EAAE,IAAI,WACL,OAAC,OAAI,UAAW,kBAAkB,OAAAE,EAAG,SAAW,YAAc,IAC5D,mBAAC,UACC,UAAU,kBACV,QAAS,IAAG,CAAQ6C,GAAO,CAAC7C,EAAG,QAAQ,GACvC,KAAK,SACN,kBAED,EACF,EACE,KAEFO,EAiHE,QAhHF,QAAC,OAAI,UAAU,UACb,oBAAC,KACC,KAAMP,EAAG,IACT,OAAO,SACP,IAAI,aACJ,UAAW,mBAAmB,OAAAA,EAAG,OAAS,UAAY,IAErD,SAAAA,EAAG,QAAU,GAAKJ,EAAE,SAAS,EAAII,EAAG,MACvC,KACA,OAAC,OAAG,KACJ,OAAC,KAAE,KAAMA,EAAG,IAAK,UAAU,iDACxB,SAAAA,EAAG,IACN,EACCA,EAAG,cACF,OAAC,KACC,KAAMA,EAAG,WACT,UAAU,sEACV,OAAO,SACP,IAAI,aACJ,MAAOJ,EAAE,wBAAwB,EAClC,kBAED,EACE,QACJ,OAAC,OAAG,KACJ,OAAC,OAAI,UAAU,qCACb,mBAAC0E,GAAA,CAAS,KAAMtE,EAAG,YAAa,EAClC,KACA,OAAC,OAAI,UAAU,OACZ,SAAAA,EAAG,OAAS,GACTA,EAAG,KAAK,MAAM,GAAG,EAAE,IAAK0B,MACtB,OAAC,KAEC,UAAW,eAAe,OAAAA,EAAI,MAAM,EAAG,CAAC,IAAM,IAAM,WAAa,IACjE,KAAMD,GAAgBC,CAAG,EAExB,SAAAA,GAJIA,CAKP,CACD,EACD,KACN,KAEA,QAAC,OACC,oBAAC,KACC,UAAU,mCACV,KAAMH,EACN,YAAWvB,EAAG,KACd,MAAOuE,GAAWzE,EAAE,KAAME,EAAG,IAAI,EAEhC,SAAAwE,GAAmB1E,EAAE,KAAME,EAAG,IAAI,EACrC,EAECF,EAAE,IAAI,WACL,QAAC,OAAI,UAAU,gBACb,qBAAC,UACC,KAAK,SACL,QAAS,IAAM,CACb2D,GAAU,EAAI,CAChB,EACA,UAAU,2CAET,UAAA7D,EAAE,MAAM,EAAE,YACb,KACA,QAAC,OAAI,UAAU,iBACb,oBAAC,UACC,KAAK,SACL,QAAS,IAAM,CACbU,EAAa,EAAI,CACnB,EACA,UAAW,6CAA6C,OAAAD,EAAY,MAAQ,IAE3E,SAAAT,EAAE,QAAQ,EACb,KACA,QAAC,QAAK,UAAW,yBAAyB,OAACS,EAAoB,GAAR,OACrD,qBAAC,UACC,KAAK,SACL,QAAS,IAAM,CACbC,EAAa,EAAK,CACpB,EAEC,UAAAV,EAAE,QAAQ,EAAE,aACf,KACA,OAAC,UACC,KAAK,SACL,QAAS,IAAG,CAAQyD,GAAU,GAC9B,UAAU,iBAET,SAAAzD,EAAE,SAAS,EACd,GACF,GACF,GACF,EACE,KAEHE,EAAE,IAAI,SAAWE,EAAG,UACnB,QAAC,OAAI,UAAU,UAAU,wBAEvB,OAAC,UAAO,QAAS,IAAG,CAAQuD,GAAW,GAAG,UAAU,YAAY,KAAK,SAClE,SAAA3D,EAAE,kBAAkB,EACvB,GACF,EACE,MACN,IAECD,GAAAG,EAAE,IAAI,SAAN,YAAAH,GAAc,MAAO,kBACpB,OAAC,OAAI,UAAU,MACb,mBAAC,KAAE,UAAU,iBAAiB,KAAMmC,EACjC,SAAAlC,EAAE,qBAAqB,EAC1B,EACF,EACE,MACN,EAEDW,KACC,OAAC,OAAI,UAAU,4CACb,oBAAC,QAAK,SAAW0D,GAAG,CAAQD,GAASC,CAAC,GACpC,oBAAC,OAAK,SAAArE,EAAE,WAAW,EAAE,KACrB,OAAC,SACC,KAAK,MACL,UAAU,oCACV,SAAQ,GACR,KAAK,MACL,MAAOO,EAAO,IACd,SAAW8D,GAAM,CACf7D,EAAWsC,IAAOC,EAAAC,EAAA,GAAKF,IAAL,CAAQ,IAAKuB,EAAE,OAAO,KAAM,EAAE,CAClD,EACF,KACA,OAAC,OAAK,SAAArE,EAAE,aAAa,EAAE,KACvB,QAAC,OAAI,UAAU,OACb,oBAAC,SACC,KAAK,OACL,UAAU,sCACV,KAAK,QACL,MAAOO,EAAO,MACd,SAAW8D,GAAM,CACf7D,EAAWsC,IAAOC,EAAAC,EAAA,GAAKF,IAAL,CAAQ,MAAOuB,EAAE,OAAO,KAAM,EAAE,CACpD,EACF,KACA,OAAC,UACC,SAAUxD,EACV,KAAK,SACL,QAAS,IAAG,CAAQkD,GAAa,GACjC,UAAW,sFACT,OAAAlD,EAAU,mBAAqB,IAGhC,SAAAb,EAAE,OAAO,EACZ,GACF,KACA,OAAC,OAAK,SAAAA,EAAE,mBAAmB,EAAE,KAC7B,OAAC,YACC,UAAU,4CACV,KAAK,cACL,KAAM,EACN,MAAOO,EAAO,YACd,SAAW8D,GAAM,CACf7D,EAAWsC,IAAOC,EAAAC,EAAA,GAAKF,IAAL,CAAQ,YAAauB,EAAE,OAAO,KAAM,EAAE,CAC1D,EACF,KACA,QAAC,OAAI,GAAG,iBACN,oBAAC,OAAK,SAAArE,EAAE,YAAY,EAAE,KACtB,QAAC,OAAI,UAAU,WACb,oBAAC,SACC,GAAI0B,EACJ,IAAKU,EACL,KAAK,OACL,UAAU,qCACV,KAAK,OACL,aAAa,MACb,eAAe,MACf,MAAO7B,EAAO,KACd,SAAUgC,GACV,UAAWC,GACX,QAASC,GACT,SAAUA,GACV,OAAQ,IAAM,CACZ,OAAO,WAAW,IAAM,CACtBH,GAAiB,CACnB,EAAG,CAAC,CACN,EACF,EACCD,IAAmB,QAClB,OAACwC,GAAA,CACC,gBAAiBxC,GACjB,QAASK,GACT,OAAQC,GACV,EACE,MACN,GACF,KACA,QAAC,OAAI,UAAU,2BACb,oBAAC,SACC,KAAK,WACL,UAAU,kBACV,GAAG,eACH,KAAK,UACL,QAASpC,EAAO,QAChB,SAAW8D,GAAM,CACf7D,EAAWsC,IAAOC,EAAAC,EAAA,GAAKF,IAAL,CAAQ,QAASuB,EAAE,OAAO,OAAQ,EAAE,CACxD,EACF,EAAG,OACH,OAAC,SAAM,QAAQ,eAAe,UAAU,MACrC,SAAArE,EAAE,eAAe,EACpB,EAAS,OACT,OAAC,SACC,KAAK,WACL,UAAU,iBACV,GAAG,cACH,KAAK,SACL,QAASO,EAAO,OAChB,SAAW8D,GAAM,CACf7D,EAAWsC,IAAOC,EAAAC,EAAA,GAAKF,IAAL,CAAQ,OAAQuB,EAAE,OAAO,OAAQ,EAAE,CACvD,EACF,EAAG,OACH,OAAC,SAAM,QAAQ,cAAe,SAAArE,EAAE,cAAc,EAAE,GAClD,KACA,QAAC,OAAI,UAAU,oCACb,qBAAC,OACC,oBAAC,SACC,KAAK,SACL,UAAU,mFACV,MAAOA,EAAE,MAAM,EACjB,EAAG,OACH,OAAC,SACC,KAAK,QACL,UAAU,+EACV,MAAOA,EAAE,QAAQ,EACjB,QAAS,IAAM,CACb6D,GAAU,EAAK,CACjB,EACF,GACF,EACC3D,EAAE,IAAI,yBACL,OAAC,UACC,KAAK,SACL,SAAUuE,GACV,QAAS,IAAG,CAAQP,GAAU,GAC9B,UAAW,kEAAkE,OAAAnD,EAAY,mBAAqB,IAAK,OAAA0D,GAAoB,oBAAsB,IAE5J,SAAYzE,EAAZe,EAAc,YAAiB,SAAN,EAC5B,EACE,MACN,GACF,EACF,EACE,KAEHE,GAAe,QACd,OAAC,QACC,UAAU,2BACV,MAAO,CACL,QAASE,EAAiB,EAAI,EAC9B,WAAYA,EAAiB,aAAe,MAC9C,EAEC,SAAAF,EACH,EACE,MACN,CAEJ,CJhdQ,IAAA6D,GAAA,QAjBD,SAASC,GAAM,CAAE,QAAAC,CAAQ,EAA4B,CAC1D,GAAM,CAACC,EAAaC,CAAc,EAAI,GAAAC,QAAM,SAAS,EAAK,EACpDC,EAASC,GAAmBC,GAAMA,EAAE,MAAM,EAC1CC,EAASF,GAAmBC,GAAMA,EAAE,MAAM,EAC1CE,EAAaH,GAAmBC,GAAMA,EAAE,UAAU,EAClDG,EAASJ,GAAmBC,GAAMA,EAAE,MAAM,EAEhD,UAAAH,QAAM,gBAAgB,IAAM,CAC1BI,EAAOP,CAAO,EACdE,EAAe,EAAI,CACrB,EAAG,CAACF,EAASO,CAAM,CAAC,KAKlB,QAAC,OACE,UAJiBN,EAAcG,EAASJ,GAI1B,IAAKU,MAClB,QAACC,GAAA,CAEC,QAASD,EACT,eAAgB,IAAM,CACpBF,EAAWE,EAAE,GAAG,CAClB,EACA,UAAYE,GAAO,CACjBH,EAAOG,CAAE,CACX,GAPKF,EAAE,GAQT,CACD,EACH,CAEJ,CsBpCA,IAAAG,GAAmD,QAuC/C,IAAAC,EAAA,QAhBJ,SAASC,GACPC,EACAC,EACAC,EACAC,EACAC,EAC0B,CAC1B,OAAIJ,IAAc,KAAa,8BAC3B,CAACC,GAAU,CAACC,EAAQ,KAAK,GAAK,CAACC,EAAW,KAAK,EAAU,8BACzDC,EAAS,KAASF,EAAQ,KAAK,EAAE,MAAM,KAAK,EAAE,OAAO,OAAO,EAAE,OAAS,GAClE,uBACF,IACT,CAEA,SAASG,GAAWC,EAAmBC,EAAUC,EAAeC,EAAyB,CACvF,SACE,OAAC,KACC,KAAK,IACL,UAAW,eAAe,OAAAH,IAAYC,EAAQ,cAAgB,qBAC9D,QAAUG,GAAM,CACdA,EAAE,eAAe,EACjBD,EAAQF,CAAK,CACf,EAEC,SAAAC,EACH,CAEJ,CAEO,SAASG,GAAS,CAAE,OAAAP,CAAO,EAAU,CArD5C,IAAAQ,GAAAC,GAAAC,GAAAC,GAsDE,GAAM,CAAE,CAAE,EAAIC,GAAe,EACvB,CAACC,EAASC,CAAU,KAAI,aAAS,EAAK,EACtC,CAAClB,EAAWmB,CAAY,KAAI,aAA+B,IAAI,EAC/D,CAAClB,EAAQmB,CAAS,KAAI,aAA4B,IAAI,EACtD,CAAClB,EAASmB,CAAU,KAAI,aAAS,EAAE,EACnC,CAAClB,EAAYmB,CAAa,KAAI,aAAS,EAAE,EACzC,CAACC,EAAYC,CAAa,KAAI,aAAS,EAAK,EAC5C,CAACC,EAAeC,CAAgB,KAAI,aAAS,EAAK,EAClD,CAACC,EAAeC,CAAgB,KAAI,aAAS,EAAK,EAClD,CAACC,EAAeC,CAAgB,KAAI,aAAwB,IAAI,EAChE,CAACC,EAAgBC,CAAiB,KAAI,aAAS,EAAK,EACpDC,KAAkB,WAAsB,IAAI,EAC5CC,KAAY,WAAsB,IAAI,EAEtCC,EAAIC,GAAI,EACRC,EAAiBF,EAAE,IAAI,cAAgB,GACvCG,GAAa1B,GAAAuB,EAAE,IAAI,SAAN,KAAAvB,GAAgB,CAAE,IAAK,WAAqB,EACzD2B,IAAc1B,GAAAsB,EAAE,IAAI,UAAN,KAAAtB,GAAiB,MAC/B2B,GAAW1B,GAAAqB,EAAE,IAAI,OAAN,KAAArB,GAAc,CAAC,EAC1B2B,GAAY1B,GAAAoB,EAAE,IAAI,QAAN,KAAApB,GAAe,KAG3B2B,EADSC,GAAmBC,IAAMA,GAAE,MAAM,EAC5B,IAAKC,IAAMA,GAAE,GAAG,EAC9BC,GAAYJ,EAAK,OACjBK,GAAiB/C,IAAc,KAAO,EAAIA,IAAc,OAAS8C,GAAY1C,EAE7E4C,GAASjD,GAAeC,EAAWC,EAAQC,EAASC,EAAYC,CAAM,EACtE6C,GAAqB1B,GAAcyB,KAAW,MAAQvB,GAAiBE,EAEvE,CACJ,YAAauB,GACb,gBAAiBC,GACjB,iBAAkBC,GAClB,aAAcC,GACd,cAAeC,GACf,aAAcC,GACd,kBAAmBC,GACnB,iBAAkBC,EACpB,EAAIC,GAAkB,CACpB,QAASrB,GAAkBpC,IAAW,SACtC,KAAME,EACN,aAAcmB,CAChB,CAAC,EAEK,CACJ,YAAaqC,GACb,gBAAiBC,GACjB,iBAAkBC,GAClB,aAAcC,GACd,cAAeC,EACf,aAAcC,GACd,kBAAmBC,GACnB,iBAAkBC,EACpB,EAAIR,GAAkB,CACpB,QAASrB,GAAkBpC,IAAW,SACtC,KAAMC,EACN,aAAcmB,CAChB,CAAC,EAEK8C,GAAwB,IAAM,CAC9BlC,EAAgB,UAAY,OAC9B,OAAO,aAAaA,EAAgB,OAAO,EAC3CA,EAAgB,QAAU,MAExBC,EAAU,UAAY,OACxB,OAAO,aAAaA,EAAU,OAAO,EACrCA,EAAU,QAAU,KAExB,EAEMkC,GAAY,IAAM,CACtBjD,EAAa,IAAI,EACjBC,EAAU,IAAI,EACdC,EAAW,EAAE,EACbC,EAAc,EAAE,EAChBI,EAAiB,EAAK,EACtBE,EAAiB,EAAK,EACtBE,EAAiB,IAAI,EACrBE,EAAkB,EAAK,EACvBmC,GAAsB,CACxB,KAEA,cAAU,IAAM,CACd,IAAME,GAAK,SAAS,eAAe,kBAAkB,EACrD,GAAI,CAACA,GAAI,OACT,IAAMC,GAAW5D,IAAa,CAC5BA,GAAE,eAAe,EACjB0D,GAAU,EACVlD,EAAYqD,IAAM,CAACA,EAAC,CACtB,EACA,OAAAF,GAAG,iBAAiB,QAASC,EAAO,EAC7B,IAAM,CACXD,GAAG,oBAAoB,QAASC,EAAO,CACzC,CACF,EAAG,CAAC,CAAC,KAEL,cAAU,IAAM,CACd,IAAMD,GAAK,SAAS,eAAe,kBAAkB,EAChDA,KACLA,GAAG,UAAU,OAAO,aAAcpD,CAAO,EACzCoD,GAAG,UAAU,OAAO,SAAU,CAACpD,CAAO,EACxC,EAAG,CAACA,CAAO,CAAC,KAEZ,cAAU,IAAM,CACdS,EAAiB,EAAK,EACtBE,EAAiB,EAAK,EACtBE,EAAiB,IAAI,EACrBE,EAAkB,EAAK,CACzB,EAAG,CAAC/B,EAAQD,CAAS,CAAC,KAEtB,cAAU,IACD,IAAM,CACXmE,GAAsB,CACxB,EACC,CAAC,CAAC,EAEL,IAAMK,GAAqBC,IAAgB,CACzCN,GAAsB,EACtBnC,EAAkB,EAAK,EACvBF,EAAiB2C,EAAG,EACpBxC,EAAgB,QAAU,OAAO,WAAW,IAAM,CAChDA,EAAgB,QAAU,KAC1BD,EAAkB,EAAI,EACtBE,EAAU,QAAU,OAAO,WAAW,IAAM,CAC1CJ,EAAiB,IAAI,EACrBE,EAAkB,EAAK,EACvBE,EAAU,QAAU,IACtB,EAAG,GAAI,CACT,EAAG,GAAI,CACT,EAEMwC,GAAe,MACnBhE,IACkB,CA3LtB,IAAAE,GA4LIF,GAAE,eAAe,EACjBoB,EAAiB,IAAI,EACrBE,EAAkB,EAAK,EAEvB,IAAM2C,GAAiBC,GAAc1E,CAAO,EACtC2E,GAAoBD,GAAczE,CAAU,EAC5C2E,GAAI/E,GAAeC,EAAWC,EAAQ0E,GAAgBE,GAAmBzE,CAAM,EACrF,GAAI0E,KAAM,KAAM,CACdN,GAAkB,EAAEM,EAAC,CAAC,EACtB,MACF,CACA,GAAI7E,IAAW,UAAY,CAACwB,EAAe,CACzCC,EAAiB,EAAI,EACrB,MACF,CACA,GAAIzB,IAAW,UAAY,CAAC0B,EAAe,CACzCC,EAAiB,EAAI,EACrB,MACF,CACAF,EAAiB,EAAK,EACtBE,EAAiB,EAAK,EACtBJ,EAAc,EAAI,EAClB,GAAI,CACF,GAAIxB,IAAc,KAAM,OACxB,IAAM+E,GAAM,MAAUC,GACpBhF,IAAc,OACV,CACE,UAAW,OACX,KAAA0C,EACA,OAAAzC,EACA,QAAS0E,GACT,WAAYE,GACZ,eAAA9B,EACF,EACA,CACE,UAAW,MACX,OAAQT,EACR,QAASC,GACT,KAAMC,EACN,MAAOC,EACP,OAAAxC,EACA,QAAS0E,GACT,WAAYE,GACZ,eAAA9B,EACF,CACN,EACIgC,GAAI,GACN,OAAO,SAAS,OAAO,EAEvBP,GAAkBS,GAAY,EAAGF,GAAI,QAAQnE,GAAAmE,GAAI,WAAJ,KAAAnE,GAAgB,EAAE,CAAC,CAEpE,OAASsE,GAAK,CACRA,cAAeC,GACjBX,GAAkB,EAAE,uBAAuB,CAAC,EAE5CA,GAAkB,EAAE,oBAAoB,CAAC,CAE7C,QAAE,CACAhD,EAAc,EAAK,CACrB,CACF,EAEA,GAAI,CAACP,EAAS,OAAO,KAErB,IAAMmE,GAAgBb,IAAkB,CACtCnD,EAAWiE,IAASA,KAAQd,GAAI,KAAOA,EAAE,EACrCA,KAAM,WACRlD,EAAW,EAAE,EACbC,EAAc,EAAE,EAEpB,EAEA,SACE,QAAC,QACC,SAAWZ,IAAM,CACVgE,GAAahE,EAAC,CACrB,EACA,UAAU,uCAEV,qBAAC,OAAI,UAAU,MACb,qBAAC,OACC,oBAAC,QAAK,UAAU,MAAO,WAAE,iBAAiB,EAAE,EAC3CV,IAAc,SACb,OAAC,QAAK,UAAU,MACb,SAAA+C,KAAmB,EAChB,EAAE,8BAA8B,EAChC,EAAE,6BAA8B,CAAE,MAAOA,EAAe,CAAC,EAC/D,GAEJ,KACA,QAAC,OACE,UAAA1C,GAAQL,EAAW,OAAQ,EAAE,mBAAmB,EAAGmB,CAAY,EAC/D,WACAd,GAAQL,EAAW,MAAO,EAAE,mBAAmB,EAAGmB,CAAY,GACjE,GACF,KAEA,QAAC,OAAI,UAAU,MACb,oBAAC,OACC,mBAAC,QAAK,UAAU,MAAO,WAAE,iBAAiB,EAAE,EAC9C,KACA,QAAC,OACE,UAAAd,GAAQJ,EAAQ,UAAW,EAAE,sBAAsB,EAAGmF,EAAY,EAClE,WACA/E,GAAQJ,EAAQ,SAAU,EAAE,qBAAqB,EAAGmF,EAAY,EAChE,WACA/E,GAAQJ,EAAQ,OAAQ,EAAE,qBAAqB,EAAGmF,EAAY,EAC9D,WACA/E,GAAQJ,EAAQ,SAAU,EAAE,iBAAiB,EAAGmF,EAAY,EAC5D,WACA/E,GAAQJ,EAAQ,OAAQ,EAAE,mBAAmB,EAAGmF,EAAY,EAC5D,WACA/E,GAAQJ,EAAQ,SAAU,EAAE,sBAAsB,EAAGmF,EAAY,EACjE,WACA/E,GAAQJ,EAAQ,SAAU,EAAE,QAAQ,EAAGmF,EAAY,GACtD,GACF,KAEA,QAAC,OAAI,UAAU,MACb,oBAAC,OACC,mBAAC,QAAK,UAAW,MAAM,OAAAR,GAAczE,CAAU,EAAI,cAAgB,IAChE,WAAE,qBAAqB,EAC1B,EACF,KACA,QAAC,OAAI,UAAU,WACb,oBAAC,SACC,IAAK+C,GACL,KAAK,OACL,UAAW,qCAAqC,OAAAjD,IAAW,SAAW,oBAAsB,IAC5F,SAAUA,IAAW,SACrB,aAAa,MACb,eAAe,MACf,MAAOE,EACP,SAAUkD,GACV,UAAWC,GACX,QAASC,GACT,SAAUA,GACV,OAAQ,IAAM,CACZ,OAAO,WAAW,IAAM,CACtBH,GAAuB,CACzB,EAAG,CAAC,CACN,EACF,EACCD,IAAyB,QACxB,OAACmC,GAAA,CACC,gBAAiBnC,GACjB,QAASK,GACT,OAAQC,GACV,EACE,MACN,GACF,KAEA,QAAC,OAAI,UAAU,MACb,oBAAC,OACC,mBAAC,QAAK,UAAW,MAAM,OAAAmB,GAAc1E,CAAO,EAAI,cAAgB,IAC7D,WAAE,kBAAkB,EACvB,EACF,KACA,QAAC,OAAI,UAAU,WACb,oBAAC,SACC,IAAKyD,GACL,KAAK,OACL,UAAW,qCAAqC,OAAA1D,IAAW,SAAW,oBAAsB,IAC5F,SAAUA,IAAW,SACrB,aAAa,MACb,eAAe,MACf,MAAOC,EACP,SAAU4D,GACV,UAAWC,EACX,QAASC,GACT,SAAUA,GACV,OAAQ,IAAM,CACZ,OAAO,WAAW,IAAM,CACtBH,GAAoB,CACtB,EAAG,CAAC,CACN,EACF,EACCD,IAAsB,QACrB,OAAC0B,GAAA,CACC,gBAAiB1B,GACjB,QAASK,GACT,OAAQC,GACV,EACE,MACN,GACF,KAEA,QAAC,OAAI,UAAU,oBACb,oBAAC,UACC,KAAK,SACL,SAAU3C,GAAcE,GAAiBE,EACzC,UAAW,0DAA0D,OAAAsB,GAAqB,+BAAiC,6BAC3H,QAAS,IAAM,CACTD,KAAW,MAAMwB,GAAkB,EAAExB,EAAM,CAAC,CAClD,EAEC,SAAa,EAAbzB,EAAe,sBAA2B,iBAAN,EACvC,EAAU,OACV,OAAC,UACC,KAAK,SACL,UAAU,+EACV,QAAS,IAAM,CACb6C,GAAU,EACVlD,EAAW,EAAK,CAClB,EAEC,WAAE,QAAQ,EACb,EACCW,GAAiB,SAChB,OAAC,QACC,UAAU,wBACV,MAAO,CACL,QAASE,EAAiB,EAAI,EAC9B,WAAYA,EAAiB,aAAe,MAC9C,EAEC,SAAAF,EACH,EAEDJ,MACC,QAAC,QAAK,UAAU,SACd,oBAAC,QAAK,UAAU,MACb,SAAAsB,KAAmB,EAChB,EAAE,qBAAqB,EACvB,EAAE,uBAAwB,CAAE,MAAOA,EAAe,CAAC,EACzD,KACA,QAAC,QAAK,UAAU,SACd,oBAAC,UACC,KAAK,SACL,QAAS,IAAM,CACbrB,EAAiB,EAAK,CACxB,EAEC,WAAE,QAAQ,EACb,EACC,SACD,OAAC,UAAO,KAAK,SAAS,UAAU,iBAC7B,WAAE,SAAS,EACd,GACF,GACF,EAEDC,MACC,QAAC,QAAK,UAAU,SACd,oBAAC,QAAK,UAAU,MACb,SAAAoB,KAAmB,EAChB,EAAE,oBAAoB,EACtB,EAAE,sBAAuB,CAAE,MAAOA,EAAe,CAAC,EACxD,KACA,QAAC,QAAK,UAAU,SACd,oBAAC,UACC,KAAK,SACL,QAAS,IAAM,CACbnB,EAAiB,EAAK,CACxB,EAEC,WAAE,QAAQ,EACb,EACC,SACD,OAAC,UAAO,KAAK,SAAS,UAAU,iBAC7B,WAAE,qBAAqB,EAC1B,GACF,GACF,GAEJ,GACF,CAEJ,CCzcA,IAAA2D,GAAkB,QAUd,IAAAC,GAAA,QAHJ,SAASC,GAAkBC,EAAe,CACxC,IAAMC,EAAQD,EAAM,MAAM,IAAI,EAC9B,SACE,sBACG,UAAAC,EAAM,CAAC,EACPA,EAAM,MAAM,CAAC,EAAE,IAAI,CAACC,EAAGC,OACtB,SAAC,GAAAC,QAAM,SAAN,CACC,qBAAC,OAAG,EACHF,IAFkBC,CAGrB,CACD,GACH,CAEJ,CAGO,SAASE,GAAM,CAAE,QAAAC,CAAQ,EAAwB,CACtD,GAAM,CAAE,CAAE,EAAIC,GAAe,EACvBC,EAAIC,GAAI,EACRC,EAAsBC,GAAiB,GAAG,OAAAC,GAAgBJ,EAAE,KAAK,EAAC,WAAU,OAAAG,GAElF,SACE,QAAC,OACE,SAAAL,EAAQ,IAAKO,GAAS,CACrB,IAAMC,EAAa,GAAAV,QAAM,QACvB,IAAMW,GAAQP,EAAE,KAAMK,EAAK,OAAO,EAClC,CAACL,EAAE,KAAMK,EAAK,OAAO,CACvB,EACA,SACE,QAAC,OAEC,GAAI,OAAOA,EAAK,EAAE,EAClB,UAAW,yBAAyB,OAAAA,EAAK,OAAS,GAAK,YAEvD,qBAAC,OAAI,UAAU,UACb,qBAAC,KAAE,KAAMH,EAAmBG,EAAK,IAAI,EAAG,UAAU,mBAC/C,SAAAA,EAAK,QAAU,GAAK,EAAE,SAAS,EAAIA,EAAK,MAC3C,KACA,QAAC,OAAG,KACJ,QAAC,OAAI,UAAU,qCACZ,SAAAd,GAAkBc,EAAK,KAAK,MAAM,EAAG,GAAG,CAAC,EAC5C,KACA,QAAC,KACC,UAAU,mCACV,eAAcA,EAAK,QACnB,MAAOG,GAAWR,EAAE,KAAMK,EAAK,OAAO,EACtC,KAAMH,EAAmBG,EAAK,IAAI,EAEjC,SAAAC,EACH,GACF,GApBKD,EAAK,EAqBZ,CAEJ,CAAC,EACH,CAEJ,CC9DA,IAAAI,GAAkB,QAYd,IAAAC,EAAA,QAHJ,SAASC,GAAWC,EAAe,CACjC,IAAMC,EAAQD,EAAM,MAAM,IAAI,EAC9B,SACE,oBACG,UAAAC,EAAM,CAAC,EACPA,EAAM,MAAM,CAAC,EAAE,IAAI,CAACC,EAAGC,OACtB,QAAC,GAAAC,QAAM,SAAN,CACC,oBAAC,OAAG,EACHF,IAFkBC,CAGrB,CACD,GACH,CAEJ,CAGO,SAASE,GAAM,CAAE,QAAAC,CAAQ,EAAsB,CACpD,GAAM,CAAE,CAAE,EAAIC,GAAe,EACvBC,EAAIC,GAAI,EAER,CAACC,EAAMC,CAAO,EAAI,GAAAP,QAAM,SAAeE,CAAO,EAC9C,CAACM,EAAeC,CAAgB,EAAI,GAAAT,QAAM,SAAeE,CAAO,EAChE,CAACQ,EAAWC,CAAY,EAAI,GAAAX,QAAM,SAAS,EAAK,EAChD,CAACY,EAAMC,CAAO,EAAI,GAAAb,QAAM,SAASE,EAAQ,IAAM,CAAC,EAChD,CAACY,EAAWC,CAAY,EAAI,GAAAf,QAAM,SAAS,EAAK,EAChD,CAACgB,EAAUC,CAAW,EAAI,GAAAjB,QAAM,SAAwB,IAAI,EAC5DkB,EAAaC,GAAQf,EAAE,KAAME,EAAK,OAAO,EAEzCc,EAAa,GAAG,OAAAd,EAAK,GAAG,SAAS,EAAC,SAExC,SAASe,EAAUC,EAAe,CAChCb,EAAiBH,CAAI,EACrBO,EAAQS,CAAI,EACZ,IAAMC,EAAKC,GAAe,EACpBC,EAAIC,GAAuBH,EAAI,MAAM,EACvC,CAACD,GAAQG,IAAM,cAAeE,GAAY,MAAM,EAC3CL,GAAMM,GAASR,CAAU,CACpC,CAEA,eAAeS,GAAY,CACzB,GAAI,CACF,IAAMC,EAAM,MAAMC,GAAYzB,EAAK,EAAE,EACrC,GAAI,CAACwB,EAAI,GAAI,CACXb,EAAYe,GAAY,EAAGF,EAAI,OAAQA,EAAI,QAAQ,CAAC,EACpD,MACF,CACAf,EAAa,EAAI,CACnB,OAASkB,EAAK,CACZhB,EACEgB,aAAeC,GAAe,EAAE,uBAAuB,EAAI,EAAE,oBAAoB,CACnF,CACF,CACF,CAEA,IAAMC,EAAW,MAAOC,GAAyE,CAC/FA,EAAE,eAAe,EACjBnB,EAAY,IAAI,EAChB,GAAI,CACF,IAAMa,EAAM,MAAMO,GAAS7B,CAAa,EACxC,GAAIsB,EAAI,IAAMA,EAAI,QAAU,KAAOA,EAAI,OAAS,IAAK,CACnD,IAAMP,EAAKC,GAAe,EACpBF,EAAOI,GAAuBH,EAAI,MAAM,EACxCe,EAAM,SAAS,SACfC,EAAM,OAAO,SAAS,OAExBjB,IAAS,cAAeK,GAAY,MAAM,EACrCL,IAAS,OACZgB,EAAI,WAAWC,CAAG,EAAG,OAAO,SAAS,KAAOD,EAC3C,OAAO,SAAS,KAAOC,EACnB/B,EAAc,KAAO,EAC9B,OAAO,SAAS,KAAOgC,GAAgBpC,EAAE,KAAK,GAE9CG,EAAQC,CAAa,EACrBK,EAAQ,EAAK,EAEjB,MACEI,EAAYe,GAAY,EAAGF,EAAI,OAAQA,EAAI,QAAQ,CAAC,CAExD,OAASG,EAAK,CACZhB,EACEgB,aAAeC,GAAe,EAAE,uBAAuB,EAAI,EAAE,oBAAoB,CACnF,CACF,CACF,EAEA,OAAIpB,KAAkB,OAAC,KAAE,UAAU,iBAAkB,WAAE,aAAa,EAAE,KAGpE,QAAC,OAAI,GAAI,OAAOR,EAAK,EAAE,EAAG,UAAU,yBACjC,UAAAU,KAAW,OAAC,OAAI,UAAU,sBAAuB,SAAAA,EAAS,EAAS,KAClEJ,KA8DA,QAAC,QACC,SAAWwB,GAAM,CACVD,EAASC,CAAC,CACjB,EAEA,oBAAC,KAAE,UAAU,UAAW,WAAE,iBAAiB,EAAE,KAC7C,OAAC,SACC,KAAK,OACL,UAAU,sCACV,KAAK,QACL,MAAO5B,EAAc,MACrB,SAAW4B,GAAM,CACf3B,EAAkBX,GAAO2C,EAAAC,EAAA,GAAK5C,GAAL,CAAQ,MAAOsC,EAAE,OAAO,KAAM,EAAE,CAC3D,EACA,UAAW5B,EAAc,QAAU,GACrC,KACA,OAAC,OAAG,KACJ,OAAC,KAAE,UAAU,UAAW,WAAE,uBAAuB,EAAE,KACnD,OAAC,YACC,GAAIY,EACJ,UAAU,4CACV,KAAK,OACL,KAAM,GACN,MAAOZ,EAAc,KACrB,SAAW4B,GAAM,CACf3B,EAAkBX,GAAO2C,EAAAC,EAAA,GAAK5C,GAAL,CAAQ,KAAMsC,EAAE,OAAO,KAAM,EAAE,CAC1D,EACF,KACA,QAAC,OAAI,UAAU,2BACb,oBAAC,SACC,KAAK,WACL,UAAU,sBACV,GAAG,kBACH,KAAK,aACL,QAAS5B,EAAc,WACvB,SAAW4B,GAAM,CACf3B,EAAkBX,GAAO2C,EAAAC,EAAA,GAAK5C,GAAL,CAAQ,WAAYsC,EAAE,OAAO,OAAQ,EAAE,CAClE,EACF,EAAG,OACH,OAAC,SAAM,QAAQ,kBAAkB,UAAU,MACxC,WAAE,kBAAkB,EACvB,KACA,OAAC,OAAG,GACN,KACA,QAAC,OAAI,UAAU,2BACb,oBAAC,SACC,KAAK,WACL,UAAU,sBACV,GAAG,cACH,KAAK,SACL,QAAS5B,EAAc,OACvB,SAAW4B,GAAM,CACf3B,EAAkBX,GAAO2C,EAAAC,EAAA,GAAK5C,GAAL,CAAQ,OAAQsC,EAAE,OAAO,OAAQ,EAAE,CAC9D,EACF,EAAG,OACH,OAAC,SAAM,QAAQ,cAAc,UAAU,MACpC,WAAE,kBAAkB,EACvB,KACA,OAAC,OAAG,GACN,KACA,OAAC,SACC,KAAK,SACL,UAAU,mFACV,MAAO,EAAE,MAAM,EACjB,EAAG,OACH,OAAC,SACC,KAAK,QACL,UAAU,+EACV,MAAO,EAAE,QAAQ,EACjB,QAAS,IAAM,CACbf,EAAU,EAAK,CACjB,EACF,GACF,KAtIA,oBACE,qBAAC,OAAI,UAAU,UACb,oBAAC,OAAI,UAAU,mBAAoB,SAAAf,EAAK,QAAU,GAAK,EAAE,SAAS,EAAIA,EAAK,MAAM,KACjF,OAAC,OAAG,EACHA,EAAK,cACJ,OAAC,OAAI,UAAU,kBACb,mBAACqC,GAAA,CAAS,KAAMrC,EAAK,KAAM,EAC7B,KAEA,OAAC,OAAI,UAAU,qCAAsC,SAAAX,GAAWW,EAAK,IAAI,EAAE,KAE7E,QAAC,OAAI,UAAU,uCACb,oBAAC,QAAK,eAAcA,EAAK,QAAS,MAAOsC,GAAWxC,EAAE,KAAME,EAAK,OAAO,EACrE,SAAAY,EACH,EACC,SACD,OAAC,QAAK,UAAU,oBACb,SAAAZ,EAAK,OAAS,EAAE,eAAe,EAAI,EAAE,gBAAgB,EACxD,GACF,GACF,EAECF,EAAE,IAAI,WACL,QAAC,OAAI,UAAU,oBACb,qBAAC,UACC,KAAK,SACL,QAAS,IAAM,CACbiB,EAAU,EAAI,CAChB,EACA,UAAU,2CAET,YAAE,MAAM,EAAE,YACb,KACA,QAAC,OAAI,UAAU,iBACb,oBAAC,UACC,KAAK,SACL,QAAS,IAAM,CACbV,EAAa,EAAI,CACnB,EACA,UAAW,6CAA6C,OAAAD,EAAY,MAAQ,IAE3E,WAAE,QAAQ,EACb,KACA,QAAC,QAAK,UAAW,yBAAyB,OAACA,EAAoB,GAAR,OACrD,qBAAC,UACC,KAAK,SACL,QAAS,IAAM,CACbC,EAAa,EAAK,CACpB,EAEC,YAAE,QAAQ,EAAE,aACf,KACA,OAAC,UAAO,KAAK,SAAS,QAAS,IAAG,CAAQkB,EAAU,GAAG,UAAU,iBAC9D,WAAE,SAAS,EACd,GACF,GACF,GACF,EACE,MACN,GA6EJ,CAEJ,CC/OA,IAAAgB,GAAkB,QCWX,IAAMC,GAAmBC,GAAuBC,IAAS,CAC9D,KAAM,CAAE,KAAM,MAAO,EACrB,SAAU,CAAC,EACX,QAAUC,GAAS,CACjBD,EAAI,CAAE,KAAAC,CAAK,CAAC,CACd,EACA,YAAcC,GAAa,CACzBF,EAAI,CAAE,SAAAE,CAAS,CAAC,CAClB,CACF,EAAE,ECqIK,SAASC,GAAgBC,EAAmC,CACjE,OAAQA,EAAK,KAAM,CACjB,IAAK,MACH,MAAO,CAAE,KAAM,MAAO,SAAUA,EAAK,QAAS,EAChD,IAAK,aAAc,CACjB,IAAMC,EAAI,OAAOD,EAAK,OAAU,SAAWA,EAAK,MAAQ,OAAOA,EAAK,KAAK,EACzE,OAAO,OAAO,SAASC,CAAC,EACpB,CAAE,KAAM,aAAc,SAAUD,EAAK,SAAU,MAAOC,CAAE,EACxD,CAAE,KAAM,MAAO,CACrB,CACA,IAAK,UAAW,CACd,IAAMC,EAAI,OAAOF,EAAK,OAAU,SAAWA,EAAK,MAAQ,GAClDG,EAAOD,EAAIA,EAAE,MAAM,GAAG,EAAI,CAAC,EACjC,MAAO,CAAE,KAAM,UAAW,SAAUF,EAAK,SAAU,MAAOG,CAAK,CACjE,CACA,IAAK,oBAAqB,CACxB,IAAMD,EAAI,OAAOF,EAAK,OAAU,SAAWA,EAAK,MAAQ,GAClDG,EAAOD,EAAIA,EAAE,MAAM,GAAG,EAAI,CAAC,EAC3BE,EACJ,OAAOJ,EAAK,YAAe,UAAYA,EAAK,WAAa,EAAIA,EAAK,WAAa,EACjF,MAAO,CAAE,KAAM,oBAAqB,SAAUA,EAAK,SAAU,MAAOG,EAAM,WAAAC,CAAW,CACvF,CACA,QACE,MAAO,CAAE,KAAM,MAAO,CAC1B,CACF,CAEO,SAASC,GAAkBL,EAAmC,CACnE,OAAQA,EAAK,KAAM,CACjB,IAAK,MACH,MAAO,CAAE,KAAM,MAAO,MAAO,KAAM,SAAUA,EAAK,QAAS,EAC7D,IAAK,aACH,MAAO,CAAE,KAAM,aAAc,MAAOA,EAAK,MAAO,SAAUA,EAAK,QAAS,EAC1E,IAAK,UACH,MAAO,CAAE,KAAM,UAAW,MAAOA,EAAK,MAAM,KAAK,GAAG,EAAG,SAAUA,EAAK,QAAS,EACjF,IAAK,oBACH,MAAO,CACL,KAAM,oBACN,MAAOA,EAAK,MAAM,KAAK,GAAG,EAC1B,SAAUA,EAAK,SACf,WAAYA,EAAK,UACnB,EACF,IAAK,OACH,MAAO,CAAE,KAAM,OAAQ,MAAO,GAAI,SAAU,EAAM,CACtD,CACF,CAEO,SAASM,GAAWN,EAA8B,CACvD,OAAOA,EAAK,OAAS,OAAS,GAAQA,EAAK,QAC7C,CAEO,SAASO,GAAYP,EAAqBQ,EAAkC,CACjF,OAAOR,EAAK,OAAS,OAASA,EAAOS,EAAAC,EAAA,GAAKV,GAAL,CAAW,SAAAQ,CAAS,EAC3D,CFxKmC,IAAAG,GAAA,QApB5B,SAASC,GAAS,CAAE,YAAAC,CAAY,EAAmC,CACxE,GAAM,CAAE,CAAE,EAAIC,GAAe,EACvBC,EAAOC,GAAkBC,GAAMA,EAAE,IAAI,EACrCC,EAAWF,GAAkBC,GAAMA,EAAE,QAAQ,EAC7CE,EAAUH,GAAkBC,GAAMA,EAAE,OAAO,EAC3CG,EAAcJ,GAAkBC,GAAMA,EAAE,WAAW,EAezD,GAbA,GAAAI,QAAM,UAAU,IAAM,CACpBF,EAAQN,CAAW,CACrB,EAAG,CAACA,CAAW,CAAC,EAEhB,GAAAQ,QAAM,UAAU,IAAM,CACpB,eAAeC,EAAcC,EAAkB,CAC7C,GAAIA,EAAE,OAAS,OAAQ,OACvB,IAAMC,EAAK,MAAMC,GAAYC,GAAkBH,CAAC,CAAC,EACjDH,EAAYI,GAAA,KAAAA,EAAM,CAAC,CAAC,CACtB,CACKF,EAAcP,CAAI,CACzB,EAAG,CAACA,EAAMK,CAAW,CAAC,EAElBL,EAAK,OAAS,OAAQ,SAAO,QAAC,OAAI,UAAU,YAAY,EAE5D,IAAMY,EAAcC,IAAmC,CACrD,KAAM,aACN,SAAUC,GAAWd,CAAI,EACzB,MAAOa,CACT,GAEME,EACJf,EAAK,OAAS,WAAaA,EAAK,OAAS,oBAAsBA,EAAK,MAAQ,CAAC,EACzEgB,EAAkB,KAA4B,CAClD,KAAM,UACN,SAAUF,GAAWd,CAAI,EACzB,MAAOe,CACT,GACME,EAAqBC,IAAqC,CAC9D,KAAM,oBACN,SAAUJ,GAAWd,CAAI,EACzB,MAAOe,EACP,WAAYG,CACd,GAEA,eAAeC,EAAWC,EAAmB,CAC3C,IAAMC,EAAOC,GAAYtB,EAAMoB,CAAQ,EACvChB,EAAQiB,CAAI,EACRE,GAAI,EAAE,IAAI,SACZ,MAAMC,GAAmBb,GAAkBU,CAAI,CAAC,CAEpD,CAEA,eAAeI,EAAeJ,EAA0B,CAEnDA,EAAK,OAAS,OAASrB,EAAK,OAAS,OACrCqB,EAAK,OAAS,cAAgBrB,EAAK,OAAS,cAAgBA,EAAK,QAAUqB,EAAK,MAEjF,MAAMF,EAAW,CAACL,GAAWd,CAAI,CAAC,EAElCI,EAAQkB,GAAYD,EAAM,EAAI,CAAC,CAEnC,CAEA,SAASK,EAAgBL,EAA2B,CAE/CA,EAAK,OAAS,WAAarB,EAAK,OAAS,WACzCqB,EAAK,OAAS,qBACbrB,EAAK,OAAS,qBACdA,EAAK,aAAeqB,EAAK,WAEtBF,EAAW,CAACL,GAAWd,CAAI,CAAC,EAEjCI,EAAQkB,GAAYD,EAAM,EAAI,CAAC,CAEnC,CAEA,IAAMM,EAAwB3B,EAAK,OAAS,WAAaA,EAAK,OAAS,oBACjE4B,EAAW5B,EAAK,OAAS,oBAAsBA,EAAK,WAAa,EAEvE,SACE,SAAC,OAAI,UAAU,gBACb,sBAAC,OAAI,UAAU,uBACZ,UAAA2B,KACC,sBACE,qBAAC,UACC,KAAK,SACL,UAAW,uCAAuC,OAAA3B,EAAK,OAAS,UAAY,KAAO,IACnF,MAAO,EAAE,uBAAuB,EAChC,QAAS,IAAM,CACb0B,EAAgBV,EAAgB,CAAC,CACnC,EAEC,WAAE,sBAAsB,EAC3B,EAEE,CACE,CAAC,EAAG,mBAAmB,EACvB,CAAC,EAAG,oBAAoB,EACxB,CAAC,EAAG,oBAAoB,EACxB,CAAC,GAAI,qBAAqB,EAC1B,CAAC,GAAI,qBAAqB,CAC5B,EACA,IAAI,CAAC,CAACE,EAAIW,CAAQ,OAClB,SAAC,GAAAvB,QAAM,SAAN,CACE,UAAAY,IAAO,GAAK,YACb,QAAC,UACC,KAAK,SACL,UAAW,mCAAmC,OAAAA,IAAO,EAAI,OAAS,IAAK,OAAAU,IAAaV,EAAK,KAAO,IAChG,MAAO,EAAEW,CAAQ,EACjB,QAAS,IAAM,CACbH,EAAgBT,EAAkBC,CAAE,CAAC,CACvC,EAEC,SAAAA,IAAO,EAAI,EAAE,YAAY,EAAIA,EAChC,IAXmBA,CAYrB,CACD,GACH,KAEA,sBACE,qBAAC,UACC,KAAK,SACL,UAAW,uCAAuC,OAAAlB,EAAK,OAAS,MAAQ,KAAO,IAC/E,MAAO,EAAE,uBAAuB,EAChC,QAAS,IAAG,CAAQyB,EAAe,CAAE,KAAM,MAAO,SAAUX,GAAWd,CAAI,CAAE,CAAC,GAE7E,WAAE,kBAAkB,EACvB,EAEE,CACE,CAAC,EAAG,mBAAmB,EACvB,CAAC,EAAG,oBAAoB,EACxB,CAAC,EAAG,oBAAoB,EACxB,CAAC,GAAI,qBAAqB,EAC1B,CAAC,GAAI,qBAAqB,CAC5B,EACA,IAAI,CAAC,CAACa,EAAGgB,CAAQ,OACjB,SAAC,GAAAvB,QAAM,SAAN,CACE,UAAAO,IAAM,GAAK,YACZ,QAAC,UACC,KAAK,SACL,UAAW,mCAAmC,OAAAA,IAAM,EAAI,OAAS,IAAK,OAAAb,EAAK,OAAS,cAAgBA,EAAK,QAAUa,EAAI,KAAO,IAC9H,MAAO,EAAEgB,CAAQ,EACjB,QAAS,IAAG,CAAQJ,EAAeb,EAAWC,CAAC,CAAC,GAE/C,SAAAA,IAAM,EAAI,EAAE,YAAY,EAAIA,EAC/B,IATmBA,CAUrB,CACD,GACH,KAEF,QAAC,UACC,KAAK,SACL,UAAU,sDACV,QAAS,IAAG,CAAQM,EAAW,CAACL,GAAWd,CAAI,CAAC,GAE/C,SAAAc,GAAWd,CAAI,EAAI,EAAE,eAAe,EAAI,EAAE,eAAe,EAC5D,GACF,EAECc,GAAWd,CAAI,KACd,QAAC,OAAI,UAAU,iBACZ,SAAA8B,GAAYH,EAAwB3B,EAAK,MAAQ,CAAC,EAAGG,CAAQ,EAChE,EACE,MACN,CAEJ,CAEA,SAAS2B,GAAYC,EAAmB5B,EAAoB,CAC1D,IAAM6B,EAAIT,GAAI,EACRU,EAAMF,EAAQ,IAAKG,GAAQA,EAAI,YAAY,CAAC,EAE5CC,EAAmBC,GACvB,GAAG,OAAAC,GAAgBL,EAAE,KAAK,GAAI,OAAAI,IAAS,GAAK,GAAK,MAAM,OAAAA,IAEnDE,EAAY,OAAO,OAAOnC,CAAQ,EAClCoC,EAAOD,EAAU,OAAS,KAAK,IAAI,GAAGA,CAAS,EAAI,EACnDE,EAAOF,EAAU,OAAS,KAAK,IAAI,GAAGA,CAAS,EAAI,EAEzD,OAAO,OAAO,QAAQnC,CAAQ,EAC3B,KAAK,CAACsC,EAAGC,IAAMD,EAAE,CAAC,EAAE,YAAY,EAAE,cAAcC,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC,EACnE,IAAI,CAAC,CAACR,EAAKS,CAAC,IAAM,CACjB,IAAMC,EAASV,EAAI,YAAY,EACzBW,EAAWC,GAASL,GAAM,KAAK,IAAI,EAAMA,CAAC,EAAGE,EAAGJ,EAAMC,EAAM,IAAO,GAAK,EACxEO,EAAUD,GAASL,GAAM,KAAK,IAAI,EAAMA,CAAC,EAAGE,EAAGJ,EAAMC,EAAM,GAAK,CAAG,EACnEQ,EAA6B,CAAE,SAAU,GAAG,OAAAH,EAAS,SAAS,EAAC,KAAK,QAAAE,CAAQ,EAE5EE,EACJhB,EAAI,SAAW,EAAI,KAAQA,EAAI,SAASW,CAAM,KAQ5C,QAAC,KACC,KAAMT,EACJF,EACG,OAAQiB,GAAMA,IAAMN,CAAM,EAC1B,IAAIO,EAAS,EACb,KAAK,GAAG,CACb,EACA,UAAU,uBACX,kBAED,KAjBA,QAAC,KACC,KAAMhB,EAAgBF,EAAI,OAAO,CAACW,CAAM,CAAC,EAAE,IAAIO,EAAS,EAAE,KAAK,GAAG,CAAC,EACnE,UAAU,uBACX,kBAED,EAeJ,SACE,SAAC,GAAA7C,QAAM,SAAN,CACC,qBAAC,KAAE,KAAM6B,EAAgBgB,GAAUjB,CAAG,CAAC,EAAG,UAAU,eAAe,MAAOc,EACvE,SAAAd,EACH,EACCe,IAJkBf,CAKrB,CAEJ,CAAC,CACL,CAWA,SAASY,GACPM,EACAC,EACA,EACA7C,EACA,EACA8C,EACQ,CACR,IAAMC,EAAQH,EAAE5C,EAAI,CAAC,EAErB,OADcA,EAAI,EAAI,KAAQ+C,IAAU,EAAI,EAAMH,EAAEC,EAAI,CAAC,EAAIE,IAC7CD,EAAI,GAAK,CAC3B,ClD7NwB,IAAAE,GAAA,QApBxB,SAASC,GAASC,EAAkC,CAClD,OAAO,SAAS,cAAcA,CAAQ,CACxC,CAEA,SAASC,IAAqB,CAC5B,IAAMC,EAAK,SAAS,cAAc,UAAU,EACxCA,GAAIA,EAAG,aAAa,gBAAiB,EAAE,CAC7C,CAEA,SAASC,GAAY,CAAE,SAAAC,CAAS,EAA4B,CAC1D,6BAAgB,IAAM,CACpBH,GAAa,CACf,EAAG,CAAC,CAAC,EAEEG,CACT,CAEA,SAASC,GAAWC,EAA0BC,EAAuB,CACnE,IAAML,EAAKH,GAASO,CAAgB,EAC/BJ,MACL,eAAWA,CAAE,EAAE,UAAO,QAACC,GAAA,CAAa,SAAAI,EAAK,CAAc,CACzD,CAEO,IAAMC,GAAW,GAAa,IAAM,CACzC,EAAE,eAAe,EACZC,GAAO,CACd,EAEaC,GAAmBJ,GAA8BK,GAAuB,IAAM,CACzFN,GAAWC,KAAkB,QAACM,GAAA,CAAM,QAASD,EAAQ,CAAE,CACzD,EAEaE,GAAkBP,GAA8BQ,GAAmB,IAAM,CACpFT,GAAWC,KAAkB,QAACS,GAAA,CAAS,OAAQD,EAAQ,CAAE,CAC3D,EAEaE,GAAkBV,GAA8BW,GAA+B,IAAM,CAChG,IAAMf,EAAKH,GAASO,CAAgB,EAC/BJ,MACL,eAAWA,CAAE,EAAE,UAAO,QAACgB,GAAA,CAAS,YAAaC,GAAgBF,CAAY,EAAG,CAAE,CAChF,EAEaG,GAAiBd,GAA8Be,GAAoB,IAAM,CACpFhB,GAAWC,KAAkB,QAACgB,GAAA,CAAQ,QAASD,EAAO,CAAE,CAC1D,EAEaE,GAAejB,GAA8BkB,GAAkB,IAAM,CAChFnB,GAAWC,KAAkB,QAACmB,GAAA,CAAM,QAASD,EAAO,CAAE,CACxD,EAEaE,GAAcpB,GAA8BqB,GAAe,IAAM,CAC5EtB,GAAWC,KAAkB,QAACsB,GAAA,CAAM,QAASD,EAAM,CAAE,CACvD,EAEaE,GACVvB,GAA8BwB,GAAqC,IAAM,CACxEzB,GAAWC,KAAkB,QAACyB,GAAA,CAAoB,QAASD,EAAiB,CAAE,CAChF,EAEK,SAASE,IAA8B,CAC5C,SAASC,EAAwBC,EAAsD,CACrF,OAAOA,IAAU,SAAWA,IAAU,MACxC,CACA,SAASC,GAAiD,CACxD,IAAMC,EAAW,SAAS,gBAAgB,QAAQ,YAClD,OAAIA,IAAa,SAAWA,IAAa,OAAeA,EACjD,OAAO,WAAW,8BAA8B,EAAE,QAAU,OAAS,OAC9E,CAEA,SAASC,EAA2BC,EAAyC,CAC3E,SAAS,gBAAgB,QAAQ,YAAcA,CACjD,CAEA,IAAMC,EAAwB,sBACxBC,EAAS,OAAO,aAAa,QAAQD,CAAqB,EAC5DN,EAAwBO,CAAM,GAChCH,EAA2BG,CAAM,EAGnC,IAAMC,EAAW,SAAS,cAAiC,sBAAsB,EAC5EA,GAELA,EAAS,iBAAiB,QAAUC,GAAM,CACxCA,EAAE,eAAe,EACjB,IAAMC,EAA8BR,EAAwB,IAAM,OAAS,QAAU,OACrFE,EAA2BM,CAAI,EAC/B,OAAO,aAAa,QAAQJ,EAAuBI,CAAI,CACzD,CAAC,CACH", + "names": ["require_react_production", "__commonJSMin", "exports", "REACT_ELEMENT_TYPE", "REACT_PORTAL_TYPE", "REACT_FRAGMENT_TYPE", "REACT_STRICT_MODE_TYPE", "REACT_PROFILER_TYPE", "REACT_CONSUMER_TYPE", "REACT_CONTEXT_TYPE", "REACT_FORWARD_REF_TYPE", "REACT_SUSPENSE_TYPE", "REACT_MEMO_TYPE", "REACT_LAZY_TYPE", "REACT_ACTIVITY_TYPE", "MAYBE_ITERATOR_SYMBOL", "getIteratorFn", "maybeIterable", "ReactNoopUpdateQueue", "assign", "emptyObject", "Component", "props", "context", "updater", "partialState", "callback", "ComponentDummy", "PureComponent", "pureComponentPrototype", "isArrayImpl", "noop", "ReactSharedInternals", "hasOwnProperty", "ReactElement", "type", "key", "refProp", "cloneAndReplaceKey", "oldElement", "newKey", "isValidElement", "object", "escape", "escaperLookup", "match", "userProvidedKeyEscapeRegex", "getElementKey", "element", "index", "resolveThenable", "thenable", "fulfilledValue", "error", "mapIntoArray", "children", "array", "escapedPrefix", "nameSoFar", "invokeCallback", "c", "nextNamePrefix", "i", "mapChildren", "func", "result", "count", "child", "lazyInitializer", "payload", "ctor", "moduleObject", "reportGlobalError", "event", "Children", "forEachFunc", "forEachContext", "n", "size", "fn", "config", "propName", "childArray", "defaultValue", "childrenLength", "render", "compare", "scope", "prevTransition", "currentTransition", "returnValue", "onStartTransitionFinish", "usable", "action", "initialState", "permalink", "deps", "Context", "value", "initialValue", "create", "ref", "passthrough", "reducer", "initialArg", "init", "subscribe", "getSnapshot", "getServerSnapshot", "require_react", "__commonJSMin", "exports", "module", "require_void_elements", "__commonJSMin", "exports", "module", "require_use_sync_external_store_shim_production", "__commonJSMin", "exports", "React", "is", "x", "y", "objectIs", "useState", "useEffect", "useLayoutEffect", "useDebugValue", "useSyncExternalStore$2", "subscribe", "getSnapshot", "value", "_useState", "inst", "forceUpdate", "checkIfSnapshotChanged", "latestGetSnapshot", "nextValue", "error", "useSyncExternalStore$1", "shim", "require_shim", "__commonJSMin", "exports", "module", "require_scheduler_production", "__commonJSMin", "exports", "push", "heap", "node", "index", "a", "parentIndex", "parent", "compare", "peek", "pop", "first", "last", "length", "halfLength", "leftIndex", "left", "rightIndex", "right", "b", "diff", "localPerformance", "localDate", "initialTime", "taskQueue", "timerQueue", "taskIdCounter", "currentTask", "currentPriorityLevel", "isPerformingWork", "isHostCallbackScheduled", "isHostTimeoutScheduled", "needsPaint", "localSetTimeout", "localClearTimeout", "localSetImmediate", "advanceTimers", "currentTime", "timer", "handleTimeout", "isMessageLoopRunning", "schedulePerformWorkUntilDeadline", "firstTimer", "requestHostTimeout", "taskTimeoutID", "frameInterval", "startTime", "shouldYieldToHost", "performWorkUntilDeadline", "hasMoreWork", "previousPriorityLevel", "callback", "continuationCallback", "channel", "port", "ms", "task", "fps", "eventHandler", "priorityLevel", "options", "timeout", "parentPriorityLevel", "require_scheduler", "__commonJSMin", "exports", "module", "require_react_dom_production", "__commonJSMin", "exports", "React", "formatProdErrorMessage", "code", "url", "i", "noop", "Internals", "REACT_PORTAL_TYPE", "createPortal$1", "children", "containerInfo", "implementation", "key", "ReactSharedInternals", "getCrossOriginStringAs", "as", "input", "container", "fn", "previousTransition", "previousUpdatePriority", "href", "options", "crossOrigin", "integrity", "fetchPriority", "form", "a", "action", "initialState", "permalink", "require_react_dom", "__commonJSMin", "exports", "module", "checkDCE", "err", "require_react_dom_client_production", "__commonJSMin", "exports", "Scheduler", "React", "ReactDOM", "formatProdErrorMessage", "code", "url", "i", "isValidContainer", "node", "getNearestMountedFiber", "fiber", "nearestMounted", "getSuspenseInstanceFromFiber", "suspenseState", "getActivityInstanceFromFiber", "activityState", "assertIsMounted", "findCurrentFiberUsingSlowPath", "alternate", "a", "b", "parentA", "parentB", "didFindChild", "child$0", "findCurrentHostFiberImpl", "tag", "assign", "REACT_LEGACY_ELEMENT_TYPE", "REACT_ELEMENT_TYPE", "REACT_PORTAL_TYPE", "REACT_FRAGMENT_TYPE", "REACT_STRICT_MODE_TYPE", "REACT_PROFILER_TYPE", "REACT_CONSUMER_TYPE", "REACT_CONTEXT_TYPE", "REACT_FORWARD_REF_TYPE", "REACT_SUSPENSE_TYPE", "REACT_SUSPENSE_LIST_TYPE", "REACT_MEMO_TYPE", "REACT_LAZY_TYPE", "REACT_ACTIVITY_TYPE", "REACT_MEMO_CACHE_SENTINEL", "MAYBE_ITERATOR_SYMBOL", "getIteratorFn", "maybeIterable", "REACT_CLIENT_REFERENCE", "getComponentNameFromType", "type", "innerType", "x", "isArrayImpl", "ReactSharedInternals", "ReactDOMSharedInternals", "sharedNotPendingObject", "valueStack", "index", "createCursor", "defaultValue", "pop", "cursor", "push", "value", "contextStackCursor", "contextFiberStackCursor", "rootInstanceStackCursor", "hostTransitionProviderCursor", "pushHostContainer", "nextRootInstance", "getOwnHostContext", "getChildHostContextProd", "popHostContainer", "pushHostContext", "context", "JSCompiler_inline_result", "popHostContext", "HostTransitionContext", "prefix", "suffix", "describeBuiltInComponentFrame", "name", "match", "reentry", "describeNativeComponentFrame", "fn", "construct", "previousPrepareStackTrace", "RunInRootFrame", "Fake", "control", "x$1", "x$2", "sample", "namePropDescriptor", "_RunInRootFrame$Deter", "sampleStack", "controlStack", "sampleLines", "controlLines", "frame", "describeFiber", "childFiber", "getStackByFiberInDevAndProd", "workInProgress", "info", "previous", "hasOwnProperty", "scheduleCallback$3", "cancelCallback$1", "shouldYield", "requestPaint", "now", "getCurrentPriorityLevel", "ImmediatePriority", "UserBlockingPriority", "NormalPriority$1", "LowPriority", "IdlePriority", "log$1", "unstable_setDisableYieldValue", "rendererID", "injectedHook", "setIsStrictModeForDevtools", "newIsStrictMode", "err", "clz32", "clz32Fallback", "log", "LN2", "nextTransitionUpdateLane", "nextTransitionDeferredLane", "nextRetryLane", "getHighestPriorityLanes", "lanes", "pendingSyncLanes", "getNextLanes", "root", "wipLanes", "rootHasPendingCommit", "pendingLanes", "nextLanes", "suspendedLanes", "pingedLanes", "nonIdlePendingLanes", "checkIfRootIsPrerendering", "renderLanes", "computeExpirationTime", "lane", "currentTime", "claimNextRetryLane", "createLaneMap", "initial", "laneMap", "markRootUpdated$1", "updateLane", "markRootFinished", "finishedLanes", "remainingLanes", "spawnedLane", "updatedLanes", "suspendedRetryLanes", "previouslyPendingLanes", "entanglements", "expirationTimes", "hiddenUpdates", "index$7", "hiddenUpdatesForLane", "update", "markSpawnedDeferredLane", "entangledLanes", "spawnedLaneIndex", "markRootEntangled", "rootEntangledLanes", "index$8", "getBumpedLaneForHydration", "renderLane", "getBumpedLaneForHydrationByLane", "lanesToEventPriority", "resolveUpdatePriority", "updatePriority", "getEventPriority", "runWithPriority", "priority", "previousPriority", "randomKey", "internalInstanceKey", "internalPropsKey", "internalContainerInstanceKey", "internalEventHandlersKey", "internalEventHandlerListenersKey", "internalEventHandlesSetKey", "internalRootNodeResourcesKey", "internalHoistableMarker", "detachDeletedInstance", "getClosestInstanceFromNode", "targetNode", "targetInst", "parentNode", "getParentHydrationBoundary", "getInstanceFromNode", "getNodeFromInstance", "inst", "getResourcesFromRoot", "resources", "markNodeAsHoistable", "allNativeEvents", "registrationNameDependencies", "registerTwoPhaseEvent", "registrationName", "dependencies", "registerDirectEvent", "VALID_ATTRIBUTE_NAME_REGEX", "illegalAttributeNameCache", "validatedAttributeNameCache", "isAttributeNameSafe", "attributeName", "setValueForAttribute", "prefix$10", "setValueForKnownAttribute", "setValueForNamespacedAttribute", "namespace", "getToStringValue", "isCheckable", "elem", "trackValueOnNode", "valueField", "currentValue", "descriptor", "get", "set", "track", "updateValueIfChanged", "tracker", "lastValue", "getActiveElement", "doc", "e", "escapeSelectorAttributeValueInsideDoubleQuotesRegex", "escapeSelectorAttributeValueInsideDoubleQuotes", "ch", "updateInput", "element", "lastDefaultValue", "checked", "defaultChecked", "setDefaultValue", "initInput", "isHydrating", "updateOptions", "multiple", "propValue", "setDefaultSelected", "updateTextarea", "initTextarea", "children", "setTextContent", "text", "firstChild", "unitlessNumbers", "setValueForStyle", "style", "styleName", "isCustomProperty", "setValueForStyles", "styles", "prevStyles", "styleName$16", "styleName$17", "isCustomElement", "tagName", "aliases", "isJavaScriptProtocol", "sanitizeURL", "noop$1", "currentReplayingEvent", "getEventTarget", "nativeEvent", "restoreTarget", "restoreQueue", "restoreStateOfTarget", "target", "internalInstance", "props", "otherNode", "otherProps", "isInsideEventHandler", "batchedUpdates$1", "flushSyncWork$1", "getListener", "stateNode", "canUseDOM", "passiveBrowserEventsSupported", "options", "startText", "fallbackText", "getData", "start", "startValue", "startLength", "end", "endValue", "endLength", "minEnd", "getEventCharCode", "keyCode", "functionThatReturnsTrue", "functionThatReturnsFalse", "createSyntheticEvent", "Interface", "SyntheticBaseEvent", "reactName", "reactEventType", "nativeEventTarget", "propName", "event", "EventInterface", "SyntheticEvent", "UIEventInterface", "SyntheticUIEvent", "lastMovementX", "lastMovementY", "lastMouseEvent", "MouseEventInterface", "getEventModifierState", "SyntheticMouseEvent", "DragEventInterface", "SyntheticDragEvent", "FocusEventInterface", "SyntheticFocusEvent", "AnimationEventInterface", "SyntheticAnimationEvent", "ClipboardEventInterface", "SyntheticClipboardEvent", "CompositionEventInterface", "SyntheticCompositionEvent", "normalizeKey", "translateToKey", "modifierKeyToProp", "modifierStateGetter", "keyArg", "KeyboardEventInterface", "key", "SyntheticKeyboardEvent", "PointerEventInterface", "SyntheticPointerEvent", "TouchEventInterface", "SyntheticTouchEvent", "TransitionEventInterface", "SyntheticTransitionEvent", "WheelEventInterface", "SyntheticWheelEvent", "ToggleEventInterface", "SyntheticToggleEvent", "END_KEYCODES", "canUseCompositionEvent", "documentMode", "canUseTextInputEvent", "useFallbackCompositionData", "SPACEBAR_CHAR", "hasSpaceKeypress", "isFallbackCompositionEnd", "domEventName", "getDataFromCustomEvent", "isComposing", "getNativeBeforeInputChars", "getFallbackBeforeInputChars", "supportedInputTypes", "isTextInputElement", "nodeName", "createAndAccumulateChangeEvent", "dispatchQueue", "accumulateTwoPhaseListeners", "activeElement$1", "activeElementInst$1", "runEventInBatch", "processDispatchQueue", "getInstIfValueChanged", "getTargetInstForChangeEvent", "isInputEventSupported", "isSupported$jscomp$inline_427", "element$jscomp$inline_428", "JSCompiler_inline_result$jscomp$286", "stopWatchingForValueChange", "handlePropertyChange", "handleEventsForInputEventPolyfill", "getTargetInstForInputEventPolyfill", "getTargetInstForClickEvent", "getTargetInstForInputOrChangeEvent", "is", "y", "objectIs", "shallowEqual", "objA", "objB", "keysA", "keysB", "currentKey", "getLeafNode", "getNodeForCharacterOffset", "offset", "nodeEnd", "containsNode", "outerNode", "innerNode", "getActiveElementDeep", "containerInfo", "hasSelectionCapabilities", "skipSelectionChangeEvent", "activeElement", "activeElementInst", "lastSelection", "mouseDown", "constructSelectEvent", "makePrefixMap", "styleProp", "eventName", "prefixes", "vendorPrefixes", "prefixedEventNames", "getVendorPrefixedEventName", "prefixMap", "ANIMATION_END", "ANIMATION_ITERATION", "ANIMATION_START", "TRANSITION_RUN", "TRANSITION_START", "TRANSITION_CANCEL", "TRANSITION_END", "topLevelEventsToReactNames", "simpleEventPluginEvents", "registerSimpleEvent", "reportGlobalError", "error", "concurrentQueues", "concurrentQueuesIndex", "concurrentlyUpdatedLanes", "finishQueueingConcurrentUpdates", "endIndex", "queue", "pending", "markUpdateLaneFromFiberToRoot", "enqueueUpdate$1", "enqueueConcurrentHookUpdate", "getRootForUpdatedFiber", "enqueueConcurrentRenderForLane", "sourceFiber", "isHidden", "parent", "nestedUpdateCount", "rootWithNestedUpdates", "emptyContextObject", "FiberNode", "pendingProps", "mode", "createFiberImplClass", "shouldConstruct", "Component", "createWorkInProgress", "current", "resetWorkInProgress", "createFiberFromTypeAndProps", "owner", "fiberTag", "isHostHoistableType", "createFiberFromFragment", "elements", "createFiberFromText", "content", "createFiberFromDehydratedFragment", "dehydratedNode", "createFiberFromPortal", "portal", "CapturedStacks", "createCapturedValueAtFiber", "source", "existing", "forkStack", "forkStackIndex", "treeForkProvider", "treeForkCount", "idStack", "idStackIndex", "treeContextProvider", "treeContextId", "treeContextOverflow", "pushTreeFork", "totalChildren", "pushTreeId", "baseIdWithLeadingBit", "baseLength", "length", "numberOfOverflowBits", "pushMaterializedTreeId", "popTreeContext", "restoreSuspendedTreeContext", "suspendedContext", "hydrationParentFiber", "nextHydratableInstance", "hydrationErrors", "rootOrSingletonContext", "HydrationMismatchException", "throwOnHydrationMismatch", "queueHydrationError", "prepareToHydrateHostInstance", "instance", "listenToNonDelegatedEvent", "mediaEventTypes", "checkForUnmatchedText", "popToNextHostParent", "popHydrationState", "JSCompiler_temp", "shouldSetTextContent", "getNextHydratableInstanceAfterHydrationBoundary", "isSingletonScope", "previousHydratableOnEnteringScopedSingleton", "getNextHydratable", "resetHydrationState", "upgradeHydrationErrorsToRecoverable", "queuedErrors", "workInProgressRootRecoverableErrors", "valueCursor", "currentlyRenderingFiber$1", "lastContextDependency", "pushProvider", "providerFiber", "nextValue", "popProvider", "scheduleContextWorkOnParentPath", "propagationRoot", "propagateContextChanges", "contexts", "forcePropagateEntireTree", "list", "nextFiber", "dependency", "propagateParentContextChanges", "isInsidePropagationBailout", "currentParent", "checkIfContextChanged", "currentDependencies", "prepareToReadContext", "readContext", "readContextForConsumer", "readContextDuringReconciliation", "consumer", "AbortControllerLocal", "listeners", "signal", "listener", "scheduleCallback$2", "NormalPriority", "CacheContext", "createCache", "releaseCache", "cache", "currentEntangledListeners", "currentEntangledPendingCount", "currentEntangledLane", "currentEntangledActionThenable", "entangleAsyncAction", "transition", "thenable", "entangledListeners", "requestTransitionLane", "resolve", "pingEngtangledActionScope", "chainThenableValue", "result", "thenableWithOverride", "prevOnStartTransitionFinish", "returnValue", "globalMostRecentTransitionTime", "resumedCache", "peekCacheFromPool", "cacheResumedFromPreviousRender", "workInProgressRoot", "pushTransition", "offscreenWorkInProgress", "prevCachePool", "getSuspendedCache", "cacheFromPool", "SuspenseException", "SuspenseyCommitException", "SuspenseActionException", "noopSuspenseyCommitThenable", "isThenableResolved", "trackUsedThenable", "thenableState", "checkIfUseWrappedInAsyncCatch", "fulfilledValue", "fulfilledThenable", "rejectedThenable", "suspendedThenable", "resolveLazy", "lazyType", "init", "getSuspendedThenable", "rejectedReason", "thenableState$1", "thenableIndexCounter$1", "unwrapThenable", "coerceRef", "throwOnInvalidObjectTypeImpl", "returnFiber", "newChild", "createChildReconciler", "shouldTrackSideEffects", "deleteChild", "childToDelete", "deletions", "deleteRemainingChildren", "currentFirstChild", "mapRemainingChildren", "existingChildren", "useFiber", "placeChild", "newFiber", "lastPlacedIndex", "newIndex", "placeSingleChild", "updateTextNode", "textContent", "updateElement", "elementType", "updateFragment", "updatePortal", "fragment", "createChild", "updateSlot", "oldFiber", "updateFromMap", "newIdx", "reconcileChildrenArray", "newChildren", "resultingFirstChild", "previousNewFiber", "nextOldFiber", "child", "reconcileChildrenIterator", "step", "reconcileChildFibersImpl", "firstChildFiber", "reconcileChildFibers", "mountChildFibers", "hasForceUpdate", "initializeUpdateQueue", "cloneUpdateQueue", "createUpdate", "enqueueUpdate", "updateQueue", "executionContext", "entangleTransitions", "queueLanes", "enqueueCapturedUpdate", "capturedUpdate", "newFirst", "newLast", "clone", "didReadFromEntangledAsyncAction", "suspendIfUpdateReadFromEntangledAsyncAction", "entangledActionThenable", "processUpdateQueue", "workInProgress$jscomp$0", "instance$jscomp$0", "firstBaseUpdate", "lastBaseUpdate", "pendingQueue", "lastPendingUpdate", "firstPendingUpdate", "newState", "isHiddenUpdate", "workInProgressRootRenderLanes", "workInProgressRootSkippedLanes", "callCallback", "callback", "commitCallbacks", "callbacks", "currentTreeHiddenStackCursor", "prevEntangledRenderLanesCursor", "pushHiddenContext", "entangledRenderLanes", "reuseHiddenContextOnStack", "popHiddenContext", "suspenseHandlerStackCursor", "shellBoundary", "pushPrimaryTreeSuspenseHandler", "handler", "suspenseStackCursor", "pushDehydratedActivitySuspenseHandler", "pushOffscreenSuspenseHandler", "reuseSuspenseHandlerOnStack", "popSuspenseHandler", "findFirstSuspended", "row", "state", "isSuspenseInstancePending", "isSuspenseInstanceFallback", "currentlyRenderingFiber", "currentHook", "workInProgressHook", "didScheduleRenderPhaseUpdate", "didScheduleRenderPhaseUpdateDuringThisPass", "shouldDoubleInvokeUserFnsInHooksDEV", "localIdCounter", "thenableIndexCounter", "globalClientIdCounter", "throwInvalidHookError", "areHookInputsEqual", "nextDeps", "prevDeps", "renderWithHooks", "secondArg", "nextRenderLanes", "HooksDispatcherOnMount", "HooksDispatcherOnUpdate", "renderWithHooksAgain", "finishRenderingHooks", "ContextOnlyDispatcher", "didRenderTooFewHooks", "didReceiveUpdate", "numberOfReRenders", "HooksDispatcherOnRerender", "TransitionAwareHostComponent", "dispatcher", "maybeThenable", "useThenable", "checkDidRenderIdHook", "didRenderIdHook", "bailoutHooks", "resetHooksOnUnwind", "mountWorkInProgressHook", "hook", "updateWorkInProgressHook", "nextCurrentHook", "nextWorkInProgressHook", "createFunctionComponentUpdateQueue", "use", "usable", "useMemoCache", "size", "memoCache", "array", "basicStateReducer", "action", "updateReducer", "reducer", "updateReducerImpl", "baseQueue", "baseFirst", "newBaseQueueFirst", "newBaseQueueLast", "didReadFromEntangledAsyncAction$60", "revertLane", "rerenderReducer", "dispatch", "lastRenderPhaseUpdate", "updateSyncExternalStore", "subscribe", "getSnapshot", "getServerSnapshot", "isHydrating$jscomp$0", "snapshotChanged", "updateEffect", "subscribeToStore", "pushSimpleEffect", "updateStoreInstance", "pushStoreConsistencyCheck", "renderedSnapshot", "nextSnapshot", "checkIfSnapshotChanged", "forceStoreRerender", "latestGetSnapshot", "scheduleUpdateOnFiber", "mountStateImpl", "initialState", "initialStateInitializer", "updateOptimisticImpl", "passthrough", "dispatchActionState", "actionQueue", "setPendingState", "setState", "payload", "isRenderPhaseUpdate", "actionNode", "runActionStateAction", "prevState", "prevTransition", "currentTransition", "onStartTransitionFinish", "handleActionReturnValue", "onActionError", "error$66", "nextState", "onActionSuccess", "notifyActionListeners", "last", "actionStateReducer", "oldState", "mountActionState", "initialStateProp", "ssrFormState", "JSCompiler_inline_result$jscomp$0", "inRootOrSingleton", "dispatchSetState", "dispatchOptimisticSetState", "updateActionState", "stateHook", "updateActionStateImpl", "currentStateHook", "actionStateActionEffect", "rerenderActionState", "create", "deps", "updateRef", "mountEffectImpl", "fiberFlags", "hookFlags", "updateEffectImpl", "mountEffect", "useEffectEventImpl", "componentUpdateQueue", "events", "updateEvent", "ref", "updateInsertionEffect", "updateLayoutEffect", "imperativeHandleEffect", "refCleanup", "updateImperativeHandle", "mountDebugValue", "updateCallback", "updateMemo", "nextCreate", "mountDeferredValueImpl", "initialValue", "requestDeferredLane", "updateDeferredValueImpl", "prevValue", "startTransition", "pendingState", "finishedState", "thenableForFinishedState", "dispatchSetStateInternal", "requestUpdateLane", "noop", "startHostTransition", "formFiber", "formData", "ensureFormComponentIsStateful", "requestFormReset$1", "existingStateHook", "initialResetState", "useHostTransitionStatus", "updateId", "updateRefresh", "refreshCache", "provider", "root$69", "dispatchReducerAction", "enqueueRenderPhaseUpdate", "entangleTransitionUpdate", "currentState", "eagerState", "throwIfDuringRender", "initialArg", "identifierPrefix", "idWithLeadingBit", "booleanOrThenable", "applyDerivedStateFromProps", "ctor", "getDerivedStateFromProps", "nextProps", "classComponentUpdater", "checkShouldComponentUpdate", "oldProps", "newProps", "nextContext", "callComponentWillReceiveProps", "resolveClassComponentProps", "baseProps", "propName$73", "defaultOnUncaughtError", "defaultOnCaughtError", "defaultOnRecoverableError", "logUncaughtError", "errorInfo", "onUncaughtError", "e$74", "logCaughtError", "boundary", "onCaughtError", "e$75", "createRootErrorUpdate", "createClassErrorUpdate", "initializeClassErrorUpdate", "getDerivedStateFromError", "legacyErrorBoundariesThatAlreadyFailed", "stack", "throwException", "rootRenderLanes", "renderDidSuspendDelayIfPossible", "workInProgressRootExitStatus", "attachPingListener", "wrapperError", "workInProgressRootConcurrentErrors", "SelectiveHydrationException", "reconcileChildren", "nextChildren", "updateForwardRef", "propsWithoutRef", "bailoutOnAlreadyFinishedWork", "updateMemoComponent", "updateSimpleMemoComponent", "checkScheduledUpdateOrContext", "prevProps", "updateFunctionComponent", "updateOffscreenComponent", "deferHiddenOffscreenComponent", "bailoutOffscreenComponent", "nextBaseLanes", "remainingChildLanes", "mountActivityChildren", "mountWorkInProgressOffscreenFiber", "retryActivityComponentWithoutHydrating", "updateActivityComponent", "didSuspend", "canHydrateHydrationBoundary", "dehydrated", "markRef", "replayFunctionComponent", "updateClassComponent", "contextType", "unresolvedOldProps", "oldContext", "contextType$jscomp$0", "mountHostRootWithoutHydrating", "SUSPENDED_MARKER", "mountSuspenseOffscreenState", "getRemainingWorkInPrimaryTree", "primaryTreeDidDefer", "workInProgressDeferredLane", "updateSuspenseComponent", "showFallback", "nextPrimaryChildren", "mountSuspensePrimaryChildren", "retrySuspenseComponentWithoutHydrating", "digest", "primaryChildren", "offscreenProps", "scheduleSuspenseWorkOnFiber", "initSuspenseListRenderState", "isBackwards", "tail", "lastContentRow", "tailMode", "renderState", "updateSuspenseListComponent", "revealOrder", "suspenseContext", "shouldForceFallback", "attemptEarlyBailoutIfNoScheduledUpdate", "state$102", "didSuspendBefore", "beginWork", "$$typeof", "getResource", "getOwnerDocumentFromRootContainer", "setInitialProperties", "resolveSingletonInstance", "canHydrateInstance", "canHydrateTextInstance", "markUpdate", "preloadInstanceAndSuspendIfNeeded", "shouldRemainOnPreviousScreen", "preloadResourceAndSuspendIfNeeded", "resource", "preloadResource", "scheduleRetryEffect", "retryQueue", "workInProgressSuspendedRetryLanes", "cutOffTailIfNeeded", "hasRenderedATailFallback", "lastTailNode", "lastTailNode$106", "bubbleProperties", "completedWork", "didBailout", "newChildLanes", "subtreeFlags", "child$107", "completeWork", "nextResource", "ownerDocument", "listenToAllSupportedEvents", "workInProgressRootRenderTargetTime", "unwindWork", "unwindInterruptedWork", "interruptedWork", "commitHookEffectListMount", "flags", "finishedWork", "lastEffect", "firstEffect", "captureCommitPhaseError", "commitHookEffectListUnmount", "nearestMountedAncestor$jscomp$0", "destroy", "nearestMountedAncestor", "destroy_", "commitClassCallbacks", "safelyCallComponentWillUnmount", "safelyAttachRef", "instanceToUse", "safelyDetachRef", "error$140", "commitHostMount", "commitHostUpdate", "domElement", "updateProperties", "isHostParent", "getHostSibling", "insertOrAppendPlacementNodeIntoContainer", "before", "insertOrAppendPlacementNode", "commitHostSingletonAcquisition", "singleton", "attributes", "offscreenSubtreeIsHidden", "offscreenSubtreeWasHidden", "needsFormReset", "PossiblyWeakSet", "nextEffect", "commitBeforeMutationEffects", "eventsEnabled", "_enabled", "selection", "anchorOffset", "focusNode", "e$20", "indexWithinAnchor", "indexWithinFocus", "next", "selectionInformation", "resolvedPrevProps", "clearContainerSparingly", "commitLayoutEffectOnFiber", "finishedRoot", "recursivelyTraverseLayoutEffects", "error$139", "commitActivityHydrationCallbacks", "commitSuspenseHydrationCallbacks", "retryDehydratedSuspenseBoundary", "registerSuspenseInstanceRetry", "prevOffscreenSubtreeWasHidden", "recursivelyTraverseReappearLayoutEffects", "detachFiberAfterEffects", "hostParent", "hostParentIsContainer", "recursivelyTraverseDeletionEffects", "commitDeletionEffectsOnFiber", "deletedFiber", "prevHostParent", "prevHostParentIsContainer", "releaseSingletonInstance", "clearHydrationBoundary", "retryIfBlockedOn", "getRetryCache", "retryCache", "attachSuspenseRetryListeners", "wakeables", "wakeable", "retry", "resolveRetryWakeable", "recursivelyTraverseMutationEffects", "root$jscomp$0", "parentFiber", "commitMutationEffectsOnFiber", "currentHoistableRoot", "commitReconciliationEffects", "hoistableRoot", "currentResource", "maybeNodes", "getHydratableHoistableCache", "mountHoistable", "acquireResource", "tagCaches", "getHoistableRoot", "recursivelyResetForms", "globalMostRecentFallbackTime", "wasHidden", "prevOffscreenSubtreeIsHidden", "recursivelyTraverseDisappearLayoutEffects", "display", "hideOrUnhideDehydratedBoundary", "hostParentFiber", "parent$141", "before$142", "parent$143", "before$144", "finishedRoot$jscomp$0", "includeWorkInProgressEffects", "hiddenCallbacks", "commitOffscreenPassiveMountEffects", "previousCache", "commitCachePassiveMountEffect", "recursivelyTraversePassiveMountEffects", "committedLanes", "committedTransitions", "commitPassiveMountOnFiber", "_finishedWork$memoize2", "id", "onPostCommit", "recursivelyTraverseAtomicPassiveEffects", "recursivelyTraverseReconnectPassiveEffects", "committedLanes$jscomp$0", "committedTransitions$jscomp$0", "suspenseyCommitFlag", "recursivelyAccumulateSuspenseyCommit", "suspendedState", "accumulateSuspenseyCommitOnFiber", "suspendResource", "previousHoistableRoot", "detachAlternateSiblings", "previousFiber", "recursivelyTraversePassiveUnmountEffects", "commitPassiveUnmountEffectsInsideOfDeletedTree_begin", "commitPassiveUnmountOnFiber", "recursivelyTraverseDisconnectPassiveEffects", "deletedSubtreeRoot", "sibling", "DefaultAsyncDispatcher", "resourceType", "cacheForType", "PossiblyWeakMap", "workInProgressSuspendedReason", "workInProgressThrownValue", "workInProgressRootDidSkipSuspendedSiblings", "workInProgressRootIsPrerendering", "workInProgressRootDidAttachPingListener", "workInProgressRootInterleavedUpdatedLanes", "workInProgressRootPingedLanes", "workInProgressRootDidIncludeRecursiveRenderUpdate", "workInProgressTransitions", "pendingEffectsStatus", "pendingEffectsRoot", "pendingFinishedWork", "pendingEffectsLanes", "pendingEffectsRemainingLanes", "pendingPassiveTransitions", "pendingRecoverableErrors", "prepareFreshStack", "markRootSuspended", "ensureRootIsScheduled", "performWorkOnRoot", "forceSync", "shouldTimeSlice", "exitStatus", "renderRootConcurrent", "renderRootSync", "renderWasConcurrent", "isRenderConsistentWithExternalStores", "wasRootDehydrated", "scheduleTimeout", "commitRootWhenReady", "recoverableErrors", "transitions", "didIncludeRenderPhaseUpdate", "didSkipSuspendedSiblings", "suspendedCommitReason", "completedRenderStartTime", "completedRenderEndTime", "timeoutOffset", "waitForCommitToBeReady", "commitRoot", "check", "didAttemptEntireTree", "index$6", "flushSyncWorkAcrossRoots_impl", "resetWorkInProgressStack", "timeoutHandle", "cancelTimeout", "allEntangledLanes", "index$4", "handleThrow", "thrownValue", "pushDispatcher", "prevDispatcher", "pushAsyncDispatcher", "prevAsyncDispatcher", "shouldYieldForPrerendering", "prevExecutionContext", "unitOfWork", "reason", "throwAndUnwindWorkLoop", "workLoopSync", "thrownValue$165", "performUnitOfWork", "replaySuspendedUnitOfWork", "hostFiber", "completeUnitOfWork", "workLoopConcurrentByScheduler", "thrownValue$167", "suspendedReason", "unwindUnitOfWork", "skipSiblings", "flushPendingEffects", "scheduleCallback$1", "flushPassiveEffects", "flushMutationEffects", "flushLayoutEffects", "flushSpawnedWork", "rootMutationHasEffect", "priorSelectionInformation", "curFocusedElem", "priorFocusedElem", "priorSelectionRange", "win", "start$jscomp$0", "end$jscomp$0", "startMarker", "endMarker", "range", "rootHasLayoutEffect", "releaseRootPooledCache", "onRecoverableError", "recoverableError", "renderPriority", "captureCommitPhaseErrorOnRoot", "rootFiber", "pingCache", "threadIDs", "pingSuspendedRoot", "retryTimedOutBoundary", "boundaryFiber", "retryLane", "priorityLevel", "firstScheduledRoot", "lastScheduledRoot", "didScheduleMicrotask", "mightHavePendingSyncWork", "isFlushingWork", "currentEventTransitionLane", "scheduleImmediateRootScheduleTask", "syncTransitionLanes", "onlyLegacy", "didPerformSomeWork", "root$170", "performSyncWorkOnRoot", "processRootScheduleInImmediateTask", "processRootScheduleInMicrotask", "shouldAttemptEagerTransition", "prev", "scheduleTaskForRootDuringMicrotask", "index$5", "expirationTime", "performWorkOnRootViaSchedulerTask", "didTimeout", "originalCallbackNode", "workInProgressRootRenderLanes$jscomp$0", "scheduleMicrotask", "actionScopeLane", "coerceFormActionProp", "actionProp", "createFormDataWithSubmitter", "form", "submitter", "temp", "extractEvents$1", "maybeTargetInst", "i$jscomp$inline_1577", "eventName$jscomp$inline_1578", "domEventName$jscomp$inline_1579", "capitalizedEvent$jscomp$inline_1580", "nonDelegatedEvents", "eventSystemFlags", "_dispatchQueue$i", "previousInstance", "i$jscomp$0", "_dispatchListeners$i", "currentTarget", "targetElement", "listenerSetKey", "addTrappedEventListener", "listenToNativeEvent", "isCapturePhaseListener", "listeningMarker", "rootContainerElement", "targetContainer", "listenerWrapper", "dispatchDiscreteEvent", "dispatchContinuousEvent", "dispatchEvent", "dispatchEventForPluginEventSystem", "targetInst$jscomp$0", "ancestorInst", "nodeTag", "container", "grandTag", "SyntheticEventCtor", "inCapturePhase", "accumulateTargetOnly", "reactEventName", "lastHostComponent", "_instance", "createDispatchListener", "getParent", "tempB", "accumulateEnterLeaveListenersForEvent", "getTargetInstFunc", "handleEventFunc", "fallbackData", "eventType", "targetFiber", "captureName", "_instance2", "common", "_instance3", "NORMALIZE_NEWLINES_REGEX", "NORMALIZE_NULL_AND_REPLACEMENT_REGEX", "normalizeMarkupForTextOrAttribute", "markup", "serverText", "clientText", "setProp", "setPropOnCustomElement", "hasSrc", "hasSrcSet", "propKey", "propValue$184", "lastProps", "lastProp", "propKey$201", "propKey$217", "propKey$222", "propKey$227", "propKey$232", "isLikelyStaticResource", "initiatorType", "estimateBandwidth", "count", "bits", "resourceEntries", "entry", "transferSize", "duration", "overlapEntry", "overlapStartTime", "overlapTransferSize", "overlapInitiatorType", "namespaceURI", "parentNamespace", "currentPopstateTransitionEvent", "localPromise", "handleErrorInNextTick", "parentInstance", "hydrationInstance", "depth", "nextNode", "node$jscomp$0", "nextNode$jscomp$0", "suspenseInstance", "anyProps", "nodeType", "data", "targetInstance", "rootContainerInstance", "preloadPropsMap", "preconnectsSet", "previousDispatcher", "flushSyncWork", "requestFormReset", "prefetchDNS", "preconnect", "preload", "preloadModule", "preinitScript", "preinitStyle", "preinitModuleScript", "previousWasRendering", "wasRendering", "formInst", "globalDocument", "preconnectAs", "rel", "href", "crossOrigin", "limitedEscapedHref", "as", "preloadSelector", "getStyleKey", "getScriptKey", "getStylesheetSelectorFromKey", "getScriptSelectorFromKey", "precedence", "adoptPreloadPropsForStylesheet", "link", "reject", "insertStylesheet", "src", "scripts", "adoptPreloadPropsForScript", "currentProps", "styles$243", "resource$244", "preloadStylesheet", "stylesheetPropsFromRawProps", "rawProps", "preloadProps", "styleProps", "instance$249", "linkInstance", "nodes", "prior", "stylesheetProps", "scriptProps", "keyAttribute", "caches", "nodeKey", "hostContext", "onUnsuspend", "estimatedBytesWithinLimit", "insertSuspendedStylesheets", "commit", "stylesheetTimer", "unsuspend", "imgTimer", "precedencesByRoot", "insertStylesheetIntoRoot", "precedences", "FiberRootNode", "hydrate", "onDefaultTransitionIndicator", "formState", "createFiberRoot", "initialChildren", "hydrationCallbacks", "isStrictMode", "getContextForSubtree", "parentComponent", "updateContainerImpl", "markRetryLaneImpl", "markRetryLaneIfNotHydrated", "attemptContinuousHydration", "attemptHydrationAtCurrentPriority", "blockedOn", "findInstanceBlockingEvent", "return_targetInst", "clearIfContinuousEvent", "queueIfContinuousEvent", "discreteReplayableEvents", "findInstanceBlockingTarget", "hasScheduledReplayAttempt", "queuedFocus", "queuedDrag", "queuedMouse", "queuedPointers", "queuedPointerCaptures", "queuedExplicitHydrationTargets", "accumulateOrCreateContinuousQueuedReplayableEvent", "existingQueuedEvent", "pointerId", "attemptExplicitHydrationTarget", "queuedTarget", "attemptReplayContinuousQueuedEvent", "queuedEvent", "targetContainers", "nextBlockedOn", "nativeEventClone", "attemptReplayContinuousQueuedEventInMap", "map", "replayUnblockedEvents", "scheduleCallbackIfUnblocked", "unblocked", "lastScheduledReplayQueue", "scheduleReplayQueueIfNeeded", "formReplayingQueue", "submitterOrAction", "unblock", "formProps", "defaultOnDefaultTransitionIndicator", "handleNavigate", "pendingResolve", "handleNavigateComplete", "isCancelled", "startFakeNavigation", "currentEntry", "ReactDOMRoot", "internalRoot", "ReactDOMHydrationRoot", "isomorphicReactPackageVersion$jscomp$inline_1840", "componentOrElement", "internals$jscomp$inline_2347", "hook$jscomp$inline_2348", "require_client", "__commonJSMin", "exports", "module", "checkDCE", "err", "require_react_jsx_runtime_production", "__commonJSMin", "exports", "REACT_ELEMENT_TYPE", "REACT_FRAGMENT_TYPE", "jsxProd", "type", "config", "maybeKey", "key", "propName", "require_jsx_runtime", "__commonJSMin", "exports", "module", "isString", "obj", "defer", "res", "rej", "promise", "resolve", "reject", "makeString", "object", "copy", "a", "s", "t", "m", "lastOfPathSeparatorRegExp", "cleanKey", "key", "canNotTraverseDeeper", "getLastOfPath", "path", "Empty", "stack", "stackIndex", "setPath", "newValue", "k", "e", "p", "last", "pushPath", "concat", "getPath", "getPathWithDefaults", "data", "defaultData", "value", "deepExtend", "target", "source", "overwrite", "prop", "regexEscape", "str", "_entityMap", "escape", "RegExpCache", "capacity", "pattern", "regExpFromCache", "regExpNew", "chars", "looksLikeObjectPathRegExpCache", "looksLikeObjectPath", "nsSeparator", "keySeparator", "possibleChars", "c", "r", "matched", "ki", "deepFind", "tokens", "current", "next", "nextPath", "j", "getCleanedCode", "code", "consoleLogger", "args", "type", "_a", "_b", "Logger", "_Logger", "concreteLogger", "options", "lvl", "prefix", "debugOnly", "moduleName", "__spreadValues", "baseLogger", "EventEmitter", "events", "listener", "event", "numListeners", "wrapper", "observer", "numTimesAdded", "i", "ResourceStore", "ns", "index", "lng", "ignoreJSONStructure", "result", "resources", "deep", "pack", "v", "postProcessor", "module", "processors", "translator", "processor", "PATH_KEY", "createProxy", "state", "handler", "proxy", "keysFromSelector", "selector", "opts", "strict", "nsList", "shouldHandleAsObject", "Translator", "_Translator", "services", "o", "opt", "resolved", "isObject", "namespaces", "wouldCheckForNsInKey", "seemsNaturalLanguage", "parts", "keys", "lastKey", "returnDetails", "namespace", "appendNamespaceToCIMode", "resUsedKey", "resExactUsedKey", "noObject", "joinArrays", "handleAsObjectInI18nFormat", "needsPluralHandling", "hasDefaultValue", "defaultValueSuffix", "defaultValueSuffixOrdinalFallback", "needsZeroSuffixLookup", "defaultValue", "resForObjHndl", "handleAsObject", "resType", "__spreadProps", "resTypeIsArray", "newKeyToUse", "deepKey", "usedDefault", "usedKey", "resForMissing", "updateMissing", "fk", "lngs", "fallbackLngs", "send", "l", "specificDefaultValue", "defaultForMissing", "language", "suffixes", "suffix", "skipOnVariables", "nestBef", "nb", "na", "nestAft", "postProcess", "postProcessorNames", "found", "exactUsedKey", "usedLng", "usedNS", "extracted", "needsContextHandling", "codes", "finalKeys", "pluralSuffix", "zeroSuffix", "ordinalPrefix", "contextKey", "possibleKey", "optionsKeys", "useOptionsReplaceForData", "option", "LanguageUtil", "formattedCode", "cleanedLng", "lngScOnly", "lngOnly", "supportedLng", "fallbacks", "fallbackCode", "fallbackCodes", "addCode", "fc", "suffixesOrder", "dummyRule", "count", "PluralResolver", "languageUtils", "cleanedCode", "cacheKey", "rule", "err", "lngPart", "pluralCategory1", "pluralCategory2", "pluralCategory", "deepFindWithDefaults", "regexSafe", "val", "Interpolator", "escape$1", "escapeValue", "useRawValueToEscape", "prefixEscaped", "suffixEscaped", "formatSeparator", "unescapeSuffix", "unescapePrefix", "nestingPrefix", "nestingPrefixEscaped", "nestingSuffix", "nestingSuffixEscaped", "nestingOptionsSeparator", "maxReplaces", "alwaysFormat", "getOrResetRegExp", "existingRegExp", "match", "replaces", "handleFormat", "f", "missingInterpolationHandler", "todo", "matchedVar", "temp", "safeValue", "clonedOptions", "handleHasOptions", "inheritedOptions", "sep", "optionsString", "matchedSingleQuotes", "matchedDoubleQuotes", "formatters", "keyEndIndex", "elem", "parseFormatStr", "formatStr", "formatName", "formatOptions", "optStr", "rest", "trimmedKey", "createCachedFormatter", "fn", "cache", "optForCache", "frm", "createNonCachedFormatter", "Formatter", "cf", "formatter", "name", "format", "formats", "lastIndex", "mem", "formatted", "valOptions", "error", "removePending", "q", "Connector", "backend", "store", "languages", "callback", "toLoad", "pending", "toLoadLanguages", "toLoadNamespaces", "hasAllNamespaces", "loaded", "loadedKeys", "n", "fcName", "tried", "wait", "resolver", "fallbackValue", "isUpdate", "clb", "_c", "_d", "_e", "get", "ret", "transformOptions", "noop", "bindMemberFunctions", "inst", "I18n", "_I18n", "defOpts", "createClassOnDemand", "ClassOrObject", "lu", "deferred", "load", "finish", "usedCallback", "append", "li", "lngInLngs", "setLngProps", "done", "setLng", "fl", "keyPrefix", "fixedOpts", "scopeNs", "fixedT", "explicitCallNs", "selectorOpts", "resultKey", "fallbackLng", "lastLng", "loadNotPending", "loadState", "preResult", "preloaded", "newLngs", "ti", "rtlLngs", "instance", "forkResourceStore", "mergedOptions", "clone", "clonedData", "prev", "acc", "mergedInterpolation", "mergedForInterpolator", "createInstance", "dir", "init", "loadResources", "reloadResources", "use", "changeLanguage", "getFixedT", "exists", "setDefaultNamespace", "hasLoadedNamespace", "loadNamespaces", "loadLanguages", "_classCallCheck", "a", "n", "_typeof", "o", "toPrimitive", "t", "r", "_typeof", "e", "i", "toPropertyKey", "t", "i", "toPrimitive", "_typeof", "_defineProperties", "r", "t", "o", "toPropertyKey", "_createClass", "arr", "each", "slice", "defaults", "obj", "source", "prop", "createClassOnDemand", "ClassOrObject", "getDefaults", "handleCorrectReadFunction", "backend", "language", "namespace", "resolver", "fc", "r", "data", "err", "Backend", "services", "options", "i18nextOptions", "_classCallCheck", "_createClass", "_this", "b", "i", "callback", "_this2", "bLen", "_loadPosition", "pos", "isLastBackend", "lengthCheckAmount", "savedAt", "_savePosition", "nextBackend", "languages", "key", "fallbackValue", "clb", "opts", "_this3", "_this$services", "backendConnector", "languageUtils", "logger", "currentLanguage", "toLoad", "append", "lng", "lngs", "l", "ns", "arr", "UNSAFE_KEYS$1", "isSafeUrlSegmentBase", "v", "isSafeLangUrlSegment", "isSafeNsUrlSegment", "SAFETY_CHECK_BY_KEY", "sanitizeLogValue", "redactUrlCredentials", "u", "parsed", "e", "hasXMLHttpRequest", "isPromise", "maybePromise", "makePromise", "interpolationRegexp", "interpolateUrl", "str", "data", "unsafe", "result", "match", "key", "k", "value", "check", "segments", "seg", "g", "fetchApi", "XmlHttpRequestApi", "ActiveXObjectApi", "UNSAFE_KEYS", "addQueryString", "url", "params", "queryString", "paramName", "fetchIt", "fetchOptions", "callback", "altFetch", "resolver", "response", "altResponse", "requestWithFetch", "options", "payload", "headers", "__spreadValues", "reqOptions", "opt", "err", "requestWithXmlHttpRequest", "x", "h", "i", "request", "getDefaults", "namespace", "fallbackValue", "languages", "namespaces", "Backend", "services", "allOptions", "timer", "language", "loadUrlLanguages", "loadUrlNamespaces", "loadPath", "resolvedLoadPath", "safeLngs", "safeNss", "lng", "ns", "safeUrl", "res", "errorMessage", "term", "ret", "parseErr", "finished", "dataArray", "resArray", "addPath", "backendConnector", "languageUtils", "logger", "currentLanguage", "toLoad", "append", "l", "_defineProperty", "r", "t", "toPropertyKey", "ownKeys", "r", "t", "o", "_objectSpread", "_defineProperty", "Storage", "options", "_classCallCheck", "_createClass", "key", "value", "e", "getDefaults", "store", "Cache", "services", "language", "namespace", "callback", "nowMS", "local", "version", "i18nStamp", "data", "_this$options$getVers", "_this$options", "import_react", "import_react", "warn", "i18n", "code", "msg", "rest", "_a", "_b", "_c", "_d", "args", "__spreadValues", "isString", "alreadyWarned", "warnOnce", "loadedClb", "cb", "initialized", "loadNamespaces", "ns", "loadLanguages", "lng", "n", "hasLoadedNamespace", "options", "i18nInstance", "loadNotPending", "isString", "obj", "isObject", "matchHtmlEntity", "htmlEntities", "unescapeHtmlEntity", "m", "unescape", "text", "defaultOptions", "unescape", "setDefaults", "options", "__spreadValues", "getDefaults", "i18nInstance", "setI18n", "instance", "getI18n", "import_react", "initReactI18next", "instance", "setDefaults", "setI18n", "I18nContext", "ReportNamespaces", "namespaces", "ns", "import_react", "import_react", "TranslationParserError", "_TranslationParserError", "message", "position", "translationString", "commonEntities", "entityPattern", "entity", "decodeHtmlEntities", "text", "match", "_", "num", "hex", "tokenize", "translation", "tokens", "position", "currentText", "flushText", "char", "tagMatch", "closeTagMatch", "import_react", "renderDeclarationNode", "declaration", "children", "childDeclarations", "type", "props", "_a", "_childrenToRemove", "propsWithoutChildren", "__objRest", "React", "renderTranslation", "translation", "declarations", "tokens", "tokenize", "result", "stack", "literalTagNumbers", "getCurrentDeclarations", "parentFrame", "token", "decoded", "decodeHtmlEntities", "tagNumber", "currentDeclarations", "literalText", "TranslationParserError", "frame", "element", "unclosed", "IcuTransWithoutContext", "i18nKey", "defaultTranslation", "content", "ns", "values", "i18nFromProps", "tFromProps", "_a", "_b", "_c", "_d", "i18n", "getI18n", "warnOnce", "React", "t", "k", "namespaces", "isString", "mergedValues", "__spreadValues", "translation", "__spreadProps", "rendered", "renderTranslation", "error", "warn", "IcuTrans", "i18nKey", "defaultTranslation", "content", "ns", "values", "i18nFromProps", "tFromProps", "_a", "i18nFromContext", "defaultNSFromContext", "I18nContext", "i18n", "getI18n", "t", "IcuTransWithoutContext", "import_react", "import_shim", "notReadyT", "k", "optsOrDefaultValue", "isString", "isObject", "last", "notReadySnapshot", "dummySubscribe", "useTranslation", "ns", "props", "_a", "_b", "_c", "i18nFromProps", "i18nFromContext", "defaultNSFromContext", "I18nContext", "i18n", "getI18n", "ReportNamespaces", "warnOnce", "i18nOptions", "__spreadValues", "getDefaults", "useSuspense", "keyPrefix", "nsOrContext", "unstableNamespaces", "namespaces", "revisionRef", "subscribe", "callback", "bindI18n", "bindI18nStore", "wrappedCallback", "e", "snapshotRef", "getSnapshot", "calculatedReady", "n", "hasLoadedNamespace", "currentLng", "currentRevision", "lastSnapshot", "newSnapshot", "loadCount", "setLoadCount", "t", "ready", "onLoaded", "c", "loadLanguages", "loadNamespaces", "finalI18n", "wrapperRef", "wrapperLangRef", "createI18nWrapper", "original", "descriptors", "wrapper", "_", "ret", "lang", "i18nWrapper", "effectiveT", "args", "arr", "resolve", "import_react", "import_react", "import_react", "import_react", "translation_default", "app", "tagCloudEndpoint", "raw", "u", "rel", "e", "fromNow", "locale", "date", "diff", "abs", "units", "rtf", "unit", "ms", "shdatetime", "lang", "dateString", "toLocaleDateString", "closeWindow", "win", "setFocus", "elemId", "_a", "unsafeDecode", "str", "parseQueryString", "searchOrHash", "_a", "first", "parts", "x", "decode", "out", "kv", "k", "rest", "curQuerystring", "lookupQueryStringValue", "qs", "key", "val", "encodeTag", "tag", "fromNullableStr", "s", "normalizeTags", "tags", "apiErrorMsg", "t", "status", "bodyText", "body", "getShortHash", "hash", "i", "defaultNS", "a", "app", "instance", "Backend", "initReactI18next", "defaultNS", "translation_default", "Cache", "getShortHash", "import_react", "import_client", "KyError", "__publicField", "HTTPError", "KyError", "response", "request", "options", "_a", "code", "title", "status", "reason", "__publicField", "NetworkError", "KyError", "request", "options", "__publicField", "NonError", "value", "message", "e", "__publicField", "ForceRetryError", "KyError", "options", "cause", "NonError", "__publicField", "SchemaValidationError", "issues", "__publicField", "TimeoutError", "KyError", "request", "__publicField", "supportsRequestStreams", "duplexAccessed", "hasContentType", "supportsReadableStream", "supportsRequest", "error", "supportsAbortController", "supportsAbortSignal", "supportsResponseStreams", "supportsFormData", "requestMethods", "validate", "responseTypes", "maxSafeTimeout", "usualFormBoundarySize", "stop", "RetryMarker", "options", "__publicField", "retry", "kyOptionKeys", "requestOptionsRegistry", "encoder", "getBodySize", "body", "size", "key", "value", "usualFormBoundarySize", "withProgress", "stream", "totalBytes", "onProgress", "previousChunk", "transferredBytes", "currentChunk", "controller", "percent", "streamResponse", "response", "onDownloadProgress", "responseInit", "streamRequest", "request", "onUploadProgress", "originalBody", "isObject", "value", "replaceSymbol", "getReplaceState", "value", "isObject", "validateAndMerge", "sources", "source", "isObject", "deepMerge", "mergeHeaders", "source1", "source2", "result", "isHeadersInstance", "key", "value", "isPlainObject", "prototype", "cloneShallow", "copy", "deleted", "deletedParametersSymbol", "__spreadValues", "normalizeHeaderObject", "headers", "entry", "mergeHeaderContainers", "newHookValue", "original", "incoming", "property", "_a", "_b", "mergeHooks", "appendSearchParameters", "target", "input", "inputDeleted", "pair", "parameters", "returnValue", "hooks", "searchParameters", "signals", "replaceState", "getReplaceState", "isReplace", "__spreadProps", "hookValue", "headerValue", "supportsAbortSignal", "normalizeRequestMethod", "input", "requestMethods", "retryMethods", "retryStatusCodes", "retryAfterStatusCodes", "defaultRetryOptions", "attemptCount", "normalizeRetryOptions", "retry", "_a", "__spreadProps", "__spreadValues", "normalizedRetry", "method", "value", "timeout", "request", "init", "abortController", "options", "resolve", "reject", "timeoutId", "TimeoutError", "delay", "ms", "signal", "resolve", "reject", "abortHandler", "timeoutId", "findUnknownOptions", "options", "unknownOptions", "key", "requestOptionsRegistry", "kyOptionKeys", "hasSearchParameters", "search", "_a", "deletedParametersSymbol", "objectToString", "isError", "value", "errorMessages", "isRawNetworkError", "error", "message", "stack", "isErrorType", "error", "cls", "isHTTPError", "error", "isErrorType", "HTTPError", "isNetworkError", "NetworkError", "isTimeoutError", "TimeoutError", "maxErrorResponseBodySize", "prefixUrlRenamedErrorMessage", "timedOutResponseData", "createTextDecoder", "contentType", "_a", "match", "charset", "e", "invalidSchemaMessage", "cloneRetryOptions", "retry", "__spreadValues", "objectToString", "isRequestInstance", "value", "isResponseInstance", "cloneSearchParametersForInitHook", "searchParameters", "parameter", "cloneShallow", "cloneInitHookOptions", "options", "clonedOptions", "__spreadProps", "validateJsonWithSchema", "jsonValue", "schema", "standardSchema", "validationResult", "SchemaValidationError", "_Ky_static", "normalizeSearchParams_fn", "_abortController", "_retryCount", "_input", "_options", "_originalRequest", "_userProvidedAbortSignal", "_beforeRetryHookErrors", "_cachedNormalizedOptions", "_startTime", "_returnedResponseFromBeforeRetryHook", "_responseRequests", "_Ky_instances", "calculateDelay_fn", "calculateRetryDelay_fn", "decorateResponse_fn", "getResponseData_fn", "getErrorDataTimeout_fn", "isJsonContentType_fn", "readResponseText_fn", "parseJson_fn", "cancelBody_fn", "cancelResponseBody_fn", "createManagedSignal_fn", "throwIfTotalTimeoutExhausted_fn", "runBeforeRequestHooks_fn", "runAfterResponseHooks_fn", "retry_fn", "retryFromError_fn", "consumeReturnedResponseFromBeforeRetryHook_fn", "fetch_fn", "getRemainingTotalTimeout_fn", "getCurrentTime_fn", "getNormalizedOptions_fn", "assignRequest_fn", "getResponseRequest_fn", "setResponseRequest_fn", "wrapRequestWithUploadProgress_fn", "_Ky", "input", "__privateAdd", "__publicField", "_b", "_c", "_d", "_e", "_f", "_g", "_h", "_i", "_j", "_k", "_l", "_m", "_n", "__privateSet", "mergeHeaders", "__privateGet", "mergeHooks", "normalizeRequestMethod", "normalizeRetryOptions", "normalizedPrefix", "normalizedInput", "absoluteInput", "supportsAbortController", "supportsAbortSignal", "__privateMethod", "supportsRequestStreams", "userProvidedContentType", "supportsFormData", "hasSearchParameters", "url", "deleted", "deletedParametersSymbol", "key", "stringSearchParameters", "optionsSearchParameters", "initHooks", "initHookOptions", "hook", "ky", "function_", "maxSafeTimeout", "beforeRequestResponse", "response", "responseFromHook", "error", "ForceRetryError", "retriedResponse", "currentResponse", "httpError", "HTTPError", "errorToThrow", "supportsResponseStreams", "progressResponse", "streamResponse", "result", "processedError", "hookResult", "originalRequest", "type", "mimeType", "responseTypes", "text", "searchParams", "retryDelay", "jitteredDelay", "errorObject", "NonError", "isTimeoutError", "isHTTPError", "retryAfter", "after", "isNetworkError", "request", "data", "errorDataTimeout", "remainingTotal", "TimeoutError", "timeoutMs", "body", "reader", "decoder", "chunks", "totalBytes", "readAll", "done", "timeoutPromise", "resolve", "timeoutId", "remaining", "responseRequest", "hookResponse", "modifiedResponse", "RetryMarker", "nextResponse", "delayOptions", "remainingTimeout", "delay", "customRequest", "hookError", "__privateWrapper", "stop", "nonRequestOptions", "findUnknownOptions", "retryRequest", "effectiveTimeout", "timeout", "isRawNetworkError", "NetworkError", "elapsed", "hooks", "json", "parseJson", "stringifyJson", "totalTimeout", "throwHttpErrors", "fetch", "normalizedOptions", "__objRest", "originalBody", "streamRequest", "Ky", "createInstance", "defaults", "ky", "input", "options", "Ky", "validateAndMerge", "method", "requestMethods", "newDefaults", "stop", "retry", "distribution_default", "withCsrf", "headers", "a", "app", "h", "urlFor", "path", "toRelativePath", "urlOrPath", "u", "rel", "e", "request", "method", "opts", "_a", "distribution_default", "toggleStar", "bid", "action", "res", "markRead", "destroy", "bulkEdit", "req", "contentType", "bodyText", "data", "archiveBookmark", "editBookmark", "bm", "editNote", "note", "lookupTitle", "getTagCloud", "mode", "tagCloudEndpoint", "updateTagCloudMode", "fetchTagSuggestions", "destroyNote", "nid", "editAccountSettings", "us", "logout", "import_react", "import_jsx_runtime", "AccountSettingsView", "initial", "_a", "useTranslation", "us", "setUs", "React", "apiError", "setApiError", "archiveDisabled", "archiveDisabledTitle", "update", "next", "res", "editAccountSettings", "apiErrorMsg", "lockIcon", "err", "TimeoutError", "e", "__spreadProps", "__spreadValues", "ok", "import_react", "import_react", "TAG_SUGGESTION_DEBOUNCE_MS", "useTagSuggestions", "enabled", "tags", "onTagsUpdate", "maxSuggestions", "suggestionState", "setSuggestionState", "React", "tagSuggestionRequestId", "tagSuggestionDebounceRef", "tagInputRef", "cancelPendingSuggestions", "closeSuggestions", "onTagsChange", "e", "value", "selectionStart", "selectionEnd", "isWhitespaceOnlyEdit", "activeToken", "getActiveTagToken", "normalizedTagTerms", "getNormalizedTagTerms", "activeTokenNormalized", "shouldExcludeActiveToken", "tag", "payload", "requestId", "response", "fetchTagSuggestions", "items", "anchor", "measureCaretPosition", "applySuggestion", "term", "input", "next", "replaceTokenAtRange", "onTagsKeyDown", "current", "__spreadProps", "__spreadValues", "selected", "onTagsSelect", "onSuggestionHover", "index", "caret", "boundedCaret", "start", "end", "token", "style", "mirror", "prefix", "marker", "left", "top", "range", "replacement", "suffix", "inserted", "previous", "prevEnd", "nextEnd", "removed", "added", "isSpacesOnly", "import_react", "import_jsx_runtime", "MAX_SUGGESTION_TERM_RENDER_LENGTH", "TagSuggestionsDropdown", "suggestionState", "onHover", "onPick", "item", "index", "selected", "displayTerm", "truncateSuggestionTerm", "e", "renderHighlightedSuggestion", "term", "query", "lowerTerm", "lowerQuery", "idx", "before", "match", "after", "import_jsx_runtime", "AddForm", "initial", "_a", "useTranslation", "a", "app", "bm", "setBm", "React", "editBm", "setEditBm", "deleteAsk", "setDeleteAsk", "loading", "setLoading", "destroyed", "setDestroyed", "apiError", "setApiError", "suggestEnabled", "fromNowVal", "fromNow", "tagInputRef", "suggestionState", "closeSuggestions", "onTagsChange", "onTagsKeyDown", "onTagsSelect", "onSuggestionHover", "onSuggestionPick", "useTagSuggestions", "tags", "x", "__spreadProps", "__spreadValues", "onFetchTitle", "title", "lookupTitle", "onDestroy", "res", "destroy", "onSubmit", "e", "editBm2", "normalizeTags", "editBookmark", "qs", "curQuerystring", "next", "lookupQueryStringValue", "ref", "org", "closeWindow", "shdatetime", "TagSuggestionsDropdown", "import_react", "createStoreImpl", "createState", "state", "listeners", "setState", "partial", "replace", "nextState", "previousState", "listener", "getState", "api", "initialState", "createStore", "import_react", "identity", "arg", "useStore", "api", "selector", "slice", "React", "createImpl", "createState", "createStore", "useBoundStore", "create", "useBookmarksStore", "create", "set", "bmarks", "bid", "s", "b", "bm", "import_react", "entries", "Object", "setPrototypeOf", "isFrozen", "getPrototypeOf", "getOwnPropertyDescriptor", "freeze", "seal", "create", "_ref", "Reflect", "apply", "construct", "x", "func", "thisArg", "_len", "arguments", "length", "args", "Array", "_key", "Func", "_len2", "_key2", "arrayForEach", "unapply", "prototype", "forEach", "arrayLastIndexOf", "lastIndexOf", "arrayPop", "pop", "arrayPush", "push", "arraySplice", "splice", "arrayIsArray", "isArray", "stringToLowerCase", "String", "toLowerCase", "stringToString", "toString", "stringMatch", "match", "stringReplace", "replace", "stringIndexOf", "indexOf", "stringTrim", "trim", "numberToString", "Number", "booleanToString", "Boolean", "bigintToString", "BigInt", "symbolToString", "Symbol", "objectHasOwnProperty", "hasOwnProperty", "objectToString", "regExpTest", "RegExp", "test", "typeErrorCreate", "unconstruct", "TypeError", "lastIndex", "_len3", "_key3", "_len4", "_key4", "addToSet", "set", "array", "transformCaseFunc", "l", "element", "lcElement", "cleanArray", "index", "clone", "object", "newObject", "_ref2", "_ref3", "_slicedToArray", "property", "value", "constructor", "stringifyValue", "valueAsRecord", "valueToString", "lookupGetter", "stringified", "prop", "desc", "get", "fallbackValue", "isRegex", "_unused", "html", "svg", "svgFilters", "svgDisallowed", "mathMl", "mathMlDisallowed", "text", "xml", "MUSTACHE_EXPR", "ERB_EXPR", "TMPLIT_EXPR", "DATA_ATTR", "ARIA_ATTR", "IS_ALLOWED_URI", "IS_SCRIPT_OR_DATA", "ATTR_WHITESPACE", "DOCTYPE_NAME", "CUSTOM_ELEMENT", "NODE_TYPE", "attribute", "cdataSection", "entityReference", "entityNode", "progressingInstruction", "comment", "document", "documentType", "documentFragment", "notation", "getGlobal", "window", "_createTrustedTypesPolicy", "trustedTypes", "purifyHostElement", "createPolicy", "suffix", "ATTR_NAME", "hasAttribute", "getAttribute", "policyName", "createHTML", "createScriptURL", "scriptUrl", "_", "console", "warn", "_createHooksMap", "afterSanitizeAttributes", "afterSanitizeElements", "afterSanitizeShadowDOM", "beforeSanitizeAttributes", "beforeSanitizeElements", "beforeSanitizeShadowDOM", "uponSanitizeAttribute", "uponSanitizeElement", "uponSanitizeShadowNode", "createDOMPurify", "undefined", "DOMPurify", "root", "version", "VERSION", "removed", "nodeType", "Element", "isSupported", "originalDocument", "currentScript", "DocumentFragment", "HTMLTemplateElement", "Node", "NodeFilter", "_window$NamedNodeMap", "NamedNodeMap", "MozNamedAttrMap", "HTMLFormElement", "DOMParser", "ElementPrototype", "cloneNode", "remove", "getNextSibling", "getChildNodes", "getParentNode", "getShadowRoot", "getAttributes", "getNodeType", "getNodeName", "template", "createElement", "content", "ownerDocument", "trustedTypesPolicy", "emptyHTML", "_document", "implementation", "createNodeIterator", "createDocumentFragment", "getElementsByTagName", "importNode", "hooks", "createHTMLDocument", "EXPRESSIONS", "ALLOWED_TAGS", "DEFAULT_ALLOWED_TAGS", "TAGS", "ALLOWED_ATTR", "DEFAULT_ALLOWED_ATTR", "ATTRS", "CUSTOM_ELEMENT_HANDLING", "tagNameCheck", "writable", "configurable", "enumerable", "attributeNameCheck", "allowCustomizedBuiltInElements", "FORBID_TAGS", "FORBID_ATTR", "EXTRA_ELEMENT_HANDLING", "tagCheck", "attributeCheck", "ALLOW_ARIA_ATTR", "ALLOW_DATA_ATTR", "ALLOW_UNKNOWN_PROTOCOLS", "ALLOW_SELF_CLOSE_IN_ATTR", "SAFE_FOR_TEMPLATES", "SAFE_FOR_XML", "WHOLE_DOCUMENT", "SET_CONFIG", "FORCE_BODY", "RETURN_DOM", "RETURN_DOM_FRAGMENT", "RETURN_TRUSTED_TYPE", "SANITIZE_DOM", "SANITIZE_NAMED_PROPS", "SANITIZE_NAMED_PROPS_PREFIX", "KEEP_CONTENT", "IN_PLACE", "USE_PROFILES", "FORBID_CONTENTS", "DEFAULT_FORBID_CONTENTS", "DATA_URI_TAGS", "DEFAULT_DATA_URI_TAGS", "URI_SAFE_ATTRIBUTES", "DEFAULT_URI_SAFE_ATTRIBUTES", "MATHML_NAMESPACE", "SVG_NAMESPACE", "HTML_NAMESPACE", "NAMESPACE", "IS_EMPTY_INPUT", "ALLOWED_NAMESPACES", "DEFAULT_ALLOWED_NAMESPACES", "MATHML_TEXT_INTEGRATION_POINTS", "HTML_INTEGRATION_POINTS", "COMMON_SVG_AND_HTML_ELEMENTS", "PARSER_MEDIA_TYPE", "SUPPORTED_PARSER_MEDIA_TYPES", "DEFAULT_PARSER_MEDIA_TYPE", "CONFIG", "formElement", "isRegexOrFunction", "testValue", "Function", "_parseConfig", "cfg", "ADD_URI_SAFE_ATTR", "ADD_DATA_URI_TAGS", "ALLOWED_URI_REGEXP", "customElementHandling", "ADD_TAGS", "ADD_ATTR", "ADD_FORBID_CONTENTS", "table", "tbody", "TRUSTED_TYPES_POLICY", "ALL_SVG_TAGS", "ALL_MATHML_TAGS", "_checkValidNamespace", "parent", "tagName", "namespaceURI", "parentTagName", "_forceRemove", "node", "removeChild", "_removeAttribute", "name", "getAttributeNode", "from", "removeAttribute", "setAttribute", "_initDocument", "dirty", "doc", "leadingWhitespace", "matches", "dirtyPayload", "parseFromString", "documentElement", "createDocument", "innerHTML", "body", "insertBefore", "createTextNode", "childNodes", "call", "_createNodeIterator", "SHOW_ELEMENT", "SHOW_COMMENT", "SHOW_TEXT", "SHOW_PROCESSING_INSTRUCTION", "SHOW_CDATA_SECTION", "_scrubTemplateExpressions", "normalize", "walker", "currentNode", "nextNode", "data", "expr", "_isClobbered", "realTagName", "nodeName", "textContent", "attributes", "hasChildNodes", "_isDocumentFragment", "_isNode", "_executeHooks", "hook", "_sanitizeElements", "allowedTags", "firstElementChild", "_isBasicCustomElement", "parentNode", "childCount", "i", "childClone", "_isValidAttribute", "lcTag", "lcName", "nameIsPermitted", "RESERVED_CUSTOM_ELEMENT_NAMES", "_sanitizeAttributes", "hookEvent", "attrName", "attrValue", "keepAttr", "allowedAttributes", "forceKeepAttr", "attr", "initValue", "getAttributeType", "setAttributeNS", "_sanitizeShadowDOM", "fragment", "shadowNode", "shadowIterator", "innerSr", "shadowRoot", "_sanitizeAttachedShadowRoots", "sr", "snapshot", "child", "rootName", "sanitize", "importedNode", "returnNode", "nn", "appendChild", "firstChild", "nodeIterator", "shadowroot", "shadowrootmode", "serializedHTML", "outerHTML", "doctype", "setConfig", "clearConfig", "isValidAttribute", "tag", "addHook", "entryPoint", "hookFunction", "removeHook", "removeHooks", "removeAllHooks", "purify", "_getDefaults", "_defaults", "changeDefaults", "newDefaults", "noopTest", "cachedIndentRegex", "createRegex", "cache", "indent", "cacheIndex", "regex", "edit", "opt", "source", "obj", "name", "val", "valSource", "other", "supportsLookbehind", "a", "e", "bull", "newline", "blockCode", "fences", "hr", "heading", "bullet", "lheadingCore", "lheading", "lheadingGfm", "_paragraph", "blockText", "_blockLabel", "def", "list", "_tag", "_comment", "html", "paragraph", "blockquote", "blockNormal", "gfmTable", "blockGfm", "__spreadProps", "__spreadValues", "blockPedantic", "escape", "inlineCode", "br", "inlineText", "_punctuation", "_punctuationOrSpace", "_notPunctuationOrSpace", "punctuation", "_punctuationGfmStrongEm", "_punctuationOrSpaceGfmStrongEm", "_notPunctuationOrSpaceGfmStrongEm", "blockSkip", "emStrongLDelimCore", "emStrongLDelim", "emStrongLDelimGfm", "emStrongRDelimAstCore", "emStrongRDelimAst", "emStrongRDelimAstGfm", "emStrongRDelimUnd", "delLDelim", "delRDelimCore", "delRDelim", "anyPunctuation", "autolink", "_inlineComment", "tag", "_inlineLabel", "link", "reflink", "nolink", "reflinkSearch", "_caseInsensitiveProtocol", "inlineNormal", "inlinePedantic", "inlineGfm", "inlineBreaks", "block", "inline", "escapeReplacements", "getEscapeReplacement", "ch", "escapeHtmlEntities", "encode", "cleanUrl", "href", "splitCells", "tableRow", "count", "row", "match", "offset", "str", "escaped", "curr", "cells", "i", "rtrim", "c", "invert", "l", "suffLen", "currChar", "trimTrailingBlankLines", "lines", "end", "findClosingBracket", "b", "level", "expandTabs", "line", "col", "expanded", "char", "added", "outputLink", "cap", "raw", "lexer", "rules", "title", "text", "token", "indentCodeCompensation", "matchIndentToCode", "indentToCode", "node", "matchIndentInNode", "indentInNode", "_Tokenizer", "options", "__publicField", "src", "trimmed", "tokens", "inBlockquote", "currentLines", "currentRaw", "currentText", "top", "lastToken", "oldToken", "newText", "newToken", "isordered", "itemRegex", "endsWithBlankLine", "endEarly", "itemContents", "nextLine", "blankLine", "nextBulletRegex", "hrRegex", "fencesBeginRegex", "headingBeginRegex", "htmlBeginRegex", "blockquoteBeginRegex", "rawLine", "nextLineWithoutTabs", "lastItem", "item", "itemToken", "taskRaw", "checkboxToken", "spacers", "t", "hasMultipleLineBreaks", "headers", "aligns", "rows", "align", "cell", "trimmedUrl", "rtrimSlash", "lastParenIndex", "linkLen", "links", "linkString", "maskedSrc", "prevChar", "lLength", "rDelim", "rLength", "delimTotal", "midDelimTotal", "endReg", "lastCharLength", "hasNonSpaceChars", "hasSpaceCharsOnBothEnds", "prevCapZero", "_b", "_a", "_Lexer", "__Lexer", "next", "lastParagraphClipped", "srcLength", "extTokenizer", "cutSrc", "_c", "startIndex", "tempSrc", "tempStart", "getStartIndex", "keepPrevChar", "_e", "_d", "_f", "byte", "errMsg", "_Renderer", "lang", "langString", "code", "depth", "ordered", "start", "body", "j", "type", "startAttr", "checked", "header", "k", "content", "cleanHref", "out", "_TextRenderer", "_Parser", "__Parser", "anyToken", "genericToken", "ret", "renderer", "_Hooks", "markdown", "Marked", "args", "callback", "values", "tableToken", "listToken", "childTokens", "extensions", "pack", "opts", "ext", "prevRenderer", "extLevel", "prop", "rendererProp", "rendererFunc", "tokenizer", "tokenizerProp", "tokenizerFunc", "prevTokenizer", "hooks", "hooksProp", "hooksFunc", "prevHook", "arg", "walkTokens", "packWalktokens", "blockType", "origOpt", "throwError", "processedSrc", "processedTokens", "silent", "async", "msg", "markedInstance", "marked", "setOptions", "use", "parseInline", "parser", "_Parser", "lexer", "_Lexer", "import_react", "import_jsx_runtime", "g", "Markdown", "text", "className", "html", "React", "parsed", "purify", "import_jsx_runtime", "BMark", "initial", "onNotifyRemove", "onUpdated", "_a", "t", "useTranslation", "a", "app", "bm", "setBm", "React", "editBm", "setEditBm", "deleteAsk", "setDeleteAsk", "edit", "setEdit", "loading", "setLoading", "archiving", "setArchiving", "actionError", "setActionError", "errorFadingOut", "setErrorFadingOut", "errorTimer", "fadeTimer", "clearErrorTimers", "showActionError", "msg", "tagInputId", "linkToFilterSingle", "fromNullableStr", "linkToFilterTag", "tag", "encodeTag", "viewInContextTime", "time", "linkToViewInContext", "suggestEnabled", "tagInputRef", "suggestionState", "closeSuggestions", "onTagsChange", "onTagsKeyDown", "onTagsSelect", "onSuggestionHover", "onSuggestionPick", "useTagSuggestions", "tags", "x", "__spreadProps", "__spreadValues", "onStar", "next", "res", "toggleStar", "apiErrorMsg", "updated", "err", "TimeoutError", "onDestroy", "destroy", "onMarkRead", "markRead", "startEdit", "setFocus", "onFetchTitle", "title", "lookupTitle", "onArchive", "archiveBookmark", "onSubmit", "e", "editBm2", "normalizeTags", "editBookmark", "archivingDisabled", "Markdown", "shdatetime", "toLocaleDateString", "TagSuggestionsDropdown", "import_jsx_runtime", "BList", "initial", "hasHydrated", "setHasHydrated", "React", "bmarks", "useBookmarksStore", "s", "setAll", "removeById", "upsert", "b", "BMark", "bm", "import_react", "import_jsx_runtime", "disabledReason", "selection", "action", "addTags", "removeTags", "bcount", "navLink", "current", "value", "label", "onClick", "e", "BulkEdit", "_a", "_b", "_c", "_d", "useTranslation", "visible", "setVisible", "setSelection", "setAction", "setAddTags", "setRemoveTags", "submitting", "setSubmitting", "confirmDelete", "setConfirmDelete", "confirmPublic", "setConfirmPublic", "validationMsg", "setValidationMsg", "errorFadingOut", "setErrorFadingOut", "validationTimer", "fadeTimer", "a", "app", "suggestEnabled", "bulkFilter", "bulkSharedp", "bulkTags", "bulkQuery", "bids", "useBookmarksStore", "s", "b", "pageCount", "selectionCount", "reason", "isVisuallyDisabled", "removeTagsRef", "removeSuggestionState", "closeRemoveSuggestions", "onRemoveTagsChange", "onRemoveTagsKeyDown", "onRemoveTagsSelect", "onRemoveSuggestionHover", "onRemoveSuggestionPick", "useTagSuggestions", "addTagsRef", "addSuggestionState", "closeAddSuggestions", "onAddTagsChange", "onAddTagsKeyDown", "onAddTagsSelect", "onAddSuggestionHover", "onAddSuggestionPick", "clearValidationTimers", "resetForm", "el", "handler", "v", "showValidationMsg", "msg", "handleSubmit", "addTagsTrimmed", "normalizeTags", "removeTagsTrimmed", "r", "res", "bulkEdit", "apiErrorMsg", "err", "TimeoutError", "toggleAction", "cur", "TagSuggestionsDropdown", "import_react", "import_jsx_runtime", "toTextareaPreview", "input", "lines", "x", "idx", "React", "NList", "initial", "useTranslation", "a", "app", "linkToFilterSingle", "slug", "fromNullableStr", "note", "fromNowVal", "fromNow", "shdatetime", "import_react", "import_jsx_runtime", "toTextarea", "input", "lines", "x", "idx", "React", "NNote", "initial", "useTranslation", "a", "app", "note", "setNote", "editNoteState", "setEditNoteState", "deleteAsk", "setDeleteAsk", "edit", "setEdit", "destroyed", "setDestroyed", "apiError", "setApiError", "fromNowVal", "fromNow", "notetextid", "startEdit", "next", "qs", "curQuerystring", "q", "lookupQueryStringValue", "closeWindow", "setFocus", "onDestroy", "res", "destroyNote", "apiErrorMsg", "err", "TimeoutError", "onSubmit", "e", "editNote", "ref", "org", "fromNullableStr", "__spreadProps", "__spreadValues", "Markdown", "shdatetime", "import_react", "useTagCloudStore", "create", "set", "mode", "tagcloud", "tagCloudModeToF", "mode", "n", "s", "tags", "lowerBound", "tagCloudModeFromF", "isExpanded", "setExpanded", "expanded", "__spreadProps", "__spreadValues", "import_jsx_runtime", "TagCloud", "initialMode", "useTranslation", "mode", "useTagCloudStore", "s", "tagcloud", "setMode", "setTagCloud", "React", "fetchTagCloud", "m", "tc", "getTagCloud", "tagCloudModeFromF", "makeLbMode", "n", "isExpanded", "relatedTags", "makeRelatedMode", "makeRelatedLbMode", "lb", "onExpanded", "expanded", "next", "setExpanded", "app", "updateTagCloudMode", "onChangeBrowse", "onChangeRelated", "isTagCloudModeRelated", "activeLb", "titleKey", "renderLinks", "curtags", "a", "cur", "tag", "linkToFilterTag", "rest", "fromNullableStr", "tagCounts", "cMin", "cMax", "x", "y", "c", "kLower", "fontsize", "rescale", "opacity", "style", "includeExcludeLink", "t", "encodeTag", "f", "v", "h", "denom", "import_jsx_runtime", "selectEl", "selector", "viewRendered", "el", "RenderReady", "children", "renderView", "renderElSelector", "node", "logoutE", "logout", "renderBookmarks", "bmarks", "BList", "renderBulkEdit", "bcount", "BulkEdit", "renderTagCloud", "tagCloudMode", "TagCloud", "tagCloudModeToF", "renderAddForm", "bmark", "AddForm", "renderNotes", "notes", "NList", "renderNote", "note", "NNote", "renderAccountSettings", "accountSettings", "AccountSettingsView", "initColorSchemeToggle", "isColorSchemePreference", "value", "getEffectiveColorScheme", "explicit", "applyColorSchemePreference", "preference", "colorSchemeStorageKey", "stored", "toggleEl", "e", "next"] +}
+ static/js/app-SAXM5TAE.min.js.map.gz view
binary file changed (absent → 420225 bytes)
static/js/manifest.json view
@@ -1,1 +1,1 @@-{"appBundle":"app-MD5JJQMB.min.js"}+{"appBundle":"app-SAXM5TAE.min.js"}
static/locales/de/translation.json view
@@ -1,162 +1,198 @@-{- "auth": {- "invalidUsernamePass": "Ungültige Kombination aus Nutzername und Passwort",- "incorrectOldPassword": "Falsches altes Passwort",- "passwordTooShort": "Das Passwort muss mindestens 6 Zeichen lang sein",- "passUpdated": "Passwort aktualisiert",- "missingRequiredFields": "Fehlende erforderliche Felder"- },- "error": {- "notFound": "Nicht gefunden",- "internalError": "Interner Serverfehler",- "invalidArgs": "Ungültige Argumente",- "badMethod": "Ungültige Methode",- "notAuthenticated": "Nicht authentifiziert",- "permissionDenied": "Zugriff verweigert"- },- "nav": {- "privateProfileEnabled": "privates Profil aktiviert",- "darkMode": "Dunkelmodus",- "lightMode": "Hellmodus",- "addUrl": "URL hinzufügen",- "addNote": "Notiz hinzufügen",- "notes": "Notizen",- "settings": "Einstellungen",- "logout": "Abmelden",- "login": "Anmelden"- },- "footer": {- "sourceCode": "Quellcode"- },- "login": {- "pageTitle": "Anmelden",- "username": "Benutzername",- "password": "Passwort",- "submit": "Anmelden"- },- "changePassword": {- "oldPassword": "Altes Passwort",- "newPassword": "Neues Passwort",- "submit": "Änderungen speichern"- },- "settings": {- "serverDefault": "Serverstandard",- "bookmarklet": "URL-Bookmarklet hinzufügen",- "changePassword": "Passwort ändern",- "accountTitle": "Kontoeinstellungen",- "archiveDefault": "Neue nicht-private Lesezeichen standardmäßig archivieren",- "privateDefault": "Neue Lesezeichen standardmäßig auf privat setzen",- "suggestTags": "Tag-Vorschläge aktivieren",- "privacyLock": "Datenschutzsperre (privates Konto)",- "archivingDisabled": "Archivierung deaktiviert",- "language": "Sprache"- },- "rss": "RSS",- "filter": {- "all": "alle",- "private": "privat",- "public": "öffentlich",- "unread": "ungelesen",- "untagged": "ohne Tags",- "starred": "markiert"- },- "pagination": {- "perPage": "pro Seite:"- },- "pager": {- "earlier": "« früher",- "later": "später »"- },- "notes": {- "youHave": "Sie haben",- "found": "Gefunden",- "label": "Notizen:"- },- "search": {- "placeholder": "suchen",- "clearTitle": "Suchergebnisse löschen",- "submitTitle": "Suche starten",- "syntaxTitle": "Suchsyntax"- },- "noTitle": "[kein Titel]",- "edit": "bearbeiten",- "delete": "löschen",- "cancel": "abbrechen",- "destroy": "vernichten",- "save": "speichern",- "fetch": "abrufen",- "archive": "archivieren",- "archiving": "wird archiviert",- "bmark": {- "archiveLinkTitle": "Archivlink",- "markAsRead": "als gelesen markieren",- "viewInContext": "im Kontext anzeigen",- "url": "URL",- "title": "Titel",- "description": "Beschreibung",- "tags": "Tags",- "private": "privat",- "toread": "zu lesen"- },- "note": {- "killed": "Sie haben diese Notiz gelöscht",- "titleLabel": "Titel:",- "descriptionLabel": "Beschreibung:",- "useMarkdown": "Markdown verwenden?",- "publicLabel": "öffentlich?"- },- "addForm": {- "previouslySaved": "zuvor gespeichert",- "url": "URL",- "archive": "archivieren",- "archiveUnavailable": "Archivierung ist für private Lesezeichen nicht verfügbar",- "readLater": "später lesen",- "update": "Lesezeichen aktualisieren",- "add": "Lesezeichen hinzufügen",- "killed": "Sie haben dieses Lesezeichen gelöscht"- },- "tagCloud": {- "relatedTags": "Verwandte Tags",- "topTags": "Top-Tags",- "topTagsTitle": "Eine Wolke Ihrer meistgenutzten Tags anzeigen",- "allTitle": "Alle Tags anzeigen",- "min2Title": "Tags mit mindestens 2 Lesezeichen anzeigen",- "min5Title": "Tags mit mindestens 5 Lesezeichen anzeigen",- "min10Title": "Tags mit mindestens 10 Lesezeichen anzeigen",- "min20Title": "Tags mit mindestens 20 Lesezeichen anzeigen",- "hide": "ausblenden",- "show": "anzeigen"- },- "docs": {- "title": "Die Suchsyntax verstehen",- "pageFilters": "Seitenfilter",- "pageFiltersDesc": "Suchen sind auf den aktuell ausgewählten Seitenfilter beschränkt.",- "soGiven": "Angesichts der möglichen Seitenfilter",- "if": "Wenn",- "isCurrentlySelectedIncludes": "aktuell ausgewählt ist, umfasst die Suche",- "bookmarks": "Lesezeichen",- "isCurrentlySelectedOnly": "aktuell ausgewählt ist, umfasst die Suche nur",- "bookmarksEtc": "Lesezeichen usw.",- "combineAnd": "Suchen kombinieren (AND)",- "separateBySpace": "Begriffe durch ein Leerzeichen trennen.",- "forExample": "Zum Beispiel,",- "combineOr": "Suchen kombinieren (OR)",- "put": "Setzen Sie",- "betweenQuery": "zwischen jede Suchanfrage.",- "excludeWords": "Wörter aus der Suche ausschließen",- "inFrontWord": "vor ein Wort, das Sie ausschließen möchten.",- "exactMatch": "Nach einer genauen Übereinstimmung suchen",- "putInQuotes": "Ein Wort oder eine Phrase in Anführungszeichen setzen.",- "specificField": "In einem bestimmten Feld suchen",- "inFrontTerm": "vor dem Begriff,",- "where": "wobei",- "isOneOfOptions": "eine der folgenden Optionen ist",- "bookmarkSearch": "Lesezeichen-Suche",- "noteSearch": "Notizen-Suche",- "fieldHeader": "FELD",- "exampleHeader": "BEISPIEL",- "complexExamples": "Komplexere Beispiele",- "complexExample1Desc": "\"youtube\" in URL, und Titel \"haskell\" oder Titel \"python\" und nach dem 31.12.2017",- "complexExample2Desc": "\"hacker news\" nicht im Titel, und \"news\", \"cnn\", \"npr\" irgendwo, oder \"the guardian\" in der Beschreibung"- }-}+{ + "auth": { + "invalidUsernamePass": "Ungültige Kombination aus Nutzername und Passwort", + "incorrectOldPassword": "Falsches altes Passwort", + "passwordTooShort": "Das Passwort muss mindestens 6 Zeichen lang sein", + "passUpdated": "Passwort aktualisiert", + "missingRequiredFields": "Fehlende erforderliche Felder" + }, + "error": { + "notFound": "Nicht gefunden", + "internalError": "Interner Serverfehler", + "invalidArgs": "Ungültige Argumente", + "badMethod": "Ungültige Methode", + "notAuthenticated": "Nicht authentifiziert", + "permissionDenied": "Zugriff verweigert", + "error": "Fehler: {{status}}", + "errorWithMsg": "Fehler {{status}}: {{msg}}", + "requestTimedOut": "Anfrage abgelaufen", + "networkError": "Netzwerkfehler" + }, + "nav": { + "privateProfileEnabled": "privates Profil aktiviert", + "darkMode": "Dunkelmodus", + "lightMode": "Hellmodus", + "addUrl": "URL hinzufügen", + "addNote": "Notiz hinzufügen", + "notes": "Notizen", + "settings": "Einstellungen", + "logout": "Abmelden", + "login": "Anmelden" + }, + "footer": { + "sourceCode": "Quellcode" + }, + "login": { + "pageTitle": "Anmelden", + "username": "Benutzername", + "password": "Passwort", + "submit": "Anmelden" + }, + "changePassword": { + "oldPassword": "Altes Passwort", + "newPassword": "Neues Passwort", + "submit": "Änderungen speichern" + }, + "settings": { + "serverDefault": "Serverstandard", + "bookmarklet": "URL-Bookmarklet hinzufügen", + "changePassword": "Passwort ändern", + "accountTitle": "Kontoeinstellungen", + "archiveDefault": "Neue nicht-private Lesezeichen standardmäßig archivieren", + "privateDefault": "Neue Lesezeichen standardmäßig auf privat setzen", + "suggestTags": "Tag-Vorschläge aktivieren", + "privacyLock": "Datenschutzsperre (privates Konto)",\n "publicTagCloud": "Public Tag Cloud (visible to visitors)", + "archivingDisabled": "Archivierung deaktiviert", + "language": "Sprache" + }, + "rss": "RSS", + "filter": { + "all": "alle", + "private": "privat", + "public": "öffentlich", + "unread": "ungelesen", + "untagged": "ohne Tags", + "starred": "markiert" + }, + "pagination": { + "perPage": "pro Seite:" + }, + "pager": { + "earlier": "« früher", + "later": "später »" + }, + "notes": { + "youHave_one": "Sie haben 1 Notiz:", + "youHave_other": "Sie haben {{count}} Notizen:", + "found_one": "1 Notiz gefunden:", + "found_other": "{{count}} Notizen gefunden:" + }, + "search": { + "placeholder": "suchen", + "clearTitle": "Suchergebnisse löschen", + "submitTitle": "Suche starten", + "syntaxTitle": "Suchsyntax" + }, + "noTitle": "[kein Titel]", + "edit": "bearbeiten", + "delete": "löschen", + "cancel": "abbrechen", + "destroy": "vernichten", + "save": "speichern", + "fetch": "abrufen", + "archive": "archivieren", + "archiving": "wird archiviert", + "bmark": { + "archiveLinkTitle": "Archivlink", + "markAsRead": "als gelesen markieren", + "viewInContext": "im Kontext anzeigen", + "url": "URL", + "title": "Titel", + "description": "Beschreibung", + "tags": "Tags", + "private": "privat", + "toread": "zu lesen" + }, + "note": { + "killed": "Sie haben diese Notiz gelöscht", + "titleLabel": "Titel:", + "descriptionLabel": "Beschreibung:", + "useMarkdown": "Markdown verwenden?", + "publicLabel": "öffentlich?" + }, + "addForm": { + "previouslySaved": "zuvor gespeichert", + "url": "URL", + "archive": "archivieren", + "archiveUnavailable": "Archivierung ist für private Lesezeichen nicht verfügbar", + "readLater": "später lesen", + "update": "Lesezeichen aktualisieren", + "add": "Lesezeichen hinzufügen", + "killed": "Sie haben dieses Lesezeichen gelöscht" + }, + "tagCloud": { + "relatedTags": "Verwandte Tags", + "topTags": "Top-Tags", + "topTagsTitle": "Eine Wolke Ihrer meistgenutzten Tags anzeigen", + "allTitle": "Alle Tags anzeigen", + "min2Title": "Tags mit mindestens 2 Lesezeichen anzeigen", + "min5Title": "Tags mit mindestens 5 Lesezeichen anzeigen", + "min10Title": "Tags mit mindestens 10 Lesezeichen anzeigen", + "min20Title": "Tags mit mindestens 20 Lesezeichen anzeigen", + "hide": "ausblenden", + "show": "anzeigen" + }, + "bulkEdit": { + "edit": "bearbeiten", + "select": "auswählen:", + "oneBookmarkSelected": "1 Lesezeichen ausgewählt", + "bookmarksSelected": "{{count}} Lesezeichen ausgewählt", + "thisPage": "diese Seite", + "allPages": "alle Seiten", + "action": "Aktion:", + "markAsRead": "als gelesen markieren", + "unread": "ungelesen", + "addStars": "Sterne hinzufügen", + "removeStars": "Sterne entfernen", + "makePrivate": "privat machen", + "makePublic": "öffentlich machen", + "removeTags": "Tags entfernen:", + "addTags": "Tags hinzufügen:", + "submitting": "wird gesendet…", + "submit": "senden", + "destroyOne": "1 Lesezeichen löschen?", + "destroyMany": "{{count}} Lesezeichen löschen?", + "publicOne": "1 Lesezeichen öffentlich machen?", + "publicMany": "{{count}} Lesezeichen öffentlich machen?", + "pleaseAddSelection": "Bitte eine Lesezeichen-Auswahl treffen", + "pleaseChooseAction": "Bitte eine Aktion wählen oder Tags eingeben", + "tooManyTags": "Es können nicht mehr als 10 Tags gleichzeitig hinzugefügt werden, wenn mehr als 20.000 Lesezeichen betroffen wären", + "pageMismatch": "Anzahl der Seiten-Lesezeichen stimmt nicht überein", + "editedCount_one": "{{editedCount}} Lesezeichen bearbeitet", + "editedCount_other": "{{editedCount}} Lesezeichen bearbeitet", + "editedCountMismatch_one": "Auswahlanzahl war {{selectionCount}}, aber {{editedCount}} Lesezeichen bearbeitet, da sich die übereinstimmenden Lesezeichendaten geändert haben", + "editedCountMismatch_other": "Auswahlanzahl war {{selectionCount}}, aber {{editedCount}} Lesezeichen bearbeitet, da sich die übereinstimmenden Lesezeichendaten geändert haben" + }, + "docs": { + "title": "Die Suchsyntax verstehen", + "pageFilters": "Seitenfilter", + "pageFiltersDesc": "Suchen sind auf den aktuell ausgewählten Seitenfilter beschränkt.", + "soGiven": "Angesichts der möglichen Seitenfilter", + "if": "Wenn", + "isCurrentlySelectedIncludes": "aktuell ausgewählt ist, umfasst die Suche", + "bookmarks": "Lesezeichen", + "isCurrentlySelectedOnly": "aktuell ausgewählt ist, umfasst die Suche nur", + "bookmarksEtc": "Lesezeichen usw.", + "combineAnd": "Suchen kombinieren (AND)", + "separateBySpace": "Begriffe durch ein Leerzeichen trennen.", + "forExample": "Zum Beispiel,", + "combineOr": "Suchen kombinieren (OR)", + "put": "Setzen Sie", + "betweenQuery": "zwischen jede Suchanfrage.", + "excludeWords": "Wörter aus der Suche ausschließen", + "inFrontWord": "vor ein Wort, das Sie ausschließen möchten.", + "exactMatch": "Nach einer genauen Übereinstimmung suchen", + "putInQuotes": "Ein Wort oder eine Phrase in Anführungszeichen setzen.", + "specificField": "In einem bestimmten Feld suchen", + "inFrontTerm": "vor dem Begriff,", + "where": "wobei", + "isOneOfOptions": "eine der folgenden Optionen ist", + "bookmarkSearch": "Lesezeichen-Suche", + "noteSearch": "Notizen-Suche", + "fieldHeader": "FELD", + "exampleHeader": "BEISPIEL", + "complexExamples": "Komplexere Beispiele", + "complexExample1Desc": "\"youtube\" in URL, und Titel \"haskell\" oder Titel \"python\" und nach dem 31.12.2017", + "complexExample2Desc": "\"hacker news\" nicht im Titel, und \"news\", \"cnn\", \"npr\" irgendwo, oder \"the guardian\" in der Beschreibung" + } +}
static/locales/en/translation.json view
@@ -1,162 +1,199 @@-{- "auth": {- "invalidUsernamePass": "Invalid username/password combination",- "incorrectOldPassword": "Incorrect Old Password",- "passwordTooShort": "Password must be at least 6 characters long",- "passUpdated": "Password updated",- "missingRequiredFields": "Missing Required Fields"- },- "error": {- "notFound": "Not Found",- "internalError": "Internal Server Error",- "invalidArgs": "Invalid Arguments",- "badMethod": "Bad Method",- "notAuthenticated": "Not Authenticated",- "permissionDenied": "Permission Denied"- },- "nav": {- "privateProfileEnabled": "private profile enabled",- "darkMode": "dark mode",- "lightMode": "light mode",- "addUrl": "add url",- "addNote": "add note",- "notes": "notes",- "settings": "settings",- "logout": "log out",- "login": "log in"- },- "footer": {- "sourceCode": "Source Code"- },- "login": {- "pageTitle": "Log In",- "username": "Username",- "password": "Password",- "submit": "Log In"- },- "changePassword": {- "oldPassword": "Old Password",- "newPassword": "New Password",- "submit": "Save Changes"- },- "settings": {- "serverDefault": "Server Default",- "bookmarklet": "add url bookmarklet",- "changePassword": "Change Password",- "accountTitle": "Account Settings",- "archiveDefault": "Archive new non-Private bookmarks by default",- "privateDefault": "Default new bookmarks to Private",- "suggestTags": "Enable tag suggestions",- "privacyLock": "Privacy Lock (Private Account)",- "archivingDisabled": "Archiving Disabled",- "language": "Language"- },- "rss": "RSS",- "filter": {- "all": "all",- "private": "private",- "public": "public",- "unread": "unread",- "untagged": "untagged",- "starred": "starred"- },- "pagination": {- "perPage": "per page:"- },- "pager": {- "earlier": "« earlier",- "later": "later »"- },- "notes": {- "youHave": "You have",- "found": "Found",- "label": "notes:"- },- "search": {- "placeholder": "search",- "clearTitle": "clear search results",- "submitTitle": "submit search",- "syntaxTitle": "search syntax"- },- "noTitle": "[no title]",- "edit": "edit",- "delete": "delete",- "cancel": "cancel",- "destroy": "destroy",- "save": "save",- "fetch": "fetch",- "archive": "archive",- "archiving": "archiving",- "bmark": {- "archiveLinkTitle": "archive link",- "markAsRead": "mark as read",- "viewInContext": "view in context",- "url": "url",- "title": "title",- "description": "description",- "tags": "tags",- "private": "private",- "toread": "to-read"- },- "note": {- "killed": "you killed this note",- "titleLabel": "title:",- "descriptionLabel": "description:",- "useMarkdown": "use markdown?",- "publicLabel": "public?"- },- "addForm": {- "previouslySaved": "previously saved",- "url": "URL",- "archive": "archive",- "archiveUnavailable": "archiving is unavailable for private bookmarks",- "readLater": "read later",- "update": "update bookmark",- "add": "add bookmark",- "killed": "you killed this bookmark"- },- "tagCloud": {- "relatedTags": "Related Tags",- "topTags": "Top Tags",- "topTagsTitle": "show a cloud of your most-used tags",- "allTitle": "show all tags",- "min2Title": "show tags with at least 2 bookmarks",- "min5Title": "show tags with at least 5 bookmarks",- "min10Title": "show tags with at least 10 bookmarks",- "min20Title": "show tags with at least 20 bookmarks",- "hide": "hide",- "show": "show"- },- "docs": {- "title": "Understanding the Search Syntax",- "pageFilters": "Page filters",- "pageFiltersDesc": "Searches are scoped to the currently selected page filter.",- "soGiven": "So, given the possible page filters",- "if": "If",- "isCurrentlySelectedIncludes": "is currently selected, the search includes",- "bookmarks": "bookmarks",- "isCurrentlySelectedOnly": "is currently selected, the search only includes",- "bookmarksEtc": "bookmarks, etc..",- "combineAnd": "Combine Searches (AND)",- "separateBySpace": "Separate terms by a space.",- "forExample": "For example,",- "combineOr": "Combine Searches (OR)",- "put": "Put",- "betweenQuery": "between each search query.",- "excludeWords": "Exclude words from your search",- "inFrontWord": "in front of a word you want to leave out.",- "exactMatch": "Search for an exact match",- "putInQuotes": "Put a word or phrase inside quotes.",- "specificField": "Search on a specific field",- "inFrontTerm": "in front of the term,",- "where": "where",- "isOneOfOptions": "is one of the options below",- "bookmarkSearch": "Bookmark Search",- "noteSearch": "Note Search",- "fieldHeader": "FIELD",- "exampleHeader": "EXAMPLE",- "complexExamples": "More Complex Examples",- "complexExample1Desc": "\"youtube\" in url, and title of \"haskell\" or title of \"python\" and after 12/31/2017",- "complexExample2Desc": "\"hacker news\" not in title, and \"news\", \"cnn\", \"npr\" anywhere, or \"the guardian\" in the description"- }-}+{ + "auth": { + "invalidUsernamePass": "Invalid username/password combination", + "incorrectOldPassword": "Incorrect Old Password", + "passwordTooShort": "Password must be at least 6 characters long", + "passUpdated": "Password updated", + "missingRequiredFields": "Missing Required Fields" + }, + "error": { + "notFound": "Not Found", + "internalError": "Internal Server Error", + "invalidArgs": "Invalid Arguments", + "badMethod": "Bad Method", + "notAuthenticated": "Not Authenticated", + "permissionDenied": "Permission Denied", + "error": "error: {{status}}", + "errorWithMsg": "error {{status}}: {{msg}}", + "requestTimedOut": "request timed out", + "networkError": "network error" + }, + "nav": { + "privateProfileEnabled": "private profile enabled", + "darkMode": "dark mode", + "lightMode": "light mode", + "addUrl": "add url", + "addNote": "add note", + "notes": "notes", + "settings": "settings", + "logout": "log out", + "login": "log in" + }, + "footer": { + "sourceCode": "Source Code" + }, + "login": { + "pageTitle": "Log In", + "username": "Username", + "password": "Password", + "submit": "Log In" + }, + "changePassword": { + "oldPassword": "Old Password", + "newPassword": "New Password", + "submit": "Save Changes" + }, + "settings": { + "serverDefault": "Server Default", + "bookmarklet": "add url bookmarklet", + "changePassword": "Change Password", + "accountTitle": "Account Settings", + "archiveDefault": "Archive new non-Private bookmarks by default", + "privateDefault": "Default new bookmarks to Private", + "suggestTags": "Enable tag suggestions", + "privacyLock": "Privacy Lock (Private Account)", + "publicTagCloud": "Public Tag Cloud (visible to visitors)", + "archivingDisabled": "Archiving Disabled", + "language": "Language" + }, + "rss": "RSS", + "filter": { + "all": "all", + "private": "private", + "public": "public", + "unread": "unread", + "untagged": "untagged", + "starred": "starred" + }, + "pagination": { + "perPage": "per page:" + }, + "pager": { + "earlier": "« earlier", + "later": "later »" + }, + "notes": { + "youHave_one": "You have 1 note:", + "youHave_other": "You have {{count}} notes:", + "found_one": "Found 1 note:", + "found_other": "Found {{count}} notes:" + }, + "search": { + "placeholder": "search", + "clearTitle": "clear search results", + "submitTitle": "submit search", + "syntaxTitle": "search syntax" + }, + "noTitle": "[no title]", + "edit": "edit", + "delete": "delete", + "cancel": "cancel", + "destroy": "destroy", + "save": "save", + "fetch": "fetch", + "archive": "archive", + "archiving": "archiving", + "bmark": { + "archiveLinkTitle": "archive link", + "markAsRead": "mark as read", + "viewInContext": "view in context", + "url": "url", + "title": "title", + "description": "description", + "tags": "tags", + "private": "private", + "toread": "to-read" + }, + "note": { + "killed": "you killed this note", + "titleLabel": "title:", + "descriptionLabel": "description:", + "useMarkdown": "use markdown?", + "publicLabel": "public?" + }, + "addForm": { + "previouslySaved": "previously saved", + "url": "URL", + "archive": "archive", + "archiveUnavailable": "archiving is unavailable for private bookmarks", + "readLater": "read later", + "update": "update bookmark", + "add": "add bookmark", + "killed": "you killed this bookmark" + }, + "tagCloud": { + "relatedTags": "Related Tags", + "topTags": "Top Tags", + "topTagsTitle": "show a cloud of your most-used tags", + "allTitle": "show all tags", + "min2Title": "show tags with at least 2 bookmarks", + "min5Title": "show tags with at least 5 bookmarks", + "min10Title": "show tags with at least 10 bookmarks", + "min20Title": "show tags with at least 20 bookmarks", + "hide": "hide", + "show": "show" + }, + "bulkEdit": { + "edit": "edit", + "select": "select:", + "oneBookmarkSelected": "1 bookmark selected", + "bookmarksSelected": "{{count}} bookmarks selected", + "thisPage": "this page", + "allPages": "all pages", + "action": "action:", + "markAsRead": "mark as read", + "unread": "unread", + "addStars": "add stars", + "removeStars": "remove stars", + "makePrivate": "make private", + "makePublic": "make public", + "removeTags": "remove tags:", + "addTags": "add tags:", + "submitting": "submitting…", + "submit": "submit", + "destroyOne": "destroy 1 bookmark?", + "destroyMany": "destroy {{count}} bookmarks?", + "publicOne": "make 1 bookmark public?", + "publicMany": "make {{count}} bookmarks public?", + "pleaseAddSelection": "please add a bookmark selection", + "pleaseChooseAction": "please choose an action or enter tags", + "tooManyTags": "cannot add more than 10 tags at the same time when over 20,000 bookmarks would be affected", + "pageMismatch": "page bookmark count mismatch", + "editedCount_one": "edited {{editedCount}} bookmark", + "editedCount_other": "edited {{editedCount}} bookmarks", + "editedCountMismatch_one": "selection count was {{selectionCount}}, but edited {{editedCount}} bookmark, due to matching bookmark data having changed", + "editedCountMismatch_other": "selection count was {{selectionCount}}, but edited {{editedCount}} bookmarks, due to matching bookmark data having changed" + }, + "docs": { + "title": "Understanding the Search Syntax", + "pageFilters": "Page filters", + "pageFiltersDesc": "Searches are scoped to the currently selected page filter.", + "soGiven": "So, given the possible page filters", + "if": "If", + "isCurrentlySelectedIncludes": "is currently selected, the search includes", + "bookmarks": "bookmarks", + "isCurrentlySelectedOnly": "is currently selected, the search only includes", + "bookmarksEtc": "bookmarks, etc..", + "combineAnd": "Combine Searches (AND)", + "separateBySpace": "Separate terms by a space.", + "forExample": "For example,", + "combineOr": "Combine Searches (OR)", + "put": "Put", + "betweenQuery": "between each search query.", + "excludeWords": "Exclude words from your search", + "inFrontWord": "in front of a word you want to leave out.", + "exactMatch": "Search for an exact match", + "putInQuotes": "Put a word or phrase inside quotes.", + "specificField": "Search on a specific field", + "inFrontTerm": "in front of the term,", + "where": "where", + "isOneOfOptions": "is one of the options below", + "bookmarkSearch": "Bookmark Search", + "noteSearch": "Note Search", + "fieldHeader": "FIELD", + "exampleHeader": "EXAMPLE", + "complexExamples": "More Complex Examples", + "complexExample1Desc": "\"youtube\" in url, and title of \"haskell\" or title of \"python\" and after 12/31/2017", + "complexExample2Desc": "\"hacker news\" not in title, and \"news\", \"cnn\", \"npr\" anywhere, or \"the guardian\" in the description" + } +}
static/locales/es/translation.json view
@@ -1,162 +1,198 @@-{- "auth": {- "invalidUsernamePass": "Combinacion de usuario/contrasena no valida",- "incorrectOldPassword": "Contrasena anterior incorrecta",- "passwordTooShort": "La contrasena debe tener al menos 6 caracteres",- "passUpdated": "Contrasena actualizada",- "missingRequiredFields": "Faltan campos obligatorios"- },- "error": {- "notFound": "No encontrado",- "internalError": "Error interno del servidor",- "invalidArgs": "Argumentos no validos",- "badMethod": "Metodo no permitido",- "notAuthenticated": "No autenticado",- "permissionDenied": "Permiso denegado"- },- "nav": {- "privateProfileEnabled": "perfil privado activado",- "darkMode": "modo oscuro",- "lightMode": "modo claro",- "addUrl": "anadir url",- "addNote": "anadir nota",- "notes": "notas",- "settings": "ajustes",- "logout": "cerrar sesion",- "login": "iniciar sesion"- },- "footer": {- "sourceCode": "Codigo fuente"- },- "login": {- "pageTitle": "Iniciar sesion",- "username": "Usuario",- "password": "Contrasena",- "submit": "Iniciar sesion"- },- "changePassword": {- "oldPassword": "Contrasena anterior",- "newPassword": "Nueva contrasena",- "submit": "Guardar cambios"- },- "settings": {- "serverDefault": "Predeterminado del servidor",- "bookmarklet": "bookmarklet para anadir url",- "changePassword": "Cambiar contrasena",- "accountTitle": "Configuracion de la cuenta",- "archiveDefault": "Archivar por defecto los nuevos marcadores no privados",- "privateDefault": "Marcar como privados por defecto los nuevos marcadores",- "suggestTags": "Activar sugerencias de etiquetas",- "privacyLock": "Bloqueo de privacidad (cuenta privada)",- "archivingDisabled": "Archivado desactivado",- "language": "Idioma"- },- "rss": "RSS",- "filter": {- "all": "todos",- "private": "privados",- "public": "publicos",- "unread": "no leidos",- "untagged": "sin etiquetas",- "starred": "destacados"- },- "pagination": {- "perPage": "por pagina:"- },- "pager": {- "earlier": "« anteriores",- "later": "siguientes »"- },- "notes": {- "youHave": "Tienes",- "found": "Encontrado",- "label": "notas:"- },- "search": {- "placeholder": "buscar",- "clearTitle": "borrar resultados de busqueda",- "submitTitle": "enviar busqueda",- "syntaxTitle": "sintaxis de busqueda"- },- "noTitle": "[sin titulo]",- "edit": "editar",- "delete": "eliminar",- "cancel": "cancelar",- "destroy": "destruir",- "save": "guardar",- "fetch": "obtener",- "archive": "archivar",- "archiving": "archivando",- "bmark": {- "archiveLinkTitle": "enlace archivado",- "markAsRead": "marcar como leido",- "viewInContext": "ver en contexto",- "url": "url",- "title": "titulo",- "description": "descripcion",- "tags": "etiquetas",- "private": "privado",- "toread": "leer despues"- },- "note": {- "killed": "has eliminado esta nota",- "titleLabel": "titulo:",- "descriptionLabel": "descripcion:",- "useMarkdown": "usar markdown?",- "publicLabel": "publica?"- },- "addForm": {- "previouslySaved": "guardado anteriormente",- "url": "URL",- "archive": "archivar",- "archiveUnavailable": "el archivado no esta disponible para los marcadores privados",- "readLater": "leer mas tarde",- "update": "actualizar marcador",- "add": "anadir marcador",- "killed": "has eliminado este marcador"- },- "tagCloud": {- "relatedTags": "Etiquetas relacionadas",- "topTags": "Etiquetas principales",- "topTagsTitle": "mostrar una nube con tus etiquetas mas usadas",- "allTitle": "mostrar todas las etiquetas",- "min2Title": "mostrar etiquetas con al menos 2 marcadores",- "min5Title": "mostrar etiquetas con al menos 5 marcadores",- "min10Title": "mostrar etiquetas con al menos 10 marcadores",- "min20Title": "mostrar etiquetas con al menos 20 marcadores",- "hide": "ocultar",- "show": "mostrar"- },- "docs": {- "title": "Entender la sintaxis de busqueda",- "pageFilters": "Filtros de pagina",- "pageFiltersDesc": "Las busquedas se limitan al filtro de pagina seleccionado actualmente.",- "soGiven": "Asi que, dados los posibles filtros de pagina",- "if": "Si",- "isCurrentlySelectedIncludes": "esta seleccionado actualmente, la busqueda incluye",- "bookmarks": "marcadores",- "isCurrentlySelectedOnly": "esta seleccionado actualmente, la busqueda solo incluye",- "bookmarksEtc": "marcadores, etc.",- "combineAnd": "Combinar busquedas (AND)",- "separateBySpace": "Separa los terminos con un espacio.",- "forExample": "Por ejemplo,",- "combineOr": "Combinar busquedas (OR)",- "put": "Pon",- "betweenQuery": "entre cada consulta de busqueda.",- "excludeWords": "Excluir palabras de tu busqueda",- "inFrontWord": "delante de una palabra que quieras omitir.",- "exactMatch": "Buscar una coincidencia exacta",- "putInQuotes": "Pon una palabra o frase entre comillas.",- "specificField": "Buscar en un campo especifico",- "inFrontTerm": "delante del termino,",- "where": "donde",- "isOneOfOptions": "es una de las opciones siguientes",- "bookmarkSearch": "Busqueda de marcadores",- "noteSearch": "Busqueda de notas",- "fieldHeader": "CAMPO",- "exampleHeader": "EJEMPLO",- "complexExamples": "Ejemplos mas complejos",- "complexExample1Desc": "\"youtube\" en la url, y titulo de \"haskell\" o titulo de \"python\" y despues del 31/12/2017",- "complexExample2Desc": "\"hacker news\" no en el titulo, y \"news\", \"cnn\", \"npr\" en cualquier parte, o \"the guardian\" en la descripcion"- }-}+{ + "auth": { + "invalidUsernamePass": "Combinacion de usuario/contrasena no valida", + "incorrectOldPassword": "Contrasena anterior incorrecta", + "passwordTooShort": "La contrasena debe tener al menos 6 caracteres", + "passUpdated": "Contrasena actualizada", + "missingRequiredFields": "Faltan campos obligatorios" + }, + "error": { + "notFound": "No encontrado", + "internalError": "Error interno del servidor", + "invalidArgs": "Argumentos no validos", + "badMethod": "Metodo no permitido", + "notAuthenticated": "No autenticado", + "permissionDenied": "Permiso denegado", + "error": "error: {{status}}", + "errorWithMsg": "error {{status}}: {{msg}}", + "requestTimedOut": "tiempo de espera agotado", + "networkError": "error de red" + }, + "nav": { + "privateProfileEnabled": "perfil privado activado", + "darkMode": "modo oscuro", + "lightMode": "modo claro", + "addUrl": "anadir url", + "addNote": "anadir nota", + "notes": "notas", + "settings": "ajustes", + "logout": "cerrar sesion", + "login": "iniciar sesion" + }, + "footer": { + "sourceCode": "Codigo fuente" + }, + "login": { + "pageTitle": "Iniciar sesion", + "username": "Usuario", + "password": "Contrasena", + "submit": "Iniciar sesion" + }, + "changePassword": { + "oldPassword": "Contrasena anterior", + "newPassword": "Nueva contrasena", + "submit": "Guardar cambios" + }, + "settings": { + "serverDefault": "Predeterminado del servidor", + "bookmarklet": "bookmarklet para anadir url", + "changePassword": "Cambiar contrasena", + "accountTitle": "Configuracion de la cuenta", + "archiveDefault": "Archivar por defecto los nuevos marcadores no privados", + "privateDefault": "Marcar como privados por defecto los nuevos marcadores", + "suggestTags": "Activar sugerencias de etiquetas", + "privacyLock": "Bloqueo de privacidad (cuenta privada)",\n "publicTagCloud": "Public Tag Cloud (visible to visitors)", + "archivingDisabled": "Archivado desactivado", + "language": "Idioma" + }, + "rss": "RSS", + "filter": { + "all": "todos", + "private": "privados", + "public": "publicos", + "unread": "no leidos", + "untagged": "sin etiquetas", + "starred": "destacados" + }, + "pagination": { + "perPage": "por pagina:" + }, + "pager": { + "earlier": "« anteriores", + "later": "siguientes »" + }, + "notes": { + "youHave_one": "Tienes 1 nota:", + "youHave_other": "Tienes {{count}} notas:", + "found_one": "Encontrada 1 nota:", + "found_other": "Encontradas {{count}} notas:" + }, + "search": { + "placeholder": "buscar", + "clearTitle": "borrar resultados de busqueda", + "submitTitle": "enviar busqueda", + "syntaxTitle": "sintaxis de busqueda" + }, + "noTitle": "[sin titulo]", + "edit": "editar", + "delete": "eliminar", + "cancel": "cancelar", + "destroy": "destruir", + "save": "guardar", + "fetch": "obtener", + "archive": "archivar", + "archiving": "archivando", + "bmark": { + "archiveLinkTitle": "enlace archivado", + "markAsRead": "marcar como leido", + "viewInContext": "ver en contexto", + "url": "url", + "title": "titulo", + "description": "descripcion", + "tags": "etiquetas", + "private": "privado", + "toread": "leer despues" + }, + "note": { + "killed": "has eliminado esta nota", + "titleLabel": "titulo:", + "descriptionLabel": "descripcion:", + "useMarkdown": "usar markdown?", + "publicLabel": "publica?" + }, + "addForm": { + "previouslySaved": "guardado anteriormente", + "url": "URL", + "archive": "archivar", + "archiveUnavailable": "el archivado no esta disponible para los marcadores privados", + "readLater": "leer mas tarde", + "update": "actualizar marcador", + "add": "anadir marcador", + "killed": "has eliminado este marcador" + }, + "tagCloud": { + "relatedTags": "Etiquetas relacionadas", + "topTags": "Etiquetas principales", + "topTagsTitle": "mostrar una nube con tus etiquetas mas usadas", + "allTitle": "mostrar todas las etiquetas", + "min2Title": "mostrar etiquetas con al menos 2 marcadores", + "min5Title": "mostrar etiquetas con al menos 5 marcadores", + "min10Title": "mostrar etiquetas con al menos 10 marcadores", + "min20Title": "mostrar etiquetas con al menos 20 marcadores", + "hide": "ocultar", + "show": "mostrar" + }, + "bulkEdit": { + "edit": "editar", + "select": "seleccionar:", + "oneBookmarkSelected": "1 marcador seleccionado", + "bookmarksSelected": "{{count}} marcadores seleccionados", + "thisPage": "esta página", + "allPages": "todas las páginas", + "action": "acción:", + "markAsRead": "marcar como leído", + "unread": "no leído", + "addStars": "añadir estrellas", + "removeStars": "quitar estrellas", + "makePrivate": "hacer privado", + "makePublic": "hacer público", + "removeTags": "eliminar etiquetas:", + "addTags": "añadir etiquetas:", + "submitting": "enviando…", + "submit": "enviar", + "destroyOne": "¿eliminar 1 marcador?", + "destroyMany": "¿eliminar {{count}} marcadores?", + "publicOne": "¿hacer público 1 marcador?", + "publicMany": "¿hacer públicos {{count}} marcadores?", + "pleaseAddSelection": "por favor seleccione un marcador", + "pleaseChooseAction": "por favor elija una acción o ingrese etiquetas", + "tooManyTags": "no se pueden añadir más de 10 etiquetas a la vez cuando hay más de 20.000 marcadores afectados", + "pageMismatch": "el número de marcadores de la página no coincide", + "editedCount_one": "se editó {{editedCount}} marcador", + "editedCount_other": "se editaron {{editedCount}} marcadores", + "editedCountMismatch_one": "el recuento de selección era {{selectionCount}}, pero se editó {{editedCount}} marcador, porque los datos del marcador coincidente han cambiado", + "editedCountMismatch_other": "el recuento de selección era {{selectionCount}}, pero se editaron {{editedCount}} marcadores, porque los datos de los marcadores coincidentes han cambiado" + }, + "docs": { + "title": "Entender la sintaxis de busqueda", + "pageFilters": "Filtros de pagina", + "pageFiltersDesc": "Las busquedas se limitan al filtro de pagina seleccionado actualmente.", + "soGiven": "Asi que, dados los posibles filtros de pagina", + "if": "Si", + "isCurrentlySelectedIncludes": "esta seleccionado actualmente, la busqueda incluye", + "bookmarks": "marcadores", + "isCurrentlySelectedOnly": "esta seleccionado actualmente, la busqueda solo incluye", + "bookmarksEtc": "marcadores, etc.", + "combineAnd": "Combinar busquedas (AND)", + "separateBySpace": "Separa los terminos con un espacio.", + "forExample": "Por ejemplo,", + "combineOr": "Combinar busquedas (OR)", + "put": "Pon", + "betweenQuery": "entre cada consulta de busqueda.", + "excludeWords": "Excluir palabras de tu busqueda", + "inFrontWord": "delante de una palabra que quieras omitir.", + "exactMatch": "Buscar una coincidencia exacta", + "putInQuotes": "Pon una palabra o frase entre comillas.", + "specificField": "Buscar en un campo especifico", + "inFrontTerm": "delante del termino,", + "where": "donde", + "isOneOfOptions": "es una de las opciones siguientes", + "bookmarkSearch": "Busqueda de marcadores", + "noteSearch": "Busqueda de notas", + "fieldHeader": "CAMPO", + "exampleHeader": "EJEMPLO", + "complexExamples": "Ejemplos mas complejos", + "complexExample1Desc": "\"youtube\" en la url, y titulo de \"haskell\" o titulo de \"python\" y despues del 31/12/2017", + "complexExample2Desc": "\"hacker news\" no en el titulo, y \"news\", \"cnn\", \"npr\" en cualquier parte, o \"the guardian\" en la descripcion" + } +}
static/locales/fr/translation.json view
@@ -1,162 +1,198 @@-{- "auth": {- "invalidUsernamePass": "La combinaison de ce mot de passe et de ce nom d'utilisateur n'existe pas.",- "incorrectOldPassword": "Ancien mot de passe incorrect",- "passwordTooShort": "Le mot de passe doit comporter au moins 6 caractères",- "passUpdated": "Mot de passe mis à jour",- "missingRequiredFields": "Champs requis manquants"- },- "error": {- "notFound": "Introuvable",- "internalError": "Erreur interne du serveur",- "invalidArgs": "Arguments invalides",- "badMethod": "Méthode non autorisée",- "notAuthenticated": "Non authentifié",- "permissionDenied": "Permission refusée"- },- "nav": {- "privateProfileEnabled": "profil privé activé",- "darkMode": "mode sombre",- "lightMode": "mode clair",- "addUrl": "ajouter une URL",- "addNote": "ajouter une note",- "notes": "notes",- "settings": "paramètres",- "logout": "déconnexion",- "login": "connexion"- },- "footer": {- "sourceCode": "Code source"- },- "login": {- "pageTitle": "Connexion",- "username": "Nom d'utilisateur",- "password": "Mot de passe",- "submit": "Se connecter"- },- "changePassword": {- "oldPassword": "Ancien mot de passe",- "newPassword": "Nouveau mot de passe",- "submit": "Enregistrer les modifications"- },- "settings": {- "serverDefault": "Par defaut du serveur",- "bookmarklet": "bookmarklet d'ajout d'URL",- "changePassword": "Changer le mot de passe",- "accountTitle": "Paramètres du compte",- "archiveDefault": "Archiver les nouveaux favoris non-privés par défaut",- "privateDefault": "Mettre les nouveaux favoris en privé par défaut",- "suggestTags": "Activer les suggestions de tags",- "privacyLock": "Verrouillage de confidentialité (compte privé)",- "archivingDisabled": "Archivage désactivé",- "language": "Langue"- },- "rss": "RSS",- "filter": {- "all": "tous",- "private": "privé",- "public": "public",- "unread": "non lu",- "untagged": "sans tag",- "starred": "favoris"- },- "pagination": {- "perPage": "par page :"- },- "pager": {- "earlier": "« précédent",- "later": "suivant »"- },- "notes": {- "youHave": "Vous avez",- "found": "Trouvé",- "label": "notes :"- },- "search": {- "placeholder": "rechercher",- "clearTitle": "effacer les résultats de recherche",- "submitTitle": "lancer la recherche",- "syntaxTitle": "syntaxe de recherche"- },- "noTitle": "[sans titre]",- "edit": "modifier",- "delete": "supprimer",- "cancel": "annuler",- "destroy": "détruire",- "save": "enregistrer",- "fetch": "récupérer",- "archive": "archiver",- "archiving": "archivage en cours",- "bmark": {- "archiveLinkTitle": "lien d'archive",- "markAsRead": "marquer comme lu",- "viewInContext": "voir en contexte",- "url": "URL",- "title": "titre",- "description": "description",- "tags": "tags",- "private": "privé",- "toread": "à lire"- },- "note": {- "killed": "vous avez supprimé cette note",- "titleLabel": "titre :",- "descriptionLabel": "description :",- "useMarkdown": "utiliser Markdown ?",- "publicLabel": "public ?"- },- "addForm": {- "previouslySaved": "précédemment enregistré",- "url": "URL",- "archive": "archiver",- "archiveUnavailable": "l'archivage n'est pas disponible pour les favoris privés",- "readLater": "lire plus tard",- "update": "mettre à jour le favori",- "add": "ajouter un favori",- "killed": "vous avez supprimé ce favori"- },- "tagCloud": {- "relatedTags": "Tags associés",- "topTags": "Tags populaires",- "topTagsTitle": "afficher un nuage de vos tags les plus utilisés",- "allTitle": "afficher tous les tags",- "min2Title": "afficher les tags avec au moins 2 favoris",- "min5Title": "afficher les tags avec au moins 5 favoris",- "min10Title": "afficher les tags avec au moins 10 favoris",- "min20Title": "afficher les tags avec au moins 20 favoris",- "hide": "masquer",- "show": "afficher"- },- "docs": {- "title": "Comprendre la syntaxe de recherche",- "pageFilters": "Filtres de page",- "pageFiltersDesc": "Les recherches sont limitées au filtre de page actuellement sélectionné.",- "soGiven": "Ainsi, étant donné les filtres de page possibles",- "if": "Si",- "isCurrentlySelectedIncludes": "est actuellement sélectionné, la recherche inclut",- "bookmarks": "favoris",- "isCurrentlySelectedOnly": "est actuellement sélectionné, la recherche inclut uniquement",- "bookmarksEtc": "favoris, etc.",- "combineAnd": "Combiner des recherches (ET)",- "separateBySpace": "Séparer les termes par un espace.",- "forExample": "Par exemple,",- "combineOr": "Combiner des recherches (OU)",- "put": "Mettez",- "betweenQuery": "entre chaque requête de recherche.",- "excludeWords": "Exclure des mots de votre recherche",- "inFrontWord": "devant un mot que vous souhaitez exclure.",- "exactMatch": "Rechercher une correspondance exacte",- "putInQuotes": "Mettez un mot ou une phrase entre guillemets.",- "specificField": "Rechercher dans un champ spécifique",- "inFrontTerm": "devant le terme,",- "where": "où",- "isOneOfOptions": "est l'une des options ci-dessous",- "bookmarkSearch": "Recherche de favoris",- "noteSearch": "Recherche de notes",- "fieldHeader": "CHAMP",- "exampleHeader": "EXEMPLE",- "complexExamples": "Exemples plus complexes",- "complexExample1Desc": "\"youtube\" dans l'URL, et titre \"haskell\" ou titre \"python\" et après le 31/12/2017",- "complexExample2Desc": "\"hacker news\" pas dans le titre, et \"news\", \"cnn\", \"npr\" n'importe où, ou \"the guardian\" dans la description"- }-}+{ + "auth": { + "invalidUsernamePass": "La combinaison de ce mot de passe et de ce nom d'utilisateur n'existe pas.", + "incorrectOldPassword": "Ancien mot de passe incorrect", + "passwordTooShort": "Le mot de passe doit comporter au moins 6 caractères", + "passUpdated": "Mot de passe mis à jour", + "missingRequiredFields": "Champs requis manquants" + }, + "error": { + "notFound": "Introuvable", + "internalError": "Erreur interne du serveur", + "invalidArgs": "Arguments invalides", + "badMethod": "Méthode non autorisée", + "notAuthenticated": "Non authentifié", + "permissionDenied": "Permission refusée", + "error": "erreur : {{status}}", + "errorWithMsg": "erreur {{status}} : {{msg}}", + "requestTimedOut": "délai de la requête dépassé", + "networkError": "erreur réseau" + }, + "nav": { + "privateProfileEnabled": "profil privé activé", + "darkMode": "mode sombre", + "lightMode": "mode clair", + "addUrl": "ajouter une URL", + "addNote": "ajouter une note", + "notes": "notes", + "settings": "paramètres", + "logout": "déconnexion", + "login": "connexion" + }, + "footer": { + "sourceCode": "Code source" + }, + "login": { + "pageTitle": "Connexion", + "username": "Nom d'utilisateur", + "password": "Mot de passe", + "submit": "Se connecter" + }, + "changePassword": { + "oldPassword": "Ancien mot de passe", + "newPassword": "Nouveau mot de passe", + "submit": "Enregistrer les modifications" + }, + "settings": { + "serverDefault": "Par defaut du serveur", + "bookmarklet": "bookmarklet d'ajout d'URL", + "changePassword": "Changer le mot de passe", + "accountTitle": "Paramètres du compte", + "archiveDefault": "Archiver les nouveaux favoris non-privés par défaut", + "privateDefault": "Mettre les nouveaux favoris en privé par défaut", + "suggestTags": "Activer les suggestions de tags", + "privacyLock": "Verrouillage de confidentialité (compte privé)",\n "publicTagCloud": "Public Tag Cloud (visible to visitors)", + "archivingDisabled": "Archivage désactivé", + "language": "Langue" + }, + "rss": "RSS", + "filter": { + "all": "tous", + "private": "privé", + "public": "public", + "unread": "non lu", + "untagged": "sans tag", + "starred": "favoris" + }, + "pagination": { + "perPage": "par page :" + }, + "pager": { + "earlier": "« précédent", + "later": "suivant »" + }, + "notes": { + "youHave_one": "Vous avez 1 note :", + "youHave_other": "Vous avez {{count}} notes :", + "found_one": "1 note trouvée :", + "found_other": "{{count}} notes trouvées :" + }, + "search": { + "placeholder": "rechercher", + "clearTitle": "effacer les résultats de recherche", + "submitTitle": "lancer la recherche", + "syntaxTitle": "syntaxe de recherche" + }, + "noTitle": "[sans titre]", + "edit": "modifier", + "delete": "supprimer", + "cancel": "annuler", + "destroy": "détruire", + "save": "enregistrer", + "fetch": "récupérer", + "archive": "archiver", + "archiving": "archivage en cours", + "bmark": { + "archiveLinkTitle": "lien d'archive", + "markAsRead": "marquer comme lu", + "viewInContext": "voir en contexte", + "url": "URL", + "title": "titre", + "description": "description", + "tags": "tags", + "private": "privé", + "toread": "à lire" + }, + "note": { + "killed": "vous avez supprimé cette note", + "titleLabel": "titre :", + "descriptionLabel": "description :", + "useMarkdown": "utiliser Markdown ?", + "publicLabel": "public ?" + }, + "addForm": { + "previouslySaved": "précédemment enregistré", + "url": "URL", + "archive": "archiver", + "archiveUnavailable": "l'archivage n'est pas disponible pour les favoris privés", + "readLater": "lire plus tard", + "update": "mettre à jour le favori", + "add": "ajouter un favori", + "killed": "vous avez supprimé ce favori" + }, + "tagCloud": { + "relatedTags": "Tags associés", + "topTags": "Tags populaires", + "topTagsTitle": "afficher un nuage de vos tags les plus utilisés", + "allTitle": "afficher tous les tags", + "min2Title": "afficher les tags avec au moins 2 favoris", + "min5Title": "afficher les tags avec au moins 5 favoris", + "min10Title": "afficher les tags avec au moins 10 favoris", + "min20Title": "afficher les tags avec au moins 20 favoris", + "hide": "masquer", + "show": "afficher" + }, + "bulkEdit": { + "edit": "modifier", + "select": "sélectionner :", + "oneBookmarkSelected": "1 marque-page sélectionné", + "bookmarksSelected": "{{count}} marque-pages sélectionnés", + "thisPage": "cette page", + "allPages": "toutes les pages", + "action": "action :", + "markAsRead": "marquer comme lu", + "unread": "non lu", + "addStars": "ajouter des étoiles", + "removeStars": "supprimer les étoiles", + "makePrivate": "rendre privé", + "makePublic": "rendre public", + "removeTags": "supprimer les étiquettes :", + "addTags": "ajouter des étiquettes :", + "submitting": "envoi en cours…", + "submit": "envoyer", + "destroyOne": "supprimer 1 marque-page ?", + "destroyMany": "supprimer {{count}} marque-pages ?", + "publicOne": "rendre 1 marque-page public ?", + "publicMany": "rendre {{count}} marque-pages publics ?", + "pleaseAddSelection": "veuillez sélectionner des marque-pages", + "pleaseChooseAction": "veuillez choisir une action ou saisir des étiquettes", + "tooManyTags": "impossible d'ajouter plus de 10 étiquettes à la fois lorsque plus de 20 000 marque-pages seraient affectés", + "pageMismatch": "le nombre de marque-pages de la page ne correspond pas", + "editedCount_one": "{{editedCount}} marque-page modifié", + "editedCount_other": "{{editedCount}} marque-pages modifiés", + "editedCountMismatch_one": "le nombre de sélection était {{selectionCount}}, mais {{editedCount}} marque-page modifié, car les données du marque-page correspondant ont changé", + "editedCountMismatch_other": "le nombre de sélection était {{selectionCount}}, mais {{editedCount}} marque-pages modifiés, car les données des marque-pages correspondants ont changé" + }, + "docs": { + "title": "Comprendre la syntaxe de recherche", + "pageFilters": "Filtres de page", + "pageFiltersDesc": "Les recherches sont limitées au filtre de page actuellement sélectionné.", + "soGiven": "Ainsi, étant donné les filtres de page possibles", + "if": "Si", + "isCurrentlySelectedIncludes": "est actuellement sélectionné, la recherche inclut", + "bookmarks": "favoris", + "isCurrentlySelectedOnly": "est actuellement sélectionné, la recherche inclut uniquement", + "bookmarksEtc": "favoris, etc.", + "combineAnd": "Combiner des recherches (ET)", + "separateBySpace": "Séparer les termes par un espace.", + "forExample": "Par exemple,", + "combineOr": "Combiner des recherches (OU)", + "put": "Mettez", + "betweenQuery": "entre chaque requête de recherche.", + "excludeWords": "Exclure des mots de votre recherche", + "inFrontWord": "devant un mot que vous souhaitez exclure.", + "exactMatch": "Rechercher une correspondance exacte", + "putInQuotes": "Mettez un mot ou une phrase entre guillemets.", + "specificField": "Rechercher dans un champ spécifique", + "inFrontTerm": "devant le terme,", + "where": "où", + "isOneOfOptions": "est l'une des options ci-dessous", + "bookmarkSearch": "Recherche de favoris", + "noteSearch": "Recherche de notes", + "fieldHeader": "CHAMP", + "exampleHeader": "EXEMPLE", + "complexExamples": "Exemples plus complexes", + "complexExample1Desc": "\"youtube\" dans l'URL, et titre \"haskell\" ou titre \"python\" et après le 31/12/2017", + "complexExample2Desc": "\"hacker news\" pas dans le titre, et \"news\", \"cnn\", \"npr\" n'importe où, ou \"the guardian\" dans la description" + } +}
static/locales/it/translation.json view
@@ -1,162 +1,198 @@-{- "auth": {- "invalidUsernamePass": "Combinazione nome utente/password non valida",- "incorrectOldPassword": "Vecchia password non corretta",- "passwordTooShort": "La password deve contenere almeno 6 caratteri",- "passUpdated": "Password aggiornata",- "missingRequiredFields": "Campi obbligatori mancanti"- },- "error": {- "notFound": "Non trovato",- "internalError": "Errore interno del server",- "invalidArgs": "Argomenti non validi",- "badMethod": "Metodo non consentito",- "notAuthenticated": "Non autenticato",- "permissionDenied": "Permesso negato"- },- "nav": {- "privateProfileEnabled": "profilo privato abilitato",- "darkMode": "modalita scura",- "lightMode": "modalita chiara",- "addUrl": "aggiungi url",- "addNote": "aggiungi nota",- "notes": "note",- "settings": "impostazioni",- "logout": "disconnetti",- "login": "accedi"- },- "footer": {- "sourceCode": "Codice sorgente"- },- "login": {- "pageTitle": "Accedi",- "username": "Nome utente",- "password": "Password",- "submit": "Accedi"- },- "changePassword": {- "oldPassword": "Vecchia password",- "newPassword": "Nuova password",- "submit": "Salva modifiche"- },- "settings": {- "serverDefault": "Predefinito del server",- "bookmarklet": "bookmarklet per aggiungere url",- "changePassword": "Cambia password",- "accountTitle": "Impostazioni account",- "archiveDefault": "Archivia per impostazione predefinita i nuovi segnalibri non privati",- "privateDefault": "Imposta come privati per default i nuovi segnalibri",- "suggestTags": "Abilita i suggerimenti per i tag",- "privacyLock": "Blocco privacy (account privato)",- "archivingDisabled": "Archiviazione disabilitata",- "language": "Lingua"- },- "rss": "RSS",- "filter": {- "all": "tutti",- "private": "privati",- "public": "pubblici",- "unread": "non letti",- "untagged": "senza tag",- "starred": "preferiti"- },- "pagination": {- "perPage": "per pagina:"- },- "pager": {- "earlier": "« precedenti",- "later": "successivi »"- },- "notes": {- "youHave": "Hai",- "found": "Trovato",- "label": "note:"- },- "search": {- "placeholder": "cerca",- "clearTitle": "cancella i risultati della ricerca",- "submitTitle": "invia ricerca",- "syntaxTitle": "sintassi di ricerca"- },- "noTitle": "[senza titolo]",- "edit": "modifica",- "delete": "elimina",- "cancel": "annulla",- "destroy": "distruggi",- "save": "salva",- "fetch": "recupera",- "archive": "archivia",- "archiving": "archiviazione",- "bmark": {- "archiveLinkTitle": "link archiviato",- "markAsRead": "segna come letto",- "viewInContext": "vedi nel contesto",- "url": "url",- "title": "titolo",- "description": "descrizione",- "tags": "tag",- "private": "privato",- "toread": "da leggere"- },- "note": {- "killed": "hai eliminato questa nota",- "titleLabel": "titolo:",- "descriptionLabel": "descrizione:",- "useMarkdown": "usare markdown?",- "publicLabel": "pubblica?"- },- "addForm": {- "previouslySaved": "salvato in precedenza",- "url": "URL",- "archive": "archivia",- "archiveUnavailable": "l'archiviazione non e disponibile per i segnalibri privati",- "readLater": "leggi dopo",- "update": "aggiorna segnalibro",- "add": "aggiungi segnalibro",- "killed": "hai eliminato questo segnalibro"- },- "tagCloud": {- "relatedTags": "Tag correlati",- "topTags": "Tag principali",- "topTagsTitle": "mostra una nuvola dei tuoi tag piu usati",- "allTitle": "mostra tutti i tag",- "min2Title": "mostra i tag con almeno 2 segnalibri",- "min5Title": "mostra i tag con almeno 5 segnalibri",- "min10Title": "mostra i tag con almeno 10 segnalibri",- "min20Title": "mostra i tag con almeno 20 segnalibri",- "hide": "nascondi",- "show": "mostra"- },- "docs": {- "title": "Comprendere la sintassi di ricerca",- "pageFilters": "Filtri di pagina",- "pageFiltersDesc": "Le ricerche sono limitate al filtro di pagina attualmente selezionato.",- "soGiven": "Quindi, dati i possibili filtri di pagina",- "if": "Se",- "isCurrentlySelectedIncludes": "e attualmente selezionato, la ricerca include",- "bookmarks": "segnalibri",- "isCurrentlySelectedOnly": "e attualmente selezionato, la ricerca include solo",- "bookmarksEtc": "segnalibri, ecc.",- "combineAnd": "Combina ricerche (AND)",- "separateBySpace": "Separa i termini con uno spazio.",- "forExample": "Per esempio,",- "combineOr": "Combina ricerche (OR)",- "put": "Metti",- "betweenQuery": "tra ogni query di ricerca.",- "excludeWords": "Escludi parole dalla ricerca",- "inFrontWord": "davanti a una parola che vuoi omettere.",- "exactMatch": "Cerca una corrispondenza esatta",- "putInQuotes": "Metti una parola o una frase tra virgolette.",- "specificField": "Cerca in un campo specifico",- "inFrontTerm": "davanti al termine,",- "where": "dove",- "isOneOfOptions": "e una delle opzioni seguenti",- "bookmarkSearch": "Ricerca segnalibri",- "noteSearch": "Ricerca note",- "fieldHeader": "CAMPO",- "exampleHeader": "ESEMPIO",- "complexExamples": "Esempi piu complessi",- "complexExample1Desc": "\"youtube\" nell'url, e titolo di \"haskell\" o titolo di \"python\" e dopo il 31/12/2017",- "complexExample2Desc": "\"hacker news\" non nel titolo, e \"news\", \"cnn\", \"npr\" ovunque, o \"the guardian\" nella descrizione"- }-}+{ + "auth": { + "invalidUsernamePass": "Combinazione nome utente/password non valida", + "incorrectOldPassword": "Vecchia password non corretta", + "passwordTooShort": "La password deve contenere almeno 6 caratteri", + "passUpdated": "Password aggiornata", + "missingRequiredFields": "Campi obbligatori mancanti" + }, + "error": { + "notFound": "Non trovato", + "internalError": "Errore interno del server", + "invalidArgs": "Argomenti non validi", + "badMethod": "Metodo non consentito", + "notAuthenticated": "Non autenticato", + "permissionDenied": "Permesso negato", + "error": "errore: {{status}}", + "errorWithMsg": "errore {{status}}: {{msg}}", + "requestTimedOut": "richiesta scaduta", + "networkError": "errore di rete" + }, + "nav": { + "privateProfileEnabled": "profilo privato abilitato", + "darkMode": "modalita scura", + "lightMode": "modalita chiara", + "addUrl": "aggiungi url", + "addNote": "aggiungi nota", + "notes": "note", + "settings": "impostazioni", + "logout": "disconnetti", + "login": "accedi" + }, + "footer": { + "sourceCode": "Codice sorgente" + }, + "login": { + "pageTitle": "Accedi", + "username": "Nome utente", + "password": "Password", + "submit": "Accedi" + }, + "changePassword": { + "oldPassword": "Vecchia password", + "newPassword": "Nuova password", + "submit": "Salva modifiche" + }, + "settings": { + "serverDefault": "Predefinito del server", + "bookmarklet": "bookmarklet per aggiungere url", + "changePassword": "Cambia password", + "accountTitle": "Impostazioni account", + "archiveDefault": "Archivia per impostazione predefinita i nuovi segnalibri non privati", + "privateDefault": "Imposta come privati per default i nuovi segnalibri", + "suggestTags": "Abilita i suggerimenti per i tag", + "privacyLock": "Blocco privacy (account privato)",\n "publicTagCloud": "Public Tag Cloud (visible to visitors)", + "archivingDisabled": "Archiviazione disabilitata", + "language": "Lingua" + }, + "rss": "RSS", + "filter": { + "all": "tutti", + "private": "privati", + "public": "pubblici", + "unread": "non letti", + "untagged": "senza tag", + "starred": "preferiti" + }, + "pagination": { + "perPage": "per pagina:" + }, + "pager": { + "earlier": "« precedenti", + "later": "successivi »" + }, + "notes": { + "youHave_one": "Hai 1 nota:", + "youHave_other": "Hai {{count}} note:", + "found_one": "Trovata 1 nota:", + "found_other": "Trovate {{count}} note:" + }, + "search": { + "placeholder": "cerca", + "clearTitle": "cancella i risultati della ricerca", + "submitTitle": "invia ricerca", + "syntaxTitle": "sintassi di ricerca" + }, + "noTitle": "[senza titolo]", + "edit": "modifica", + "delete": "elimina", + "cancel": "annulla", + "destroy": "distruggi", + "save": "salva", + "fetch": "recupera", + "archive": "archivia", + "archiving": "archiviazione", + "bmark": { + "archiveLinkTitle": "link archiviato", + "markAsRead": "segna come letto", + "viewInContext": "vedi nel contesto", + "url": "url", + "title": "titolo", + "description": "descrizione", + "tags": "tag", + "private": "privato", + "toread": "da leggere" + }, + "note": { + "killed": "hai eliminato questa nota", + "titleLabel": "titolo:", + "descriptionLabel": "descrizione:", + "useMarkdown": "usare markdown?", + "publicLabel": "pubblica?" + }, + "addForm": { + "previouslySaved": "salvato in precedenza", + "url": "URL", + "archive": "archivia", + "archiveUnavailable": "l'archiviazione non e disponibile per i segnalibri privati", + "readLater": "leggi dopo", + "update": "aggiorna segnalibro", + "add": "aggiungi segnalibro", + "killed": "hai eliminato questo segnalibro" + }, + "tagCloud": { + "relatedTags": "Tag correlati", + "topTags": "Tag principali", + "topTagsTitle": "mostra una nuvola dei tuoi tag piu usati", + "allTitle": "mostra tutti i tag", + "min2Title": "mostra i tag con almeno 2 segnalibri", + "min5Title": "mostra i tag con almeno 5 segnalibri", + "min10Title": "mostra i tag con almeno 10 segnalibri", + "min20Title": "mostra i tag con almeno 20 segnalibri", + "hide": "nascondi", + "show": "mostra" + }, + "bulkEdit": { + "edit": "modifica", + "select": "seleziona:", + "oneBookmarkSelected": "1 segnalibro selezionato", + "bookmarksSelected": "{{count}} segnalibri selezionati", + "thisPage": "questa pagina", + "allPages": "tutte le pagine", + "action": "azione:", + "markAsRead": "segna come letto", + "unread": "non letto", + "addStars": "aggiungi stelle", + "removeStars": "rimuovi stelle", + "makePrivate": "rendi privato", + "makePublic": "rendi pubblico", + "removeTags": "rimuovi etichette:", + "addTags": "aggiungi etichette:", + "submitting": "invio in corso…", + "submit": "invia", + "destroyOne": "eliminare 1 segnalibro?", + "destroyMany": "eliminare {{count}} segnalibri?", + "publicOne": "rendere pubblico 1 segnalibro?", + "publicMany": "rendere pubblici {{count}} segnalibri?", + "pleaseAddSelection": "seleziona dei segnalibri", + "pleaseChooseAction": "scegli un'azione o inserisci etichette", + "tooManyTags": "non è possibile aggiungere più di 10 etichette contemporaneamente quando sono coinvolti più di 20.000 segnalibri", + "pageMismatch": "il numero di segnalibri nella pagina non corrisponde", + "editedCount_one": "{{editedCount}} segnalibro modificato", + "editedCount_other": "{{editedCount}} segnalibri modificati", + "editedCountMismatch_one": "il conteggio della selezione era {{selectionCount}}, ma {{editedCount}} segnalibro modificato, poiché i dati del segnalibro corrispondente sono cambiati", + "editedCountMismatch_other": "il conteggio della selezione era {{selectionCount}}, ma {{editedCount}} segnalibri modificati, poiché i dati dei segnalibri corrispondenti sono cambiati" + }, + "docs": { + "title": "Comprendere la sintassi di ricerca", + "pageFilters": "Filtri di pagina", + "pageFiltersDesc": "Le ricerche sono limitate al filtro di pagina attualmente selezionato.", + "soGiven": "Quindi, dati i possibili filtri di pagina", + "if": "Se", + "isCurrentlySelectedIncludes": "e attualmente selezionato, la ricerca include", + "bookmarks": "segnalibri", + "isCurrentlySelectedOnly": "e attualmente selezionato, la ricerca include solo", + "bookmarksEtc": "segnalibri, ecc.", + "combineAnd": "Combina ricerche (AND)", + "separateBySpace": "Separa i termini con uno spazio.", + "forExample": "Per esempio,", + "combineOr": "Combina ricerche (OR)", + "put": "Metti", + "betweenQuery": "tra ogni query di ricerca.", + "excludeWords": "Escludi parole dalla ricerca", + "inFrontWord": "davanti a una parola che vuoi omettere.", + "exactMatch": "Cerca una corrispondenza esatta", + "putInQuotes": "Metti una parola o una frase tra virgolette.", + "specificField": "Cerca in un campo specifico", + "inFrontTerm": "davanti al termine,", + "where": "dove", + "isOneOfOptions": "e una delle opzioni seguenti", + "bookmarkSearch": "Ricerca segnalibri", + "noteSearch": "Ricerca note", + "fieldHeader": "CAMPO", + "exampleHeader": "ESEMPIO", + "complexExamples": "Esempi piu complessi", + "complexExample1Desc": "\"youtube\" nell'url, e titolo di \"haskell\" o titolo di \"python\" e dopo il 31/12/2017", + "complexExample2Desc": "\"hacker news\" non nel titolo, e \"news\", \"cnn\", \"npr\" ovunque, o \"the guardian\" nella descrizione" + } +}
static/locales/ja/translation.json view
@@ -1,162 +1,198 @@-{- "auth": {- "invalidUsernamePass": "ユーザ名とパスワードの組み合わせが間違っています",- "incorrectOldPassword": "現在のパスワードが間違っています",- "passwordTooShort": "パスワードは6文字以上である必要があります",- "passUpdated": "パスワードが更新されました",- "missingRequiredFields": "必須フィールドが不足しています"- },- "error": {- "notFound": "見つかりません",- "internalError": "サーバー内部エラー",- "invalidArgs": "無効な引数",- "badMethod": "無効なメソッド",- "notAuthenticated": "認証されていません",- "permissionDenied": "権限がありません"- },- "nav": {- "privateProfileEnabled": "プライベートプロフィールが有効",- "darkMode": "ダークモード",- "lightMode": "ライトモード",- "addUrl": "URLを追加",- "addNote": "メモを追加",- "notes": "メモ",- "settings": "設定",- "logout": "ログアウト",- "login": "ログイン"- },- "footer": {- "sourceCode": "ソースコード"- },- "login": {- "pageTitle": "ログイン",- "username": "ユーザー名",- "password": "パスワード",- "submit": "ログイン"- },- "changePassword": {- "oldPassword": "現在のパスワード",- "newPassword": "新しいパスワード",- "submit": "変更を保存"- },- "settings": {- "serverDefault": "サーバーのデフォルト",- "bookmarklet": "URLブックマークレットを追加",- "changePassword": "パスワードを変更",- "accountTitle": "アカウント設定",- "archiveDefault": "新しい非プライベートブックマークをデフォルトでアーカイブする",- "privateDefault": "新しいブックマークをデフォルトでプライベートにする",- "suggestTags": "タグの候補を有効にする",- "privacyLock": "プライバシーロック(非公開アカウント)",- "archivingDisabled": "アーカイブ無効",- "language": "言語"- },- "rss": "RSS",- "filter": {- "all": "すべて",- "private": "プライベート",- "public": "公開",- "unread": "未読",- "untagged": "タグなし",- "starred": "スター付き"- },- "pagination": {- "perPage": "1ページあたり:"- },- "pager": {- "earlier": "« 前へ",- "later": "次へ »"- },- "notes": {- "youHave": "あなたは",- "found": "見つかりました",- "label": "件のメモ:"- },- "search": {- "placeholder": "検索",- "clearTitle": "検索結果をクリア",- "submitTitle": "検索を実行",- "syntaxTitle": "検索構文"- },- "noTitle": "[タイトルなし]",- "edit": "編集",- "delete": "削除",- "cancel": "キャンセル",- "destroy": "削除する",- "save": "保存",- "fetch": "取得",- "archive": "アーカイブ",- "archiving": "アーカイブ中",- "bmark": {- "archiveLinkTitle": "アーカイブリンク",- "markAsRead": "既読にする",- "viewInContext": "コンテキストで表示",- "url": "URL",- "title": "タイトル",- "description": "説明",- "tags": "タグ",- "private": "プライベート",- "toread": "後で読む"- },- "note": {- "killed": "このメモを削除しました",- "titleLabel": "タイトル:",- "descriptionLabel": "説明:",- "useMarkdown": "Markdownを使用しますか?",- "publicLabel": "公開?"- },- "addForm": {- "previouslySaved": "以前に保存済み",- "url": "URL",- "archive": "アーカイブ",- "archiveUnavailable": "プライベートブックマークにはアーカイブが利用できません",- "readLater": "後で読む",- "update": "ブックマークを更新",- "add": "ブックマークを追加",- "killed": "このブックマークを削除しました"- },- "tagCloud": {- "relatedTags": "関連タグ",- "topTags": "人気タグ",- "topTagsTitle": "最もよく使うタグのクラウドを表示",- "allTitle": "すべてのタグを表示",- "min2Title": "2件以上のブックマークがあるタグを表示",- "min5Title": "5件以上のブックマークがあるタグを表示",- "min10Title": "10件以上のブックマークがあるタグを表示",- "min20Title": "20件以上のブックマークがあるタグを表示",- "hide": "非表示",- "show": "表示"- },- "docs": {- "title": "検索構文の説明",- "pageFilters": "ページフィルター",- "pageFiltersDesc": "検索は現在選択されているページフィルターに限定されます。",- "soGiven": "したがって、使用可能なページフィルターを考えると",- "if": "もし",- "isCurrentlySelectedIncludes": "が現在選択されている場合、検索には次が含まれます",- "bookmarks": "ブックマーク",- "isCurrentlySelectedOnly": "が現在選択されている場合、検索には次のみが含まれます",- "bookmarksEtc": "ブックマークなど",- "combineAnd": "検索の組み合わせ(AND)",- "separateBySpace": "スペースで区切ります。",- "forExample": "例えば、",- "combineOr": "検索の組み合わせ(OR)",- "put": "入力",- "betweenQuery": "を各検索クエリの間に入れます。",- "excludeWords": "検索から単語を除外",- "inFrontWord": "を除外したい単語の前に付けます。",- "exactMatch": "完全一致で検索",- "putInQuotes": "単語またはフレーズを引用符で囲みます。",- "specificField": "特定のフィールドで検索",- "inFrontTerm": "を語句の前に付けます、",- "where": "ここで",- "isOneOfOptions": "は以下のオプションのいずれかです",- "bookmarkSearch": "ブックマーク検索",- "noteSearch": "メモ検索",- "fieldHeader": "フィールド",- "exampleHeader": "例",- "complexExamples": "より複雑な例",- "complexExample1Desc": "URLに「youtube」、タイトルに「haskell」またはタイトルに「python」、かつ2017/12/31以降",- "complexExample2Desc": "タイトルに「hacker news」を含まず、どこかに「news」「cnn」「npr」があるか、説明に「the guardian」がある"- }-}+{ + "auth": { + "invalidUsernamePass": "ユーザ名とパスワードの組み合わせが間違っています", + "incorrectOldPassword": "現在のパスワードが間違っています", + "passwordTooShort": "パスワードは6文字以上である必要があります", + "passUpdated": "パスワードが更新されました", + "missingRequiredFields": "必須フィールドが不足しています" + }, + "error": { + "notFound": "見つかりません", + "internalError": "サーバー内部エラー", + "invalidArgs": "無効な引数", + "badMethod": "無効なメソッド", + "notAuthenticated": "認証されていません", + "permissionDenied": "権限がありません", + "error": "エラー: {{status}}", + "errorWithMsg": "エラー {{status}}: {{msg}}", + "requestTimedOut": "リクエストがタイムアウトしました", + "networkError": "ネットワークエラー" + }, + "nav": { + "privateProfileEnabled": "プライベートプロフィールが有効", + "darkMode": "ダークモード", + "lightMode": "ライトモード", + "addUrl": "URLを追加", + "addNote": "メモを追加", + "notes": "メモ", + "settings": "設定", + "logout": "ログアウト", + "login": "ログイン" + }, + "footer": { + "sourceCode": "ソースコード" + }, + "login": { + "pageTitle": "ログイン", + "username": "ユーザー名", + "password": "パスワード", + "submit": "ログイン" + }, + "changePassword": { + "oldPassword": "現在のパスワード", + "newPassword": "新しいパスワード", + "submit": "変更を保存" + }, + "settings": { + "serverDefault": "サーバーのデフォルト", + "bookmarklet": "URLブックマークレットを追加", + "changePassword": "パスワードを変更", + "accountTitle": "アカウント設定", + "archiveDefault": "新しい非プライベートブックマークをデフォルトでアーカイブする", + "privateDefault": "新しいブックマークをデフォルトでプライベートにする", + "suggestTags": "タグの候補を有効にする", + "privacyLock": "プライバシーロック(非公開アカウント)",\n "publicTagCloud": "Public Tag Cloud (visible to visitors)", + "archivingDisabled": "アーカイブ無効", + "language": "言語" + }, + "rss": "RSS", + "filter": { + "all": "すべて", + "private": "プライベート", + "public": "公開", + "unread": "未読", + "untagged": "タグなし", + "starred": "スター付き" + }, + "pagination": { + "perPage": "1ページあたり:" + }, + "pager": { + "earlier": "« 前へ", + "later": "次へ »" + }, + "notes": { + "youHave_one": "メモが1件あります:", + "youHave_other": "メモが{{count}}件あります:", + "found_one": "1件のメモが見つかりました:", + "found_other": "{{count}}件のメモが見つかりました:" + }, + "search": { + "placeholder": "検索", + "clearTitle": "検索結果をクリア", + "submitTitle": "検索を実行", + "syntaxTitle": "検索構文" + }, + "noTitle": "[タイトルなし]", + "edit": "編集", + "delete": "削除", + "cancel": "キャンセル", + "destroy": "削除する", + "save": "保存", + "fetch": "取得", + "archive": "アーカイブ", + "archiving": "アーカイブ中", + "bmark": { + "archiveLinkTitle": "アーカイブリンク", + "markAsRead": "既読にする", + "viewInContext": "コンテキストで表示", + "url": "URL", + "title": "タイトル", + "description": "説明", + "tags": "タグ", + "private": "プライベート", + "toread": "後で読む" + }, + "note": { + "killed": "このメモを削除しました", + "titleLabel": "タイトル:", + "descriptionLabel": "説明:", + "useMarkdown": "Markdownを使用しますか?", + "publicLabel": "公開?" + }, + "addForm": { + "previouslySaved": "以前に保存済み", + "url": "URL", + "archive": "アーカイブ", + "archiveUnavailable": "プライベートブックマークにはアーカイブが利用できません", + "readLater": "後で読む", + "update": "ブックマークを更新", + "add": "ブックマークを追加", + "killed": "このブックマークを削除しました" + }, + "tagCloud": { + "relatedTags": "関連タグ", + "topTags": "人気タグ", + "topTagsTitle": "最もよく使うタグのクラウドを表示", + "allTitle": "すべてのタグを表示", + "min2Title": "2件以上のブックマークがあるタグを表示", + "min5Title": "5件以上のブックマークがあるタグを表示", + "min10Title": "10件以上のブックマークがあるタグを表示", + "min20Title": "20件以上のブックマークがあるタグを表示", + "hide": "非表示", + "show": "表示" + }, + "bulkEdit": { + "edit": "編集", + "select": "選択:", + "oneBookmarkSelected": "1件のブックマークを選択", + "bookmarksSelected": "{{count}}件のブックマークを選択", + "thisPage": "このページ", + "allPages": "すべてのページ", + "action": "操作:", + "markAsRead": "既読にする", + "unread": "未読", + "addStars": "星を追加", + "removeStars": "星を削除", + "makePrivate": "非公開にする", + "makePublic": "公開にする", + "removeTags": "タグを削除:", + "addTags": "タグを追加:", + "submitting": "送信中…", + "submit": "送信", + "destroyOne": "1件のブックマークを削除しますか?", + "destroyMany": "{{count}}件のブックマークを削除しますか?", + "publicOne": "1件のブックマークを公開にしますか?", + "publicMany": "{{count}}件のブックマークを公開にしますか?", + "pleaseAddSelection": "ブックマークを選択してください", + "pleaseChooseAction": "操作を選択するかタグを入力してください", + "tooManyTags": "20,000件を超えるブックマークに影響する場合、一度に10個以上のタグを追加できません", + "pageMismatch": "ページのブックマーク数が一致しません", + "editedCount_one": "{{editedCount}}件のブックマークを編集しました", + "editedCount_other": "{{editedCount}}件のブックマークを編集しました", + "editedCountMismatch_one": "選択数は{{selectionCount}}でしたが、一致するブックマークデータが変更されたため、{{editedCount}}件のブックマークを編集しました", + "editedCountMismatch_other": "選択数は{{selectionCount}}でしたが、一致するブックマークデータが変更されたため、{{editedCount}}件のブックマークを編集しました" + }, + "docs": { + "title": "検索構文の説明", + "pageFilters": "ページフィルター", + "pageFiltersDesc": "検索は現在選択されているページフィルターに限定されます。", + "soGiven": "したがって、使用可能なページフィルターを考えると", + "if": "もし", + "isCurrentlySelectedIncludes": "が現在選択されている場合、検索には次が含まれます", + "bookmarks": "ブックマーク", + "isCurrentlySelectedOnly": "が現在選択されている場合、検索には次のみが含まれます", + "bookmarksEtc": "ブックマークなど", + "combineAnd": "検索の組み合わせ(AND)", + "separateBySpace": "スペースで区切ります。", + "forExample": "例えば、", + "combineOr": "検索の組み合わせ(OR)", + "put": "入力", + "betweenQuery": "を各検索クエリの間に入れます。", + "excludeWords": "検索から単語を除外", + "inFrontWord": "を除外したい単語の前に付けます。", + "exactMatch": "完全一致で検索", + "putInQuotes": "単語またはフレーズを引用符で囲みます。", + "specificField": "特定のフィールドで検索", + "inFrontTerm": "を語句の前に付けます、", + "where": "ここで", + "isOneOfOptions": "は以下のオプションのいずれかです", + "bookmarkSearch": "ブックマーク検索", + "noteSearch": "メモ検索", + "fieldHeader": "フィールド", + "exampleHeader": "例", + "complexExamples": "より複雑な例", + "complexExample1Desc": "URLに「youtube」、タイトルに「haskell」またはタイトルに「python」、かつ2017/12/31以降", + "complexExample2Desc": "タイトルに「hacker news」を含まず、どこかに「news」「cnn」「npr」があるか、説明に「the guardian」がある" + } +}
static/locales/ko/translation.json view
@@ -1,162 +1,198 @@-{- "auth": {- "invalidUsernamePass": "잘못된 사용자 이름/비밀번호 조합입니다",- "incorrectOldPassword": "기존 비밀번호가 올바르지 않습니다",- "passwordTooShort": "비밀번호는 최소 6자 이상이어야 합니다",- "passUpdated": "비밀번호가 업데이트되었습니다",- "missingRequiredFields": "필수 항목이 누락되었습니다"- },- "error": {- "notFound": "찾을 수 없음",- "internalError": "내부 서버 오류",- "invalidArgs": "잘못된 인수",- "badMethod": "잘못된 메서드",- "notAuthenticated": "인증되지 않음",- "permissionDenied": "권한 거부됨"- },- "nav": {- "privateProfileEnabled": "비공개 프로필 활성화됨",- "darkMode": "다크 모드",- "lightMode": "라이트 모드",- "addUrl": "url 추가",- "addNote": "노트 추가",- "notes": "노트",- "settings": "설정",- "logout": "로그아웃",- "login": "로그인"- },- "footer": {- "sourceCode": "소스 코드"- },- "login": {- "pageTitle": "로그인",- "username": "사용자 이름",- "password": "비밀번호",- "submit": "로그인"- },- "changePassword": {- "oldPassword": "기존 비밀번호",- "newPassword": "새 비밀번호",- "submit": "변경 사항 저장"- },- "settings": {- "serverDefault": "서버 기본값",- "bookmarklet": "url 추가 북마클릿",- "changePassword": "비밀번호 변경",- "accountTitle": "계정 설정",- "archiveDefault": "새 비공개가 아닌 북마크를 기본적으로 아카이브",- "privateDefault": "새 북마크를 기본적으로 비공개로 설정",- "suggestTags": "태그 제안 사용",- "privacyLock": "개인정보 잠금(비공개 계정)",- "archivingDisabled": "아카이브 비활성화됨",- "language": "언어"- },- "rss": "RSS",- "filter": {- "all": "전체",- "private": "비공개",- "public": "공개",- "unread": "읽지 않음",- "untagged": "태그 없음",- "starred": "별표"- },- "pagination": {- "perPage": "페이지당:"- },- "pager": {- "earlier": "« 이전",- "later": "다음 »"- },- "notes": {- "youHave": "보유 중",- "found": "찾음",- "label": "노트:"- },- "search": {- "placeholder": "검색",- "clearTitle": "검색 결과 지우기",- "submitTitle": "검색 제출",- "syntaxTitle": "검색 구문"- },- "noTitle": "[제목 없음]",- "edit": "편집",- "delete": "삭제",- "cancel": "취소",- "destroy": "완전 삭제",- "save": "저장",- "fetch": "가져오기",- "archive": "아카이브",- "archiving": "아카이브 중",- "bmark": {- "archiveLinkTitle": "아카이브 링크",- "markAsRead": "읽음으로 표시",- "viewInContext": "문맥에서 보기",- "url": "url",- "title": "제목",- "description": "설명",- "tags": "태그",- "private": "비공개",- "toread": "나중에 읽기"- },- "note": {- "killed": "이 노트를 삭제했습니다",- "titleLabel": "제목:",- "descriptionLabel": "설명:",- "useMarkdown": "markdown 사용?",- "publicLabel": "공개?"- },- "addForm": {- "previouslySaved": "이전에 저장됨",- "url": "URL",- "archive": "아카이브",- "archiveUnavailable": "비공개 북마크에는 아카이브를 사용할 수 없습니다",- "readLater": "나중에 읽기",- "update": "북마크 업데이트",- "add": "북마크 추가",- "killed": "이 북마크를 삭제했습니다"- },- "tagCloud": {- "relatedTags": "관련 태그",- "topTags": "인기 태그",- "topTagsTitle": "가장 많이 사용한 태그 클라우드 표시",- "allTitle": "모든 태그 표시",- "min2Title": "북마크가 2개 이상인 태그 표시",- "min5Title": "북마크가 5개 이상인 태그 표시",- "min10Title": "북마크가 10개 이상인 태그 표시",- "min20Title": "북마크가 20개 이상인 태그 표시",- "hide": "숨기기",- "show": "표시"- },- "docs": {- "title": "검색 구문 이해하기",- "pageFilters": "페이지 필터",- "pageFiltersDesc": "검색은 현재 선택된 페이지 필터 범위로 제한됩니다.",- "soGiven": "따라서 가능한 페이지 필터가 다음과 같을 때",- "if": "만약",- "isCurrentlySelectedIncludes": "가 현재 선택되어 있으면 검색에는 다음이 포함됩니다",- "bookmarks": "북마크",- "isCurrentlySelectedOnly": "가 현재 선택되어 있으면 검색에는 다음만 포함됩니다",- "bookmarksEtc": "북마크 등",- "combineAnd": "검색 결합 (AND)",- "separateBySpace": "용어를 공백으로 구분하세요.",- "forExample": "예를 들어,",- "combineOr": "검색 결합 (OR)",- "put": "다음을 넣으세요",- "betweenQuery": "각 검색어 사이에 넣으세요.",- "excludeWords": "검색에서 단어 제외하기",- "inFrontWord": "빼고 싶은 단어 앞에 붙이세요.",- "exactMatch": "정확히 일치하는 항목 검색",- "putInQuotes": "단어 또는 구문을 따옴표 안에 넣으세요.",- "specificField": "특정 필드에서 검색",- "inFrontTerm": "용어 앞에 붙이세요,",- "where": "여기서",- "isOneOfOptions": "는 아래 옵션 중 하나입니다",- "bookmarkSearch": "북마크 검색",- "noteSearch": "노트 검색",- "fieldHeader": "필드",- "exampleHeader": "예시",- "complexExamples": "더 복잡한 예시",- "complexExample1Desc": "url에 \"youtube\"가 있고, 제목에 \"haskell\" 또는 제목에 \"python\"이 있으며 2017-12-31 이후",- "complexExample2Desc": "제목에는 \"hacker news\"가 없고, 어디에나 \"news\", \"cnn\", \"npr\"이 있거나 설명에 \"the guardian\"이 있음"- }-}+{ + "auth": { + "invalidUsernamePass": "잘못된 사용자 이름/비밀번호 조합입니다", + "incorrectOldPassword": "기존 비밀번호가 올바르지 않습니다", + "passwordTooShort": "비밀번호는 최소 6자 이상이어야 합니다", + "passUpdated": "비밀번호가 업데이트되었습니다", + "missingRequiredFields": "필수 항목이 누락되었습니다" + }, + "error": { + "notFound": "찾을 수 없음", + "internalError": "내부 서버 오류", + "invalidArgs": "잘못된 인수", + "badMethod": "잘못된 메서드", + "notAuthenticated": "인증되지 않음", + "permissionDenied": "권한 거부됨", + "error": "오류: {{status}}", + "errorWithMsg": "오류 {{status}}: {{msg}}", + "requestTimedOut": "요청 시간 초과", + "networkError": "네트워크 오류" + }, + "nav": { + "privateProfileEnabled": "비공개 프로필 활성화됨", + "darkMode": "다크 모드", + "lightMode": "라이트 모드", + "addUrl": "url 추가", + "addNote": "노트 추가", + "notes": "노트", + "settings": "설정", + "logout": "로그아웃", + "login": "로그인" + }, + "footer": { + "sourceCode": "소스 코드" + }, + "login": { + "pageTitle": "로그인", + "username": "사용자 이름", + "password": "비밀번호", + "submit": "로그인" + }, + "changePassword": { + "oldPassword": "기존 비밀번호", + "newPassword": "새 비밀번호", + "submit": "변경 사항 저장" + }, + "settings": { + "serverDefault": "서버 기본값", + "bookmarklet": "url 추가 북마클릿", + "changePassword": "비밀번호 변경", + "accountTitle": "계정 설정", + "archiveDefault": "새 비공개가 아닌 북마크를 기본적으로 아카이브", + "privateDefault": "새 북마크를 기본적으로 비공개로 설정", + "suggestTags": "태그 제안 사용", + "privacyLock": "개인정보 잠금(비공개 계정)",\n "publicTagCloud": "Public Tag Cloud (visible to visitors)", + "archivingDisabled": "아카이브 비활성화됨", + "language": "언어" + }, + "rss": "RSS", + "filter": { + "all": "전체", + "private": "비공개", + "public": "공개", + "unread": "읽지 않음", + "untagged": "태그 없음", + "starred": "별표" + }, + "pagination": { + "perPage": "페이지당:" + }, + "pager": { + "earlier": "« 이전", + "later": "다음 »" + }, + "notes": { + "youHave_one": "노트 1개 보유 중:", + "youHave_other": "노트 {{count}}개 보유 중:", + "found_one": "노트 1개 찾음:", + "found_other": "노트 {{count}}개 찾음:" + }, + "search": { + "placeholder": "검색", + "clearTitle": "검색 결과 지우기", + "submitTitle": "검색 제출", + "syntaxTitle": "검색 구문" + }, + "noTitle": "[제목 없음]", + "edit": "편집", + "delete": "삭제", + "cancel": "취소", + "destroy": "완전 삭제", + "save": "저장", + "fetch": "가져오기", + "archive": "아카이브", + "archiving": "아카이브 중", + "bmark": { + "archiveLinkTitle": "아카이브 링크", + "markAsRead": "읽음으로 표시", + "viewInContext": "문맥에서 보기", + "url": "url", + "title": "제목", + "description": "설명", + "tags": "태그", + "private": "비공개", + "toread": "나중에 읽기" + }, + "note": { + "killed": "이 노트를 삭제했습니다", + "titleLabel": "제목:", + "descriptionLabel": "설명:", + "useMarkdown": "markdown 사용?", + "publicLabel": "공개?" + }, + "addForm": { + "previouslySaved": "이전에 저장됨", + "url": "URL", + "archive": "아카이브", + "archiveUnavailable": "비공개 북마크에는 아카이브를 사용할 수 없습니다", + "readLater": "나중에 읽기", + "update": "북마크 업데이트", + "add": "북마크 추가", + "killed": "이 북마크를 삭제했습니다" + }, + "tagCloud": { + "relatedTags": "관련 태그", + "topTags": "인기 태그", + "topTagsTitle": "가장 많이 사용한 태그 클라우드 표시", + "allTitle": "모든 태그 표시", + "min2Title": "북마크가 2개 이상인 태그 표시", + "min5Title": "북마크가 5개 이상인 태그 표시", + "min10Title": "북마크가 10개 이상인 태그 표시", + "min20Title": "북마크가 20개 이상인 태그 표시", + "hide": "숨기기", + "show": "표시" + }, + "bulkEdit": { + "edit": "편집", + "select": "선택:", + "oneBookmarkSelected": "북마크 1개 선택됨", + "bookmarksSelected": "북마크 {{count}}개 선택됨", + "thisPage": "이 페이지", + "allPages": "모든 페이지", + "action": "동작:", + "markAsRead": "읽음으로 표시", + "unread": "읽지 않음", + "addStars": "별표 추가", + "removeStars": "별표 제거", + "makePrivate": "비공개로 설정", + "makePublic": "공개로 설정", + "removeTags": "태그 제거:", + "addTags": "태그 추가:", + "submitting": "제출 중…", + "submit": "제출", + "destroyOne": "북마크 1개를 삭제하시겠습니까?", + "destroyMany": "북마크 {{count}}개를 삭제하시겠습니까?", + "publicOne": "북마크 1개를 공개로 설정하시겠습니까?", + "publicMany": "북마크 {{count}}개를 공개로 설정하시겠습니까?", + "pleaseAddSelection": "북마크를 선택해주세요", + "pleaseChooseAction": "동작을 선택하거나 태그를 입력해주세요", + "tooManyTags": "20,000개 이상의 북마크가 영향을 받을 경우 한 번에 10개 이상의 태그를 추가할 수 없습니다", + "pageMismatch": "페이지 북마크 수가 일치하지 않습니다", + "editedCount_one": "{{editedCount}}개의 북마크를 편집했습니다", + "editedCount_other": "{{editedCount}}개의 북마크를 편집했습니다", + "editedCountMismatch_one": "선택 수는 {{selectionCount}}이었지만, 일치하는 북마크 데이터가 변경되어 {{editedCount}}개의 북마크를 편집했습니다", + "editedCountMismatch_other": "선택 수는 {{selectionCount}}이었지만, 일치하는 북마크 데이터가 변경되어 {{editedCount}}개의 북마크를 편집했습니다" + }, + "docs": { + "title": "검색 구문 이해하기", + "pageFilters": "페이지 필터", + "pageFiltersDesc": "검색은 현재 선택된 페이지 필터 범위로 제한됩니다.", + "soGiven": "따라서 가능한 페이지 필터가 다음과 같을 때", + "if": "만약", + "isCurrentlySelectedIncludes": "가 현재 선택되어 있으면 검색에는 다음이 포함됩니다", + "bookmarks": "북마크", + "isCurrentlySelectedOnly": "가 현재 선택되어 있으면 검색에는 다음만 포함됩니다", + "bookmarksEtc": "북마크 등", + "combineAnd": "검색 결합 (AND)", + "separateBySpace": "용어를 공백으로 구분하세요.", + "forExample": "예를 들어,", + "combineOr": "검색 결합 (OR)", + "put": "다음을 넣으세요", + "betweenQuery": "각 검색어 사이에 넣으세요.", + "excludeWords": "검색에서 단어 제외하기", + "inFrontWord": "빼고 싶은 단어 앞에 붙이세요.", + "exactMatch": "정확히 일치하는 항목 검색", + "putInQuotes": "단어 또는 구문을 따옴표 안에 넣으세요.", + "specificField": "특정 필드에서 검색", + "inFrontTerm": "용어 앞에 붙이세요,", + "where": "여기서", + "isOneOfOptions": "는 아래 옵션 중 하나입니다", + "bookmarkSearch": "북마크 검색", + "noteSearch": "노트 검색", + "fieldHeader": "필드", + "exampleHeader": "예시", + "complexExamples": "더 복잡한 예시", + "complexExample1Desc": "url에 \"youtube\"가 있고, 제목에 \"haskell\" 또는 제목에 \"python\"이 있으며 2017-12-31 이후", + "complexExample2Desc": "제목에는 \"hacker news\"가 없고, 어디에나 \"news\", \"cnn\", \"npr\"이 있거나 설명에 \"the guardian\"이 있음" + } +}
static/locales/pl/translation.json view
@@ -1,162 +1,198 @@-{- "auth": {- "invalidUsernamePass": "Nieprawidłowa nazwa użytkownika lub hasło",- "incorrectOldPassword": "Nieprawidłowe stare hasło",- "passwordTooShort": "Hasło musi mieć co najmniej 6 znaków",- "passUpdated": "Hasło zostało zaktualizowane",- "missingRequiredFields": "Brak wymaganych pól"- },- "error": {- "notFound": "Nie znaleziono",- "internalError": "Wewnętrzny błąd serwera",- "invalidArgs": "Nieprawidłowe argumenty",- "badMethod": "Nieprawidłowa metoda",- "notAuthenticated": "Brak uwierzytelnienia",- "permissionDenied": "Brak uprawnień"- },- "nav": {- "privateProfileEnabled": "profil prywatny wlaczony",- "darkMode": "tryb ciemny",- "lightMode": "tryb jasny",- "addUrl": "dodaj URL",- "addNote": "dodaj notatkę",- "notes": "notatki",- "settings": "ustawienia",- "logout": "wyloguj",- "login": "zaloguj"- },- "footer": {- "sourceCode": "Kod zrodlowy"- },- "login": {- "pageTitle": "Zaloguj sie",- "username": "Nazwa użytkownika",- "password": "Hasło",- "submit": "Zaloguj się"- },- "changePassword": {- "oldPassword": "Stare hasło",- "newPassword": "Nowe hasło",- "submit": "Zapisz zmiany"- },- "settings": {- "serverDefault": "Domyslne ustawienie serwera",- "bookmarklet": "bookmarklet dodawania URL",- "changePassword": "Zmień hasło",- "accountTitle": "Ustawienia konta",- "archiveDefault": "Domyślnie archiwizuj nowe niepubliczne zakładki",- "privateDefault": "Domyślnie ustawiaj nowe zakładki jako prywatne",- "suggestTags": "Włącz sugestie tagów",- "privacyLock": "Blokada prywatności (konto prywatne)",- "archivingDisabled": "Archiwizacja wyłączona",- "language": "Język"- },- "rss": "RSS",- "filter": {- "all": "wszystkie",- "private": "prywatne",- "public": "publiczne",- "unread": "nieprzeczytane",- "untagged": "bez tagów",- "starred": "oznaczone gwiazdką"- },- "pagination": {- "perPage": "na stronę:"- },- "pager": {- "earlier": "« wcześniejsze",- "later": "późniejsze »"- },- "notes": {- "youHave": "Masz",- "found": "Znaleziono",- "label": "notatek:"- },- "search": {- "placeholder": "szukaj",- "clearTitle": "wyczyść wyniki wyszukiwania",- "submitTitle": "wykonaj wyszukiwanie",- "syntaxTitle": "składnia wyszukiwania"- },- "noTitle": "[brak tytułu]",- "edit": "edytuj",- "delete": "usuń",- "cancel": "anuluj",- "destroy": "zniszcz",- "save": "zapisz",- "fetch": "pobierz",- "archive": "archiwizuj",- "archiving": "archiwizowanie",- "bmark": {- "archiveLinkTitle": "link do archiwum",- "markAsRead": "oznacz jako przeczytane",- "viewInContext": "pokaż w kontekście",- "url": "URL",- "title": "tytuł",- "description": "opis",- "tags": "tagi",- "private": "prywatne",- "toread": "do przeczytania"- },- "note": {- "killed": "usunąłeś tę notatkę",- "titleLabel": "tytuł:",- "descriptionLabel": "opis:",- "useMarkdown": "użyć Markdown?",- "publicLabel": "publiczne?"- },- "addForm": {- "previouslySaved": "poprzednio zapisane",- "url": "URL",- "archive": "archiwizuj",- "archiveUnavailable": "archiwizacja jest niedostępna dla prywatnych zakładek",- "readLater": "przeczytaj później",- "update": "aktualizuj zakładkę",- "add": "dodaj zakładkę",- "killed": "usunąłeś tę zakładkę"- },- "tagCloud": {- "relatedTags": "Powiązane tagi",- "topTags": "Popularne tagi",- "topTagsTitle": "pokaż chmurę najczęściej używanych tagów",- "allTitle": "pokaż wszystkie tagi",- "min2Title": "pokaż tagi z co najmniej 2 zakładkami",- "min5Title": "pokaż tagi z co najmniej 5 zakładkami",- "min10Title": "pokaż tagi z co najmniej 10 zakładkami",- "min20Title": "pokaż tagi z co najmniej 20 zakładkami",- "hide": "ukryj",- "show": "pokaż"- },- "docs": {- "title": "Zrozumienie składni wyszukiwania",- "pageFilters": "Filtry strony",- "pageFiltersDesc": "Wyszukiwania są ograniczone do aktualnie wybranego filtra strony.",- "soGiven": "Tak więc, biorąc pod uwagę możliwe filtry strony",- "if": "Jeśli",- "isCurrentlySelectedIncludes": "jest aktualnie wybrany, wyszukiwanie obejmuje",- "bookmarks": "zakładki",- "isCurrentlySelectedOnly": "jest aktualnie wybrany, wyszukiwanie obejmuje tylko",- "bookmarksEtc": "zakładki itp.",- "combineAnd": "Łączenie wyszukiwań (AND)",- "separateBySpace": "Oddziel terminy spacją.",- "forExample": "Na przykład,",- "combineOr": "Łączenie wyszukiwań (OR)",- "put": "Umieść",- "betweenQuery": "między każdym zapytaniem wyszukiwania.",- "excludeWords": "Wyklucz słowa z wyszukiwania",- "inFrontWord": "przed słowem, które chcesz wykluczyć.",- "exactMatch": "Wyszukaj dokładne dopasowanie",- "putInQuotes": "Umieść słowo lub frazę w cudzysłowie.",- "specificField": "Wyszukaj w określonym polu",- "inFrontTerm": "przed terminem,",- "where": "gdzie",- "isOneOfOptions": "jest jedną z poniższych opcji",- "bookmarkSearch": "Wyszukiwanie zakładek",- "noteSearch": "Wyszukiwanie notatek",- "fieldHeader": "POLE",- "exampleHeader": "PRZYKŁAD",- "complexExamples": "Bardziej złożone przykłady",- "complexExample1Desc": "\"youtube\" w URL oraz tytuł \"haskell\" lub tytuł \"python\" i po 31.12.2017",- "complexExample2Desc": "\"hacker news\" nie w tytule, oraz \"news\", \"cnn\", \"npr\" gdziekolwiek lub \"the guardian\" w opisie"- }-}+{ + "auth": { + "invalidUsernamePass": "Nieprawidłowa nazwa użytkownika lub hasło", + "incorrectOldPassword": "Nieprawidłowe stare hasło", + "passwordTooShort": "Hasło musi mieć co najmniej 6 znaków", + "passUpdated": "Hasło zostało zaktualizowane", + "missingRequiredFields": "Brak wymaganych pól" + }, + "error": { + "notFound": "Nie znaleziono", + "internalError": "Wewnętrzny błąd serwera", + "invalidArgs": "Nieprawidłowe argumenty", + "badMethod": "Nieprawidłowa metoda", + "notAuthenticated": "Brak uwierzytelnienia", + "permissionDenied": "Brak uprawnień", + "error": "błąd: {{status}}", + "errorWithMsg": "błąd {{status}}: {{msg}}", + "requestTimedOut": "przekroczono limit czasu żądania", + "networkError": "błąd sieci" + }, + "nav": { + "privateProfileEnabled": "profil prywatny wlaczony", + "darkMode": "tryb ciemny", + "lightMode": "tryb jasny", + "addUrl": "dodaj URL", + "addNote": "dodaj notatkę", + "notes": "notatki", + "settings": "ustawienia", + "logout": "wyloguj", + "login": "zaloguj" + }, + "footer": { + "sourceCode": "Kod zrodlowy" + }, + "login": { + "pageTitle": "Zaloguj sie", + "username": "Nazwa użytkownika", + "password": "Hasło", + "submit": "Zaloguj się" + }, + "changePassword": { + "oldPassword": "Stare hasło", + "newPassword": "Nowe hasło", + "submit": "Zapisz zmiany" + }, + "settings": { + "serverDefault": "Domyslne ustawienie serwera", + "bookmarklet": "bookmarklet dodawania URL", + "changePassword": "Zmień hasło", + "accountTitle": "Ustawienia konta", + "archiveDefault": "Domyślnie archiwizuj nowe niepubliczne zakładki", + "privateDefault": "Domyślnie ustawiaj nowe zakładki jako prywatne", + "suggestTags": "Włącz sugestie tagów", + "privacyLock": "Blokada prywatności (konto prywatne)",\n "publicTagCloud": "Public Tag Cloud (visible to visitors)", + "archivingDisabled": "Archiwizacja wyłączona", + "language": "Język" + }, + "rss": "RSS", + "filter": { + "all": "wszystkie", + "private": "prywatne", + "public": "publiczne", + "unread": "nieprzeczytane", + "untagged": "bez tagów", + "starred": "oznaczone gwiazdką" + }, + "pagination": { + "perPage": "na stronę:" + }, + "pager": { + "earlier": "« wcześniejsze", + "later": "późniejsze »" + }, + "notes": { + "youHave_one": "Masz 1 notatkę:", + "youHave_other": "Masz {{count}} notatki:", + "found_one": "Znaleziono 1 notatkę:", + "found_other": "Znaleziono {{count}} notatek:" + }, + "search": { + "placeholder": "szukaj", + "clearTitle": "wyczyść wyniki wyszukiwania", + "submitTitle": "wykonaj wyszukiwanie", + "syntaxTitle": "składnia wyszukiwania" + }, + "noTitle": "[brak tytułu]", + "edit": "edytuj", + "delete": "usuń", + "cancel": "anuluj", + "destroy": "zniszcz", + "save": "zapisz", + "fetch": "pobierz", + "archive": "archiwizuj", + "archiving": "archiwizowanie", + "bmark": { + "archiveLinkTitle": "link do archiwum", + "markAsRead": "oznacz jako przeczytane", + "viewInContext": "pokaż w kontekście", + "url": "URL", + "title": "tytuł", + "description": "opis", + "tags": "tagi", + "private": "prywatne", + "toread": "do przeczytania" + }, + "note": { + "killed": "usunąłeś tę notatkę", + "titleLabel": "tytuł:", + "descriptionLabel": "opis:", + "useMarkdown": "użyć Markdown?", + "publicLabel": "publiczne?" + }, + "addForm": { + "previouslySaved": "poprzednio zapisane", + "url": "URL", + "archive": "archiwizuj", + "archiveUnavailable": "archiwizacja jest niedostępna dla prywatnych zakładek", + "readLater": "przeczytaj później", + "update": "aktualizuj zakładkę", + "add": "dodaj zakładkę", + "killed": "usunąłeś tę zakładkę" + }, + "tagCloud": { + "relatedTags": "Powiązane tagi", + "topTags": "Popularne tagi", + "topTagsTitle": "pokaż chmurę najczęściej używanych tagów", + "allTitle": "pokaż wszystkie tagi", + "min2Title": "pokaż tagi z co najmniej 2 zakładkami", + "min5Title": "pokaż tagi z co najmniej 5 zakładkami", + "min10Title": "pokaż tagi z co najmniej 10 zakładkami", + "min20Title": "pokaż tagi z co najmniej 20 zakładkami", + "hide": "ukryj", + "show": "pokaż" + }, + "bulkEdit": { + "edit": "edytuj", + "select": "zaznacz:", + "oneBookmarkSelected": "1 zakładka zaznaczona", + "bookmarksSelected": "{{count}} zakładek zaznaczonych", + "thisPage": "ta strona", + "allPages": "wszystkie strony", + "action": "akcja:", + "markAsRead": "oznacz jako przeczytane", + "unread": "nieprzeczytane", + "addStars": "dodaj gwiazdki", + "removeStars": "usuń gwiazdki", + "makePrivate": "ustaw jako prywatne", + "makePublic": "ustaw jako publiczne", + "removeTags": "usuń tagi:", + "addTags": "dodaj tagi:", + "submitting": "wysyłanie…", + "submit": "wyślij", + "destroyOne": "usunąć 1 zakładkę?", + "destroyMany": "usunąć {{count}} zakładek?", + "publicOne": "ustawić 1 zakładkę jako publiczną?", + "publicMany": "ustawić {{count}} zakładek jako publiczne?", + "pleaseAddSelection": "proszę wybrać zakładki", + "pleaseChooseAction": "proszę wybrać akcję lub wprowadzić tagi", + "tooManyTags": "nie można dodać więcej niż 10 tagów jednocześnie, gdy dotyczyłoby to ponad 20 000 zakładek", + "pageMismatch": "liczba zakładek na stronie nie zgadza się", + "editedCount_one": "edytowano {{editedCount}} zakładkę", + "editedCount_other": "edytowano {{editedCount}} zakładek", + "editedCountMismatch_one": "liczba zaznaczonych wynosiła {{selectionCount}}, ale edytowano {{editedCount}} zakładkę, ponieważ pasujące dane zakładek uległy zmianie", + "editedCountMismatch_other": "liczba zaznaczonych wynosiła {{selectionCount}}, ale edytowano {{editedCount}} zakładek, ponieważ pasujące dane zakładek uległy zmianie" + }, + "docs": { + "title": "Zrozumienie składni wyszukiwania", + "pageFilters": "Filtry strony", + "pageFiltersDesc": "Wyszukiwania są ograniczone do aktualnie wybranego filtra strony.", + "soGiven": "Tak więc, biorąc pod uwagę możliwe filtry strony", + "if": "Jeśli", + "isCurrentlySelectedIncludes": "jest aktualnie wybrany, wyszukiwanie obejmuje", + "bookmarks": "zakładki", + "isCurrentlySelectedOnly": "jest aktualnie wybrany, wyszukiwanie obejmuje tylko", + "bookmarksEtc": "zakładki itp.", + "combineAnd": "Łączenie wyszukiwań (AND)", + "separateBySpace": "Oddziel terminy spacją.", + "forExample": "Na przykład,", + "combineOr": "Łączenie wyszukiwań (OR)", + "put": "Umieść", + "betweenQuery": "między każdym zapytaniem wyszukiwania.", + "excludeWords": "Wyklucz słowa z wyszukiwania", + "inFrontWord": "przed słowem, które chcesz wykluczyć.", + "exactMatch": "Wyszukaj dokładne dopasowanie", + "putInQuotes": "Umieść słowo lub frazę w cudzysłowie.", + "specificField": "Wyszukaj w określonym polu", + "inFrontTerm": "przed terminem,", + "where": "gdzie", + "isOneOfOptions": "jest jedną z poniższych opcji", + "bookmarkSearch": "Wyszukiwanie zakładek", + "noteSearch": "Wyszukiwanie notatek", + "fieldHeader": "POLE", + "exampleHeader": "PRZYKŁAD", + "complexExamples": "Bardziej złożone przykłady", + "complexExample1Desc": "\"youtube\" w URL oraz tytuł \"haskell\" lub tytuł \"python\" i po 31.12.2017", + "complexExample2Desc": "\"hacker news\" nie w tytule, oraz \"news\", \"cnn\", \"npr\" gdziekolwiek lub \"the guardian\" w opisie" + } +}
static/locales/pt-BR/translation.json view
@@ -1,162 +1,198 @@-{- "auth": {- "invalidUsernamePass": "Combinacao de usuario/senha invalida",- "incorrectOldPassword": "Senha antiga incorreta",- "passwordTooShort": "A senha deve ter pelo menos 6 caracteres",- "passUpdated": "Senha atualizada",- "missingRequiredFields": "Campos obrigatorios ausentes"- },- "error": {- "notFound": "Nao encontrado",- "internalError": "Erro interno do servidor",- "invalidArgs": "Argumentos invalidos",- "badMethod": "Metodo nao permitido",- "notAuthenticated": "Nao autenticado",- "permissionDenied": "Permissao negada"- },- "nav": {- "privateProfileEnabled": "perfil privado ativado",- "darkMode": "modo escuro",- "lightMode": "modo claro",- "addUrl": "adicionar url",- "addNote": "adicionar nota",- "notes": "notas",- "settings": "configuracoes",- "logout": "sair",- "login": "entrar"- },- "footer": {- "sourceCode": "Codigo-fonte"- },- "login": {- "pageTitle": "Entrar",- "username": "Usuario",- "password": "Senha",- "submit": "Entrar"- },- "changePassword": {- "oldPassword": "Senha antiga",- "newPassword": "Nova senha",- "submit": "Salvar alteracoes"- },- "settings": {- "serverDefault": "Padrao do servidor",- "bookmarklet": "bookmarklet para adicionar url",- "changePassword": "Alterar senha",- "accountTitle": "Configuracoes da conta",- "archiveDefault": "Arquivar novos favoritos nao privados por padrao",- "privateDefault": "Definir novos favoritos como privados por padrao",- "suggestTags": "Ativar sugestoes de tags",- "privacyLock": "Bloqueio de privacidade (conta privada)",- "archivingDisabled": "Arquivamento desativado",- "language": "Idioma"- },- "rss": "RSS",- "filter": {- "all": "todos",- "private": "privados",- "public": "publicos",- "unread": "nao lidos",- "untagged": "sem tags",- "starred": "favoritos"- },- "pagination": {- "perPage": "por pagina:"- },- "pager": {- "earlier": "« anteriores",- "later": "proximos »"- },- "notes": {- "youHave": "Voce tem",- "found": "Encontrado",- "label": "notas:"- },- "search": {- "placeholder": "buscar",- "clearTitle": "limpar resultados da busca",- "submitTitle": "enviar busca",- "syntaxTitle": "sintaxe de busca"- },- "noTitle": "[sem titulo]",- "edit": "editar",- "delete": "excluir",- "cancel": "cancelar",- "destroy": "destruir",- "save": "salvar",- "fetch": "buscar",- "archive": "arquivar",- "archiving": "arquivando",- "bmark": {- "archiveLinkTitle": "link do arquivo",- "markAsRead": "marcar como lido",- "viewInContext": "ver no contexto",- "url": "url",- "title": "titulo",- "description": "descricao",- "tags": "tags",- "private": "privado",- "toread": "ler depois"- },- "note": {- "killed": "voce excluiu esta nota",- "titleLabel": "titulo:",- "descriptionLabel": "descricao:",- "useMarkdown": "usar markdown?",- "publicLabel": "publica?"- },- "addForm": {- "previouslySaved": "salvo anteriormente",- "url": "URL",- "archive": "arquivar",- "archiveUnavailable": "o arquivamento nao esta disponivel para favoritos privados",- "readLater": "ler depois",- "update": "atualizar favorito",- "add": "adicionar favorito",- "killed": "voce excluiu este favorito"- },- "tagCloud": {- "relatedTags": "Tags relacionadas",- "topTags": "Principais tags",- "topTagsTitle": "mostrar uma nuvem com as tags mais usadas",- "allTitle": "mostrar todas as tags",- "min2Title": "mostrar tags com pelo menos 2 favoritos",- "min5Title": "mostrar tags com pelo menos 5 favoritos",- "min10Title": "mostrar tags com pelo menos 10 favoritos",- "min20Title": "mostrar tags com pelo menos 20 favoritos",- "hide": "ocultar",- "show": "mostrar"- },- "docs": {- "title": "Entendendo a sintaxe de busca",- "pageFilters": "Filtros de pagina",- "pageFiltersDesc": "As buscas sao limitadas ao filtro de pagina atualmente selecionado.",- "soGiven": "Assim, considerando os filtros de pagina possiveis",- "if": "Se",- "isCurrentlySelectedIncludes": "estiver selecionado no momento, a busca inclui",- "bookmarks": "favoritos",- "isCurrentlySelectedOnly": "estiver selecionado no momento, a busca inclui apenas",- "bookmarksEtc": "favoritos, etc.",- "combineAnd": "Combinar buscas (AND)",- "separateBySpace": "Separe os termos com um espaco.",- "forExample": "Por exemplo,",- "combineOr": "Combinar buscas (OR)",- "put": "Coloque",- "betweenQuery": "entre cada consulta de busca.",- "excludeWords": "Excluir palavras da busca",- "inFrontWord": "na frente de uma palavra que voce quer omitir.",- "exactMatch": "Buscar uma correspondencia exata",- "putInQuotes": "Coloque uma palavra ou frase entre aspas.",- "specificField": "Buscar em um campo especifico",- "inFrontTerm": "na frente do termo,",- "where": "onde",- "isOneOfOptions": "e uma das opcoes abaixo",- "bookmarkSearch": "Busca de favoritos",- "noteSearch": "Busca de notas",- "fieldHeader": "CAMPO",- "exampleHeader": "EXEMPLO",- "complexExamples": "Exemplos mais complexos",- "complexExample1Desc": "\"youtube\" na url, e titulo com \"haskell\" ou titulo com \"python\" e depois de 31/12/2017",- "complexExample2Desc": "\"hacker news\" nao no titulo, e \"news\", \"cnn\", \"npr\" em qualquer lugar, ou \"the guardian\" na descricao"- }-}+{ + "auth": { + "invalidUsernamePass": "Combinacao de usuario/senha invalida", + "incorrectOldPassword": "Senha antiga incorreta", + "passwordTooShort": "A senha deve ter pelo menos 6 caracteres", + "passUpdated": "Senha atualizada", + "missingRequiredFields": "Campos obrigatorios ausentes" + }, + "error": { + "notFound": "Nao encontrado", + "internalError": "Erro interno do servidor", + "invalidArgs": "Argumentos invalidos", + "badMethod": "Metodo nao permitido", + "notAuthenticated": "Nao autenticado", + "permissionDenied": "Permissao negada", + "error": "erro: {{status}}", + "errorWithMsg": "erro {{status}}: {{msg}}", + "requestTimedOut": "tempo de requisição esgotado", + "networkError": "erro de rede" + }, + "nav": { + "privateProfileEnabled": "perfil privado ativado", + "darkMode": "modo escuro", + "lightMode": "modo claro", + "addUrl": "adicionar url", + "addNote": "adicionar nota", + "notes": "notas", + "settings": "configuracoes", + "logout": "sair", + "login": "entrar" + }, + "footer": { + "sourceCode": "Codigo-fonte" + }, + "login": { + "pageTitle": "Entrar", + "username": "Usuario", + "password": "Senha", + "submit": "Entrar" + }, + "changePassword": { + "oldPassword": "Senha antiga", + "newPassword": "Nova senha", + "submit": "Salvar alteracoes" + }, + "settings": { + "serverDefault": "Padrao do servidor", + "bookmarklet": "bookmarklet para adicionar url", + "changePassword": "Alterar senha", + "accountTitle": "Configuracoes da conta", + "archiveDefault": "Arquivar novos favoritos nao privados por padrao", + "privateDefault": "Definir novos favoritos como privados por padrao", + "suggestTags": "Ativar sugestoes de tags", + "privacyLock": "Bloqueio de privacidade (conta privada)",\n "publicTagCloud": "Public Tag Cloud (visible to visitors)", + "archivingDisabled": "Arquivamento desativado", + "language": "Idioma" + }, + "rss": "RSS", + "filter": { + "all": "todos", + "private": "privados", + "public": "publicos", + "unread": "nao lidos", + "untagged": "sem tags", + "starred": "favoritos" + }, + "pagination": { + "perPage": "por pagina:" + }, + "pager": { + "earlier": "« anteriores", + "later": "proximos »" + }, + "notes": { + "youHave_one": "Você tem 1 nota:", + "youHave_other": "Você tem {{count}} notas:", + "found_one": "Encontrada 1 nota:", + "found_other": "Encontradas {{count}} notas:" + }, + "search": { + "placeholder": "buscar", + "clearTitle": "limpar resultados da busca", + "submitTitle": "enviar busca", + "syntaxTitle": "sintaxe de busca" + }, + "noTitle": "[sem titulo]", + "edit": "editar", + "delete": "excluir", + "cancel": "cancelar", + "destroy": "destruir", + "save": "salvar", + "fetch": "buscar", + "archive": "arquivar", + "archiving": "arquivando", + "bmark": { + "archiveLinkTitle": "link do arquivo", + "markAsRead": "marcar como lido", + "viewInContext": "ver no contexto", + "url": "url", + "title": "titulo", + "description": "descricao", + "tags": "tags", + "private": "privado", + "toread": "ler depois" + }, + "note": { + "killed": "voce excluiu esta nota", + "titleLabel": "titulo:", + "descriptionLabel": "descricao:", + "useMarkdown": "usar markdown?", + "publicLabel": "publica?" + }, + "addForm": { + "previouslySaved": "salvo anteriormente", + "url": "URL", + "archive": "arquivar", + "archiveUnavailable": "o arquivamento nao esta disponivel para favoritos privados", + "readLater": "ler depois", + "update": "atualizar favorito", + "add": "adicionar favorito", + "killed": "voce excluiu este favorito" + }, + "tagCloud": { + "relatedTags": "Tags relacionadas", + "topTags": "Principais tags", + "topTagsTitle": "mostrar uma nuvem com as tags mais usadas", + "allTitle": "mostrar todas as tags", + "min2Title": "mostrar tags com pelo menos 2 favoritos", + "min5Title": "mostrar tags com pelo menos 5 favoritos", + "min10Title": "mostrar tags com pelo menos 10 favoritos", + "min20Title": "mostrar tags com pelo menos 20 favoritos", + "hide": "ocultar", + "show": "mostrar" + }, + "bulkEdit": { + "edit": "editar", + "select": "selecionar:", + "oneBookmarkSelected": "1 favorito selecionado", + "bookmarksSelected": "{{count}} favoritos selecionados", + "thisPage": "esta página", + "allPages": "todas as páginas", + "action": "ação:", + "markAsRead": "marcar como lido", + "unread": "não lido", + "addStars": "adicionar estrelas", + "removeStars": "remover estrelas", + "makePrivate": "tornar privado", + "makePublic": "tornar público", + "removeTags": "remover tags:", + "addTags": "adicionar tags:", + "submitting": "enviando…", + "submit": "enviar", + "destroyOne": "excluir 1 favorito?", + "destroyMany": "excluir {{count}} favoritos?", + "publicOne": "tornar 1 favorito público?", + "publicMany": "tornar {{count}} favoritos públicos?", + "pleaseAddSelection": "por favor selecione favoritos", + "pleaseChooseAction": "por favor escolha uma ação ou insira tags", + "tooManyTags": "não é possível adicionar mais de 10 tags ao mesmo tempo quando mais de 20.000 favoritos seriam afetados", + "pageMismatch": "o número de favoritos na página não corresponde", + "editedCount_one": "{{editedCount}} favorito editado", + "editedCount_other": "{{editedCount}} favoritos editados", + "editedCountMismatch_one": "a contagem de seleção era {{selectionCount}}, mas {{editedCount}} favorito foi editado, pois os dados do favorito correspondente foram alterados", + "editedCountMismatch_other": "a contagem de seleção era {{selectionCount}}, mas {{editedCount}} favoritos foram editados, pois os dados dos favoritos correspondentes foram alterados" + }, + "docs": { + "title": "Entendendo a sintaxe de busca", + "pageFilters": "Filtros de pagina", + "pageFiltersDesc": "As buscas sao limitadas ao filtro de pagina atualmente selecionado.", + "soGiven": "Assim, considerando os filtros de pagina possiveis", + "if": "Se", + "isCurrentlySelectedIncludes": "estiver selecionado no momento, a busca inclui", + "bookmarks": "favoritos", + "isCurrentlySelectedOnly": "estiver selecionado no momento, a busca inclui apenas", + "bookmarksEtc": "favoritos, etc.", + "combineAnd": "Combinar buscas (AND)", + "separateBySpace": "Separe os termos com um espaco.", + "forExample": "Por exemplo,", + "combineOr": "Combinar buscas (OR)", + "put": "Coloque", + "betweenQuery": "entre cada consulta de busca.", + "excludeWords": "Excluir palavras da busca", + "inFrontWord": "na frente de uma palavra que voce quer omitir.", + "exactMatch": "Buscar uma correspondencia exata", + "putInQuotes": "Coloque uma palavra ou frase entre aspas.", + "specificField": "Buscar em um campo especifico", + "inFrontTerm": "na frente do termo,", + "where": "onde", + "isOneOfOptions": "e uma das opcoes abaixo", + "bookmarkSearch": "Busca de favoritos", + "noteSearch": "Busca de notas", + "fieldHeader": "CAMPO", + "exampleHeader": "EXEMPLO", + "complexExamples": "Exemplos mais complexos", + "complexExample1Desc": "\"youtube\" na url, e titulo com \"haskell\" ou titulo com \"python\" e depois de 31/12/2017", + "complexExample2Desc": "\"hacker news\" nao no titulo, e \"news\", \"cnn\", \"npr\" em qualquer lugar, ou \"the guardian\" na descricao" + } +}
static/locales/ru/translation.json view
@@ -1,162 +1,198 @@-{- "auth": {- "invalidUsernamePass": "Неверное сочетание имени пользователя и пароля",- "incorrectOldPassword": "Неверный старый пароль",- "passwordTooShort": "Пароль должен быть не менее 6 символов",- "passUpdated": "Пароль обновлён",- "missingRequiredFields": "Отсутствуют обязательные поля"- },- "error": {- "notFound": "Не найдено",- "internalError": "Внутренняя ошибка сервера",- "invalidArgs": "Недопустимые аргументы",- "badMethod": "Недопустимый метод",- "notAuthenticated": "Не аутентифицирован",- "permissionDenied": "Доступ запрещён"- },- "nav": {- "privateProfileEnabled": "приватный профиль включён",- "darkMode": "тёмный режим",- "lightMode": "светлый режим",- "addUrl": "добавить URL",- "addNote": "добавить заметку",- "notes": "заметки",- "settings": "настройки",- "logout": "выйти",- "login": "войти"- },- "footer": {- "sourceCode": "Исходный код"- },- "login": {- "pageTitle": "Войти",- "username": "Имя пользователя",- "password": "Пароль",- "submit": "Войти"- },- "changePassword": {- "oldPassword": "Старый пароль",- "newPassword": "Новый пароль",- "submit": "Сохранить изменения"- },- "settings": {- "serverDefault": "По умолчанию на сервере",- "bookmarklet": "букмарклет добавления URL",- "changePassword": "Изменить пароль",- "accountTitle": "Настройки аккаунта",- "archiveDefault": "Архивировать новые не-приватные закладки по умолчанию",- "privateDefault": "Делать новые закладки приватными по умолчанию",- "suggestTags": "Включить предложение тегов",- "privacyLock": "Блокировка конфиденциальности (приватный аккаунт)",- "archivingDisabled": "Архивирование отключено",- "language": "Язык"- },- "rss": "RSS",- "filter": {- "all": "все",- "private": "приватные",- "public": "публичные",- "unread": "непрочитанные",- "untagged": "без тегов",- "starred": "помеченные"- },- "pagination": {- "perPage": "на странице:"- },- "pager": {- "earlier": "« ранее",- "later": "позже »"- },- "notes": {- "youHave": "У вас",- "found": "Найдено",- "label": "заметок:"- },- "search": {- "placeholder": "поиск",- "clearTitle": "очистить результаты поиска",- "submitTitle": "выполнить поиск",- "syntaxTitle": "синтаксис поиска"- },- "noTitle": "[без названия]",- "edit": "редактировать",- "delete": "удалить",- "cancel": "отмена",- "destroy": "уничтожить",- "save": "сохранить",- "fetch": "получить",- "archive": "архивировать",- "archiving": "архивирование",- "bmark": {- "archiveLinkTitle": "ссылка на архив",- "markAsRead": "отметить как прочитанное",- "viewInContext": "просмотреть в контексте",- "url": "URL",- "title": "название",- "description": "описание",- "tags": "теги",- "private": "приватное",- "toread": "прочитать позже"- },- "note": {- "killed": "вы удалили эту заметку",- "titleLabel": "название:",- "descriptionLabel": "описание:",- "useMarkdown": "использовать Markdown?",- "publicLabel": "публичное?"- },- "addForm": {- "previouslySaved": "ранее сохранено",- "url": "URL",- "archive": "архивировать",- "archiveUnavailable": "архивирование недоступно для приватных закладок",- "readLater": "прочитать позже",- "update": "обновить закладку",- "add": "добавить закладку",- "killed": "вы удалили эту закладку"- },- "tagCloud": {- "relatedTags": "Связанные теги",- "topTags": "Популярные теги",- "topTagsTitle": "показать облако наиболее используемых тегов",- "allTitle": "показать все теги",- "min2Title": "показать теги с не менее чем 2 закладками",- "min5Title": "показать теги с не менее чем 5 закладками",- "min10Title": "показать теги с не менее чем 10 закладками",- "min20Title": "показать теги с не менее чем 20 закладками",- "hide": "скрыть",- "show": "показать"- },- "docs": {- "title": "Понимание синтаксиса поиска",- "pageFilters": "Фильтры страницы",- "pageFiltersDesc": "Поиск ограничен текущим выбранным фильтром страницы.",- "soGiven": "Так, учитывая возможные фильтры страницы",- "if": "Если",- "isCurrentlySelectedIncludes": "выбрано в данный момент, поиск включает",- "bookmarks": "закладки",- "isCurrentlySelectedOnly": "выбрано в данный момент, поиск включает только",- "bookmarksEtc": "закладки и т.д.",- "combineAnd": "Объединение поисков (AND)",- "separateBySpace": "Разделяйте термины пробелом.",- "forExample": "Например,",- "combineOr": "Объединение поисков (OR)",- "put": "Поставьте",- "betweenQuery": "между каждым поисковым запросом.",- "excludeWords": "Исключить слова из поиска",- "inFrontWord": "перед словом, которое хотите исключить.",- "exactMatch": "Поиск точного совпадения",- "putInQuotes": "Заключите слово или фразу в кавычки.",- "specificField": "Поиск в определённом поле",- "inFrontTerm": "перед термином,",- "where": "где",- "isOneOfOptions": "является одним из вариантов ниже",- "bookmarkSearch": "Поиск закладок",- "noteSearch": "Поиск заметок",- "fieldHeader": "ПОЛЕ",- "exampleHeader": "ПРИМЕР",- "complexExamples": "Более сложные примеры",- "complexExample1Desc": "«youtube» в URL, и заголовок «haskell» или заголовок «python» и после 31.12.2017",- "complexExample2Desc": "«hacker news» не в заголовке, и «news», «cnn», «npr» где угодно, или «the guardian» в описании"- }-}+{ + "auth": { + "invalidUsernamePass": "Неверное сочетание имени пользователя и пароля", + "incorrectOldPassword": "Неверный старый пароль", + "passwordTooShort": "Пароль должен быть не менее 6 символов", + "passUpdated": "Пароль обновлён", + "missingRequiredFields": "Отсутствуют обязательные поля" + }, + "error": { + "notFound": "Не найдено", + "internalError": "Внутренняя ошибка сервера", + "invalidArgs": "Недопустимые аргументы", + "badMethod": "Недопустимый метод", + "notAuthenticated": "Не аутентифицирован", + "permissionDenied": "Доступ запрещён", + "error": "ошибка: {{status}}", + "errorWithMsg": "ошибка {{status}}: {{msg}}", + "requestTimedOut": "время ожидания запроса истекло", + "networkError": "ошибка сети" + }, + "nav": { + "privateProfileEnabled": "приватный профиль включён", + "darkMode": "тёмный режим", + "lightMode": "светлый режим", + "addUrl": "добавить URL", + "addNote": "добавить заметку", + "notes": "заметки", + "settings": "настройки", + "logout": "выйти", + "login": "войти" + }, + "footer": { + "sourceCode": "Исходный код" + }, + "login": { + "pageTitle": "Войти", + "username": "Имя пользователя", + "password": "Пароль", + "submit": "Войти" + }, + "changePassword": { + "oldPassword": "Старый пароль", + "newPassword": "Новый пароль", + "submit": "Сохранить изменения" + }, + "settings": { + "serverDefault": "По умолчанию на сервере", + "bookmarklet": "букмарклет добавления URL", + "changePassword": "Изменить пароль", + "accountTitle": "Настройки аккаунта", + "archiveDefault": "Архивировать новые не-приватные закладки по умолчанию", + "privateDefault": "Делать новые закладки приватными по умолчанию", + "suggestTags": "Включить предложение тегов", + "privacyLock": "Блокировка конфиденциальности (приватный аккаунт)",\n "publicTagCloud": "Public Tag Cloud (visible to visitors)", + "archivingDisabled": "Архивирование отключено", + "language": "Язык" + }, + "rss": "RSS", + "filter": { + "all": "все", + "private": "приватные", + "public": "публичные", + "unread": "непрочитанные", + "untagged": "без тегов", + "starred": "помеченные" + }, + "pagination": { + "perPage": "на странице:" + }, + "pager": { + "earlier": "« ранее", + "later": "позже »" + }, + "notes": { + "youHave_one": "У вас 1 заметка:", + "youHave_other": "У вас {{count}} заметок:", + "found_one": "Найдена 1 заметка:", + "found_other": "Найдено {{count}} заметок:" + }, + "search": { + "placeholder": "поиск", + "clearTitle": "очистить результаты поиска", + "submitTitle": "выполнить поиск", + "syntaxTitle": "синтаксис поиска" + }, + "noTitle": "[без названия]", + "edit": "редактировать", + "delete": "удалить", + "cancel": "отмена", + "destroy": "уничтожить", + "save": "сохранить", + "fetch": "получить", + "archive": "архивировать", + "archiving": "архивирование", + "bmark": { + "archiveLinkTitle": "ссылка на архив", + "markAsRead": "отметить как прочитанное", + "viewInContext": "просмотреть в контексте", + "url": "URL", + "title": "название", + "description": "описание", + "tags": "теги", + "private": "приватное", + "toread": "прочитать позже" + }, + "note": { + "killed": "вы удалили эту заметку", + "titleLabel": "название:", + "descriptionLabel": "описание:", + "useMarkdown": "использовать Markdown?", + "publicLabel": "публичное?" + }, + "addForm": { + "previouslySaved": "ранее сохранено", + "url": "URL", + "archive": "архивировать", + "archiveUnavailable": "архивирование недоступно для приватных закладок", + "readLater": "прочитать позже", + "update": "обновить закладку", + "add": "добавить закладку", + "killed": "вы удалили эту закладку" + }, + "tagCloud": { + "relatedTags": "Связанные теги", + "topTags": "Популярные теги", + "topTagsTitle": "показать облако наиболее используемых тегов", + "allTitle": "показать все теги", + "min2Title": "показать теги с не менее чем 2 закладками", + "min5Title": "показать теги с не менее чем 5 закладками", + "min10Title": "показать теги с не менее чем 10 закладками", + "min20Title": "показать теги с не менее чем 20 закладками", + "hide": "скрыть", + "show": "показать" + }, + "bulkEdit": { + "edit": "редактировать", + "select": "выбрать:", + "oneBookmarkSelected": "1 закладка выбрана", + "bookmarksSelected": "{{count}} закладок выбрано", + "thisPage": "эта страница", + "allPages": "все страницы", + "action": "действие:", + "markAsRead": "отметить как прочитанное", + "unread": "непрочитанное", + "addStars": "добавить звёзды", + "removeStars": "убрать звёзды", + "makePrivate": "сделать приватным", + "makePublic": "сделать публичным", + "removeTags": "удалить метки:", + "addTags": "добавить метки:", + "submitting": "отправка…", + "submit": "отправить", + "destroyOne": "удалить 1 закладку?", + "destroyMany": "удалить {{count}} закладок?", + "publicOne": "сделать 1 закладку публичной?", + "publicMany": "сделать {{count}} закладок публичными?", + "pleaseAddSelection": "пожалуйста, выберите закладки", + "pleaseChooseAction": "пожалуйста, выберите действие или введите метки", + "tooManyTags": "нельзя добавить более 10 меток одновременно, если это затронет более 20 000 закладок", + "pageMismatch": "количество закладок на странице не совпадает", + "editedCount_one": "изменена {{editedCount}} закладка", + "editedCount_other": "изменено {{editedCount}} закладок", + "editedCountMismatch_one": "количество выбранных было {{selectionCount}}, но изменена {{editedCount}} закладка, так как данные совпадающих закладок изменились", + "editedCountMismatch_other": "количество выбранных было {{selectionCount}}, но изменено {{editedCount}} закладок, так как данные совпадающих закладок изменились" + }, + "docs": { + "title": "Понимание синтаксиса поиска", + "pageFilters": "Фильтры страницы", + "pageFiltersDesc": "Поиск ограничен текущим выбранным фильтром страницы.", + "soGiven": "Так, учитывая возможные фильтры страницы", + "if": "Если", + "isCurrentlySelectedIncludes": "выбрано в данный момент, поиск включает", + "bookmarks": "закладки", + "isCurrentlySelectedOnly": "выбрано в данный момент, поиск включает только", + "bookmarksEtc": "закладки и т.д.", + "combineAnd": "Объединение поисков (AND)", + "separateBySpace": "Разделяйте термины пробелом.", + "forExample": "Например,", + "combineOr": "Объединение поисков (OR)", + "put": "Поставьте", + "betweenQuery": "между каждым поисковым запросом.", + "excludeWords": "Исключить слова из поиска", + "inFrontWord": "перед словом, которое хотите исключить.", + "exactMatch": "Поиск точного совпадения", + "putInQuotes": "Заключите слово или фразу в кавычки.", + "specificField": "Поиск в определённом поле", + "inFrontTerm": "перед термином,", + "where": "где", + "isOneOfOptions": "является одним из вариантов ниже", + "bookmarkSearch": "Поиск закладок", + "noteSearch": "Поиск заметок", + "fieldHeader": "ПОЛЕ", + "exampleHeader": "ПРИМЕР", + "complexExamples": "Более сложные примеры", + "complexExample1Desc": "«youtube» в URL, и заголовок «haskell» или заголовок «python» и после 31.12.2017", + "complexExample2Desc": "«hacker news» не в заголовке, и «news», «cnn», «npr» где угодно, или «the guardian» в описании" + } +}
static/locales/tr/translation.json view
@@ -1,162 +1,198 @@-{- "auth": {- "invalidUsernamePass": "Gecersiz kullanici adi/sifre kombinasyonu",- "incorrectOldPassword": "Eski sifre yanlis",- "passwordTooShort": "Sifre en az 6 karakter olmali",- "passUpdated": "Sifre guncellendi",- "missingRequiredFields": "Gerekli alanlar eksik"- },- "error": {- "notFound": "Bulunamadi",- "internalError": "Dahili sunucu hatasi",- "invalidArgs": "Gecersiz bagimsiz degiskenler",- "badMethod": "Gecersiz yontem",- "notAuthenticated": "Kimlik dogrulanmadi",- "permissionDenied": "Izin reddedildi"- },- "nav": {- "privateProfileEnabled": "ozel profil etkin",- "darkMode": "koyu mod",- "lightMode": "acik mod",- "addUrl": "url ekle",- "addNote": "not ekle",- "notes": "notlar",- "settings": "ayarlar",- "logout": "cikis yap",- "login": "giris yap"- },- "footer": {- "sourceCode": "Kaynak kodu"- },- "login": {- "pageTitle": "Giris yap",- "username": "Kullanici adi",- "password": "Sifre",- "submit": "Giris yap"- },- "changePassword": {- "oldPassword": "Eski sifre",- "newPassword": "Yeni sifre",- "submit": "Degisiklikleri kaydet"- },- "settings": {- "serverDefault": "Sunucu varsayilani",- "bookmarklet": "url ekleme bookmarklet'i",- "changePassword": "Sifre degistir",- "accountTitle": "Hesap ayarlari",- "archiveDefault": "Yeni ozel olmayan yer imlerini varsayilan olarak arsivle",- "privateDefault": "Yeni yer imlerini varsayilan olarak ozel yap",- "suggestTags": "Etiket onerilerini etkinlestir",- "privacyLock": "Gizlilik kilidi (ozel hesap)",- "archivingDisabled": "Arsivleme devre disi",- "language": "Dil"- },- "rss": "RSS",- "filter": {- "all": "tum",- "private": "ozel",- "public": "genel",- "unread": "okunmamis",- "untagged": "etiketsiz",- "starred": "yildizli"- },- "pagination": {- "perPage": "sayfa basi:"- },- "pager": {- "earlier": "« onceki",- "later": "sonraki »"- },- "notes": {- "youHave": "Sahipsin",- "found": "Bulundu",- "label": "notlar:"- },- "search": {- "placeholder": "ara",- "clearTitle": "arama sonuclarini temizle",- "submitTitle": "aramayi gonder",- "syntaxTitle": "arama sozdizimi"- },- "noTitle": "[baslik yok]",- "edit": "duzenle",- "delete": "sil",- "cancel": "iptal",- "destroy": "yok et",- "save": "kaydet",- "fetch": "getir",- "archive": "arsivle",- "archiving": "arsivleniyor",- "bmark": {- "archiveLinkTitle": "arsiv baglantisi",- "markAsRead": "okundu olarak isle",- "viewInContext": "baglam icinde goruntule",- "url": "url",- "title": "baslik",- "description": "aciklama",- "tags": "etiketler",- "private": "ozel",- "toread": "daha sonra oku"- },- "note": {- "killed": "bu notu sildin",- "titleLabel": "baslik:",- "descriptionLabel": "aciklama:",- "useMarkdown": "markdown kullanilsin mi?",- "publicLabel": "genel mi?"- },- "addForm": {- "previouslySaved": "daha once kaydedildi",- "url": "URL",- "archive": "arsivle",- "archiveUnavailable": "ozel yer imleri icin arsivleme kullanilamaz",- "readLater": "daha sonra oku",- "update": "yer imini guncelle",- "add": "yer imi ekle",- "killed": "bu yer imini sildin"- },- "tagCloud": {- "relatedTags": "Ilgili etiketler",- "topTags": "En cok kullanilan etiketler",- "topTagsTitle": "en cok kullandigin etiketlerin bulutunu goster",- "allTitle": "tum etiketleri goster",- "min2Title": "en az 2 yer imine sahip etiketleri goster",- "min5Title": "en az 5 yer imine sahip etiketleri goster",- "min10Title": "en az 10 yer imine sahip etiketleri goster",- "min20Title": "en az 20 yer imine sahip etiketleri goster",- "hide": "gizle",- "show": "goster"- },- "docs": {- "title": "Arama sozdizimini anlama",- "pageFilters": "Sayfa filtreleri",- "pageFiltersDesc": "Aramalar su anda secili sayfa filtresiyle sinirlandirilir.",- "soGiven": "Yani, olasi sayfa filtreleri verildiginde",- "if": "Eger",- "isCurrentlySelectedIncludes": "su anda seciliyse, arama sunlari icerir",- "bookmarks": "yer imleri",- "isCurrentlySelectedOnly": "su anda seciliyse, arama yalnizca sunlari icerir",- "bookmarksEtc": "yer imleri vb.",- "combineAnd": "Aramalari birlestir (AND)",- "separateBySpace": "Terimleri boslukla ayirin.",- "forExample": "Ornegin,",- "combineOr": "Aramalari birlestir (OR)",- "put": "Sunu koyun",- "betweenQuery": "her arama sorgusunun arasina.",- "excludeWords": "Aramadan kelime cikar",- "inFrontWord": "haric tutmak istediginiz kelimenin onune koyun.",- "exactMatch": "Tam eslesme ara",- "putInQuotes": "Bir kelimeyi veya ifadeyi tirnak icine alin.",- "specificField": "Belirli bir alanda ara",- "inFrontTerm": "terimin onune koyun,",- "where": "burada",- "isOneOfOptions": "asagidaki seceneklerden biridir",- "bookmarkSearch": "Yer imi aramasi",- "noteSearch": "Not aramasi",- "fieldHeader": "ALAN",- "exampleHeader": "ORNEK",- "complexExamples": "Daha karmasik ornekler",- "complexExample1Desc": "url icinde \"youtube\", ve baslikta \"haskell\" veya baslikta \"python\" ve 31/12/2017 sonrasinda",- "complexExample2Desc": "baslikta \"hacker news\" yok, ve herhangi bir yerde \"news\", \"cnn\", \"npr\", veya aciklamada \"the guardian\""- }-}+{ + "auth": { + "invalidUsernamePass": "Gecersiz kullanici adi/sifre kombinasyonu", + "incorrectOldPassword": "Eski sifre yanlis", + "passwordTooShort": "Sifre en az 6 karakter olmali", + "passUpdated": "Sifre guncellendi", + "missingRequiredFields": "Gerekli alanlar eksik" + }, + "error": { + "notFound": "Bulunamadi", + "internalError": "Dahili sunucu hatasi", + "invalidArgs": "Gecersiz bagimsiz degiskenler", + "badMethod": "Gecersiz yontem", + "notAuthenticated": "Kimlik dogrulanmadi", + "permissionDenied": "Izin reddedildi", + "error": "hata: {{status}}", + "errorWithMsg": "hata {{status}}: {{msg}}", + "requestTimedOut": "istek zaman aşımına uğradı", + "networkError": "ağ hatası" + }, + "nav": { + "privateProfileEnabled": "ozel profil etkin", + "darkMode": "koyu mod", + "lightMode": "acik mod", + "addUrl": "url ekle", + "addNote": "not ekle", + "notes": "notlar", + "settings": "ayarlar", + "logout": "cikis yap", + "login": "giris yap" + }, + "footer": { + "sourceCode": "Kaynak kodu" + }, + "login": { + "pageTitle": "Giris yap", + "username": "Kullanici adi", + "password": "Sifre", + "submit": "Giris yap" + }, + "changePassword": { + "oldPassword": "Eski sifre", + "newPassword": "Yeni sifre", + "submit": "Degisiklikleri kaydet" + }, + "settings": { + "serverDefault": "Sunucu varsayilani", + "bookmarklet": "url ekleme bookmarklet'i", + "changePassword": "Sifre degistir", + "accountTitle": "Hesap ayarlari", + "archiveDefault": "Yeni ozel olmayan yer imlerini varsayilan olarak arsivle", + "privateDefault": "Yeni yer imlerini varsayilan olarak ozel yap", + "suggestTags": "Etiket onerilerini etkinlestir", + "privacyLock": "Gizlilik kilidi (ozel hesap)",\n "publicTagCloud": "Public Tag Cloud (visible to visitors)", + "archivingDisabled": "Arsivleme devre disi", + "language": "Dil" + }, + "rss": "RSS", + "filter": { + "all": "tum", + "private": "ozel", + "public": "genel", + "unread": "okunmamis", + "untagged": "etiketsiz", + "starred": "yildizli" + }, + "pagination": { + "perPage": "sayfa basi:" + }, + "pager": { + "earlier": "« onceki", + "later": "sonraki »" + }, + "notes": { + "youHave_one": "1 notunuz var:", + "youHave_other": "{{count}} notunuz var:", + "found_one": "1 not bulundu:", + "found_other": "{{count}} not bulundu:" + }, + "search": { + "placeholder": "ara", + "clearTitle": "arama sonuclarini temizle", + "submitTitle": "aramayi gonder", + "syntaxTitle": "arama sozdizimi" + }, + "noTitle": "[baslik yok]", + "edit": "duzenle", + "delete": "sil", + "cancel": "iptal", + "destroy": "yok et", + "save": "kaydet", + "fetch": "getir", + "archive": "arsivle", + "archiving": "arsivleniyor", + "bmark": { + "archiveLinkTitle": "arsiv baglantisi", + "markAsRead": "okundu olarak isle", + "viewInContext": "baglam icinde goruntule", + "url": "url", + "title": "baslik", + "description": "aciklama", + "tags": "etiketler", + "private": "ozel", + "toread": "daha sonra oku" + }, + "note": { + "killed": "bu notu sildin", + "titleLabel": "baslik:", + "descriptionLabel": "aciklama:", + "useMarkdown": "markdown kullanilsin mi?", + "publicLabel": "genel mi?" + }, + "addForm": { + "previouslySaved": "daha once kaydedildi", + "url": "URL", + "archive": "arsivle", + "archiveUnavailable": "ozel yer imleri icin arsivleme kullanilamaz", + "readLater": "daha sonra oku", + "update": "yer imini guncelle", + "add": "yer imi ekle", + "killed": "bu yer imini sildin" + }, + "tagCloud": { + "relatedTags": "Ilgili etiketler", + "topTags": "En cok kullanilan etiketler", + "topTagsTitle": "en cok kullandigin etiketlerin bulutunu goster", + "allTitle": "tum etiketleri goster", + "min2Title": "en az 2 yer imine sahip etiketleri goster", + "min5Title": "en az 5 yer imine sahip etiketleri goster", + "min10Title": "en az 10 yer imine sahip etiketleri goster", + "min20Title": "en az 20 yer imine sahip etiketleri goster", + "hide": "gizle", + "show": "goster" + }, + "bulkEdit": { + "edit": "düzenle", + "select": "seç:", + "oneBookmarkSelected": "1 yer imi seçildi", + "bookmarksSelected": "{{count}} yer imi seçildi", + "thisPage": "bu sayfa", + "allPages": "tüm sayfalar", + "action": "eylem:", + "markAsRead": "okundu olarak işaretle", + "unread": "okunmamış", + "addStars": "yıldız ekle", + "removeStars": "yıldızı kaldır", + "makePrivate": "gizli yap", + "makePublic": "herkese açık yap", + "removeTags": "etiketleri kaldır:", + "addTags": "etiket ekle:", + "submitting": "gönderiliyor…", + "submit": "gönder", + "destroyOne": "1 yer imini sil?", + "destroyMany": "{{count}} yer imini sil?", + "publicOne": "1 yer imini herkese açık yap?", + "publicMany": "{{count}} yer imini herkese açık yap?", + "pleaseAddSelection": "lütfen yer imi seçin", + "pleaseChooseAction": "lütfen bir eylem seçin veya etiket girin", + "tooManyTags": "20.000'den fazla yer imi etkilendiğinde aynı anda 10'dan fazla etiket eklenemez", + "pageMismatch": "sayfa yer imi sayısı uyuşmuyor", + "editedCount_one": "{{editedCount}} yer imi düzenlendi", + "editedCount_other": "{{editedCount}} yer imi düzenlendi", + "editedCountMismatch_one": "seçim sayısı {{selectionCount}} iken, eşleşen yer imi verileri değiştiği için {{editedCount}} yer imi düzenlendi", + "editedCountMismatch_other": "seçim sayısı {{selectionCount}} iken, eşleşen yer imi verileri değiştiği için {{editedCount}} yer imi düzenlendi" + }, + "docs": { + "title": "Arama sozdizimini anlama", + "pageFilters": "Sayfa filtreleri", + "pageFiltersDesc": "Aramalar su anda secili sayfa filtresiyle sinirlandirilir.", + "soGiven": "Yani, olasi sayfa filtreleri verildiginde", + "if": "Eger", + "isCurrentlySelectedIncludes": "su anda seciliyse, arama sunlari icerir", + "bookmarks": "yer imleri", + "isCurrentlySelectedOnly": "su anda seciliyse, arama yalnizca sunlari icerir", + "bookmarksEtc": "yer imleri vb.", + "combineAnd": "Aramalari birlestir (AND)", + "separateBySpace": "Terimleri boslukla ayirin.", + "forExample": "Ornegin,", + "combineOr": "Aramalari birlestir (OR)", + "put": "Sunu koyun", + "betweenQuery": "her arama sorgusunun arasina.", + "excludeWords": "Aramadan kelime cikar", + "inFrontWord": "haric tutmak istediginiz kelimenin onune koyun.", + "exactMatch": "Tam eslesme ara", + "putInQuotes": "Bir kelimeyi veya ifadeyi tirnak icine alin.", + "specificField": "Belirli bir alanda ara", + "inFrontTerm": "terimin onune koyun,", + "where": "burada", + "isOneOfOptions": "asagidaki seceneklerden biridir", + "bookmarkSearch": "Yer imi aramasi", + "noteSearch": "Not aramasi", + "fieldHeader": "ALAN", + "exampleHeader": "ORNEK", + "complexExamples": "Daha karmasik ornekler", + "complexExample1Desc": "url icinde \"youtube\", ve baslikta \"haskell\" veya baslikta \"python\" ve 31/12/2017 sonrasinda", + "complexExample2Desc": "baslikta \"hacker news\" yok, ve herhangi bir yerde \"news\", \"cnn\", \"npr\", veya aciklamada \"the guardian\"" + } +}
static/locales/uk/translation.json view
@@ -1,162 +1,198 @@-{- "auth": {- "invalidUsernamePass": "Неправильна комбінація імені користувача та пароля",- "incorrectOldPassword": "Неправильний старий пароль",- "passwordTooShort": "Пароль має містити щонайменше 6 символів",- "passUpdated": "Пароль оновлено",- "missingRequiredFields": "Відсутні обов'язкові поля"- },- "error": {- "notFound": "Не знайдено",- "internalError": "Внутрішня помилка сервера",- "invalidArgs": "Неприпустимі аргументи",- "badMethod": "Неприпустимий метод",- "notAuthenticated": "Не автентифіковано",- "permissionDenied": "Доступ заборонено"- },- "nav": {- "privateProfileEnabled": "приватний профіль увімкнено",- "darkMode": "темний режим",- "lightMode": "світлий режим",- "addUrl": "додати url",- "addNote": "додати нотатку",- "notes": "нотатки",- "settings": "налаштування",- "logout": "вийти",- "login": "увійти"- },- "footer": {- "sourceCode": "Вихідний код"- },- "login": {- "pageTitle": "Увійти",- "username": "Ім'я користувача",- "password": "Пароль",- "submit": "Увійти"- },- "changePassword": {- "oldPassword": "Старий пароль",- "newPassword": "Новий пароль",- "submit": "Зберегти зміни"- },- "settings": {- "serverDefault": "Типове значення сервера",- "bookmarklet": "bookmarklet для додавання url",- "changePassword": "Змінити пароль",- "accountTitle": "Налаштування облікового запису",- "archiveDefault": "Типово архівувати нові неприховані закладки",- "privateDefault": "Типово робити нові закладки приватними",- "suggestTags": "Увімкнути підказки тегів",- "privacyLock": "Блокування приватності (приватний обліковий запис)",- "archivingDisabled": "Архівування вимкнено",- "language": "Мова"- },- "rss": "RSS",- "filter": {- "all": "усі",- "private": "приватні",- "public": "публічні",- "unread": "непрочитані",- "untagged": "без тегів",- "starred": "із зіркою"- },- "pagination": {- "perPage": "на сторінці:"- },- "pager": {- "earlier": "« раніше",- "later": "пізніше »"- },- "notes": {- "youHave": "У вас є",- "found": "Знайдено",- "label": "нотатки:"- },- "search": {- "placeholder": "пошук",- "clearTitle": "очистити результати пошуку",- "submitTitle": "виконати пошук",- "syntaxTitle": "синтаксис пошуку"- },- "noTitle": "[без назви]",- "edit": "редагувати",- "delete": "видалити",- "cancel": "скасувати",- "destroy": "знищити",- "save": "зберегти",- "fetch": "отримати",- "archive": "архівувати",- "archiving": "архівування",- "bmark": {- "archiveLinkTitle": "посилання на архів",- "markAsRead": "позначити як прочитане",- "viewInContext": "переглянути в контексті",- "url": "url",- "title": "назва",- "description": "опис",- "tags": "теги",- "private": "приватне",- "toread": "прочитати пізніше"- },- "note": {- "killed": "ви видалили цю нотатку",- "titleLabel": "назва:",- "descriptionLabel": "опис:",- "useMarkdown": "використовувати markdown?",- "publicLabel": "публічна?"- },- "addForm": {- "previouslySaved": "збережено раніше",- "url": "URL",- "archive": "архівувати",- "archiveUnavailable": "архівування недоступне для приватних закладок",- "readLater": "прочитати пізніше",- "update": "оновити закладку",- "add": "додати закладку",- "killed": "ви видалили цю закладку"- },- "tagCloud": {- "relatedTags": "Пов'язані теги",- "topTags": "Найпопулярніші теги",- "topTagsTitle": "показати хмару ваших найуживаніших тегів",- "allTitle": "показати всі теги",- "min2Title": "показати теги щонайменше з 2 закладками",- "min5Title": "показати теги щонайменше з 5 закладками",- "min10Title": "показати теги щонайменше з 10 закладками",- "min20Title": "показати теги щонайменше з 20 закладками",- "hide": "сховати",- "show": "показати"- },- "docs": {- "title": "Розуміння синтаксису пошуку",- "pageFilters": "Фільтри сторінки",- "pageFiltersDesc": "Пошук обмежується поточним вибраним фільтром сторінки.",- "soGiven": "Отже, для можливих фільтрів сторінки",- "if": "Якщо",- "isCurrentlySelectedIncludes": "зараз вибрано, пошук включає",- "bookmarks": "закладки",- "isCurrentlySelectedOnly": "зараз вибрано, пошук включає лише",- "bookmarksEtc": "закладки тощо.",- "combineAnd": "Поєднання пошуків (AND)",- "separateBySpace": "Розділяйте терміни пробілом.",- "forExample": "Наприклад,",- "combineOr": "Поєднання пошуків (OR)",- "put": "Поставте",- "betweenQuery": "між кожним пошуковим запитом.",- "excludeWords": "Виключення слів із пошуку",- "inFrontWord": "перед словом, яке потрібно виключити.",- "exactMatch": "Пошук точного збігу",- "putInQuotes": "Візьміть слово або фразу в лапки.",- "specificField": "Пошук у конкретному полі",- "inFrontTerm": "перед терміном,",- "where": "де",- "isOneOfOptions": "є одним із варіантів нижче",- "bookmarkSearch": "Пошук закладок",- "noteSearch": "Пошук нотаток",- "fieldHeader": "ПОЛЕ",- "exampleHeader": "ПРИКЛАД",- "complexExamples": "Складніші приклади",- "complexExample1Desc": "\"youtube\" в url, і назва містить \"haskell\" або назва містить \"python\", і після 31.12.2017",- "complexExample2Desc": "\"hacker news\" не в назві, а \"news\", \"cnn\", \"npr\" будь-де, або \"the guardian\" в описі"- }-}+{ + "auth": { + "invalidUsernamePass": "Неправильна комбінація імені користувача та пароля", + "incorrectOldPassword": "Неправильний старий пароль", + "passwordTooShort": "Пароль має містити щонайменше 6 символів", + "passUpdated": "Пароль оновлено", + "missingRequiredFields": "Відсутні обов'язкові поля" + }, + "error": { + "notFound": "Не знайдено", + "internalError": "Внутрішня помилка сервера", + "invalidArgs": "Неприпустимі аргументи", + "badMethod": "Неприпустимий метод", + "notAuthenticated": "Не автентифіковано", + "permissionDenied": "Доступ заборонено", + "error": "помилка: {{status}}", + "errorWithMsg": "помилка {{status}}: {{msg}}", + "requestTimedOut": "час очікування запиту вичерпано", + "networkError": "помилка мережі" + }, + "nav": { + "privateProfileEnabled": "приватний профіль увімкнено", + "darkMode": "темний режим", + "lightMode": "світлий режим", + "addUrl": "додати url", + "addNote": "додати нотатку", + "notes": "нотатки", + "settings": "налаштування", + "logout": "вийти", + "login": "увійти" + }, + "footer": { + "sourceCode": "Вихідний код" + }, + "login": { + "pageTitle": "Увійти", + "username": "Ім'я користувача", + "password": "Пароль", + "submit": "Увійти" + }, + "changePassword": { + "oldPassword": "Старий пароль", + "newPassword": "Новий пароль", + "submit": "Зберегти зміни" + }, + "settings": { + "serverDefault": "Типове значення сервера", + "bookmarklet": "bookmarklet для додавання url", + "changePassword": "Змінити пароль", + "accountTitle": "Налаштування облікового запису", + "archiveDefault": "Типово архівувати нові неприховані закладки", + "privateDefault": "Типово робити нові закладки приватними", + "suggestTags": "Увімкнути підказки тегів", + "privacyLock": "Блокування приватності (приватний обліковий запис)",\n "publicTagCloud": "Public Tag Cloud (visible to visitors)", + "archivingDisabled": "Архівування вимкнено", + "language": "Мова" + }, + "rss": "RSS", + "filter": { + "all": "усі", + "private": "приватні", + "public": "публічні", + "unread": "непрочитані", + "untagged": "без тегів", + "starred": "із зіркою" + }, + "pagination": { + "perPage": "на сторінці:" + }, + "pager": { + "earlier": "« раніше", + "later": "пізніше »" + }, + "notes": { + "youHave_one": "У вас є 1 нотатка:", + "youHave_other": "У вас є {{count}} нотаток:", + "found_one": "Знайдено 1 нотатку:", + "found_other": "Знайдено {{count}} нотаток:" + }, + "search": { + "placeholder": "пошук", + "clearTitle": "очистити результати пошуку", + "submitTitle": "виконати пошук", + "syntaxTitle": "синтаксис пошуку" + }, + "noTitle": "[без назви]", + "edit": "редагувати", + "delete": "видалити", + "cancel": "скасувати", + "destroy": "знищити", + "save": "зберегти", + "fetch": "отримати", + "archive": "архівувати", + "archiving": "архівування", + "bmark": { + "archiveLinkTitle": "посилання на архів", + "markAsRead": "позначити як прочитане", + "viewInContext": "переглянути в контексті", + "url": "url", + "title": "назва", + "description": "опис", + "tags": "теги", + "private": "приватне", + "toread": "прочитати пізніше" + }, + "note": { + "killed": "ви видалили цю нотатку", + "titleLabel": "назва:", + "descriptionLabel": "опис:", + "useMarkdown": "використовувати markdown?", + "publicLabel": "публічна?" + }, + "addForm": { + "previouslySaved": "збережено раніше", + "url": "URL", + "archive": "архівувати", + "archiveUnavailable": "архівування недоступне для приватних закладок", + "readLater": "прочитати пізніше", + "update": "оновити закладку", + "add": "додати закладку", + "killed": "ви видалили цю закладку" + }, + "tagCloud": { + "relatedTags": "Пов'язані теги", + "topTags": "Найпопулярніші теги", + "topTagsTitle": "показати хмару ваших найуживаніших тегів", + "allTitle": "показати всі теги", + "min2Title": "показати теги щонайменше з 2 закладками", + "min5Title": "показати теги щонайменше з 5 закладками", + "min10Title": "показати теги щонайменше з 10 закладками", + "min20Title": "показати теги щонайменше з 20 закладками", + "hide": "сховати", + "show": "показати" + }, + "bulkEdit": { + "edit": "редагувати", + "select": "вибрати:", + "oneBookmarkSelected": "1 закладку вибрано", + "bookmarksSelected": "{{count}} закладок вибрано", + "thisPage": "ця сторінка", + "allPages": "всі сторінки", + "action": "дія:", + "markAsRead": "позначити як прочитане", + "unread": "непрочитане", + "addStars": "додати зірки", + "removeStars": "прибрати зірки", + "makePrivate": "зробити приватним", + "makePublic": "зробити публічним", + "removeTags": "видалити мітки:", + "addTags": "додати мітки:", + "submitting": "надсилання…", + "submit": "надіслати", + "destroyOne": "видалити 1 закладку?", + "destroyMany": "видалити {{count}} закладок?", + "publicOne": "зробити 1 закладку публічною?", + "publicMany": "зробити {{count}} закладок публічними?", + "pleaseAddSelection": "будь ласка, виберіть закладки", + "pleaseChooseAction": "будь ласка, виберіть дію або введіть мітки", + "tooManyTags": "не можна додавати більше 10 міток одночасно, якщо це зачіпає більше 20 000 закладок", + "pageMismatch": "кількість закладок на сторінці не збігається", + "editedCount_one": "відредаговано {{editedCount}} закладку", + "editedCount_other": "відредаговано {{editedCount}} закладок", + "editedCountMismatch_one": "кількість вибраних була {{selectionCount}}, але відредаговано {{editedCount}} закладку, оскільки дані відповідних закладок змінилися", + "editedCountMismatch_other": "кількість вибраних була {{selectionCount}}, але відредаговано {{editedCount}} закладок, оскільки дані відповідних закладок змінилися" + }, + "docs": { + "title": "Розуміння синтаксису пошуку", + "pageFilters": "Фільтри сторінки", + "pageFiltersDesc": "Пошук обмежується поточним вибраним фільтром сторінки.", + "soGiven": "Отже, для можливих фільтрів сторінки", + "if": "Якщо", + "isCurrentlySelectedIncludes": "зараз вибрано, пошук включає", + "bookmarks": "закладки", + "isCurrentlySelectedOnly": "зараз вибрано, пошук включає лише", + "bookmarksEtc": "закладки тощо.", + "combineAnd": "Поєднання пошуків (AND)", + "separateBySpace": "Розділяйте терміни пробілом.", + "forExample": "Наприклад,", + "combineOr": "Поєднання пошуків (OR)", + "put": "Поставте", + "betweenQuery": "між кожним пошуковим запитом.", + "excludeWords": "Виключення слів із пошуку", + "inFrontWord": "перед словом, яке потрібно виключити.", + "exactMatch": "Пошук точного збігу", + "putInQuotes": "Візьміть слово або фразу в лапки.", + "specificField": "Пошук у конкретному полі", + "inFrontTerm": "перед терміном,", + "where": "де", + "isOneOfOptions": "є одним із варіантів нижче", + "bookmarkSearch": "Пошук закладок", + "noteSearch": "Пошук нотаток", + "fieldHeader": "ПОЛЕ", + "exampleHeader": "ПРИКЛАД", + "complexExamples": "Складніші приклади", + "complexExample1Desc": "\"youtube\" в url, і назва містить \"haskell\" або назва містить \"python\", і після 31.12.2017", + "complexExample2Desc": "\"hacker news\" не в назві, а \"news\", \"cnn\", \"npr\" будь-де, або \"the guardian\" в описі" + } +}
static/locales/zh-Hans/translation.json view
@@ -1,162 +1,198 @@-{- "auth": {- "invalidUsernamePass": "用户名或密码组合无效",- "incorrectOldPassword": "旧密码不正确",- "passwordTooShort": "密码长度至少为 6 个字符",- "passUpdated": "密码已更新",- "missingRequiredFields": "缺少必填字段"- },- "error": {- "notFound": "未找到",- "internalError": "服务器内部错误",- "invalidArgs": "参数无效",- "badMethod": "错误的方法",- "notAuthenticated": "未认证",- "permissionDenied": "权限被拒绝"- },- "nav": {- "privateProfileEnabled": "已启用私密个人资料",- "darkMode": "深色模式",- "lightMode": "浅色模式",- "addUrl": "添加 url",- "addNote": "添加笔记",- "notes": "笔记",- "settings": "设置",- "logout": "退出登录",- "login": "登录"- },- "footer": {- "sourceCode": "源代码"- },- "login": {- "pageTitle": "登录",- "username": "用户名",- "password": "密码",- "submit": "登录"- },- "changePassword": {- "oldPassword": "旧密码",- "newPassword": "新密码",- "submit": "保存更改"- },- "settings": {- "serverDefault": "服务器默认值",- "bookmarklet": "添加 url 的书签小工具",- "changePassword": "修改密码",- "accountTitle": "账户设置",- "archiveDefault": "默认归档新的非私密书签",- "privateDefault": "默认将新书签设为私密",- "suggestTags": "启用标签建议",- "privacyLock": "隐私锁定(私密账户)",- "archivingDisabled": "归档已禁用",- "language": "语言"- },- "rss": "RSS",- "filter": {- "all": "全部",- "private": "私密",- "public": "公开",- "unread": "未读",- "untagged": "无标签",- "starred": "已加星标"- },- "pagination": {- "perPage": "每页:"- },- "pager": {- "earlier": "« 更早",- "later": "更晚 »"- },- "notes": {- "youHave": "你有",- "found": "找到",- "label": "笔记:"- },- "search": {- "placeholder": "搜索",- "clearTitle": "清除搜索结果",- "submitTitle": "提交搜索",- "syntaxTitle": "搜索语法"- },- "noTitle": "[无标题]",- "edit": "编辑",- "delete": "删除",- "cancel": "取消",- "destroy": "销毁",- "save": "保存",- "fetch": "抓取",- "archive": "归档",- "archiving": "正在归档",- "bmark": {- "archiveLinkTitle": "归档链接",- "markAsRead": "标记为已读",- "viewInContext": "在上下文中查看",- "url": "url",- "title": "标题",- "description": "描述",- "tags": "标签",- "private": "私密",- "toread": "稍后阅读"- },- "note": {- "killed": "你已删除这条笔记",- "titleLabel": "标题:",- "descriptionLabel": "描述:",- "useMarkdown": "使用 markdown?",- "publicLabel": "公开?"- },- "addForm": {- "previouslySaved": "之前已保存",- "url": "URL",- "archive": "归档",- "archiveUnavailable": "私密书签无法使用归档功能",- "readLater": "稍后阅读",- "update": "更新书签",- "add": "添加书签",- "killed": "你已删除这个书签"- },- "tagCloud": {- "relatedTags": "相关标签",- "topTags": "热门标签",- "topTagsTitle": "显示你最常用标签的标签云",- "allTitle": "显示所有标签",- "min2Title": "显示至少有 2 个书签的标签",- "min5Title": "显示至少有 5 个书签的标签",- "min10Title": "显示至少有 10 个书签的标签",- "min20Title": "显示至少有 20 个书签的标签",- "hide": "隐藏",- "show": "显示"- },- "docs": {- "title": "理解搜索语法",- "pageFilters": "页面过滤器",- "pageFiltersDesc": "搜索范围受当前所选页面过滤器限制。",- "soGiven": "因此,给定可能的页面过滤器",- "if": "如果",- "isCurrentlySelectedIncludes": "当前被选中,搜索会包含",- "bookmarks": "书签",- "isCurrentlySelectedOnly": "当前被选中,搜索只会包含",- "bookmarksEtc": "书签等。",- "combineAnd": "组合搜索 (AND)",- "separateBySpace": "用空格分隔各个词项。",- "forExample": "例如,",- "combineOr": "组合搜索 (OR)",- "put": "将",- "betweenQuery": "放在每个搜索查询之间。",- "excludeWords": "从搜索中排除词语",- "inFrontWord": "放在你想排除的词前面。",- "exactMatch": "搜索精确匹配",- "putInQuotes": "将单词或短语放在引号中。",- "specificField": "在特定字段中搜索",- "inFrontTerm": "放在词项前面,",- "where": "其中",- "isOneOfOptions": "是下面的选项之一",- "bookmarkSearch": "书签搜索",- "noteSearch": "笔记搜索",- "fieldHeader": "字段",- "exampleHeader": "示例",- "complexExamples": "更复杂的示例",- "complexExample1Desc": "url 中包含 \"youtube\",标题中包含 \"haskell\" 或标题中包含 \"python\",并且日期晚于 2017/12/31",- "complexExample2Desc": "标题中不包含 \"hacker news\",并且任意位置包含 \"news\"、\"cnn\"、\"npr\",或者描述中包含 \"the guardian\""- }-}+{ + "auth": { + "invalidUsernamePass": "用户名或密码组合无效", + "incorrectOldPassword": "旧密码不正确", + "passwordTooShort": "密码长度至少为 6 个字符", + "passUpdated": "密码已更新", + "missingRequiredFields": "缺少必填字段" + }, + "error": { + "notFound": "未找到", + "internalError": "服务器内部错误", + "invalidArgs": "参数无效", + "badMethod": "错误的方法", + "notAuthenticated": "未认证", + "permissionDenied": "权限被拒绝", + "error": "错误:{{status}}", + "errorWithMsg": "错误 {{status}}:{{msg}}", + "requestTimedOut": "请求超时", + "networkError": "网络错误" + }, + "nav": { + "privateProfileEnabled": "已启用私密个人资料", + "darkMode": "深色模式", + "lightMode": "浅色模式", + "addUrl": "添加 url", + "addNote": "添加笔记", + "notes": "笔记", + "settings": "设置", + "logout": "退出登录", + "login": "登录" + }, + "footer": { + "sourceCode": "源代码" + }, + "login": { + "pageTitle": "登录", + "username": "用户名", + "password": "密码", + "submit": "登录" + }, + "changePassword": { + "oldPassword": "旧密码", + "newPassword": "新密码", + "submit": "保存更改" + }, + "settings": { + "serverDefault": "服务器默认值", + "bookmarklet": "添加 url 的书签小工具", + "changePassword": "修改密码", + "accountTitle": "账户设置", + "archiveDefault": "默认归档新的非私密书签", + "privateDefault": "默认将新书签设为私密", + "suggestTags": "启用标签建议", + "privacyLock": "隐私锁定(私密账户)",\n "publicTagCloud": "Public Tag Cloud (visible to visitors)", + "archivingDisabled": "归档已禁用", + "language": "语言" + }, + "rss": "RSS", + "filter": { + "all": "全部", + "private": "私密", + "public": "公开", + "unread": "未读", + "untagged": "无标签", + "starred": "已加星标" + }, + "pagination": { + "perPage": "每页:" + }, + "pager": { + "earlier": "« 更早", + "later": "更晚 »" + }, + "notes": { + "youHave_one": "你有 1 条笔记:", + "youHave_other": "你有 {{count}} 条笔记:", + "found_one": "找到 1 条笔记:", + "found_other": "找到 {{count}} 条笔记:" + }, + "search": { + "placeholder": "搜索", + "clearTitle": "清除搜索结果", + "submitTitle": "提交搜索", + "syntaxTitle": "搜索语法" + }, + "noTitle": "[无标题]", + "edit": "编辑", + "delete": "删除", + "cancel": "取消", + "destroy": "销毁", + "save": "保存", + "fetch": "抓取", + "archive": "归档", + "archiving": "正在归档", + "bmark": { + "archiveLinkTitle": "归档链接", + "markAsRead": "标记为已读", + "viewInContext": "在上下文中查看", + "url": "url", + "title": "标题", + "description": "描述", + "tags": "标签", + "private": "私密", + "toread": "稍后阅读" + }, + "note": { + "killed": "你已删除这条笔记", + "titleLabel": "标题:", + "descriptionLabel": "描述:", + "useMarkdown": "使用 markdown?", + "publicLabel": "公开?" + }, + "addForm": { + "previouslySaved": "之前已保存", + "url": "URL", + "archive": "归档", + "archiveUnavailable": "私密书签无法使用归档功能", + "readLater": "稍后阅读", + "update": "更新书签", + "add": "添加书签", + "killed": "你已删除这个书签" + }, + "tagCloud": { + "relatedTags": "相关标签", + "topTags": "热门标签", + "topTagsTitle": "显示你最常用标签的标签云", + "allTitle": "显示所有标签", + "min2Title": "显示至少有 2 个书签的标签", + "min5Title": "显示至少有 5 个书签的标签", + "min10Title": "显示至少有 10 个书签的标签", + "min20Title": "显示至少有 20 个书签的标签", + "hide": "隐藏", + "show": "显示" + }, + "bulkEdit": { + "edit": "编辑", + "select": "选择:", + "oneBookmarkSelected": "已选择 1 个书签", + "bookmarksSelected": "已选择 {{count}} 个书签", + "thisPage": "本页", + "allPages": "所有页", + "action": "操作:", + "markAsRead": "标记为已读", + "unread": "未读", + "addStars": "添加星标", + "removeStars": "移除星标", + "makePrivate": "设为私密", + "makePublic": "设为公开", + "removeTags": "移除标签:", + "addTags": "添加标签:", + "submitting": "提交中…", + "submit": "提交", + "destroyOne": "删除 1 个书签?", + "destroyMany": "删除 {{count}} 个书签?", + "publicOne": "将 1 个书签设为公开?", + "publicMany": "将 {{count}} 个书签设为公开?", + "pleaseAddSelection": "请选择书签", + "pleaseChooseAction": "请选择操作或输入标签", + "tooManyTags": "当超过 20,000 个书签受影响时,不能一次添加超过 10 个标签", + "pageMismatch": "页面书签数量不匹配", + "editedCount_one": "已编辑 {{editedCount}} 个书签", + "editedCount_other": "已编辑 {{editedCount}} 个书签", + "editedCountMismatch_one": "选择数量为 {{selectionCount}},但由于匹配的书签数据已更改,实际编辑了 {{editedCount}} 个书签", + "editedCountMismatch_other": "选择数量为 {{selectionCount}},但由于匹配的书签数据已更改,实际编辑了 {{editedCount}} 个书签" + }, + "docs": { + "title": "理解搜索语法", + "pageFilters": "页面过滤器", + "pageFiltersDesc": "搜索范围受当前所选页面过滤器限制。", + "soGiven": "因此,给定可能的页面过滤器", + "if": "如果", + "isCurrentlySelectedIncludes": "当前被选中,搜索会包含", + "bookmarks": "书签", + "isCurrentlySelectedOnly": "当前被选中,搜索只会包含", + "bookmarksEtc": "书签等。", + "combineAnd": "组合搜索 (AND)", + "separateBySpace": "用空格分隔各个词项。", + "forExample": "例如,", + "combineOr": "组合搜索 (OR)", + "put": "将", + "betweenQuery": "放在每个搜索查询之间。", + "excludeWords": "从搜索中排除词语", + "inFrontWord": "放在你想排除的词前面。", + "exactMatch": "搜索精确匹配", + "putInQuotes": "将单词或短语放在引号中。", + "specificField": "在特定字段中搜索", + "inFrontTerm": "放在词项前面,", + "where": "其中", + "isOneOfOptions": "是下面的选项之一", + "bookmarkSearch": "书签搜索", + "noteSearch": "笔记搜索", + "fieldHeader": "字段", + "exampleHeader": "示例", + "complexExamples": "更复杂的示例", + "complexExample1Desc": "url 中包含 \"youtube\",标题中包含 \"haskell\" 或标题中包含 \"python\",并且日期晚于 2017/12/31", + "complexExample2Desc": "标题中不包含 \"hacker news\",并且任意位置包含 \"news\"、\"cnn\"、\"npr\",或者描述中包含 \"the guardian\"" + } +}
static/locales/zh-Hant/translation.json view
@@ -1,162 +1,198 @@-{- "auth": {- "invalidUsernamePass": "無效的使用者名稱/密碼組合",- "incorrectOldPassword": "舊密碼不正確",- "passwordTooShort": "密碼長度至少必須為 6 個字元",- "passUpdated": "密碼已更新",- "missingRequiredFields": "缺少必填欄位"- },- "error": {- "notFound": "找不到",- "internalError": "伺服器內部錯誤",- "invalidArgs": "無效的引數",- "badMethod": "錯誤的方法",- "notAuthenticated": "未驗證",- "permissionDenied": "權限遭拒"- },- "nav": {- "privateProfileEnabled": "已啟用私人個人資料",- "darkMode": "深色模式",- "lightMode": "淺色模式",- "addUrl": "新增網址",- "addNote": "新增筆記",- "notes": "筆記",- "settings": "設定",- "logout": "登出",- "login": "登入"- },- "footer": {- "sourceCode": "原始碼"- },- "login": {- "pageTitle": "登入",- "username": "使用者名稱",- "password": "密碼",- "submit": "登入"- },- "changePassword": {- "oldPassword": "舊密碼",- "newPassword": "新密碼",- "submit": "儲存變更"- },- "settings": {- "serverDefault": "伺服器預設值",- "bookmarklet": "新增網址書籤小工具",- "changePassword": "變更密碼",- "accountTitle": "帳戶設定",- "archiveDefault": "預設封存新的非私人書籤",- "privateDefault": "預設將新書籤設為私人",- "suggestTags": "啟用標籤建議",- "privacyLock": "隱私鎖定(私人帳戶)",- "archivingDisabled": "封存功能已停用",- "language": "語言"- },- "rss": "RSS",- "filter": {- "all": "全部",- "private": "私人",- "public": "公開",- "unread": "未讀",- "untagged": "未標籤",- "starred": "已加星號"- },- "pagination": {- "perPage": "每頁:"- },- "pager": {- "earlier": "« 較早",- "later": "較晚 »"- },- "notes": {- "youHave": "你有",- "found": "找到",- "label": "筆記:"- },- "search": {- "placeholder": "搜尋",- "clearTitle": "清除搜尋結果",- "submitTitle": "送出搜尋",- "syntaxTitle": "搜尋語法"- },- "noTitle": "[無標題]",- "edit": "編輯",- "delete": "刪除",- "cancel": "取消",- "destroy": "銷毀",- "save": "儲存",- "fetch": "擷取",- "archive": "封存",- "archiving": "封存中",- "bmark": {- "archiveLinkTitle": "封存連結",- "markAsRead": "標示為已讀",- "viewInContext": "在內容中檢視",- "url": "網址",- "title": "標題",- "description": "描述",- "tags": "標籤",- "private": "私人",- "toread": "稍後閱讀"- },- "note": {- "killed": "你刪除了這則筆記",- "titleLabel": "標題:",- "descriptionLabel": "描述:",- "useMarkdown": "使用 Markdown?",- "publicLabel": "公開?"- },- "addForm": {- "previouslySaved": "先前已儲存",- "url": "URL",- "archive": "封存",- "archiveUnavailable": "私人書籤無法使用封存功能",- "readLater": "稍後閱讀",- "update": "更新書籤",- "add": "新增書籤",- "killed": "你刪除了這個書籤"- },- "tagCloud": {- "relatedTags": "相關標籤",- "topTags": "熱門標籤",- "topTagsTitle": "顯示你最常用標籤的雲圖",- "allTitle": "顯示所有標籤",- "min2Title": "顯示至少有 2 個書籤的標籤",- "min5Title": "顯示至少有 5 個書籤的標籤",- "min10Title": "顯示至少有 10 個書籤的標籤",- "min20Title": "顯示至少有 20 個書籤的標籤",- "hide": "隱藏",- "show": "顯示"- },- "docs": {- "title": "了解搜尋語法",- "pageFilters": "頁面篩選",- "pageFiltersDesc": "搜尋範圍會限制在目前選取的頁面篩選條件內。",- "soGiven": "因此,給定下列可能的頁面篩選條件",- "if": "如果",- "isCurrentlySelectedIncludes": "目前被選取,搜尋會包含",- "bookmarks": "書籤",- "isCurrentlySelectedOnly": "目前被選取,搜尋只會包含",- "bookmarksEtc": "書籤等等。",- "combineAnd": "組合搜尋(AND)",- "separateBySpace": "以空格分隔搜尋詞。",- "forExample": "例如,",- "combineOr": "組合搜尋(OR)",- "put": "將",- "betweenQuery": "放在每個搜尋查詢之間。",- "excludeWords": "從搜尋中排除字詞",- "inFrontWord": "放在想排除字詞的前面。",- "exactMatch": "搜尋完全相符的內容",- "putInQuotes": "將單字或片語放在引號內。",- "specificField": "針對特定欄位搜尋",- "inFrontTerm": "放在查詢詞前面,",- "where": "其中",- "isOneOfOptions": "是下列選項之一",- "bookmarkSearch": "書籤搜尋",- "noteSearch": "筆記搜尋",- "fieldHeader": "欄位",- "exampleHeader": "範例",- "complexExamples": "更複雜的範例",- "complexExample1Desc": "URL 中含有 \"youtube\",且標題為 \"haskell\" 或標題為 \"python\",並且在 2017/12/31 之後",- "complexExample2Desc": "標題中不含 \"hacker news\",且任意位置包含 \"news\"、\"cnn\"、\"npr\",或描述中包含 \"the guardian\""- }-}+{ + "auth": { + "invalidUsernamePass": "無效的使用者名稱/密碼組合", + "incorrectOldPassword": "舊密碼不正確", + "passwordTooShort": "密碼長度至少必須為 6 個字元", + "passUpdated": "密碼已更新", + "missingRequiredFields": "缺少必填欄位" + }, + "error": { + "notFound": "找不到", + "internalError": "伺服器內部錯誤", + "invalidArgs": "無效的引數", + "badMethod": "錯誤的方法", + "notAuthenticated": "未驗證", + "permissionDenied": "權限遭拒", + "error": "錯誤:{{status}}", + "errorWithMsg": "錯誤 {{status}}:{{msg}}", + "requestTimedOut": "請求逾時", + "networkError": "網路錯誤" + }, + "nav": { + "privateProfileEnabled": "已啟用私人個人資料", + "darkMode": "深色模式", + "lightMode": "淺色模式", + "addUrl": "新增網址", + "addNote": "新增筆記", + "notes": "筆記", + "settings": "設定", + "logout": "登出", + "login": "登入" + }, + "footer": { + "sourceCode": "原始碼" + }, + "login": { + "pageTitle": "登入", + "username": "使用者名稱", + "password": "密碼", + "submit": "登入" + }, + "changePassword": { + "oldPassword": "舊密碼", + "newPassword": "新密碼", + "submit": "儲存變更" + }, + "settings": { + "serverDefault": "伺服器預設值", + "bookmarklet": "新增網址書籤小工具", + "changePassword": "變更密碼", + "accountTitle": "帳戶設定", + "archiveDefault": "預設封存新的非私人書籤", + "privateDefault": "預設將新書籤設為私人", + "suggestTags": "啟用標籤建議", + "privacyLock": "隱私鎖定(私人帳戶)",\n "publicTagCloud": "Public Tag Cloud (visible to visitors)", + "archivingDisabled": "封存功能已停用", + "language": "語言" + }, + "rss": "RSS", + "filter": { + "all": "全部", + "private": "私人", + "public": "公開", + "unread": "未讀", + "untagged": "未標籤", + "starred": "已加星號" + }, + "pagination": { + "perPage": "每頁:" + }, + "pager": { + "earlier": "« 較早", + "later": "較晚 »" + }, + "notes": { + "youHave_one": "你有 1 條筆記:", + "youHave_other": "你有 {{count}} 條筆記:", + "found_one": "找到 1 條筆記:", + "found_other": "找到 {{count}} 條筆記:" + }, + "search": { + "placeholder": "搜尋", + "clearTitle": "清除搜尋結果", + "submitTitle": "送出搜尋", + "syntaxTitle": "搜尋語法" + }, + "noTitle": "[無標題]", + "edit": "編輯", + "delete": "刪除", + "cancel": "取消", + "destroy": "銷毀", + "save": "儲存", + "fetch": "擷取", + "archive": "封存", + "archiving": "封存中", + "bmark": { + "archiveLinkTitle": "封存連結", + "markAsRead": "標示為已讀", + "viewInContext": "在內容中檢視", + "url": "網址", + "title": "標題", + "description": "描述", + "tags": "標籤", + "private": "私人", + "toread": "稍後閱讀" + }, + "note": { + "killed": "你刪除了這則筆記", + "titleLabel": "標題:", + "descriptionLabel": "描述:", + "useMarkdown": "使用 Markdown?", + "publicLabel": "公開?" + }, + "addForm": { + "previouslySaved": "先前已儲存", + "url": "URL", + "archive": "封存", + "archiveUnavailable": "私人書籤無法使用封存功能", + "readLater": "稍後閱讀", + "update": "更新書籤", + "add": "新增書籤", + "killed": "你刪除了這個書籤" + }, + "tagCloud": { + "relatedTags": "相關標籤", + "topTags": "熱門標籤", + "topTagsTitle": "顯示你最常用標籤的雲圖", + "allTitle": "顯示所有標籤", + "min2Title": "顯示至少有 2 個書籤的標籤", + "min5Title": "顯示至少有 5 個書籤的標籤", + "min10Title": "顯示至少有 10 個書籤的標籤", + "min20Title": "顯示至少有 20 個書籤的標籤", + "hide": "隱藏", + "show": "顯示" + }, + "bulkEdit": { + "edit": "編輯", + "select": "選擇:", + "oneBookmarkSelected": "已選擇 1 個書籤", + "bookmarksSelected": "已選擇 {{count}} 個書籤", + "thisPage": "本頁", + "allPages": "所有頁", + "action": "操作:", + "markAsRead": "標記為已讀", + "unread": "未讀", + "addStars": "新增星標", + "removeStars": "移除星標", + "makePrivate": "設為私密", + "makePublic": "設為公開", + "removeTags": "移除標籤:", + "addTags": "新增標籤:", + "submitting": "提交中…", + "submit": "提交", + "destroyOne": "刪除 1 個書籤?", + "destroyMany": "刪除 {{count}} 個書籤?", + "publicOne": "將 1 個書籤設為公開?", + "publicMany": "將 {{count}} 個書籤設為公開?", + "pleaseAddSelection": "請選擇書籤", + "pleaseChooseAction": "請選擇操作或輸入標籤", + "tooManyTags": "當超過 20,000 個書籤受影響時,不能一次新增超過 10 個標籤", + "pageMismatch": "頁面書籤數量不符合", + "editedCount_one": "已編輯 {{editedCount}} 個書籤", + "editedCount_other": "已編輯 {{editedCount}} 個書籤", + "editedCountMismatch_one": "選擇數量為 {{selectionCount}},但由於符合的書籤資料已變更,實際編輯了 {{editedCount}} 個書籤", + "editedCountMismatch_other": "選擇數量為 {{selectionCount}},但由於符合的書籤資料已變更,實際編輯了 {{editedCount}} 個書籤" + }, + "docs": { + "title": "了解搜尋語法", + "pageFilters": "頁面篩選", + "pageFiltersDesc": "搜尋範圍會限制在目前選取的頁面篩選條件內。", + "soGiven": "因此,給定下列可能的頁面篩選條件", + "if": "如果", + "isCurrentlySelectedIncludes": "目前被選取,搜尋會包含", + "bookmarks": "書籤", + "isCurrentlySelectedOnly": "目前被選取,搜尋只會包含", + "bookmarksEtc": "書籤等等。", + "combineAnd": "組合搜尋(AND)", + "separateBySpace": "以空格分隔搜尋詞。", + "forExample": "例如,", + "combineOr": "組合搜尋(OR)", + "put": "將", + "betweenQuery": "放在每個搜尋查詢之間。", + "excludeWords": "從搜尋中排除字詞", + "inFrontWord": "放在想排除字詞的前面。", + "exactMatch": "搜尋完全相符的內容", + "putInQuotes": "將單字或片語放在引號內。", + "specificField": "針對特定欄位搜尋", + "inFrontTerm": "放在查詢詞前面,", + "where": "其中", + "isOneOfOptions": "是下列選項之一", + "bookmarkSearch": "書籤搜尋", + "noteSearch": "筆記搜尋", + "fieldHeader": "欄位", + "exampleHeader": "範例", + "complexExamples": "更複雜的範例", + "complexExample1Desc": "URL 中含有 \"youtube\",且標題為 \"haskell\" 或標題為 \"python\",並且在 2017/12/31 之後", + "complexExample2Desc": "標題中不含 \"hacker news\",且任意位置包含 \"news\"、\"cnn\"、\"npr\",或描述中包含 \"the guardian\"" + } +}
templates/default-layout.hamlet view
@@ -1,46 +1,45 @@-<div #content .layout-shell>- <header #banner .pv2.ph3.mh1>- <div .mw8.center.pb2.bb.br-0.bl-0.bt-0.b--dotted.thm-border-dotted>- <div #logo .fl.logo-div>- <span #espial_name .f4>espial- $maybe userName <- musername- <span>- (<a class="link" data-username="#{userName}" href="@{UserR (UserNameP userName)}">#{userName}</a>)- $maybe user <- muser- $if (userPrivacyLock user)- <a .dib.no-underline style="height:10px;width:10px" href="@{AccountSettingsR}" title="#{t "nav.privateProfileEnabled"}">🔒- - <!-- <div #timer>#{pageLoadTime} s -->- <div .top_menu.fr>-- <a .link href="#" #color-scheme-toggle>- <span .color-scheme-toggle-dark-label>- #{t "nav.darkMode"} - <span .color-scheme-toggle-light-label>- #{t "nav.lightMode"} - $maybe userName <- musername- <a .link href="@?{(AddViewR, [("next","back")])}">#{t "nav.addUrl"} - <a .link href="@{AddNoteViewR (UserNameP userName)}">#{t "nav.addNote"} - <a .link href="@{NotesR (UserNameP userName)}">#{t "nav.notes"} - <a .link href="@{AccountSettingsR}">#{t "nav.settings"} - <a .link.logout-btn href="@{AuthR LogoutR}">- #{t "nav.logout"}- $nothing- <a .link href="@{AuthR LoginR}">- #{t "nav.login"}- <div .cf>-- $maybe msg <- mmsg- <div .pv2.ph3.mh1>- <div .pa2.mw8.center.flex.items-center.justify-center.ba.layout-msg>- #{preEscapedToMarkup msg}-- <div .page-body>- ^{widget}-- <footer .view-delay>- <div .w-100.mw8.center>- <div .footer-links.fr.pv2.ph3.mh1.b>- $maybe sourceCodeUri <- msourceCodeUri- <a .link title="#{t "footer.sourceCode"}" href="#{ sourceCodeUri }" target=_blank></>- +<div #content .layout-shell> + <header #banner .pv2.ph3.mh1> + <div .mw8.center.pb2.bb.br-0.bl-0.bt-0.b--dotted.thm-border-dotted> + <div #logo .fl.logo-div> + <span #espial_name .f4>espial + $maybe userName <- musername + <span> + (<a class="link" data-username="#{userName}" href="@{UserR (UserNameP userName)}">#{userName}</a>) + $maybe user <- muser + <a #privacy-lock-icon .dib.no-underline :userPrivacyLock user:style="height:10px;width:10px" :not (userPrivacyLock user):style="height:10px;width:10px;display:none" href="@{AccountSettingsR}" title="#{t "nav.privateProfileEnabled"}">🔒 + + <!-- <div #timer>#{pageLoadTime} s --> + <div .top_menu.fr> + + <a .link href="#" #color-scheme-toggle> + <span .color-scheme-toggle-dark-label> + #{t "nav.darkMode"} + <span .color-scheme-toggle-light-label> + #{t "nav.lightMode"} + $maybe userName <- musername + <a .link href="@?{(AddViewR, [("next","back")])}">#{t "nav.addUrl"} + <a .link href="@{AddNoteViewR (UserNameP userName)}">#{t "nav.addNote"} + <a .link href="@{NotesR (UserNameP userName)}">#{t "nav.notes"} + <a .link href="@{AccountSettingsR}">#{t "nav.settings"} + <a .link.logout-btn href="@{AuthR LogoutR}"> + #{t "nav.logout"} + $nothing + <a .link href="@{AuthR LoginR}"> + #{t "nav.login"} + <div .cf> + + $maybe msg <- mmsg + <div .pv2.ph3.mh1> + <div .pa2.mw8.center.flex.items-center.justify-center.ba.layout-msg onclick="this.parentNode.style.display='none'" style="cursor:pointer"> + #{preEscapedToMarkup msg} + + <div .page-body> + ^{widget} + + <footer .view-delay> + <div .w-100.mw8.center> + <div .footer-links.fr.pv2.ph3.mh1.b> + $maybe sourceCodeUri <- msourceCodeUri + <a .link title="#{t "footer.sourceCode"}" href="#{ sourceCodeUri }" target=_blank></> +
templates/notes.hamlet view
@@ -1,36 +1,36 @@-<main #main_column .pv2.ph3.mh1.page-with-footer>- <div .w-100.mw8.center.page-with-footer-inner>- <div .page-main-content>- <div .fr.nt1.nowrap style="margin-bottom:.7rem">- <div .dib.v-mid.f6.pr2>- <a .link.rss- href="@{NotesFeedR unamep}">#{t "rss"}- <div .dib.v-mid>- ^{search}- <div .di>-- $maybe _ <- mquery- <span .db .mb3>#{t "notes.found"} #{bcount} #{t "notes.label"}- $nothing- <span .db .mb3>#{t "notes.youHave"} #{bcount} #{t "notes.label"}-- ^{pager}-- <div .cf>-- <div ##{renderEl} .mt3>-- <div .cf>-- <div .user_footer hidden>- ^{pager}-- $if (fromIntegral bcount >= limit) || (page > 1)- $maybe route <- mroute- <div .dib.ml5>- <span .silver.mr1>#{t "pagination.perPage"}- <a .link.pager-link :limit == 20:.nav-active href="@?{(route, [("count", "20")])}"‧>20</a> ‧ - <a .link.pager-link :limit == 40:.nav-active href="@?{(route, [("count", "40")])}"‧>40</a> ‧ - <a .link.pager-link :limit == 80:.nav-active href="@?{(route, [("count", "80")])}"‧>80</a> ‧ - <a .link.pager-link :limit == 120:.nav-active href="@?{(route, [("count", "120")])}"‧>120</a> ‧ - <a .link.pager-link :limit == 160:.nav-active href="@?{(route, [("count", "160")])}"‧>160</a>+<main #main_column .pv2.ph3.mh1.page-with-footer> + <div .w-100.mw8.center.page-with-footer-inner> + <div .page-main-content> + <div .fr.nt1.nowrap style="margin-bottom:.7rem"> + <div .dib.v-mid.f6.pr2> + <a .link.rss + href="@{NotesFeedR unamep}">#{t "rss"} + <div .dib.v-mid> + ^{search} + <div .di> + + $maybe _ <- mquery + <span .db .mb3>#{tc "notes.found" bcount} + $nothing + <span .db .mb3>#{tc "notes.youHave" bcount} + + ^{pager} + + <div .cf> + + <div ##{renderEl} .mt3> + + <div .cf> + + <div .user_footer hidden> + ^{pager} + + $if (fromIntegral bcount >= limit) || (page > 1) + $maybe route <- mroute + <div .dib.ml5> + <span .silver.mr1>#{t "pagination.perPage"} + <a .link.pager-link :limit == 20:.nav-active href="@?{(route, [("count", "20")])}"‧>20</a> ‧ + <a .link.pager-link :limit == 40:.nav-active href="@?{(route, [("count", "40")])}"‧>40</a> ‧ + <a .link.pager-link :limit == 80:.nav-active href="@?{(route, [("count", "80")])}"‧>80</a> ‧ + <a .link.pager-link :limit == 120:.nav-active href="@?{(route, [("count", "120")])}"‧>120</a> ‧ + <a .link.pager-link :limit == 160:.nav-active href="@?{(route, [("count", "160")])}"‧>160</a>
templates/user.hamlet view
@@ -1,74 +1,79 @@-$maybe route <- mroute- <main #main_column .pv2.ph3.mh1.page-with-footer>- <div .w-100.mw8.center.page-with-footer-inner>- <div .page-main-content>- <div .fr.nt1.nowrap style="margin-bottom:.7rem">- <div .dib.v-mid.f6.pr2>- $if sharedp == SharedPrivate- <a .link.rss href="@?{(UserFeedSharedR unamep SharedPrivate, catMaybes [mqueryp])}">#{t "rss"}- $elseif sharedp == SharedPublic- <a .link.rss href="@?{(UserFeedSharedR unamep SharedPublic, catMaybes [mqueryp])}">#{t "rss"}- $elseif filterp == FilterUnread- <a .link.rss href="@?{(UserFeedFilterR unamep FilterUnread, catMaybes [mqueryp])}">#{t "rss"}- $elseif filterp == FilterUntagged- <a .link.rss href="@?{(UserFeedFilterR unamep FilterUntagged, catMaybes [mqueryp])}">#{t "rss"}- $elseif filterp == FilterStarred- <a .link.rss href="@?{(UserFeedFilterR unamep FilterStarred, catMaybes [mqueryp])}">#{t "rss"}- $else- <a .link.rss href="@?{(UserFeedR unamep, catMaybes [mqueryp])}">#{t "rss"}- <div .dib.v-mid>- ^{search}- <div .di>- <div .fl.pr3.dib.mb2>- <b>- <a .link href="@{UserR unamep}">#{uname}- $forall tag <- pathtags- \ + #- <a .link href="@{UserTagsR unamep (TagsP [tag])}">#{tag}- <div .fl.pr3.dib.mb2>- <span .f7.silver>#{bcount}</span>- $if isowner- <div .fl.pr2.dib.mb2>- <a .dib.mb1.link.silver.hover-alt :isAll:.nav-active - href="@{UserR unamep}">#{t "filter.all"}- ‧ - <a .link.dib.mb1.silver.hover-alt :sharedp == SharedPrivate:.nav-active - href="@{UserSharedR unamep SharedPrivate}">#{t "filter.private"}- ‧ - <a .link.dib.mb1.silver.hover-alt :sharedp == SharedPublic:.nav-active - href="@{UserSharedR unamep SharedPublic}">#{t "filter.public"}- ‧ - <a .link.dib.mb1.silver.hover-alt :filterp == FilterUnread:.nav-active - href="@{UserFilterR unamep FilterUnread}">#{t "filter.unread"}- ‧ - <a .link.dib.mb1.silver.hover-alt :filterp == FilterUntagged:.nav-active - href="@{UserFilterR unamep FilterUntagged}">#{t "filter.untagged"}- ‧ - <a .link.dib.mb1.silver.hover-alt :filterp == FilterStarred:.nav-active - href="@{UserFilterR unamep FilterStarred}">#{t "filter.starred"}- - <div .cf>- - ^{pager}- - <div .cf>- - $if isowner- <div ##{tagCloudRenderEl} .tag-cloud-placeholder>-- <div ##{renderEl} .mt3>- - <div .cf>- - <div .user_footer.view-delay>- ^{pager}- - $if (fromIntegral bcount >= limit) || (page > 1)- <div .dib.ml5>- <span .silver.mr1>#{t "pagination.perPage"}- <a .link.pager-link :limit == 20:.nav-active href="@?{(route, catMaybes [Just ("count", "20"), mqueryp])}"‧>20</a> ‧ - <a .link.pager-link :limit == 40:.nav-active href="@?{(route, catMaybes [Just ("count", "40"), mqueryp])}"‧>40</a> ‧ - <a .link.pager-link :limit == 80:.nav-active href="@?{(route, catMaybes [Just ("count", "80"), mqueryp])}"‧>80</a> ‧ - <a .link.pager-link :limit == 120:.nav-active href="@?{(route, catMaybes [Just ("count", "120"), mqueryp])}"‧>120</a> ‧ - <a .link.pager-link :limit == 160:.nav-active href="@?{(route, catMaybes [Just ("count", "160"), mqueryp])}"‧>160</a>- +$maybe route <- mroute + <main #main_column .pv2.ph3.mh1.page-with-footer> + <div .w-100.mw8.center.page-with-footer-inner> + <div .page-main-content> + <div .fr.nt1.nowrap style="margin-bottom:.7rem"> + <div .dib.v-mid.f6.pr2> + $if sharedp == SharedPrivate + <a .link.rss href="@?{(UserFeedSharedR unamep SharedPrivate, catMaybes [mqueryp])}">#{t "rss"} + $elseif sharedp == SharedPublic + <a .link.rss href="@?{(UserFeedSharedR unamep SharedPublic, catMaybes [mqueryp])}">#{t "rss"} + $elseif filterp == FilterUnread + <a .link.rss href="@?{(UserFeedFilterR unamep FilterUnread, catMaybes [mqueryp])}">#{t "rss"} + $elseif filterp == FilterUntagged + <a .link.rss href="@?{(UserFeedFilterR unamep FilterUntagged, catMaybes [mqueryp])}">#{t "rss"} + $elseif filterp == FilterStarred + <a .link.rss href="@?{(UserFeedFilterR unamep FilterStarred, catMaybes [mqueryp])}">#{t "rss"} + $else + <a .link.rss href="@?{(UserFeedR unamep, catMaybes [mqueryp])}">#{t "rss"} + <div .dib.v-mid> + ^{search} + <div .di> + <div .fl.pr3.dib.mb2> + <b> + <a .link href="@{UserR unamep}">#{uname} + $forall tag <- pathtags + \ + # + <a .link href="@{UserTagsR unamep (TagsP [tag])}">#{tag} + <div .fl.pr3.dib.mb2> + <span .f7.silver>#{bcount}</span> + $if isowner + <div .fl.pr2.dib.mb2> + <a .dib.mb1.link.silver.hover-alt :isAll:.nav-active + href="@{UserR unamep}">#{t "filter.all"} + ‧ + <a .link.dib.mb1.silver.hover-alt :sharedp == SharedPrivate:.nav-active + href="@{UserSharedR unamep SharedPrivate}">#{t "filter.private"} + ‧ + <a .link.dib.mb1.silver.hover-alt :sharedp == SharedPublic:.nav-active + href="@{UserSharedR unamep SharedPublic}">#{t "filter.public"} + ‧ + <a .link.dib.mb1.silver.hover-alt :filterp == FilterUnread:.nav-active + href="@{UserFilterR unamep FilterUnread}">#{t "filter.unread"} + ‧ + <a .link.dib.mb1.silver.hover-alt :filterp == FilterUntagged:.nav-active + href="@{UserFilterR unamep FilterUntagged}">#{t "filter.untagged"} + ‧ + <a .link.dib.mb1.silver.hover-alt :filterp == FilterStarred:.nav-active + href="@{UserFilterR unamep FilterStarred}">#{t "filter.starred"} + + <div .cf> + + <div .flex.items-center> + ^{pager} + $if isowner + <span .f6.pl2> + <a .link.silver.hover-alt #bulk-edit-toggle href="#">#{t "bulkEdit.edit"} + + $if isowner + <div #bulkEditRenderEl> + + $if showTagCloud + <div ##{tagCloudRenderEl} .tag-cloud-placeholder> + + <div ##{renderEl} .mt3> + + <div .cf> + + <div .user_footer.view-delay> + ^{pager} + + $if (fromIntegral bcount >= limit) || (page > 1) + <div .dib.ml5> + <span .silver.mr1>#{t "pagination.perPage"} + <a .link.pager-link :limit == 20:.nav-active href="@?{(route, catMaybes [Just ("count", "20"), mqueryp])}"‧>20</a> ‧ + <a .link.pager-link :limit == 40:.nav-active href="@?{(route, catMaybes [Just ("count", "40"), mqueryp])}"‧>40</a> ‧ + <a .link.pager-link :limit == 80:.nav-active href="@?{(route, catMaybes [Just ("count", "80"), mqueryp])}"‧>80</a> ‧ + <a .link.pager-link :limit == 120:.nav-active href="@?{(route, catMaybes [Just ("count", "120"), mqueryp])}"‧>120</a> ‧ + <a .link.pager-link :limit == 160:.nav-active href="@?{(route, catMaybes [Just ("count", "160"), mqueryp])}"‧>160</a> +
+ test/Model/BookmarksBulkEditSpec.hs view
@@ -0,0 +1,170 @@+{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE NoImplicitPrelude #-} + +module Model.BookmarksBulkEditSpec (spec) where + +import Database.Persist.Sql (fromSqlKey) +import Model.Custom (hashPassword, mkBmSlug) +import TestImport +import Types (DB) + +t0 :: UTCTime +t0 = UTCTime (fromGregorian 2024 1 1) 0 + +createTestUser :: DB (Key User) +createTestUser = do + pwHash <- liftIO $ hashPassword "pass" + insert $ User "testuser" pwHash Nothing False False True False False Nothing + +createBm :: Key User -> Text -> DB (Key Bookmark) +createBm uid href = do + slug <- liftIO mkBmSlug + insert $ Bookmark uid slug href "desc" "" t0 False False False Nothing + +createUnreadBm :: Key User -> Text -> DB (Key Bookmark) +createUnreadBm uid href = do + slug <- liftIO mkBmSlug + insert $ Bookmark uid slug href "desc" "" t0 False True False Nothing + +tagBm :: Key User -> Key Bookmark -> Text -> Int -> DB () +tagBm uid bid tag seq' = insert_ $ BookmarkTag uid tag bid seq' + +getBookmarkTags :: Key Bookmark -> DB [Text] +getBookmarkTags bid = do + tags <- selectList [BookmarkTagBookmarkId ==. bid] [Asc BookmarkTagSeq] + return $ map (bookmarkTagTag . entityVal) tags + +mkBulkEditForm :: Key User -> Int -> [Text] -> FilterP -> Text -> Text -> Maybe BulkAction -> [Key Bookmark] -> BulkEditForm +mkBulkEditForm _uid cnt filterTags filterP addTags removeTags action bids = + BulkEditForm + { _beSelection = + if null bids + then BulkSelectionAll filterP SharedAll filterTags Nothing + else BulkSelectionPage (map fromSqlKey bids), + _beAction = action, + _beAddTags = addTags, + _beRemoveTags = removeTags, + _beSelectionCount = cnt + } + +spec :: Spec +spec = withApp $ do + describe "bookmarksBulkEdit" $ do + describe "BulkSelectionAll - tag stability" $ do + it "remove+add same filter tag re-adds to the original bookmark set" $ do + (uid, bid1, bid2) <- runDB $ do + uid <- createTestUser + bid1 <- createBm uid "https://a.com" + bid2 <- createBm uid "https://b.com" + tagBm uid bid1 "tag1" 1 + tagBm uid bid2 "tag1" 1 + return (uid, bid1, bid2) + let form = mkBulkEditForm uid 2 ["tag1"] FilterAll "tag1" "tag1" Nothing [] + result <- runDB $ bookmarksBulkEdit uid form + liftIO $ result `shouldBe` Right 2 + tags1 <- runDB $ getBookmarkTags bid1 + tags2 <- runDB $ getBookmarkTags bid2 + liftIO $ tags1 `shouldBe` ["tag1"] + liftIO $ tags2 `shouldBe` ["tag1"] + + it "remove filter tag and add different tag operates on the original set" $ do + (uid, bid1, bid2) <- runDB $ do + uid <- createTestUser + bid1 <- createBm uid "https://a.com" + bid2 <- createBm uid "https://b.com" + tagBm uid bid1 "tag1" 1 + tagBm uid bid2 "tag1" 1 + return (uid, bid1, bid2) + let form = mkBulkEditForm uid 2 ["tag1"] FilterAll "tag2" "tag1" Nothing [] + result <- runDB $ bookmarksBulkEdit uid form + liftIO $ result `shouldBe` Right 2 + tags1 <- runDB $ getBookmarkTags bid1 + tags2 <- runDB $ getBookmarkTags bid2 + liftIO $ tags1 `shouldBe` ["tag2"] + liftIO $ tags2 `shouldBe` ["tag2"] + + it "action that changes the filter does not shrink the tag operation set" $ do + (uid, bid1, bid2) <- runDB $ do + uid <- createTestUser + bid1 <- createUnreadBm uid "https://a.com" + bid2 <- createUnreadBm uid "https://b.com" + return (uid, bid1, bid2) + let form = mkBulkEditForm uid 2 [] FilterUnread "tag1" "" (Just BulkActionRead) [] + result <- runDB $ bookmarksBulkEdit uid form + liftIO $ result `shouldBe` Right 2 + mBm1 <- runDB $ selectFirst [BookmarkId ==. bid1] [] + mBm2 <- runDB $ selectFirst [BookmarkId ==. bid2] [] + liftIO $ fmap (bookmarkToRead . entityVal) mBm1 `shouldBe` Just False + liftIO $ fmap (bookmarkToRead . entityVal) mBm2 `shouldBe` Just False + tags1 <- runDB $ getBookmarkTags bid1 + tags2 <- runDB $ getBookmarkTags bid2 + liftIO $ tags1 `shouldBe` ["tag1"] + liftIO $ tags2 `shouldBe` ["tag1"] + + it "add only does not duplicate an already-present tag" $ do + (uid, bid1) <- runDB $ do + uid <- createTestUser + bid1 <- createBm uid "https://a.com" + tagBm uid bid1 "tag1" 1 + return (uid, bid1) + let form = mkBulkEditForm uid 1 [] FilterAll "tag1 tag2" "" Nothing [] + result <- runDB $ bookmarksBulkEdit uid form + liftIO $ result `shouldBe` Right 1 + tags <- runDB $ getBookmarkTags bid1 + liftIO $ tags `shouldBe` ["tag1", "tag2"] + + it "remove treats _ and % in tag names as literals, not SQL wildcards" $ do + (uid, bid1, bid2) <- runDB $ do + uid <- createTestUser + bid1 <- createBm uid "https://a.com" + bid2 <- createBm uid "https://b.com" + tagBm uid bid1 "foo_bar" 1 + tagBm uid bid1 "fooXbar" 2 + tagBm uid bid2 "fooXbar" 1 + return (uid, bid1, bid2) + let form = mkBulkEditForm uid 2 [] FilterAll "" "foo_bar" Nothing [] + result <- runDB $ bookmarksBulkEdit uid form + liftIO $ result `shouldBe` Right 2 + tags1 <- runDB $ getBookmarkTags bid1 + tags2 <- runDB $ getBookmarkTags bid2 + liftIO $ tags1 `shouldBe` ["fooXbar"] + liftIO $ tags2 `shouldBe` ["fooXbar"] + + it "remove is case-insensitive when stored tag casing differs from input" $ do + (uid, bid1) <- runDB $ do + uid <- createTestUser + bid1 <- createBm uid "https://a.com" + tagBm uid bid1 "Tag1" 1 + return (uid, bid1) + let form = mkBulkEditForm uid 1 [] FilterAll "" "tag1" Nothing [] + result <- runDB $ bookmarksBulkEdit uid form + liftIO $ result `shouldBe` Right 1 + tags <- runDB $ getBookmarkTags bid1 + liftIO $ tags `shouldBe` [] + + describe "BulkSelectionPage - tag stability" $ do + it "remove+add same tag via page selection re-adds correctly" $ do + (uid, bid1, bid2) <- runDB $ do + uid <- createTestUser + bid1 <- createBm uid "https://a.com" + bid2 <- createBm uid "https://b.com" + tagBm uid bid1 "tag1" 1 + tagBm uid bid2 "tag1" 1 + return (uid, bid1, bid2) + let form = mkBulkEditForm uid 2 ["tag1"] FilterAll "tag1" "tag1" Nothing [bid1, bid2] + result <- runDB $ bookmarksBulkEdit uid form + liftIO $ result `shouldBe` Right 2 + tags1 <- runDB $ getBookmarkTags bid1 + tags2 <- runDB $ getBookmarkTags bid2 + liftIO $ tags1 `shouldBe` ["tag1"] + liftIO $ tags2 `shouldBe` ["tag1"] + + it "page count mismatch returns Left BulkEditErrorPageMismatch" $ do + (uid, bid1, bid2) <- runDB $ do + uid <- createTestUser + bid1 <- createBm uid "https://a.com" + bid2 <- createBm uid "https://b.com" + return (uid, bid1, bid2) + let form = mkBulkEditForm uid 1 [] FilterAll "" "" Nothing [bid1, bid2] + result <- runDB $ bookmarksBulkEdit uid form + liftIO $ result `shouldBe` Left BulkEditErrorPageMismatch
+ test/Model/BookmarksPagingSpec.hs view
@@ -0,0 +1,279 @@+{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE NoImplicitPrelude #-} + +module Model.BookmarksPagingSpec (spec) where + +import Data.Time (addUTCTime) +import Model.Custom (hashPassword, mkBmSlug) +import TestImport +import Types (DB) + +t0 :: UTCTime +t0 = UTCTime (fromGregorian 2024 1 1) 0 + +createTestUser :: DB (Key User) +createTestUser = do + pwHash <- liftIO $ hashPassword "pass" + insert $ User "testuser" pwHash Nothing False False True False False Nothing + +createBmAt :: Key User -> Text -> UTCTime -> DB (Key Bookmark) +createBmAt uid href t = do + slug <- liftIO mkBmSlug + insert $ Bookmark uid slug href "desc" "" t False False False Nothing + +queryWithCursor :: Key User -> Maybe BookmarkPagingCursorTime -> DB [Key Bookmark] +queryWithCursor uid mcursor = do + (_, rows, _, _) <- bookmarksTagsQuery uid True SharedAll FilterAll [] Nothing mcursor 100 1 + return $ map (entityKey . fst) rows + +queryFlags :: Key User -> Maybe BookmarkPagingCursorTime -> Limit -> DB (Bool, Bool) +queryFlags uid mcursor lim = do + (_, _, hasEarlier, hasLater) <- bookmarksTagsQuery uid True SharedAll FilterAll [] Nothing mcursor lim 1 + return (hasEarlier, hasLater) + +spec :: Spec +spec = withApp $ do + describe "bookmarksTagsQuery paging cursor" $ do + + -- ─── PagingCursorBefore (lt) ─────────────────────────────────────────── + + describe "PagingCursorBefore (lt boundary)" $ do + it "excludes a bookmark at exactly the cursor time" $ do + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBmAt uid "https://a.com" t0 + return (uid, bid) + bids <- runDB $ queryWithCursor uid (Just (PagingCursorBefore t0)) + liftIO $ bids `shouldNotContain` [bid] + + it "includes a bookmark strictly before the cursor time" $ do + let tBefore = t0 + tCursor = addUTCTime 1 t0 + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBmAt uid "https://a.com" tBefore + return (uid, bid) + bids <- runDB $ queryWithCursor uid (Just (PagingCursorBefore tCursor)) + liftIO $ bids `shouldContain` [bid] + + it "excludes a bookmark strictly after the cursor time" $ do + let tAfter = addUTCTime 1 t0 + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBmAt uid "https://a.com" tAfter + return (uid, bid) + bids <- runDB $ queryWithCursor uid (Just (PagingCursorBefore t0)) + liftIO $ bids `shouldNotContain` [bid] + + -- ─── PagingCursorAfter (gt) ──────────────────────────────────────────── + + describe "PagingCursorAfter (gt boundary)" $ do + it "excludes a bookmark at exactly the cursor time" $ do + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBmAt uid "https://a.com" t0 + return (uid, bid) + bids <- runDB $ queryWithCursor uid (Just (PagingCursorAfter t0)) + liftIO $ bids `shouldNotContain` [bid] + + it "includes a bookmark strictly after the cursor time" $ do + let tAfter = addUTCTime 1 t0 + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBmAt uid "https://a.com" tAfter + return (uid, bid) + bids <- runDB $ queryWithCursor uid (Just (PagingCursorAfter t0)) + liftIO $ bids `shouldContain` [bid] + + it "excludes a bookmark strictly before the cursor time" $ do + let tCursor = addUTCTime 10 t0 + tBefore = addUTCTime 9 t0 + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBmAt uid "https://a.com" tBefore + return (uid, bid) + bids <- runDB $ queryWithCursor uid (Just (PagingCursorAfter tCursor)) + liftIO $ bids `shouldNotContain` [bid] + + -- ─── Fractional second cursor vs whole-second bookmark ───────────────── + + describe "fractional-second cursor vs whole-second bookmark" $ do + it "PagingCursorBefore: includes bookmark at whole second below a fractional cursor" $ do + -- cursor at 00:00:01.5, bookmark at 00:00:01 → bookmark is before cursor + let tCursor = UTCTime (fromGregorian 2024 1 1) 1.5 + tBm = UTCTime (fromGregorian 2024 1 1) 1 + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBmAt uid "https://a.com" tBm + return (uid, bid) + bids <- runDB $ queryWithCursor uid (Just (PagingCursorBefore tCursor)) + liftIO $ bids `shouldContain` [bid] + + it "PagingCursorBefore: excludes bookmark at whole second above a fractional cursor" $ do + -- cursor at 00:00:00.5, bookmark at 00:00:01 → bookmark is after cursor + let tCursor = UTCTime (fromGregorian 2024 1 1) 0.5 + tBm = UTCTime (fromGregorian 2024 1 1) 1 + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBmAt uid "https://a.com" tBm + return (uid, bid) + bids <- runDB $ queryWithCursor uid (Just (PagingCursorBefore tCursor)) + liftIO $ bids `shouldNotContain` [bid] + + it "PagingCursorAfter: includes bookmark at whole second above a fractional cursor" $ do + -- cursor at 00:00:00.5, bookmark at 00:00:01 → bookmark is after cursor + let tCursor = UTCTime (fromGregorian 2024 1 1) 0.5 + tBm = UTCTime (fromGregorian 2024 1 1) 1 + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBmAt uid "https://a.com" tBm + return (uid, bid) + bids <- runDB $ queryWithCursor uid (Just (PagingCursorAfter tCursor)) + liftIO $ bids `shouldContain` [bid] + + it "PagingCursorAfter: excludes bookmark at whole second below a fractional cursor" $ do + -- cursor at 00:00:01.5, bookmark at 00:00:01 → bookmark is before cursor + let tCursor = UTCTime (fromGregorian 2024 1 1) 1.5 + tBm = UTCTime (fromGregorian 2024 1 1) 1 + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBmAt uid "https://a.com" tBm + return (uid, bid) + bids <- runDB $ queryWithCursor uid (Just (PagingCursorAfter tCursor)) + liftIO $ bids `shouldNotContain` [bid] + + -- ─── Whole-second cursor vs fractional-second bookmark ───────────────── + + describe "whole-second cursor vs fractional-second bookmark" $ do + it "PagingCursorBefore: excludes fractional-second bookmark at the cursor time" $ do + -- cursor at 00:00:01, bookmark at 00:00:01.0 (same instant, fractional form) + let tCursor = UTCTime (fromGregorian 2024 1 1) 1 + tBm = UTCTime (fromGregorian 2024 1 1) 1 + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBmAt uid "https://a.com" tBm + return (uid, bid) + bids <- runDB $ queryWithCursor uid (Just (PagingCursorBefore tCursor)) + liftIO $ bids `shouldNotContain` [bid] + + it "PagingCursorBefore: includes bookmark at fractional second just before a whole-second cursor" $ do + -- cursor at 00:00:01, bookmark at 00:00:00.999 → bookmark is just before + let tCursor = UTCTime (fromGregorian 2024 1 1) 1 + tBm = UTCTime (fromGregorian 2024 1 1) 0.999 + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBmAt uid "https://a.com" tBm + return (uid, bid) + bids <- runDB $ queryWithCursor uid (Just (PagingCursorBefore tCursor)) + liftIO $ bids `shouldContain` [bid] + + it "PagingCursorBefore: excludes bookmark at fractional second just after a whole-second cursor" $ do + -- cursor at 00:00:01, bookmark at 00:00:01.001 → bookmark is just after + let tCursor = UTCTime (fromGregorian 2024 1 1) 1 + tBm = UTCTime (fromGregorian 2024 1 1) 1.001 + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBmAt uid "https://a.com" tBm + return (uid, bid) + bids <- runDB $ queryWithCursor uid (Just (PagingCursorBefore tCursor)) + liftIO $ bids `shouldNotContain` [bid] + + it "PagingCursorAfter: excludes fractional-second bookmark at the cursor time" $ do + let tCursor = UTCTime (fromGregorian 2024 1 1) 1 + tBm = UTCTime (fromGregorian 2024 1 1) 1 + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBmAt uid "https://a.com" tBm + return (uid, bid) + bids <- runDB $ queryWithCursor uid (Just (PagingCursorAfter tCursor)) + liftIO $ bids `shouldNotContain` [bid] + + it "PagingCursorAfter: includes bookmark at fractional second just after a whole-second cursor" $ do + -- cursor at 00:00:01, bookmark at 00:00:01.001 → bookmark is just after + let tCursor = UTCTime (fromGregorian 2024 1 1) 1 + tBm = UTCTime (fromGregorian 2024 1 1) 1.001 + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBmAt uid "https://a.com" tBm + return (uid, bid) + bids <- runDB $ queryWithCursor uid (Just (PagingCursorAfter tCursor)) + liftIO $ bids `shouldContain` [bid] + + it "PagingCursorAfter: excludes bookmark at fractional second just before a whole-second cursor" $ do + -- cursor at 00:00:01, bookmark at 00:00:00.999 → bookmark is just before + let tCursor = UTCTime (fromGregorian 2024 1 1) 1 + tBm = UTCTime (fromGregorian 2024 1 1) 0.999 + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBmAt uid "https://a.com" tBm + return (uid, bid) + bids <- runDB $ queryWithCursor uid (Just (PagingCursorAfter tCursor)) + liftIO $ bids `shouldNotContain` [bid] + + -- ─── hasEarlier / hasLater navigation flags ──────────────────────────── + + describe "hasEarlier and hasLater navigation flags" $ do + it "no cursor, all rows fit: hasEarlier=False, hasLater=False" $ do + uid <- runDB $ do + uid <- createTestUser + _ <- createBmAt uid "https://a.com" t0 + return uid + (hasEarlier, hasLater) <- runDB $ queryFlags uid Nothing 100 + liftIO $ hasEarlier `shouldBe` False + liftIO $ hasLater `shouldBe` False + + it "no cursor, rows exceed limit: hasEarlier=True, hasLater=False" $ do + uid <- runDB $ do + uid <- createTestUser + mapM_ + (\n -> void $ createBmAt uid ("https://" <> tshow n <> ".com") (addUTCTime (fromIntegral (n :: Int)) t0)) + [1 .. 3] + return uid + (hasEarlier, hasLater) <- runDB $ queryFlags uid Nothing 2 + liftIO $ hasEarlier `shouldBe` True + liftIO $ hasLater `shouldBe` False + + it "PagingCursorBefore with results, all fit: hasLater=True, hasEarlier=False" $ do + -- tBefore is at t0, cursor is at t0+10; bookmark is before cursor + uid <- runDB $ do + uid <- createTestUser + _ <- createBmAt uid "https://before.com" t0 + return uid + let tCursor = addUTCTime 10 t0 + (hasEarlier, hasLater) <- runDB $ queryFlags uid (Just (PagingCursorBefore tCursor)) 100 + liftIO $ hasEarlier `shouldBe` False + liftIO $ hasLater `shouldBe` True + + it "PagingCursorBefore with rows exceeding limit: hasEarlier=True, hasLater=True" $ do + uid <- runDB $ do + uid <- createTestUser + mapM_ + (\n -> void $ createBmAt uid ("https://" <> tshow n <> ".com") (addUTCTime (fromIntegral (n :: Int)) t0)) + [1 .. 3] + return uid + -- cursor is past all 3 bookmarks; fetch only 2 of the 3 + let tCursor = addUTCTime 10 t0 + (hasEarlier, hasLater) <- runDB $ queryFlags uid (Just (PagingCursorBefore tCursor)) 2 + liftIO $ hasEarlier `shouldBe` True + liftIO $ hasLater `shouldBe` True + + it "PagingCursorAfter with results, all fit: hasEarlier=True, hasLater=False" $ do + uid <- runDB $ do + uid <- createTestUser + _ <- createBmAt uid "https://after.com" (addUTCTime 10 t0) + return uid + (hasEarlier, hasLater) <- runDB $ queryFlags uid (Just (PagingCursorAfter t0)) 100 + liftIO $ hasEarlier `shouldBe` True + liftIO $ hasLater `shouldBe` False + + it "PagingCursorAfter with rows exceeding limit: hasEarlier=True, hasLater=True" $ do + uid <- runDB $ do + uid <- createTestUser + mapM_ + (\n -> void $ createBmAt uid ("https://" <> tshow n <> ".com") (addUTCTime (fromIntegral (n :: Int)) t0)) + [1 .. 3] + return uid + -- cursor is before all 3 bookmarks; fetch only 2 of the 3 + (hasEarlier, hasLater) <- runDB $ queryFlags uid (Just (PagingCursorAfter (addUTCTime (-1) t0))) 2 + liftIO $ hasEarlier `shouldBe` True + liftIO $ hasLater `shouldBe` True
+ test/Model/BookmarksQuerySpec.hs view
@@ -0,0 +1,171 @@+{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE NoImplicitPrelude #-} + +module Model.BookmarksQuerySpec (spec) where + +import Model.Custom (hashPassword, mkBmSlug) +import TestImport +import Types (DB) + +t0 :: UTCTime +t0 = UTCTime (fromGregorian 2024 1 1) 0 + +createTestUser :: DB (Key User) +createTestUser = do + pwHash <- liftIO $ hashPassword "pass" + insert $ User "testuser" pwHash Nothing False False True False False Nothing + +createBm :: Key User -> Text -> DB (Key Bookmark) +createBm uid href = do + slug <- liftIO mkBmSlug + insert $ Bookmark uid slug href "desc" "" t0 False False False Nothing + +createSharedBm :: Key User -> Text -> DB (Key Bookmark) +createSharedBm uid href = do + slug <- liftIO mkBmSlug + insert $ Bookmark uid slug href "desc" "" t0 True False False Nothing + +tagBm :: Key User -> Key Bookmark -> Text -> Int -> DB () +tagBm uid bid tag seq' = insert_ $ BookmarkTag uid tag bid seq' + +queryBids :: Key User -> [Text] -> Maybe Text -> Bool -> DB [Key Bookmark] +queryBids uid tags mq isowner = do + (_, rows, _, _) <- bookmarksTagsQuery uid isowner SharedAll FilterAll tags mq Nothing 100 1 + return $ map (entityKey . fst) rows + +spec :: Spec +spec = withApp $ do + -- bookmarkWhereClause line 399: `like val tag` for FilterTags + describe "bookmarkWhereClause tag filter" $ do + it "treats _ as a literal, not a wildcard" $ do + (uid, bid1, _) <- runDB $ do + uid <- createTestUser + bid1 <- createBm uid "https://a.com" + bid2 <- createBm uid "https://b.com" + tagBm uid bid1 "foo_bar" 1 + tagBm uid bid2 "fooXbar" 1 + return (uid, bid1, bid2) + bids <- runDB $ queryBids uid ["foo_bar"] Nothing True + liftIO $ bids `shouldBe` [bid1] + + it "treats % as a literal, not a wildcard" $ do + (uid, bid1, _) <- runDB $ do + uid <- createTestUser + bid1 <- createBm uid "https://a.com" + bid2 <- createBm uid "https://b.com" + tagBm uid bid1 "100%" 1 + tagBm uid bid2 "100x" 1 + return (uid, bid1, bid2) + bids <- runDB $ queryBids uid ["100%"] Nothing True + liftIO $ bids `shouldBe` [bid1] + + -- intentional: .% is used to identify private tags (starts-with-dot pattern) + it "non-owner queries exclude tags starting with . from the display string" $ do + (uid, _) <- runDB $ do + uid <- createTestUser + bid <- createBm uid "https://a.com" + tagBm uid bid ".secret" 1 + tagBm uid bid "public" 2 + return (uid, bid) + (_, rows, _, _) <- runDB $ bookmarksTagsQuery uid False SharedAll FilterAll [] Nothing Nothing 100 1 + let mTagStr = snd =<< listToMaybe rows + liftIO $ mTagStr `shouldBe` Just "public" + + -- bookmarkLikeExpr lines 432/446: `like wild term` for tag search + describe "bookmarkLikeExpr tag search" $ do + it "tags:foo_bar treats _ as a literal, not a wildcard" $ do + (uid, bid1, _) <- runDB $ do + uid <- createTestUser + bid1 <- createBm uid "https://a.com" + bid2 <- createBm uid "https://b.com" + tagBm uid bid1 "foo_bar" 1 + tagBm uid bid2 "fooXbar" 1 + return (uid, bid1, bid2) + bids <- runDB $ queryBids uid [] (Just "tags:foo_bar") True + liftIO $ bids `shouldBe` [bid1] + + it "tags:100% treats % as a literal, not a wildcard" $ do + (uid, bid1, _) <- runDB $ do + uid <- createTestUser + bid1 <- createBm uid "https://a.com" + bid2 <- createBm uid "https://b.com" + tagBm uid bid1 "100%" 1 + tagBm uid bid2 "100x" 1 + return (uid, bid1, bid2) + bids <- runDB $ queryBids uid [] (Just "tags:100%") True + liftIO $ bids `shouldBe` [bid1] + + -- relatedTagWhere line 911: `like val tag` used in tagCountRelated + describe "tagCountRelated" $ do + it "treats _ as a literal when matching co-tagged bookmarks" $ do + uid <- runDB $ do + uid <- createTestUser + bid1 <- createBm uid "https://a.com" + bid2 <- createBm uid "https://b.com" + tagBm uid bid1 "foo_bar" 1 + tagBm uid bid1 "related" 2 + tagBm uid bid2 "fooXbar" 1 + tagBm uid bid2 "unrelated" 2 + return uid + related <- runDB $ tagCountRelated uid ["foo_bar"] True + let tagNames = map fst related + liftIO $ tagNames `shouldContain` ["related"] + liftIO $ tagNames `shouldNotContain` ["unrelated"] + + it "treats % as a literal when matching co-tagged bookmarks" $ do + uid <- runDB $ do + uid <- createTestUser + bid1 <- createBm uid "https://a.com" + bid2 <- createBm uid "https://b.com" + tagBm uid bid1 "100%" 1 + tagBm uid bid1 "related" 2 + tagBm uid bid2 "100x" 1 + tagBm uid bid2 "unrelated" 2 + return uid + related <- runDB $ tagCountRelated uid ["100%"] True + let tagNames = map fst related + liftIO $ tagNames `shouldContain` ["related"] + liftIO $ tagNames `shouldNotContain` ["unrelated"] + + -- These back Handler.User.postUserPublicTagCloudR, which calls tagCount* + -- with isOwner=False directly for anonymous visitors. A bug here leaks + -- private tags or private-bookmark-only tags to the public. + describe "tagCountTop privacy (isOwner=False)" $ do + it "excludes tags starting with . on a shared bookmark" $ do + uid <- runDB $ do + uid <- createTestUser + bid <- createSharedBm uid "https://a.com" + tagBm uid bid ".secret" 1 + tagBm uid bid "public" 2 + return uid + counts <- runDB $ tagCountTop uid False + let tagNames = map fst counts + liftIO $ tagNames `shouldNotContain` [".secret"] + liftIO $ tagNames `shouldContain` ["public"] + + it "excludes tags that only exist on a private (non-shared) bookmark" $ do + uid <- runDB $ do + uid <- createTestUser + bid <- createBm uid "https://a.com" -- createBm makes shared=False + tagBm uid bid "onlyprivate" 1 + return uid + nonOwnerCounts <- runDB $ tagCountTop uid False + liftIO $ map fst nonOwnerCounts `shouldNotContain` ["onlyprivate"] + ownerCounts <- runDB $ tagCountTop uid True + liftIO $ map fst ownerCounts `shouldContain` ["onlyprivate"] + + describe "tagCountRelated privacy (isOwner=False)" $ do + it "ignores a private tag as a relatedness filter rather than using it to narrow results" $ do + uid <- runDB $ do + uid <- createTestUser + bid1 <- createSharedBm uid "https://a.com" + bid2 <- createSharedBm uid "https://b.com" + tagBm uid bid1 ".secret" 1 + tagBm uid bid1 "shared_tag" 2 + tagBm uid bid2 "shared_tag" 1 + return uid + -- If ".secret" were used as a co-tag filter, only bid1 would match, + -- giving shared_tag a count of 1. Since it's stripped for non-owners, + -- both bookmarks count, giving shared_tag a count of 2. + related <- runDB $ tagCountRelated uid [".secret"] False + liftIO $ related `shouldBe` [("shared_tag", 2)]
+ test/Model/BookmarksSearchSpec.hs view
@@ -0,0 +1,451 @@+{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE NoImplicitPrelude #-} + +-- Tests for the bookmark search query syntax documented in docs-search.hamlet. +-- +-- Field map (DB name → UI name → search prefix): +-- BookmarkHref url url:/u: +-- BookmarkDescription title title:/ti: +-- BookmarkExtended notes description:/d: +-- BookmarkTag tags tags:/t: +-- BookmarkTime time after:/a: before:/b: + +module Model.BookmarksSearchSpec (spec) where + +import Model.Custom (hashPassword, mkBmSlug) +import TestImport +import Types (DB) + +-- ─── Fixtures ────────────────────────────────────────────────────────────── + +t2019 :: UTCTime +t2019 = UTCTime (fromGregorian 2019 1 1) 0 + +createTestUser :: DB (Key User) +createTestUser = do + pwHash <- liftIO $ hashPassword "pass" + insert $ User "testuser" pwHash Nothing False False True False False Nothing + +-- href=url, description=title, extended=notes +createBm :: Key User -> Text -> Text -> Text -> UTCTime -> DB (Key Bookmark) +createBm uid href title notes time = do + slug <- liftIO mkBmSlug + insert $ Bookmark uid slug href title notes time False False False Nothing + +tagBm :: Key User -> Key Bookmark -> Text -> Int -> DB () +tagBm uid bid tag seq' = insert_ $ BookmarkTag uid tag bid seq' + +search :: Key User -> Text -> DB [Key Bookmark] +search uid q = do + (_, rows, _, _) <- bookmarksTagsQuery uid True SharedAll FilterAll [] (Just q) Nothing 100 1 + return $ map (entityKey . fst) rows + +-- ─── Spec ────────────────────────────────────────────────────────────────── + +spec :: Spec +spec = withApp $ do + + -- ─── Default (all-field) search ────────────────────────────────────────── + + describe "default (all-field) search" $ do + it "matches a term found in the URL" $ do + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBm uid "https://youtube.com/watch" "" "" t2019 + return (uid, bid) + bids <- runDB $ search uid "youtube" + liftIO $ bids `shouldContain` [bid] + + it "matches a term found in the title (description field)" $ do + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBm uid "https://a.com" "Haskell tutorial" "" t2019 + return (uid, bid) + bids <- runDB $ search uid "Haskell" + liftIO $ bids `shouldContain` [bid] + + it "matches a term found in the notes (extended field)" $ do + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBm uid "https://a.com" "" "great introduction to monads" t2019 + return (uid, bid) + bids <- runDB $ search uid "monads" + liftIO $ bids `shouldContain` [bid] + + it "matches a term found in a tag" $ do + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBm uid "https://a.com" "" "" t2019 + tagBm uid bid "programming" 1 + return (uid, bid) + bids <- runDB $ search uid "programming" + liftIO $ bids `shouldContain` [bid] + + it "does not return a bookmark when the term matches nothing" $ do + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBm uid "https://a.com" "title" "notes" t2019 + return (uid, bid) + bids <- runDB $ search uid "zzznomatch" + liftIO $ bids `shouldNotContain` [bid] + + -- ─── url: / u: ─────────────────────────────────────────────────────────── + + describe "url: field prefix" $ do + it "url: matches a bookmark whose href contains the term" $ do + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBm uid "https://youtube.com/watch" "" "" t2019 + return (uid, bid) + bids <- runDB $ search uid "url:youtube" + liftIO $ bids `shouldContain` [bid] + + it "url: does not match a bookmark where the term is only in the title" $ do + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBm uid "https://a.com" "youtube tips" "" t2019 + return (uid, bid) + bids <- runDB $ search uid "url:youtube" + liftIO $ bids `shouldNotContain` [bid] + + it "u: is an alias for url:" $ do + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBm uid "https://youtube.com/watch" "" "" t2019 + return (uid, bid) + bids <- runDB $ search uid "u:youtube" + liftIO $ bids `shouldContain` [bid] + + -- ─── title: / ti: ──────────────────────────────────────────────────────── + + describe "title: field prefix" $ do + it "title: matches a bookmark whose title contains the term" $ do + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBm uid "https://a.com" "Haskell tutorial" "" t2019 + return (uid, bid) + bids <- runDB $ search uid "title:Haskell" + liftIO $ bids `shouldContain` [bid] + + it "title: does not match a bookmark where the term is only in the URL" $ do + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBm uid "https://haskell.org" "" "" t2019 + return (uid, bid) + bids <- runDB $ search uid "title:haskell" + liftIO $ bids `shouldNotContain` [bid] + + it "ti: is an alias for title:" $ do + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBm uid "https://a.com" "Haskell tutorial" "" t2019 + return (uid, bid) + bids <- runDB $ search uid "ti:Haskell" + liftIO $ bids `shouldContain` [bid] + + -- ─── description: / d: ─────────────────────────────────────────────────── + + describe "description: field prefix" $ do + it "description: matches a bookmark whose notes contain the term" $ do + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBm uid "https://a.com" "" "great intro to monads" t2019 + return (uid, bid) + bids <- runDB $ search uid "description:monads" + liftIO $ bids `shouldContain` [bid] + + it "description: does not match a bookmark where the term is only in the title" $ do + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBm uid "https://a.com" "monads explained" "" t2019 + return (uid, bid) + bids <- runDB $ search uid "description:monads" + liftIO $ bids `shouldNotContain` [bid] + + it "d: is an alias for description:" $ do + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBm uid "https://a.com" "" "great intro to monads" t2019 + return (uid, bid) + bids <- runDB $ search uid "d:monads" + liftIO $ bids `shouldContain` [bid] + + -- ─── tags: / t: ────────────────────────────────────────────────────────── + + describe "tags: field prefix" $ do + it "tags: matches a bookmark with the given tag" $ do + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBm uid "https://a.com" "" "" t2019 + tagBm uid bid "haskell" 1 + return (uid, bid) + bids <- runDB $ search uid "tags:haskell" + liftIO $ bids `shouldContain` [bid] + + it "tags: does not match a bookmark where the term is only in the URL" $ do + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBm uid "https://haskell.org" "" "" t2019 + return (uid, bid) + bids <- runDB $ search uid "tags:haskell" + liftIO $ bids `shouldNotContain` [bid] + + it "t: is an alias for tags:" $ do + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBm uid "https://a.com" "" "" t2019 + tagBm uid bid "haskell" 1 + return (uid, bid) + bids <- runDB $ search uid "t:haskell" + liftIO $ bids `shouldContain` [bid] + + -- ─── after: / a: date filter ───────────────────────────────────────────── + + describe "after: date filter" $ do + it "after:YYYY-MM-DD includes a bookmark on exactly that date" $ do + let tExact = UTCTime (fromGregorian 2019 6 15) 0 + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBm uid "https://a.com" "" "" tExact + return (uid, bid) + bids <- runDB $ search uid "after:2019-06-15" + liftIO $ bids `shouldContain` [bid] + + it "after:YYYY-MM-DD excludes a bookmark one day before" $ do + let tBefore = UTCTime (fromGregorian 2019 6 14) 0 + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBm uid "https://a.com" "" "" tBefore + return (uid, bid) + bids <- runDB $ search uid "after:2019-06-15" + liftIO $ bids `shouldNotContain` [bid] + + it "after:MM/DD/YYYY accepts the slash date format" $ do + let tExact = UTCTime (fromGregorian 2019 6 15) 0 + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBm uid "https://a.com" "" "" tExact + return (uid, bid) + bids <- runDB $ search uid "after:6/15/2019" + liftIO $ bids `shouldContain` [bid] + + it "a: is an alias for after:" $ do + let tExact = UTCTime (fromGregorian 2019 6 15) 0 + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBm uid "https://a.com" "" "" tExact + return (uid, bid) + bids <- runDB $ search uid "a:2019-06-15" + liftIO $ bids `shouldContain` [bid] + + -- ─── before: / b: date filter ──────────────────────────────────────────── + + describe "before: date filter" $ do + it "before:YYYY-MM-DD includes a bookmark on exactly that date" $ do + let tExact = UTCTime (fromGregorian 2019 6 15) 0 + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBm uid "https://a.com" "" "" tExact + return (uid, bid) + bids <- runDB $ search uid "before:2019-06-15" + liftIO $ bids `shouldContain` [bid] + + it "before:YYYY-MM-DD excludes a bookmark one day after" $ do + let tAfter = UTCTime (fromGregorian 2019 6 16) 0 + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBm uid "https://a.com" "" "" tAfter + return (uid, bid) + bids <- runDB $ search uid "before:2019-06-15" + liftIO $ bids `shouldNotContain` [bid] + + it "before:MM/DD/YYYY accepts the slash date format" $ do + let tExact = UTCTime (fromGregorian 2019 6 15) 0 + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBm uid "https://a.com" "" "" tExact + return (uid, bid) + bids <- runDB $ search uid "before:6/15/2019" + liftIO $ bids `shouldContain` [bid] + + it "b: is an alias for before:" $ do + let tExact = UTCTime (fromGregorian 2019 6 15) 0 + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBm uid "https://a.com" "" "" tExact + return (uid, bid) + bids <- runDB $ search uid "b:2019-06-15" + liftIO $ bids `shouldContain` [bid] + + -- ─── AND (space separator) ──────────────────────────────────────────────── + + describe "AND combinator (space-separated terms)" $ do + it "returns a bookmark matching both terms" $ do + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBm uid "https://youtube.com/haskell" "Haskell on YouTube" "" t2019 + return (uid, bid) + bids <- runDB $ search uid "youtube haskell" + liftIO $ bids `shouldContain` [bid] + + it "does not return a bookmark missing the second term" $ do + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBm uid "https://youtube.com/watch" "" "" t2019 + return (uid, bid) + bids <- runDB $ search uid "youtube haskell" + liftIO $ bids `shouldNotContain` [bid] + + it "does not return a bookmark missing the first term" $ do + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBm uid "https://a.com" "Haskell tutorial" "" t2019 + return (uid, bid) + bids <- runDB $ search uid "youtube haskell" + liftIO $ bids `shouldNotContain` [bid] + + -- ─── OR combinator (|) ─────────────────────────────────────────────────── + + describe "OR combinator (| between terms)" $ do + it "returns a bookmark matching only the first alternative" $ do + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBm uid "https://a.com" "marathon training" "" t2019 + return (uid, bid) + bids <- runDB $ search uid "marathon|race" + liftIO $ bids `shouldContain` [bid] + + it "returns a bookmark matching only the second alternative" $ do + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBm uid "https://a.com" "race day tips" "" t2019 + return (uid, bid) + bids <- runDB $ search uid "marathon|race" + liftIO $ bids `shouldContain` [bid] + + it "does not return a bookmark matching neither alternative" $ do + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBm uid "https://a.com" "cycling tips" "" t2019 + return (uid, bid) + bids <- runDB $ search uid "marathon|race" + liftIO $ bids `shouldNotContain` [bid] + + it "OR applies per-field with field prefix: ti:haskell|ti:python" $ do + (uid, bHaskell, bPython, bJava) <- runDB $ do + uid <- createTestUser + bHaskell <- createBm uid "https://a.com" "Haskell guide" "" t2019 + bPython <- createBm uid "https://b.com" "Python guide" "" t2019 + bJava <- createBm uid "https://c.com" "Java guide" "" t2019 + return (uid, bHaskell, bPython, bJava) + bids <- runDB $ search uid "ti:haskell|ti:python" + liftIO $ bids `shouldContain` [bHaskell] + liftIO $ bids `shouldContain` [bPython] + liftIO $ bids `shouldNotContain` [bJava] + + -- ─── NOT combinator (-) ────────────────────────────────────────────────── + + describe "NOT combinator (- prefix)" $ do + it "-term excludes a bookmark containing that term" $ do + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBm uid "https://a.com" "car reviews" "" t2019 + return (uid, bid) + bids <- runDB $ search uid "-car" + liftIO $ bids `shouldNotContain` [bid] + + it "-term includes a bookmark not containing that term" $ do + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBm uid "https://a.com" "bike reviews" "" t2019 + return (uid, bid) + bids <- runDB $ search uid "-car" + liftIO $ bids `shouldContain` [bid] + + it "-field:term excludes a bookmark where that field contains the term" $ do + (uid, bidExcluded, bidIncluded) <- runDB $ do + uid <- createTestUser + bidExcluded <- createBm uid "https://a.com" "hacker news" "" t2019 + bidIncluded <- createBm uid "https://b.com" "lobste.rs" "" t2019 + return (uid, bidExcluded, bidIncluded) + bids <- runDB $ search uid "-ti:\"hacker news\"" + liftIO $ bids `shouldNotContain` [bidExcluded] + liftIO $ bids `shouldContain` [bidIncluded] + + -- ─── Quoted phrase ──────────────────────────────────────────────────────── + + describe "quoted phrase search" $ do + it "\"two words\" matches the exact substring" $ do + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBm uid "https://a.com" "tallest building in the world" "" t2019 + return (uid, bid) + bids <- runDB $ search uid "\"tallest building\"" + liftIO $ bids `shouldContain` [bid] + + it "\"two words\" does not match when only one word is present" $ do + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBm uid "https://a.com" "tallest tower in the world" "" t2019 + return (uid, bid) + bids <- runDB $ search uid "\"tallest building\"" + liftIO $ bids `shouldNotContain` [bid] + + it "\"two words\" does not match the words in reversed order" $ do + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBm uid "https://a.com" "building tallest" "" t2019 + return (uid, bid) + bids <- runDB $ search uid "\"tallest building\"" + liftIO $ bids `shouldNotContain` [bid] + + -- ─── Complex combined queries ───────────────────────────────────────────── + + describe "complex combined queries" $ do + -- docs example 1: u:youtube ti:haskell|ti:python a:12/31/2017 + it "u:youtube ti:haskell|ti:python a:12/31/2017 matches youtube+haskell after 2017" $ do + let t2018 = UTCTime (fromGregorian 2018 1 1) 0 + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBm uid "https://youtube.com/haskell" "Haskell intro" "" t2018 + return (uid, bid) + bids <- runDB $ search uid "u:youtube ti:haskell|ti:python a:12/31/2017" + liftIO $ bids `shouldContain` [bid] + + it "u:youtube ti:haskell|ti:python a:12/31/2017 matches youtube+python after 2017" $ do + let t2018 = UTCTime (fromGregorian 2018 1 1) 0 + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBm uid "https://youtube.com/python" "Python intro" "" t2018 + return (uid, bid) + bids <- runDB $ search uid "u:youtube ti:haskell|ti:python a:12/31/2017" + liftIO $ bids `shouldContain` [bid] + + it "u:youtube ti:haskell|ti:python a:12/31/2017 excludes youtube+java" $ do + let t2018 = UTCTime (fromGregorian 2018 1 1) 0 + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBm uid "https://youtube.com/java" "Java intro" "" t2018 + return (uid, bid) + bids <- runDB $ search uid "u:youtube ti:haskell|ti:python a:12/31/2017" + liftIO $ bids `shouldNotContain` [bid] + + it "u:youtube ti:haskell|ti:python a:12/31/2017 excludes haskell bookmark before 2018" $ do + let t2017 = UTCTime (fromGregorian 2017 1 1) 0 + (uid, bid) <- runDB $ do + uid <- createTestUser + bid <- createBm uid "https://youtube.com/haskell" "Haskell intro" "" t2017 + return (uid, bid) + bids <- runDB $ search uid "u:youtube ti:haskell|ti:python a:12/31/2017" + liftIO $ bids `shouldNotContain` [bid] + + -- docs example 2: -ti:"hacker news" news|cnn|npr|d:"the guardian" + it "-ti:\"hacker news\" news|cnn excludes hacker news title" $ do + (uid, bidExcluded, bidIncluded) <- runDB $ do + uid <- createTestUser + bidExcluded <- createBm uid "https://news.ycombinator.com" "hacker news" "" t2019 + bidIncluded <- createBm uid "https://cnn.com" "CNN" "" t2019 + return (uid, bidExcluded, bidIncluded) + bids <- runDB $ search uid "-ti:\"hacker news\" news|cnn" + liftIO $ bids `shouldNotContain` [bidExcluded] + liftIO $ bids `shouldContain` [bidIncluded]
+ test/Model/FileImportExportSpec.hs view
@@ -0,0 +1,635 @@+{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE NoImplicitPrelude #-} + +-- Tests deserialize bookmark/note data from the same raw formats used at rest + +module Model.FileImportExportSpec (spec) where + +import Data.Aeson qualified as A +import Model.Custom (hashPassword) +import Model.FileBookmark +import Model.FileFirefox +import Model.FileNetscape +import Model.FileNote +import TestImport +import Types (DB) + +-- --------------------------------------------------------------------------- +-- Pinboard JSON export format. +-- shared/toread are "yes"/"no" strings (not booleans). +-- description may be the boolean false when a bookmark has no title. +-- --------------------------------------------------------------------------- + +-- Single public bookmark, two space-separated tags. +bmJson :: ByteString +bmJson = + mconcat + [ "[{\"href\":\"https://example.com\"", + ",\"description\":\"Example\"", + ",\"extended\":\"An extended description\"", + ",\"time\":\"2024-01-01T00:00:00Z\"", + ",\"shared\":\"yes\"", + ",\"toread\":\"no\"", + ",\"tags\":\"foo bar\"", + "}]" + ] + +-- Private bookmark: shared=no, toread=yes, selected=true, archive_url, .secret tag. +bmPrivateJson :: ByteString +bmPrivateJson = + mconcat + [ "[{\"href\":\"https://private.com\"", + ",\"description\":\"Private bookmark\"", + ",\"extended\":\"\"", + ",\"time\":\"2024-06-15T12:00:00Z\"", + ",\"shared\":\"no\"", + ",\"toread\":\"yes\"", + ",\"selected\":true", + ",\"archive_url\":\"https://archive.example.com\"", + ",\"tags\":\".secret tag2\"", + "}]" + ] + +-- Two bookmarks in one array. +bmMultiJson :: ByteString +bmMultiJson = + mconcat + [ "[{\"href\":\"https://a.com\"", + ",\"description\":\"A\"", + ",\"extended\":\"\"", + ",\"time\":\"2024-01-01T00:00:00Z\"", + ",\"shared\":\"yes\"", + ",\"toread\":\"no\"", + ",\"tags\":\"alpha\"", + "}", + ",{\"href\":\"https://b.com\"", + ",\"description\":\"B\"", + ",\"extended\":\"\"", + ",\"time\":\"2024-01-02T00:00:00Z\"", + ",\"shared\":\"yes\"", + ",\"toread\":\"no\"", + ",\"tags\":\"beta\"", + "}]" + ] + +-- description is the boolean false (Pinboard's encoding for no title). +bmFalseDescJson :: ByteString +bmFalseDescJson = + mconcat + [ "[{\"href\":\"https://nodesc.com\"", + ",\"description\":false", + ",\"extended\":\"\"", + ",\"time\":\"2024-01-01T00:00:00Z\"", + ",\"shared\":\"yes\"", + ",\"toread\":\"no\"", + ",\"tags\":\"\"", + "}]" + ] + +-- All optional fields absent: no selected, no archive_url. +bmMinimalJson :: ByteString +bmMinimalJson = + mconcat + [ "[{\"href\":\"https://minimal.com\"", + ",\"description\":\"Minimal\"", + ",\"extended\":\"\"", + ",\"time\":\"2024-01-01T00:00:00Z\"", + ",\"shared\":\"no\"", + ",\"toread\":\"no\"", + ",\"tags\":\"\"", + "}]" + ] + +-- --------------------------------------------------------------------------- +-- Firefox JSON export format. +-- dateAdded and lastModified are in microseconds since epoch. +-- --------------------------------------------------------------------------- + +-- Single typeCode=1 bookmark node. +firefoxBookmarkJson :: ByteString +firefoxBookmarkJson = + mconcat + [ "{\"typeCode\":1", + ",\"type\":\"text/x-moz-place\"", + ",\"dateAdded\":1704067200000000", + ",\"lastModified\":1704067200000000", + ",\"guid\":\"bm-guid-1\"", + ",\"id\":2", + ",\"index\":0", + ",\"title\":\"Firefox BM\"", + ",\"uri\":\"https://firefox.com\"", + "}" + ] + +-- typeCode=2 folder with two children. +firefoxFolderJson :: ByteString +firefoxFolderJson = + mconcat + [ "{\"typeCode\":2", + ",\"type\":\"text/x-moz-place-container\"", + ",\"dateAdded\":0", + ",\"lastModified\":0", + ",\"guid\":\"folder-guid\"", + ",\"id\":1", + ",\"index\":0", + ",\"title\":\"Bookmarks Menu\"", + ",\"children\":[", + "{\"typeCode\":1", + ",\"type\":\"text/x-moz-place\"", + ",\"dateAdded\":1704067200000000", + ",\"lastModified\":1704067200000000", + ",\"guid\":\"bm-guid-a\"", + ",\"id\":2", + ",\"index\":0", + ",\"title\":\"Site A\"", + ",\"uri\":\"https://site-a.com\"", + "}", + ",{\"typeCode\":1", + ",\"type\":\"text/x-moz-place\"", + ",\"dateAdded\":1704153600000000", + ",\"lastModified\":1704153600000000", + ",\"guid\":\"bm-guid-b\"", + ",\"id\":3", + ",\"index\":1", + ",\"title\":\"Site B\"", + ",\"uri\":\"https://site-b.com\"", + "}", + "]}" + ] + +-- typeCode=3 separator: no children, no uri. +firefoxSeparatorJson :: ByteString +firefoxSeparatorJson = + mconcat + [ "{\"typeCode\":3", + ",\"type\":\"text/x-moz-place-separator\"", + ",\"dateAdded\":0", + ",\"lastModified\":0", + ",\"guid\":\"sep-guid\"", + ",\"id\":5", + ",\"index\":0", + ",\"title\":\"\"", + "}" + ] + +-- Nested folders: Root > leaf1, Inner > leaf2. +firefoxNestedJson :: ByteString +firefoxNestedJson = + mconcat + [ "{\"typeCode\":2", + ",\"type\":\"text/x-moz-place-container\"", + ",\"dateAdded\":0,\"lastModified\":0", + ",\"guid\":\"root-guid\",\"id\":1,\"index\":0", + ",\"title\":\"Root\"", + ",\"children\":[", + "{\"typeCode\":1", + ",\"type\":\"text/x-moz-place\"", + ",\"dateAdded\":1704067200000000,\"lastModified\":1704067200000000", + ",\"guid\":\"leaf1-guid\",\"id\":2,\"index\":0", + ",\"title\":\"Leaf 1\",\"uri\":\"https://leaf1.com\"", + "}", + ",{\"typeCode\":2", + ",\"type\":\"text/x-moz-place-container\"", + ",\"dateAdded\":0,\"lastModified\":0", + ",\"guid\":\"inner-guid\",\"id\":3,\"index\":1", + ",\"title\":\"Inner Folder\"", + ",\"children\":[", + "{\"typeCode\":1", + ",\"type\":\"text/x-moz-place\"", + ",\"dateAdded\":1704067200000000,\"lastModified\":1704067200000000", + ",\"guid\":\"leaf2-guid\",\"id\":4,\"index\":0", + ",\"title\":\"Leaf 2\",\"uri\":\"https://leaf2.com\"", + "}", + "]}", + "]}" + ] + +-- --------------------------------------------------------------------------- +-- Netscape HTML format (ADD_DATE in POSIX seconds, TAGS comma or space sep). +-- --------------------------------------------------------------------------- + +netscapeSimpleHtml :: Text +netscapeSimpleHtml = + unlines + [ "<!DOCTYPE NETSCAPE-Bookmark-file-1>", + "<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=UTF-8\">", + "<TITLE>Bookmarks</TITLE>", + "<H1>Bookmarks</H1>", + "<DL><p>", + " <DT><A HREF=\"https://ns.com\" ADD_DATE=\"1704067200\" TAGS=\"foo bar\">NS Title</A>", + " <DD>Some description", + "</DL><p>" + ] + +-- Comma-separated TAGS (alternative convention). +netscapeCommaSepHtml :: Text +netscapeCommaSepHtml = + unlines + [ "<!DOCTYPE NETSCAPE-Bookmark-file-1>", + "<DL><p>", + " <DT><A HREF=\"https://comma.com\" ADD_DATE=\"1704067200\" TAGS=\"foo,bar,baz\">Comma Tags</A>", + "</DL><p>" + ] + +-- Multiple DT entries. +netscapeMultiHtml :: Text +netscapeMultiHtml = + unlines + [ "<!DOCTYPE NETSCAPE-Bookmark-file-1>", + "<DL><p>", + " <DT><A HREF=\"https://first.com\" ADD_DATE=\"1704067200\" TAGS=\"tag1\">First</A>", + " <DT><A HREF=\"https://second.com\" ADD_DATE=\"1704153600\" TAGS=\"tag2\">Second</A>", + "</DL><p>" + ] + +-- HTML entities in title and href. +netscapeEntitiesHtml :: Text +netscapeEntitiesHtml = + unlines + [ "<!DOCTYPE NETSCAPE-Bookmark-file-1>", + "<DL><p>", + " <DT><A HREF=\"https://entity.com/path?a=1&b=2\" ADD_DATE=\"1704067200\" TAGS=\"\">Title & More</A>", + "</DL><p>" + ] + +-- --------------------------------------------------------------------------- +-- FileNote JSON format. +-- times use "%F %T" ("2024-01-01 00:00:00"), not ISO 8601. +-- --------------------------------------------------------------------------- + +noteJson :: ByteString +noteJson = + mconcat + [ "{\"id\":\"note-1\"", + ",\"title\":\"My Title\"", + ",\"text\":\"Body text\"", + ",\"length\":9", + ",\"created_at\":\"2024-01-01 00:00:00\"", + ",\"updated_at\":\"2024-01-01 00:00:00\"", + "}" + ] + +note2Json :: ByteString +note2Json = + mconcat + [ "{\"id\":\"note-2\"", + ",\"title\":\"Second Note\"", + ",\"text\":\"More text here\"", + ",\"length\":14", + ",\"created_at\":\"2024-06-15 12:00:00\"", + ",\"updated_at\":\"2024-06-15 12:00:00\"", + "}" + ] + +-- --------------------------------------------------------------------------- +-- Helpers +-- --------------------------------------------------------------------------- + +createTestUser :: DB (Key User) +createTestUser = do + pwHash <- liftIO $ hashPassword "pass" + insert $ User "testuser" pwHash Nothing False False True False False Nothing + +-- Decode ByteString or abort the test with an informative message. +decodeOrFail :: (A.FromJSON a) => ByteString -> IO a +decodeOrFail bs = case A.eitherDecode' (fromStrict bs) of + Left e -> throwString ("JSON decode failed: " <> e) + Right v -> pure v + +-- Get the first element of a list or abort the test. +firstOf :: [a] -> IO a +firstOf (x : _) = pure x +firstOf [] = throwString "expected non-empty list" + +-- Get the second element of a list or abort the test. +secondOf :: [a] -> IO a +secondOf (_ : x : _) = pure x +secondOf _ = throwString "expected list with at least two elements" + +-- --------------------------------------------------------------------------- + +spec :: Spec +spec = do + -- Pure parse tests: no DB, no app fixture. + describe "FileBookmark FromJSON" $ do + it "parses a well-formed Pinboard bookmark" $ do + fbs <- decodeOrFail bmJson :: IO [FileBookmark] + length fbs `shouldBe` 1 + fb <- firstOf fbs + fileBookmarkHref fb `shouldBe` "https://example.com" + fileBookmarkDescription fb `shouldBe` "Example" + fileBookmarkExtended fb `shouldBe` "An extended description" + fileBookmarkShared fb `shouldBe` True + fileBookmarkToRead fb `shouldBe` False + fileBookmarkTags fb `shouldBe` "foo bar" + + it "parses description:false as empty string (Pinboard quirk)" $ do + fbs <- decodeOrFail bmFalseDescJson :: IO [FileBookmark] + fb <- firstOf fbs + fileBookmarkDescription fb `shouldBe` "" + + it "parses missing optional fields as Nothing" $ do + fbs <- decodeOrFail bmMinimalJson :: IO [FileBookmark] + fb <- firstOf fbs + fileBookmarkSelected fb `shouldBe` Nothing + fileBookmarkArchiveHref fb `shouldBe` Nothing + + it "parses shared=no as False and toread=yes as True" $ do + fbs <- decodeOrFail bmPrivateJson :: IO [FileBookmark] + fb <- firstOf fbs + fileBookmarkShared fb `shouldBe` False + fileBookmarkToRead fb `shouldBe` True + + it "parses selected:true as Just True" $ do + fbs <- decodeOrFail bmPrivateJson :: IO [FileBookmark] + fb <- firstOf fbs + fileBookmarkSelected fb `shouldBe` Just True + + it "parses archive_url" $ do + fbs <- decodeOrFail bmPrivateJson :: IO [FileBookmark] + fb <- firstOf fbs + fileBookmarkArchiveHref fb `shouldBe` Just "https://archive.example.com" + + it "parses a two-bookmark array" $ do + fbs <- decodeOrFail bmMultiJson :: IO [FileBookmark] + length fbs `shouldBe` 2 + fb0 <- firstOf fbs + fb1 <- secondOf fbs + fileBookmarkHref fb0 `shouldBe` "https://a.com" + fileBookmarkHref fb1 `shouldBe` "https://b.com" + + it "round-trips through encode then decode" $ do + fbs <- decodeOrFail bmJson :: IO [FileBookmark] + A.decode (A.encode fbs) `shouldBe` Just fbs + + describe "FirefoxBookmarkNode FromJSON" $ do + it "parses a typeCode=1 bookmark node" $ do + node <- decodeOrFail firefoxBookmarkJson :: IO FirefoxBookmarkNode + firefoxBookmarkTypeCode node `shouldBe` 1 + firefoxBookmarkUri node `shouldBe` Just "https://firefox.com" + firefoxBookmarkTitle node `shouldBe` "Firefox BM" + + it "parses a typeCode=2 folder with two children" $ do + node <- decodeOrFail firefoxFolderJson :: IO FirefoxBookmarkNode + firefoxBookmarkTypeCode node `shouldBe` 2 + length (fromMaybe [] (firefoxBookmarkChildren node)) `shouldBe` 2 + + it "parses a typeCode=3 separator (no children, no uri)" $ do + node <- decodeOrFail firefoxSeparatorJson :: IO FirefoxBookmarkNode + firefoxBookmarkTypeCode node `shouldBe` 3 + firefoxBookmarkChildren node `shouldBe` Nothing + firefoxBookmarkUri node `shouldBe` Nothing + + describe "NetscapeBookmark parse" $ do + it "parses a single bookmark from HTML" $ do + case parseNetscapeBookmarks netscapeSimpleHtml of + Left e -> expectationFailure e + Right bms -> do + length bms `shouldBe` 1 + bm <- firstOf bms + nsbHref bm `shouldBe` "https://ns.com" + nsbTitle bm `shouldBe` "NS Title" + nsbDescription bm `shouldBe` "Some description" + nsbTags bm `shouldBe` "foo bar" + + it "parses comma-separated TAGS attribute" $ do + case parseNetscapeBookmarks netscapeCommaSepHtml of + Left e -> expectationFailure e + Right bms -> do + bm <- firstOf bms + nsbTags bm `shouldBe` "foo,bar,baz" + + it "parses multiple DT entries" $ do + case parseNetscapeBookmarks netscapeMultiHtml of + Left e -> expectationFailure e + Right bms -> do + length bms `shouldBe` 2 + bm0 <- firstOf bms + bm1 <- secondOf bms + nsbHref bm0 `shouldBe` "https://first.com" + nsbHref bm1 `shouldBe` "https://second.com" + + it "decodes HTML entities in title and href" $ do + case parseNetscapeBookmarks netscapeEntitiesHtml of + Left e -> expectationFailure e + Right bms -> do + bm <- firstOf bms + nsbTitle bm `shouldBe` "Title & More" + nsbHref bm `shouldBe` "https://entity.com/path?a=1&b=2" + + describe "FileNote FromJSON" $ do + it "parses a well-formed note" $ do + fn <- decodeOrFail noteJson :: IO FileNote + fileNoteId fn `shouldBe` "note-1" + fileNoteTitle fn `shouldBe` "My Title" + fileNoteText fn `shouldBe` "Body text" + fileNoteLength fn `shouldBe` 9 + + it "round-trips through encode then decode" $ do + fn <- decodeOrFail noteJson :: IO FileNote + A.decode (A.encode fn) `shouldBe` Just fn + + withApp $ do + -- ----------------------------------------------------------------- + describe "insertFileBookmarks (from JSON)" $ do + it "inserts a parsed bookmark and retrieves via getFileBookmarks" $ do + uid <- runDB createTestUser + fbs <- liftIO $ decodeOrFail bmJson + n <- runDB $ insertFileBookmarks uid fbs + liftIO $ n `shouldBe` 1 + result <- runDB $ getFileBookmarks uid + liftIO $ length result `shouldBe` 1 + liftIO $ fmap fileBookmarkHref (headMay result) `shouldBe` Just "https://example.com" + liftIO $ fmap fileBookmarkTags (headMay result) `shouldBe` Just "foo bar" + + it "inserts multiple parsed bookmarks" $ do + uid <- runDB createTestUser + fbs <- liftIO $ decodeOrFail bmMultiJson + n <- runDB $ insertFileBookmarks uid fbs + liftIO $ n `shouldBe` 2 + result <- runDB $ getFileBookmarks uid + liftIO $ length result `shouldBe` 2 + + it "skips duplicate hrefs on re-insert" $ do + uid <- runDB createTestUser + fbs <- liftIO $ decodeOrFail bmJson + n1 <- runDB $ insertFileBookmarks uid fbs + n2 <- runDB $ insertFileBookmarks uid fbs + liftIO $ n1 `shouldBe` 1 + liftIO $ n2 `shouldBe` 1 + result <- runDB $ getFileBookmarks uid + liftIO $ length result `shouldBe` 1 + + -- ----------------------------------------------------------------- + describe "FileBookmark round-trip (JSON -> insert -> getFileBookmarks)" $ do + it "preserves href, description, extended, shared, toRead" $ do + uid <- runDB createTestUser + fbs0 <- liftIO $ decodeOrFail bmJson + fb <- liftIO $ firstOf fbs0 + _ <- runDB $ insertFileBookmarks uid [fb] + result <- runDB $ getFileBookmarks uid + case headMay result of + Nothing -> liftIO $ expectationFailure "expected non-empty result" + Just got -> liftIO $ do + fileBookmarkHref got `shouldBe` fileBookmarkHref fb + fileBookmarkDescription got `shouldBe` fileBookmarkDescription fb + fileBookmarkExtended got `shouldBe` fileBookmarkExtended fb + fileBookmarkShared got `shouldBe` fileBookmarkShared fb + fileBookmarkToRead got `shouldBe` fileBookmarkToRead fb + + it "normalises absent selected to Just False" $ do + uid <- runDB createTestUser + fbs1 <- liftIO $ decodeOrFail bmJson + fb1 <- liftIO $ firstOf fbs1 + liftIO $ fileBookmarkSelected fb1 `shouldBe` Nothing + _ <- runDB $ insertFileBookmarks uid [fb1] + result <- runDB $ getFileBookmarks uid + liftIO $ fmap fileBookmarkSelected (headMay result) `shouldBe` Just (Just False) + + it "preserves selected=True parsed from JSON" $ do + uid <- runDB createTestUser + fbs2 <- liftIO $ decodeOrFail bmPrivateJson + fb2 <- liftIO $ firstOf fbs2 + liftIO $ fileBookmarkSelected fb2 `shouldBe` Just True + _ <- runDB $ insertFileBookmarks uid [fb2] + result <- runDB $ getFileBookmarks uid + liftIO $ fmap fileBookmarkSelected (headMay result) `shouldBe` Just (Just True) + + it "preserves archiveHref parsed from JSON" $ do + uid <- runDB createTestUser + fbs3 <- liftIO $ decodeOrFail bmPrivateJson + fb3 <- liftIO $ firstOf fbs3 + _ <- runDB $ insertFileBookmarks uid [fb3] + result <- runDB $ getFileBookmarks uid + liftIO $ fmap fileBookmarkArchiveHref (headMay result) `shouldBe` Just (Just "https://archive.example.com") + + it "description:false parses as empty and survives round-trip" $ do + uid <- runDB createTestUser + fbs4 <- liftIO $ decodeOrFail bmFalseDescJson + fb4 <- liftIO $ firstOf fbs4 + liftIO $ fileBookmarkDescription fb4 `shouldBe` "" + _ <- runDB $ insertFileBookmarks uid [fb4] + result <- runDB $ getFileBookmarks uid + liftIO $ fmap fileBookmarkDescription (headMay result) `shouldBe` Just "" + + -- ----------------------------------------------------------------- + describe "insertFirefoxBookmarks (from JSON)" $ do + it "inserts a typeCode=1 bookmark" $ do + uid <- runDB createTestUser + node <- liftIO $ decodeOrFail firefoxBookmarkJson + n <- runDB $ insertFirefoxBookmarks uid node + liftIO $ n `shouldBe` 1 + result <- runDB $ getFileBookmarks uid + liftIO $ fmap fileBookmarkHref (headMay result) `shouldBe` Just "https://firefox.com" + liftIO $ fmap fileBookmarkDescription (headMay result) `shouldBe` Just "Firefox BM" + + it "inserts all children of a typeCode=2 folder" $ do + uid <- runDB createTestUser + node <- liftIO $ decodeOrFail firefoxFolderJson + n <- runDB $ insertFirefoxBookmarks uid node + liftIO $ n `shouldBe` 2 + result <- runDB $ getFileBookmarks uid + liftIO $ length result `shouldBe` 2 + + it "inserts nothing for a typeCode=3 separator" $ do + uid <- runDB createTestUser + node <- liftIO $ decodeOrFail firefoxSeparatorJson + n <- runDB $ insertFirefoxBookmarks uid node + liftIO $ n `shouldBe` 0 + + it "flattens bookmarks from nested folders" $ do + uid <- runDB createTestUser + node <- liftIO $ decodeOrFail firefoxNestedJson + n <- runDB $ insertFirefoxBookmarks uid node + liftIO $ n `shouldBe` 2 + result <- runDB $ getFileBookmarks uid + liftIO $ length result `shouldBe` 2 + + -- ----------------------------------------------------------------- + describe "insertNetscapeBookmarks (from HTML)" $ do + it "inserts a bookmark parsed from HTML" $ do + uid <- runDB createTestUser + case parseNetscapeBookmarks netscapeSimpleHtml of + Left e -> liftIO $ expectationFailure e + Right nbms -> do + n <- runDB $ insertNetscapeBookmarks uid nbms + liftIO $ n `shouldBe` 1 + + it "comma-separated TAGS are split on insert" $ do + uid <- runDB createTestUser + case parseNetscapeBookmarks netscapeCommaSepHtml of + Left e -> liftIO $ expectationFailure e + Right nbms -> do + _ <- runDB $ insertNetscapeBookmarks uid nbms + result <- runDB $ getNetscapeBookmarks uid + liftIO $ fmap nsbTags (headMay result) `shouldBe` Just "foo bar baz" + + it "inserts multiple bookmarks from HTML" $ do + uid <- runDB createTestUser + case parseNetscapeBookmarks netscapeMultiHtml of + Left e -> liftIO $ expectationFailure e + Right nbms -> do + n <- runDB $ insertNetscapeBookmarks uid nbms + liftIO $ n `shouldBe` 2 + + -- ----------------------------------------------------------------- + describe "NetscapeBookmark round-trip (HTML -> insert -> getNetscapeBookmarks -> render -> reparse)" $ do + it "preserves href, title, description through insert/export" $ do + uid <- runDB createTestUser + case parseNetscapeBookmarks netscapeSimpleHtml of + Left e -> liftIO $ expectationFailure e + Right nbms -> do + _ <- runDB $ insertNetscapeBookmarks uid nbms + exported <- runDB $ getNetscapeBookmarks uid + case headMay exported of + Nothing -> liftIO $ expectationFailure "expected non-empty export" + Just bm -> liftIO $ do + nsbHref bm `shouldBe` "https://ns.com" + nsbTitle bm `shouldBe` "NS Title" + nsbDescription bm `shouldBe` "Some description" + + it "space-separated tags survive insert/export unchanged" $ do + uid <- runDB createTestUser + case parseNetscapeBookmarks netscapeSimpleHtml of + Left e -> liftIO $ expectationFailure e + Right nbms -> do + _ <- runDB $ insertNetscapeBookmarks uid nbms + exported <- runDB $ getNetscapeBookmarks uid + liftIO $ fmap nsbTags (headMay exported) `shouldBe` Just "foo bar" + + it "rendered HTML re-parses to same href and title" $ do + uid <- runDB createTestUser + case parseNetscapeBookmarks netscapeSimpleHtml of + Left e -> liftIO $ expectationFailure e + Right nbms -> do + _ <- runDB $ insertNetscapeBookmarks uid nbms + exported <- runDB $ getNetscapeBookmarks uid + let rendered = renderNetscapeBookmarks exported + case parseNetscapeBookmarks rendered of + Left e -> liftIO $ expectationFailure ("re-parse failed: " <> e) + Right reimported -> liftIO $ do + fmap nsbHref (headMay reimported) `shouldBe` Just "https://ns.com" + fmap nsbTitle (headMay reimported) `shouldBe` Just "NS Title" + + -- ----------------------------------------------------------------- + describe "insertFileNotes (from JSON)" $ do + it "inserts a note deserialized from JSON" $ do + uid <- runDB createTestUser + fn <- liftIO $ decodeOrFail noteJson + n <- runDB $ insertFileNotes uid [fn] + liftIO $ n `shouldBe` 1 + + it "inserts multiple notes" $ do + uid <- runDB createTestUser + fn1 <- liftIO $ decodeOrFail noteJson + fn2 <- liftIO $ decodeOrFail note2Json + n <- runDB $ insertFileNotes uid [fn1, fn2] + liftIO $ n `shouldBe` 2 + + it "skips duplicate notes on re-insert" $ do + uid <- runDB createTestUser + fn <- liftIO $ decodeOrFail noteJson + n1 <- runDB $ insertFileNotes uid [fn] + n2 <- runDB $ insertFileNotes uid [fn] + liftIO $ n1 `shouldBe` 1 + liftIO $ n2 `shouldBe` 1
test/TestImport.hs view
@@ -1,75 +1,79 @@-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE QuasiQuotes #-}-{-# LANGUAGE NoImplicitPrelude #-}--module TestImport- ( module TestImport,- module X,- )-where--import Application (makeFoundation, makeLogWare)-import ClassyPrelude as X hiding (Handler, delete, deleteBy)--- Wiping the database--import Control.Monad.Logger (runLoggingT)-import Database.Persist as X hiding (get)-import Database.Persist.Sql (SqlPersistM, rawExecute, rawSql, runSqlPersistMPool, unSingle)-import Database.Persist.Sqlite (createSqlitePoolFromInfo, fkEnabled, mkSqliteConnectionInfo, sqlDatabase)-import Foundation as X-import Lens.Micro (set)-import Model as X-import Settings (appDatabaseConf)-import Test.Hspec as X-import Types-import Yesod.Auth as X-import Yesod.Core (messageLoggerSource)-import Yesod.Core.Unsafe (fakeHandlerGetLogger)-import Yesod.Default.Config2 (loadYamlSettings, useEnv)-import Yesod.Test as X--runDB :: SqlPersistM a -> YesodExample App a-runDB query = do- pool <- fmap appConnPool getTestYesod- liftIO $ runSqlPersistMPool query pool--runHandler :: Handler a -> YesodExample App a-runHandler handler = do- app <- getTestYesod- fakeHandlerGetLogger appLogger app handler--withApp :: SpecWith (TestApp App) -> Spec-withApp = before $ do- settings <-- loadYamlSettings- ["config/test-settings.yml", "config/settings.yml"]- []- useEnv- foundation <- makeFoundation settings- wipeDB foundation- logWare <- liftIO $ makeLogWare foundation- return (foundation, logWare)---- This function will truncate all of the tables in your database.--- 'withApp' calls it before each test, creating a clean environment for each--- spec to run in.-wipeDB :: App -> IO ()-wipeDB app = do- let logFunc = messageLoggerSource app (appLogger app)-- let dbName = sqlDatabase $ appDatabaseConf $ appSettings app- connInfo = set fkEnabled False $ mkSqliteConnectionInfo dbName-- pool <- runLoggingT (createSqlitePoolFromInfo connInfo 1) logFunc-- flip runSqlPersistMPool pool $ do- tables <- getTables- -- sqlBackend <- ask- -- let queries = map (\t -> "DELETE FROM " ++ (connEscapeName sqlBackend $ DBName t)) tables- let queries = map (\t -> "DELETE FROM " ++ t) tables- forM_ queries (\q -> rawExecute q [])--getTables :: DB [Text]-getTables = do- tables <- rawSql "SELECT name FROM sqlite_master WHERE type = 'table';" []- return (fmap unSingle tables)+{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE QuasiQuotes #-} +{-# LANGUAGE NoImplicitPrelude #-} + +module TestImport + ( module TestImport, + module X, + ) +where + +import Application (makeFoundation, makeLogWare) +import ClassyPrelude as X hiding (Handler, delete, deleteBy) +import Database.Persist as X hiding (get) +import Database.Persist.Sql (SqlPersistM, rawExecute, rawSql, runSqlPersistMPool, unSingle) +import Foundation as X +import Model as X +import Model.Migrations (runAppMigrations, runPersistentMigrations) +import Test.Hspec as X +import Types +import Yesod.Auth as X +import Yesod.Core.Unsafe (fakeHandlerGetLogger) +import Yesod.Default.Config2 (loadYamlSettings, useEnv) +import Yesod.Test as X + +runDB :: SqlPersistM a -> YesodExample App a +runDB query = do + pool <- fmap appConnPool getTestYesod + liftIO $ runSqlPersistMPool query pool + +runHandler :: Handler a -> YesodExample App a +runHandler handler = do + app <- getTestYesod + fakeHandlerGetLogger appLogger app handler + +-- Migrations run once for the whole suite; data is wiped between each test. +withApp :: SpecWith (TestApp App) -> Spec +withApp spec = + beforeAll makeApp $ + beforeWith perTest spec + where + makeApp :: IO App + makeApp = do + settings <- + loadYamlSettings + ["config/test-settings.yml", "config/settings.yml"] + [] + useEnv + foundation <- makeFoundation settings + runSqlPersistMPool + (runPersistentMigrations False >> runAppMigrations False) + (appConnPool foundation) + return foundation + + perTest :: App -> IO (TestApp App) + perTest foundation = do + wipeDB foundation + logWare <- makeLogWare foundation + return (foundation, logWare) + +-- Truncate all user data tables on the app's own pool, leaving app_migration +-- intact. defer_foreign_keys lets us delete in any order within the +-- transaction; at commit time all tables are empty so no FK violations occur. +wipeDB :: App -> IO () +wipeDB app = + runSqlPersistMPool go (appConnPool app) + where + go :: SqlPersistM () + go = do + rawExecute "PRAGMA defer_foreign_keys = ON" [] + tables <- getTables + forM_ tables (\t -> rawExecute ("DELETE FROM " ++ t) []) + + getTables :: DB [Text] + getTables = do + tables <- + rawSql + "SELECT name FROM sqlite_master WHERE type = 'table' AND name != 'app_migration';" + [] + return (fmap unSingle tables)