From 1db5a9c295dde3a4a18134225dda39e0cd3ece11 Mon Sep 17 00:00:00 2001 From: Hydra Date: Sun, 21 Apr 2024 06:26:29 +0100 Subject: [PATCH] feat: migrating to electron-vite --- .editorconfig | 9 + .env.example | 5 + .eslintignore | 4 + .eslintrc.cjs | 9 + .gitignore | 6 + .npmrc | 3 + .prettierignore | 6 + .prettierrc.yaml | 4 + .vscode/extensions.json | 3 + .vscode/launch.json | 39 + .vscode/settings.json | 14 + README.md | 92 + build/entitlements.mac.plist | 12 + build/icon.icns | Bin 0 -> 85649 bytes build/icon.ico | Bin 0 -> 123545 bytes build/icon.png | Bin 0 -> 35949 bytes docs/screenshot.png | Bin 0 -> 398943 bytes electron-builder.yml | 45 + electron.vite.config.ts | 43 + package.json | 81 + requirements.txt | 5 + resources/icon.png | Bin 0 -> 35949 bytes src/locales/en/translation.json | 141 + src/locales/es/translation.json | 141 + src/locales/fr/translation.json | 141 + src/locales/index.ts | 4 + src/locales/pt/translation.json | 141 + src/main/constants.ts | 55 + src/main/data-source.ts | 35 + src/main/entity/game-shop-cache.entity.ts | 32 + src/main/entity/game.entity.ts | 69 + src/main/entity/image-cache.entity.ts | 25 + src/main/entity/index.ts | 8 + src/main/entity/migration-script.entity.ts | 22 + src/main/entity/repack.entity.ts | 37 + .../entity/repacker-friendly-name.entity.ts | 25 + src/main/entity/steam-game.entity.ts | 10 + src/main/entity/user-preferences.entity.ts | 34 + src/main/events/catalogue/get-catalogue.ts | 117 + .../events/catalogue/get-game-shop-details.ts | 72 + src/main/events/catalogue/get-games.ts | 44 + .../events/catalogue/get-how-long-to-beat.ts | 48 + src/main/events/catalogue/get-random-game.ts | 29 + src/main/events/catalogue/search-games.ts | 11 + .../events/hardware/get-disk-free-space.ts | 11 + .../events/helpers/generate-lutris-yaml.ts | 44 + src/main/events/helpers/get-downloads-path.ts | 15 + src/main/events/helpers/search-games.ts | 71 + src/main/events/index.ts | 32 + .../events/library/add-game-to-library.ts | 29 + src/main/events/library/close-game.ts | 35 + src/main/events/library/delete-game-folder.ts | 47 + .../events/library/get-game-by-object-id.ts | 20 + src/main/events/library/get-library.ts | 30 + .../library/get-repackers-friendly-names.ts | 12 + .../events/library/open-game-installer.ts | 58 + src/main/events/library/open-game.ts | 18 + src/main/events/library/remove-game.ts | 11 + src/main/events/misc/get-or-cache-image.ts | 37 + src/main/events/misc/open-external.ts | 9 + src/main/events/misc/show-open-dialog.ts | 12 + src/main/events/register-event.ts | 39 + .../events/torrenting/cancel-game-download.ts | 53 + .../events/torrenting/pause-game-download.ts | 34 + .../events/torrenting/resume-game-download.ts | 56 + .../events/torrenting/start-game-download.ts | 110 + .../user-preferences/get-user-preferences.ts | 11 + .../update-user-preferences.ts | 21 + src/main/helpers/formatters.test.ts | 98 + src/main/helpers/formatters.ts | 56 + src/main/helpers/index.ts | 85 + src/main/helpers/ps.ts | 12 + src/main/index.ts | 102 + src/main/main.ts | 129 + src/main/repository.ts | 30 + src/main/services/fifo.ts | 38 + src/main/services/how-long-to-beat.ts | 60 + src/main/services/index.ts | 11 + src/main/services/logger.ts | 11 + src/main/services/process-watcher.ts | 80 + src/main/services/repack-tracker/1337x.ts | 135 + .../services/repack-tracker/cpg-repacks.ts | 65 + src/main/services/repack-tracker/gog.ts | 78 + src/main/services/repack-tracker/helpers.ts | 18 + src/main/services/repack-tracker/index.ts | 5 + .../services/repack-tracker/online-fix.ts | 207 + src/main/services/repack-tracker/xatab.ts | 95 + src/main/services/steam-250.ts | 34 + src/main/services/steam-grid.ts | 71 + src/main/services/steam.ts | 35 + src/main/services/torrent-client.ts | 170 + src/main/services/update-resolver.ts | 159 + src/main/services/window-manager.ts | 109 + src/main/state-manager.ts | 33 + src/main/vite-env.d.ts | 12 + src/preload/index.d.ts | 104 + src/preload/index.ts | 104 + src/renderer/index.html | 17 + src/renderer/src/app.css.ts | 107 + src/renderer/src/app.tsx | 122 + src/renderer/src/assets/discord-icon.svg | 1 + src/renderer/src/assets/epic-games-logo.svg | 1 + .../src/assets/lottie/downloading.json | 843 +++ src/renderer/src/assets/lottie/settings.json | 1054 +++ src/renderer/src/assets/lottie/stars.json | 928 +++ src/renderer/src/assets/steam-logo.svg | 1 + src/renderer/src/assets/x-icon.svg | 1 + .../components/async-image/async-image.tsx | 27 + .../bottom-panel/bottom-panel.css.ts | 23 + .../components/bottom-panel/bottom-panel.tsx | 68 + .../src/components/button/button.css.ts | 52 + src/renderer/src/components/button/button.tsx | 27 + .../checkbox-field/checkbox-field.css.ts | 40 + .../checkbox-field/checkbox-field.tsx | 32 + .../src/components/game-card/game-card.css.ts | 127 + .../src/components/game-card/game-card.tsx | 87 + .../src/components/header/header.css.ts | 148 + src/renderer/src/components/header/header.tsx | 126 + src/renderer/src/components/hero/hero.css.ts | 64 + src/renderer/src/components/hero/hero.tsx | 59 + src/renderer/src/components/index.ts | 10 + .../src/components/modal/modal.css.ts | 108 + src/renderer/src/components/modal/modal.tsx | 69 + .../src/components/sidebar/download-icon.tsx | 22 + .../src/components/sidebar/routes.tsx | 27 + .../src/components/sidebar/sidebar.css.ts | 170 + .../src/components/sidebar/sidebar.tsx | 255 + .../components/text-field/text-field.css.ts | 59 + .../src/components/text-field/text-field.tsx | 42 + src/renderer/src/constants.ts | 1 + src/renderer/src/declaration.d.ts | 95 + src/renderer/src/features/download-slice.ts | 49 + src/renderer/src/features/index.ts | 6 + src/renderer/src/features/library-slice.ts | 24 + .../repackers-friendly-names-slice.ts | 26 + src/renderer/src/features/search-slice.ts | 25 + .../src/features/use-preferences-slice.ts | 23 + src/renderer/src/features/window-slice.ts | 27 + src/renderer/src/helpers.ts | 25 + src/renderer/src/hooks/index.ts | 3 + src/renderer/src/hooks/redux.ts | 7 + src/renderer/src/hooks/use-date.ts | 33 + src/renderer/src/hooks/use-download.ts | 132 + src/renderer/src/hooks/use-library.ts | 16 + src/renderer/src/main.tsx | 102 + .../src/pages/catalogue/catalogue.tsx | 115 + .../src/pages/downloads/delete-modal.css.ts | 10 + .../src/pages/downloads/delete-modal.tsx | 43 + .../src/pages/downloads/downloads.css.ts | 90 + .../src/pages/downloads/downloads.tsx | 272 + .../pages/game-details/description-header.tsx | 84 + .../game-details/game-details-skeleton.tsx | 89 + .../pages/game-details/game-details.css.ts | 259 + .../src/pages/game-details/game-details.tsx | 289 + .../pages/game-details/hero-panel-actions.tsx | 212 + .../src/pages/game-details/hero-panel.css.ts | 32 + .../src/pages/game-details/hero-panel.tsx | 196 + .../game-details/how-long-to-beat-section.tsx | 69 + .../pages/game-details/repacks-modal.css.ts | 18 + .../src/pages/game-details/repacks-modal.tsx | 101 + .../src/pages/home/catalogue-home.css.ts | 26 + src/renderer/src/pages/home/home.css.ts | 65 + src/renderer/src/pages/home/home.tsx | 143 + .../src/pages/home/search-results.tsx | 86 + src/renderer/src/pages/index.ts | 6 + .../patch-notes/patch-notes-skeleton.tsx | 0 .../src/pages/settings/settings.css.ts | 26 + src/renderer/src/pages/settings/settings.tsx | 113 + .../shared-modals/binary-not-found-modal.tsx | 25 + src/renderer/src/store.ts | 23 + src/renderer/src/theme.css.ts | 19 + src/renderer/src/utils/format-bytes.ts | 15 + src/renderer/src/utils/index.ts | 1 + src/renderer/src/vite-env.d.ts | 10 + src/types/index.ts | 114 + .../__pycache__/fifo.cpython-39.pyc | Bin 0 -> 1276 bytes torrent-client/fifo.py | 32 + torrent-client/main.py | 103 + torrent-client/setup.py | 20 + tsconfig.json | 4 + tsconfig.node.json | 19 + tsconfig.web.json | 22 + yarn.lock | 5891 +++++++++++++++++ 183 files changed, 18535 insertions(+) create mode 100644 .editorconfig create mode 100644 .env.example create mode 100644 .eslintignore create mode 100644 .eslintrc.cjs create mode 100644 .gitignore create mode 100644 .npmrc create mode 100644 .prettierignore create mode 100644 .prettierrc.yaml create mode 100644 .vscode/extensions.json create mode 100644 .vscode/launch.json create mode 100644 .vscode/settings.json create mode 100644 README.md create mode 100644 build/entitlements.mac.plist create mode 100644 build/icon.icns create mode 100644 build/icon.ico create mode 100644 build/icon.png create mode 100644 docs/screenshot.png create mode 100644 electron-builder.yml create mode 100644 electron.vite.config.ts create mode 100644 package.json create mode 100644 requirements.txt create mode 100644 resources/icon.png create mode 100644 src/locales/en/translation.json create mode 100644 src/locales/es/translation.json create mode 100644 src/locales/fr/translation.json create mode 100644 src/locales/index.ts create mode 100644 src/locales/pt/translation.json create mode 100644 src/main/constants.ts create mode 100644 src/main/data-source.ts create mode 100644 src/main/entity/game-shop-cache.entity.ts create mode 100644 src/main/entity/game.entity.ts create mode 100644 src/main/entity/image-cache.entity.ts create mode 100644 src/main/entity/index.ts create mode 100644 src/main/entity/migration-script.entity.ts create mode 100644 src/main/entity/repack.entity.ts create mode 100644 src/main/entity/repacker-friendly-name.entity.ts create mode 100644 src/main/entity/steam-game.entity.ts create mode 100644 src/main/entity/user-preferences.entity.ts create mode 100644 src/main/events/catalogue/get-catalogue.ts create mode 100644 src/main/events/catalogue/get-game-shop-details.ts create mode 100644 src/main/events/catalogue/get-games.ts create mode 100644 src/main/events/catalogue/get-how-long-to-beat.ts create mode 100644 src/main/events/catalogue/get-random-game.ts create mode 100644 src/main/events/catalogue/search-games.ts create mode 100644 src/main/events/hardware/get-disk-free-space.ts create mode 100644 src/main/events/helpers/generate-lutris-yaml.ts create mode 100644 src/main/events/helpers/get-downloads-path.ts create mode 100644 src/main/events/helpers/search-games.ts create mode 100644 src/main/events/index.ts create mode 100644 src/main/events/library/add-game-to-library.ts create mode 100644 src/main/events/library/close-game.ts create mode 100644 src/main/events/library/delete-game-folder.ts create mode 100644 src/main/events/library/get-game-by-object-id.ts create mode 100644 src/main/events/library/get-library.ts create mode 100644 src/main/events/library/get-repackers-friendly-names.ts create mode 100644 src/main/events/library/open-game-installer.ts create mode 100644 src/main/events/library/open-game.ts create mode 100644 src/main/events/library/remove-game.ts create mode 100644 src/main/events/misc/get-or-cache-image.ts create mode 100644 src/main/events/misc/open-external.ts create mode 100644 src/main/events/misc/show-open-dialog.ts create mode 100644 src/main/events/register-event.ts create mode 100644 src/main/events/torrenting/cancel-game-download.ts create mode 100644 src/main/events/torrenting/pause-game-download.ts create mode 100644 src/main/events/torrenting/resume-game-download.ts create mode 100644 src/main/events/torrenting/start-game-download.ts create mode 100644 src/main/events/user-preferences/get-user-preferences.ts create mode 100644 src/main/events/user-preferences/update-user-preferences.ts create mode 100644 src/main/helpers/formatters.test.ts create mode 100644 src/main/helpers/formatters.ts create mode 100644 src/main/helpers/index.ts create mode 100644 src/main/helpers/ps.ts create mode 100644 src/main/index.ts create mode 100644 src/main/main.ts create mode 100644 src/main/repository.ts create mode 100644 src/main/services/fifo.ts create mode 100644 src/main/services/how-long-to-beat.ts create mode 100644 src/main/services/index.ts create mode 100644 src/main/services/logger.ts create mode 100644 src/main/services/process-watcher.ts create mode 100644 src/main/services/repack-tracker/1337x.ts create mode 100644 src/main/services/repack-tracker/cpg-repacks.ts create mode 100644 src/main/services/repack-tracker/gog.ts create mode 100644 src/main/services/repack-tracker/helpers.ts create mode 100644 src/main/services/repack-tracker/index.ts create mode 100644 src/main/services/repack-tracker/online-fix.ts create mode 100644 src/main/services/repack-tracker/xatab.ts create mode 100644 src/main/services/steam-250.ts create mode 100644 src/main/services/steam-grid.ts create mode 100644 src/main/services/steam.ts create mode 100644 src/main/services/torrent-client.ts create mode 100644 src/main/services/update-resolver.ts create mode 100644 src/main/services/window-manager.ts create mode 100644 src/main/state-manager.ts create mode 100644 src/main/vite-env.d.ts create mode 100644 src/preload/index.d.ts create mode 100644 src/preload/index.ts create mode 100644 src/renderer/index.html create mode 100644 src/renderer/src/app.css.ts create mode 100644 src/renderer/src/app.tsx create mode 100644 src/renderer/src/assets/discord-icon.svg create mode 100644 src/renderer/src/assets/epic-games-logo.svg create mode 100644 src/renderer/src/assets/lottie/downloading.json create mode 100644 src/renderer/src/assets/lottie/settings.json create mode 100644 src/renderer/src/assets/lottie/stars.json create mode 100644 src/renderer/src/assets/steam-logo.svg create mode 100644 src/renderer/src/assets/x-icon.svg create mode 100644 src/renderer/src/components/async-image/async-image.tsx create mode 100644 src/renderer/src/components/bottom-panel/bottom-panel.css.ts create mode 100644 src/renderer/src/components/bottom-panel/bottom-panel.tsx create mode 100644 src/renderer/src/components/button/button.css.ts create mode 100644 src/renderer/src/components/button/button.tsx create mode 100644 src/renderer/src/components/checkbox-field/checkbox-field.css.ts create mode 100644 src/renderer/src/components/checkbox-field/checkbox-field.tsx create mode 100644 src/renderer/src/components/game-card/game-card.css.ts create mode 100644 src/renderer/src/components/game-card/game-card.tsx create mode 100644 src/renderer/src/components/header/header.css.ts create mode 100644 src/renderer/src/components/header/header.tsx create mode 100644 src/renderer/src/components/hero/hero.css.ts create mode 100644 src/renderer/src/components/hero/hero.tsx create mode 100644 src/renderer/src/components/index.ts create mode 100644 src/renderer/src/components/modal/modal.css.ts create mode 100644 src/renderer/src/components/modal/modal.tsx create mode 100644 src/renderer/src/components/sidebar/download-icon.tsx create mode 100644 src/renderer/src/components/sidebar/routes.tsx create mode 100644 src/renderer/src/components/sidebar/sidebar.css.ts create mode 100644 src/renderer/src/components/sidebar/sidebar.tsx create mode 100644 src/renderer/src/components/text-field/text-field.css.ts create mode 100644 src/renderer/src/components/text-field/text-field.tsx create mode 100644 src/renderer/src/constants.ts create mode 100644 src/renderer/src/declaration.d.ts create mode 100644 src/renderer/src/features/download-slice.ts create mode 100644 src/renderer/src/features/index.ts create mode 100644 src/renderer/src/features/library-slice.ts create mode 100644 src/renderer/src/features/repackers-friendly-names-slice.ts create mode 100644 src/renderer/src/features/search-slice.ts create mode 100644 src/renderer/src/features/use-preferences-slice.ts create mode 100644 src/renderer/src/features/window-slice.ts create mode 100644 src/renderer/src/helpers.ts create mode 100644 src/renderer/src/hooks/index.ts create mode 100644 src/renderer/src/hooks/redux.ts create mode 100644 src/renderer/src/hooks/use-date.ts create mode 100644 src/renderer/src/hooks/use-download.ts create mode 100644 src/renderer/src/hooks/use-library.ts create mode 100644 src/renderer/src/main.tsx create mode 100644 src/renderer/src/pages/catalogue/catalogue.tsx create mode 100644 src/renderer/src/pages/downloads/delete-modal.css.ts create mode 100644 src/renderer/src/pages/downloads/delete-modal.tsx create mode 100644 src/renderer/src/pages/downloads/downloads.css.ts create mode 100644 src/renderer/src/pages/downloads/downloads.tsx create mode 100644 src/renderer/src/pages/game-details/description-header.tsx create mode 100644 src/renderer/src/pages/game-details/game-details-skeleton.tsx create mode 100644 src/renderer/src/pages/game-details/game-details.css.ts create mode 100644 src/renderer/src/pages/game-details/game-details.tsx create mode 100644 src/renderer/src/pages/game-details/hero-panel-actions.tsx create mode 100644 src/renderer/src/pages/game-details/hero-panel.css.ts create mode 100644 src/renderer/src/pages/game-details/hero-panel.tsx create mode 100644 src/renderer/src/pages/game-details/how-long-to-beat-section.tsx create mode 100644 src/renderer/src/pages/game-details/repacks-modal.css.ts create mode 100644 src/renderer/src/pages/game-details/repacks-modal.tsx create mode 100644 src/renderer/src/pages/home/catalogue-home.css.ts create mode 100644 src/renderer/src/pages/home/home.css.ts create mode 100644 src/renderer/src/pages/home/home.tsx create mode 100644 src/renderer/src/pages/home/search-results.tsx create mode 100644 src/renderer/src/pages/index.ts create mode 100644 src/renderer/src/pages/patch-notes/patch-notes-skeleton.tsx create mode 100644 src/renderer/src/pages/settings/settings.css.ts create mode 100644 src/renderer/src/pages/settings/settings.tsx create mode 100644 src/renderer/src/pages/shared-modals/binary-not-found-modal.tsx create mode 100644 src/renderer/src/store.ts create mode 100644 src/renderer/src/theme.css.ts create mode 100644 src/renderer/src/utils/format-bytes.ts create mode 100644 src/renderer/src/utils/index.ts create mode 100644 src/renderer/src/vite-env.d.ts create mode 100644 src/types/index.ts create mode 100644 torrent-client/__pycache__/fifo.cpython-39.pyc create mode 100644 torrent-client/fifo.py create mode 100644 torrent-client/main.py create mode 100644 torrent-client/setup.py create mode 100644 tsconfig.json create mode 100644 tsconfig.node.json create mode 100644 tsconfig.web.json create mode 100644 yarn.lock diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..cf640d53 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,9 @@ +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true \ No newline at end of file diff --git a/.env.example b/.env.example new file mode 100644 index 00000000..7946dbc1 --- /dev/null +++ b/.env.example @@ -0,0 +1,5 @@ +MAIN_VITE_STEAMGRIDDB_API_KEY=YOUR_API_KEY +MAIN_VITE_ONLINEFIX_USERNAME=YOUR_USERNAME +MAIN_VITE_ONLINEFIX_PASSWORD=YOUR_PASSWORD +MAIN_VITE_SENTRY_DSN=YOUR_SENTRY_DSN +RENDERER_VITE_SENTRY_DSN=YOUR_SENTRY_DSN diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 00000000..a6f34fea --- /dev/null +++ b/.eslintignore @@ -0,0 +1,4 @@ +node_modules +dist +out +.gitignore diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 00000000..ed84d7c7 --- /dev/null +++ b/.eslintrc.cjs @@ -0,0 +1,9 @@ +module.exports = { + extends: [ + "eslint:recommended", + "plugin:react/recommended", + "plugin:react/jsx-runtime", + "@electron-toolkit/eslint-config-ts/recommended", + "@electron-toolkit/eslint-config-prettier", + ], +}; diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..8a00eaf7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +node_modules +dist +out +.DS_Store +*.log* +.env diff --git a/.npmrc b/.npmrc new file mode 100644 index 00000000..2ced9527 --- /dev/null +++ b/.npmrc @@ -0,0 +1,3 @@ +electron_mirror=https://npmmirror.com/mirrors/electron/ +electron_builder_binaries_mirror=https://npmmirror.com/mirrors/electron-builder-binaries/ +shamefully-hoist=true diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..9c6b791d --- /dev/null +++ b/.prettierignore @@ -0,0 +1,6 @@ +out +dist +pnpm-lock.yaml +LICENSE.md +tsconfig.json +tsconfig.*.json diff --git a/.prettierrc.yaml b/.prettierrc.yaml new file mode 100644 index 00000000..f9711fb4 --- /dev/null +++ b/.prettierrc.yaml @@ -0,0 +1,4 @@ +singleQuote: false +semi: true +tabWidth: 2 +trailingComma: es5 diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 00000000..940260d8 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["dbaeumer.vscode-eslint"] +} diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 00000000..0b6b9a64 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,39 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Debug Main Process", + "type": "node", + "request": "launch", + "cwd": "${workspaceRoot}", + "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/electron-vite", + "windows": { + "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/electron-vite.cmd" + }, + "runtimeArgs": ["--sourcemap"], + "env": { + "REMOTE_DEBUGGING_PORT": "9222" + } + }, + { + "name": "Debug Renderer Process", + "port": 9222, + "request": "attach", + "type": "chrome", + "webRoot": "${workspaceFolder}/src/renderer", + "timeout": 60000, + "presentation": { + "hidden": true + } + } + ], + "compounds": [ + { + "name": "Debug All", + "configurations": ["Debug Main Process", "Debug Renderer Process"], + "presentation": { + "order": 1 + } + } + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..0ff36a58 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,14 @@ +{ + "[typescript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[javascript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[json]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "i18n-ally.localesPaths": ["src/locales"], + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true +} diff --git a/README.md b/README.md new file mode 100644 index 00000000..cdde5460 --- /dev/null +++ b/README.md @@ -0,0 +1,92 @@ +# Hydra + +![Discord](https://img.shields.io/discord/1220692017311645737?style=flat&logo=discord&label=Hydra&labelColor=%231c1c1c) +![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/hydralauncher/hydra/build.yml) +![GitHub package.json version](https://img.shields.io/github/package-json/v/hydralauncher/hydra) + +Hydra is a game launcher with its own embedded bittorrent client and a self-managed repack scraper. +The launcher is written in TypeScript (Electron) and Python, which handles the torrenting system by using [libtorrent](https://www.libtorrent.org/). + +![Hydra Catalogue](./docs/screenshot.png) + +## Installation + +### Install Node.js + +Ensure you have Node.js installed on your machine. If not, download and install it from [nodejs.org](https://nodejs.org/). + +### Install Yarn + +Yarn is a package manager for Node.js. If you haven't installed Yarn yet, you can do so by following the instructions on [yarnpkg.com](https://classic.yarnpkg.com/lang/en/docs/install/). + +### Clone the Repository + +```bash +git clone https://github.com/hydralauncher/hydra.git +``` + +### Install Node Dependencies + +Navigate to the project directory and install the Node dependencies using Yarn: + +```bash +cd hydra +yarn +``` + +### Install Python 3.9 + +Ensure you have Python installed on your machine. You can download and install it from [python.org](https://www.python.org/downloads/release/python-3919/). + +### Install Python Dependencies + +Install the required Python dependencies using pip: + +```bash +pip install -r requirements.txt +``` + +## Environment variables + +You'll need an SteamGridDB API Key in order to fetch the game icons on installation. +If you want to have onlinefix as a repacker you'll need to add your credentials to the .env + +Once you have it, you can paste the `.env.example` file and put it on `STEAMGRIDDB_API_KEY`, `ONLINEFIX_USERNAME`, `ONLINEFIX_PASSWORD`. + +## Running + +Once you've got all things set up, you can run the following command to start both the Electron process and the bittorrent client: + +```bash +yarn start +``` + +## Build + +### Build the bittorrent client + +Build the bittorrent client by using this command: + +```bash +python torrent-client/setup.py build +``` + +### Build the Electron application + +Build the Electron application by using this command: + +```bash +yarn make +``` + +## Contributors + + + + + +Made with [contrib.rocks](https://contrib.rocks). + +## License + +Hydra is licensed under the [MIT License](LICENSE). diff --git a/build/entitlements.mac.plist b/build/entitlements.mac.plist new file mode 100644 index 00000000..38c887b2 --- /dev/null +++ b/build/entitlements.mac.plist @@ -0,0 +1,12 @@ + + + + + com.apple.security.cs.allow-jit + + com.apple.security.cs.allow-unsigned-executable-memory + + com.apple.security.cs.allow-dyld-environment-variables + + + diff --git a/build/icon.icns b/build/icon.icns new file mode 100644 index 0000000000000000000000000000000000000000..28644aa9d97942c50008d03bc0f93505f7824737 GIT binary patch literal 85649 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%0A<1^8SaOgU*xWUdF$I)6@mFd#tfl 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 ZdSl${o8L6bRKocdn9XfEmB|19CIF~$n4JIs literal 0 HcmV?d00001 diff --git a/build/icon.ico b/build/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..72c391ebcc280e8c34ec175fabb4337e34804b3d GIT binary patch literal 123545 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 U=TYT01_lNOPgg&ebxsLQ03CV?L;wH) literal 0 HcmV?d00001 diff --git a/docs/screenshot.png b/docs/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..b98fab7565ee4ee122e6268c83879c6abb90f709 GIT binary patch literal 398943 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

d^3p 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

e5GRAgI}9?Ej4&PmtwIqe%D^Zu5= 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≀Tq5SL5 zf1ytzB4TqNeCeH0dV90}2T3!YX_aXa#$M$y8JCW&-COqIMB~oy8T0>W#5BL0$J42n zE7Nq(y4gyPF>T*Zbv^6)1BvlU->MQWeczyba$?(In@4OfD(jnt9)(@sA7ij5_H};g z-+l?Xh9`c_&!5;HJ3rNnCnuz3t<@p!hM0mUaox(!?CW{Eo9dD@mJ58jm>53UblbKM zx14|1K9-D+){MB(kuCox7~HH5X5|ZO5I*_E@z6~k$NV`lS(B%)lK#oLBtF6?J(PE; zazjz(3r}^uiH}WNT-RxD$zGjtbA5eTOqSZY#Qc^SZ;tiJ|9iRoGnen53E|eK9<#IV z*wt%z?dOJhYFf4`v$pep-3> z=+}Y^4?ZhpTu#wB_K1aZW^G%>f14@mw_G}sKJgUy8Qq#Uod+NB{EL~fDWS!-yV*>< z_{nvReP*B25?N#_za9@d{zyq|&nD*?FJkU|N!oqv%J+yaeS5oR+wv0|GhB0jPMmT3 z?wN@ecRG(9+n03ljGOP4;)T6OFYWT*viI&4n>+q8?I&J+GRb+2k75_T^NIEb3%m{zm zuUAqI&Daq=ZPxW=Zw;qdZJhD)qwiU}uPgoEUfn-WxbL9q{O((oGQykRg&%uumnxrU z`uNwq3w_@?o=>Z?S+P5OWwPy*{m*|y@&CE;Jisg~Tln))KiT}HTlr3`<)6GnCvc9^ zrntv8%cl1mp9nc=xBunxsReH;Oce~DyzSZYdamNidA1V;wr2L2UwpUze#%|zGbb}% z?XH}hX~UbfExX-ELO?^}@A4h74+^KSH5y;5=xcYD;J6}sGVPB=+T%F~VkW2e$G;Sp z$;~W|dobq_w+zFM?2C(+m@WUJ*x|osN8L;B=$}3(d$gPuGqF#9$&xyMjcGx)x7nYS zLBX8{(Jz(enkKJzpL=Zo75{&47ECJMn)N7cWvywdyzV#YbCVO@U+qyg3j5qWcgeoX zVRsYQENjA)pTd;(s|l4b|rIOpE7irBcN@mk8o?somU zUp*r6g$FK}?+Rvimg%}v=anBc-wHHfUa;yw9jnF00;NwpkDuRHoW*CAcOf&e*#5~* zm6`5ePoz8-Hqr`SkygINpUI?X^ZrB6S<)}e-u=kVX3zPnM=pB)+gI`9N2%Vk{A0yz z>+Sac_PLW%^7hr%yQd#1Ki8hPq0sna!ZObp><;VmW;aZGbE$0J0jr5K9<~2Bk>q-~ z;<}&Jt9XxnaXV(;_c+VH>#Br(mHvsDF^zAJ?%FriigEQ;=6D^$3B494w#}-GJ2P4M z?2YKU=Tj#OOaGjgo;cY?X0xT`v$ZnkF6IBc>t|`XGm!n*p(H`0C|UL6O}}r?k*VG) z{a0`D`j2N4m-MmkJU+2*@!M%KyQ^#r%Cehe>^E$cEZpFFy#Ml^*Rk(!{e89mUzXiG z2J4bbhVyr~n%ftxO_u*&fA)G|sATP{1HXUx=2r#(d-ccu@ACg9*$r#9>DK4wwa+Uw zQq!os_AEkjf3M8BtnA7t|JwJe^J4mQv$t(c%id}!_B(FN>SXi!RGIjk4>Hw}Pc8OD zFzghp*GbJQR(idqR{RiO!l_+$ zaK)lq`fBCtqJ>w~8fny&aliMB-@M4G{N3X9HF0l_EkAem`TC>mhd=MO|6M7kd`3j| z-ICqC~pth61#iW`$(PcE-AfZ>n=UNxZSq*s7~F4=A&ytbMrIR%TKQGUp!U( zB;Fw)a9Sb6z9kk-#J_MA|m>5VNSB_5kvOut*wo= z$KSQv|9KeG^5<*(|F3r^``gX@5N&sC-)xQN;%0sP_ugNt)IGko(Du^_<=y9No*8$i zA6a*E-N~#ur>_}{i8&qodMC}MU-lgDV!zoFtMZcf2kYOS@%`?J>vOX18_sdP-p6e> ze~_>Y%6D9c>nWm`5k4c-wPTfneV*uXXZ}cxL|Mm)l)}2CYx~l zcIEc{9^cV?Q$YVL&xPs5A0j^oUwd{))TwvVx$>B;vrD?}|FP_w{#<}<@4ceJ!VmJB z&F`nyi0Ma9HmdoM;o$e_g|6`oQ{h8SD$2QGk1hG^W?fj5{qn%#@r-%-*v@O{-tG)+|}UcwgCz1L}OW+mau*zl4lGtYk_LIk5TqhFx3A z)L1!x8b(X?@`*qA>2c=#5<|reRn`l##4-;!-2JlVi_es-Jumb>38%Fx9SX~O$><%q z{KIjRnsZs#5535$DLV3g%DZ>{{?nwx=iRieP~FEgv%CLK=p-@mZy$S9>gMF1IV`h0 zBGaHSy>cW?`yKdiIZ@BhrW%8r&!gH_d<*FZTklcLC z)ot~rTk?-(E`{FCO6U3d>8hLTl;n9wSNGR_S!`W5qb>gAvP^y7hq0fM`~rSI(J zb>_E>(}lfnci;c}ZjbO3*Tnv>y77kZOjPC1dp`^NuKRO_@Gs}Hze4^ye=DDS&hQ@B z)$4@^*PpzgUB59XdxQUTR;lB0uMKayzn!(mbI~Nr=QC6OF5WQP)iK)lxc`aH_>KN+ z*zza*c$_=e^XlL044^iE{n3f$^J<->ihF6AS}7eEFKmUGFhahNyd*LBHd#@-bblP>Q3 zv~_*m{BM`j!-5S-7omvjROa+yZXIYYnHs`;f&+6)}3;*{+YZo;>n@d)H|uC zBEE*#@7Dad)^y_z=`(*nFV(Njy!HOc)@if%SG~KNwB0(sNFn}xp31!n_JXsQ_tlA? z>`yNhI{!GpXM;rjQ|-E`m;ZlRZojwsvGn~N)lVk6m(A}=S1{_czS|R7yxP*h@7V6E zU!*m^oro#9GXLoD{+cJsl`)0)9;|bC^X0nVzt%-pQvY~a{G7ype!oh7MIU3a$#>H( z+4t$M0^hg9Y~CxpDY;0E|7~9DBX3)Go|JjV-S2i!y?<+a;G&g=Wyk${AJu1P3R|T` z8+LlWnpzRT(fG6Fdh08zODWmUC4L|2eRg91w{=gn z#WS()yGdp!!E6%NTICID~zdrA@ z-09>tC4OI)x{hExm0wD$-5fht!?}x&f8s8vK9r3cF(y9)^k^?E4eXosyy+ z=j@2&*&&y^?27m#Ti>ACLa4>u+lAo;#%`v#+?PHEwp`_oOG=Umb`zZsn4y zAu~&db^VPGx&3By9p|q)=fAA`CZE`kEUo^4pK@!D-QE8)@uXe$%CC33vum`tj(Sc%X|gu9WJ=z%;HHap+@VRPFYeYB?z?sOgnjXM zi8q{^&e%@+_u$=jzAHY@8_Vv+-rSJ3)xvVomRQ#7I+z6x=Yd^e{YtH&{SF5CNGT-sn6>+PXPnI5LZQwjV^ZJj^^HyBi_WxQ! zlEdaiwm4^pi=Sd#PbIIts-gJk=&byU28nmOzv`;3TypH!^w$}YyB=KJ>~TYFldgr8 zxbWiHWXFGrhdRK53q9;x9i&fTG7me5_ZC;C&T`n(xxCAXY+ zUhc4Fj9rjm$Q-S~EwSZukEQG>?j3ioYO+-}`YL}r%x^!Z@?-av^sQF+Zr%T+yzJ|O z_~@_d^8@2^^TX%QI5u_Pr>X0GB!3?``h4q;C+{V`OqE~xZ*k1O339W$_|G5P*mh^P z;ZcS3)adi`KhLT&W|s8p6B%LN6Yse*ZtOX6`FrN*TDrRye{{Oo7l3EO!Gwy-I?x=TO(?dD*;jo_phc_HomlcUIQq z9hcA-z8qDMck29}AI-0>&;R#JM9FJw^}CxD^K$>3-gQrY`Yj*tW1JBu=B(`r*)U}_ z&%(PC_1;`wcXsB9R<+za53ls7Di@0u;h%D`)Wi)(K2tgB~tSidml{$7mT@5Ke>7R|USrMp>u#$TEQJM6OKzeOgjc^$uIrs8Gy z=#{VY)q3Y}Zm_8{sVGT0tnKXAEH!_tMb5$Xb`P%3=@oy(Hev3+BnJkb6>_qUJ`)b8 z{|~zAXFu;q$r_v5 z%HP>0y{i-xt_IXCxg}yLUvzWTx^9JeE!`QrXGeTBx$P6_^H~0Dfp77h>}M+;bGbf= zpC^0X#k*sR_MfupC*SxUC;mia?xG>Y^(aaFDY}5v^JgIx8wG#$5NV>msicP zdmQjALTmkeD-EOb>7j9dSN#e5mE@GI7s~hV?SszahKk=T_`WRm`*+mqxKxkL<7YQc ze1E>R;=S+hwP!Ov-RO)zlD25_dvmq@Z!g3+v_@yoJ*Bkd{M-WHYjaH}n7yxgdcl3p z@72|B-_L)R5RG8rx@|`7J!-b3L=% z%Ox4F{$8IXF!iD2l&$N0bI%^SYazRG$MTe}`E3spFPiO|ystadT=ucx4rz1O;+}s~ z^BD4O@7kO4Y5pN8yZMEdtOj+nrhe=+zHq1bS<^Wiw%xhgj=soSowhT-`rqVOS^o;l zf13Xml>ZlCxVoi6f@jYT<)i-stXDhb+WT{~?0WGlT;|U6xcbBGXUlGW6rRp__1Pi$ z%~K5--^8RWS-*Z;z$|0NoZIt%K6CYAZ{gi6SlhuZSHyNJO{uMJ>-cWacB`!0C;e=Gvr*rl4KJ!rZ{{yq^5lXAlhViE792MZ9V<~vsS{8%<^RGtbKAk6 z>93yMU^rx`ZkfH6d%t*ga^hiD*5fx`CD`^YzbfxD@8^jp-FD(`I(Ao{v6`EGJvTqA zS$_8UFy_bE@xP;HS!|Rp476(NDh-R5uWOaa`J`@Elr%x#=8Fxlj=_=pi;`ANzrX0# zUCmP#YuYV$^6xl3)n>=*)4OLqkhT7HPxN(?)TUMK`{$muT6;7hCMUc1@7ndrpKP7~ z$sNBHA-v&5zU_T}9x>5vvyR_h|M%AVxBGtY-fvyMq}BTAfyL9Fz1F|fZ?SdTosBV{ zrE(wE%3Hb}FAnso`}6U@txNUKt?%!w{`2wp=XZXeKmK)*$y!vSdtBVfEv|?0m7Cm` zrSl#K3FzObzGIM=do{dk-8=1)PwjuSj@`KKKPQlX{n@$8Oux+#-@54Mz7;?3zqEND zvS%aP)cex)_V+j3C^8n4oh{eDZO8vN#vgBrOrD#4eNW2#i@zR9S?@bJ=ih;g&+jlj zjgk8>dG0sGNRz*hV+9q{+jr)jy|d%S#V^^n9ykZ2{+i74e(~z?sEIDfz;WTT0R;IJx0wRB$_wB1%S=b}5Cd{{SLN{Y* z+npa5=iavHK6o&Yo54R}7W1XPBS#G+>gFBwk&za52+Pg3c_XoB+n24q@8W7c9cpWn zJ^SNC@BFUIry=`g3QAaiMRuHLw2R@pXmh#Z+N}la;$>z3H!M^%n5kxSS5Ee=kzZXM z$GoqJHEq?H(q^x|Okdxf73#ic?NQH@p+C84Jx^G`q&CUBgbKUsvf0VsHasLCe=e!7=AIBrsv8f$r;%2$nE9~jATde;w z$CB3{xm$K}bUSb1)IX5->2*ut@keJ@Ut9Y#eU9Av$_W?iPDd=>!QFXS<0NB`oAkdI zn;v|8{%9eiit7AR<|%R0A8k2YV7k$g>%wWb-d!mHvnsup@71fx7FsEhYqft`FpKP3 zVI9c`r`V3uRfG3Th~sMl=hjmXUn}O?KwUAdA|+v zcPh@F)!oi@%z*_Rys~d%)WHd*E+>y!<~-y_1rT)9cy2dp8Vm~ zL1FoM7SDSBK$bvg( zOt(0B`HJW4FCEwaOgXSxQTMNOcHOL&fdOE{;mG(`0mKhiT5`Is(%wKzi_4XgrWRLiQ=nQ z_nDcVOMTtz_%5ONyIO7xk9+)g|FhL+IP0?-V&w0~2j%2koo}%<(0P`{{GVsiKON8f zG4+jp%|q_X)t#-MwkBUGbiAH)Jz{Ho@v5TV$6stTwEJ4~I{N;u-&5m%PCe87aY6Ft zoA%t%zpZ`Go~{jiY<*5^@%tHH66HIBbF4@At*hX``>K z_gnc-)f-=~nL5S(+lCJxeeSTzvL7|MGw1D*=vQtw>>qz>e`KHhqr7#!Ub(QYI~T)^ zx>nKJ-;WEM<2L)xUv@51Y@^YBgKPU%fA_dr%vQiL+2$N~pXl?~i3O979x+G|eB`F{ z=p#R4{K0QG>u)q2j}-P&>%7^x+#-0v%E{NhvfgeBTq3)m(sKKhv>laMk$1lB3RcQ} z6Ff)C_?PZEpUuk)__uKKtzu6-ZId;3U31W%){28IuFqxr?dJAfyWAHxzi#5ulpDnx z6(-*a2xT}S_5NQ$%;dowe4r~de+a~xbW9PVf|fecQ$DBZ|vma>!0Iz z;REBEvqe%G+qSKGe0{}6=X|3ZjjU=$Qnh9^nI~dnj?CX@$M3fPR}#0K^uHXjP0vIh z!DgDzt#j~OVlny1&83r1W+Iyq)uBiu}Ka*1MQ>_so}Qi&~n= zGa=4<^_(58C;DG5Et~t;%FupwqshU>xPuE`d_H*pZ3_IIbL zJQv=W+r_LqI^!|_lat4%dOw?Uc|woBRLP>!IIopIPTL#qa^3t}t>UTE^tFCJ_FmYX z^XmGmES+D+Hs1MQCLVTTBDcQYg`LhDlQOC$Lt=`H9=gfxH8Y(TZ|=T)ZHV>HiAHAP z;ahE8zFudm%Q1C-tM7Gm-M>>y`fkh1tcpK+jjc;oI(b_BY5S?u{{%g@5Gz(tpSRN^ zPGUVY_DZfPCAx3Nm6n~}AA^~-iSo4$$q^*>MVJn;L3a{n99eFDq&_jBDi zp&w?p6=I zyZ&gFL4s+lODYrVd2gSLlZ)RzP7}T)rd_anhHA)?nPLwf&iZAQe_O4p94UR94KUO)zR8n{>f2M0<`FD4v^9I)@#P8Lgapkyi zPIcQ!vn$iQzZk36OlW8PJ?Y<-po^Aoo36_Fo=e}&+0uIRmR4MAa(#-ccyi9XtL=N1 zhp`JD>N3Bnv3|!7*FACjj!KCCXlQA$+9Kxj=ED<%9==j9M?=rJom-TBDk2m9mR{qi zv`~usy1uMv?BB<40>)ukeoO3E^q!Yv0*!xa`UMbK%;#`*sON zT>UY}M&0S}@tS~}tIid?x|aDhV!OrmkQ2%pYBtsEvnF%A*vUNaEyFT-wTSZ{Z?$Ou zoM3jVxM88^^t&Oo#`~Tu>52LxTXyrxtaHNWZj{%4nmPI7i__V^odS>N*_D3eh&>xF zU3<>^ytUiM<2xR$kgt3?-SwdO>4?y@-c{?K`S^ZJ501;t5C6ZWRkm2_v3C2VzNI&e z_HErE`Z++J=hf4>OKrqI-F;tIek#J?Yo6zuti#8Xzu%}ipPYW~$d&%WO$y&{UEgO` zZ+fpaDCb%q=acV6$#=f~Nd5ESTJy%pT@>a_)%-A-PzPmgEZcEwCTC8J2j{IQ_!hd&Gaw!FDKQ|4^w`n1riJ(I8L zSiNQIOJ7pl@XUIz-+|amvMX&v)vp!rW-mK`zvsF9eewF7j(FE6$Me74DOqn)bGtCs z$oJ1V_K9y3mv0f1oszm+|5x6L*Of|ty>^rZw3H~$t~_!%VOp%oQr+SWOfTctT-)_V z@6+7ROYR4+V)*j(dd9`=yV@)r+Gl0eTHn8OtNPW1-9IhvHE-L#@88iXsi(Upzs^5a z{4uaDe}&GatH-Qw9CZ|D(p=xnaH7>oOjc54kHw8$FILQ-ajV_))&_@8d)_;*y3g25 zNPgbd$0jH7pgKIIMEG{i5r;b1SnoyA2TP``EuT^RQL(t=S>&0`H`z)zDgQ|g{I}}V z$xUsnw}p4AzcZZoZE}r(#Xa4>A_2{>{O6}7_1><3TXj~wc|!OO&pID++jZZaj$;?>*6LJ!J>?tEua2p6a%i zQ$V&)Z1%h3N%Gmx=O#pR$KUz+ZPxWYY7appWl!qV%(EjNH?;2kxq7nv%e60V^XqJ} zzV<4%G0CZR*(1=rNm5Z+V5Uvn>idzk$6jt+|Mo|XLsG8kD+jqh9G6eWecN<5x!-o% z?{)8gt-E{v|DW^E?;gBoYyRtT`R-Xap7Eyo^xOS<(f8L+_vUuF{#$p~)x>GUe9N`< ztBl{E_}K5nuecQZz{MNOp856OnJ%OMbt1zrkFPtYuQ<+N`tUEu|K9wX$7dApoKChg zv3OnB!~1^mpNU&+d=1PW-sb+ub0SmiNrrkeB-IgH6_tyr^Cg*%&Rx6TeE6+aZHPb(AhMhVXhx_dm+-ObqGyrkxnw@!+T zmS!v4k3aT$73#vaZnENYfkhktxfcKBwJv#e@#D1veMgqu+G+MI;Xq<`bH=_8rgpU{ zCLd04&--dta-xUdpT}^bwDzvGI|J1FncbwEe3_(61K1m6W=E-fVPTQCW?#s^?Zs*t zS?PTy>N6Hbr%iZJfZi}tCE`i3$I+S{I7JDf8Gm&jk#;R zwP$xlI^<2>85jHDNzARQmX=%gyKR+UxovUGKclaoRlKg$X2ocH+rIj0OvllqB3FKV zRhla^<^H-FzK65Kugu!f!6ZA|Y;jFD`{O-!Nmq9@FizucO4`=FV_U(qh%fu^UXkgT zT>kn?mFD`N*JIXf{iVC=yz7^2ONG@DwdcAuE!|AF@U^;w(zJY{%x&lX#;-*KCh zYx*umoerK~c;DFW>*I*EOW!{ZtY81R=eA)Kb82bMt5t7iuZ%ywe+9q%<&8#{--)H< zZOy4!YpFHIeCJm2zO82Fho)8kxW#np()z+&J(Xo8Tjo6dVw7NhbG~=)KJR%xQKu7+ zR;%*$i5TpgZGKy*@gtM%+jOf%hIZR3&i=29>yCUAtWtD&_0qU*v6`p}(Higje{H^T z;*MF}Yqe*yKW2a5xnjo$s{;ZGW*oV_%c^`Y%7&;O_~#wEz3R;Iu3fCTtJ|v`&ZZ?w znze4-4g$?=%OFHhL_Ya?!!~eEMrSzZyV}pp#l|9;L zS$RtX^o~V}6n%;+&8~g(+I7G9=jeZ1`MxdO+OPj-t(n1z*M`t|5N>c z%6VDqck`;gu8y~TIia&yJH+9`F|~C?$G(FO*mzv`(mOutNIB1&;P(xy&R-IFY^3?~ zqQ$ox9kzD+{iWw|dR8CRj+?lxhgJ4=#q%U7xsRK|HY?w`)KYb^BmTGiuM6#E{WhOG z?BqYKTt07B-*uCB`rC!BKVJ6eqB{Tkn5BJNzVCT%ySu;s&*PQJ3#YW*U3!q=Oy|S)ch36je?uF&K52qI|U9e)dXN{Tbe6_sC&%*i6_Z;@N z*I$`Bt@Zhq`ICgJTiYs=I0a1ZTkAYqm{DNNn|Lnf_aE!!#j?#cxjSO(-`za(_|)IG zJNNNv+>cAVaO^tMmhipJS_k+J&scH)`vd0P>`j&bW~LVhHmBZ^o_OGE1>cj}jRCXD z7ayxTWwWck(Xi(FcQ4C{>HnWyKmTz7Yu7p74gYWTcY02=cB_AObis$2tRd6SznbP= zes0Z4)vtSxz39@9SW#Sam;aLcoJm_=7;x`ClDY5l#+-i>AC&BA$+uo#sh;y7-Itl+ zz!h^X{oee8?%Pvud@x%2<@6`E*g>NdQzQ6Ybg2E)HTyUArSUv5`SB|G)0+K)=|?y(#?}12m@3Wssma;1 zjaSy@;EU|&@F3?s>HR$N<`rzrVX`6?CwheMKI!GRHQV>npzgu*pA@&sP2VR7Cdw3pZA7-=;6N%Pg)xQe1xZ+3wUkeT)0v+SD$$jyBoo zB$>WZH7A`t^VSA~PFt(5TlEFHOy=?USqbkJInNxL$Mj6yi$TXlHsH?0WziN})~{~gX8(H=>yypu zI+rpVv&4FnLd=&;?YHCJ(yjJR>Zt7FBNH4AwhQK6)2TjwOVBV_F>TAs9g>Vz_s>=> zvRD$m{7P2m;(rt5JB|HIo@yHBb|~CzjTZ9VbUTWmu~0F+V|+R_tf|)&wl7X@?kQ2UDUAt zv#H&keAWMFEEzt%?_)d`zu<4jtYeqcW6o|<%{XPb^6l5Pn#P?O=YyrDNX>P8-TF{+ zS^3;wc_-)E?D*W+?I&jXVCUvjcCE=9k3RpAcsgaO_0<@bl}DehQ=Iph-7oi7#r3&X zPmVn6GuNoQH*w|JwLu1w%xj-LT~f_GfBojF?NiKt<^P=YJO9tI{FFW6dtZfKp0VxC zL09#6V*N4FuUw*6*K3{X{{09vC;Uyb&MaxS|Bda}JpaC3aO8oXZBn)R6N&a)nzw8>;&X|emwGSAMa&$cwX^s`OJx%gT2hF8jDR@dzPe7Ts%>ebhz z?7qs}nCQp0{-SEP?=?PIqY-!Q-oihP<)1V?LvQ~5Za?Ap>#5p$>@5oqlq`O~V^#by z-5EF6vbip|*m$5v_jB*`-;eT+{I1L^II-?|_42bU&;2JeiQJVwfAsp|=D5!9cc!j> zdv4dyfLAAkEBf!86w=(WCHPjY^5k!Ed6lbdU8H^Xq$w4AjO2PbLB~hTtmK%G>5obQ zu5itH4acK1@_a2mzWLfC{;6X5(!WdI%(XFMT5_<*tT){1lHjG{_@tyg7ky^dzB9b) z)4L$~@$$kJi{r)@&M3#G{THiy7P$TB50f|g3**;3W0Pl`mA^ImZE?n?jnAGXzM3Ut zldqx{eEt}liq)m^A1^i}_nw*k=fguk_cs?EZ$B}zy7=nD#ly|sm)WZyYfny6XDj=W z)!)0*m%Ci?blag8!3)=C*qzI}#kEehitW`R1?JL=0oc>7yVMpvdMX=+^!Yh z?eCazB>(z5-@Bvqp?Cbo7>Ngq z$@>ED)ry>kK63GI;)>j|7EfK**jMg%kLeF_$cmN zzoFx3(%-}U_Ip6XrJ|vi3k$bj$@F@|`X++=)r*fI-=(W6-X05Cz2}?z?&`VUC1j89 zP~Ct1cy-vnWZ5nEXPjJduDg2XNi%iJLcZ5rE6ak?ymJ}7PFj7fIBHezyPM(I!-NqwQ%m$+`BGfI-Uw(OCc4e}d;**8$ z+YP?8OtUi(eIQe_OzfTQ-ly`ny_`7Z^>5_+61c>UXzt9L(t>^Olxrc!S{^UT)% z_fI}-|Deq{N7%nhg!6;xoNw$;bj~P!d|exmD`XMRF|YmlwUC`BzPz)1eiq^=@VQMQn9EuB2Gb5|}T(*vZJ+--=$Mw}OzqtP6%7OSru6Z^Z(QEfs zeO&rz<@9j=wGp6k(Bl0C(}lYuUSu3GT37UH!JbFSzF+$I zb+b;rQCR=KbN24=n10t4zi(a7E;;vi_T+xM$ink}jBib{;>4F8xq4mZLF}KX%c1gL zw|CFFEN1#{+P{dOsSmGI_$V#s%nfy!Ul9|q@#3Bxt11fupFIjV`bg=Ft8Ivo_l$Y%p}I`?B<3M8~&d6YblQg8x3a zF2$|>r-Jk64iEqR*Y0pX+tq)hNM^d{Q6;yx(vu4n%bU}a>m4nRW&Qhg*E1{c*c0uG zI!;yUDpkiFV{NZ(aSxaNwzcw&(Y5V+p6dSmT6f$wDRh5ueI(iOYd)K&@H}k`^gpGnT^ZBpek7+r= zXFKJq$&*``&Oa>alAYcAW9so~lUa&>1r#@j^Y1fUd^_rQ@y?jV5=H?sOEXr<$jS0% zePUDNWbR^g^<$pBZ10T|Cpc@TUR+!kRQn_|)@}X~ z;AQpcly&T!xmj^@CR)`$P&-_lp2s2cGdqSedB;qnKB0xb#6Dgry|Y=Ns-3~jq4GtT z@k7(v{;A?Vf)P7RFFS8~ef?2o)JOA!?2n(XpTF-@j$e=D@u_v!C4OvitFq@=wtq(2 z6H6!a`K-_1T;*npJxBIqzv7m6xrv-u8#VzjdZ^RT7U%dAC z?4M(Q;yvcw`n1?!|4Z|~%kHMz|Gv3qu}WFyY(UUytRck#2oHK&@yFMdexn)W{X-3IR2cB$U7p99|u zbjLNbZ@0W&AnPA^czX2WV-J7!yw!<$u9CG|U59yo)a!Jq*l%kcR~{Bm^67NXbvnlM z>gtV2orc?vzq@jNYMQxYdb*_i_pN6Ao1UjRIqpt5tDBlVfk&|NtE%;ntvc5atbV^H zUC)Hse2>`j&YSPEB}-c}mG-`$Dfzwj^1Aq_Wx8=U(%(*>^7qL`?YYHst3Q`sbGs8K zsl6@LRD4Th#Kow_oepAI3k)slJ?qYWI5RIhe%U^ z-+ZThH5cbvxTS0P`;P9pA2%H5n|F=tTEP*YqdOQf6NJ9{xg5Ar!m{Su#hE@O#S?xM zy;eKh@^bP7R|T_uCf&i0Zy&!uzTSTSZ|?ek`~7#%|8f2Qi+8uKX0JTn{_WrQ|I_Y% zuY3PJ^}o2?htIqD{~WSE^)FICzy7y%x&0?)-TEB+&o_^k|9|lR-|vrCSFK;BEzaHk zss42Iy|N4P6YPJm|G!!>@BHdA`9BZ-Z~wh>{_pnA*QX(d!%$OFUp_0c`sGTR3;p)cpn$ zjYii*3SOyvi;MlHJWn(6QON8)leJ4vJ$=tsHPf>3=rPu%;#0RQ6^LQvkD zsN&o&>ucV2bF!v;hri|fdbagwOB8$I#p`K4Z!&v0qw6*tJ?j4Cgj@WR_FFHK`Hnm& zo}J74nK!@U@Rko{9P+Z2&D_tV!oGqBE$=kGylb00@5T-bFW$4elkR54`+WMY{WCk+ zVEX#Ht!KAyC_VGUVgB2^>?^(LPM=CMzZu(yIM3@z&$;IGbJp4Fd!Ogs)&KWM|5@zj z2Un7V_Y2#`Fy6m?W%l30&twl?5w_eKZ_Vdew*NfuZdy8|8GA3`e#R&_%fG}w^e^GKBzi3^-)b#y>+~y z{^`w(rM-VYeqC>Wciu~hZ)-2Dy%zqMJ-zCs^JKXh{_&1x+h>|d=kV*!*xI`4S*hu{ z)kjiJXU^d~vtTd#qEqv{ukTR`mwSaAxY_{>=<~B;UH5U%$Rj@QSCaH}Ba!4jg>1^Vb}|cwD}^;@6smh3YC+ zzY;RI`+22{9v{AZAoVZ5^{k(l*z+$M$Voe}T)t@6=yOEnL#Y3K$CufQUQB3AOnSBD zXq(%l#|J(ZD$8|u|G3!0FK6~4Inb$O~A-bd%`jK+<%2ScAFSZDt)T|HUF=8H}}N*e`Md^ zt-b&K?=@M&4Dq$^B|ab7zd>}zNuT!e`g2Zt`r-4ju~*%|-{;lB8~RTV z9{vB)*{69Tm(i)GyXU1}u~@vgdWEH=&FOavZt`cR{8xOu?)B#@VH}_Bn_i`_NtKoU zVVGQLXD6F?Wcgu}!mYyhm+m~rKF5U zAA5I$)9WeT$HSkNpO(;@CAWc*9%tDC<%@N~^@w)?J~6XTD%O>eksK4Z3d@}<^?R|Jkt zJKx&#Se(7_(mGBdPU9LAJS7W!7BDV4zx&i7v&1FA-_AUJCQwl-va6W;%TJoS1a($xaxC&XM+J>8^ez)OI}=_V!rNXlD|>F8y_E;q**m@SMz^eq_|vi z|FI?Y-fu1ds?YGl`xAl+4zp$UUM}PlE>G&Ie z@9zJ-dDHIs|9Ac`|9-)l|LwoW|DT+H(%H;F@4 z#f8-_Kd}59cQoU9x$T7#6E`fms|Hoznt-ZV~u?OGrs&MQ{P`S z<~5bbIAiol*eqT8<3kaV?m0{DC_P;?$CJ0bU_(dH?bHX&<$-f%osNpXV|uqTvDeNM~DqHuok<}cZ&xn0yQxxQmnDGQDJE&AB+%l=PO z*ZX`{$vS0tPD#x2>Yii&Dqs80J+QQ}U9KV_trY8>@eNdH3Fq>dCb~o|*5j{Ql!{e|qi7*|Yk#ChJ^j>RmtEIKTGI#^ax~ zKcD)#^Y-!D^-qrP?2|vfsIsTtw$7*J@dUTK*R$Tq7X8>@5tsX6XL!`v+jA<{SMJ-c z_Uc`!Rp0h`&Oa9FeS3P@-+r#W-QkGi=Xuw4=De_|TOnHa{kW;FyuQE9#dkNZ-~dsmnv)oZX{%AZ*Dv7G3E05wb$5p*4)yW@h&tadxq;>S+-5jOlHU&u9A^W z-n}K0^Tqz@>wm7jsPpa8e$k%d=K`*dCxT61Ouwcbvprt!{O_{9#o5OWN3%akIsZ#M zyL8Jgv9@^~0frCu-nbAhbN$aDmFw)c+dV$d<@21f_u=zd(zP45D)aw3ap#Ppi>^c2 zsqRk2L!D|16hhD4?fCFxqD}9C6CdD5ZO6%%n7&Ndtl2F2crkOk(*<$uUE8n4{o7Q@ z_-Ug1e%pLk@rjdd`7{5^|9=#JqxO1v?fESXKg<7}yMJ!Ia(4L3{Xdfb2c`DE`rjx2 zH`cPV;?+s@^6N>P4jg$0QZtvk-JP*y@%%s8^_AZ%YEu8)|CwBGqv{iMZu0+G|06%1 zKlFd2{O^w~70+hozxnrN{=eXx|GocT_CF>Ozv=hh{olX8{nuRo-+xKZ`t<)N?SIOr z{a^q8N&Lyy%PFT$r#}uC{TWr7YcEy$>0Gn@U-`c)D>hgy|DC#f%`d$`|2wkl8`3#m zrm9~koH_fmBxpv){(O`472%ty%TA>%f7JK1VR`6mwVllCO?T8zwrqCyJs17u%p2=} zFXq>+jFvLdQ`)q6@m9~2k{>0VKDX}AczM4{T1~ogU%jF})A5>XZaYd7cc-o9xlrCjY+d@dTPFExy7jBOOAGgyY9HUY zY<1c9r2iLYRMhV@G<)69lk6%d`={bh!M88RLw}fN&ik8@EY@Nl9estzaYe2F;^Vu{ zPLo<&v!d#?SmR}zDW|pa%ZegWYmUvRoalYRh`oe0eW|tne?}AOj`N4^|1FfhUwr4U zzLlVFTX{yTG{7u zAXnh`fbBBYu`S*Qo^q!ZGn?Bm_0>*Z=seSecX7Gf#tnD#BO5vW_x|{_x@6*m7lt36 zh<)?ivDWCSal`Qqai7i>)Mr$tr#*T&@xtY7u4RH-BZTv|Ps-o+an{!CpC(7rCjQpx zb?ZO0-1+hOpE@3MBBYf!9CdhhOX_v}hn%+#U4ACl?mvhvZr-H0c;kVH+9T@_L{~Mn9>!g33())rx^LAXGc-vB~>PX-mvw_nWG1_B^4?*X`ocKdjpR;^6^fP)^_|ZY|t4 z``Nvh2L4ZOy!XkPQ?dNN?mmOgRlILbA6b86`c-@Xx*JsoCyNWF?s;+S<9)Bb&n+fp znVpZFJf;e^pJx+4t7koZ^Rb8W$5+j@^tgRAt~&1a4C}fZp;q65E7{|&z3S^Zx>~>P zV|Or{47*N%WA2SgciG2!Guh|qeKdX5Cx7Rl$oMq+B zr>-&m_E!7TyJLSp^Z(m+ZMXjV(Dlc{BWlZZtL##D{M&o5IA>8|xQWyIEvEW!4rI>v z>OCj;;f+|~n|0<-&#o(~Nh;{u`LE_QW5|TpXKu_%f6@RaU8q8`0xj>Ij8fERJYE$D_$Rwc~H8^;#m9#gNe%a6(<%Y z?|E2uo;~w%=gzp2qQI$F?@P>&mp8i}<0AaSN9urxtI(8dp0CgPygD}B`Bk9#C*^B) z_EkJJ_Ii&z-ad|a^}3L4+aBdP{Mua`E~PcEUVU>Yt?#PK*=2jn zHYl+F2zhCG>nz8YU%xMT3T=`7a`~R`JX5`f2=>pfZ=QFFw^TlS{_D;cevqTVd9%}h zC>+-3zv%by;>N`F_0ZG79SR?OoI9&Im|=mNsX(nm2FroAl+0U_Jd!(JT+9@|n;G!s z;>9n;4t!oQKf90R2kQNJ^_hKs&u;#BLGF(AJ?Uz7e^)LSdaL?T{9f{H@%=xfEhCc| z3v4=$J~&)IhoL}V-`m{&C7khZ{~i6YQ2f^Id*4>DXM8%oN8mQUw4F`d=ULl+l=tYH zZGW|2?D;``HKzFX zX2*>y=dAtdt^L0*cjoM8?iUTXmPD`{?-mUI zZ?^460awoE@UqZ~GsR0z&OT=RvDV(={pKS1T3e4>RTo?S?0f%vU(SA+GdTRmji9+xl(NW%7t~JXp*mr)n zU;aFLqgeODDZw353jKoGZ=S7YJtlX7Ke?{;S6Gh0WwnBcrF>P7+kEf-U-R&DP;*jy zn!oTTKb!uKd256gUzB*hy`sYVyU!i5^i6L|^roxZ=Pr1CMm25{+wuNSA9~zumg`(u zdH(O>A9tkZp7>p26RT~!`GUT4QafbbI zbBh@tq-U`oJQ1MD!Cow3s($CLdDSQL$~j-e*ktZ$-1@(0ew+30tP?k~O7u>JU#-8b zYWH&j^9`Hi8J0%#IRm1Y)Rzc%Gt4)X7M^zQ7hCT4&1`{e$K<7tt|{@oGUL?5h5Tms zf@&(fKQ`AEKKR*ip!nlrU6~o~A75WNU;p&ylaHd4V;fnYi|_mJGvxVn*69z{|KB=4 zdSmF1;`(>z{p+tjxxVcG*MH2WPd{V{`BaKGwRFXEq-?{cCEzPXFIrZ@+#2$Ls&S zX4U=sJm0(K`8nZW+12N3uWkQj+p~Tn(;Uln0&d@DXZ+Zmv(jZ>Xr;V~-L?ZWzKdP` z+r?88cW3j3GfUi}{_TypaJR3$qxj;FKjnSl|DSRnUmgGJR`$mOFCJ7x@+4ogJlj6c zijQ$yt?uy^JH@`TPU`;s`O&kUAE)I7&cDvT|LfUyPU-x~F?GB1wx!!_J34pL?8ct~ z$L2aGm=)b=n>x2#&%5q8m(JBKw|akhZ|R+{deis8MEUaLh2^~GU7oBv`b&G;^SSGb z7nRkVZn2+o>%rmav$sC&^D%o_n@~G}d*e^$_2r9a#veU1Q>x&(G*T`D+03n&FfzN@{a!%bgt9VVEJsj>9d0_$9|H?epwi6Xzo=I(|FV3TsiAE zF3HdUK{^rfkia%O@FAiK&t|RR&zb!`GclENe zK2!b2PmMHr4xZohaQ7#^Gu7qqw-)PrmPdXTlS}?@@;=kDcj+>f4R0@eQ``3E`TaKw z`vU##&njrJopjv7cJA@X6VJCs{5hJe_;~fr&8JLKCM;Ce+rd3${;{H2>r1sNx_M^! zE~pSbwtDMzwtFFA9E{Hn9lK+mpXl>pvzf>$zkbea^N8y)%ga74V7;;SMy`l?s zRF4I3Jsf-CgWA86oT(9|7B{vp-m0~xzgn(h?O**pI$!rc(Eqys!S2}9|7(w>>sYYe zz8yTRr}G8Z1s{QgM-82ikGRQ4*tsV0^!Jzb@UF4j;<r+VdqT@RkS$xvE zdvuj?>2hEf}WXASZ zO0KbgRNNDCKl$I8yX)1Ijl-W6TyCs&omVe%{!ZGwJG?*lec!7uSNQqm%iG##828Su z(z*9VO8@Eek1ahLkNX^z3Es0kL+RF?b!FalPp^JIw$AKUoVi+jpJ#TWU8&zExw4vh zwTty`e9ZftpDjDjeTG2xiUPy6Ek7>5dAq||=kGDEPOIw@CgDbMW*g)C-W`$uVWHl( z`FCO5gUS2N&#D&ZZWWCxoSvE@b8DmE?$nJxW<{OR|8IIXZ)REFYpuA3dkcPDHW(D-V&gZXp*k~69@Hgi?q>3vkJRqNwi zJh>|A&D{s3^{nU1ZOneovRrd#Mf&8!Gb(z1znS&|Zagmbz8vQ};IW z}3*U0TNeLu3^ zsXk@%!=@+le-78r*+1=hYzJ|H1y>dEwXB|DBJI{rgG( z|M%$EpS|~g;Sa0-r~k+0+7t2r|LlFDKRs@0dt-B8efs~u|9|bD>GNabtoYt#@8$nJ zEdI#d_dfFP5&u8l+V3iAbfu>LX}ECx-`Vwk=a1ZRuU&qi{ovQIhRvr%on&Tl?tWx* zJ25eCc0uv(?bm%1%|4p5md%?S!+tX1qa^dWONVCJ%t*gD`^}T`HM4yy0{VBjub#Yz z+eofY==|4CxfGpQ?~lZ9eH>o+_*Kd4lRKsyar$01C;!vI$7|#oo92k=9QUoec3=PU z<(c|(o=;==r*?DFztRuqPW6A@ab4>3;j|~3yYqYwr(C~t$3Fd~_5E0B?^ogbOKZY< zEAGwaHGA`+Jb1ym!pM!qhX`ir|%b4jLUit+dV(0 z)2IFIB*&BF&r_|{Za&y}HLADly6^R!mpq=U_@6`;ZPj`Ind-&?+ z-$x&V3$I#dzcH+scF%W`b-BR-8Lgg@skS+fKc8v+uKavzmG6z*eQWD(Z2Gjbe7gON z507;M@BcU-zM%5`cEi`JzGm}QH_C6c>^gt+Nx_-xOPz1t>36Q{XfaG)TVurg!HR7uW!3=T=6*jbZ%hVr!)n>Ki2!)^#r&7p2=g>UiPo``>VH) zueLvW{b;?L`NPwRk1w10era#nor|R?Jsx9Jb zn|%Mh)4x%cThPaS_~C;B=4xN>xm~j6M;Ba^JUQ?A`T|bz=p!=WZrjDu6LojRDKD@ zn^!s?UOBJ4L;BZ?1>TQO-G1`$vio8E8N9L?{0?un9G5RLC_2Vqx3#ffCSZTyN3RCK zf}|pe4GWhG%Q{Wwa5&6Ad)Ah!6TT9%Kbj`5t~`*;bVEXZckaiF_r>gwh%<{X*V*vz z-u>ULSM~ors^9v{?@y9(L(lq@;`F4wt0x-nu~xJ`DV+aiW<#sE|lUD!ueDTa*`~T_xzx+!6|KfNn zXrHb?*3o>N3SF6t#;l|RXqLg zLE@LZ{NMB5pX9!G{{PwiyB@ihcQ{_&arW`OSO0&0{a?NQ>)c7UJnObI%}ab#amW0_ zh79qYzvLEsG~c~YTEjJYxsT}4*+0@x7+Q00vPsu`HowI7>%4C-Ozo~-^Lx9z^y!Xh zwe`<7bU1TAXS^1>^`!i!eJ7a@Ken8%zEPk~NId5wL+PEu!kx8Wj=U) zzn@^ganoLtlqkdz9&A_Z^nB@I*QT;dNk6Z*o=p}uTd!*QJj$+O$I8uT-R8bN zwENk!tyNd#GoL&1?oeww&s2Nm*WA=*ncAHFvgemS`&nK0;Lg!+jxQ%H-de14wmq`W z;b5Blwl#VFc2gzq%Rg%- zy6j0fT$8DGF{G&1SxElO7e+h znR`15&lH{cV7GpDeN95&JLQk-KF8h4_udox*H**!S!LL~6Xh4H11#fB&P9G+Q)ii8 zrMKq!rB$0NW#aAo&TsNRDld_Dw0f6r|D(PBYnkUBDfAHTTODP4?$aC5tpj{hlOaZE`*G$l0%A^A}d8xSr@ZDD}3? zChGMy;fc{22a1#Z`fl&iz3aN};b)b3Z#(|43(lSFKF@GR?f-MH_I_-C&42XQ$CqE) zruaxr(3XCEbVi&<)V?FEe#w@bYrdIDpP0Qhxun}tIq}+NTjiJM-W|Gdw$ylA&cyip zKfd|@;<}T#Figv4FMK_H;pFz*gsO~JM?akUoxkGm^9JOjzq%)%(J!(yCC& z;=n=^Uwd_}^U2J%Pc9kGVLI%*jL&WcL(QKEk7GF}8on)`k;Z-hz2W225q%Sj+n?C~ zdO82!OZEEi<@M%m>^n}1K3MYoAb*{O_`~_X@1(C+2~7f3cf}uj=GdR!t+Za{#KD)$ z>knAp|9S3e{lB;OPw$xbahb{|CzHVGas`6VAKu!%%XaGdV?0j9ARb<_7m2FM*xy1sh%&xNNpH6EW*T^Ldp>BHQ_KaJ_Rmff9r^AC>O>vkB( zzpFCZzm&i9Ls{;wm!A_4nQ-JtOf>%-`>R2{-g8^#zBknjZz?9Qt9kq(`*P1sxwM3P ze;&x+u)2I^v)q~UAGcLry75KgnQhzI2y|iX@_Uex#@o8L$my!ggQ}a+wZr1=UujYy_rA$N>_5( z?T@kjFKds;)J|x&Z#(%T@kaf%?(Y@{HiqASevVV__{+mQXL^$p#1rg)b-&pCV)f;9 z4!OA}X1#nGzE8H?@z~Ge}t=Il|_3PvxrMd5vSU-GRcR+sWhPay6+5?Iv(-Bqu|4ybiNa1!#t!!OEk-*xH*J4sdiB%NtBD$~92Ql?)SSJx z+&x+5^~dUu?t6ScDBFKh{>XbS{%PL!{UXwO7CS#GE}Z*B>Y1N&${YcY-KQQZw?A*= zGrq{jv!I*jOxwO)J(e#H+-S0NxY~X^BB95w=C4(lx*_jwF1GJHy~1-BwhPN1Eawrc zDYsy(UCC?~`RHr;Es^6VANofdZu@nxecKDJBk70vk1j2&Y>*HPNQ+6w)NgyZ)#gk(9u3N6n#$*@Zx^d&|A3K>7O&pG`XEamYDa(GF^~IC=fSXfG zHa=zAed}QKqwu+_WoF;rCh=su?|ZAy_oscgOL=@}fqCr)+tq%i@+IdluUWIL@4T@8 z?AaYZC(h!k+1w~qe8%v2Y{TyQjCUU!=gL2iu!_qSxb)x&^Y6+(`KJ%c+?@Yx@0Ert z?Y}OWa|R2)I&9upaqscx^Y-J}8;hrg)eymo0+L zWNPM&l2?mNXWvxGDb_!Csi^K{T>7ym_H34U!Y5@GJih3BGGBkP?4r~T)6I@-OH1N= zX3gk1>@a)6>g{3eTY{McAA23*w0dpu_IV`Z_s4~IGipr3e;wv}AlWxBdiL_0@z*)7 zXwCmOIcrjl?yKDS;%!`(rRwsZww|lKpm-?DeZl#oCwYX=X8m8gYvK3SeY~EN3#lA;e&mI;Y_VkOb>Cp~tpESM@3)sr z|GYGZ=fL7^Phwwtef}u>zQX-p<*D_x@(V&2$T54HF5LI^hQwF-BO48mshn567xeG? zS!Mt1ClWFD|6iZ`*zQq$N&TGj>(=His=3@=QCxm^Gw<{Eik`!_M8#F)Ph8(w_0=N# z?82Vej5+KH*N>g_+bq$V^!fUqbN9sD7Dileo;*Kc+ctT#+`CgJ?s~uMdM|S(d*0)J zw^-{$ub-Kfzhd2mLmy^Mh>82PAme0AcX3s}iT&yI4}IHZ{j=XK5jA^VnsxK>ll9%d zr_Ww4WhTE_{kg7t)wgvlem&YV=iJFQJhj(oZhywVgO(2yG%xghKKA(P&!Rs|mM1*h zenaWPnot>@JIk6EuQN7Ox+){?w#s4gnPV2)Os5`;PHw%%W}x*~-}gm5auo znPf`O#NHz5-cvp-(rRa0wzfW(s9kvLQo@#qgs&T%m)U<>e8EiW;pFaZhG#Z@yTEP{ z@*tqmeGk*TuNHz&B6Z@MypBCpzpt0}u*cYY-rJbCGy6^+EO=(@ZQh&o@aa?`QJIj( z+!uaMcNV@WFiqgu?$E1umaT8pvECx}Ln_#>J7L>?DK}1KgZhrSLIx9EdlLV={}^la zVDl>P&DjsseVTVz9qVdrU;KR0($B@_eqFkJnOoQIIm5ZB!LrZliIc^jABlzX7Ki!u ze}6cg^kz|ATgf$#zt{N7>kfR>n_}ARK4rnSJ9pE1k7q^+Ke^q&b}rKD_M6o?!Fr+3 z6J_cjOW!{s^|SP8RP^yP-9P(HAIx~d&iwFk`{OX#+)Rd#KDIyXtc7M){XX!dPyP|Z zkMz%xbu!-hm8YYFw!LKi`)l9rCFOy3|8g~q)YM;;@Be-GBhP1jKY501z89Ql-mi}T z`|1_%N0~40|K59lHvaT6xeX_my<6O48}~}a@>@%kapmoTtLq=+!#8t?F!gb}zM6UNU`Oe$4cxJ=6D{F1l~fw_bJsr?vUdKkZt-W!LSP z(xv`&zQ6g(S1n#=l4E&zLU|GM^Ut>?UkqF7VdE5VTD3-Ful+7|dE2gxiOR1JE&9JLj;qw{Z z<###l_DKcqD>Fa0`(oWs&6G99!F+-{zZst0ckNQ{%$f4LUT#{s-1m0%$+so^Gp#<| zuCx^Gc)Z{-kF;U5-sS-D6VG3nRd%1=arUamqh+PPO8XY3xy^hg&C0X**x~Pc^5VZ= zEou|LuQroI%XI1<-M6bFXL|&D9KFDAv+?g8W#!tV|7Kl|{JrCV-Lbk;fz}1>8}mMi z8|1ynZ_HJ=^k1p!ZtB;aJT6XY&H~Yw8}rqArW&sMYoEcebFY*1tOvLLD~l&_{#dTR z-2TV0^f?I(nW8*R!s<^Y;a9`es#CV!^g)ZZp`92=_K86sBqS0O7q7=zn=5L z_E-1|RvcK!)E~?GEAr^%)BB#;|GM4k_IypQZ)3{pgRYrxZqlEi0+ff zih|XjIrCV>O21E29{bW?a%mtEI+YZI?l z@@8h|nIA7+nVUIR$mQoj`O2Q3jA5T2zpOFoe)qZOxIk67tl92Ea{?nK6vrRk%JXs4 zvWdl6d(Nd#3ibWkmz#ERNkGU|^|bHKHP6HUrtzN8FZS^iO^-Wkzdmop3E9F~{tu;} zYFnBFFJGQyb|4||X4Jo5QU%|wms%XXsJ^?gER*@;gQXL)Lgs|(SncMy{`UDU)99tT z?-!)_?BJbYz14G%h?uE)+lulYtCFeG?UGAl+=8Uz1NQm+=ZUj10Cl+zrn7@v6C#b^Y6wY0k;Q zv7ebXFXWdvY_0tD`jYnR&a8Z*6**c5Jmz!9Q!v> zcgb(&XY%)q?i+ttw&0fkr^bhWrheb#eU9@0XY|>lD>IrlU;VY>lq7q`eqR4B%M7#S zydMJ;WUn>2ia9^q&R>u?`S|k(0{4XK19lr-x?{%buut>&>oe8C`+h$$E}v!MeRk#N zV-NiV-ygGH|5mN`RsFSpw^OPo|2)?n-}fzilP%xTKLxzyZy2|-^-bLSu{YnxlGkWf z(y0WY=D!d5uNR14^tGOM^7$r9%kx&>b-eZ*FlH-HF6#Mo#=Y-*Y=3CZ3dP&c?Y{54 z>TdUG;??DLUsq<{mv|j`?AipWf-_Fh`5%4f@2~vz$K{^=o7=Pbo}KuZ_0HV(dF7o`bMevD4#E0&4_T)CJ7yUswcBTn(Pb^wlev*+xu(v$+!gryzIfTslM8>I zvwEyA@@dYEkQb}vjwj8H*=_Q1ipf`wzgFDuik_@HcEoTApUvw@@n8BTXH_kl$@n4r z;fnCzB1gPi?s45%>-^-<-6;o;m_6lV3Z8t~Y;(Jq{+sDjW)*x|ef#Dv)*QnbzLzsT zuaYeFezo_=yGs9m>ZN^WKe+AX;yboUURL3pg+YVT3?YlNzFSSdmRdjGo;Q>6Q1*O@ zO258YIql)qDPOh~xcHy7n>9J%;^E%vdmJ3|*WR1j!M82vgvAp#`%edtF!ijLm2hyk zty%0|^SkKAVP|#*X?@AZQrVrb`*(fSY(dce4?!hiDh*tjEyp0BI0YWC%;a#G&A+@{oc z*L|1O_DNsW{~aj!cWUypH`*b8CA_;rXR`<=OYpEwx?Qkrq0^4!7fJU+7kQtL%dEY+qWw+m`>N|*@=TAeuVb_`VZNr; z*(yFO#6*!L>BD0a`!CM+TYeo;xBGa*L~-Th-=}ulFFn6%;nv-LKI=;PuFpK}nlyR; z*L@v-eYf5$d-Fq1^?U7`{dfM`Y*G{Ru4GS*X$ zjS$npERlO^-)s)>7km0WkWkV7d-#pzm+VmYmFw+0%8U;k@ytJ4CH3v#lM0cNT~8S% z-ZPr%Ii)$pxA^U*(y67(Lj2F`9PM~r5jK4{y}Ocr z=d1D0Z(CF{KjYGgFTHbk<)j(R?Dkree2mZi5MF%j7+adzho*T8xO`m{jm#QcINqep zF_EwqV))Xy?{09dgLHqorIlrlY%^<(p=WJWN=*X4?`OfCWv|#?LlVu7kcR!Mm@1Vz z6uJA0oc4!EUMjX&r!INi!YwY-FJP)$I?EHiX`h*<_AFAhO$v3ZTOO_V@zv4TzpOUT z_AU_ee6-`hq1@R!KlDmI&TrXu?R0kW4sUVU<<-KGM;1!d$Sd{MU+rPFWqkQf+wb3| z(kD*~8~PsyoOAjs=1AAP%Mw|z zvw7m~CW+|u?Ehzs&#TPeefiI=4OIyT+-8}S|GbbO{q@4p{HOgUR!#3SA0;iW|F-=1 zr1-z<{%yG{er|WcuZa|8DuI-Rm|UKU(={w*C22kNpe|*6P$=-uScYVP zxy?WCFS%p>^iiF_b<2~hw|zPix-GLuuP*mW?eC}4rDXT0&&znuF6Ogl>a)`Do*(ni zzv$+F_)+JG^<94%g-Z1&AMfsdx%{r^$*=nJW}i8vBUV$$)>B{T!`kkqUUyTgz--$} z1^Ky^rE2BJw#P=anJcASTbyje^4@M&tXQz`32g^Xhr0LsYByCqp1b&}@p1n(|F&1J zU-RzBoc@R{$2P0@zdL$1o@b}?j_Vu#D)@fxjlMSF<@Bhh3TZtSaZ!DlvpzomJA2x} z?DE*A*@jb;i!m2L6ZRBqePo{JnW_I%mia`Qi{!i)Ng&zX+MFzqqic_Bc^D2=&hga<-2evul!f-*&pAHl_JrQqW_UD~227mPUUJ|v8mU@c?fTyuk58?T zuUp;!@~^~lqjPCT9{xG}^8}mnFO$zPmZo?5IBOH9SAG1q@2F*n<8jTm&re$~tk&Ol zIjZ@h!>eGMj^>ac!?W_A^cU>dP^1xG^XbT|((nD@?&XjA4_~ZV!erv-zo_!WXPups z3d)}co_YN(Frc>XQHk*9D|hF_bK87&k2)zd@2_U=wWnLTmz9V_vhWIf_gH3xeAxBM zV(y|H&Fe!hKD5evT_WB-3v6k zCSZBn&LKWQn(>`*Mc;S9*J{5v@LgeOVEggG#!i3IZl#sorjNzzcFyLGeQ$Ma+qH9r zU-xJJPqJ?M_UWwntc^t*3n%#dGIrQDnJS4HW=#8O`f}F&ROd&xD<6LE|No;u+-CJ> z(1^=FkKRqEkL~2Dex0zktkaQs=HnC37Te8u?mO@Gww=9|&Y$ZT&waMLA@(}zTfhRWe&DJ@W zY$6>wz17wsuIJ~evfs^IXV2``jW0>E-dCOf^;Y2*uSc)1SI$$Yi<)28c;3o?Mb*^x zHcUqf;v{$Ftu9+B&0{({ck!~y13f$Ud`r2aqNiVz`$t2nN4_u2`A@~SSC222*2D%U zdReAFJ10B&X3C*hrxbyjDN*|-FYw+SwZOB<`A@=jhRJc$b+bxU1&ThJaJXG-+r!3w zx1?*&GGz5stqqL3_G$7$wuz2nOpdEN*ZVp* ztE~@l%Y3tJ)_ULMwCsy}H}O{|ex9LKzFSOvcH6hD6O7Xull^;yHwd@0_ujcTz35j~ z&+5HKZ|-`;L|43E{=u^3=vOuSisYKVw-z7f-@}ylTzE^PW^T=f$w{AHNy^W%cozGa;~OKNs71(wjjIn#oyYo&d#?EV z%^yn2OxF8W_*;8@-xa;cecrC{&b5;bPbiABO?@a~qoP?U7Pp!EY2^ICn4l`9ojbZ% zj_r9Sa^dNIxwMn6?%CYC4t8=U+_?RPZ8N)DpQYpE&3}#yUjMmSdD<-ZYpL?qT=99P zWwP&;&-s22%yw9J;Yx#=z-$vEsR>Lq`xf=;#m`*J>rr~-#RZlR&Q`tRZ}gd-E&f~j zMn8G7J@1Y0`~UyFY%F#1_^~Ih&%$#%f@>Z3f4Srx`5H8)QW>6db-!ow{r!((ixxAU zd}f!rudjS#y+p|j;rF7?zHTs4I4Sy|hGB#MQ`N_9`#;ESdYQfIO?xe~-Tu$AeevhG z-zwM1?a%#q`P@>;Ek~baFJ04>$G&W0Xt7fIgU%hzpXy9rRh_r0d~vsXz3$~VPxL$v z+%(aOyxeUhsjORnEX(A~F5S=Et)~AK!#3Ys7i_pNMgDGetj(t96x=cXS6-e}+Lt%u;>?E3oGJnT zG9#m(owJ!;U*GX7eHb=3$>R0d#cFMOdyHK4H1qDy&6}qA{Zw_NPKKn|}gxVB1-1ky1a0A8*&(oz-Wt zv2jJ-2BB3w>BfuN^(Q-W#`{UlGMs&KVRo@#^|4zUs@7~frq1>)M@;A*BxMz@bC@Ie zN$P;o@;IJv0m5=id@rxjW3gZ?3=&#$(Ax3I%mO()lLZDXJOSc75aspx`epKYfWtF4*IK5@T?1Xs;bc1it8(XSN@ z=?8WMtGBH*wVWfYaC}PX?wBd=iRZhQ+Zg99{$X&$t~{8%Chq_5OY1FldV8CD_L!Td ztdiRm?l_xypFZ=M$3{Oh{rMKppCw);-ui0$x$VE!JnlYLDe?Bzp4T&WI#l<3a-6rj zD97o8Ee?~@Roy*^>HyxoUJ{wLx4*0vTEY`y*L{~n{iO{|rdl75Dk zPjS3FA(`*h)xROfZ`qx>@wnM?gZ@I>Wpnm_UcKv+9LqD?l*8{5*Ztr2IDgIK%I7cl zF$S;yeK97v=E#hzewFn;8-EpPPOmAH%+`9lS4u5=f$i(H(S_F^tlhm(oZIdjcR9zg zgOjs2eaqQ%)8y;MnGuFb3uioE`r}7`EQ^|qmGh0ft16RwqQxKE|7@Ghxggft?~F{z z(h_IgMS)UlCcn`7U~=sG-ERAWqlcN^xBQts@sjYxl{-Z3fBQat=T_%GA=2Xb92Vi{ z-9O6~v8(nQ%zk#|W@nVz3*)ZO=?~sn{x!?+ab-Ne0E!$c@wVg3#_VHO&idRU-z&nsHk;_AN|%`O_`#&h|*(ZkFbE zUAu#?_8ML^%;0rZo&D^p&W!T71x5>_TGi(NE!(C3Zc%->O}cUaj|ZpNEySKZj*Zy; z>+be@bMAgRQQhi*iHVb`U zRIhiPtJh&cqexW%A@6TApTpC%vaMV1MH5qStrw1bu#5O%Y4i4VW*nSvPVLztZPdmn3`3 zHdjjXerlZa_sEIl9a6XM%zk^z#Q|KZG}a8cb}`=DBSRp+2z-}oeLJvk2!w@Hd&cx zZ#D_9^xnGrRF%ManWM*~Gk={gLM#-k(oA1qzoxvpu)8F#E}t_gO^`tJdAox$t+2 z-&ysUpMR!YoB399>&u6C|1?YX&93|~%gNaw)VkIA#=pm94cpGoy1dQ*+L_*oj=M8I zM2Y!M{<9?4=JT6lHt}EfSe-J+{&zU_lHvMJ`QOQ_Olw~JXs;=8m}{waz^cKojp<|N z=hAw`_CTY^4Gvc9CHIQEwddwkDH{Jyd2z#Hi)O}uUfYyY7nlBTl`|Gyot}S2>p?rO zlmlPvW8*gV2mN~%yxgwXoL-Yr`#^Z##-tku+~%6FX{_Wh<1CrdIG3TOBx~XXVS)cI zEID&8xW@fFabpAP90rO1ISh6eSALvu(mm}Dtn>VutALI1Nbjxl*+0&7hg*El=I))g zzt5QU^NqHtZ`DtKS#&zrLY%pl>D$9A_otlFtV}GJ`200zc0fk<)K7=vFHg5n&F8tP ze2nM+hu~|+cV!=%ViG3bw4-5*>m{A0{C!7PX~sOd%AYwqW{&Fpl=7>8W{G#(i#OCL zl>6|#>U{XKk#p~9rn>JB+2u{#zA;`)kl(k8|JfR3H{?i@Tw!M-+ww5Wm zcESFyYx8}NtNot0TYi4!vzbpE7ax{wx-x6Gp!S7~O&^cUo&4PP--ornvcii$E!?}g zZ@uT_$Ekg~HIuE&W$J!io*y^yceYLQ+Im&#nIAiAMHBcEp78}F&zf-F?sv{VgR`gg z_wOl-={Mcw6Zb<&?&I;Dv-hw z6+PUMw)$smxSe>f_q&FQll;$h`(AGT;uc-AYrh1$Xi2qS9{20x?=BiCfBo(+aU{u5 zXZn=1IEyDW#p?6=PZZ1hKWa~(C4Mc6Q8(e!EpEAqCi`c`^F+^^qrOq|)#SA2tv&84 zz8Bhqr@ho(a%T4{U%#!n7Kfisu-bb2$QKg zV6|-WLbkSk{q99_Gj6-+GMF(vK7Hi+c}96H(3*!J#`Ej^uCs3bl3Mudd8=`-y}xtV zijr6D1xH@2|F}aayp2maEd7ahx#fzrHzab{^!isyr#~|JdS=hfC7uzvS47>fKc6-G zUz1q>x>q5=%N~W@k=g7L>bw7v`u4|`&V|^OsWL z)|<}`*BrUku{G2$&ig=(Txvnx1FN)im#&=n=)0nIXGiurbH)9>mRFMVJllUpytdlz zyGvO<`kmJq)tq?Mr#tgQbWGgM%W~H~-KeM6RXfA`us}6m(%K%~{K?N2|8$O>yU|Nc-GVyu#ATh5s1&2U#; zsqu%gXHQ)0-R||#?*9u*WmNX}+|4u3KDQ?L^un|H$*wN@a#fBzR{mT$$^TH#p#o#o z8(PkOpA+sFy<2}aU*pT)72%(9D^0l96=tq+GM{tursA%L`n*oM1@eBUbeH?FO}syE z)=AHP#$5+Gq|58J`ej+2zieVw+JD}zNaXUfAD8_0NX$19J-daU@AKSGFWasqWJR&h zU)*q*H(;Jb+{4q#Yj?fhD4p1Ko5g2}K}GT$J*N2b|GoPSCSI=mRlo3F!k#K4N44wT z(X{MKKNocM6K|5`%yf%^&B_kf%9>!c>xri>xh#5ot>}r;Rf#y81v>&{6ZSHt*WQS{-uLUcqp8j+x2eo~ zomtoX-nQHHVqiY|^!~kETOWmQ*tz=4np=fD(YLGAm(;xbHOoHZeOT1{E03D@`#S3O zetp!fzwXAox?eA^zK;L@YwmsTA73iF@BI9+vA;HFmvOJn*Ze)NkH}n(|NAQZvwPva zf8VyR-}i0n`lmLz7vjp-y~)oyw(-;1{5s>~Pf9G-&$Y|SD~gp{_V=lwzFq9gyO!SX z%iqP+zP*|;|LFC_JDmkT#FV`fF45_V5Wgr=^m7W^N2a&4JmpGW720;yzrAg6@k@8Q z^0DlDy|ps-HOvzI8_$N%UC)qOuNUij1PFSqud zP;ArkqL}p#%8*CwS$Wdg&U3acXI?+qYT7>UdE>f=WEsV%bz*9FW&OU z;f;F^KV2feQ$f6L(-QNw$S;>Dp{BqSt#=mHqdn(tcLKmghTe>sHE~<6bTqk$L^7=k!9J>k9Wp=g5D4yrca2*U#zmtkb_< z%xCd>xb}v7uFOu>^i1c#I;m2tpJ#o|xQ%)fipn2OzGzz!tMe((HTzN7pGBto&-r?M zzTp2kX2rV6jK&TbM;=YO_ICBfqYt!i_#f-Pykvb*lmhSeXT0vYN46LK_@6SzZ{9xf zpC6db3e%qjmZ(Nvt9|Tl~^lhcy3q5 zWWHbC<@PgKc5hJg^*t#wVcp_och=07TYvjyn(_Wg>K6)ne(#B%^WoZ&yV+V=Ub{UP z24>oy{kvuNGx_7}NZ}H0Z)7#gL)l;ACyd^TFS&-LR zjrYdYk~Pd5c8M@QXLE5Y4!mEpbe5srM8+Exua}j5kbKM?D?R;%Q5*lX{UZ1GbiQAo za{L1WsC4>pBYeTU%ykPSE^l`IHS^qgmDwLkj+v|%oV<9C?UUD@)g_f;YwyYhS-e$h zT7PuCi)`}FiG4i96Q!+qs;4Zj(D<>w{`I$4!sU-&U;Cc4yv0HCm(ZshxjRGBo+=2( zGvB;x|7}IxjD-@HW`9VI-@q-_P<74qtM>Xmlgdxt{IeqOYW3aMansM+MNeATe13Xd zRpzbq(Eg29%KrnG&eZp{ddILx^PyqPbMAg?mA_Z-`Dj?T4uzqdb2 zw5hndf19#f`!U&ap-0{8&5hkFer#|wxfQGKo5%38F#THbdE4z(|9{_~ztfn#*e!p$ zRL-o^>r73=v(L}%&oSM$$#~^?W6hMBy_@X1if`0Ny-pT$zE>J9?s;qN><8i*zADFVY-@`WF4RlTQ+&1S z1#^p^+2bpj-%dpp#8^U+tn{dDG2!5%lb5@ZT=R; zWU!k5=-gTU?N5srewmulXdrv$eQ|bjiGGN`{D~lr`C=MB>TH~gw*HE^(`DG0}=`-b%EoI2ukzeQ}r@7$t`?5oy&e?`*Q%E@b6;7uTM9J4dGMuZ7q86;mE-ReqfG=AYHo#s|%IYtrub|J>j!ulZqV zVZ~hcShHW=t;?2vmAsLr{8yhL`PjFkKc3akK6hvP=Vx{$wM!CrZ(vhqh~~4bJh>OcorbHI{Wl0@)x6EfliI&p_5yf9=AGz?$sGKz69PA=Kk(c6<=XkQ zoe^65UVHLwQ(v=aQ=){p?HpzW8BXy<-THs$G#;Ojz9L^_JFCX!7nUnB8xo#3>HJuE zu)Fnkm;2$HJ?~@e%isTdbykk7z4GJWg zvqt|@;#}Sa_MYRreNBEo&)k>bJXzrWv6BiPlWdA5f4+%N>fTuYzWV;|Uz6>BPQD6S zzV*_g=>IE!dvn(7eqy5{(iIhX3v(N*^{qD#haAhm%mnWWO01fscQZem3>w0 zyJXj2+q{qcNo;xVo$vGF*IUo`{b+gaTd47~RrdG2U+&h^E8Z)r-}$@noR!I^gp)^R znVdY@a=R0s`)OPnQ+2@5|FZ&{+|7AC)1NQ;`#Fl`@AKwjnR2Ilopl1?b3EQ9G*Zp=I4|y>h(Xa^Z&`wd$wTzf&lgKOrDz_>zJ%qScPZ!%3nIMadW`0r?LF| z{SI^<4)?db@hpu;cvYXJ!10LKT>BI8UNO54C)f+}#qo(&e9<~^Xzu1o3K!`@Z5 zE4+UmrV#(kQ}`2m-2?VdGbgN( ze-M0mm;E{G`Mc^j+;vfY9KMrrmKnQ6Jgbe_#$B1$4T_5P8}I8(sC#t!*$esgAC4c} z`Ot6A@nu*2;?=jZ2CQ*(niuf%;Dnq*KTT`f;uYdMFKT8So3r?UiF~7+;_+VN-`CyF zO_Fi``BEirQ{YjV{#;EH&Z^wUS5F+>wfUDw+VNFp=09hhJ!`Ub>y<3e`)ev@_vu#( zFVhPw*P3tc;=|Z{Zr1j{li!%mKg;~F;hWdwT=Nr;H75DgJ~NSWx*pSYJJ8fscr&k> z&_k(<-#UF@FKGU$X6R!0xusq0@Hiy-Ai`UA4+2*5IS|-Y5A*OP;Tt(XSP; z1X|?C`kyZ~9+z{kRuD1v~1b{@C#RzOm-2bNGgS^uQ z{vYc}WNzwjP?~%+pvUj2voiAmwfuxh1`F&Cd|<3$e)U>f&Qfu`&9SL`MW@#OIx4^I z9%E-t{)cJX_oRMpGvA}QU+U1|1LnFm-^D&WcoER(zJ#eJAgTJe^}UJle}DhFzW?8Y z^sw_8zio`aY`*!#j%`Oe??Km0={W0dU%o>YvL?S@=ImVF^)Y_0=k((etJ%^NPi(HM*d^$lP_g~-`p@O_YLw<*R?hb_?{(6A zynX*>wyOz2lM26Dh<6Dddv?@!cXvuopGWuJ+lRa?pSpPSllMxMwi?o(zVCSQ`bN#%IaT$b z1>QgBZ(sMz%3t;^FS_Y@fv@M*wTjEx&w7H+>@X~Tw^G*VTK8ct1cCmUnu^hU!O~qut;2 zm&RP#?RA%>;Ni*B&lpN|ht%DwQ->#V_j%kH{Qwn-0tYK*siPuinAw5nxa(&%}` zUiv|g@8MYz$th~Whv%qlyJN+*KzYIh*Mvnkm~I?i|4}wM-{<%XX<>QOww;$-?nrO= z@X+P#q30JW?nFoO_sLD>`Y=n)OXPjZr)t*$(-D;JeBYyr$KY#YmM%{0=@#oj}X8esx&zNQOhM&RyS5sL26J_QJ zn=jr8+U|L-&b04rn`(9Gk@V`?4N}iiFQ0pH>CDNE5waV;O$|T3&;NoocSoySp_YXB z&g{Sn8F7=TKb?Q3+yB04()fPkg8iTGnP%|qeiHNf&h;647(dAW|0uuy-k)dY>+k(M zSN?2$>g>s;mfFjHJyNZG-Et;bvi5U>{iP3l8)6!xvcCy4tp7A!_xs`0{X6|TGx;jo zEiQ@kNh|#F6ar?H z+^)0m+xC0^Pj}r=AaZl%mmlU@U_%EMFJnbt-{`Kf=Ln)m7X^bPYB{Bk~;T)F!8N9yb7k8?a8hH-qD zvc9&*|L?P6dBsP%&HZO|TF>&G%XCnjI=!%COJ3B%_$$VKmyDis6!;aV2AyTSkz?@G zQFg|b%BLa=Z!cLsW0z3$O2bzv<~NfCZ|6vS`SUYpS}W7R-LXeco@<_P z1#E0l-^=aK*UBim-qYQ#;IvtAO0OYb$)n@55>zkz|K*n>m+^vI=GTpf?f;}rk}F%y`2{F=`P*O$8-D>yaXaN{+Gr-B782I{Y7IH)BF-Ox&Zvt)~DV2WC| z?gF2?$8tRoADqyB`HA@ZO9_mBy-rV`ExtC(Ldv5*!u?aV z%=(R8=MOz=o4s~|<+Oz6O~Dd3j3t+?b6kEXvqbD&T-w&Mjs5Z#JmEIX9Gw3mYrdq- zTgjHzvFx}0Uz5pCmj9Tfuh-{hUMC>&bLu_U<*(wu-q?BL!HSO)ekQudJZ=B@jVmJB z;5Fa3zvcDc%l+dmze-%=-ePk+!6E+kv6VOCGm7@T^v(BLbt`P{(v81=wu;9^2&LC? zoqHTUd-ahkU2OA;73^Po#$=z|@oe3^KU&S|3FqCC!}rhLV3stiXKSX?{I)~p`+xeL zy!yT7{P&dRUytSgS3JwmJHmKI)HZeU$7u&EOSbRWIpM?{(=@$3@)mCQzwi5=x_D|W z+u6Ab&xQW|ob>kSou3|j$-HjA_7uvg|Bcd?ezu2SPGy6AuP2|WdP>fRJMTmPDSW;o za$3gx`b0GMJjPU+nj=X9y_j> z{41O;@9XoT+UAhLG5;g~p1bEScz-QN!Vn=%XXgyj@-STdFprk`pil9*UX$3c*E61Hm_ZO)|~B+!#DIV z;&)blTy{a-@a^LXcOOpQ_Bj4u@4S;=cg?sYbJRvD&bwGBb#C>%%l|aKEZJe;@wdRk z*0}!y=XcBVA=@7;)@9|8+{NqVd&@-4{`Eh#uVNgVt_STEEblh^sOhhra_{cRC3o1q z-jH)~ye7GQXGH3&AT{%uvu>Z^*voU)dwLhscOzem(ua>5Zi#JPS`j>_^1y6nZ9e^9 z*|HO9j6HV^2UkuD@vFKD?ou`21Ospc_;eG=Y_Pq*1mRxr$!6u$hVSAGrm@#EhP9SG0c zk=(uPBzOf#g1zX2$O(Ja*G#)vx98o9qnl6ny?P!heK&v6!`*_1KMI|b5nvEqZS!gA z_LCPa*(JWosEG$XRhn1e_eM0&WVPp#oDhy#tS6YNb$eeu*E*&*&#d-FK%MAD{YS?3 z2}jOtvUI9@+;)HVwC}FZel5sZp=offN9y{mYc)^8W&eikjXn16vf)3yZF1~23s^sd zn$NBlKbt#UMsL;QJu{uxE-u}0OjMXV_BqGi+`OyeyJlyknqGSm9$nJ-{{O%C=hbBP zm#kg$jFtaZZ9wgO)3Ux_xq|E8Pp!$=XLP;4=85u54s(u*JF#ZQQWuX1O5dsISnd-q&z{7Vhb`AmX}u~@ zzg!=8S7}+XmZSUUWx{sP{$8?qnJ>KV_qM+Nck*lB9sBlchWz`ycYZkzy$UHNHi4HD z!ah#lvb*_OV`t3Ik27-8?sPrBe5~PT(!AJNa?QI^WtUa0J$_l;!fPwr%A1wf>SZrS zNcVKLPx<PXtW-SNPj&1CZnewz~7rWhYQ=u-ZV%|!nDN`v?b*Sn zW;=`V#$=Zryc~IH^Ha7roca2i{Ga7dY!%l1IHmjhq{C|Jf+~+A*uS20{5(BVO!Eh$ z(DKWbXQB+g_ZPj8kWM@D!&3jrqm}wrZAV?ABX%mh?7O(WJn^IA?puocH4ju@|E??l z=chn&-4mXEdxMJWoHnl)-t(P#+V@oRuA=torYh#|#N=mdpSYPbrN?yZz2`G;PwM}C zW43U)|D)_L?(6P+?7Qd7T=a-fao*;W)e~kNUc8aDr`WK*WTt*`@&1L@=LC0MOPTW8 zKjv}eb(Q06Ww(laHh{b26P*8T+rC#fRwDlh$Is9=pBZ)3}V;-CHXHJhq* zuNl>7JU{3DsPOq?Ltp=EnF|jKd|u)>qm3c5`t-tXw-?It4lfVHDaY@vopZkR_sJcb zKb;HQv;HyT!|jU#Pw4yJ?~{37?4IJ#eW@UsrCmkjNWxyuYcD2yOk4J>|6X0vSLgD) zwfpMce|xokk!q!kedk}764MhOE#6&X>w9ki+w$7Gi9N}?8IvaUTU3&KAbdmW<+r5_L=%)4WNVy{HGDS^AXmO{W@*%_M zFH^cF>N0LU_1M1U?7Ex&yY4b-D6(a*Oi$!memVHg5>q~&yS66tjqh%`_3`4D2WLLT z-dldwUFxE=vf<>z6Ze{mXtGjN!*nP~Af39lW+y4(I z^TsAMyghw&#<3ZbIQFtgS4c2P%w8d}@1(+UL%xln^UEdw7;-Z2o)jpzYNdAl{Er`N z6CWtvkI{i__xrt;p||#4Jim~|#wU+7HmEPIJ$Br@Zl})g$W&o7#wVGZS0}T z9(daStzWP${*p=jtl1g!7fuQ&41YQ4v!a-I!;UEZk5ir}1uuG#Yv%g4ktbWPrh@sw zNp@p?`wNZQXJ_PInZECY%7^b8ns!DDZ!Db>cD_<6{??TF?605On1xQib4P1`-(3Hv zS3g?p_uZ6Rbv5n!#$xu*p>dgSWcwrTe>m&DCg+H^-2>gmU8g?e>Kr$@Kd=7Z&p*nQ zUz6ot{j^(SwYdIqPlRnv=>8Y6;<XiCWR?Jxg};-`n|j zi}}1Wj(dEV&DQ*^`oO2?HDdbjQvG!|C7k}6Xd*kmXT6KPpzL{TNu84AEVI-;XUT2J z`RrR-<1758Z?_%qq}_$tPxjun;d-?7sulS26|9kH5*_QC+!LkW4jo-R{TG@KbD9%s6@n)-E_}`_!CI2j~(=O?r_34@M z-*bnbEx+wQZ?*lgqx)tanjIT09y&K(YiV3ci)YS0@#PVz7gE37J(6J{Z4>MMUzdNa z@uSJ&KezI;$^GjUeF70ejj=nD6U=xxM%vupY_j}`y*)_2p z=Wi~Ww^i@SlP!VsTDsmF`8-wqwPkwgxs}i2ZEr8E@|)#)uyVQGv%T{k{#>z7E%wYp z-F1iNGnOCIS+L^h+#Nse#LhhuKX2y=dL?^ZAPaYCf-vFZAMFXqXn#qi9_U-tX* zy=@UUFxMUQsw-x~LV<3-VR{jCXS!WQ1@ z-L$IwW?^r#?dyFj{$>BIbW=C^Y0SUi)XAG$Res-8n`w15f2-@ey2LYWf7|W8EZpM(V@=q7ajy3juTEa=zS#I@zuzKJ$&K$_jw=~=#qVj`cQ*Fv#VNk& z+4H7#RO)%$u46d=IVaLM_(!hT3%!FW_n$vDQIA!#IFRXgL?I$4vR`6bjnp-nscIR; z89$fa+_i`;i8pe8`FXkevsLF-ysy$#&$0W=mpv!*-@?opCo>W!g!vV%GU&2(Qn>u( z#|7Wh``(IQ6<)nT^7i9J|5-0wU-Vv0t-@cyjrYyo#AZ1=hD#00du=vYCA_)FIPKBv z^5Fme|BoD=zSDWLuY++uXMsb)WOL4+7KR;0e;%A)qSNGf(C-YV!|U#d2CKz(+pDDH z*T{a{$Y?J*+giO1az24Gt64~c@d;6eJX_0$bv(sldkvRv<~gr@U*d%$hea!M@}+}~ zPbK%QTCt09yK89-$GiKz+~WKK{p)YG%zvg8R~+haV&9%Obw+U~UB0*E70g=vq`^Eq z;c~yzhWS4ZylhvnUvML3Vt;z-?xY;nPwLRvcHg=M={+x8>t>&n+k zSN+=Mm1Af2?O05<+^bcOKPuK-!Yf1y=s^A_R->Zmt()^uPVOzcTMe4)9F_HrFW)3TD8A_qv85f|LuzITy>w@ z{COA0HUHm@`^w@za8*f}`>mUo#NpTNX!z6QD$@zg?Gp0eKl>X5ZTr%cH*cO3Ywf4c zC85vVWA^sU5S9OQg;Vj}CbeO#3sNt+@VM#eUx8H)Cpy@wE_3!-n5tLCsAovxAfWD@@SyveMIO zTOqx=^OoHt^GC~!rF)BBdgkXE$R~f_yxaZFTe0kC#WxOJlk*X^HVJwqGVhCp%p?h( zra3oOs9e08Abeor%R(FWyiFgszD|ss-B$6`i7)KfjNX5@S8v?PUCYBXrSa|di^|MP zCSI%$J}#+cZfEu*&ACl3`Rm*NtlE_cHB7(QPM>ZGz7=2KWuTsr(45$D=Kb8${MV-R z^tzPzPB^lmdAUrKoJ4%iu>_xm9j(4oFJ>HJ+y9}nna}3S)!v8Tp3sAU##XM1TQLH$ zZLQG?>pvEn-DZ6rdA>%hAnr`bojdWrroOgRzuj6O{nOiVYy6~x#s4PPn5-!2QJ>V9 zu;`L9pJjah!5@Axod0&)TSxAd@IUvXC};iA=E_I?_ujs0IPcM6tzf)9O{g_t;bk%9 z;6D=>d;34XX5BA!D%Q@Mch2jxdA7UcbCw+q6I6aInZ1+aUCoyTJFT0a9}2UseVMf6 zY4=ono*CAs8NR(Nuf1OW^oH6r(;H^|Dar>{*Sx)YdumvI{EQzzZawQ?HoaWPs{Zpc z@lM9siJ!jrp5$Lq`KwO4c-6+M-#04VxqDQ$|5nJEYRLsBd*&K`UB1p_Msmxo4>rgA zYhMLx2K7Jg*j2!DbBCF{!6vWd?VVw641X$Z(hf*}JGAG-`JDydHNW)#z0vQxe?n}q zTfVeG`J1)Z&F-@67WduxcxtoPdZvzpe|9bw)2Z<3SjnGk)@VOZLtHue&D{O3`XprE zx9wSFt$6qQp8k&GGB@PH671$=AILewS->MU!7x8z%JR4w=Wa#y?#OO=cZG#Z><-V` z9~R%9e*E(%>yQ1#Y`KH!w=dQ%zs$Syv5A>L$}`z(n*4D_UoTFbpcFP(*s;rOj7TuI^Y-YHQ-7l^*=#2dCxNoyD&^ufBfdRv^4yEMe zHD2DiQ&ioNM zEIrdrdH4LY|7M!sH305SJgva*M{a9HSQxLnI}v8DwWQh#gk(J@!On(Z30dKU(|wW=Oo4 zA--kuLQc*F+!FG$eteoJ3+~nNiAJnvNS|x-^Y{Vd3%icBYWhX}%HeKMsP6HN_!~Uq zoD|>pIg2M>eyeBk+;qvJx&MTACv|9V{XF-{Q3d^D=lEMEXqttkpKm&O(SU!Q*83Md3H`mvEL+Dwg*j%F70&ClmD`9 z=QC!x1%J)%zMhtQTJYvF{v~xk%U@a}?+TVO= zR@MoT!%xe-&@xnD&Ldcv#Q_!#nS8v`wp7R&S<~h zGi!bF#$xyVOf^}2=i0p97=6F>>C0j@=g6p@JW(Sz^^gBf@BUq7@JIUh6P0%#o?A}% z$bb8a`@E8x6n@Fis_7s&D-g_dgGO zeJ6epOu2SQqSvl-efIsx+UMK$ulBv780Vc-akY4p@zpQkTPEFnxpE?#?YZnbwxw`Mza=?TKZ3o;iMZ<`Db0Pu8L(Q?BXd z#)IMKX86vPc(#zO|IM8X-`6_KKPzw9c%Ct(c%tF93)7^n-+o-4|D=bpCX0E0xY|am z7fX})PH}UweatWuoFmDxT+Qb&f5Y-UY;OHaJ_P?fl62XwO?Yj7&7}Ux7v!X(Yp$g& z-PyFY6J8T6<*M+CoD|!1{chhq^NSy*FNpo)bgH$-coyHPgD0k6Tll48;^EtZJe7Qt zjcuPZ?NB*rI&*77MNz8wZ?36C_q!_`>38KhuD!66y!%h7 zgSDkQUtG0jMe)UjF*9qDdy9T9p7*C+^z*|bY>Zz&zLR@*=p*x`Z960RUxj9~{oj>Y zRFG#X|I8z=reVp+$L)E~BEL@ihcF{a;0V7x#|17Jsv+Gr41L zo%Qvtg4T9NKQDi7&=d>n7rl&a6Y%yq){wQLt>l`hfSowTL@=uLA)!%V{0{6u3 zzPLP4Du0{JxsUoSuU_@Po44lO(fG^vMU8ignnq1#XS};??&1Z}w$i4l_rH|vX}D^? zbjIg*Y%E$^%o5bHe%i{-`6cvDZh65~@n6dmW0U_{J3IRi=ks&fo1WRm z{jIrrLpuI!8%Nk4`K5`%djd{;zqIBCAM0e3b4#}G@q5dekZR92E$-oEW#$+4jLR71 z_j=uSzU)?8Qn7jk_c3{2zaP7gEUz~|t9R^IQ@Y%bRXf=&)#thFS+GFJMkbWq;)-R> z+(XW3hc5UqNlnNP7L@!Yvh>&G<(;efpE+_Jb6=nL;o`;h$$#Xb<@=6pTm?m|HgwAU z+|0Y&ia{nyt1I}Li{%vkd!g&@nI?-HKhl(aUM%*GZN)V6Rh9I{7ong z-tcoa|L?2oh4;VB%|D&&EV-+1y1_QH2Vc1Rc|SN?Z~6A>ZP(V_nKK?Ateh1+SJ>zs z&*sL!)Y3gE(NFuXN*fm5IQDme+_#=gz0HL_pZ9&YVCVk8_-%H%@k8nAS^YcxhI`WG5n+vhzO%XmB%G-xy+I{Te zY}VbG|Ec__Ot6D(-j>$qA1!~a-{PxU+c0r+@3%|GA`V@>_jtBMQ{jSaxl`X8PfqTQ zxU%Eeo%a8$KPB3pJ2WqQhIsVV@^$N4Ph9=DgnjvZ?>XI8+YjI0`?&g}eL6?Yrup-Rhqg*L+^{|IBjXB?9l5xfW}vh|hgcSZ3>F z+4G2JkJU53Bfmc$wzxU*#qsd+=G`lN7UZq@&lzkUW6JEUsMe}_!sd~r!+N>9(Rcf| z%bjoQv3GCH;(2u2Uj5<}kq1ov$8sm_m;Q6zFK_)lvDa7CPwwtqcHOPq{$Q@ulluur zCOQyv~`z-_xqPG znpvO8cdl|xe_E}3!kn`g_;(%)@D+V|VBh;`8}<|&;+)+q`sNX1{)Yu0Z}`3XEFozn z6LTxef4)!M*X90y4Bg__^snOQkFEH$w3navM1DxU>&hlC7FM1Gay6+eDLD-iY74TD zPxDk-Z*?O<`~JB#HtMokFPA^+K63n@8zc8&<}F+{9Z?%5tnZ%b{FYzz1XqRH?ngyi zjt0%qsotYHM}1p`CAWF2hlS|(=EBg2drG$M{b12GN&F7SzOeaz>itLVa6FOV>5!fp zKl_2w;YBL?dK-5CdtnbGP}kdUx#JDe`I0V|M9hFPOrPEAz_Rn!UYR8)9g> zfiJ;sM}YBcn^WeAB@-jfvnwteRBrmnxc%8Qm-4ZH=ch~l zyZ8QYoZ0yYD;M+b`jOJSygsw$0J|LfnW*zt2IX1*m+IGQ&Y%7Bnfd;o3)eZT-H*Sq zUxxqr%{%{Zd2|=9jjyJ5iznL~9^3y<;;?&s&+UYz_tsjNy>m1F za5dvXVf~}Gi+4oJuLU%Qs}6IqWBYRJYgt_>bOYZY4H96lbN$uIIVC z>#6X>&#OOf+bPd`>iXC3{>QwuADy>+kpAy_@vD1VU*=giSvyy4VmtZn)03kW%;&6H zeAc*UCeJ@KmyyY+?vcuAkE5mhzVpL>-d$&{Vz*#Rmf5|WmseKRoin%nGX2r|mtP&+ zUKIIC-R!I8du;QLIs57>$y*0M)EXt#mcHpN*>QolTlScYrD&eh|6Z9B{gc1VnEx~V z+#Y>x3&oxiCbnCz)|s+udR*Nq@xh}0fw*<^!~VjrsW~|hUkC5M;B(;7%Q*}m;ZI4J#7EC?ETwJ|1672IP$qVVn@xJWclbX9~ayITC6QTW&NH{r(T)Y ze>NBYn(*(<`F}b0T0dy-|D-Kl%GcDsmucQ}o2NPR{j*v-!zu$iy8qcVvPR#_x&D5~ z<-Z-iPW!&htl&RcwQ23TV_G^Fz00m1H%Tj<%D3(P^q7`X<;RiyFM|z5CDvR@?6Ebo z>tA8}y0u#2Ijhm`wr=;^{%0rVRfO^PFK;<^-nF5X)tCAGzQ|7pn>cO7{azSs^E9=) z&s%?D^}k8?+ovAiGvhJ0{+eL`PQ3XqZ|yn zFmzVLeSyC7hrD;0`dRgfS6=#c*QLMaYd+VupJvZA&(_2WpAi21@A2!?=UnTK-UtsU z7j~Q9yXVTvZ#@q;_dRS+X82xzHT}(9&ljKewg3Al|NrCF{Quwb{q5x#`zuUtGQ6qj zyF0_W{Kmd7m%M+5#$JnjWzT1!F0KDg+TgiRA8(!N?83GCepc^}_3Z_1L`xAx_boL3UdKhr^)pS(Y`?kx?Y{8jw-xD}2AdZ_*I+ym9Z;Glhdc?vuhCr7m0PF+WfA!G%e8g-Q5Q^qCYoA)joakPD{>Cs3xuF z{f+#_sCT^nJD13a7r#!fCLpqUA4RRSK0PIqLNI=7o0Ocb+e;Oz}H^O)h|hlhvf@%+2@eV_S(jSlm#30}CEc5kl1-Z|&9 zzdGlBnA|-#ul7sgoInM+p8=cZeoJ{=ed=K|!=v=SPh#{Um{vJlGpLYsZn@JjuPZ!} zc^Sj)mB)G6k7=$hEU@=kiCh?D3&&<5H?ER6X?TUqS+GX{=X?Pi3eVsS0 zZh^a9;Bt@nmPa#L)p9-W>lAJNQE&8hRsD|u@uPZ|j(zq1^l18?50@QI9`Y`7-7I?X zDDO4>nupwd)8)7Nopi5SbN$bvxw#W8HuC@b&~Be|&i4DAXBQSapWVLitM2{$1H$~r zW|i8UKVot9cFV0VbN}&8&3yTYImUoRdJUf8!-aQod|HO$vo_dkjDwGO@2 zHSS?y~*1s?hlbF-3zEya>GVjA0zlNP585Jwf zOv~faw{xs&6uarOH7vi|UuflZU0KKT{AsNp*jG)wJgc)z$+o+f;iYE4$Cm|8zDw6~ zUUs_HZzWNCw13h4SMS2zdLBfV?!5N&#oOiUI-7KYv^L4#ws2Xrb@g3~MGIJrqN?uv zS3IV3xNO0qyD#4g<-^VbV0b#u<7}5rTCZeewjRdvfYPG{&%^#k_4HZHlFY- zjWB4xD5~7-s46&7yw7USi+1+Ptrum#u2AN(Fezm@(Zo}dA@XID(}uN?lfp`WAF$P) z|MyM$YH ztbG&KEd5}VH);Q4u6Uyb5%XGLaTu|MkFIdR4jAzi1On3|7A^STX{ zex*8_?W{a)R&-i-d&MOlNmaGQdarJz{%PjxV-Ji!>m9xAoSMg<7y7T;{`P;gc;Ea) z&EC_a>zi}_jq@|*IZ~fcv^k*si39H0J>FZ^ByWViU zV&gL_vl14Xe}U0u{WtrZhx^rZ3hG*)hiLuqRf;W~CANzHi}|s*3dgjTpR84q-&ZiD zY^*)CFKut$>oZ{s_a_V1R?Q8Y^)q9RkM)uRDN9`p7av?XD{cGIY3DtJ&!(8ax#1QW z`SfC)-Lpq$7j0KCI(RZ{{Y?js_O^)fUMH3pg%VHC@NLL_>?SlJzG>#lhHJ_TQ#7__ zPL=39n(%N_*Q=B3r>)Fce2#hg+QrjswyEu7dg)+$*C3?^a@ZY%dn<*3)IZ+p(&(pquw#%3iIeU17_7XurstUqkqc<`mwo8@b^zu9@K zY39_L@LQa>o+$p*SN${PzZ3UQ{g0FCoy9slw-z!=ioMX|MzAzR zJ@#iIf9;8n{?)fG&jKw0eaGH>ZTGufr`dN~?et%KSk(99=O*zz3o4%(&wt6DvCpI8 z_1f)XD>IW0c7EHszIN^Rnd_}Tov>;?o_X5W{O%Q-zc2mE%h*KgKdILnDV=)!$mW&H z{(c$DM<*Ztez*Jl&k3&V&FXT=P18S3?5|nE6ObWqS92rz>``XVlxy0z9d&Gi_~grW zNTilEznKt_rl$VsOjc@w&mOVVex(Bwo!n<-`fN*gu|74Upmy0wtC9qv(p7oPuj{h6Np?weoQvet{f-(D;^GeYrzf8Xp!K`nFV-88y%)M(!tEiK9G zoza0;CdoeCW0tX{?RCNLm<4LKhqwKc9~8Ug?GeXKwE}-XEnc>{c7jN9%#XS6YmQGg`VcI^&inRp)b|f3 z<6qUfe%UN2RQ`w~MgGsX?fc&*2hZyZWb*l9Y-v|}`)J;Sj>MQPcaPWVTzfb-WQ)De zquJB+{{Q;%^tMUe*OTwn`0iWC6`Wb{VDTSW_U!p8_m3|Bx?qcsbTdifSp40HLW5e7uD03nCt!H7OG0Vp19eA?Tt|z@54v$`c}L!b}2isF--jG#hdfi zf7Y2D@GN}Zq-k=BSjq{(bom-_-don*|Qf%e)s0XbJ=S6WY zp10*ML;p7sRmYTFRxyE3+y8h9@Saf3-@K*qN$4iwTF2!1y(ygrGvc3R9QW$WpOmAy z;IhuijQxGlkG}7lE!evA>ZGlwLjN4LtJ|?$dCpGuwBtWayf5$E)VE1CVT;6?$FWzY zG}@xSY&fRpYYbRL8}aGb^}wL5;T zdxgR_jZONN3aoM;7fRc`SsY$ba7EMMW^v1;vU?}&4O|&7YoK07P#Q$L4h zf9|RY6L}R(x(Xh#s>c;v(DaI7iVX1xNaE+v-}HXRzhAGf&)B=|?jhxiD$CSF-?@Cg z=gijc{O3;Maq)ZXN9LN|ZS38(b91U)HB%Q$qK?YLiZ3%#uA1-r$Xnm9!f7ezx~w25 zDNTj>Cg>c7hql2sWruhi<5K(%>b0_ncNz%g{8$<}`|^td*5tY!&F7OZ^1Rsh(yFIo1-uheZyAL^-ndh_IiCflQA z+dUt9^S>;)pS%6;vyWBRHqU$ddcuv(3jI3!COf2xsg#OltgrjJdUo~uz1Odwyc!;V z_fElK-nlGF{lOD?+@|fAeCCL{o|#6?-N{Fk<8xHfs*dcNXRAFsT}VYNXS22Di;A;V zU8&VGZnU}ii3p!M)!2MCIR3|clk0na%ARdKUsbpH-wWrn$0ivz(F zkaDBx(ew@N8LA9yC9>CmfZ-8a59%uBw}XK_z{JNFge?uVSo9~f5`_x~#}ZruIv zYvHbEDe=#l)~sJJ|Ikr~T1SN_n|rRZlLY5yWN+;XqE??mMI$NVJ%Kk>e z{)F1*u_qY5(#zN7u0LR=9+>aa#HxM!&-A zg{2v?^VS*4Sh1hoY~N+PQMqr6Xmr63fyY`_c0RZ6JzTn=|LxpuV(K}c-R(T4@pc*TiLKPx4F8k4p+}jZ2@tq&>G_d*M<~TgN`}~l8 zzEDX0zWkqZUE9`joYcKBqk-j7{f5?9$8Zy)zOok&LetqV<|$`r=)aorcTjx(=v zOSt%5=9f8S+;Tk_?9Lxh#rklnOn?>lrGmI8He88XJz?!`hxk)PN@I>?9u}S}re9Uy zSG6{(NptzZlXezfTl&|%y;YuC{n2?-XUmjn8IzwpzFU6ZcE*C9J+-BiI;+0SusZ3! zfJ@rcQ%~XK*8aLLi|2_X2dqBi%GYV}W5@4q|8{SF&h=kzAtd-IF#@}B+t|Ka}& zdp_0wb|^mi`CnP_n}hOZvybI2Hld3 z-)_sNR(R$d-)y%h?|00#49ndhwmbav%O{U)-1gkC3;N)H@AtiDQ`gtH?hL$KsAA%w z@Zns1+MMhQ0w>~R4_&W$d`oJD$Ml3Lofc_<``_2T|D5c1#Qopib@FyKJAO`-|2eV9 z=g!L7uigT+R~{?H@YX*RuRA!I@6p>V-Lj zXM;i9kE`*2L+4LrjjhZ4YrW{X`<{vZJ0cfeIj^<-LH_mW*Jdkh?EDxw`)!j|=alLD zzAUXPo~)wyI`B_m`?a%v3%<;I8}OTJm%Lw!P)2 z9JhnxDYwPdt#wNG^RA_u-|DE#-raETxb)L+i}d8TF?Z(H_DFuUls&&@dl{qOC(ae! zg{z-73dgKFul3={WwG86mf~QAMd21~QArbPq>W|5&2(mF)~l3U`#fXUQ~#}j)-#)P zZ~v>ga-Hksn!{@pAMR;%xqW6uOLvRH+?(zVf25iM56J!5zC?HP(lzg+%bKqxW$_=Y zeq&I5!S2Z6>yyo=y>Z*I_5974?Mt2%cAu;&epk5L@M(SEuPT6E!r#k zvU^t4F^AmMx|Y{^*8SbcKW&G))ZUwDi#?8;)FwBq-Ch1BM&;6W_ZHuU}7B5pU;u-Ec(f zHOqX74+YOl1HWl7S)KARDE~V9-n|@~!X-Pu#{c<#R`~n9w|DOUEB~Kf{I~wsyR^#t zjn9ru&Q$xfViq_zolp$Fyl9g5Gs&+{6Qip6+fZm=26Qkw7CiSk< z+xOD-?B=?6@+S5_9xb13|9|)UoNKwuR=my0YixO2d0i%J-aq5|?Um>B|7<^d-TuRV zbN7AIlV0hRC{EW2`W3wW>iMl-pFTU>e`{|_^}0u%)-3YoD};O8UHVoCK!KPsZD16&PL-?CR-V@Kf8%gnRR%BOy4Ejw~_N!k|0d65f$ zS+Bm+WG@>a!hTKv_Zp#_r7>Ie9#)_9j=S{X-iIA?J^GLNf0p9*cz=_pv-oa(UQqGj z8MPCne;t`CnHE)V`v2v-cN#wNG1ApT61j{ORm7bGGKI=G@qw+iayNC;LCO z+3m)c<(VeGHzr?`E?6cQAL8>$^W}&8Yx1_pEA_l$Ro>s0Fh%L?tr_dDOYFF?uj_Be z*PqtW-{wUbADr=Z25a$ABT2LW+kW0U7Wg@T>&`1_c5z9OeUG!tid+2Ce@97t>wHr9 zDmT*jV(Y}JNB)m{mdw8Ytzzb*iElg?Z{NiIs@%PBnQDyJM^WpUfjUjHKmC*oJ@)1B zr@EHT@OG|pPYj>`dTXC$*cn&v=)y^F-Q&25v$E&=xVWyI`u2*?w7-R2O`>8&QBSt7 zn5>|XpBCNXY$ko{g64;&#SN2<9d4ai*uLoaGF9&0T`!tmxG#Sbz4e7)oK?f2gZjTu zObJT26bNux(qPu6c|r5h;lh^_44+J?nDY3;3C4nn=C_*r&vj4VRk7A8DPCLQQi?sB z#IJc%KrP#+7jM}bS|qq|?w)nVhnp?BW=5;~ftj6-Ol#KjynOL^ZcFlo1(ScP+_T$N zmcz^Ot0L{F;ffXPMlaaya}ysN>a1<9>7T+iy;&zuSBK(2+9>zMWxT|7e-<L`y`m>_zdg)pJT1-?%)6O<@`UN&n;(*o^Iu~`gY>V zmI<{LyEkoW*oANGEp`#z`c<@CChKexvJHnl(Z+LZrN`KAXp{pqjr zTVg^kKC>}CCuaC0!seY)4|h^=O#$TKKN2K@j+lPnSXZP3tdAv_<;bVSz zxz0b6gs0T-F5DczvebRgeo%}12ZC5jP zUo*_Mel=e9}D9dp$bBCq%SeQejBck`flj*r#;6Z7x3l-7tWFBF(%$8yB9|JT*` z>DEr4CeARe{1WwASgSv7{hA4KkI#4g-7v2w>2?3Ea9RGFsXSpXd>XpsexK+Goxd;t zaN0l9v(Mii-^Orc@0P#ozN9y={6DQGWw&wVlGjYD?GI<0FW;MWmZf)giiWCTt9z~S za`mX_okw(jDoxX3Ss=0Ec;lIz66dq5&yKfldvkk3_@>;OhU)22KcdV%PYH`ncpp(e zLwHx#*VBdP<&Hkfd?S)_MqsIcI?w5{vQ10Xb|2ZT`_3ma|Ld>h*yW|OQ;V;=ot+^b zn47jf<|OB9v%XLJpJr#DJpN?71M$%mB>%5EnKZ=7Z&{QBJV zM{~E_%3qb@d+p33R^1khjOUN)qIUDAiCx>mRm!(&-#6Y(TQwd%$Z!sS=UwtC>&oIi z87Hz28lG%wp1+8B=dGr~N%A{x?fas&ut~09sYa!SOKyi**WzS}g}hU2ygc2KIR0g@ z$m}V)wdx#uUz470Q2?jU)>Qcweiti0p0vw-bK?Dr_J#ic7cn>T9ozh+Ls;OwsKUvm z?hX9%b~ZB_=D2>hh|_y96~HDCyto{l8Y*6;(c0E&FnD=7|$)+|xMz9*zIwI#agAZte3EyI1%NGrs*KqopSP z+(^)~@Y{#Uj{Pr=T~y}nPh9`T{y~4j_YFM@a&i*Yjjd&7F4WzhooOIFo25Ir$nU~? zsl@>t#@<`w-1bPi39x4hi+ta)P5w=<;=c6M%F?s)8|$9*tvCH%`|SMe-o<9dSD5FT z?mEjT!@bxz?T^CtABE3?ZgATvKe2vR)t6kUf0dt3 zl=05od1B)xeYOY7HD|pwTEZ^7YsS%iH8b443;4g)f8G6=t-tP*pvA@IjgLCF9pKdG zu)VfC(|h?7F@v|WFCSajH~&_S^O|C=(zNTJRM^cMJzX}{Z$6+LJ&85zzj$A+gzd%* z>((~DmyAxyflaRFuCCpCUf5i|-6j1uWX}OZIhBtUFD@*6w)bmb89J z)aUwmvCJ~X-!Np3^8AcT!kMLWYuj5NTLt`@(EEDFw8gsCi%!NJS*-j@^nIMe(E!fE zbN+`oAGQCP%kq-D^`A>zN$#!QXt~C1ijzgtY^CPQ&i><(QBokVGc)^=LF=SGPaDre zj}NQow9WT!dHbM6@xuQvPleAuo@Q%Np1IcY`WO2&^Zx5*Ie%w5_Dxw`CR};A=4Hf( z!u7JZFC6@3uvbDs)@7mY?JwOAx8;hSty9j=sz^ALvGsb(ZjoJ+wm4e#`X#yq+_r6= zB+prjncv2?s;^#e0Jr(z<;m1Tz!7|nINqIW835jA3|rhcI{3w_UOO7ZPFJ@ zPeudFji=mRIVzQ89-Dpm&95^X{$&1i(p}fTWX}zu=?NP%Yv%r44qQ$P3&8uEJt9O66q+WT`{kh6-E|opYeH0lzn!1HK)P-M3 z@tpExa}<%A+!kifb>OqU^79v}}_6>f^sG65q)y*S_eAJiAh%2UDQ@N`*SD8jChFW6zDf`&F1i zc3enN)0Ag>ba&E+Pdm)w)tA4Jop)x(L2)~Wkl&iI+&jz#A23`A-rc-tk!#=?e0% zlJ2h&KXY}*jcL{oOfHD8<3A+sy>|67_qe|8ptZYFaoZ1CJ~}M_Z^Qoilaj-(80XeX z)i3^Ad2Qp`eXo)_&EzjXm@4^|X`bW@nP}FP-*xA3KPueQ-~J@vi{rjC+><>1Ubg>x z`PuWjch6@{-}@%@o$*KMOZFnsYZoi-jQqICc=eqo`?uRmWp0#39@t#J>BAS!WaGOY zPh-xXvEJsr_WTarhU7cWp8~kwp5Wept4H_Z(!XxICM2#|@=>*dt7z-}^k{2WrN2gQ z&uZ`XTpzavy$iL?i?1~kJ#80tWTE><@tzXZ>yhCvro<)4*G~zJ zHQMq!MJd*(n(=A(xmc^P6Z0b#_Q(|P2)ndV^P8e<_M5{EM-EKm{q3Q!!*^5CxBYu2 z*)?oVdc11lq;~y6k;7FVS<>vzz1cp6p}%PVlQ~PDslUuS@)Ks!-#k&I!A2Emdl9HeIr{RV+#0 zG{@2{J9}E##`O0#k~^n854|dOfxYjers~z^`F(5aALRX1FWg;{lrOsSu9ZN~^4hb> zTKjU=zhIIV>+jyWRZb=B@RJ6XOx3<^_MOYh9?Adht=fHS*QZO$7OON9m#n|MlJVKJ z?WZRsP3ZG|bKkk!^R3B$)ylH;otwpfn!hQW5b$rpH;&ev6PuXjJDcdvQT=`Q#Yqc?VybSS{MO&&o59?Uu^b4a`gWH_A^= zD*W*w@xJE#pJ&pmVm@{spZcnN-9zKe92=c&I_Jw-*BsT3d#GQbE++CqXHRms>^$yB zwl@zV%42%!9&*ROQ1P1B+<#L`zv3XbO__>~srRHE7u6U~{z|G9NVXGO(#R|>t)e!y z<;wMwKP~u-r`-_yF@yK@v^7Fwr@o~ zoAKwa+~();|9$HDpYZShG4tc2-Hubem(Bhmv*%0Kv&P$Y_icV2xM2Oi>445Zk2Am4 zt~$bbR9${)YWe-Y*ZuhR+_kBz^>1(KLks&C zkBaBiT~qD1I{x^x#lO3YHlCH)RxIBzK=^NvLp);cEN5BsxlrQNENeVK|IHEln5_gQ)G-MfH0^4RnX7SDV(pa1f+VA-P* znY1&F~_Sj+Ge-Uue(v1b@b`k8*9JudA!ovbnsWC z;eVgKztwDN_N`B2eBbnOPQDkv)aA=(=f(S0woCA`oeY?|S8+vooZCk|{o8ZnwXVF# zyB#fYFH0`&UXI+YTN&p}>*pIJcE|0EX=t{6lEnRkHAE+Smc<&og%#m@^ZzApI-+yE zI<-C1uTxuvogsw%?&|HXS@Ff`QC}Q#LyC9KlbZPAdu>NO$NVdcx;1Xche*F(czw;p zeL=Sq!t^ZakKBI1f6nsyb@taw;!Z?I*me4TJG@Qf%ofQhn^gnSA0Bcjm1z{0V1K_+ zSMG;O{?(u*+$?2_emDIO|zSii*tKi)Bej*Mo%@GJ9Oo z9~@ng(s)U;&e@Wm^H52MKc8D<#gld`=Jh`oF6Nhg@!Ylg(eZu1ROc)#+inm5-h;Q% zZN^k1--m)$_iT@Ou79s`@Tf4i_(2<^Mclz@VLqQ4pNMg9@|yCA^;u+z&nsq5yS*Os zxt(j)_%EBBba472%{Nm%ZM7}fD%bEhHcEx@rSq20)9Zgu*M02Jd;HK&1=;lG$ex-& z8R;8~?X|Yp|NnWu`q89)lWKa@V}EoQ+Zk0Pd|1E3oBh+7ZB6UG*51zDKDAV7AM2gH z90pfD3LCr6Zrqev9{>LLYJU^{|MlC=rtkY=I`6~o2QSa(%Khq6UHkvf;!sv6Zf>tlnLxa(w3 zd$Idjul-G#9Y2B=zF{`)zj-{%?y}7%-`$Bp++Vg%49O{y-6oWL;>*!<-)b@o4;%G* zn-yq(JoU)4Q)*^b!{1*mvi^1dzt``t{J#7C-9LZM|F8Lcd;j0tb-@f$+^(ftWoOn~ zh#h?#xa4Z-N$zVUynaftzbyUt{5+fgtv}MhdCp`0-m2 zu7tfqx{l?#1Lx}+H(o#PW|SJf0rcq#s+Y zUBB+gB2zu4oZ`o)RIE1TJl9zxea$ic;iLje&nUx&h&-4vIkoC)^;BiHtxA>@Ng5y(?@>|7vJo8*}6ci zYJ>aiU8-zrvc+#dUwZ#sj&F5M<=tSmW2sF)^iFPTsy+O9vE44^+}#{v^OmSbmTW%S zEb{+J_^p3U^A?G_PoI_DQ&N$-)-vf|-Jg>sJVND{y6%6H z-Rj`!X`#Urg*Wm}mS8m$vSyF-Q{;{Ca}Hl@P!GDY;m6sF<;b|U-Qc5 z@~!s&TeRooOzn{>n&&c&&Bxis`Ns^F$4hMU+$Am<^3Ge5ao;mfDzf53x8%IZf0V;+ zZ#C}j-PhRpM`c-IL%{cmrJ|4JUjC4~{(Zt+jm<0iyBXSfr@iEQpQOpGF8naXDC7sn z*}L+83qH@~|6lj{#`gX9V*W0hpQBg*RJ#2}w{*?inQiARodfcm%R3D(@V9#Arj-fb zUbj3r<&{mA=Hvx@H#%>}vHiKBeD+jh^FEi#i;e1Un);R~#~(}kzx#!y{+5}O&-?16 z3E2Pmti&F)y7a`Y*>@(k%ZFJz3mD(~xOwYTwsZgF6eg5?pCQb#YRe7PU02_3N#-a} zQu&!O`|pQl`9BNPTS2ES|Im46vcV;xM$%GjhGrV?ji*!oZt4Hhd;L<-@4m(#hmw!y zR~(l9bMevkJx_J#l|1>|eDQ z%Jd|S!C$e^xW#GCBdg*kn*WN8uIb*Mxy?2Aa&6+QtL87)mR_y8BDUt|?^};pvjpXH zzq;?3%==V%!X@^j%2u@jouv;Sl-nE^6yGF&%-vFL-onp1b5(@id@#y0J`&_N%}f1# zx=q^rvbe2{Hw^cch_nj)|PtP+}f>?JFD;e!TWPw)GfU^A@6?uq`oP?U8*-F9?-gW zsz=W5RojQc^duj>ty+4}g{NFC5@aTSq zb>!O@Z+_@Li9WJ4zF=XV`>%Vlq}2m| z^=%>Z!~gmIdno*?Q73chGAo-4F59!TW@)b2){?NKFG1&l=7o^(ZFP?r?y<0T8IdqgZbR3wYl%PIQ{oU`` z&(`(-iT-`!)Wm1M=I`3M^L_CDLanDVYaTUbuHcPh{dYr5?!=BG-Yr`jZke80^iJT@ zh4Kiw{jaUh?)$9w;rND`7hlAy@>qFV-TV8|UT?F0j*;rgg7%#^6(%u0(^={-|7nl=gveVe-j!clb3U!Jj5~NR z`S_Wl`*{=hy*;Je{{D=|#p6fRUQY6Ta_-BaH(F_rK5KEwEq*@tNKI$Bs#-@!`y`cH za?e;(^BK2`GfwKw*{-ujIL-7^l|XzPF_B*NuA*p0l;3)rG2^`=w_1q%bGx$gU^0&mL^?&zd`LRbx`^ zO_zxT7k(*Eh8v)N}Qr&Z7QEw{;#zRd+X%|8pny`=sB|KX_*T=Cpj7Ynv*T zqBMKX&2?vY_WXA7t@BLGahBJ+^m@aM%%@MoUw+@Ps!QptXqD6DrB&uVagJs+Ogt%y z3_3A>6MiQN>b+H2nVX@1=wgGvws+B?$@R$vO41KBw=Cv)7i_U((fVu5ynDQ+h@YFQ z&%1g>a}eK@z$q7}DSdop<<;q=Q1fVeR-ubU$%@I7ocTN5QzA7SUff8U826Cp>Gi@b zOWjRA9^MQ~_;-{Yiry|mN`YSByHu7t4}Vb#Yuk*w*MMDujS8$ zb~}|I_M(YLj`B}fba2jf^S8+s-=-e!Ro>bVjqfZ4qOw$iqjkc=IcqKX2@>UGwwK zbGz%6?F!rYL)g8wDM`mZi?|1wFQ^vvh|{UtNjIe70h>)2ag7OwCAA)lO_v$Ds*c}x3-Gbsly zY{#oEVyE(Zlg^7rC+F~lZ^%-+rw}I7*K;!B;oGpD7s3Cc z)@)M@PqaUCCT98j?6Ts=J9v3==bTvMmexJ*#HM?`rH2=sSseP}+Mxp7Q(p@+Zz~*I zw^M9`*~a&uX4Y_e6DgS z1u=gd3bZcPZIOL@$T~%S)|=q?DXuJHf)OqWw*_~6QC*+6?)S<4$?@g;HmyF)wq^Rh zA6L&VE-$hFb|uwIm#;`fc&5}LuKyM@ItHo_&|DWVNJG=f% z?AcqvZ&rVNRT6MU_VQo3jS=0bDMJn7n&TsueU-s;njyH%3E^jUxL(|R%eujiiS%74Y{KZ?&5-}j+adEI8) zkBsKmW<*Au%g=NzBmAgFKg;=@LbM5dJeiO*v9 z{`+lp^6}lOBhgh4oXvmFOY>;z{&-`l5z0Y`FgK-gWms z>Sh-@@@I;!WejXwwZ*o~$89&S^2xRxjs20oCi0(<`tZ$Z zle7DDtLvX{TFN7#f5W2i=sS(i8D_04>aUY8PjkuJI-^VF@f;Hkw!NqLkMHhz)!cdb zrmp38Rq-*KmTP_9S?y>r z+mi5)lf$;A>Tgq3j%u2;B=wG^!&cjyqAhEmdRk@dt_XU1@WiX2gqUMzZ)7c<_=@AC zzhlUfNu`%HY98e$rs*koDqcFJUVO93bW%xo?rqnz8LBUe7j2)+du!$zgRLBytDf9^ zzU9Cos|#N7|FoYSJTd#|9jQMY&(=O$^5p)a+NWO|G%th&p4`1<);kl6(nY;lUMfz> zj*@OGgn1-GmQRf_nPeZt>$057h(-5RyV~4Gt?Lq!gTFOC>iwoF{#N?+B5-R(iRrTY zf%hj{7hir{e(z$;pFh)0!uLMR&2>8Kr!sxtkI=Kd_P^sz@BcWE-xE6TUS*O_*%Pnl zQ(rESk9eCd^X0IHjjY<{r*9({w%mHx(7ANI?}|sh_ZEMfcP78)gSqX&AAjmUX!HFQ z?y{$HfO+ANe3GKs-h?o1xp&c&kbmhXG!gaZd$Bv$<{eJhk zr-xksliF^nJ3DUuVV*y!zfxeL#YT1W7PC4yeto=Ct|F7%6 zA753G{r%$1ohQoSHBVZ)yE3`|I>k!`Y%AYA@%?6IyJJmO;$2ZYB2p&W{Wv~#MYhcS zvJB^c`R>=tQucjl)i-%x`@VYi>-GEh9cg!eUin|yGdgY4DuMPF`D?n<8U5>6w#5Co zWV${l!EE)m#EUE+!%Q3tE*xEabN?IT2S?O7_H%uyIK!wP+jQuvf!y*HhxcpbvP^jr zB-3aUbbjCM?RrrsgIAZW`f0V=e&YP9oa+<&Os<9BS@-yx-1W@Z^`%P7mp;3@c3Vxy zU&eOZsS)Dq+CKUJ*ri+3a*Ef|?^%`x<6+~tL%OP*iiz#*0XkDNH}~pfW_%6x)-l@s zafhnZTgGJhsfK-@lXiUJSXV1^{9i@8%G*$Hi*=XHwwd&8?y`Nfw)Es;{WD9SJgV;w z|L~xDsm2?}Jn7SsRSBtEEzda^M1L-qN$O5ne%Qq;F*Rp~&7sv>N^Z|Pb>YCJiX~$I z&ulSwT)lvqYfFew+pf~{AD*oY{c!b}t=V(kd=vlJO_ht>qVH{y_WstTn6!OcW}u1k zzb`%7PD0h+(!YfG=c+%KUmpFuX0LVqr(=Ij73*sSEBG5eM%u)Bb9n^y=v|n?qsX0l z$W39{jY7Tn_!}S0cI>(G_R*e=5#~L*+8$Y(67m+J-&lO?^0cVG0n&f2 z9PRJ>DWKUJ$hai(cCfU6kI`#g>z8(Q*SF7({&)5NjhMf?wwu-ep8rq(>?YL%eRqn} zH*fmyQ2Z|R`me_~@BcA>pD*|4l=xfQS^j4-)~2QlO!s=1!q(TG#+}Tt(NN?{_o>)( zFU{U;2>kxs?(@uNjq-fhyI!uhy6eNkm9cTI8$2WtDVeGvC`dLn;zR2{(V=z|FwL# z(#12@Uk_+z?&-MvMexGTp0~lb|7^K*WKONyM)~dj8N1nE*>ug}s<_p3h+F*jp|@sJ zd>xNT-#Rv9ZpU9wR!Om6qK~!jFSfBbI@yuym9I{3c$S9avCt!D|M}gRtp6=Bd-wnB zlZSeeSvG8~*;Bccbnyhi4M*;Fg-DVflUy`V6;T`?! zSIU_?wrM{*crCB5nQwkU|M7M4-B0BURtPLVu{`&{?|i4udEc4er#{mEJ0Tz%eP?75@KcFPyP6Lzki+kV`9>Hj7&RoQ&8=5@Y9M%($4>VF?~-{8r&CCfqd za`w&Ze)=|Ui_%weT@Sjc7Q0LTzw0`m*2boy^c+#16*u1=FcfI)OP0!59Ab3ksnVZU z3{@qC&9$!{1D}Hn%@Nsv~)Jqqh_$|FJ#=slq;He2@H{Ij`w`YdL*_A__O)@~QwzBlOHGS6v@!s=_M@!K$OT6%TrvmLw< zZ>@@R8mC8QI|xN>EHIqU&M$aZX2a%d`EhqmexE%*fA8&_nZiH36)hLAFy=nFcsIO6 z@z7BwPv%J#g=NXP(zX|N-f%9v)@0+^6_tO5nLoa3>isQ|8O0lqoUvO_^5LRP$-C0P zO&)b`w$|QEzB}>F&Ud?B{}GIwbgM>WiN2z=u-lJbozr``clnpaJiEL6?v>;Jj#MRB z+n2nUpuY4#?s9?hxBAXj9wFJkC8GRo^41z130C(=6_3oz&^cAW;_+xhT||d|GXFP! zp^3|rCeE*ZIeVM+g1%UQyovY8)=k#x$RyA90l6$#LINwL!m$%m@=g*ga^SUc_ z$z$f{movGnj?LY@_5EV)V`{Ne`Xl+JIt&|5=Da?Bz1Bzg@217co749Ef4bA`p3yzk z*$Yqb>=Tu4Q`mO0n~$BVKf}2Hqq6(to-y_q=Rfo#{90e$KXCY^4!zqNW~u;$f{NU8LhZ{Yb`x&3>h&?6U&fGQJ!Q+h%N> zU9x|vqg~ER<=^WT?Y(~I8*g<|+Y{aNTJF@(UA2Gh_+Ophb^Ar?exta@-!8sgo2~9` zsjzNRaf@{N+OpFN{O>)r%er(?T=&oG8*gTP61#mi!(M04)a(ekt&G9bFIH-qTkrD9 z@r)~dY`V(c@{HB8J7phLpYB;-8#v+mmzqby^AjfgG2T`%@yG+F6AEz?thi0~Eb-ek zahur5V=5}8rBilQd0Y~*$#pDQ)!?k}YII?0Idi)$*Pch}1}8k1hXy;H*M7);EJKFT z>&WG4g$owx9kx(z4xH|G_L64ZOE-N_w-$I=AJ-y7oS0kNXo3`-XHnt&ADft)$hI3cNTn_c}@S=^$uTV zYj?|^SD7szRw;?7FL=M@!TgsBJev>Q`Z7({xibFzW3%5MPkdjs|rKd0>rksnjnTxgA(^Hia-=I+a%*(>}vF}``sc-(bDnw{If$$|Ev zedcTQg}k=kudD8iw#``P`{&oADx;+B8*cV8bTS-kQ(0JXUh8$|-;Me5Z@l`pJ*oFah1blLZ;fk>E}gd$vA6Kb4gL}(|L2nOO}n2__sed*yK$iZ z+yAKivwX2O4x(QjO}>in$~b-Px{;sL7TY-_?P;k)HJi6>tzBOEx(bT)-eS3De{BzV&M&9kqS&wlg2IriakuK1=9 zFRx4e&1$tK>L%uAXY!urdb2&}`Q&LwZ*Mw2JGXCbVZ_P5FQU9Nw!gc%^jg1z;ln4H zS00ycO#gcD?4{LF{@Z&KzMRzL)*aaLcex?gNB_-XzkR=~^gQ<9c-E5>X9f3EU+-SKBrs}Q za_;%Xx2GoxY*DJbDjQk1sh+FjxK8eRx%A`G#qzTi@4E1;_?W%By!yhLjQ?vEPW&_J z*n&@~=g#@-UGRM8$o`D??(LoJ@7OAhDuNVtm$o+inJv`n;B`g)W|V%-3pRfHnos8L z$39-ld~%Ux3D4sdo91aGPgFRSBs*))##QM~6I0!kT={~JE3!8BDS11})ofXB^=Z>e zt3R7M`!byOWv4BfxIKPe&8L&k?i8QD`;qm|H`@pgJ*9#)w}x)bZ|m>sTKODtKC;2} zxzR+GseU4t0+v|Zd^Xwbpl{^Emg5JyHcic6>>0{i+9DkHwk~6y_%Y47l84=7ERKF! z{m;K?!|#&^e&5iVF7vPV$l0WY79yQW6AY?UoSR!8O_=<7rA+u)#xKQ>BDT(4#nTcv z_1zUKW}mQ}58lDs6=kRYI=xHtecs6*kqqD5e`)+J`xb4z@siB#^odVZU+gxZpO5x9_<*Bl_$hJ?bxE;1n&+^Nte1iar!?{Y1|RoGu`6g(XTo-2E2ci(*o~z zb7a_R{!^JZ<7@Tvx#hbmUs&I~H_?6jm(^#>82a2dYM#jmVrtsx4pHP=R z5wKvRLch$(tFDs04zlKbx6eF#_M`g8hs6ILyf$k#Tm4&n>zoZwt-4xawDhagv(CHw z-cQKsO|MqH_c-n9X}NzJuNW)3x|{#z-*?6Q-2=h-3uEi-=Cq&WRZda|zcv>Q-%H+KRh~r zyZcOv@FSrkofR?@=RVk|ePy@4sO*!Qn=X}|+!ewz=kBa)WwTFCdaYesUiN$AS`}-h z7acd|d-3mkl-v?=rq&_IPmtkyO2A#;J}D(}zdJD@*~u;Ot=&9NE*y4c%YF6Wfw-*f zn}`c57CZ0R@-UrI|MwQn7gu{cZhe|=^~=iD&rPMvK<)Tbkv$U2efKU?R^QdrbU7(> zdh_x!DLK(ODUR&kTh=c)n{+=UXTO1WWB0DRyEfe3m(G3CmBsHp$AlZ{|E+F!@y&Vl zeM_#a!0!dGCoSSQ%Hw=wwQb)!FaP=S$L9Q9s=DOevuzg^YKH8e_i{tw2Vqq+&to?g z?yQr4<5RiEvizi9dh|Dk-n(nBPcZ+a|0=zl<<;AcvR>=m%3HSYeeN{($K)lu-)uTv z<8#7VzC3&GiMYGoHYLef77JqK3bU=FaKcW&u4d!trHTubocpbzrt7DIafB6@9DT$ zHDO7aq&sJ#{=&^~=GRMHxWv#?loXiFaVUGTs;y+g`6`y(lR9n%1vyGsfumwuV}U%S;M zE;eDpWtBe~TLQ0yx44I|IlMY$@f(M9$NA^ZS*S+7x-sSOru-F)W>@K4Oj~pK^2;2N zS=-LZn!YQTq!S4q@0{V!a?bj_&HeSq?rxmdzckptn=kKE&MmVV=WbB!sxlyA*E*el z%Crf)X5V&dUlzdJb!^eiX)_HCO^SQPx2(^*d8Fod)8pUkqw?xLb5+|vIwe?dGiSZI z-YF#}Lnf&SZZgKTr&vQ&bYAV2V>~;@s^mq$=NrlWru;S^9P*j+`84f^ zt9a~_lIJ;{CgY%{z;y9I#fSC zYmPU+Q_%eRy78N;sdExNa+7bryylm(vE9b-{p`QDpYv}Hi%j=YI=wGpK99-8a_&>= zFW-Moma{mg`q4t6x@qrYSDx$5DqBxmcyUyoO#S;pH>|L?RV@FK!rdhkRF>E~JifZd z*+sMIV!nNQmjTmenN5|9i+8Qw`Z)DahtaK`Z*x|EV^7gLDPIzGvSy`Wmq*I)(*2E{ z#?4`Ct_Zb0k#emu)p-+kQ2wJhqhX3;gMR7l&tXaDd`!9>{B19se#LP8;#6MI_MqKA zB0uO^e7dZEcavv-g7?d7OO_wyQoa$iVx@g-&ThGyyV4umME4g(i|%@Ibc%EHx|-W3 zPwW?L*`v5y{uAT=1*N|f-4$197ca*P zKcgapTZY?mZ@ZVdw|?JK5a@X+B@jH~{af(DQQ_wK!C#NQz5V`f$s`#DO}n<4LQ2e# z0q#sgQ;{o2jaJH5eqVRawWQzl_)Y(1jHeRJ9`D*BCtK{i_C~Pd>u(ypwrX1v`)_>8 zTjYEArjJLpLUoq5)CwP61NLK?IbF-!iVf<+Rt3mh{kco`57WCk7K#58r&OOSo_G09 z_4~d5I8>f*m>hV6&qIhOm*2UfX0D30-}{pZ8Zg>jEwpIPfr#@*&rn02>I>z|sL z-0`w~S4!%OO%pn#>TkAlUHh}8dw$XKrW@~H1WRWexwe0u;qmWWYIZlL)@*tt*LiSZ zRj{)~vgR+InP7oJXW%R6ye@l{p+;(`;L?X{vWUQCL+bwkwtTc-Q}H9P+vn(n8+@5iII_1`|- z&?sLSA(krG=*ptz-f+-jb4TMD4ZGM${r{3u`An^feBZrt;k)N~_;u0_<6}1*SCuYb z)0QL<_g3&l`=td1i_{-WmhgxC>#Po%EnIL``DWY;#|w)4r!Nk*IC1QElg`TNFK;YA z<$2eiY1$X>zZ<_73!eC5G(APfx?9KUR&bD#|L1O5HYq6=70K$-AL0Bj z`6&X|)+aUc3I@oucD;_hN1dH_1h4QiZYbr&p`j zf78G7xwJaN%1kI+RlD4}@0MTr?Y>{~56g11s@FVJsr@pQDdoPxy*1pAbZ3>g#U8q9 z@X14e*AjouXHj{}-`-kx>q}?dkzBtmiV}a<{tfcUx_RPxzwh&pfs$8_Do(m;e$D*T ziKBLtl9HwE+&168SGsrO$@ci3yw?pIeXCe*v)mBp>7Ql7vv}IAxRY%Me$C(&{3kTK zciI`YEqC173V(4{KmUF|GA{Sr%`N4p*MF4Sb0qv1v+_|9Mfv-GpJ&vqNziueJ>Im? zr!e5eB59W65AG!#P+Qp)aP-1D(qJNtrFz znzGh3Zd-p(!@g7f=-F5IO#bP3-MK5Ia+%-i*Q~H9!p8IZHY{PP-ySk!PhC{bs*TmV z{bwpv@h;YV)3c_&)Wxr&C&)gC<>HA5yG*T5JGnbIU%eeV{mC7@ZN`GVM>=k}%GA7R zzwx5k%};yP+%?aYzBPOKUEuLsQLO3c#8ns9u4NOa?Y~UeYR{zBKAS%ertY3x_r;M} ziP@gpLhO~uNv;3ve6k`>CM?&jTivIo5Xd2XM(d(Q1c8`snRlx5 zPAh%YS9H=*UgyX^HZeBQS8hosdl-&7@;K%lzpA?1Gu7+b^*4nlruzPGdgv(axb6nW zUAaCVb&v9+bu|Je_ZG2f6ijstl-SWT{a)=Vw!j}JTl+^a0`}f69t%+1U;$e4adFj=w z2KU2arbqRE-fFOl*ZT8~uqDge7K{BhJQ7~V@vZP!EwkOt)s@+@S>5$<8@8=B`;~q- zZNkiuto=vzYj&;aV_s?#XZYZj<+T7qv1*2WH#dc!u}M7Jy!!XsG;R6gn@@if{t%H< zeJnC^OHXrh^gfpxYMoI!M%roLZ@l`LmYupcQkD4tx60ZT@-2sAwr*1hTKQwwnU+KP ziyXh&Ex5JnoS<4-c|U*=W{m_CgAd1C78ck92X?k=sle3kXj6$y53 zHRCVYD^%)U^2h9)ozM|_Zq-(vMZ)6gS)Lo!wsmxWjjMWBd|Uo2v-e&hSJjZIcJCzQ zf9%O$vms_lties;P^qha2DelswnV!7lnMAApUAjEM*OFK*QdOub(cP@U7Y)lSMtY{ z@MiWoDQlvh9AQp5KC!y?+tTopr&hG@`jX5a`)O|3m&?M{ZPJ<=2R6)^E_`UQi<^rx z=SfG)so(yk1hic>EN$3UlGv>z_hHrH^(&WcQn$SIf${t8rrMXAUe$2F|7j(CKid4h zhTaxkr2;9J2IVvB#EcKvyI%^(+MLDBcJ1FP3D%=qFK_$u#_)?_`)|JmyXJQ2%4>&g zJQB(lYc*f(-<@e26wVauc<;Gh*j>Kiro)+Y0l)iivR<4Onv=$Gf7LdA=V$MH${G%G zGAoG*RqM>UyP)y3OziwfQ9Fan?Efo5JN5p3m}vC6_3|0MIR}}d-tWG9G&s@v)>}Kj z)$=0^&M8NhfcANvj{mnwU1ehW?6kRWQYYHJ4gVp&ojb4N^0Svs`<`f6*ls+0Mz`Xn z^n{d%nC~Bo7Efr3>odJopIWZ}yUyxnP)&zqVQShdVSk&4^2>kzy1xJ2=Jd+%3Y!Ce zU%R~Lx779QHRo^leMwA?D_gR>ZIdad((!L=BZTu`c5Pat&UO2TiE;2n$?lSK+-`SQ zonH1!<&TQS{9_+G-2?XIotBoGA97)~qFC77JGV08vgaSz_wGUCv!>GDNyX=q1&lns z_b>QRYmgznyZ?Ds&7`d#C!TGJiHh17e!F3!oAlqA%&+F>ip^EpV`#B&%jWl)e2dt};JN0n?!UAtFVC)up4X81d!mfYQ{JR7-9P6f zWLB{hE^g-P6%i9)d?{}8<>DhoSH_pKdz4;Rv{&D>YR%zDjVOg&-tP>~QyKsMv z)1Rifc9#58qV%?}?LXp_dNbndmT3jd0-9_W9mIMjyq;v3aV7G^{>*QSL-%&DT@iJ+ zdayM&ea+Cn&(nGo1fqpd~Y} za}kpbAH%_mf*+%<7JfKwU{dj*x7)N^rlN~UwAAVKX8pMnuTRyf12+x@8)qsX2+TG2 zy7qc`{OZ?7On6;H_7xfkCeArLDO94MbhAT+<_^PkJr}A4q#Ab5bKt*PCoHz+%k{R! z6)hX4)xDHW+#dGkOJ@4+&}#LIjk>#UY>%8U+uQ8(QMQGr)h&2uRc^Q6D1K~ug~Xb` z^uQp8EwYx@juleUF%Krr>GYh$nI-;Y9*4%YrX#^$PuQ6h^xJH{@;m2@QoY(oqu&$5 z-^CQ2R6RSl{N77r`Iqvyf1K=?e9d%Qs{EX3GgL%kUpwc%?D$c5TkOx)HMcHpY`Dvz zVdoVj?EK1R(%Ik6Q)|{-cMU&X6ZJz#JacM)_0?%}GZVh7{kAvH|C0F6mD zVORB}f6qkwTf%WWB5z%s_G+u|L-m86wJ#?h56eE!t})a1tBifa#~_*HtHNgNFAnUR z`s~3+^;wIvZJy*D7g+rJ@%3pkUl#q?T)Qjh(B+_Lfq$3So!$1lK4t&lZPlf@RQZ&o_)x>u zLDR{zZ(F&5omE#*hJ$8X|IMyhog8t;lQL}WR|S)bC*rwcx6YI;Ntmzn zd&@?Bn=P)9E(wB-o2{5+sw}4XgwMI`GNH)QS;x>|wqK3T^y)`lISt1GweNGCPPXiQ z$(C5?bgo2Up0v}Bjq`lee(f}RJ?T{D0{Jh!6KBtTB){odiLLb|+XQ*^e0dZZ?CW`GlFlw7q%mw#vyohX?#x+G5HovON$!zcbyeYm25h%)Z1|pNbRu$N>th+)d=JQ5evRyG`~LQ#iOAK+^@>7Tf2Ykml+SDbO2Q`3%vLa=;-kSj z>x}bLb#5x(kN);*_SVwh3|ETg?GJgQvj6tiNt}`VkE_3A>M!Zva`gP}-NBv#74H>V zj^s>riQjavR`Q&eiDto` zlzs>K&IsC@(B*$f#dG?%tV_41CJQ@C`Vl4(s+aYs&=P6v;};pteIISD1GZy zvf}NXCL1iJw)v!6JE(Q4`akLKQ#N(E!Zqp5j$1l6zvLeO6x+Znv**Q?$Ro+2_j3+B z>=OI&knwzLlU*9qys1rb_wVo=a+bE&IN>Q*dx>|h737el*!7>#K9_2WM_GrL(!$IBrehI2!!8_;%z`{=BwLz8g1+Ejq{kcCLN>#}`GP z|J!Z6GAF-$ueqn(u}L!*`zVFC91vjF2@H*wy;s3_|M=yN;f7PPI}`RN&0N`OACvMW zR_E-JjP^5kxo5~~S#uwa?AIxkF?A5Fm7DNkQTnd8KhDHTewp9O(z37Q>^_%A6ICv* z47tJQ(UbA}LRn+KibCZPsa=!Q*W8bIF@2KYqt23-Z*S}U`my-UqI>d;NnT37uSMtQ z&ilG1{pYTWYeL^1|2xV0a8~R)pVMD1-IzVy_vK8M*Kc>9kKT4W%KvP;+*|3UHOhC- zH23k{6khZ7-ImzjTPK_Cd+`6PyLIH|g%FU6#VW zX~xb;MlAQ9&A4K#w{rfbMcW>{;{1JJ^4UdC?&+?y+PyTpzD#F}%3aH8o)&rQcSmme zZnrMd>5Ik8U5$_GzFb6ZTiFbHnEuDs5S1wN=qxAbQ*93#GrO&yxOr z^L5p$bsp<82A7m2Qj=ppt(_<){8R0!>e9y^yqj&Z z>zDsrfA`$}qkrW0X`Ni5JKan?{lb;p)oM$^Kk*-#kuya}(_vx3Bi5#1BO$q0Mj2NZ z3ES*Z;d$5{-t%IjU&fWC!N1zxoL<(sBktqnhmeBQm1UbeW1rsc2x#JY=Q?Y5v~otU zl8Arr`P_6-`yG;}%#I$5-mtmpn9@meZ>byUN9S)j_`Ile;o7>sUlR?LIQq8V@lI7R zv8*&saL70q$Gu!Wh) z=f>`N-*^6&*sHJ0T(mkT&uUXY!MVOgJNMzD?GHK{)uoIU_UoV0d6mnurLRS?EXVsy z!=87$Ue9V~&pkIywY&3Up6bqQ`6s9MDApbpyM1L(SIvBuo48F~hHRNEeDig~-w`ug-)VfC&j zPP>2BT-l3D%nW`v1U#DXlwwN=x!-nyLRG59uR%9B^$nQNtM zUd_7xEk`EfTB<|Um1*-?x7i)!icY%vUSP_jz!kZ&T(1v%v#m`0(Xh;GcamVXQ2DYm z;xmo!wKns;^w(76d7_%FTbH`}UfXglr`|&?6Xgzi?J-fk|83Jzk!6}%#vYpUTRZqR z!}anB8HKe(DN#IeoE z;lV_`j|@*+au`$DEl*w%hn3TzHt=mY|??@mGd% z^Q^eA%ge=smow_+8bALLc;n;ZZ`xa)zgqU?8DGfRBB6l)F5)6}b^>cXKX01LIPGoN zwSBy^_ogg2k_!oJWH#$hb`!c@@~AMYjz{hI?TTBCrD8J}BI09Ocw%jgj%}O$aoLUk z-P=;`7K9k>6-ZxkWZ!Lmrv+a>=Nww7-qw|dyaK> zW;ElwwtsUgx0hd1c{A^0PkP0tK;wBHVGZg3!yYBQx0#jG`E_aQ*X5-vo+z876?_t$ zvTxB5rOt3M+0$Em73#md2=v$bXejl_sfqK?BA-5n!b?_-v&~+!-2t7={ol&0aJg@c zXnDnAnYVAn)~;R=UFZ4S=GG7S-wL}oZIsp6zpV9f&VuH*=D(Io^IVEQt(|ru^2Pi< z<||wOPjI>RYZm*OzX8_2^zN7h{PRD2`}|_ZuH5tA+V_b_ufDyan>*J!#4P{r{yT3r zm+K#5ez&5wYgT8+vAjQ=YJXq;NL*oJAk@s;A;B%3u6E#nh33}z>7UocWt_e%oqg85 ze|_|%196E5rtX_~KWE$YH*;^lE>o^LoaUwX`|;k2i7%c7y)HL;AEvOo&QjuU3Hw72 z*5H%7Mc5x^*T40)(6l?~7c#YK@{(ZNB%j$w6LTx)+h(2Z__jmc+2ci(0PmLdmr`sm ztamw;Xw4U{L(kNvr1{np?s>1Ox!?h0Oh!f4dAwYFyVl-V7^MwXEu z*-BGr4QZ&CleZo*p)<(GTkPY;Uc=~^nGCv)@g9lvQV zCAC=$y*}SVyY9CYh%ZQAblK?e44FM4oRiqQ`%Rjk2Q7OoabwEwruoNLJv_MOO!U=M zrMO+K$;&${%|C3}s~vgIVI#k+eaH=8jR%?&mz8~VKXXoUMq)#o(8qx3K{7&eaSsib zt#)`Zk$sj`*z2jb6%kj|B(`Y2VD+DQwQf?>A3f0i8zrXAZVK|H78B3!{&DbJoxwwO z!__ZR!klIQ9_ZdLpJqR|&#F8zMt=n{dGI1#lb02vL0*Z zZurUE7MFIQlRxUATd?d4<~^raDlWQA?_tZCdSct`!1r6cwkaF0eP=wk|3>D;U3b^o zdGCLachmA_)mGbUbrU=uG#i`Wt602$algfej`=FhllZp2S$XML_}cw1b{A}&|7!M! zEuGBVMw5i&Y8Ew5=X3n1lVHx&r5f>QdBsLw+aC{_=RMf_>6CV?M@h=Ft!Iyxs-Ayx z*yi@e`In><=gUvL7e0OdG^Tlj1K>S@jAj@>ZQ)m%GKw(z}g+p^2SCVMiyghb9om9S0VGzoREy!l1t za>A`7!K`b2Yt7lsE%?@$vG;6ADqO0ceJyJ9+ewqIt?oOjxy^I)pA)tQ-@eqHe$rF7 zcKXfylO@(#krRgle)?5~Lfx`1YA3APf`$3&`oyJkNy$Za? zrt2upzp#$Eaf$1$p!kT>u5z;bI)vA1nrU>`cTToY;Y>eczqVxA&YaU1e@!jOtUp=W zV7Q|^$!AH?o0GmX*-tz0`ujoeVEc z6ql3O9%JR(u9|%{s6E{E(}#~bJDXTV=4V`TPq+AIuv<{>L)Dt-xqYA9;=nU=5iSYR zf)6?lT}+wY#TT*ep48Tz`@Wg1d-5?p>1tqT)9p;}Z%Yo#2s&u+ObQFX{)WwjS^M4D z=fZnG{&;1)YyM}|JdfA{3q}4nO{e@s<9O3Trti5G_&`2>$E`bC>Ni_%`cqMS=3K(X z*jL`(zh|k3_urD7?kKT*(__2UPM-W}$G^Nh$|k--XV%msKFjaw{BTOV)}eRm*v;UW zj_Z5$mL0!oJvpQ6?uA|R)8oG%I%f0t?mE4rA)mI~?9<=%LdoBu?(^*XUut=6Zm*ui z^T>Yc!kTLvJ%3AAJUsUEyq#}i*}QMXed?3g?f(6Eyzcd!;&UI5w;jxsTwd)c-N$fS zVsr4%1Od(u`8AKF_r2YCE~4YTAGg)An`~uS%l-Flv(B!6@_S9ets9xk3|>2KR(#q1 zW+A)H@8G-B_xHur?T+mf|^Y+d?GExK3t zV5G)gi@RB!s-8R5(kIM4vN}F-W8YGhsVg`qUz411<$9P>q3=&^!|eg3N~cjF*%lTwNoW5f{ic~lhvFof|1LWE#>npZk7Xu&nfAk@mYY8o6pdqC2YWd2>I-KiS?e zXHDai{ROU;MysdwpA1l6bKwEI(qX5CYd5${eVuWCv9F`wPNx?qn3DhT$6syt{=EpgN8ol(L!aMmk@+fZzmg7VEuF{u`_=GdE?eNSJ||>I&lxi3?i}I!&}nyeuvM#CxK&ne>8R z4t((;ckWnSo0GlRht2=ng7k^fm&7GETu(Rt^v11rQY`Pcl-+sU`x_1mUZ`Tt`rQ=$ zBk|--&D{%&%k;m+HT?}YKL2j-_qg%~7v^rEqU!fozv*PjZd&^#SN{;F-zKG6((U*2Mat`!3VpoJ){1Ff91=vCr|pf3kducwbPa?yXfCt-H1x z_iPFCPW;|=L{k0WVzVPHh1*)D*Y|Z@Ib!^6yGEGn2JNH&PAa{96co*86*seQ9anzo z?|Z2muE+kmYOOoG`c1$Se(@fonIU!a4DfvEg?uc z{n9TVvD+0Vn%A9b`Whjk8@ntsYNPYvKN1guQg{E<-+#ui@(a(?`#n!m%|GRDS|1aa z&Mg$k=Wxa8TM%nv#nP6(6Oo!C``0a5!X77DF(FuCiSVu;jSn79%}Y^P?Qlx`BhO9q zi?EJI#{oV+iQOU&e#`1Ue3oDRT=|xT#y`6gH*bboT%0pcxMXgm?7|t#bT5D47k#Pu zg=?Y3hG#)1c|_&;3@>=q+&TYb{aZWJ<=mXM*Q4)lGUPJ-&~nK2P% zkFIe2C3ZgSwtLYh+wAZz&%B3vlK<-W747_Kzb+;#t{~3K%<}As8?%=2@QN*;IJY%j z%=*lZ)A@MAH*RgUyvS{Zsky%IrDt!CEjhm_?|E+h_OF`LZghUlUcYx+ z<&%l-vyRJEpGp7c7`*5C)IT@h?&E!#UTd_wyY9on$)C^L@89|15ch0uy&VT$PwM{2 zaNO+Jnd4TBt9Kl5{#(+||JOpaE6MZD%#(Geb+`Wz-*iy>rD*bg+4&RGJ5#sczR`7D z!X0o~VKj&Wm_Rn>`q?V#`vGdhy6V@uThy46LsYJ!*tH^W)<9J3#23eaL zAH%m#!%qnxJLy;MXQ`<1?1-35ap_6s8n}yaa@K+$gW!{TAvr|-}E+F zqNy9RUBCMCrsJZ~vzA_cW|6zQv-XaiUvp@GS=hWkZt<&?LZkmrs$yH#W_;|6`|8~X z)N4B*Nz`@qn15hM)b@O0nzF_wAhpviux+Y8!wV$9=m9^Du!o)c; zXTwY6QZhs`UL;-A@p&lvz9hnrpZk55CE4$b2`DMqeQupX}R%W#9F8-8-TPMoDY*U=EkwZ>zZi9hJ zHIIzsJ-wueCzka;%wwrJFuj4OcF1RT>yos1{A=UcNsqlT5K&Sej<*)m|TyL*( zTm8!pKX+5!QVk?n@c=rNZ@^Tb@7MU9$7iALZyn zD|K%_NRF*(`j8zhn72JquJy^q8Cx&a8)Yjd_mp0^cX~(S``DCi_a@c;QO%2$>Q_9F zc6^7=-?G$ooJ>L6G7{2tkKLTI)<$j1Ue?ShTh^?6wZHTBs<;bNvo1~MOtW9E6f-sR z%zH7HdO@Mhhu56o-Oh49sb|Wh^$(7QJF*^RpXn(V{iw)Nv)HK6CHB_=e)A1KA1E=O zs5NUVS##9w6Q@wPINz+@GJ#5gKUBpYd4GDl{==jYX};Cf!E-mK6)Jo_x@}{p+{HZa zjz{fpR5V_{T5yYRuIi`YaO<_tefL^l>XkIj_t%YoH2vO@XVFoYRQ~h)%3^wb_uJG- zS6hChf9_cNx~suqr=Uppn@cJS6c%^v3X>|eo#ZRqeqv_h{F&*`H}I{I)aiaAl{9rBLPtO^c?)Qn$HmO6|-dFB{|+ z7qLj?-h9j&@k(aXD(27$fB)aC7XEQ}-KKrzbAP7D`9DkWYvNQfY&5vjrPS51pl(a4 zOVz}#@ReWVj^6gF-nwnuz5ZKVVYj1SH*~!CJ4JiyqK+^Tc9DSO9}^}Cw6*Z4a45E@ z6!;Y_`@i%2_sG}Vziqz0`}^;G|1~YuZ@!-M*Y5Sq`Cs2;zJ0!*olSGLmyy{8_T@h~ z;;SZ^Ub?c3$47F8QNf#Z1-SzqWjy`t=6n^B{2{MjIlPdK5E41U=v%>Uy#2g*uBXO! z?=F3j)Afy898L%Py|r*rC4*ghL7j}ivTlWx{H2G*GrMdH+ZL$tIg4|ZRVD}@SAMzs zTaM@QTQA=#{WelAxBH};V>eCs+5Dqh3};-4;5gF#TPm!;?gjVWqKhgLA%FbTUc_uD zNZc*xn|z-mdUEeao{Urp=63fM=Vtn(FVdgSSafpkgq->5^J~i< z)z1EYw>me zs+WuQ9c}lKVgIrC>aI*d;hFzzT4x^hF3a71^W3x&q3}mq?>77tb#-vamFc;D7td;nFBf{KM_F4JvF`dU3v&suO#qQ=^6>EE> z$N9+5V|5(=nf}dX8{CSaDbQeVB(Zfa@2 zzPJ4AM#gE^9xak~>G&mHsyAyvR~>uLF}W9Mf*aHhU$9uPQjguA-D1J3@)yPIsztdk zKIQA=|8V#JcknMqfBXKrwLwO4^>;@t52nSO)A{N) zvd>*mdQ_!Sf!pli;^j%on?5XQ=KV2g>pNIFt4VQSw{^8{>%X}4xdGS8`%ao$N*?OQ z|CqGFbn}v1DZ|bFzNghROWG>~Bu2lwdPF zefr?~ZN@h}%~syZi{EE=Wd6FhQ}Rq3s*b%6DXNj`UnClD$Ksm*P(WU)Tg}|rXzg51 zdo!a2U)6S83=Ax&-eZ2uH9HrZz4p{1S$h|%L`t-A?1=p@C{qCxt zcgOAXjOkA_Cx89)|5a1>yW;YQw})Tce(UFPFEnEI*Ne?69>>kx^G*Ga?h@Ah9;(oN zHU63B(wyLo%4aImbPl$?MYwJ(`n6;%4ngZ->H~ua_jHTqup|85i2qcD;J;lj5+G8 zV5+}Bt^9=3V#mX>RSpGL&#rmx>YlQcyWj4UiQ~_S^%a|%?MiMkbg{+$TYKA-RfEfd zO;yL{(@SUfHb*Usn}-a|JOpgSetn2Mz-sD|@nz%9U(;igcg|DTq{0$A>q*rAnbv>( zBxe{Iq%KHvXz%rkSasO(cz=+$=lY-%|9d9 z<3#wA^QVKS%>K1mQX<;^Nr-sv=BRGXO}isL{g`^8?0Cdg``2qW|M}Z4|NqDFy%B7& ztdb8Nug$#EqrI;9X^WHi<7FDBofrk)0`5S zUJ-j1Z)343H+6UHmiHTO`p<}17$SE2&z|=ecFSb131*S7-ZAY?yW&O2qVjn`Xc{oBk_^kqZ1M$@DdIn!4bxt&hh+T5Dfd3?t?k7-G9TD(VR zfBX~u>}%qumycbK%SJEXmb1GmpwYj@NUrz%=i@qJx37JemwakoYx%R@B(qQUY5ODB zeVThI@sZf}wr37CcF|Km?`of#n{GH==ToHq@3PrP6Vhha`6{@11ssj*Q8TvQcYA7$ zq-b*R=}MutvS(hdn`Y|eP5VAYt8V6sij4^s&(FRQKf?IjRWR*~>kRJ4EUvYwSu=l$ zOCJsR+iP_*?b`hg!TUN_zK9rCcTGzi(fC3aaF%?VWRKr zT{0$7k==Y#CsaIF**4)IpTL~fN6Via_{iTUf0Va2E0}E=kIgyb1#{;mZo2&YV14uP zJ2#)S9A1+Cc=mbIuEf~Ox=p46tXG=FOxawb(@$72xErs1Db~N~^;`R-_HS#?*u8yG zf8*Zv6DyZW&$}kTZ+BV5v+d8ZlO6sGa(q9%Q<|>vXx5begBgeKPLbDFy47EM!|Lsq z1v*@>g}rA=?^4P86eM%#%>Qmx=ZpEXGMad+1$sBVS})3HHN*KyQi!iztABwF^OLSz zoo79EKd-p1*mh9EI3=*?!=juw{4ZtmO`dYEunCl~c)#cKpLIs}ernwNXtwR^5$kR9 zP99wsySrv~03)mYspQw2w>FGBzLt)MWxE`OWyjW zCuApyOnAI8^xB1m6YF&!x!zbef9r!nYelgfjk219?8_M>QEtPIaB# znzLx{T-`sgoH=X}Rk#-+j`niT1ra#|%f8FR8wM#Z$ zWM17#MNV*AIZJG5_@WvhrA%Gjo#Uh{nMX~m4==QrQdi>nGc z6LReJr*D&w^Vz5CdyChJZNI;!Uw-~$uJV03%#!`mXN9Jw$|`@a4cn~R*5rLW_xb!e z=D&D1FWR~IzSlW9>)%Jy($@=|(W?yDXKdPk_&1M@SpnPON1h9BKaG8KwVz|t#Yc2H)GE(@?Kt`l9)CjYjtR`f#O zulcqcRPWYRsMda4Fjp#vr%owB=j)UMB@NT+8$UjIyryx!#mVwqwcu+?b33`j!zv#= zdvkOCBe4s5KA$s=Zu;)3ktMtK9B9{bxLtE{{}r{Gva|iU z@pggRas$NwJ_-0K-Ly&B_Tj18E8@OoedaNifgc3NPobD;R^6t=?J8$H4Gy88kw>>lDKaj(yeRa~;(E5#ew|#sr z>6Qe}T={Ln_WG&!BwIq}e-Ml;Vk_oTTo5n8`sw@6GcOnTFsRPUlxr;CIekjln#y?l zt8w%8Sw$A{wcapmWem_YX3J)9ReEr5YSQ6%$6^*`J=qnJ*kfL}*y>WsB7RxfzY|O3 zUaq(i)7EF4d|}G<=>L=I_OMi$yvqNv_}{W$i8qRNP1$gLTW@U)t4+nBmy?U%Hr~ly z;b^GvmfX;f#JoD?5wt8w=W}*wqL=o-psx%ny08n&O7> zZ_Ac5wSL;pvF+C<#l4SZ)8p0D-z>gkcx?A)jh=?%k8V9q-IE;~f9dkZ{zYQ9*~(W> zTy17QDV}9(?aB;hzx`XyAO1Byyr*Wv-&Gc8v|03ay-?C$RsZkv{Pn9BUln)$a<=8h zGd^d(xS-Y(7il5eH@Ag{Wa9Df&%(R&&4qfZ|@-b~w+O=@pXCJuQFc)%PTUp+6=klBVOS!`0U)~cDW;vCGp7CE$C_5SN!YWd>ELp@Ka z8rdTale%r*T)fcif7q;K+O~h}{Ps7(cy26{FLd60O-#YChfzwP`JzUfh=ik{%#Jq- z-N7%JQiDIat>Sc<-*$Hew{M|?yC1iW)He^NZ!5XHC12OJFNER zJ^%0X@|bk4^U1O|GiK}UDUbhkaW>zQ&);rV`|;gweVMuYlE3}$Df zK7Z1;e>Gm^KCT}Ar@t7dCM-5y(Cl&3b-KZMyIp%q&OeyL>Fb|2mE+=xFGd&mjSC-0 z1u>t#m@)MtPxo$X;~g!xrR1hfc%E?A?B>hMqK4v(WhSNd-^3O;o7rw~Utb}yX@07?L^B5$8!wa-iu}aWO~KqV&bCYEB-G~O!C8u#dTL)`^1i`*F8J) zKezVWS!{-DRXnOt>>+|J4gmlTEEwPrQ2L_#cP#X^;1t`I)UgT$W{( zan)`2`(p)iooQkz&vnxb_ub9hXS#6&&UWaF4f3Awz)k#jd*|zEIhb>3{G4#6c zimPckY?OWe>5TU~8Es(1D@M6B5iPX0a?O*L`|4*D^Gh29i zdTDVtb8}M@6T@_-V_O`OFET8++|uoya8Yib%HjhTr`p(@++x=g`q-(jb&0#>!y5?) zznR~TKeWC6*X8-!-rc%Y{`bb}%hl!g(@(uAIXc(&-}dK?%`bV)YZPODJvf|sTd-RH zw5Iy9%XZuK_rB=+`*NCb`SNzZ8#CW{I$m}-erwy>ms79T`2JdL|KoCx|9()bImd&| z&+g}wFMFK7|C+a~`QoRx)Bkqvahe*lJI&Pa_QM&0>inDEctqB%Nh_&*_#)}>Z|`=; zBHM%if*&*de(-O~zjObm9Z%e6zeP7@!_0vD{&r>GGb1O4yzY5l&18P+#d(q<8_o}A%1#(8f-EtjxJ`?75o%p$@&7I%~$`z3QqcXH^gYr8)fzK;5z z{O9r1b33-kGTl5k@5>VPtB)Rkv|8tGo%i-~PX3$a)@5%z*!ktY7_@EMZ)TSg`9<%< zj=hQ17r))SHT%Ouo(b;L{{H^{d)vPB^YgwuXy!jBqrByuneqD@X||VloSu7Z+hMaK zbtkHpuXnwDBf{rM&zX%kIwCDq?T)dm`>37vsK02DKJ#O{%cr#UZ^W&x&Dr+x6u;S1 zXA{S@`u`bvg>&^%FHZ^feeU(|)vavC?Q@=rWdvUPGIMF@#uL&nPftqF^UGSNUax#g z$=lLj&$V>L#%~=njlEZW$+~cQy>gSSk*Z1g`_Il_K0o?rT^zZbXSM3-1zYYe>#+NM zR_at&f~e+PpY8GHEMYd5Gp^2B>ao-%q3Um`)Z5hMk1NmpS@iHk&;ETM*96r4wrr5l z6%5~IR#v(6t>)}x1!Fa%?)w?LZamdezTRQA(RHu?{E9{08Tk--6;q@;!U%Dur@24(fGi%?M$-ggczyHf&*Q zep@vGK>z0$tdE8(3T zyp7fTPR zQQzt)!E7GuTx#t6%{;mCfTJAyv*S_He9k97&3t^jN1f+Rg=ERIDG5&tMb2v_?f&{^ zk%84@%Z4*s7B5-&Sa|~H0x3f;edot6jGTOj6uTn}GUj)wJ^C2DsVVT>uPa+ZrgwkU z&q}(oFG9kEyC%w~DPz&#}3rk^6rs^DmA6 zci8&!|G)dHFHOJmeS>eo_M5x)-Uw>S)o##l{y24=s9Lt!99`}9-t_mm8{Ic;ulw_^ zD3Wp|U1L?(j7JcYki(^)I`AZrfYyH#g3t81fffJh zSU#7#>$6$yq2iWWZ|5x<8#VNPM9ny|VTGr7%wI!|xngd!FXg7H)znH}uu|TChx6oJ z*Q$QS3EjUVG9K)$)%g%{p;=!dRX+c@*j?b$M4v<=SFbB?I|(W6z{TqKegcEZMEXlPBm>S15KZQyybs>e_?BN zf!^J!Q)*s279XA}cBwK=O!K1uw(xq@Z31G9tU5olGS(;`k+FD-XTS#G60f+MvW8!7C3|(x zUhyh(^~!oh>DL)83t8XKj;#+~)3fJm_y1eBtQC$rcxEo%B*}ZR{TPE}$2+eneO+A- zOrE?Do|3X4u;7Zd%tl6EUdx9!7JG_EUTnB=!J=dB*Zd`0x9k7v-tTE&cX)YDQ?|as zy^Y$kRv(v?d{{F1@~L-|F9}xf{3mEVX>Eb|65l%&ipRwM{c;bSG~Hd^ZbF&;7l&J^ zlQ*T`saAMf^EP`r*Aq?uoko98^#9BL|45c=jzr$i3uj+$UH?~e{sZ0Al(|mna|)OF zJ5}x}4XnPt``*lXU)StUkDvYLjnYNOf8T5G|DU+;&FTGz*}VRD`ODh()&0Bwx8?s?_T|&`|BJu$$A3Nb<>vWM9sjQM zo#!ctSopGF`o^Vox%a;_FFrTHTl1{=DgV?bGybGx#HxAk$WSzo+?~yT=*_w2W8W6d zXtTEOX^kll%{jSt%Cm}9SHAt_LpPn~I;X}LnKZmVOJ>S^guf6j(L+|Hf5%q=Vc5nGTq5R{AOW%~O z-`bX{?K!*eRmO6@-_6r(AEm}uhDdj{Z*0MWq8!lvi*wT<4d$O&hUE!0-N26^&!ncJpKV_Hr`o!0; z$MM*?Z)bmm_B=g(Ktyh*G>@(B#eXyQcHX5OKhx6>)Uh2`*VendhzQ&7V!-`?Ec(&5;5b`#N@UAde`1) zj6ORp-(G6Q%#AAx#iyU?bEsFj^;DAox!{}6lSOM{CHrFH;w%4_JnLBWqC)?_LHc<~ zal`DC%uf^FN}TZRT>I#ge~jCeA5w)YpTCX2rW&8L`nBil)y+p`*rUYsI6gU=e>dd! zi|u8$e(%%RCUfkmfLzg>DW#L;t?s#coGw$twknc?d8z+~4;e24ELf(`E8V-^;VFOQuM3Tf z_`$t~~vw@RNMw#$3A?>up5`+f5ovwzBE zPcw9+8)WC?hWuQRV*T%3@TF^$&w1=Fd+$~K?*Eyf#6K_g|0%rh`TuhLpUBxEcjnFe zoO<5(eD%H0Zv_`mmfyP3&)FHQ(oD( z!uEvYNsdLje94)e*PbZVWFAg#ve>Y+!Ai|n%j*Bm>FSP~k9|6FR83m-pYf!p zKJJaV;VPHazP4${(+=OvH^r_0jPfooRftU1$ejQ6T+czfIf?HBZ++{iy?fiQwe0bp zzqcMQ7Lm7XzA3KuaXEL@Pq}6vi=8J@7CHz^i}&0)>o9rmiRJcb;a@c5GdIeo-rDy> zO=8<=wfAeR?=3y{Yf*+na_p-|0v^G9FIP)A$k$eE^w7Mi*kOCuvU6X`3x3l#+H5~Q zKUplZ>A{Kad#||Uo9DE5PTgbhEPLHfwYxQ+&zk!GSkU{@|I5d>de3^lI@dMY+~RvO zF+SteLiJrg1^dfIlunne`R>HGw)muf!OpKnQ`9qb&Rkb!WOLYOnf^p8L!(6*lFy2rO{Z8t-F~C|%rDkb z`3qf&v46Z5T+XWA6sS}3<_&+0(!H}xb0e-hJ64_!k=K24p=nP!b6(%4FT#7*XmdN{ zn+AR^*tXE^4zKZ)7x_H>MqgH!zjlvXen0SKX`IXXkccm5<{9s@SbcMa!biytIkS|h zKf00@nx^%v7dzh6sS|lA+3C`f<#nCc?{O<#WtMW@1AEMCdK=;P0!Tw=D8~}dS6X1Zfw-e_;IBD&86vU zDt@#tvsm+b+l5B8+86giR7CVvFfMB7S(hdvARsBlC)y*kaPfnN6G_gES{_d>F4e5~ zHK}>|cSkS3vI&b_|6f|1r1D>H%eDFbaX-I&`Jl|doH_o+d_K8NUz0-J%q}f13-Wj0 zk$iMPFVn5AhtY4trmemGmQU=T_`#t@&)dA_G4EY1Mc(at zeeTP%|G#F3eh-iP|N0;69{qohPGA04`#VSI-@z|y(*N)MGV}bM+57&_ujxO%_oZ*X z-~RvX`@_F#e6fA|^7_*7+V|z5*7yJ3UGEkDE%p4@@8(8{KVP`p&8hol|L6C;-7@>X zc<;B_`^?mSR@wZ5rrO5$^S0rzRX=;k-GJ`?5y|uALeWCTd_I$ zxSzgV-2>+L{vy$t+wcGT_{IL;aqFs8cXEH^-v1Uf`@*|VyOrzzUa#MJPj;t|p24?G z)A!o!eUZKIn)($RtuOEEeyLwNZujlty!l_1j(g8}E&F`Q{+*H??5;Mt&HBO<wAT2%GBY8Pt%;k$M6{=dfOlU-jHD(Fp#+mXt~bo;r;wZx)BDGrlGo*ca0o&O{3 z)n@()H#^V1Yp~z+bi&WG_0dP8b9CR?a8Hna{x;Ed|L%VaL=Ap2PoKZua_Nofs+wCK zM1Rz2y7APhc#UCOMzT*{k6h`?^;=K&eNo?Y``(Gxu9}S<3*H944%nH!uxr{G0j`AI5zOY6QzOXQy_`}K$@R+{|X^?IGR`MnC|oaGa> zw;KNKoNv5A!`?&DS^55#>FA{8-E9MzP01HIiAiQ#yDy)Y`ROm2g0r{B zi{A_Q+Z{DiNtuX-NSuoAs=Khx7M6xpH3pM^3!i z#pM;6^R-e=-Se?ZIa0Dm(Lo_dgfIADlFlnnHoMx28wm@~H`#t!aB&IqlU3S$4UF6V zU5s8`9~@h~`+M>C<$u}vmK_euu*r(wt=6;nTb=v6vOBfMPQLs!-Nrb!V%s6Aue*4FX(eK56cHLF1e6nF%Tz64CcGA5suk$_BZz^AkFFJeq((LvF9P3yR-v^)K%H|L@v= zGcC`HQ{3n7eEsEZS^E>g-4`mZuHI+=_HOmc*E*BCpWFXueJNjad3)5wZ*I>fVo~Q=F7k_c3Kn$dO2)7sue^}!#o$t_kh`_wTGf|&?>&ZZWa^f6 z%ws>Y!^+D(LM`pv`VFR%9TOfG>g2inoto=@`Q`1fOV{TXXzcyK;+MZ!GbeM$r=xtE zqu-V!761IwakH{-<^GiG6HDgWw(XtTDXK1*qPs()KO^~q`ay%|TT)ZnuH3c=c_KAw zuKQ%!lRg#OYbSA^^R_Y%oRQqfw}kPgUSylprVlgfGk#C~BcM0md0Uj!zMJxk_HL}} zk(Q5g5$EfTQ-V~Ra+?-c0w6*9++3&-z`~K{b?)ZCldw;c{ z4tM2Cftzk|?bQp!Qm&NO9Vq_EF#E6C=H!4&=k)ED&e06x-xa@@$9dgkL!oPPxzoC5 zDt9Jbs}(c#P;I+((rMfKb6Xs3U%Jm=eO>jX;uCN1jVY49K1WZxQn+X8RM~@l^EIbU zbYhw`|4sCjSpn0VHT@b{*N05p=w)x86*Yk`MQwkiqI0C-&Sg6_7jG51G(VB&MS5kZhrmymE6}>0_QTiWQ)w}=pwj0X6BK-U} zz3=hM`taLtv7cN1b?M7n`TtIRIg|hIRmr89>C1}O?J=2Kel_*wlgRQ~lP47#t+5g=4{+mSo57YH!F(ngRcmBAR|C?`r_9IjKKUv#9p5Fh3JIvtj%zbz6 zS?`?n&Ds9T;g{R*eX`zH(|$Kla`q!ju}3|HwikcNSdH{)`(-?{BmEnIjQs_DxWj?~2kdiFMujd*>}GyzboT zS;kV$BphVC;15IQp{wkZ{I_|2Js6qv(Bt;oh{AvpuBuDY)_&IF zTE}s_+tU7RHZMK>z2yIWX#aai-mc^(%luovj2C=$jEk&y=<2UYjai=`a4_}6>@O20 z&e@iHQ|{92jMb+ZD%IxSI^OcR<$Su`XUTf~CI2dx{cUNIEOLIWx^A)SUx}ASuS+Cn zW_*r#b9|1#{H}fnv0G8cGK9O=TDfsgc;eYqs?CL_#GDq3a(&#F=OA)P3)d)K1^5`sjW1#-zn^* zf$}zf!{yF~X2L!HCVnks>9C#VBfh2fbm|=CPOjqPpWdu;l}~ynX2!ugo3F<1#ro3X zJs)g6KWq-r=evHi|6@*K$r)`=>7OTcoi_#QJlSXwX0oYj>U5cwRqpqAPgkxFdA@tf zb8%Ls4fWFs68gOPtUA)uzNJP)9{+m5m9Lpi_u{{QrRHy^z5HpvU@d2S&kNpIT>&f4 z&7o1tCaPx3IZW%W=znK6G5k;H*`qh^>|Dvs|8x81Zin6Lx9<3zI`wJml@&+pICosT zylBsphS{O@lVjDE>ilSL^A~I5Z{b_hdwS=Mn!VDDPm4-cHtUC1=jnWlUVLe*w{ia6 zTW1d*RQIS^?5(Wv;^O{am3K>Rc-@!}x_wdn|MO_=v6%4Wrq_#~s-C-@D{nPNZ^yHf zW#tc7zML8V`P7$-`+vUO^8YjcbP;*qaGU41FU{Zo)_!@c`urJw7Jr|7IpG|CLcQAB z@vYtGH%px!`t6nfmu^2pZ}*#%-(Gw?ed+T0>NZ=czyFuKuX}p>t?UH;vo`{i5^}yO zf9^TK^N|0|$2ZgWeUVp_J6w0Oe2>lFtMU8I_dX1-zsX%1I3wap*qcS|&BxugGPCpV zSUK0aJfg7p#;cp@bKkc5|C{Cg`^?_&w~k(aSaNRXb3QGer%mfq>^_}n{Br*P(fuWJ z-`@U|R)11;`nBVC*n3Tnl>h%Z|JLp@yEj)}&--}hOHaDZYA+e@!fOlWEs&K}kkdcB z-E!gf)I{4O+36C^(o+@~e(ruzq;L69ut@oVqV=Np+wT6K=WKmhGn#){tULeGx$S++ zn4{kc zob4Ciyj02GvAFl(8QuM2;nOz9tJ(B|>9{eE}kdi~Vd8udDTKR*fxziuyO2)Vbl@7S^BrLs?7Y(6mi*0FSl*X=Tw z|G#jzkGem(%ly+hdAS?Q8>F|&J+iv@BhdDrZq|MY>6dBG%zrJj&!3%98G7%_9$tt0 zmzD4SX8vs-JU{PN@Gm8uh9vFAqXBdOUzME3!o7yiRsS%9h34hd<*lwOj_GRaPMLE! z$vmAwC3>mJ^=vzFooQ1xo86PkD^rQ%@#GbGeN#F@P$%H=r-(VKcAK&`G0giJsPFyt zYYXSD9{$T3Y_H378=0PZJ`UV*H9mDp0N1@4hRdu^FKmtfx%OMtW5o?g;eCyAAs-v; z#ZOmkORjaF`8XwA)`WBUP5 zUA9Z%!Iy=K`gUd-I}R-F=RMhU+P>sVOZ4@(LDnvPZ9Fwn->Q5a-INYl1V7;7itK5+ zod5Ghr~Yy-AI1}G0XDC%F}xI3;Wmp{RIi$A`tR(KTeq3Zj^B6wwvfTBC->Vu?thCm zB=x7v&nveJns8_P`v%t2@twIJ_RJ|iURIrRi>vpW-HE^7?Vr4Fw%L(gUG=!{{PM%` z-%VF@J=u0U&)5EI@PD(vo9lluzxyA(|LfA#m*%UV@%zygUgQ3&_kKn4uKRMv|5vTA za;*BheqZLiQ*EE~wv^jn`W9DpbH&@WW*@*YUOnWeQ%B}-5`4GOuWod zjevCLzPIzZ)M~Gpa0=)=`nmpE&D&cX_e&0)`@-#iYkpkqvcF6FtQmjwlxD{23%4ZC ztK0o$Nz9G)i2aq9n!e@g#m+;h7ed0(zO*X+!UteEa)+Ku|P z{k*%TsYN`g`D{{m(}(@Tp(zg8iy!P*uyw;PG3D-5BQx&3v+_UW{W0eG{wz7;&#n}~ z>9v-#6sK40VrgM`xs8i!ODo5x`!7~_tc{Rnn3RziUo!1>kkP!o-%1Z^#eST2qGR&R zzBMZ^KfG3~;$S{sbye*0-v0_~Sv6m#YPZgm{L{BhYrTWJ%4-AW_~$1KGZwvGTYuC_ zI&-NTdr!%)EFYDRE3d3MYQHT-xcXJH@c*q(qYrAmk`)znd=Pv#WP@!g%bJG{&6ji{ zj8iYhZaAUjtl*HFerV$H@!*-__(-eS0VSGMoRM zkNP`1-MfXaZ8OiaKEHjpKi`x8eZ7k8qrhzLpBwf{f7&KpcUbh(@J8sbik*v@{}r8F zSgjpjvSo&)+@+`&F3WFc9{qF6HuB}ax$JK}m*~E1u$@%0=&TOkjCENPHW!|7Do=W? z5!)~EDItn`?wL({tt^i%Im))KaHT}US`YF1$Q?O47y0+4)|>wFH;F7dvZ&_h*Clo} zzYa}(ZWiAC>2Joz&S2ed#~(f0^S3A6M!EJwv;3Fi>or#dYp zYmB>&X(?sNcF8LX@=Mi<8ZIvt+q~st?OJXH%jFUEf4^S;J$C}=Vg%cH8|1e1E#ec@ z?ar_H;_uUa>idls;vbKH33EQqe*5r@^}E(4OnJ%KuaiAX$>Q0DhreUI%a&Z8E9J5= zqA2`Taz$u{Rp|N)(R+^R@0E&(cdS#@kNLLCf%_=ynHdWwC7$d08KiZB??{Q}>Dv3c z?0&`p&z60NYLwg~kk!!kIHaqME!)5?D%(Q-@YY<5lxWRcO;`O7C(g6I^2e|wqAR?J z_4|cDomW@8o_MYjK6*|Xy6#TTo^*i;M@xOrnHtG_(7c>S#TrF-YU|8!!P@0X4c`%jXS8F*zg zqC}b}7A?5PY0t$Y6YSBrv zEw2AIf0L@$-}C2W=50}bulnkTnlF!kU$f-;oJx(qi}&v~y}S8+y!w3gy}cfLKkdBzMC$j6)0*Gbx!cKnR(*K4m!tN&_Wt8< zKN-$0K5wgU`@Zsgd92!u)7vKdS>3$vdvb2;md)qyJ+>&%)w#T5$0KF4nzO&-|HRu* zoA+tT@>}uQ>%HxN2Cw(M|9}7Ua@$XJo@Gbme}~&A{?V3A`knj#@Am114~^c}zK{QL zyz0ja{^Y-1&uc?}J-q(s#HC-SIpp*U^^B(-Z|13%VsF1{DjOEIytSlwQ^ejzLtbf) z&jPoM1OlHNTUap?-G7`@86FVW%5;IFJa6uVo+EMq*+ZZ=IYrm%WN%pRssHx-b=Q?jU zygx0wssFe^S+#SD?Z(9LcTq2*rwcATuDX9^TSn*6r5tR**;z-t8{4}5MY&D#7QD0i zT=;v9#_o$2(_2?_>OB+ueR-1w`x@)6++D&!uZ_eeM6y2#E9Yy<{(Esbr~S2rKE31a zf6mxGa{4&&5odkR)4gRqvln%xNSbqh$*hjrW4qSeeU1Jn|8thx3e;7)U)PIlU6AUU(RT{w@9qG zU#BAH(DaR>U(GhJpJ8_ScvY_U`s6aXZo?Dm{-#z^p&{gCre&RKIUEqdt{$F!0-7VZcPxsiDIiWM&E`0ot zcNf3;MCGF56X~44OUp&0CiNy&E!wU7Mk%s`ub5}1U(U@*$8-Ju_I4jIGW*ZHPx^$t z2cC>mPG|dpqHzW0Ty-iaq~zu*7( z?Th;RUyE09rX@mH+?l_Q;Q4ZhiT(-2U*tuIjb#SG@mo*nWe%_ov6VIdo4QUBB<& z^h-aV$4>aMf}i{Cy4~--SZng%Y;T>Gd&hO!V_hb)Rr+y7ool-lg{B6G4Bf&es{a8YEkq%eGJ6c__d3=1n$xzGcevdAx8JK;E#BjA^YKW@`n}$B z|N0(J`Q>aCxc_OhyHss1b720f^XDCA9}ly7w&Q88+PmLdeLc3_n5^!;?Pjt3wknp4*FPR8zgZA_W{>YHzTG<`%ucQ6>Av*9 zDB#8{_OhUz;U5*|w;wFaIaRk?$!%52wv12b`b&f-hRCON*J@8Xv8?mFPTFnf{c`g^ zE?rh3J?Gb=Xss_=Vufcs*8d2qGrDEa?W1>5bBB)d$u;>BEfQ&h)8}l_4p9)2X!1MF zvyq+cf!fjhM9qCH+iR=;ew-}-_;iQP@vF@CJ)7nEZ)caO3g@lAs{gwB-p5TJLcTMt zVrVoy)4W;w((+|)hRl|7^F?JNpFHr6uT4qmwkr|UNtLhu@I<~+EaTGlysM#q`DX<+ z#D6(>aqZf62~inEPGyZ4#}4+8h5VLMn^+WNGkCaS6-sIpn5XD=^_*C7gQI1+>nDeb z7oU_AO3H3F<%+$yQ^)S|&R4(UAa~jQipRazVxy}s_twvh`!()oy8uTK7(KCPP1X3oFOdsY7WZ+qt*?YG6C<52Xq+Rw#t)AoJ7^}K6` zz&p$5GQSzlT`aj@J3msxTIIl!M@`&%U%t!oeOx%V@>!&vVC3q4!`;~ni_0H5{x;x! z&z&t@{v{@*f5H9A=dz`juAI_2w9(Pd?&nGWTh_~`>D%aSlKy$zdye6=$9wDVRX$%T zfBXBvnTZ>&x9%-#v-eqH{nntGZ>!&$XD8OQJ>3{>5uKwXa@?`y^9NVEKM`$>7FS9i zS-sTzbocS>^H#@S8(JOtueS3l-{)`tP0Md{9vAs>TD8hON9@F1*?-ehU*BGMNlbd~ zc|OUdPtT^MUbyYHr`@No^qKHmhJ}UdVkLSPj;P1qsXaOU`@V-$rtJG!QX^J-&gBdP z<2IM+g5t7K{v3DgK72L*9d=3op8uT>o44rkNoLQSq7eHysK$9h_rHa^Z%urvw`|8* zzL)$@-HYT}{ua1DHR}EGbH<5)$@3NEwx}D$zxFuFbWOc}$>l1ECXuQImyeV`kvLwt z{lU&}jh0=ibG&cXb;_TpTVSZEekgfjP_kRx+s-|ICp4dx+21$u&RdVmWv@E^9w{x^ z^>^dWr^?%BezXmIV|;Gm9jE0Rgf{@=~_TP64ZzrT6y ze@g=&?=Zd6(fRpsm2}}&-`nxt_F)B&q^{| z;v3f5#a6Zx+6vaQu}GHA^!BXdsQROJ$93Z0&n3P6+-{3+^z-|ho!4o+Uizfs-uq29 zZohcD#JXy(p6zLtnfs{lTSSc8`J$33=kF*^{&7P1Or4J3J0$~?-)Fw8dmp8`uWnCe z-kjr#eP?FGm%q97Z}X$ccMkP4uaai?$x-IB#aQsgwbVVczMtOzNwRzQyyu6*z5eFbyk61gYm ztTVEB5mdg|f1%*}FP0lN35W%3`f#xE#lrrcA3qi5rOq%=WNy*FeZre>UXI5#4?XU= z%{zX)@QyR$xV${Ef5Cx559cs$lM0rO+=81-%RSk4{W`Jw z!-|L{?0qs5l2rbsp5FC3n|ARkleP6dF_x;b8$97lpKRo<$&E|PizTH+n z?{8c0Z}sDWt(*15xxd_E+K$_mUf6eJ&#YtO^RHjFn0cr6yZWKTjKMaAYhtzWq_?dD^ptO?x*=K5!7fEphMC;&Tc6LnHL`v&ZrP5<6;ZrDb6*~sf1>7Tzl;Wd zw}Mq*olgIz&k>(GAFkPa?$hzJ`Mckm-9NW8;n^XH7xft$w|74h$$8wqZlgDwg^Kyd z-8^g5?L{UW`?6KfqEFFS&D<@#MR>oZrG_DI$h?v>0<-^YcG&;8&-%~a2{lXFwq1KP zzvd)+#q01r$GNnQCF|-vZT=y$I79Hx znKS*i-A7Hi+h>ay?^*X)3-v^9KVB|AbH{-?96qqXyjP6VELBd*OQDZzC^Cr|MH#t>ndS>kGVV^y*+9& zQl`cyPxSxz)X%ps@`0jz{HIm_C0D93%{IBo*7c0hdi$RQk#vcrCpXSn$kCsqU~_S8 zbaUWG{zz7jgcpv&@-Zd~+ajJc+jSlix0>j_P*C=b({X;I3lpZVDZPF@uj>BSmn&*n zrTJNw?M*n^)oEY;_41`|{k>Nzm(MMmRcSw~?(?qo9@GE4ou9tk<>|tivvMQM_rA|J zuKhLF$RIW0vhjo6^D968Ez8WGH0|4^uAeFqe!os<_j*^cv>cwlz*dKgtIWmln823s z%U34PJ)O+3SMtW(HOKd^?`!6+;oWt5%}fKEdxxC!cRY1G_?)5sgv|%NyQ0Ej-&84rqsHdyoe^p)?G`M6v3^ARrIzVkYNp2iC|EOvkUWz$s~rQL__ zwrjssU7qVZ{iZBKb&gpdyS#|uQ@>uNYWZ{QS@%v=eZ1pnQDjnk@m=oA>hl(pzRBL4 zRaZPe_R4Km<;73dzdmyH=r!MvfL>wo0#iMWh>W*))n9a6f2H4?EW9&Ssz_(g>>0=A z<^@N`vS}Qf=zMqXqFhGp3(D(~{O_c_@Xpf>xVY|m-h#!|sfxD}&o4`Du-WYUsWoTTw?fM+yDnD=^}P1pBpg%Ac4Bc+&$dsu zqq<72Ngh28Ud&WcuJ4f%DDK%kwN?E1 zrBCKu$Ju`yX3w?T+_rw(&lBsWD!(k5{r-cW?K`97d(+-9H(WE#=w47-6UNe<84KK>2CWvo+XxitNGpWar(mt z*Y~>anQ`6XbVkgjw^9Di#glukJu0;R_WFWEq*=AYJUQLdUlqUDh*j~N-=;o$zp>Bv zsb^D^uR6T@F?YqYH5K1-4Wdu(zpB5jXUg%*Kfk{fn=d!>qVBgD`ZryhB_ucBPH9+U ztR8Xyc#aTjQ@HibjoNGhPfXFZz8ul$s0Uim40 zCyoS$jzFG<%i#tm5<_ehKAEIwFlk9%c$ghnpc44)!Nm>SvXTmR69Qu%Nb$IONNqCt z$$otQix1cC-23L8@A0xaK1Gc4xRiC1s8oN=H}03S_kCLVvcuNsjN7W?@B40WU!I@) z;_C$ytuK7Cp83C*#xFMCs>vM8CbyL5NbHBeqMZ-(B$(M9=PsYt`t`?Rm7asVT@`2k zDD66al7W48rZ}_IcA<&tCf~U4^KbujMe>v|OY-6AGP1{ifAZP4^T4Xy+ltj!I)qRA zRma@kw=df&{B4w{|2F+cZ#FSy^e)#paZ4%U?d8CjrS;#!X1|HfeRt0}Oyln!IeB-D z>{idtpVOB|#x09@v-HOe>F~r?i`>gtmhR@5erHp_&!c+p6;}%%Oy%_{+RJk$+Wt}C zp6=TYXLhDcYc1NhrbgR5Oy%b8^88;{mfJmL^+zf_*X!DfRS)aHCxzh?`v0m&F@ZGx95{r{Zq!*J;^3tHhyjIKf&C8e9Bh$ z{TpZH>WMr*R&`S%`^dFp(z@p#yY8&~`|XB>O1J#AwNk~))bls;zq`5k`kv3n;#pJb zTh10wG${O->2Z+vO6SCzpUs$RV;-H<6kc>`QKU!Y7LnQ*x6kthBTjA&-twzrMvUeD zN35$KUsTCq^D=NKp13#Q%Bi)@vHX0WBLZujG6rMu;V8{XOc*4)r-8g;5x zym0EB*B|_*y?DBP^VR7kySNvn?>VJ6chd7U@;^^(u4Vd|Y#*jCWS5eDuP(B}#p$oN zwc1yGxs_}|$<2CpwPGhDuD?#Y(Ba1Y>4d}b4NJ>49GCYkd!$sGa$xJDi<9lXrAXV= zN|`MUHqJCTsr-0t$ki6BBOP;ARIG3?P;-|EJ|OZZcf`)p60j384Bx8a7_YL344BYtX=5~*)(h_`Cx(AY`%s?ybm977U^`A z{W)+$C`IGYwFVwew|&2)c}4r*Ov_68cUtv`B;(?r97`Vxm_`Mz7x&xMa4E%M$KJ}j z|F)&n=NLtw-+K68*W5tAjj7v3<=^go^E2P?RI}st^6hu89Q%9oe2z&$(Gv&r;I@s2 z6aHn%@pK4Sad+iMcKltqteaQQBJ=dE?xGh*7d5MuUuc)AdAV9&W`)|lmghW2YF_j? zScvc>{ZkQNn37aCHGIJrW!-Pe^1F4iGjB}P&G~TSdFu4oX?FiU_J6;Z$=RRlRky_W zeEM!(Fdsv{*CLF z7RoFHElJIMe{b*0&GY}}+}fTWzy5&4+hc#*|Mr&d4!eKxUD~(XZxf7b*Iq3<^LhgB zkLDKK(thGsQdGM^jl-9NxZx_4? zmWjL4t7vK-Gr?{DXLp&Ke&6)>XfvIRX)(I)BtL`YZh_v9%AR)zW?W5_)ZelFfQIC! zk7p(nUvqKWdRoQf*^l+C968bVUu>}%*(eEN0?sina zY7^n^%4d7;vg+`yk35oL3wn+7Pq*D>o0|UMX5I7q16%?z{77mr?sSYeQ~+(W{RWPRf+bjR`%zSkA4vFXl+7^JKoF524PJbp)zKEJK~6 zpUnR?w@vJ?lW^Z!iQNltPAosg&m`33VsMdxO;n>qvX#xBFJ2t;i=#Pn+;OIHXY9Pk3!k<`&RF{PdfL6)eeX8xmJh#l z`ux%l8S(Wc;WxGipAPghzV>9d!@`+2H@3QWta)~~E@|`TTVnspGL~;w7K^X@v-p43 z>y0~(zqmO6*NGs7gh@+Ned>GO1BNOJ#*;MRYc4mFblk!8wY*YBT z%tZ=rDK-4ib>Wj0m6_u2c#=DR;g2=?U3^jJ*WNMO!R4Q0T>br>FKEd}bz$aifg{WQ z^xtgPpSh#gG5O9SPq#9)J^TCfLhN?zo_S39>qdr?R!^H%O}eH$SR?;aw1n~Z%nw)B z%0JDGJhAJd?4|O%rPFICeDc|EJXb#@`>soLl)M$6%!b+8Tk>6ZCNEuI(dqs-*)Z;? z*|hDhe++GVt=~0&PD!sQ+x4uuI%dP~);<1V7T3}|=hs(mRG)u+ZtnArnH9fh7nUj) zt>xVLFt6{yXRQFvu(LjI9%+0O*(v#PRrnJwJ* z-Otq(9E`p**UJk2DzmDedGDdb%VVm!E4J|USKY1HeC5J=lg7=TCR#5!YuH(v#vxXz zXL5tJabp}CuZ;N9q$S@T3iiB9YtgTLm9oga`o!YpjSBp{7SH4(b58UX{A6F=Id9`9 zZ-tGDM;0BDbu-{uBFNL-vywk#@)|bn=t+#n5+0tG+x5b8dFzW)d}d3s@7~&=Xst5y z(9=tmvbB5cy#2nWBrOk_D8m5BKK3@C*0YW6#swgWYhQ6Pg)*cws0(*=Gf= zmsYGxP_Jx$GO2uHhLi_ilH3(@!|v1XUTnOt>waea+K$}3%Qd&EC)OwwomkT8u;%Gk z7ym-B?|vuM)ej{uq_aVgi1m1}jGpG^95wA)9vxgqP7_Wc7I=55L0MK_%KTG{r-_B)rwSe*F0?tpFe zw;#KocgRZLNLuJ>k;4B^B6inBzuWBdZ#_$GC|!I=%wXO6A97JoB9a7)J};{J6Q$Ok zoq1~ax0&p66$iK{Opht*to`t@%$(EzclsB_x!25hR0PJ=R;=x-kmik!|NQ7y#{JbB z-D5r{Wgp+zle?DvrtId0rHp5e7gb;1dR6UB>6OwXrMo$&`!0UlpI2CS!mQ_~NbPH{ zc^0vJY_~HW?p~0u9(myYO84tO*EO!{el4D5+8kqg?HlvEZ#mV?PmaB{ah5nbVe*5S zx@lQ?W)G$&@I1e%qI3SmjP)s%{ioF~`IWop9T2^<_w-We7l|Av6v^?^0iZz?p@r2SqTSv{GMb)bO zdB-_T`L-w7JLGTRJfhjESi<1sv?Wc-d7iYyROn;_LGhI<{g~@&lgP# zRoWD{PlaK=VUz75< zCnP=MahAyB72@%p5-M=PL!|5?^K#7}8Q%MzI-8}6+o&<`t_qQ!my;N6_GJDd<(iWb z<=|75d?YREj1PGBRWh^NL|Mk`w#;?9CViB<#$*yVI+uc%nBlb;YSd&D>mHx62c9u4CRPB&o| z;g4w7Qaa+a@RLS|OpU1K&fh(1`x2&1Oy+X?u=TEISdHV4wXqdPj<@Ra-o5N^f45sk z{_hL-yUUU;#cr7t&F^BqZR3o^XRh48!874=?6+Nu?(Qz%omeo9UB2eR$9B1@6CZ>9 zERSxVohh4}^Y406@82o>9EItRMZ;qz-f+*n^*uHCbx=jiiA_Cg&l^^4*%(;+Q|OMy zZt2|iA7)l=YuRP1pC3JAxMQ91?DsjF*T)%O+@kzlW@}#Eq}GV%t}-k3#h(>-G2z^1 z@#@h|&8hr68`nkXzL~RA$n6TJ!G*5IzDd=(_hxF!bRT?vzjxnx-n+r+jCXqi=bXwF zu-bTjp-I@uc}yQo=k!$T_C*|FtD48P|3dZ8qUue|N5Ul=Pab}EjCsGrLg^^oU6N;2 zPqlhpJKuDneaq`@de1aMHbgokl{#~LJoDO%f4^M$=6`96T^7%8oipBj>-}$N0E>OHwLJW-YrVF7ET;;lg&=tEV5F zWc&1GqO+V#q=H3l#ir!g<%ga7+5D}(Br{L%_X-ybU}53lN@Qj3x7#yqz0=|fE*4p) z2bWL1D|chCieL*t1ocOjkwV0-u-K)(O<|}a}Rc$ZIHe7#$|o; z;x@y!*A5yx6;C*BlIr35=+Sj%(++8u#N=C!)|=j&%~rn|`LaV)@vHa+nXI3t7v@~v zTzsR;+QEK*yK(5;8gs?s?@u|uEkCbprubcW+J2ssEpBhNmCSdju=_Pxa;5n@E0M+v zVyD<|Zq(a&q%ce9h2gBAIX`-C-q6_fC?h#Y$GJ}I=y#W=+g}?#n`X1ECgVgw;;I^N zb~)b)ZsYPl+ow*?H~CP0Qg!+dO``9cT&otGcE9GTB|pkNDFQ zw*H){e!fcL*1u(6H*b48IVRubven~$zU}v_vUmOYbo%mfyKfs0{>`7ae_=&R^}Ks& zAGiF^pZ53bE!BOMxBo@GU9a{$D*b2PM%|Yx+RQdG>n>TAoXbo7`&RVK@<=`JmF#yk zk}?#E3*y7i&Hoy9wfDT*{Nia(f4KUtJ$%&N^A6A5-qPa<=NFuws+1l0Va^QSgBJ`l z4VCOCB)>b^P^4xZL{gpEpthav?@mb~>OKBpA9qa+v2I*9V<*H zzVM!Hr~CLw^plR02A>wI1vk}p2X_5?Q#xB^%loYr3yQZo)pC0@@_YQ{zMiPRR(`VK zrglDmR>zWvj0>hhzaCxe|7u?#Rdbc=;bQKdul7j?r%M@Kd78q%>(AxyYKsr4HU#Bx z1u=^q;jH~~;o!oqj%#a8ew|Qi=dn7pQTFYDWCbq^8(x+ZO?)*KCT})5eK@=5TA%Y5 zPG|zNINc!o?#FpSBNJH`S0O!(Um8;uEMU3befpf$12gMO@*58SUZ*Sb>Fqjw`=u`q z%xCVI+%!-7=zWJLGdT*MEB6Z5&O7tW&g8@8T(f`idiN%MyZ!juw}-DwT+)vpi?ikK zz2JIGZ|zZI(?4cRyizRF-xsORdgpd|$I`XCFFfeqs~)gPnlX9b$F(;$$g0H}uY2}U z?4@1Yr2xo*}K9~L|}c&7Dj;>FnBx3b-ZwhHa@zHxup_R`5|g7xyG$$Dj)X&;tm zziY^TyY1sz@qWV#(`^q<)314S-u}`WbNd|rJB;13cR4NB%IDVJExQ%?Yp?6i_ulK} zF8}LN+sEu3xdwI?fQDUM)yt(X=T*P^xLYZ;P^ZuEmy+#Ab8fw^?9G4lvZw!ecJ#)l z=O?$>iJyFRqgSq0?!WEHIH$jNm%s6GpDADYaOu`phjLUJCw7|(xU9Q#OY;$TL7c6! z^i{_hpTAWu{n2(`YmW7qk43>d7wRj#lUVaA@T|{7)y2_ZNci9yR-P49@o0d-ha^&{#S%Gk}pf|*%zldFVj_@WX-!7w#xX&)XA-@Yu=*vJ`Yl&6$qWav zoTDix#7ti0uiAZ5{?jJiTIH{Eo0A>5TkT9)xvn^*2vp8`Vp?%C&|s1yzf?_AXW0^F z+3HQbJQfDO!j*b#Udi8swh+@Bn7g8ECw3ZeSZ-Of_NPl;&ZBK?lj|mYE_lu+j0$HD<{T0`@$B7)sIHG#vQmc85{I)L>BR6fV`|&t~JJWq!inG6deMC3zh_ z*{t)VzHNs6%4Y>{_@tFT*U9FyZo2pK7w5^iGeYX$?%m&Xwx)3V;-A*DxUK$~OnUfG z)b{V62Mc~Faz$(LZFV-k_OQcKWM2Mso~s>poZAnb<@54o56qs9+CF^ea^t|xRKOXB8!|iXGMOj{C z{irRez}+7fU;FiH=WaRs?>os?R|Kj6+&UAk0Qn;Xc zhL6|VdF_U!c}ho{q)(J>-hb-l%$tY2zg;N$$s}vuB$#^tY|;voXR~!8t7W_z)RQih zaUaY(zwcxAzqyUfCcFNeVT)oq6u84;<*Ow2h~(oo-)3GjjM>G-@j~rwdzwYfHP5^z zR#8#e*PEZHS>FCv)2&f4@w9}ERK&x_n!kz}KXNSp!n#!b&eXdOTi?h<-2XQJyMEQK zRW-}1>kN5iEhn=teJZda^Z2HuD4T;iomtCLUd)O;BV_a&@5M z-wqmPgzcCkxvKu5L!!Od*X^$V9t!W4+URy?^@=2>WU-fKz)RIuvuDtI$W|&11H$tVi$YvdkBm5%OU1! zo~JHjD`jDGa~hwCm{h>Ol}A_dNtA97Pj+Lkzn7x%NMrMf#3v737#~SE7jgC3{%~%d zxTb=OX~k;KFB{e8rSv{2yZ%c4FEkA;ux^q~-+7@i{CdV|hmr}i*^Pw{@Hcv`ip0pU%fbSt?-wFf(Uo*MlZcPT-$yp-z#G>`f2>;e8ls&8=98P z?JfK0>2c2G#>J*-zZ|0Y^<6H`nVb19`&(Db>Q9gBcbX}E(GBCV-F5g_mg|LF?XrXE zlRflQBHHvmt(rLTT$a9*+nF4V$j1{eCL6jPEnDOK)F@B-RsTV=`)g%fZKruGx6cop zr=j-o$Fp|3FAJk;MEGxr8K(-zeKF^6UvB8~*Q5K_m*r(SDGiIv*E1wo2W)J~&CNRQ z#&%==7Wu$}J@5DZzNFl5GwIvAyVemkDp_y0OErEF>)L>6Nxy{+C@{`^@PdjpF)MjXO0@i)ScU zx5U43*!*nK%sFq&>gzzA?XDrpdcx#$`Jzwx?GgM7@rW*}G=jzc#*ZsfGDV>bG|vybf5ct%>yW`L``CrpoznTQ`np8IE-K#22a!)y`8oc(U;hv@5``OePo9A5FS@3mo z{lfA(R}C?(Q;+#K*Jn6vN}W z(DAqBmXrJcKCX4lbzU3ln%2trcXw{9)+xN-t{Qk)}xHWY4V*3Yg04ML}#R(;#+p_ zvHF&Ol?R?qOqS6QG5d9=CVc7D!ow%hCrh<|cw=#U^%j{9?H#jrMs9R>wYVa$Tf8PG z?6b@gjxM$1lG*jIE3}nQhwC2Iu1kI3_|HoJ=DaoAN(y*p%wzArm>}Tu&xP%JfI$9J zZoS=4`g0x1tX`bj&}=)I``ew=*Y~fA_;9Fjv*)s?UjJ&#^cC)m1C~ zvT}N%;{tBxthfi2m#(kB>UdbO%Aw%Pfy_N-g0(LXE!N+s@NFXVaeLn~m+8CH zOO`h&wPi%S`8xAyOX_5nFW#q(qA$7b=3k!v_TH>@cT;Ole>9t|5%KqY?~jrtEf3u; z#x`94D*q%R`klXtad1q+#cTQVLf)JFGcI4hs&kjvVnJAZZKCUx0@Ur!h;wkDf1N7?5n z=UC^s2U~A5TJV@LFthgU{r&cLORvYiT(x@Lr?1N%`%TGoSG+sTuB~5I``8oli%;cu zM~S`6QHy`vy;0+s;{Fdx_TMJg;GU>?w(4RS%{~mN+r*k7@|32f5 zEec;<4dx$AJD+^Y@>^!ppNmo5oBwc1KRRV>_jC1Q)28Du#I-8rBHmWk-K}}gE?sAt z5Kx$Ke!Jlt$LY;N5mSwKoh|TPV6S#mKC$k;(zH)itgBAiC4c4I`Ny(Fn{(02sChyX z=Vem;9-c0|nBH*aDhc|Q%JroH_9+FDt(sb6|`&;HHxk1yCGINPTDv&4Oo z%~6uZZjtvZ|8IiX;qg(zhQ zRh4^|oomeuFKE{Z>AIF-Gc!M@)J)>k9Hx$nH_s~* zm!$9>yXC8tnkus{Y~R);ceZ^I3xB9CW*9xwP)7d6#W3S-hSmNdyNZ@OsaS@_ZIwH& zU@4qG^N-?cCKlHxpgXr;e!HFTFQOUp;257_U`AGMcC}z^!NmMGnG^rJS_#*mIxwYi zYkEWN)!+9uhRYZ|u6f*3%3mHh;qbI3M~-MI6N_50lFSpUc68X)zWh*m zX@&Ox9}e?fJ6p`4DZ?hu=m2A1^Stx(-xRoC?44XP)1UWH)r)dh$rlUeKPmlU`pM0N zD?|C6+sngsr#pC`6h3pfTet2~sOfWSvqv{sK5_0_RdL*QK~nF&(-l+vUa5=SKP0{QS3;vvwxk z`^T$)D$nK0MYV1HN8MsRcl95+^K7kb_>qlUPu%-s^W)8N*PN+SDrc>oeNj@{bxq&< z;AsyIoPTm-@~GL#5i6b_SX zXSYyzUnB1@O~R}F_y%QY(IIhom* z9d*?^6ka)cDM6>)nYJyt^OW{o4ETs!c*+ z+~k9PZuhj0&dri3=x({cP|AH#;H;MCEe1XDpC)hr?|1j*!CEonroD?z`Zr6nZ+vmX zglVRaumr2y)k|xlgXSrg>Sa}4IWeL4>w4zaWgQKHd_N=noy8^JJnUz+v-+^$bX)1( z{`!;$$^5cXCBH6Qn3iY&e!6~%-0ymr!M5J#W>uxr;fl5SJyw~M~k@i zPEL>DHdLN9yJU&`$rSFO+uwSe9|I*esQu6*7c$?Xx_RXoXmRo(U&UJy8E5uIv{sFC{G1Fsyvs$Mr zmF>4qxl`Pq|C_(7HB6HY-CO>3@Alo7UzVgfIdQyH5jf#6!zI<{kb+UCU4US_|G{>p z<_`ic0`eKK1iyb@v-1A-9}Z?`xwSj@ZP_Vg zefiqe8x38BQ~IscFRfJkygOs@o8D)cdk@xaxSaX>{3^|Dc{@7JNA7s*9QVw;xpzsL zO8&XB!?|vKu}z{WPsKbVGNSrc<*qy7I?coDkhJs{v0mp!ZY{Y;!#k&^FSUF>orP1I z_w29D6NB`f9(|a1VrjknE{WV1QA?Bh%ujKau9@q^ZS-!c#^g6%jQ`L1eM$3JDegGg z{$cJ74tMKY_m@gfpE#T4==44HoGv*%WnWS>Hpy%*^w`=wJIBSZ+NN7bj5l%pRC!AS z=^2G}Z>;*-WgM)Vp6p>;Rqv?I@hT~2mj?f=uI7`AuU}tLzfzA~)>_0c^UD1Vj?7+s zF*a9UfzAyVFS+{q3BR4qhfVj|b6@0a%D%hIQD^oXr^$+vssd)FtgU>_Q+0WLsy3}u zxaiJSd6Pv+KlXK6^#yOsiY-h3C@-GzfrW%GPPKjn!>dPjsGR|Lo$g*Voo? zf6JTkXU%MjiuhkUL;o%Enhu800j@(Jx^jfTE;yFg6(>GZnO~ukpO6Pw~-QzeAG0uJJ~?^sNbv@2~QF zsDAQ&+a2w5(~(HSQa=h?s&b&wDwQJW-5__{W;9LJx zx1EanLOy?8nRzyfbyJ<1%C3q1x3}~eF4!CT%j=FrgSGE*rTwSQi?y7b@cM*<;GE|t zXPA9i@wQ1d&nqptO}AI{pvpcDtAlSB9yk6c(D#)0TBdLC#K0pv%u@IGWu7pS4DFS> zzE179-NDAAV(Y!OMwsElIhPkxu)-W!6G4Rckkn7#~$v{VYs-bVCllsE_)0a1n+v33kIm0 z30$dP+_|_=&5+%fkK49ixlaDX;igAM)+bXllkV7QMtJ_!W)pdxD)lPs>iv#TQ=4Bk z&5b56eu(qw{%hMKZvRI+KbDirh=b>ZMaiT^Z1Pb%J;NLo{O7yL+qt?hIq}Pt+!T=Q zs6CnxJ6-a+{U>K>BZHKL69?jEHeTz=Q+{)J;rHCNM@~3s_BeQo>q$P06}UAc_ui`h z+hyn5m~&YRAKY=X?znxjM^-teE7zcRdN?~Vi6g^Al{ z?f5C9COqlJmJg?5v^gd`aesFtz0l<3$?h*+CpuT(^2$AV&MRT(0_APCip!?z^$jKJ9KaKDyX~-2&v`xzicz z>d!FGa&EXDTOPaP)vDEpG?&kL#2VPO=tPfJ*WF6N_p$TBtp0n-@3?(#*Y(J)Ele`5 z!skwz--`Ts&Gd8PwQsMxX03GR-qy5{PhV(ZrY-ZAM|~XUa_x*P%a3@oG?;DF>Zp}o zX5N17{n5#JLitA}d2ghjp06@FiB0QZXZ%4q6YDc`Gt|3RPySm{zA56J%1)DlxBtJ* z%gEXKDLLig)|wda>sOBTSxgdUua=utZ~r4n;{uDfOytDLjUDQ?6_E^y1-XY59kdHd z6|FZna++2>;pmEUeraA3cq<@6**uJY>(ndz!*>5$_9Lggf|viqGGU%yCj{7~EAnD? zMwn?Tdh92I8WA7-dfA#(sA)$UzQ%9 z|83#J_-{+pcOR3wHK9?F*_rLzJf019Pi9zgeu)e=E?_Ng%%7#HWVboo@5tg0H)D+x z7jwqsw4R9HUy^;}zR335YxwS*RBYewxV&}an;%NsB6J>iZ>)I8-}Wi4p8vp2^Y1&3+aB7Mdz62d@5@|K|3_@_ZXpj}?Ev zEl?H_TJ-i^?!&Uh((InMXPKT*u?Rmp^|jac9Qmm2Nz*LE=1jOFF#r7fz;i5Esf(TqtQmECj0>W-{h;GO1}yeocj6ho?8fOFUtk$J&e zlY0NSCc5};7vHU?&un@myCnX=kKJ*Pe_zeH!rLmSd;F>A)P%*03(Z8H#%{`8QL{Vt z^I3b7N6SC4_}q`=U6Grn*)vNlo>f75W>T`?`Ti-sCO=FHOfMc-2tJ*9=9S2Tlk6o@ z6)P8i38+6DmwVi!`;WK$yzLciN^2w+^e``N5iVe5n!7KrwQu#2XIgG2XM6Cun0ztu zc$wIKNZHQo|A&u9*<_^`MPC2ge7dhExcz7fwj5geoyzsF&=*FyG&PkF}*+TAfUjDhlx9`w($>Q0z_fig@ z`&qDHXS&dL^O-m2Kd*f8{%y+?wwT+6VmVeOr9vXN3>HQF)wF!Nb=%~psv3t{b{t_% zRdY@*xZ3c!^ojAZF8!v+x+cGss~=Clk{$EqYMa%xNBev7xBh+i_S;tb>=la~eAVR_ zP2K7E@5kf*@6mb>gJTvHepPloVf{HveV;bCSbT8qJj4Flv;1*3Ue9f8_BAFwd2avz z=Z6>W_Evwc*Z&QlC#-T`{B6)5yS;&5u5PeAb-$>h*05_`veGu!)eo1{U7Q}ft|}&d z`8n(I^X+r5-OpRS-ZVSyaBf+aJ^SV5H>+AN^}FBpb;=H^DR#nd92~wwcx0` z_kx!v)=C_TwYsJGbyLJ7;d>rxuKf)jwHqqR+>+ziZhboRD1NuHSa;?nku#IhW*LR# z@cP)Yryi5C?C1U0@%Lh;{>kIB!l!(&$ylK|jUy<>E5vMuweHJVv(`L+bG1hEc+*@1 z?~_XPo$ZXbH_g2=anF@m`d-PKCx^{gs=a$6&$1;K)_-rV2;B8&%91y(F;|ZD|5%)) z{dU>DtZ0#GHw+GE3ih%}lp4R_3Me%=DRsJZ({Gi2-V~ONi*L=$VSKn)dsfMTm#hD& zTjnV6`x{;Rsy6F`%>*BhxtA21T_)wToxUA&Uq$yUe)>x7Yl=T6{^|WVYWNxs_ zDcF18)~Mxw^^!fXbv zD(5nu75?#b`}sc%zQ-9Jq}%_#`C$RO?TO4Ys(<>vviDnC-?P0LKlAiDi<9}f!H-{j zJg)Gmr{?Aj@js0nKZAXL@xA4#IzCJGoYUmhif zzKizEd^B^yzcVh^)?V9i@YZd9YrW@BPI%NTpV71aV&HsXfIGVTIIF5A^?d7nFI+x9XSQqo!wDx%ryTP?BX4-xSlLX+NNKKY zip!%3A#Wyze@dD0oXha{B~A8avgIA+KQbQv2w?Oq+k9I?_G#jw2ll_6EN(55E{XkZ z&?&L}WaSIKw`UGKYGUuTm9}rJ**+tyNsGTN z{WV>or0zy)F7GV?$Uwt@3nV)ku|LyC~_P%|%WA}UcynQdHeR#nxBWQNx>ZIc`#YsDo zqdCIk>%DIjy)Av{UiaWf!I?nzmhF3sy-sr>O5JkQTRmCN1Y<>o%`Xo?u`#|fJguAZq}cjbeqhsloG zvt_F-&b951biC}9_i#e2j@_FuBjYQ-a!-EPk|;I(Ow+Vl_e)JDDvusm{&Tl{>guWO zBKh(T)66>gKJDxGoh}?AdSn5A?o-Ktyp2olWZ6%($tZ1Puru+?)3lqWKl|Ykv42@+ zN3TD3e;jdEg6+05+qWk?U;dhf89%#~F3#6`d*l1s_tn2QE56_HxUaLHd$nbo?a{Ki zyRFvg)%mXec!|v>cTsb>+~Uh6a^41OToqnSiM@5YIk*1ex<0v|21?~gD(^o;2d3;R zE!wZVZpoClyFH4}nRtl?e$1XB>3e+1Y>ub?8@7pjpMG+7;>~IH*H)jZpZ)r&zF4@M z-qs5_+s}lu&p6cmTk&MFdiz}K+~hXXcV5k^&U{*RQgc`IEPpAUx2gHa+K(z)ch5}g z^yv`#H`D%9O)B@gnXW0zo4U4L+$1;k{4-b~wcMEU=TYx|zW|56i@J`}rF zMyGMn2{+{hml(|+FkW?U-#4kn_N9l|o-Nw@CKfvi+m%1K_~NqL&u}HL|AE=9^TXr+ zt}VD|YTmw>-(KO3{dV1)8T(Dw%-(N%=5Ar}jrxbT3U1V8AG)^I`tZBA)^EM~);`?i zt;cu0{`ane+qv7@|MK6Eu={=0J6z)60=tw2Cl4(1{oTHO@87u(BhUZ3*=F%&+H}Tc z$9E?v=iCqav-02LY>~Fht=@GaJ#MKrPYqh1r`hV+ttq`^yWzz7`TwTJCx5u#HQ}SA z!?uvgIu~XwUdeCQ-0;8i5<|VCSyarQgIo7EIBq!n*{piqld9j_Z~v<>$q$dbwBy;O zs}mC!ue{GX{h<#zjNKUd4Ed&s(IbY`ug?vK2-d6kl?)CZ7t9LHmBei~;VvSV5N1wyjvTjOO zvY2_AX1<#X&rY-p=DE1+*+VmzBAI>HaxI*iGh;7&H9gO*wp(hww!(}bg}NDH5%RkX zC0*3IJ@+&`yZ_oKrM=r^Xl=2 zd&^t${al&w#CXmV-GeXAzsU4`yyN49;+sKzb+_iMUy+9e^j>np8xZ!{yv|aRqG2GMEvaK1f=&(3=640%>V85 ztog5sdSd>qxgE3gMMtf|0*8fDcQhT1xH)0r1&%fB+A{l?n$&i$NfMp&LPR3-f@*vI z4+l~4wXfGs3FPTz@75+vYA6sZ{u9`>rr$$D2*w@2}M8i-w=PzajB{!GfocXRThZbyD~%zuk`sAEs^p zGc$hfr$+uir(Je67r3)U1t+oB^Q&e$U7M2kx;Ee2@nnBX@R?4ZURJ?L3rcGh6T|hL z9$o8dO5I;5pZAX;H=|6WKt+$etoZ9bBe|sIdo3&>9 zT`d;eC?U|UoP+Xv>y)TryHLuX9aG!_(=7&?~Rw2 zzVGo*V3)oW_%LHq^bYUv8%dWrvt{o$yp|T;ye-6TLel*S{%@5_LO22pqivo{w0+RP zyr-bx-OlH`>{As_}pABF;_h+P#fY z_LkDkN9q^jQa45fO%9MY`;@y&%qO>Q%0`YOdJ8_*4UPa;ipxb#6q4-)LUctVp`B27m4V5_9yeMG57z^wdu8SsqB#5;BheNh}X{- z%O_6EY1uUG@sXz0;YADnG~PSO;ZpbKNPA>aOaCOU^Rp%@O+D`>AJ*w9yu!|C%Q3r- z$zqP*l)s5pFfKKHd;X4~@u3ed7T9Wi9;X+16@ZO$Tvu33jxXtZZEw}LE@|FMC=C;YyD10?}F=?rM zbJmjyp~15L7MrfT30cpqWmfShIo@uqwDh^xZ3@k$T6Uoy)!dkN5eH&zDVQ`*%P7&(^1kzaAX<)TOP*|NrB~{+9l_FNc@j zxUikaz)@$GpnIBI@J)|}e$N)M#xK9}#HBC3l6T^jnGBsFz7`wSZ*`w`DsE{LOO{5n zY3z=VckO?0N&U{8c5s#~`^kNOdv2Ybv5&#WuX6Vy`}xP8JSvXmxz#s+ZoKrn?RAPb zPRk$Wvwrd}-Flcsr1#HM=+NWj>~?Y@#f`|ogYR?aF#EZ zm7mnyn$znn&Z}WRiT%=o)deR*O`K=@vAwE2WY@5)H)eA6yuY3oA8a_x_j%Dl^Zh@4 z@8@6elCH_$V&A#p$;IVYYt+?t{b9Z;zQ1i#_+|DQ&_J}cJ@eD|Qt!XM7oW3pNek%2 zH;easJ|A+H`y^05h50j2%`?GkD>pIEIre^U-$~gwj`ENDCKg^vetGEkr?6M2)lH&u zk6+in@K#=X5=Z5>MGq?{N|wgnf3a=*i*48R{a*Y$Aa-c?+nK!;U9%a_{7^1iuw2Y_ zamPpL{1?)4vA-=A`F^=Gp;2PLk80q;z~d>CO&+BQwD&H#eSGCso%GtH7dzAypGV#o zF;w2?ynW%;l_w8O-{UyX=bpqdma>?WwbA|=Z5LiGo6%{`opg$0U!5;km*%PEJ7N}w z_#Bcv^4`^Q!;d{jU5>Amykh6J?x&pLz8}3syHq3IIXVh*0A^P4c}=W9{*Ro_(UPejECb6`_lW4%*jcM7nB7D6)Q{*^lQ6# z-1o3<>9iNWH5*T^h-4*VdzNEn&{3r@Q~zFZ%-XHe$#c( zncvc6&y)JSHUSDU%WIFWyY#1f|BuffCfY7}@n!D&n&XG}eZ5xU`obbvBK+CAa(kOU z|K#^*u9+Jxeec7s>#gzCFS`$^+yDGn5TJFaH=BK@eBGhRhYrjCJK-5}Y}(%Ew(m2K zo_*gE{^!?!F8!K=`mOo3uRnd5Z2xmjK}+mLOV8i?-v9o$q4Klg!@K`0+;%*jHd}n9 z(eWUczrEpqqJI3||9|#|!pC(F>+QZ*J~ZsF{iAfVaYK2EgYZVT%k9~h-ZZ_KRYdT&+I_oBaNJQe)X!UiK(hW+8R-TN8{`spRYHO(#jUonD>Tb zy+uuW#m_+N!@ne>Q-W)JzWqx0HvP%6*3)y^9vTYm-aE7C+@t!Fcel4+zoXkyeKWA| z*t&CbzO%2J-X5CS#~-=oB}>aAq41zA#&*%KkrJwNo{w!T|5w7W(Mbc)xR==OUSls{ZZ^6^4;m;N=SvN^%KmV(2dCu$mMD_N) z`0?oXv2w@z>@|?Np{J=1`!_z#>|cKM`Ql~e5C44A^eSRi=`VSp8ex+1_4fL&$GTTV zb46d?a{X=U*Ojr4HIBQ+dGFC)G)q6m;C05|$zof`3Z_8p^wC9I|#y`)B z9R|nWojpEDCDq<*#)3BsCS2^WSoreTyp!(kAGa%3J1lqi2rpXqe2>fLH#=H7w=6s@ zCO`4EfRxSGOVhV5G~bl`#Y00nGih$zHP7vWR4ftvrP{0(zbi{npZQ*q)o_y6eG`jmfJUPDWo=L%z2Pfq%q%Eeq9auc| z-;v|}e|BH+vbRwD^~h4ZZMoe`&xgkGe`0n#e^}Of;EmId#m4(2>YhH`FPgXOGgd7|Gk%=bK-pQywBbbzZ|zYmm5=a z(L8$BaryfFA7)+Or}yXD>U!mvl8de9ek<>OTYh?4e!KmTzxNCOTwVX~ZNZ^Vb<6+4 z^M6GA*g5}i>xTKFp7wuV`nTEtw$DHL&EmqwyG5rTF{vc~n)>{Imc^?Ti*po>r1LhL zFWmQ9{=Z$#7v;yX8^3d(|2MzR=<}uN`z~~CGv9fB`@f&_Q|_14eK|f)aNeIM@*ks5 zSsdJZfa`dE-Dl}HuMSF_*Z=oOzq+w+vf{D7{ONxtzuy1g=XqZ9dlk*!EiV*Led?)x z_x|75!lT;{W&iuGEgswW;*hNToonZoeUsb$>*MvfZ_@kx)pyGN=CuE#^1J)vx)1vQ zg_5W275a1_|C{9Pndx+kqR`OwWyMOWzj|lto=~q1L{;TErsrKj7>23RK ze#b``{+A2Fx3}LHwEG=DpEJMq_55jxJby#aHK_UZ z-Ia+x-e{+t=E}WcP9wL~la<>JEx2={jyqqmXJtf!`n+R1Uz|v+Io~X~OrX=^cwK@` z(QIAigyQKRpTD_u%=%5)v&i4g=X*qdS9m7-u~&)C>$hOhbNsdC>7yT-S2jy3pS!Vi zR<_Q$n)+tLwyWz$5qSeBJ2QP7$_zCQ;SQ--^|LrLAa}|;3oChW+ zuiB}!`%Jefne|24?7`ws3vINnpD6MX+4H{kefIH|)46{4=N0qi&w0;aB%-C-9e4A| z=4af~b*d({nmur~YkSY^-ge{Feddr)%D=LlYcdaixA^y?SNZtV{yk@2Et%}cH9e-t z^PjWupG@;V7f-!Ex25*Py(K@V&nr^j)6x}h)HG>j;YHTpU$S?d77sSPzVNI0?Cv=? zYvkWbCrt7Dc&qv4=KThb1#D)D&I|dpLwjHU=_?`St8GvCa4z;SNr`{mBGfK$DB;Yv z->2B5@2u={t~vZzv?s&#*EzH2H~k(T%JjXH+nndUO?)(=RTWm%tKu>i7koBU8OT9`foE>f({?;e6eYCcmwHW?%cw4H9Xm zej3*KxZb{ZQasg5G|2=ddLiEq=ypF7!Hj zg`s26`o~L+zbu~I*3a{G{imfS7q&!R|Jq=3PT|4DhE3{L7Sdl$XVo-azAotz{+GA% z=CnC)7HZF)%jzNe(cn;n<^PKc53cgEUpT$s#buZNh~2BY>#w_?929e)#TI_V$)q^G_~YkG_3g_f4JoeD5l0*S&wg-A)OA zz1KKr^J*W>j(gX;8Xk)&^xOTKQE<2P`qM|rx$=K*Uypgqx-Gxv@tuM*&yo*kF1I(c z`8?BJ_TIN`+jm*CIwsXW^Z)C!vsF??%r*EYd0G|t(j{pKe_Dc z)$q3LH`RYO_Sarnf2Q_S@I0}3-?jC5_WxS++_HYo-+zz9_nXYA`5$~}|G(G24?Ue8 zo3;I_jfqVC{ogzP-TNPS?&|%!7k{Z_%10%<_j3>SHLo=|ziw9Q^rm3BWp_^IaI0rn zD@DX!h>FTkIe7H3W5;3loJY-PZ-@5V92eZSzvtL4?y!uQ&ByY}HY%NzvNn0U>G6YI zbJYyY<;!ktS=l^ox0&=N^*Kj7e!bh+y5PZ;XU=RQkCo~~M0fH=%G?aP(3eoQIqJss zRg1aHmOg7bYHw_xd?8PM`rTuXZ`kVAc(Kl%;c&UU>yb#W{W+goDb7_gvrj#q{G(~o zWzM!2B3ngfS4?8{^4r3A-CQ$m$r<*a$?`8+6_xJRf-cJioT>tL2@5cG3`@-r?755j$@~(Y9`+>%O z8TT2&6B4bT&nag5e0J-%oL_6Bx2NsO@nwGGe!MsH#$?{!;2jHIJU+B8d1emdM&;;3 z-uu3}=CaROd!~G4|JkVJF}r76zvR0+zih6qV0<0t#1|44RbuX|IYsyKZ)b>lRr~4Y z4)&RMucke25b%@Po}PU^q&CQIiTcit+sn%r@t4nJk+ryOCuDu^R`-;Cg@Y+dFHi2f zy@~%%`ZS)-m%kT3bn3e#ax^H}#L4-doptP`zY9PQz*r4~A89 zFD`$kX8om7O~toP=~|6b_}N~&ZI2f$iv4wAizb`0Yx+G+I}r($DH%o@%BpjXg$urL z%sAGtVBztE34-!bk|rfTE;WX;<*qQl=#cgQ!v<%i7pJF{F2DX`(wqH>YJa--{zyKz zj_G#Jb}iY$BNHFaE_1#6ZSL*EQM(sC6Wd+%@pSypN%1GQ_s=yrx9+}#*qfA!OUF)! z-1|H4`*Zzg^8Y{1j#9h#W!d%gKVI5ypJEQU+kLvYcJ-T04(`ui`v2#&-(mZH`uw+d z`0IZ(mp#2-ZLRX#GiG7sR?!Iae7j@!%E}!pu4>1N{W}$xQXIT1Yr_>C?&+#?SHIkL z^XgLh-~Ihn@!*R5WMX`+d^3dGj`(T>Iqd)VYseynku*&3OCA z-makF+Zr>E+Q_D;-F@Dz>&hiOce}}L&9oP(KMrlK36kcW#X95kRp)sE@gaL&7v?SH zi|;A;t91UTqrRB&qeV^o^|JmSajr4cl3$^!JaNY+!#K{&^L{3`tahI&Y?qZv%Z-cM zouHq;QR}(hYvumfzdMCXi!|+3RW@F!Jo?>bcax^B@T1+4>!zgXn0-!vFTC|pvT;;V z^XjSFp4RaHG9w_n}i;CJ%#v$M1R_HKP@ zxZq6bA6_%bht>?f8(vFTy!*anqtzGie78FD(|qs!m#vw#%>JC7pV4G0JIAsu?ATf9 zO_e4W|NVZSFP;_iw4USQX2sNORe}AJ&3ac~(|-I;>VDCWPob}_)qTAB-2d_GOXBPO zS}F~(+rnfW2cnIE%f^5{auwa%2s7wndz1lk{l}@Znf{o#=Iy-*Uz0ZbP{4p zR!Zv4H=L%DozOeC{krAEHQtg!*Yl0;%=o_HkMgG{+vKWc&sX(clVQ~e#Er@$GjIQOi`WeCb(hq*$kay#{`dB_}u@S zcE)#iXt>dp@}4!@_uHqseBAxuRpy2hYPx~R%OrmjR{edC4vT&IG1bPCUH`Fh zNoueD@qe?wakt;AjomRj_Kn5%GT$999(5l&$zQWURIW$gZq0v^Xy;sIsgAR z*@tV^*QF{+3+;QmE&A^@!+ZBma%b+Cm4A9#0{0x|L&5VtDL-`Nuj`0)tZ1>XcRMdJ z`JG0^ox<+&`a)IL?f0D*uhn^>v9Ipk=J|!9VzT~KpMwAX-h6YN z+}-2%uK7JKd-LhZk$u$|D5xn=k(R!x8sxlk%BcecO&ZE?ce3ZN2F}^V9mQ z4PMT|o+%BRr*bdzdg|wF$<`O4vh~q~oNf!XLor9LzIaprtWfG(+qO+S0VW}V)9rTJ ze!1ZMmap;iUIWj4nN26A?NIJq|9ADH$5p#e&9mEecwf*mHj9*mU6K#BFTF20?Q8Vz z%?Y+rKSlR)w=c7FEpm8wEHU=%)d^J(Lr=zg?mwSC-}h+j>rTDBnGd3}uWx(eTp+T) zpFMWZx}6en;<2wK!vahW%5<|tbW|Ko^;&*irszxx%eTyrTccXFdUP%y{2mm!O}IaE zlK#=n9fsakGd^4lxU-G_=c&rPjZ2wxBo=v@vjqe#-lJhUC9YfVvy#^e)}tahhQEy` zPP)D})$Gjn>F*{Tc+_*PuH|%6%Pserv)-y!8fKLq{=53tX7%VST@@)I&kaA@90HS` zZaJG9{o;_)+Ihm+cb0^FX9~K%=;0iN13v{XJs0uZo}RD&;)D`={I6GwwWGf*-26b8 zxAM=S$@LXE7nbDTU9#(x`x;^cGE%q;0 z=C8h?eCTxj-_VCI&K_^+zrA+L{}12am;CC9{b-!`Sc_xcXOrGz2fv)sULP@SW&OY9 z<-fa=_kB64|Ksh^^;K81|5Q$YEOk3EdBFpZ$5}RcoptAT-_D;__gDJfoAZq+8$Vxv zUordcrrNhVp2favVCE~?k$L&wzi9x3(`$ee!_t*7%zl7Hc9@uQF zo@w*`GlTYuzN|Z!KJowmu>GIXtn|NEE+3x#?*sp)AKdX@CVlv9|G&HL>-Fk;zxDPn zm3hXq{+H}#!?x!U3x6vA|EH)Q^Y6>~KlKm4*Zt=|e&ycgBfH$@o;&z`jf1<(VndC0 zg$hK~- zSko(8d1i{J?8eQv<6anvU;7;6y8CHWv#9d(vj*GO8fR;zubY4D<cqr=~~z z6~DVThS=TEm)Xy^O?+$Nr}LX{MDUk9m5maQ-MLI`kV*hq22p~G=4w6HPI%ZSZ>3TGICJX=&|>!auyC%@^~t zEhdVw3tXL}^ped@*ZfUU?w)OTPJFF0o!_M=xyE73%&;4tVOFO+7b``d_+5Veb5_Xr zl$}_Fxu2@3D5Zd?>GT*zBf7GeGAz2Q8S?xX$iV45#LQhnElKEfx58EpF0|zBV_{ z`v0ZuLx<&y?r%sftG!Y5dfkUJ?lQvr%5GcjZhf%n!y0!P*>ig`x^2Zj9w>OhSa$W; zp|=lD>3-zBpxyb1Z@1~pvImYE1->n||5oz9>C>@vu7o>Tr%y+S?O@3`Q`UZ0>)d9J ztIyu(UW#42)$Kx3;Vk<;_U_NOKV$k(|E<_N^&7WWRC=Da=uOX&D}Vp{#%G@I zU!!+q%g&p5!s5Km=kB`G#($3gzaaeg?S-v67U4|S-Y)vmB*&Hi^zG@bcT_CS*QZRf zG!QjEe)Z|J?~D8Iz4@4bw<>zM)Y0s9^WJ9J|7hm_zP)h&x2+$&&h>^_JfHTV^~Z(1 zYc^e}d(L%t`~JWGe|=kZzoyq-zBqojZtWy(@6DTS*941g{^fl6%VqtG$1gs)dVKyA zzdbj$=ucVg_cn4u-eq6Er^;^P>hCUXd2uH0`Hhh88)v5f_lQ7Q51-S(Xt zon@gNC*OMY@BYBN`=O0};k|jYD>lhW&MWHp`|M3z&iSir9F2S4&e(P=!7F+DeUa|l z9)EdWIT$OKPJ7TjcVVf>)XPUESh7a_j#NAMXLa<`lGZk##^5bct5#@KDtw!e9={;k z>}O+~&NeT>_tR~D-O$P8;H~)G9r&!dM$`SvR{0%YCvIilZkIKGk-D8pRD7aP^c&}! z)BA-kEuZ?4=f{NphrciUuaENy?8;zC1JiJ zX2pWx4xfb9bnERp5g*p9^SL`^sWq2Z*oHatk6mKl#jS>m{$7`Ym(MY>d?wf$Sl4fpw-PTryf5AuX=l3_5ZcUaAKaz-$hMc z7cL(27xFpyv*WGu{6$qxXJVRM7javsEj9@L^;)Gnf@9m`mqHECIQKDaDTeFHe zPtxq(KW}~uw;OxiMY+rbXKDA7J3qhJ9C-fn)&6T=)#N6)${O6ecIm+djT#TPIu-xF zyi&aPb3QCM>S+EiHTu(yB`3`SOw1qM`63uT_o9YMY$-?V!3Pr>wK!OrT8=rWWXCRl zxyqHbk!RD>wl!ZCTsE0;No|kb|4osnc1_Hz`>^!?ugd9d+1q1;&+U8CR`6{td;97A zg=rQU*Qb5xJnj7B)b_m1&tJ)kJS)E=bZ&RWpXlt@65ltP$J<}Xd;6^H=KX(jD_CzI zf2(_J%ja{}*Z1%EzWaV>e=D|TD{tzyYckuUGcZY2KOB=PaQ)o<;( zqK`GZx6W3Q&A+O5oAuis=Ue=?4?F9)KYO1!eyl`$&J(kn((A9k7tVjU^u%`mSKa$X zo?Lrj|JVNi`Pzin>}v#$=_Yb>|GK4{s@PJ#=keQl-R66L`X4&^E$2A9{gdB^UM{yc z)BaQ>nWy|XtSnFPF#Gn9%ldUs^y*(Oo!)YGcK=74xkaa#&)n1W+kZ69>`3k<^|>WQ zKRl}|dAG0sd`K!T#W?S`?CtjYKkE6Vw}1Tit!}pXXaDnLe{c4or{^plzn8IlEQJ6?{iVtCUae8?vpDq7;`iUu_0`T5-!{*GUHM?`&EvA=^4Fhs zMa5-&xL#lER&iMRzEGd-w|oEGK0g0@s{7Dmx&JK%$9Dg-{PTg|K62q3!3mK;#!Hzt z-F>unS@-@V4R&oa5#A>j)sN2odEzf@R+78nO8$bcEglQngg;1{Jt|!+;K6(+ML&9H z(Q}_28Sa}qdS7}u-PoYJ&i2tJuGyWhyC>~9V5YQ*?OK#z@#NTt)r({${hqw?5_Xe| zyPTqUt9{+wki%;b!b*VouWOigz8xu_tP-lrlAo7u_nqbXnB(4*SJU+p($-wn^2 zA(Kef`pjSR{eEm&;MTNv-y(6FpW08avR|wDXtMn@Td`<=(~Uiqo9ACwSpL(^>ao+! zHTbmZwbNJ;s-4d-m4-Z_h3KG~I==d|| zN#c#~2A`GH7q-sO5Zt!WO{XgJgWI_(Ukjn)4xc+$qIGVGnqQKd@%?Vp{r0u;i=4h) zU8+1wp<1CWSLAiay(h*$g%_8+@0xhf*l}-We6qqn|BoVN0=~0G=R-|~&qSKIu$xSW+Mar?a@?;i))@5$T!$p8Q9nBLAGO4Zz-Uxr20B>mVZU)}bf zb>eM_ch&cWqs~8i%(YY4&%&_a^tZ|L|0u^@`14@@-ut;9m?ZDD)IRD|ube0>eGN&C)@x3jMpWc<3i zzV2q_Q&u)ku- zUdP`b9|oE&Yv#8+a_?DX;E(V1{}wljCnj$^at9uta+?oJ@*#lNnRK*i@rNURKithY(O?LCK)GFIoe?lUPFE1)le({B^ zRI=7VZ?UlLp%p5-Ki!p8F3VECXms>t+3Kga?&$rt6AdZT+LC)@!_kjALYW+vD!n@s zOTRC=BeuJtXW9LHPJa781=q5!T)dYptzF-GrnOR{!A)NBSCh{Yn_qFfwiOOvAE!va zPW_N^d(S_zi`Zn)o6g=M6oA|m{ygfFXpYQ$eD>olL*ex%5ZflZH?SvV5EC<&++}@b% z{$N`4EyZ@3SFAg4oj=z5J2ElDIX#eH_R*e?$E34Nk6&Ec;Jz?_t5o^1iq0tasF_Hd(RA*yLwkzVkRwuDyTy=KdGK zOCFy(^VH1m#Qjgl^S`FY?|X9e{CD$O|E$;ZzT2GovaRCa#6R!T3j4u;7KI!sUw`b`Kk99BN%in(CZuPmc{@$eYBY%QsW@WDB z{kerUM+*Z=UdZ|gn!uuukzE&HSWZ3TKTW)^`298R?}}LFDt)otb0A8?%ECG`k!x& zw)+;_Cw8w6+$FXBN!G+GN8c|hy?L0g*tD)hDdg3(tgH`lZRS3a_pD1n+ERuAdWjs#m!G&%K)y9>+;$TbjL7 z(yIJw@nGt2hS-w^*C%gYdaRkx?9Y#cZ0>3!-y11g;_sZu{9H6kazm`h^}uW2Str^_ z+eFDVCNEo|P$~CiZ%{$@#kO3L;o!?iszM@{CLvj{9noZ#zq;o#L0F^2hW z3sU9lbd_sadE})67%v^~`{TtXJF7xO>ZP~1oSBIFpY$7|6Ev-$AEz+!8WUYVb9b>z9wd~!Ui@$U1N+i7F zowuLQn}2ReNzqYhe@lsVO9FWwa~<5*#&6n{T>EdsW%D$#r0qAZE;^n2BDr3*xAm~Q z{inqJTodmUUVXKs*YHJHc}~vu)zPQT&ef@3fBN13S5F}KlH1)Ir`4YHV_x@#%R_DA z)9r;@O~1NU^3A)P_l|LQ?CMs&^sW`nSJirTZ-l)*oK-xJ>-U4}^{ugtl?!7TUmEXz zsAruVY_B5xp>^BE+GPbtGkTex?y2oJeSb*l`0;gfIlo6`Z;xMpU)Joke^_Vwf((m- z=810Gxk6$NI#r%|mvQ#g+}+_4F*|OSvZ|=dNPV8+*rVF!JNLu_hkKb9uCVL>eh|wW zUD}f>C^);8_xFdH{-=cR+WmZAYV}jA*mvH^+o0)-n^{kmKhdA6|E70y|MX49A3&AN zj5s#6pS=3VvwzNBe*RClf9@vBmwy7*?_8?iQTyx6Pn&d^iYF7@ZyjYYw~&?d-Ehvi zSNohTZ(rADJ2@rp-a8lPyKK+D^Mt=TW%86w-y&{`PLR;r^HXX{vb)Oe`Av7Pe>Dxr zJl-p1s@r$z-TPp9&+^SD`?#ZeF6b=w#CaCI4$~Qhs45c3GUk-CEli1hRfVmy>y*fdEsh#6N`+ePYXvA+y0Vejt3{loKCou*ub)O$rK|mE)z3R2~nA< zPyGFAJ7oS}Jfu|FE7!+684dq}wDUhwqVZk;J|yMLTsu=M7}ZFkz$Kh`XHb*xv5c`3s~UE%P$ z*MhsGe?M4ozR{6;;v4(Yk_Q1C8E0-6CqI9F`?Fp+*SuZ#ohmNciXB?~=IF<5J?Hfz zrzg7mIt%iJ%xUUce9Sdo^U9>FpBw&*`1JX*EPh^^I%%d_f}zXBRXRf7=6?Bd@pQ$8 zaPyaiNul!#rfxd%@kReSdx?|p7?SIzvKP6{-}6ahIy0Zef$siC{2S)3SCn_Qn^F8u z>pt_@{?(G}pQZoQTKK2SOjFM`Vdd&dZYx%Qt`rf)_4|Hh)jONj=+C-&C+t}Gtp)3O zt+!0tul`6b<>N(h{bar4u`4RVAHTaieb0}knR&8lO=+@D`v08WY!jNhrMyimLzkYK z=-u~UP*+(#Jbhn@fzpNF8>AFB^f-UxjZ9zC-xIOM=t)yx;<0y*?Q+|foHo4T^kJ=$ zaMTuH3h{c!+)L z9KD>HkQmRo+Y7n+;P&jE1sTHqJA#-3!4_9QED}*Z^l;Li@y`r>RVo9 zm)I}yq|rCLtLUjf>+RR;_uuP2={#?i%|}_OPlit(ulr%UWAn59xB5Rwy((Av6}00? z!`7UWkNFcsWPUP>u z__R71?_z-e~dtTzQj?Ca-D?*FVT|9{@WBTw%aO!xo7!&SFz>fFK~o^gc?nGWw)CvP)2KK0w21%*qaE4M0H zY3I(FlM&dWJ9kY%DwnjKW=Zd5FY8T9(|wYdqfeZ0zp4NBG+$8{|J{YAk_zs3W)@!Z zRKMAML+@L<48LX8C*v<|Ja?uVFR+|sm|?eM{m%_;A2Lj1E1r~nepp!JD0btzNqj$Z zw)9g8uX#C+hwYDd7oW2{zP@G8heO=8ag%*Gcjrv0>HWQ%_q4_9I@$F<7ICv1@kt%8 z|9HIdg-72$eS7=dhh2Q&y41L zwAv(e!poqlME|5txYMNbQ!c%6|7hyE*65st-kQw2TuW{5Xy{wp>4|qa>#SXP>&f~j zGn(G=XvFr`cKRPxd~xK<8JF|X)&|C|3QOhJOs|jmEH()c$r^TGn3` zuQglt{izBxJ89%2ue#IYKJ&bvH@@!exSwx+$MQ^u)~|Q}=OtTPmOIGVwAlO;ay5DX zTp~wR?(1Lcw3@$l-u$n`ZPen$Zae55VGjC#sB|a8vzZgJTA27N6|8bh{u*2r=dX(V z&%FHL^`!W4Q>KNAhuw631Rb_7wY=G^_y5b@lPd~17lfF}9Jt)Tn!Hb$Ush&SM@DQp zUvHa^*@27VeQz)Iu`OyjeA%HP=f#0`_rrSDEcbJ=zFN4<*SfRquV10@)fw!`&TMTw zTZ|X9wyTLg%v~up+2nFq{A8Y*UxC}UGQ0_%+mg3z-dDOI@QDR|x5) zp0ca?`A8)q{Ah>T&B8|$*6-yss_UIw*jT*u!p`UOW^?ae+{IoUtk<@YNAgG9sfK5E zy^$5X(@(qmZ!@`nDvWdD#jsZ%+uN4vR;b3^(*1qnL%V+0gyZt{d+tv=d-d*~D{S+k zrtiJ=znoh?Ib?tKn_25cm#6GbSlPeFEM;lD)02(!zg~-YSX6FRzm@gqo{!ISwjO+( zCAP!VQgq&LZj;!+nTq#Sx8)VPuFbf#%S87;+3l)c)!D9ddsH$WH%OV^+#Xz)zF9-- zsX(-z-%WgOWp?RHe+gZ&J0f|Hglmo1 z5}oUn(Nh*@+|+TC&wMF;_?Z0TlmC?7r3$^}m!Gg_qkK~QZ%aP=r|xAjYDHe9e@;xg zT%5DWZO4Wqu2E~wWqzC-cjfW(weJnC+&GhNHs6Z(pzEf-8@&%toS(KvIl5EKQ6^iT zQ#Pr%v4YR(`sRsAfp!y4>RmCEtZT2;{Wu{_J^22ji|uZIy;<$u)a<_MfBl)L%+L~xte?h{JPyeHapUpUOlaXefwo5@5EuOA)B zEiT_RB95;v)HoruTtDXTQ3KB@O%mFyt=9vLOl9|E<=NF1e3(0T^K<5NVfnG&4i;|M zULV$TC3=eGz4Nz@70bU>yYk`G;b(`e-&xAbZCt;1PfDWRnz^y*C9+vs$GsPvO6QI4 zJluACpOFV+NScV)k38$2RYwzzAI^0@*Y3V{>tsE{aL#8(Z%cfeJ}EW6FDhfCAlHGB*=ev)|NaBO9q z!ndW*Vp76xeX*W6*KYnK=5M(-Cd_&B^TAum7|j$(+PZpWM%d@1DFIi5@ANF3rgub3Y?0o*rOi6WHU$K| z3z*QcIb}1yTJ6&lYp-=(-SKEa&d01GF3oR~7k$az+tO_-bSUJL%8P@d@{gR8o_pvW zzT@eYyQf#QY;(yOuK6c^-CiZ$ty^@v!$huVUQcA(-4mC*KM5IREbijkFi9}7v~an4 z=xgQsZ%*rEURiea3R`}Ec!{IVhuyMURrPDX>fbQB9{xY-?62EF{~k_Pk3ACgD9+W@ zL-(0=(wES+I-(03H?M41!D1L86!^+Z&O_Kfsh7WGiF&=4mW9o%KS}=Kj*sH4LJ}tG zmh#9#kI4CDynxe9=+IksK`iE#EO? zd4Y6?*!9AYf}Z^UU(MY=K6a|Idt)-!_w(k5eWl!q@taN3^_SnY+pK-#^oGSZpXA3J z_?Q25@`sGotgD^H^U7{aESO)Zz2jEk`@Yh!oJVQhkGfaN2wdB8OJnvU#;fl?Td(t( zzt3;Zk?W!|yMkD(jJh6Ib53Hud#vtG;qlhb=d90vcHo<`{r%FK53v%*q}7)x@>i$J zncQa#-~91!qW1G^di7twukmJ^_2k!&Mc0cS#Qfx2QsG{IdYW$H+gn=`KR-MB@XzP- z-|hFU;Lwc!`p5j#zKTn8)z&>0{g|DzxJYZJRhwRwZt$bh{a4Qad%J#H%##!H`Q|rv zB_I2@V)xx&zi)(2+|9G;U8lTG`K9-nN+&X_t_0h7>mHWM{MsPbIlE)yW#5`k%k7UB zx9fLrix7fCFiETZ(?ha>?;_+n% ztqp4*9DnKQ+$DJ_^UdkS31Zs0VzssPD)WyojhNI}XFc)o)Xk}K*~hG zmTAFBwof-g6+Rqz+Haq%X;E^OebqwmJ)2glBs13*boGB&svfD#3qJZyk@>IWgNOym zB0+~(f18FMh-7^{>q|@C#(HKTs_{5xMnW|SVxWi-ma zpnBKM#3XzBo&xW#sV{wU?B4L-+&1@*>ivJK-mi_?v8Ty_$Dc3uB#U~avsqp!ayw%%l>q@7} z{Yt$kAf2^ze$=vWtE1m<*j@LxYX4OU>mTp4Z`_dn`6S`;GT+4ewco#{+r83SP&9wS z=r)rn(`gP;t`yFj(ihE*NJ$~7| z{&vY*pO?S(h4bO*`@Ssw(=O5HeWrf#o2%c#g|C0?H`G@9^L4A${1Zm^qS$v9z20m- z>6}&5*DGhbWj|1LI)mS9S&Ya1i-hNTcAaZ-m>imFjFRW(1xcqA~f4I(vy9J3C ziu1m>ocecH>=W<#-)aH(_Qq^pIxX>&`py~WCG_WCj2G;8OXX6%dVRTDL8ZjCkAJ5> z*}VTsXJlr(e59e!BaPYmi5us4Xnk?rsW!>za)(>?fgieEA61<-{q8pwE?C;cE3os0 z;cZXr+mAJwkAy3kU3B^SY5R<~GxqHEFH8--ICrt!#)rS^rj~80c@<)_CgA^~bFRWm z;*KfR?#`X_M4;)=)bxT^xvNe`nqU99V0B%)UAcjB`?@y~*FSEG>!|I<`Jn0YuH=O$la@zwT$|PGa%B1UnKDa$Ms{CXdDHx})sE!Na_+sx zdHo)VrH4v%CVuK_&YdQ@JLlE>=o|~bci1Q4-5r7B}lHktBJH-A@`r} zH!I8DyviBsD=yFBub#3r_QiwRU9}}Q_i2AHwe!oel(c`fV)3E1+wZ*!XE}KJECj@5y+o3x5y_m|iK;Posk0$FRugH9~ z(E0Ua?{(t8qLhlZw_6|L`>p)WZFg(RecrGKTmNLP71~?SWLL!(^=7&5dwm|woFy-~ zxx^mbGRX3Z50HB!60g#K`KnT})17XoWy159N34-I$+&6!dX44RHHACF6>{%{6)bzd z>fC_{LNxpT-ZvyINOfFrSn%srw^mUM1%pSzFrlsH9bG*^*<%k4@JU`EXQm zWIB9Oia73^@@T1|)r!nR#yXFB%TrBn=_wy{xt1?6v`*@l|3O2PS=S)zj$ocYcb0c@wgbOc{H-FRLeXPjVF~yT(m&wVi|CGyr z$bcGdCmh1rW_YeqU0^>!w<++|y6-CsH9zUe+_H!kI~1{UL(H9JZ%e}r{`|?^-o}4t zpLR^$={0xLYT88=(+}xYzx2v6O#1J`o%dpQ&w(ZROC_ui+?ZN%t@_nL>qF;n)Lwsm z?e;-O?XHZJljmQgZk!Qw&A{8MaH>LDt+)0LiS{{9HHwx;?6An)`tglL>90RmOOEW$ zm^{x%@qFjXoVRBuY}{!0?Dw7Lc5xL?cFtHd)$;D_&jvl4f4=4UZF#QszINq<-TT!| zKiQoOJHGC(+OH)R#ScN}P#64qxxD&d;I9jzHB)jI{8)5Xvf{1tKGuidb0@uQsGb2YE%N@$AJ00RWc28f?%#Voi|bz;t83xa)0%Q})}A9A7kWh;kG=4H($T4V=983X z$IguDHIBub+jhq}PIsL6Yk_s+%CF0vPiF@O+?bf~Q*hyf-Bn%Y6Mgr-JQ|^N&-d)R zP17FbCtNzu)}rpTOr7_5XkH_mV%{s&lYR^GouqF?9XmFEf9bVy^P5J?yu3OuZ&xcj z@+S4JlEjkPpQ9fv3jeogPtL9h6B|qpcDxJ@Iq1gMWwvDTQa8P*gn5_PTx%DYUfp`i z&g4u_@c%;|;eUIrZf0G(-ywKE=gJq6&HSed@>#;nm=e%%{8Zk^9tvhC)a zmo`%0{NIW!KD3cr=5U#{)|se{lUmOtf4luwe-7vFvWmb>b#Xl_zifMvY8b7TJwtWr z4ljYt7fXIknJ?q8d$O3`ObcBb{VAKDzVn;Ee^#HF$y}Y%kGpLY^ljJiJyhw^j`P}; z^FBA=vCYF4;XkQ7Ju{>ED&=O)`efnoH;!$`_P>1lrXOE?|K~g=)AK!D?Uk$6U;TCZ z=>89_`YoW_{GPjV^`GfB=@VS~|LLvpKc_G1|2^%;`LI}K@zrnMJ9pW4>g@V4vF}f5 zTw-U;bG_`2uU`{+=RLb!;?fsd{?kk* zxIS}TnJ81XWZl9a8Pg9|=1p2KyNLZ_%9m#ThdXE2ZnO5hAi81hmuU^T(g_)6_t|?d zKGuAcZQZa??Yv-q@}$g!zkg3GKGXHF%5Py)S6QQZFZ6Xs&AMZ?QT6B8em#6c0Ofe|g{YQJ^30U>^S2E$)#$#5C+a|d5-`RaG zUCOU7{_%?@spmlk=RfFq6oqX&`|(;<+RLr4a}Qd}znc-cp?&`Oo4HrYoWJ&TX;~~h z+8Psg=H{96q5XH-YFl#KZygqV{$~Ar<3#rvrlEJW7Jqb;&QmLY*`cp*x6DcDv*3oa zA5~($xj#E3>-yJkr(NB`N9TMaKQ0I|(@hKGe$;(5Gj7K8b8GF_-4EiGHM_ZFz3}3o zb#JC``l5Nt(|yB~`?G)bOgE4Hyh&1Ohu=2Ki8A1HUY*Wnvj1J?;>$92Tzy@UkE1wK z?k#^%@owkyHsyYsOY^%|M{g|kiRi3-G=Ey%T<)8qvU~2hyl+~1$D%gJ!|&UH*<#)K zg)0}=F;6V6y{35jhxp$U_cLC6i*335S0a#kv8rA1AF1O-3!dBDn)0h>t?El{udk1G z9Q+}^@c6_JYnDv-slD_2+vfi#8=W8W-HizG-@$l%>H0hB%@bv=M%5k-KD0tu^HTn! z#5ET)d;054*3`H}DqAZWs-|q{IKeBD6tUKi)&6(t>Tk868Md9q862}x<9iNEyueVp6T@n`cf0A9PQEOHDmHQ#n zgZ~QD1YQ>HQEiUj%~f%s^>R8x)YGD}6^@1qXN4Th{In%&Jg4iKn5Ha9UazC)#6DeC zR3-Ir-lorPK3*%{#~*Gyk(`_X8m{7zd~x1kmekvb2W#8xPJhi-?^|{#%0P1MNzro$ zCoo^!B30jV`D*<~OMMaTMPHXD$gMw=={P$oHG%7(-i^1{v)453sJ| z0+#9Ll`ehRdwbr>O=-QNQg2z357vC1Ug+dhaG$7XMyjyZuCuM%?4e zdlEe3>o1Al-|6PJgHPwh=86K_>)ZKj)ONbrdI_{&mU7z^(|9IaomIndVykqB%*3g7 z)=vU1eor@5aMjzlc+Qi=`1{vyUAHJya6a6&E@6sq#vB7CO`X215BdB5mQBCDw#@3L z%+m7kCz|?q%Km;`Uw`-bnmfkx_Lkl$KU!;g#3m)d)F|NJz3{{TigLdlJvvAA-in)p?+Og`{Svb=Zhym_-bzdhQecdPeO)D4vt ztm6M(ZlC6T!lA?E-@Q`;T?_g{Ooqj+D6g4^Sb zoBKXLPfx4$No4oF7lGI<^HiCM$@2rP-gf%vT5rmhv-(~fU{i^@EYKKnO z%@xyEzGF=Z&{UFF`Ko{Q>4N0;)hd~1Plj$$-8pHw%0l+}ZfXlQU;S!d@#COb?au}A zkJ`+9e|w5pvQAf&RE3`wKG)R4-)y3~fRxdR(`o{hFQd$FH^-eixLEh8yyQ`rdT1hz znA2#Yomq70;3od~oP_hsGGw|o@weaGzEC@E-ceVEOS=}N{Q99fw=Vp&wTj+VfzGtG z8kXDj-W<<5b*pdZrw?exeIL)T&l)4w0Ac%GbPU+k0Qs+~i)-S?=_6_W%FPId7}`O>rJ*P9aR6 z`SeWgaQ#`wHa&VZd;9KZTikYA+I6T^YaguCduMt*M!3)ZUxoSN+dW^~O>VOJ9lo#f z&Fki+`kD3@U*A}w9eI+oEAFt}z843U1?nYl4Rp>(J*mCUcu~ld`7b=$rTA_2`Jg>XmbVUn|IxGjX-J!=XO`&}mLqC2IOd5jPPKlN?zFUB zXNgYuM`PtnzmK^1-}fby>Hq@d_F7(>-hggEAv-qEL^Qpdo=p+8~tAE&sQhj z7h1l4hnL2#gF5d__|J4!{!j1J(e&pN4|dHwY<6wNg+Di#!=wK1GJc((%G+=E)%>r6 zrKK|Kp|#T7?e{$8H561F6__VXsyMJ|N4rntoR)rPQMHTh`m(=1cw5>0+`jJffr$tA z33d9unf~uV=Q@e-?>SdwAQjSH1?J2$Z-xI`*YNLO-5c>Z;7)CY@AN$h&sHl(aChig zbe+$MJ?$AcVZX?x3I?&ajNg_Wi?_{j-@!cZuVq)d|7(T74&Sxf-zb}`cCHJUXnRw?boZ|#O?tlDc0Ku) z5*2=@U9Ku)#_ZYLF*gr$ZuzFZ!Mo01?!Lfn(0S0OPdC(kKYcmQR`;l?hW~?Er(It+ z#a1o7Q}p9Z_wDWZ-=90$y>R5`ivNA z=Dh4G|FwwQYkynppP>B{{lj~ovhryQh-HO(FVQ&rN@ZQhv1Y5S>vO&>kW1H=W0^g5 z;(GqxOP2GT)?EI>VdrY}^z6QK_mnPZ%+}Z>S;}I2ZpIqD>Sqln#HEck#p`NVvzA!5 z#xiN&aGk?@x6@XB?VhKNYTZ*4H*QW9WT~#{h)MU`5kE6)pH{i#ddo<^xyKr-JXJX> zYMw-L336%6nEtvJT+{nsY`3$o*zFCyre-JhO5Hbo$hqj)qG`USx*{RYo7a6_Fjacf zgFhE8xW;XJQOr0$MTOmES<4Hpl3yQggw#*={j*`EBDY@jtLfjOxHJxh1Q_wet~G1w z;i`YpIKAr2Rj=b0HZEP_!FM8c5to##=`Zb%`qs?QF3e=cH0f+BJ{{J@U*`Rv*=G7} zhlIJ6_d$)82O?&dRye#|ZK-SciEm@G_b1K`*ZW)6vRP)lk1)P|XQh&KaGPA4Wtc_f zpHGvMPCuS0q-X3^@lAg}XBfA5x3KS{xqLdgJ0E^={I|8>(Dk5yUa`MkTw1bxvbJM- z-;W9NTtxam>=sJVNww>#w?Q zo$thqdqQ!}z1gz_=4(BeTl?*1qmqjLt3&ONW-hZoX0mSYx{r%j`+l}6)VdbrUbJ-o zBs0(bJ-a_T>Z~z4RsZ1Dg6V&Q^3K$4lCMo#n^Rly*tE)h`2^JrbxyY{?2o?$?l`Ku zmFro$W7j-4eyQyz1m;b;-lBH6=zRRCpZcs;ta?>S?gw?cgHIm++i+7Xy3VLYI#o&Y z(Z>4)kG^->xMT~umFs1vJXe{qcN(L)+w6I(tUH71ox5C?6dox&s_{YS;~W1Vj)>qn zetj&<-3^;`%|3F^`lGU0*Su@1;v<7u*Oy=55X}|$30pFO=SBIt`>_8>e2|AGZ46 zv9&jPGA8|smkRnWI)P=C2&3k&i$A0qwFNJ{d>xh%>e6_^^WLs|;!}8^T$nCbcI_tH z{9d+}etl8-joPzH@7nKp)1h9O(gr?icS7Sko+ZpFtD0{t((n3uFi$z)w5ET>{t{!| zV=w!dSMoV6-g4|&q(#KD$O->^PJH<=^Ug52){AukQ*GDFY7u_({m;C<6=6u=~=3TLx%imwf za`5ZBVX^Zv=e&K}KP_inSnxz;ambY&FC1R3)Q>zEG|etN@Lt*NT)%re3Ku)iJz}}3 zz1~3Y*n%0R=g!VHZ(qG`*QxbS8pEG0J@);BBHu&MJj;edJX7}n7oGJg^f>!x{$yiH% zQg~igOo`(U?~@*7nm1&{zeRdq#g}Cj~_d{ zFY06){ku~je#j$P?dY`*wcl(h!Yk6hq!xBsUWqbTw=}ZeG`Y9QbB@B@z4aCM`|k3p z9-aEeb>WxDTb)*wE2AVcF6^-Do8K#3-Bq@2<===`H~0_ySi~W9^xBCQna@IRpFWhh ztGc=3)2t6`#AD45hU|EBl4+B=wdFdEgR_skeqY_ADRpj7j(S-|oXy$!7g81pnnq3X zRp{HJ@5!vhF9Y{s8X|*{kPLxI1L*TqpBc)L#9s($4$jq35w(_gsYKK2P1aEZ8b# zg2twc%Q>A6D~3B>dLmG3Ce`SupL#*D;3V_Hl~ezD-(MP^^83%>$@RaSAs0M2l(WsK zU85?{fA+y5?p-0y{x9VCP4rl;xZ2InJ=^Bx$np5WB;ynEO_i} zb8e{Q>m|vvg%y?^^>(i_o-PrGcGpm{s%@u#IsvkDwvr1C^%bjCZM+_XU_^|RCFuoVR_!=KoSJynTh zb^Tgdc5~_UIH|HX8_ajz)@_Emn4$PVR&HvUx4i1!)#q!X^H20z^ItDo-I)BjiCd4O zUA8RZ!9=l7iV=OQm-$NT*J}FzxDY0S`wAQ-C(X2zczR@N7_)S>r<&j+ z3Ey)k3O2EpRweLTzP|oPZPKdc2aJ6Fq$nJpzW6kcc+dT&Q)!LI-m^aTvi+I4`{Xt0 ztKT?`mi4h1`yDsC$!@i>rE|W=&6THJzxsUU^IK$~v_)#0rV&f%q(J}qQP;m6SobSD zlKr;u>-^Ne{@vjTlY2}mL|KdV)*QYm*Su`0@%}s085R5n`hm{)$Yz9BceV@fE0H_-z|c0Z-cJ z%K9@0&z8w5?6TdYjl@3a}9_jupGQiMO|n zH_h$hMn~PZ|I^>w99W}sZo9o!>?$u&K>?i(r6h4~u5WS4-G-gVL?-Jmo0+ugr2Wwh zAJdITB&y%U28xL8RuFr`)TFdPVL{20+4pt6Cw?m^`@Z4yp-uPBm+nnZn^$@2%wN3? z&(pZ9iY~3+v2*ROBezALA7Y>TCwZ%r)?ZVdRGrT!jRIsU1=yyjE3~mKwz9jzD)jM* zax||;;Z=EG?#WC0b8mLMS#?@p;nN?{d;d(B+zxO^Fe)do^fU+>pmMS~8nwdg)Pjuo zIRA0KTfOa%xQ$Hz57S30<{l5Nf3r^bznjdX=X2&)SWcY&#G@%uFG;JIErj`U0_U{f zC)?{@&6>mJG`r$w!xLxCCSmJa0zF56c81>mbMa~t7Q0}skdk9My=~X?JK{1ChX0Qp zNDUVK?^a*?DgQ(1qyJOb=N?-eI^{;lq&XfT?HvxM?kwD~*3RpwqUPkKy1(!A9aQAu znP^*j)6paA!KJ4kH@IGLkBt47@`fL)?;ti_xFB%h)Cr4quYTya#mfGl`Z?w6(fyiw zHFErq9o_Tfe%O30k@64Gm9NM;!f&|JVzr);LB6&@or>^659xRbf6sfzAADHal5ypL zsl`(TwNkl1m7l(ydeXm643C`~o(Wu7Y8N`C^y&Vr!}~k`ujc*Fw!VG7%K7=PgZIw} zmJIGvn6lWzdE=}ki|*ealOKG!tUf6qHAHkqVA9j7SCi&ssQAsBe{yY3-OaKx^eQm5?M)D`*r6I%+7-NnI>d-RNlFqImG*RNE!WRdP8OFRynDbicBG*O%2s^59pQQWrGzLBHxoVR4EO^R548eKdq1ko8jQ>sI z+DGdb>L0CNcwKqlTDu?HZR|@sUrl-R?aFkK)?-G@w|oRHX1VgtQBeA&v6Nlq)r$n1 zmD(HMWM&K8Sa5#+4V@ng-4%={+AMn%`0S^s@pj*H|IkVlxP73qhF7L>&gE5I|D!Jd ziJm8K7f>VrIQ36fa`*(V-W9C{F4Kiuf39+t;cSytbz-_TrRv4vK8<;73e`CsYjyA5 z(6TrCak0Jk(eYPa&yOF+7pPKNOr=lvhnfFZ%M;kwzfs%%$0A{U59`upUf&uUIb0^T zRSGnD`5U#&-th5YU%SMn?yF3RnwJD+n`BqZe4MzTxk6>zrw8t`fibsE_1BjE{J0r! zdhB4Z36K4$Ke6fS(fv>V$Xh=6AW&Gg<>8O6&*4h{3N+GmL_HWeH0I`LUhL!%F<_Nq_XWhS0xo6-;AD@86`5EPgn8vW1vj%4Ah=6daC z|1+Ndk^j-Pc=37#OU8~M;g&znCIvS;RhINSZ25T7wR5Jq zKS~0j*VO8H(hX6|ebiWzYTWf9{?Sd7gI5pkKgf9K`N5}8@5m<$Y*6ytRlX$a z0GHCIi47bHAD(Rca`9PXNlL47-4?;5p!3Oz%@4Zc3^yL0XC}PBrQ>vvKg-;t#MKg~ z?&n1A&q=xrj@5&W(yG{Npq zhw{E2yQ2r@S(P1G(yObQ`|69P-x{%^$L$x?}<#SSw@^fU;r;B5Rl%Y-v_cfJtYyDixkuifqW&)a`a+3{!5=j@{B z)W6=3zc-XVdjH3iWB-Z6`GKF>XHU{sw0IVC>(Gs99rnVC9sK-F{regM!sWlt`5&C~ z>!|3Ze*M&Q{|%@8(U;44@Ki)UjQi(G^}v9wrVew8E-IKNPE}dhCvT@B(kZc;Rkk!| z<6$=Wt(|j^FYNE+DEMU}=p|S4VmZH}o_@<6n@NuFjeHG2ZIS@!+wwr>;Djc%3J z->KnK^Z2T063?yV`yM~ea<1>GtZLo2OG|CvM=z!2+isKvytubIf9u1zidP#yoSbuW z;*{SzqIQQ~y}7Km{X$+dZ+Peqk>%O_aSv~JEHTSH_TRMi!=cIjYLkpjAGt5@HRn7& z=ige7Q)}mkJg7Ttug@dzH&{I(z@KetvdTl+*Xn!{zfNtMV@D|J`&@U-rDcp;6C{ufGmS ztjO7a+%ECGbDyW#g!c0I>dK1TH^nE}fsQcjv)#l?fBexu5&(+xVCH@uttOs);&zm1EfxO^L>Sm4dCTQ4qjyH11D-=>$cPp@@;?rY||%_w2ZQ}Fg zME`yJ{JxEI{azV9%a^AYKK-?J^4SHp?aQX}UjOs;`@>V*=egx;4Q$VD&fNU0RU#xp zac8B<^7}QFIjVc5;br%MTm1*7KRV@p;<)$!FV&O#v;V*T!Xw4NG-2ZOxF5eiJp8h< zaq3ZCk5!NMODwY3WO{J_)hYA;{W-0keD-#0>Qo6O%Z2W-IjQeD`po({To_q4atQ2P z|3*{rYxtIF&kwlQol+0Tyxgv#|8Wb~q(7e;8;_cO@AL&15DW4+a&~`~OT2ifwe!JE zoq5VLxV4`~{JgfN^7Do2)wzcv_x}ohweQPzd(O{xDVEecd^#t6c*}RS=POsOb*_6? zenyj3dRyjx>xD*%KU?4bG1=0&`c+Zo!$-FgAMUd<%n{=>+NQPn>hGuN^LhI3 zR!8T_mEHV)z$D&dL+ASaK`Z;&Rtxk0|1;CjzkN&8hgNlYPJaFF{Y{0OtUES*`uI~c5E<~-+njodBHbvyXzHdPiIOrvNavp|G&s_$A_-hO!eoaPRyL}Xw#AG zgS9KqojNk-f0MDZy8O*mBLCIwcy0I0z4b$J%gf-LTbCBPYfP2b)1;PzN~F}(c^s_;J&;PiJ7u%#Sv8v_p%awice5JQ~&Zl!NE>U*BPkb;rwrrw+u2{zw!^Lu5 z=g<7GubZ%JbNV@r8MP9}|6elhZ?9GoG<$p3Gx2#XAIIEXrTSmK-%5JD;rGAx*8cR` zDI9yv-cCQys2uia?vLL0?P7)5UmkzlH2r0;8hhBsjc0enyu6Y-Ipx>ABio%nPty&a z`}X`>vpXvUlH6o|AGrJ7@5m#zxw~4<{^I3W-&eWp!u;@Wc3);}NcgwsL(-h-OXkRI z3OzYz)vZT+-}>!d-d!)Z@3Gs=^#QMH{cFF^b-Ld+ch|D1^VWo=uFJVQ&ptoz#f-!_ zgFaD?tdy)8^PLV2`>h|YEqV6*-EUc`TV*SJjGk{>Ck<|xgBr@&{7lt+)&@NLAB(N8 ziK&j8>Ap)$@qm}dxsazx%h^;4GPi;|k`Fhp`msIer|=emx}66gq4cc0Go(GT)qO#3JMZCNxwqUteLQKPIPdR? zuC2M{axok~4*q_BY-*GL5^jfxiSB=&X6!aP)O)o&wz#rEq2}F0_Cq&zWC=_Pe$GEl zxLf!1kL;-ln(|=@o4WGOJmzoj-BrdNtiFHp36Gnr{!jIIcK6%-?#nUkZ+1=Jb@*K2 zSLNFm*8g~{f7xdJt{2-|?X=d2JbiO`_qv@XHa{QOKD@R6uj0gd>oty`&z85pcC4?lp7ZVQd{v?T?t(7XOZ}p&bC#adZ_reC zm+O9ef6b{iulBx^3*SGtr>DPHUH$+NxTo%;k`w*~Qg z-v0Wzd|pI%`h$hijcvULW-Oo2@s};ABv~W?{EoQ<^S{I zX?}S~>3WUB!OUsb-oK~1Kju$c`tWWAU-JANzB6Sr zTj+I~2RvVNb<*Vfb(<#npE-F^mCj*IFnx79*w(ycmlVVyeyLG z`}OGh=*3*`DuSB*Z%7V-IuTZe7?VG$E1C8WQr8bw@>h| zdj0jovF_w0dQ&D$7HBwndnq^D#zUtr>TbVnc(1Rv*s43I_Dtu_b3ZfOlw$4sZg00- zFzch}=?RDXd{?La|Ghju{M9Ypbro}@xBqf(aQYVouJu7>VB@i7hvn;HALm|wZ!(Xw zQVlc!aUl28+((Cc*c2XZmFU{X5_Bl{<5LG2ajRQ3mO|f`*6rg7IRE!*`+m6!^Ph_j z%Uu-L+Zy_;o9CkF^YEA?r6Z2v6CUMj9_`E!wvdbD zTD3$}nK%f}$kMi7s&@2A>heEZPA)Ed{aC?LE zqic_OFK2nonZY0Ze7;0oc+|<6%hzhQ=iCgc`($1}!{f~Db$cRSc|D!SE-SihkMX`! zZ*TsYBU5U8|n|r+IE~uISj~zu=3q1Jl@Ne;^EA>9>WQ{*)^g0}N zZ^*sz`Y5-qbi;wf&i_L4ZG8W_8NJy5x5@qE&g&7X)ukK9aDUg!7k$+N(i z9Dz4opHKVkJJqjSyG4`R=|aqvV-p@oOr9{wQ-I@AAambU5s~OGH$EmTXPoBcr}O4S zvw(m9moD}Cr|RLpKUr0_fqU8xa|JT4?#fl#xrH#L&1d~? zx%%2rkBzd?`8W4fKfgNt=B}?SZdJUZ^7<%uanZvVPnIB`L#)M%47GT!^1|8^Sn(>z2kB(U&{@T)805Qx zXszPv=6YrMc$*{g)BZ5+{xjR)@G60c)jTrlw^$r!G@P(qYv*#jmT1FC2BN*89|P`1}-v4A-m>WxD-lNA#!1Hb)+s$HrFd=t=3$)t)bU z=-Qj!>aV@e-@; zCt-TQ>i$0If_XCG9!0x1>zN&7W8ym0{h4>7*~dT5x7IvzRuJ#E{5v~ywZ3`0v(Tq4 znc<1{AA7r`*Y0+0;%_QBUb4Bo+v~aDzK@q?OsPNL-0!us-}>`y&24sZ6~8uyJY|wS zx8cs?1EYcuRo`}UzHfiOL$jpQp8v>$y`J-GpEPcH`s=`sqqDuc_$*&~uYCPe-F?}lwYTq7 z{XI8({ZeIyFXtjmJ9Tz4bknR#*Qf!uxWN5vv2UTo?4r%`JVp z{~F7GwSD~mdUxH@Zs7Ht&aJZGgri{NgvMDcjV>ZiR!n@kM+FNt;=PVesSQz0nvj3^ zhw_oLwHF_DFF5YUZ`D$9M8WQ~ZOZv2rgASAodOTytdM1j=DVXfxAKJUshu0PPF;IO zAZ7lM;@=YjKVD1s*sfpmeEG_=t4_Yw-=}bOzD%M2jprX8A2P42bX2+?vGv$0yOYV^ z?}+hPf7O1t+Wv2BP~k+M_iMLtHuGEPtnHd2d%L9kPWAo|JJ;8$uiW92c4Y1K<-ZOb zbY_aqSN$zpT(s(*Z2p$CP}L(EE^HjU)M~PwES|KG>N4 zXMe#ne=WV84~t}vHEj_3v`=~+&u_U>r(F$fcMq|CKHNJ!Mr32GgYjNzuWj++s#l+8 z2tHr^S%=^D=NBgqJ%wE#=B!^{_WfQhb9$Q4@+k#<%feJ%)g~T)`{@7P7v?8hcNP?X zi!0=|OLr0azb;!(d(AeP4X@{&T<1Pt_tM)(D+TT6NfqYr^6|)>`g8Y$b4%f)FW_?1 zfQeU*@ngKy3bCsP>lHu5e~5i_{))f+AMvse*;=XUc|Lcf3o9~|zg#}|IoQ2jK>zvw z7tYK7Y!Pjq@nWiWn6}HwE5{h;PI^+BlkuG2D(7Refr{&t2p0vr7Zn0tya7iR{mN9n zbb5Nkjetw+KRssGy*fMX>dWVj^=B_Ebe`QWYi$;$>vn*{#EoTFNoTsjzPOE9>lM%P z2Nh+iOtQGIFCKPvHyqvZ$ zGse;4`{SFMJgeV!J#XUMlpSYNy+JE+>HXuI?Yo{kZo06y>{4EHFVhmWiYY>2l6svV zcdAAoa@9$nTb{UQ>F<+Ul0tv2IyI{({Hk54M3?3g9-iL$Y&&Xz>5Ni7i?ikGj>qsJsxYR4Hry=Bm5B<-^Ah9&MPK(CxSF$J3pYWL;wQ zEEFxW0z5aqVYXfL;7aF0$H@$VGGBK3H9Pq0u=&kpUzp-Fq4P>-Gp|$Z5v9_fj&?%R zPioKmBVt|#8SGfi&$zZj=NyM-r0ma*+I#1-b_6|9E(?9SVEwvH8gUATl{MAmFHXO7 zGA^|)dRvKh^t0zS(>}G%(Gkmgme%^@N9yg3-M_nUn?BXp7XG_2dfnPBzk+|=n(`-S z4cDHm$+zv`Vbvg*;lp9ldz}C8%l+nU-=uQ{{uh5gyn}f~szl{|+lQz2PrtWy)2?U# zPVfJtz320{*$*#q*T?5;?k~7@bK(22zlZzxe>+-rI#A}v@BROrUu?@szdq;3?w>o; z=LY5k>A$_&n7)^1&$9&uQIDP${p0rIdFSo2u)66`wFC>L1w z>PN@*=K90yE&M{(PKdXB=^eBtAo`%D;@657i`O1J9kymoP1oDS-k%QkvnLwecs^N) z&+2LC)hl5(r;0ucEB8C=bVKq_O_)H3w(-uC~VOD#DHlv zQ{(yCmuC)et+$K*wpt`_b?$cWUklsi0zLO{Gq>RW)0#e?E8hCwhYzp1lMfgB+lZ~( z`y@ZRCTi~PTp6>scbCT&OM=g;5m`@42mN4!a0$K3cHV8FJ-$#u5cd}JT$>m z`HJh4PLB|Qn@ns6Q{C;KEK2&ke2$gjR2li)xzpl9mP#Bs6!vq&(!O~?zk+_6=6xzQ z>;;b(KnpZ@qC1c-)j0E`%#r@IGaSriH+Bl~{e7I;Jz2d+e?qaWbvfsK>;AV}Y%d+H zINwvHB3Mym^?bW{i|+QDdVBu9+VSB-ZF#G(|Np9tyW4Ur-ZWMpK3czGM}q&h(5bnP zf8MqK`8eKr`@7jHlRNYGi`Mm*1O~^Wy)v^L4UpZ?+Ua$oUXy zoZe>t=gIEGL$mWmlCGFspI7^<&3NDM#TWLvpWpDV>h;m$v+3>9>-U)06dYgMDq$L0 zcE5ao!Ks<|eIz!D&heJ*e)>ayo?x3?QA)^vp05A%((>Wij{Kd6u04PM@74B& z!7)E~6dY_S=}g)9Uh()mfj+CJ-JGjgKl1!s{r~56gGcXfAI|&D!<}C9y#3*u;C}z~ z)Ms_}zy8j@^mM9y@9mZKAD`E^MSgsqe%NpBC9ZR=A6G2foxex#&X4)0i>7D2Hr-nu z_ITdUz4GmR(s@(P9js6P6aCP>{&#T2+oj@Mg{Kd0PS{fx_F%uj4}F$<-BwjQ4Ca3A zuzSA$!L17i_Xmc@uThJ)usrJ4p5X8E^61lr%Ibf+X5U`rzbCd(@9FeB?bi>YjW$JU{-+`3segdk-_0-xZ6K{~mNB zb$#ujjqw(H8*aS49w&Nlwu#}FzUZC%|GbrF36rYZzcK7UK zy1VWF9ggR+>*?S4^vKhmHfJC&(T~aEpzfJ=fj27?>KUmJb!(*kCjnSn^^Sh*WSGOsOY zOy^znJ0NApra$8L4{RP??^tYBdNi~?Y zt^=_XuSk}?n3(uqxxe$d;y-1XiZ6wkzrQw@-<_u*x#97-mzSo!*4u4yr||Dp&+p$~ z=W{#r*{J+^-{l=tedor-L@yNu#pU;Eo<9AsIe)IC-oN{E6Q8xqPhr(w5_DWIR`_Sd zL;borH44kjZYQlS2|V*BwME?JY`LGcqTrnG$KO7ley1p3qUb{6!->D&cdq^s#d6H* zU+?up{`>wt6>0wYoH|5Xj#2h*Fqpwe!;k(_32OlonEmx`6Td^{4-Pu{D+@I}c z&VKX!>|d3sm3^~bu^$g@e|>c7WsccX+nFJe(>~w3srSGBdChKt=8rsbyXqgZeJ=W-V_|-QYx}M13LhdK z-P1Ta{i)9WoFnxcUl~5%e`Nnc_aid{4=rEVUhljjJ7AOYG#8tBw{9G`*|~o4l^ZXD z?LT%p?^aOJ7vq_!(WbTW zO|SUz=|0!dZ-J@U>$aQD2~{zv?3&vzKiDhGXqj>SVB)DK<&U=A{mI#r%l3AP*S6H| z16jAWL`EG9=UQ7I`{DKyyU#bAy-KHF`FgYH^^*F^GsUg{uE*CI3Qm}vcdh(q*=-Mp zO}m5=v(28HZ{p&=S$1Jl?#)8hRL#iso|Ct%djECDqW~kTTTTw&UTvhmTJN3O6sMp(hV%gD6 zZ(pqmYki@~e!l3~Cb1hGr-kB=O?bFh<;&-07kky*mThm2OkQ~Ur}@>F%g^!47_NBT zZrnfpw)VeLw&jVr|1e$l<(w=O;3(_owSK;9NdVr&5n_$9iV{HNJBX1ApWY&K9SIynv zV52Ayc4x_%!>0~zkB|PCBO$_wRRRovqnzoqIC>N{pn-ZcJP$^Zn0@J8J{HMkYm3sdtb>(_UA08U4FwPGh;_I-8Z+MOGdyHd0+I?q_)Pj@D?PMECUTW7X%e$|tOTYM{@+qN(14k?O$ zwdO^O!qXhjlMC*C^SJ7HI?Q#N_4V>ctd=>V?JT>0)Nfy|`^NnL_xoJYxt5;~zkE5z zb(?(mn%MH2l2eLe4C>>gUVrzucU?7AYq`(7DQ~vlOan`C#(x+e=W0qFBP>dXR3kRj?a0C-)p~luU7dS+TY5sb;Xp=_abMWHhXiw z=KuetJg<-IKCphXFa3|@+6Nm?9o#JDoSmWfA-W*4AnHS@!SP3rl1x9wKiXAs@#j*L zOTkJ%JQ)J3ygp`Lx-9m;t-r`f?v<$iLX-b(dy`K4ef*&6HmSzpk|F1uN|%73@C6ZT zRW3bm4vI+%4400Udz2}_cm5{ zgm(V@wL0kMuN~sfug!8VM|SHU*{o$h$4fkS%lQNAydDWm-j#H871pjrgCGOrwr%eW-yHZ5aZ$24rmg5=<@2`9bzi!- z91@7$X1m`c?WbhhgvJ<$=087INguA=eotiGpK4ae8B|EJIATemCiRQ-8)=Y9U?^ZsAoqBOC)G~(>ZpVKDU|9^Go z!|DD1v}FpOY<$_c<x!QL9&M)#0 zk5rug+W+Y7)d>@W?^m1WE}pJ$9{*k5LL+X^X73mK|MGFJW`DP1>xR3(mR=NnUf6W8 zhkx1f+q=x)ZOq)I7;Sh;_vF_550AIJ|M%+q$=0i@>h0byUm16~dcR#<-IreZzcznk z9v-kfDiH#8FpuA#wdAt9EA%v(iT=raP-jh#Rh#vMR|qy)pUtF;FZw z9_w(Jt`~c#=lb;jMwcX>zp#`9kMlqa%NjGmgr~Ra-^)t+-K#%;m5brIbJ0w0ZQknWgEko-54?`gC^wAESv`_7;z?h(1a<-*vW3 z)=FfX!}PAeyD%JGJ%BOhwfAqE9~#N@?BqIzGi}LBvLP}hD{(rHKvwZCD?b- zX5rPFs!M*@E<7I=-G2Z7>r(~40@>Fk9D8-DCi^=VTVUYbm`G6z%iX@ar_}rIsw}qe ze3G2W6uM7fqd@ak(YpKBExSXHD!7L}&k1`P9Bpf!8?I`)_xqo@&GmkELYrl5R-f9t z?CY8(Pwhol2^PkDi0`N{pKAF(G;!mc>ci~TAG03af6~0S!un>wp}Uy@OFwDnh5niU zNO*RHly&aY?yFo$`k`HR91cmmam^FvDR?cib8_Iz3Q$s*IweT>GE0WG*iM0)BDb?y zmwY|^J;qg|okp`?VXiWj#1WlMagUVP}$5B>^gk-SURZ+F{szcqg&@n5_m zDnpKcvfSSr9UrbVe_wO)q1@M_`A7a+)~WaGdjG9T`uI9$em?2%uY~jVJXr)DA!~T- z&nvsT%>R}Dvol=g@!zf|O|HsZ&u8;G^#NZNVl2N=N+4oSMPS5+2G`iD+_z8oTRndL zQs&g7wP&wZ@4C*hMv^5sW9eN+*zXU#StbfeU^;hU?U{`*#vh$T? z{O5eko&?Pe`k8EcRP1@1Z0XJJ|A+Zxo9rhYpRC8bW6|zMlNl%a2nQs6@p6(+QK-Fi zJnPkR|0nXECJtX9jPwSf$VRK^zZ@`m7>hGH~jdsJ< zJ$)hjQqfkI>iSD91%Ho?Zu7K z$4~$3Tr~^}efRcp*ur(TRbf|S^?!Bd?-5En|HmL_ z#MoHIx9Q4AZR@Bo+LpffxSaIbc?;!jo#gAX4(~tsaOx?4`EQ#MC&;@0Gj_>yh zQrAAd)~?JRXkYbxt>%}G+j%ScMfzqcg4T%zXa6;Odnk-~`h9_!Gj|{*2S()pevS>I z(@%%!xGfM=RQTszBlbu9iK42Ebkz?7FWXI>tC;4i|LYa1&e_nO-aNH!R!%-Y7c7^bSnH}?mlUDH5-2pWU5ex2l#T=`gBJNo{3`xEvO7B_ zzdm_X`G17&7SY)=dfJ61+UM4EdgkQ3xE!JRRCqOH0`;u`XyNFO-{<#77t}pmdHj&x zZ@DSkev3^>4FQeK->|x!I(gp7s!P%9+i(9XF0@J5nbdu9f$cY6m22$5_qn6x)BsayY*#FKmHu%?{f4bz{`znK^b_1(N?(NPJ(YK3^`J`&*Z`%JdfT$2CQpHaQiP-(dcPt2#_J2oLSdhi|9_ahjxT?Yh1!=} zNv{h$jy%|Of9`C9GqU`aFTEE=ex6onQ{Vgk_3OlQYxI=RYsr4z?~#l1cYbZke|8 zw241Gda-wmvpG#g`Oz$rEu`*rk*p*$ezb{zc+qB*D{n^7E(d+p)+x=0< z*?v1NadX{mu^c{|cb^ky&n@G>{K&Va|4yy<4EyhoFDMHoPqO8+u*uo|`N4;KN48(y z*?+|5=j`W4_Q(EwZ7TLLXx91Kuht8LxBDKN%zsDr*#1vJ5<7lR*zos3t%%aZya`MA z@09rNc)Wjl3;(@(^WNPF0nV&WA3p@|7dk&bM^bLzpY|{uw9?L-o#vC1%CCXM$`YvZy-s5w#u`KLhJ}5A;#mi}S)lu_kooTm?6lz4h&8A4T6luy; zewgfE*t!0ZhS|QI0?vgIY`1jYmw*>t1cb9h%)PNCa`T5z#s1S|xr){VtDKJOdGh$f z?Dd{?y4Uk3Z!6v$6gd4>f$^<+y&s`U2jV0@`=}iIH-+Q)_G5bmEbec-zaaKd%k_9p z^Vna{MIPUrcv!nParfPCe(6H5l&1MVJHz)|?&r=6<*(l!lGg9#yj%6fPyEWA`p2P} zIu`Xm=ft}*6?yDh(`J@(dyl`JpSGO1Zq$rF7p809ezT)G%ChqCQE@dTk^R2E^FmM7 zeqd~0D*eXf9RH(J?qSm3?(B(|`2Wg#YL2(5*^4WxB^}yq^E*G+KUp_>@=3ReK5zDh z{%`u3_gi+>tLgtAK7V*w)%(y6k6-hCPQKq3`^{3}j_~$#&0pJMcO4a-k$d^~9TlNN z9;?lAl@9*)TlM)M*M;o=-`cO_3F?2n`F_S^;mn_fF_Mv!r+mKm{PKx3erwINkc0=#x!bC%;k^V8^AGr9kW$3$rUi>gcpw z!~bn^(r>zdnjc*><-lIWABvUpZ?%3D5uPBCoxq~xQRu*Sc=GKe_u1?VI=ba^U7F7) zYi=*nSoY}Bxq}Mpwq;#j9&sd$=V^P%l6bR?S>U$V6toOUn0qwL!D5PG7Udd6r48*x#rnR`UJ#>)oRo%fnRc@6Y`Z7G-;) z>r_!|=$tdjr!ICBAx^I=*@6Pr8 z-m3CB>gQRTgqXxW3I0s^w&uXvt_jl%8#+_&t|;EVVaw%9A3nb6cY3|;?PISqVx2a% z^`DM7t=K7lUh|4#n&1XK_fu8x3rk;xF_-hy{^I4hTlI}^%{td>k?k_`mxXRLeK=DF zX~fvXisgrF!plqkm*0DNPy6e4`Gwj`PRT~oo�Bvs&0bJ?Hl0Zu~D)82-_9Wz%<| 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

b6 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 { + loadEnv(mode); + + return { + main: { + build: { + rollupOptions: { + external: ["better-sqlite3"], + }, + }, + resolve: { + alias: { + "@main": resolve("src/main"), + "@locales": resolve("src/locales"), + }, + }, + plugins: [externalizeDepsPlugin(), swcPlugin()], + }, + preload: { + plugins: [externalizeDepsPlugin()], + }, + renderer: { + resolve: { + alias: { + "@renderer": resolve("src/renderer/src"), + "@locales": resolve("src/locales"), + }, + }, + plugins: [svgr(), react(), vanillaExtractPlugin()], + }, + }; +}); diff --git a/package.json b/package.json new file mode 100644 index 00000000..65c73c10 --- /dev/null +++ b/package.json @@ -0,0 +1,81 @@ +{ + "name": "hydra", + "version": "1.0.0", + "description": "An Electron application with React and TypeScript", + "main": "./out/main/index.js", + "author": "example.com", + "homepage": "https://electron-vite.org", + "type": "module", + "scripts": { + "format": "prettier --write .", + "lint": "eslint . --ext .js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix", + "typecheck:node": "tsc --noEmit -p tsconfig.node.json --composite false", + "typecheck:web": "tsc --noEmit -p tsconfig.web.json --composite false", + "typecheck": "npm run typecheck:node && npm run typecheck:web", + "start": "electron-vite preview", + "dev": "electron-vite dev", + "build": "npm run typecheck && electron-vite build", + "postinstall": "electron-builder install-app-deps", + "build:unpack": "npm run build && electron-builder --dir", + "build:win": "npm run build && electron-builder --win", + "build:mac": "electron-vite build && electron-builder --mac", + "build:linux": "electron-vite build && electron-builder --linux" + }, + "dependencies": { + "@electron-toolkit/preload": "^3.0.0", + "@electron-toolkit/utils": "^3.0.0", + "@fontsource/fira-mono": "^5.0.13", + "@fontsource/fira-sans": "^5.0.20", + "@primer/octicons-react": "^19.9.0", + "@reduxjs/toolkit": "^2.2.3", + "@sentry/electron": "^4.23.0", + "@sentry/react": "^7.111.0", + "@vanilla-extract/css": "^1.14.2", + "@vanilla-extract/recipes": "^0.5.2", + "axios": "^1.6.8", + "better-sqlite3": "^9.5.0", + "check-disk-space": "^3.4.0", + "classnames": "^2.5.1", + "color.js": "^1.2.0", + "date-fns": "^3.6.0", + "flexsearch": "^0.7.43", + "i18next": "^23.11.2", + "i18next-browser-languagedetector": "^7.2.1", + "jsdom": "^24.0.0", + "lodash-es": "^4.17.21", + "lottie-react": "^2.4.0", + "parse-torrent": "^11.0.16", + "ps-list": "^8.1.1", + "react-i18next": "^14.1.0", + "react-loading-skeleton": "^3.4.0", + "react-redux": "^9.1.1", + "react-router-dom": "^6.22.3", + "tasklist": "^5.0.0", + "typeorm": "^0.3.20", + "winston": "^3.13.0", + "yaml": "^2.4.1" + }, + "devDependencies": { + "@electron-toolkit/eslint-config-prettier": "^2.0.0", + "@electron-toolkit/eslint-config-ts": "^1.0.1", + "@electron-toolkit/tsconfig": "^1.0.1", + "@swc/core": "^1.4.16", + "@types/lodash-es": "^4.17.12", + "@types/node": "^18.19.9", + "@types/react": "^18.2.48", + "@types/react-dom": "^18.2.18", + "@vanilla-extract/vite-plugin": "^4.0.7", + "@vitejs/plugin-react": "^4.2.1", + "electron": "^28.2.0", + "electron-builder": "^24.9.1", + "electron-vite": "^2.0.0", + "eslint": "^8.56.0", + "eslint-plugin-react": "^7.33.2", + "prettier": "^3.2.4", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "typescript": "^5.3.3", + "vite": "^5.0.12", + "vite-plugin-svgr": "^4.2.0" + } +} diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 00000000..6cee730a --- /dev/null +++ b/requirements.txt @@ -0,0 +1,5 @@ +libtorrent +cx_Freeze +cx_Logging; sys_platform == 'win32' +lief; sys_platform == 'win32' +pywin32; sys_platform == 'win32' diff --git a/resources/icon.png b/resources/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..cf9e8b2c87b5c18ac0b26913af6fd3ed00ec3bfb GIT binary patch literal 35949 zcmeAS@N?(olHy`uVBq!ia0y~yU}6Aa4mJh`hA$OYelaj8FnGE+hE&A8naf%da$Nk_ ze%^zzUAsj+IKp%)3d_qi{WPaAExi&Q6?NzCUD>WJ83mpSJ9h8({#O4k=+}CdvU|6; z@6IpZU+w3Y@%ijr>;2y+m6zW;Bg>tk;=lw!cJ2or6)Qh$@N8i50HXse4d#rT6Bt0~ zhXSJ-gI&c%%M>96Mi5G1dhozDU{i|c|J&OayVn2vlgE>NX2r$Dd$%0f5Ebv%-=TE> z?;`ik3em#{^=`}onOHOFfcAb3f8A*v>2>SZ`0I-OPe1>6t-r2+oK3fw?!n70o%8H( z?f`dDTzkXONA0Q)*`4@iXy{FEeH6^;ur8)Gc<+{|RfoG?ZCEhpw8my- zQ1B`+eiqu0q^lG0Du1IMFYn#DlY1Jaq-S1NXZZQ)Y4@)$u3uh>X|IabUBRcYZX?Ib zUXVvT4tR6eY>3!+CF|fNiNN`~cXyY+=hl}DUvl`vEf$6JbBiRE|0qQr>T+W+s`~8u zef0$kK;lZ`bZPn(D&g;Dy{?%;1e<{h4J3{b0OOGTIC=E<#ST3~T z!M>|qnqu}o-?nXKikr-ka$Yj#&UyY%o%>st-%IbA4ROa27M&SFf{iEL`Py>K3a6Y} zSXsj)Fk^Lr=<2IV{C{tqTD)umSYZRp7vYGEjSRWSf!&-sJq|AWl@qPMRh}}i zRb%Af(Ykb;>*tmH-nW_slIjru>I-hL*~IXduQm7ebI!$PwM+{0f9Y=cvi(5NG2sRy zH;9Gz)e>4u_ljPNOPkMYP|Eb-`R;%78C5>Lz1_JOl2kqzFl|qC%{N}pYmmw`VQ0d@ zii`7poLpYF?!)&D*7F`t0%x#4^BdlXRLB`Gx_)x5_50bq-7ke28e&|%4rWdD|I2!Y zt@|S+BTi`GW7?gt@e3dS-EZxE+x)VVR6q8sF zH$QLY^RACORTw#Vxa1O8?Mja}++YW%0|w3tBSvn64*?M#{OSD%UvfJ1EqEZW>mZ-b z-|`QXoElg>4n%WAG}g5rcG_3)tYXeAhCh+F>l=*O9qvO4SCt37ENjHR6g<1h=;zJw z&*o~rF8{ZW$8JwbRsx4Y0b}Fz4H2g-UyC>{S7DgRE!HFc*Kd%}g&JfWTiv4*GV@C|d~t{Rcc0qwL@?{6OShYQ&W>T z!-})ruozT%P{PE0_^{I}i(B1?IT^zLT32!2muerbrnwU# zd4hp6LroyjwNshhImLFK+U2PXEKj)R@n}b7yy{GXCOQSi$D9!csx~G|mWCalCEU<( z=ipAk#=lY4i(p>!IN-_hXM*}4hZBst_e|9pESs9zqZ<0RmN@A`BWXgzXO4)*#P-8Z zyRu$71~W}CPQTbASSR>9(bYzGZh$v5NvJ$uQr)nQf2*lS+aVQ|9LZcqHJ0PwpkZ;UcYUi@crgEa@4vr_6_r>iNsA5R}{_fz+*xdzxpK$KYyV1wuabPQp z+>hurH=Uig$8Wm6HV9M<-Vr?DQGM=5v5*4ecfk`A_A`9CzMB8%mHZ`pYyR=(w8J&uolEvw8?!o;8M@y*A>%ty0tV};$U)#UnROp;rKhJJX z&*^mdam&>2ZTmUT1{N8Wgrm1UG%G%RTe)#I!-h}uZCn0Wa_;DNc$alGa7m^2kskT` zsg84Q>|&L6<2ihIwt4I|b!#O?p$i@k3yl`sWl?Ys_+T#fAiFm<*pEr&K?>7T`?rmA zM76DVPCs$?{{AxF)%8CmH~BTVF{vcjF@-(2eK=9^{vK_k-Qa@UjY0K{xs96((?0J7 zFJBaTOjGT?&A3L^gduTt*e+W>HU}n^5Asa24;^;$dgaH!#N54nDz4=`oVc22yl{>qyn;?HrL@JSPY*fjE6 zmpa~?wbkczV%YU_J7nbYZvBvu;QS%QSnb+)&yra{K%_>{K`Xxb*vCl?H#tPIud=a9 zo0eIuDX#wh;N#uh6*cem;%sWOv_(X;>zGc29Xj&zlJ%4S2YaO>z8rnNqwv=h=eip+ zSUe6GFik&n*eNJ`9wP^j&Zow!=Xc%SVDO@Y#lu0o(WjMb@iYFvC0nPuEiZq!Vd{6= zeU*#fF8pui{jbh!Py8a5P1E(dEjoo?zj}YA?`_1L?fvVv<+w1ZB-k)|x2XPK=zLqL z*8cl7P(UcvuG#P}qsHQk2b0Qz)&`qDs+0pM=(<(ff)iLA zvgb!VT0D)#!(na%>ok47*4*wd!bhS(g?a1$hNGX(>9V|14De)9S%N*|mS$8Gs3aVG0u&S(P5)jd0=Uh^f zm-5ArN#%ncQRGo|bet~v%d&HISop+SCUaN= z+*}noE#^9i9O)Dm+xE>~z0!3S!;=%C7X3%FZa)9A;szt8F#;J|26%epY4j} z{|+4Vn5@11lW1|6(IOd!Ruu;(Gp4X^)AtWAy#4*ZSNRf)fP*K8#f2!ScrG!DvlpE>^8zWxHbKN!b*JR{4A$dn! ztS0}yuBeIw(>a9+M(zw!ywVHbRJ~h%H>SwI|LOVt4&N@NPI+XtIa^)q+sm~}mUggs z9Oz_O^TX&*!U_H?PKSVrD;u`X6h6E#TS%d?TtMU6E?zFP5bZz8?H^Apv{|=7JXbBKL;*SWbm!vBnEc-!6y4o_Hg4)i%ED*o406M8At(6Hda zY=$pWnI4NOFbWmSIN)xard;>wiC0})=-Qs={&L!xy#iBnt~1JCS-bqnshixwQ=1la zuy{NOtBCLr+HK6B>OJkt{=(mu&)-xWp3or8SrWZhEO3$AR_TMS7nmn}|G&=UCZ~cm zQ%KI~Bb+xZtCw|6krGm1R2Qny58Sds+B~o3=Xbq-#>@w#82t7ymH0Aou_PVqZuje+ zrlrwX+b#a^`^3Xjx43l*E%ogVo4ibG=j2$1P12x}=s_IQ#H&m{{Fx@`MmHV_T=es_ zHiH!Bga&C2m6H<~b&vT6z52PmasQ(SuR^_|7P}ZeI_CQP=;jA%E?6OXbkeIE|8l3_pULp#Or%M2i)s^lmGyh83&xy# zCOiBQ(fn}nOQhEnvtH@$yPsvOzqqelyub62if7Ze;%C~XyG!5cq^KWgmNuXAMPwoa zr$u|i{Hywx4>m{p?>7b&C{ymfdR~6RQt^T|=Y$4ZrhgX~Kb|}_`_0K5d;2f9rPlo1 zx_{C&jlfGjGcV@6sYosV^x^*Q490JIF$~!*Ek)K`o((KL$_bqvCkkI&=u>|0!%)H3 zPx?)3F8?*@Wql>@gAUt0rQAWv3N>qQt>$z8 zl@u+cz<5ANF!0rdg|h!OBu}w4l(TWpnBed(%QWEG<8@vW=ic5e{<->Vz$GiKQ(>>1 zLw-K;cE9`Q>c0b@Qn%e~Sk5mm@oaLRM+3`0?*>kW_gq3B1el`Am`+THDg3fd$1lgE z#9~s~xg?FF+3J1CrfTJ<$C6dhTY1?fNkV zw>X+-o4OZl7W4bOKlfEi&V0MGng3qSV5ynOAj}ZI@0ZN(c zF9&Pq+}z6T{{M&U@-mmWC&qq{j%*9(mE;m}>B_lT+Hbnal;h{?Ywn$8Z%cpI7%zU< zvz3>R_2@B`2aYT=7%DCtO?!@c_Tf>#83L-eN()|0J@E7IZ^QSS-=(=6 znBj5Y3d;rMYV)}ne>e?9y5qEG$%yH`m%$7RERE?WO? zGwZaPtK#a;+g`q!-Rp7SI)?${hppP@K317F_ONmEn{SY9z1m%DySs zzfnld=&&w?vy<7L+{rv3Fv6sPqFBj+iXY`n^KR@mM_H*+OH^te0d~mGvZ0^klmYP;j z2HSZ_X1Tx6gxoUuE35OpS$ejde)w>k|6lcOd4`vAm+V_r`&W09nD)Az^NW9fOMH2~ z_T!(E!Vv9^AniL&$t*rE+%a8eX0Da3Z-7A1^E0h2D}%F>KD|21eS6iv?!<*V1it;+ zt-Us+-S0&B?!ISwks2PxMrI!rLCN4nQt=9v4{Z*6Qch0P@fK6@nJUE@wA9Jzc6ip2 z4r%dnz1Tx{Pfss+e#!ODUX}a$51n2xZa=JjbDy%^is0~KnP_$2BYly^Cfk#lg+7#l zvfy8?;u@6)t}LtSewyCX4-ER;0jbf;vh$9!sXRCfO4FaOKE2^_fSc1q%8E&onaQO0 z&99TfGrmXidsHS#aZWgp&E&&Sp+13uvqGeCg<;Zyr%Nwt+#I zL4L;x870mN>Bb{3FD*R!!*j!rpP5p#WaM=^LHV%3m|+jQM+1w^l!iIA3h4?NhLx-e z>zSTRW$0z8nahyQQ1h4X!4J;^&72+^7jKH)ohj9*!#2gW(M0G&DJWPVvWGdRK-&_T zBAavrwy|IGI53^lfbqlA)#o=(ZV(rkP|6TwWRW}1W|rIG$;_q?7v10nNgwJyr8u!+ zy`aauueDeHrZOx#-nrQ3i?(}z!a4QWkFTC`KQ$AX)L<@{!1Ta3d~&iPqr93x$WE?P zrN2Xj8z*E2^VlB^2xbtO+#n6gMang0zDz0!I*gG58r;mGzIK04>olBUyMUDDCpCx* zcZg|EdmHM|m2-2dd!RctiUMrgPqaRDxyyyZ0qmq>u<)fo+y{%{K3Vj#;~twsimLL2ScW* zRkeLGsi!sjqtX~s)EeBF_Bl0hHmr}y?3>I|)8nwnB=cg%i-IE^;{KIS*6=Rq>2lIn zIKXm%TTiLofk{QcvXO~bYGK9f{wW_fm^Bz_aqR`grv8o&8759pb8m^)f-_7@PRw(b z6wGGUSiI=MVNi&E;6Cxevw`KFuY&i+M=Sn)-F|AuygR$wCFfc{xHnb%RIY{!qrb`l zmIK1;rIOVcg)X=_yly&R%l$0*@r=M(zZT43u>l2y|L&xo=`0=&#*N>NQd|x%JgnH- z6!PZk>FG0Wu4G;}-)g1O@-`NmNesda{d;nFX0doUXg416owd-Td)le9eCy&`@3Z|| zwPyJQRMW&6|7Tpx+01ZqQ%Y!_{qpMY7#{9mP~&%=O9N+vdaUj-FD8`-0^m;hRQ-J+ z-wJasyXpLot7TlcDVfXj01K#KeV}B(BBa20U2w%uXZsYbkcgd!kJkQvaHa3<EPFsDRQ}FMGVGia8q}Dg(i!zy+LGQapP%unIZ4RCm{E-( zZJ$+7FN?>4l^|0K+#7=R+2`(_!63{a&isApyG6%3Kp9jy>`+UGpgP~8<9*F9KH2)c zssB@c<;6uo)hH8}PAT4h7Z?5e8T-%r)$9N7-{*_p?q2Ty@yEMZo1Nv?zy1CHf8Y1( z`{nQM>uopBe{^x~?Xtgt52Qi1NrZ|k?1(Hr;y+R7<0Q4#JG=Gg+itGiUTa(3HGNyX z{pP>7zkRmjGCQNkemgGLUDXsSJ zR8{Rs>1VrIR$i8Pblb=8UF_bb*XsVa_?mZ?e$&aDXWf1K`T5zJF2|At7}suQ_&r_k zSlh$HC12xKmdiiU2o4L6zUpSg{Y_1CN98vjy|&gzw>pJaon84ET9m(*%v!_3IpJUP z9}m$P!Y4PSI9@sv`9NH?ODWG*T=j~V-gUj#{CE4( zz@7f_PYZKr8%f?y_X)n%y&>W7F^y}xdY74<6Y_qf<@x4y%7YoYiW9<AwXZ_TEs++V*opfWd#v_gZ_msrx9;pL;k!?Cm$VJPRzmv$H}_INIdv ziW#g{vG1)}`tS3?|Ldy5vXjCV)G>?vUoqEcR;e?aV#(2>)Y_fzYz0DAZrXG& z)+y5dgPP<7Qv;Ltss~sORIkrnqTDU1fA2N>zxn)ikq7;Y=N!1>zZ+Dy9+$m%IG!b? z`_63keKn`T|CanKZ+YF$d$cjtd&-Jqo}c8RdggaX6h78^soyGp=*_y=DO;2#t*t+J zHcI35Sp^%(O>ftyJb3!~c^XHjp@c^RXG5dG**9MQRyTl?4H*mm zY&xm_r{t%d!>^j3IroK^c)Z+jdG~bvM5oPar|P`Q|4CG4T?x6S|M!{poEy7bBkvbI zO1Ui->2DnQUTHmBU+y2~>wYrdw|tO%9}Oy*K1Cn4kNUD-?hj{>)j#&Drwd=o$q6&m zz6g5Gh=LEHIxh3aj2G19^Ub`h`w#d!m1s^|5JXLstv#}^>f!ONH|HGG@|K2!F zZP~@BwP7uK@omhfr$2l)^YXIJ?#36&2Ur~B&HFRHJ`=8=^hMG~a{U^YX^T|z_r=-N zGR;ieQfph?7M}m_?;lB}xP49gLs)y%t}^}q|M%?v#Ya0bS6fI}Cpx+GN?u<2_^A{_ z>77jh`lSJSx0805IPO$<9WW<1N{FFz>9Otim5V1X@=CO=|0FRv%H;6j==cG+2lN^&M{tp+j{Y|wbiXs=8ZMGil(1r zjtTQRE%Iirw|L?ANj3YwJU{$z-`m}rzbSe%DRdrq-J)s?|WxS zNUiNY%k%n%vyAHbUv@?(c1>ntRhYjaHun>k!#n5D(@}d^R@Hv(T_uyv&hK*Ll<28n z<(#SCdsUb(-dAC*S7Xbc#B%egf~eX38uKN=>~n1D|NQvcbD%4A!gUst^PsG>dEIsE z#Z&EtK0Wxqz|VGi->YXcjd#?2Vp%uWCUNyVb^e;o?=`0-xoxvwvTcdOzZG6dAO6>S zGpdL_K5Sp)2C59QxV z_RDN4&U-HxEjaNy|KG_S6+bWac*t~lmbvelXXx>-|A+&hvCw3#f_P@%?Xa}~?AO;E zTH4Gm`|9{?DRs~Ja*|vprd?`UcH{lO2fs>n{wy+AalD%KGwZtRNt5VvVDe$$X?Wo$Zge$vjc+u|wDk|B z7(BTkSa~Dfsze~Y{C!(a?V^bXq?wBNT5LX~W@ql&^V5gfZQ0`Mys|x;tIJ+@dB(|a zons(r`1p8u*8ajb8EeTr)}c| z&LGV2IZk@_#FJi+gx=nIeM>&~{Lh(pcjrXcJ>g$*jn(g4&FAOyd>!PvBD+LfpDj8% z;o`yIw>>I~^S`W@vFs`S{Y|RKuX)-b+aP8qG3lyFo`M^ETAOoC9UrOqV`qrT0 z7L+w3&5y~4;Y?-h8@H+Z^J;G&zV9*lrFG>C`MY1(_1fE|U(VXMr=h{-&C`YY{PkD; zkDZg*wx?-V&6AF|3-#mO*1JvrcfRzxdp4m2rUV6_@Ewyh{|mjflBim;!sq?zy0pq4r<3HQIQJ-ih+F2f zjlFJ~(ou!~Wy?<YLu2 z{@!Fa=T{sT&Nw%4HdL-_z3Z{0DPpSrFDbL9`uw$)22a17lP&wb>_9okjMT3G*M1i7 z5RmHXUdUdcX(Pj*7gPSz^+M3TaB!1(dqmfpn-jOE<(}~Dbi1*0Z}rFDD+ISa-jewY z)IOEDelSnu(}(Fys+_^gx2>+7{@~=_>TQp+`*Us_@QUM`_+{U*ck>=?pBpJJ)y192 zp2J^fx#-$mwas!y+zYazy7^ZADqZfE#`5XvnpExcZ&sW+i*HS8*t0cDF;D34ZH}2NGamCLG9~oA7RVG?+1zv?;X=S&L9dzT zWQ~_6U%z9yt9HY}?*bEEwdc$I+LV7kRIT)JYV^u06D>BUPd`4jXR4{-S~cI$dp|cU zDEGhnl|81^SLUsISBhxvO|F~X(=Wd5@@&W}X){e>N|5kMmQ_7Fh4ZY*p6Wm4??IDP z*F1%HuwTD%`q9LDLQ6fnbC!DDl>7H7Km10wx_?31_q;iGH=q9Yp}yeo=F^9>R&s7g zZ(LI$|CH-Y-g{?0naM5+Zg(nnB_#?i;GUh>JA*-@?UIH2q}c7VOkBTP|9@+|Ecx~n z&tt4E{&JoUc2D>JJfc7U-`re(dAlPw@2;2s5#-?Y%B!L~b0ufN=Qol*nU_yRx8;?~ zd`evEar)Y>?Yu^u8@g{~GO026Ij=syG38Q`+|GGd|9xst|NNuy&b8(Id#`Uf6}U}? z>GV|hTQ-$*?bIrl>t}oW<=xKO{eI8RzLsgT7>ak*Cq>_Q;T^UiQCTGOB3IR+ZODUxlZ{2%Yo80Z@;PRx7b?$YW?bEzj}?AZ+vrmy<+<1%QgKDUv6v^3|Pm+ zbZV;mCY{JRd=6sM=H1!GtM0t**BRU8OVtkaMH+7?z2veyo_%wv!s}_L%HFa??pbq{ zPba$R>)|i!D=*!W|H>fDAbgiK=vKJbpDa_&2}YZX)ou2a24@GqvYpc~CrpFCw(`g6 z{c|(R_2akIUYhRzr^sQ-`p8!cVloUeIxcNkFK6E-Dch@ib?udnoGza}tp9fP`mRY0 zQ~%a&2vuFWvyDNR;d;Tg+upbCR0iZ9P}sezo_k5fsT*vipyuV-+?xlAIZrJAW6odq z^UHgk$wzC{|IK+cy?y^2zL%%3rM==&@tEqxdGO3R*@CAles@c1vSx4a$QLU3ek%3$ z>W1If*Gb9<-gR|r;B4@G*KPH;zID#KTOR%EN&ytjxBzsC(4sJbn=`Jue+uAuF~x3?YZy}W$t zmU~*4CbQV=s}}!k_quO(`nd{ivEZI=&W73g&1+_y4c$6xnZ~sG|GIs-w^pp=Jvz_z zfGB@m<&D$M@pAtrv0S*qapl)X^%Y@3cTDnl%FfST{p?0}=ppYNnTC{WVcsxbEjxd%nNhj`ap^&Q2F9INBV)?EBM&`j`Kjyk)Ul z5zMc8yF4JPBJY0OnfEKp`WhxV^NWdQ-VmoC}Vk(#h`Od5+X>7+0%keq4AYqug;T=jN&NZGc;9|mvYcSS_{FWkv_ zqRj5*--#;=HUu;6EqY>b==$2j55HzBE_b@rqpGl;;Ynyimu%E#scg1Ci4IY>@bQxsd8K}yu_+=UaSQ{Fag z(hWHJq{P8;P4~B14STpUtg_Y^@!kBYvU`5UF;I1`*@81{VtxWZ+9(h7Ti@c zbJDeNm#9@*URy7pTpRt#&iu!-1f~Rofa-TfPxKS4Kl)z{`}1S(S{3cHpE;gr1dCN> zUv>Mm=DoDkpUv+4g$XxgEmu8-WGO~(#rOy2e4(}(?qzouMV_wqa= zQ|_{}4oy?CmNWZh-Q)qyvn()wpFK+{y39n*(5o^bhG#{Om*)u<2hPcci&!*+7M=Yv z)9c(iIqNRTxmQ;8YFaKik;(FBk&9y^TW`RIL}iy=!NV8oR2ZlD{|WDtF}$KbSJHVw z()#m)3o48r-#W-FxUHzwP_}yF^fu=<#n1%5rGh8lH`f>}k_0uJ3}vS7VVSnRfouNP zpi6l&#$456XTmQ9J+Wh&*)8IFkd1euQZ=7*^MugzpF00Ly%s!XuI-ttk9_#IHCy8Pj>bvTlzy|!V7QTC1$GDZ{A&Y zaB0D`oY1DHY=KQvG;`xIX_s!fKlR4rR=Dtjfb8{U6>2jeS16dolGTmrK9w?Y#c;a&|{f+%gsT_-bmb zF6%mVh3H>gW;q=5|ZPz`Ph!?pPRa_EH{Zd z#}V<@yS`=p)5Z+9I|@DwJquPmaK2Y~a<`tS_1^CX^5tGnZ% zkiGHIif>z^rdsJGb^l??{Mm4X_0qAsPkb19l7IU7_qO#qoRVSm+I#l*o8US3_xpQ# zPb}s)`(fze=5JE_GIOp2)VX+`BxfTraLghTrG6 zeq$fEnDeAuQR#qXQ@VPjtXXC-?06xTX`RjYNHtWO)p|>oYMoZe#nQ@X^Ps){a(_O( zJf~s3qiX8ggY}O^zJHQFdPS#Bs$Zg4;NM-jyVuvX&yN?`y*JjrlIilT)w!J;U-vMbWziAi<}%MsoBio~ zznE|F?-NpUZtOa`?LdF@FP?*$Uh1yVTiq7AWljC}toEAh^Y8D?pIY3JoHDJH!F&Ht zu20pj#XStd499eh!fm1A_L=UOoSJN=5LOGNw6<1qbg=Tv=d{Rrh~!kpJyv ze#gGOygX%#h^3!G@+ub#I5qf>E-pa@&z+&OWA~$ZK~Hhuva_WVBbo^ zlgrEn`=pH3cIm}0HCd8c$rsJ*9?XoU*%4OZk0M!_I8;F^Xpda#G(ihTR$0* zyh~>`tgW5%uKdTOiapJ%YWE-dt$HEIXgKUUGLJ^Tcq5Pg)K~cZdeGUfONy!yuEMaoxF9&Q>tO zQ8#+-#huLSH_t%}f&f>!mQ+@O&*8$c&TXpy*wd!s<(E7}xQ6}}&LXU2-j`=pNhtK)7PWt{`YqRFa7H3;B3fVZz9Yf{z32lUiKobdD8aF z>SAs7lwM{Htjre=I=kNG_O~Ak@@(7LfBrd{+~PC0$(H+>^_yR#IbFxA&3{L(GBQA&@D*ApbRmYg=BfU9@E8<{NVVUVeI3dPXqe z_hX$>$&~Yky(}RdCsx~4K3$$PDWc71{wk%flD%0>3B4T$4iqh|ZR_65c8cXdWXk_% z+dV!{+m>XkWwzQ|J;tsm!qw~SevT6-Yd?MHm$cvKobx31|F+EF4YQv{$v%3~-J81H z^Z3v1DQ$IGzsq#~ZR!U#1bW-}+)p()>^@xk?+IsH=-QNU_k+7ZCH+C!N&Dk!Z#R1$ z6|1=?oL*jBzkzGDxs-ity$TbVk^I$c^Atu(~LE|Pp0sOxa<$L#&5;Xl>H{D zl(E;pe-+x3f9b-ybJJOJmz{H9YR&5Ee}C`b3ahO(oV~%vPO%)&jQIc3Bz)>Bjo+T- zOXp4d|3S7d_m8uux8Q_7e{(c0Zkzk*+QRLIljn*XsqQW|`=0iBUr|rPl)uwH-Pbzi zy8r(YmFJo#c5;2|IXT(ZDa$^cX~D6Ric{Y>uD`Q<{UrWrOksyogjqvZ<@|o4pIR%s zvH175TXO%VAL6%s)RyaczzsA}!D61h&?VVzIp2<|p4R;=(`5GlJ-O=slpS}i%K0Wo zuQm)Tda+nZjX`h6hbTVgTaae@>!uYp+qwV0xR}fT&xSAT%jT%H91{;uPxJX6BhhoG zgk{szUjm`~egtW*ySo32`;S|uUQzktN4;n9+(-v(PPGEY_wA(psX?fHR zmzC-_tJHosXZ}}JSgv*I_rDCoxBHcA#O*EDm4B{Ki`;X3j`IQgsFIpZUT=eK>+k=s z=e?&NC=|N?Pt?mrGBJC(_VfM;_4F1LX4rn8S@xN})0-B~x5o}1)t#vPYeRDSlhT5z z|Np+ezM=Au#R)|_6QKgN#%;#W72-Cflai0Jhrgx@oAPV zG7QJ=f4^SdRr70lB!lQ=&{7@;Sk1Hj--h7yCu>)3^Pj8T9G~nfJcWDd?h@BYJd#r^ z-PNXK)!kn1UwndHdUAsplYH5$rah)tzpecI{jcfGX~OEtg}c6Z&1er@-SoU)UNcj( z%9>G)L2s9JlUBIn&b;|rUyn^a*bwq{a(n$13BxHfT-7G6b^5gK|CPSCyJ|Nma=uWU zusf=B%FiFdOPBqrt?ylVylU$&_3!KA4*pQ*U!C-Y!_wDo%l+fe|CFG*batPTGv|`Cli9!4$u4sSZ+u5L_^Yybqt%O(JrP?ctmL~1nWn@wH=EgSvzm}(_gdP-GsrKlq_HC#Aw%pIa zE2JK1G+J~{Uhp?&tFTJ#*YAJd_b_XRxU|aIPTk>}M8?Y7BkGA>S_KU5h!f z$gKKVw|4X7v{O0NKbCWCsTVkL`-i9NR^P|RA029B{wDDGIcN>MPWI})9haWhPFTDp z>e2b+DOY#i3N~Wg;C|x3{L_XDi(*!E^{$C!_J4Obcw*HaHSdc_+uG~r9O*3WS1mbO zbbHGG&F(Q0OQe;grMwoLJaKW`X04Dj*UOo<%(N5c3|bQ6*cw=x_2}c>-Cj{$_k0^T z8@S&KtV~c>XI^#VmLs#kHm|o+8@uc`XF+?q1sZ$o-FlDQbLE!#bnuu;f=Q#--rpMg z&wYA2m!b3WQs>j1!Bak*HoMoUd!;Wdyy(SaP;TDCcWF||sWJ6@c&cIu(1e}A`IY|C6c>Dq0VC_iu8 zPrupLy!qa|U9sSH#SDfW61CSwS5Mu(t#?JFtiSx7^1_yL@AazQSgg3QS=>lmbJgz6 zr`r#2th*5qV_)gCo!?A_F5y=p?R!X-E323swS+c>7REZa^a$&BhttF zj?McS^I$cLx8o5O2gXSgg)GG)`q;xZPPPBrp)7rEwTG>n^3y==Z*O=l6+G8_YTo~P zxb4BqX7;Ms4YHsWubXrtFP3b%HBfeFrmf?bxMMyOzAt*8dS-?7o!H{E#Lp~SCtoWm zKh&m@z|eT3Q)uyFo2^?ljsEJdXRJB9WzG~W&i^~yct89(nH+!k$(D~sj0IA+PRJhj zn!q3{zCt$XzJ99novUZZH3L;pyp;t?9}_1?-J- zuj|-##CFHV+to;HwtJTn{ydi{Qdu!uHN+?FAEOf z^3Jc|od9jpU8+zPzPr1K^>sTxXpMcz?*wO%xv<)4cU{3_wqs^%(!-zUHXS?cuIT#h zjo0C*&)M}dzkJ`$NL6hYY2<8>&TFdK`g%bK`_`QJYYZMj4^~cFoMRdC>g&#TAC|7@ zulcmU^xvF3`5X_XcS;MEiXCV$T6#xxS@f@|;Z0|c`v$!F{d9Bsj0BIE+Iw{TyrADdye;dvmbe-Zf zU6NrY=LgZ>3-WBI3aTxC+{yUY@YG=YFfPLaGzBCb(ef~4B?MVY;Xr*MB|=M8+M#NCkkEB+eO#U9YCYQ(%#_f$Sl<%zfo zU2nAd)ZJylv0p?Y8$NaKd$M|;#a7!RxgR$t3mHsuIL9?LVBhg{FTL885)-CL9=dE@ zo^(-DnB=eoJ>v+NBo7_PSyI}5Lf=cIFMfL&E@)X9y!hvi&JX=!zAugbn`JQY{W`Ey!^?n2%#hJQVue_F zW%iXr?Q?f)m{xxLqPc8KCa0y=jT|vkHy)49Dwk<3tc2p_-N5*p}$8f{odZloBeIOo68QZlyA;VdddREbu}fRy4pTogH1#? z&FA*=|35T?Gz>XoH}br0;|aSIv}7)WFvHt3Jh_3ZlGUHA4s}1dT&Bi&?cRU6rCxJ0 z1de*m5RiSYf9b-b`Ik0K)!tC{!Qt-Pn-f@U8XdlyzJBoheZF}}yawBp-C3qnUfw#Z z*KN+^ANhNUjlyKknG8FAHhGBZtZZAF1?ttQZ_5juYV9j-o*A@dwrTkG|8FlZPrQBQ zSgc68t2?2x0I+xcw^rhIcg z2VNYyxNgVIX`aFxil_bCZ~RSpQ4?na=Q~DAxrjc_u&t7Ft#;&Yt$9@P@?a*2jSLe|r$Il-pPf)3?QoSCe6wY_7V5{ocDUxT8y|V8r_uIa1M}@(e ztBITKg$lG8Et#y{XKwN`^vV7%2wI@D|Z4dZ7GHN%>~Wzl{6Xeid=Zi zH*m|+sG|litKTi3|G+6@#l^%uSK~kB+`N!-B;)Sivv2MQhWE)`ygQHA^FT1?iLm&a zpH?Ro+rMq&UdSG@L~g0(?XA*9p=+1PY+gUrHHAw`L4X zJ{BT%9Xe<171bpJn&2?3Yul#x+q3-1s-V!D&kxz{Elj)am%3Lj@sy0^g^U{>w!XQ! zYTNS~qn}qyS)bRC^Wr1Rr>pC_gJi9=dXvBE{}tSKZTGo7{CU@8Kr0`5<6Z7qaWCRI z(CVbdpx2VSe)W=>#-LHX37d9ll~o-t(|L8<-F20>vZ{5o|IBr(*P6__u!i$p+`c8d zZKWqQm|#50Q8ycSYl|DVQEXW~FFNrB(6L-um z@9-xp@)z^mEle`-dNPZEZVxG3!!@ir4J0>Gt`0DT}x{q<`8pE}3bx z@a7FpFPS@AkA`bn^e(E}&*yT>rgCbu?yJkv%jfP{=4mM*4|3(hR=+7~YjedM_|64v z)OP1fPMhwh6|{R6TXVZo={benyH2n;YlR;;oqoP#YpSx)hcKofwun=Vt7p7nm@t=N zUS3r8Kl!^q*u!@0JhXDT@pWN)VFuePF&CD(-2QeVe*L~8|7^BDP0rb0P<(x<{#Mh zLEmvz$f?6K?!HZqv8o7&^j`>C87Fc0VuAjq@~||p;B+i;!^HM z_viAg4wF1DZ-4Esx%8xl?ZQ7w-m*pf`SXS^col<}se}JEq1@Yw^?TV)IdepB70PDk z4Y(GZA;YM~aBQQ=o#2hvx2x|{oO((-^S`dvrA4A#=9#NjzkL#>TkzWE z`_I=+=}m4y6XpwZ7e5|0Sd1*Mr8l4pKksUS4oKvDdY@$KkoFx1e)k;9Ka> z=y9v!{1_H}2u6v~Fn>L%ZW2!=9?Dg&X zbB-^WcJ}S7f4V24H;dW5x#C)EooTTDdb-8-a?l>FCw5Fl%bM5toR3-3@piZE>3&|={=kDzd6MX9lkf1{Ino(ee<46+%jN}XKfm91n#2(5J=2yw>+5ex!$+&u8vfXQf9+)T#N$4H zMVUgAmzhToV#$z>B-`y^|C*%c^nQ~ci`5+{Qp1q zOP|tat^A=L{>SCh_iwwOojLT3^H)F1H-I!%Dq{U8WxL|{W4rHb+@{A&oA@)n)|CHqqYjg*;GCt)(!ERT3?rg3A##%Fa~&lzRBYvAQkov<<> z@yefrrtYgw{mZ?1+_&1g@l@?ErQhvKrwZ_{j}tvFXB%>9mZM5)U#QsReVtQ{-P3kt ztxry1N|=}Z@QX)L*qWA4^Xr!Fl-D%YdD@ma&+)*;V41HyMc@DIykSz-GjEyQ#bq`9 z=O=7-QeC>SZ%wGI|GWF)mv%)j`MM&0rHEGW|4&>E&+3?b81B^b#t1pix>E_-OmM25 zXD{cgBh$`C{Cay`uXEyD3qJ*~Eg37mI@_PvvSxMe;f};@u}oY33u$~V41cn2S=p)Q zFLrIUN!q=1nseVhfrp3ei~p7xFdAI{THs|8w0R;W3~yixYNwm2LCq_)B9t5Uo@2|VPAGqhRY^a zpKlG>rj|3k{a!4p*|DXAm3EEmZ-c+HeN2BJq*;)4 z+YD@OhUYQ$?RlNi&(F(6fW^0BPY=jq~X5RVJ_pK&oT|A51i zGlB~;OM)UYE{e}ToV7J8%YEZ-&XB*KviHO0yvV~7qRF>U8;h3`Z*VpaU3ODz!H(mbkZ2fm*MuY#R zL45&!PbRJW?~-{*YrCLg|F^3xr%N7HoSd}ytxvJ;Et?HFoY(lJv#i42ad~)WK8uXC zeq2xH8E(>NP`-;lmn+udBX;*cYkB@@uwl^6zNmEuT*=)6C>E8e6P>A79;~85jKP|dv z-S_2Rbx!fF(xXS4-}y6q(fKvGQ0M0=eZRJxV)eXlYdsn`8w$RXwmC5kYG3Vz;y+x<2n_R&4WB!`U&(HT;+5cTs!kAWjhjTi= zeAp!`?IYaHtc`=WYCz{fHJ8b5PD^;bq;uA-fSf$0Ph1XhtTT>Q7(K9G?=o%CQP5cb6ut9T z%5n=HPx<|d;YH+^^1oL+bza;R1`Yg6DZ4_KojHb!tSn}`x$NKHMJ|DP^;OULZr9b% zDi_rF7Z@$F;{FAb=2;ermIiEnAMSPi_}r-sUv++USA6B-uBvbQ z{QJ9hZ@Hf~z>WwS%<@Z$myOX+clX5bswKQ$H_ny!DY$ zp3?qaT6R9~Hk0hEa^VT4io9&QxBt5L?q~7F%r_G6+14hP>|A}-VP^kst*tVl+oySp zUuHGW?t74?J0+=FxvJu`+Ouyjj+M&IS~1iA49kI<>rdtip6tvo`ZRl$ZT%;f;$5{p zuhsomnJqlm%sJ)N4auKbSIbUw$lcx9Jaew~gMVAI^IqORGxwC~#O%dM%2{E@FSCCS zUBZ{W$fdWdKkZE08K#VlKW(cW(ik%4frcd6WB0ExOkVWxL88Yj%gsesqSbs4oQu>s zvykV^;a1SG(jyq z@5htgKH~H!p?w#xKaM{_wB|C3be{+0#+Tq)^ z-KS>t&+hncl(yye-QLT~4Y%fI@3!KyX=e~-;NKZ$TK|GwQ+-v|Z!!Ht@0HtEpZb3( z^u*rsXc`lr1(A1cnsw=QI!_CH?L_jT#urpOz&39GYAr@Xy&cHO()2j`Z0 zZ(I4_eS5z4cEN>Sq8k?1|LGI8uUmgo|L8kq0qa1eXvSG3l~=gkR=Vx}HT@q){BF0< zcb9h+-L-4YVcn9xDWg2%s@J!aw*N74%qP}dyq%Lay>Ca+la7afFDjr8=bia5U)^UeTkC8S*FK}v{|}@4O5^Nn zG~{CT=T*!vc>!&7-IH{@7`8TW#l&BS_9xFaOZxf!ewN(SX@|Xz{5*Jd^@rOB;!VFF zW_zbRK_@%x$*P#pa-{o%WJyR-+i4q7<=Hp|MOg(pv3>=0C67c`~s&Clz>?0*h?N{z4&sb$@GNkOB?it*+z z)%q9rYmRpO{`ULz$Gf{N_EjqP<=$%HUdTR2Zua)F3mHE=mYkV)_}zymbNWuMy(-3i ztJIB=^9E>@*pclXEBRz6t}lyy${~C6v;KU(*?pJdv?|^&V*QaU@_L_kyoxZ_QjVTC zKRhNVv8q_^D1XZJE^cR2b-3Q+hijwNdTxAn%CgMl5?bz?ZvG+rcz6SvPfTzGBlyzBa|7a!iw)q8W9JH70!kqV!cB4fVd194TZUH_MDEBJKenr_6e zv*GuQO8O2z0qsZoz!duCt0mK^X~BItAE(DVYdRT_My)b2i>%!LX}SE=Eg};e7PHJ?u<*L@;9F+#bH}}m%~STiy8A7C zJ@eH=suO=k-r3F%8k1bl{cjFSO;f`(=JG>fYmeM=WUguAW`7Ayd;bI-x31skcEsQj~y+B*mYsyI6C_#id_1T60!xaa!_cmaVR?UVNqie(Y0qDgD`_|Op@hWf36QJZb4c#pYQ+OuRHIS z{a5$4Kdd2#|F-8nUo&%p3wTTD0sQYe)NfZTcPd#`Y!HHNl@SDt%(z1&!_zv_)dT8Yv1 zz=fjKU)>yTe%i%W|MW!SnYR~Z_2=7OzB;ehm52R*{rRa_{U$W`@r=M5n-lh}x|3?Uy$PD^}Y|Pi%Yp`A?^}9r^5j17- zb;?Vx*qqr`thbl@hh7SDVR8etBUxN!?U+u5Ivkz1cS`iRSGQQFALiG5eOFcI)+SLd z)4Wx?f8TfKIlfP|8+@#QfpB98V`GLz$&Mfo=sqQ{s4kBK9H0-j3h4K=Jw zr=^#@J#xry@6;`60w-59RH`nxekbyUNB)@{cczJg6aN0+6zz7jqGubIYE}=ZO!Sx~ zRkL;eZiYgk+wqb*de`}-o0v~e%lh!HZlwsrWq@{QG;Z=Yfm%b=Se^XD&Jah=MA(w|zOt#NtNmzTdgvPj=1ec}4M zjDZh8fwkj@5o_o=rj>J+C$-l_H=FK%74Nb9Qu}JtRQs2GF`=toz5Dj(Uu}eajYi&l z`}Mckr6)CLa~$arm!B)98~ExKxb~jn+At*{Fa?s^LW)B^x7VErS+QYK#mnvS506aK z^@{QrnwoK&@8@gN3$mN0@K2lBaCvvxE6{-}4|14JZc1^zd@*_IuA4@QHf85#E(I0n z(7fMOSGDH9vuEY|SD`*x7e&^`?F+e7J!^$SbDPFJx7_M0w~wV=+bn4FHp(FGxxfkV zEYIh;lRiWHEE<`bN{ov^*{*9z)BGpz_xGzQAJ@=e^w;>i+GIj`#}W^(mwK_K?*#;| zvxl!gB){1G;m^nJeQk%osU&DL)@*&fD5Sm5%PzhAZIicLz{}uF1CdG|Ml}Y#Js~?+ zhdIw&cXvuv47B?8e0_2e=xn4f$73hjy#Bqbz3}IU#2gu8p-*$&n9>wKBpyF^B6{_< zAd6(_YloYq&8L8B&p=SJa1A=>|5MI(;$|mTR#k(oxzcwmYP~#Pzg!f-DdfPlEJZiY z>3cv5n?o8?id%ylQ<_4+Ir8$&b%q_~U%8H%XFhpXaC1LDXv6fP zZaLMgkdo-NVHckNY5Y6m`r_T)O2*;lL1v-XSR-`A?l#W7yZN@6biwO8k$3HGOkj~w zU9juHcc&MOXa0t~y}Dqr;YM4|KcE>!@w@y{eXL)<`fmiCfHG4rR?yy+>u$LFz2&ET z8m0s-o7k|L^Mrc+OvV7iYYYJkU3!f{dve*Xdel5y9V)%lsx0hPZs`B{1vd_#{;$RR zMRt)(=H*2`)BPuy`OCG(wEE0$nvfYR3tFDBVCsS2s$Pp;O^??${ayQ{;7#-%4{!+y z$t(9CuD%3XS5gwW^j=LSbDnd1H+%GQpF>lXZ9)THvMo80 z$P~r*XV(4K#wTpOlo`W8OP-V-tyS}PUSyK_=9}2ZSE6iF^^?P&dox9f2W*OE|KZ-h zuKI@lJlmt&PEOA0X311}ki+!pWqcZANKZ6Fs7Byp9wr}#IgVfB?R4wvew3_@n!0}V z@%}`&K2_dFd+*%|s7pY=ZR z1FiRQu&&)v*ev`e9vWsajm zDf@w|$?k@WgW1zt9OkPefZE`@J7mO<_|6h}n|3y|NMu_P>oq>P6-&N`P7Dd3>~cWg zOQc=kL}vHxWj;x)X6+iAKJMqtxXCE6@09;q5J%>?c_c zuufNV{U(!PQ?n$<|Bld-mXm5-lJ@&@)f5)QRDN~K4?JbIX2Qzg4__WKx7S{5%oo0} zi8eiWa!gOEzqj3VJHv8-HQZ&{3hi%i)?T?h z#cVBT3z@2}>wlF8^14=C+p=2uUtKAd=v~8m!>-nfZ+*D+{(}$sULMfqaOo9fjtyTE zCUyGk=5)iQzTT?3uAr0CpvmL&l@*taU96Ip_6GMtNOi*FmAjLdbclV3&F9Dcfyx`p zFETNyGHwT*TEg^&RocvH<28BBuO@q{LT#$Q1b|o0I!;}E;~Lu$uL%eC-ROICW0`%< zde$FZ#}cQ+yTTMoW!Lp~h}50Pjx0!c20D9(^}2@tSE+5r??Q889<%MJ ze>)4j-p2D%`i8S?DSUd1ZajLsN&Wl#+iA?-bfaEu(6{4qD znw6lsVGgM6W4z+u>GZx$PXkt7f9_>_cYmF%;iF?)Gv)8@`}_R5?(Ofl#q}P9oG`Q5 zQR#eA-1Waozye3-+c^!3MOlu%zG=IAWAQhg7!F&9Gb#zn0!Q!5-@Udbcv0csE1o{t z%gwY`Jh{N^vdO^+v}*gaO_I7_k41gm$^DGn|L^U5C}qT0z*zG0N#x_*@;t9S<*b&M zzdP{r@9%=QM>r4v`PHNxxg>OntM`(VQ*Tdr_->{>zxDGohbC8l=lSTaKF{01`{4Qw zq1qeDCVZd%r*FOz>!oKWyTAOj3$T;@c)y(C|2@n1fuvqLKOUOZuT_QA5V0;*9ax@VQH?yLF6WBvThv2~W4KfF51 z-TwDt<8y%wtExGd9)@iC;4j8dHT&fK-ArGlH1wNFO8$VhbMABH7BI?PwRm04Hd|o^ z_1Isal0E*dmEWg-dE2YS^$y4{zRD+GxNt?dyDQ%+M*Mjyey`DhlzlJD#fY%F6=tOOo`MSfx$fHil(gwOjgU{S?M;Y{r-GTR;4{ z|Jylco35V)?hC!_pSn@S@@$23FSKWVI>3!^E zC9@chbk@lmYs5rY8W@!?y|C98NS|4}{f?i{l{}_Bm6lJ<4!o)Slx6wGRZd58>)zad zHn%=pz0z~$!*3Igkc=B1(vOuywIz>r$cNY{H}p2ODSqu*oHSKC_^Ox0Ux$9*XH%psO`uzN9$^;O8qOyj$P>!qyQ7ES-RWcR+i z+G(dIxz6TIP)umi@P2xdsX;!%L;KC_`x|D>wF;hG$K28s|MO?Mo$cq~HD02x?8=$~ z;^osyQhuB1HfL5v`t(-aTPtTjtxW%CVELM|6&#EYj%lRxaV(G%R(omny(;Iq->q+V zZ65j0Jmi_3RsM3BcIDZh%I+EGy8mwcr^Eb5aa-%Dsn=Z`mZ}|#yL-l)X^%;RFmoQ? zg!a|jYu__Jl2n>#wAnx3s{Tm1f6JEY|IS+X7cBG$|DRT@WEOV&_on)}Hv&&yIrYxw zeZ_oM`R#kk7^U+sOBrx5yj=e&UNo!pomcPgZLx=&BE(T^o}h%_BAD5 zdwYgw|Nei=N+#c{x%W0^&xC7!zk;mNc84@DT(G>f$L@aeBb8IZOFE{s%ipV;%$Ivp zCsbYc@ut$(f$a~AUU#nPdd~BvK7W3rV&jb)o(>5M%%l%^GrQf848^MKE8688j@qv~qj%UbQoT)blEl-QlWcvt*om*>20DJkw=+`dO6hu^u7Np!Z! z(pPV-1>#LoQW^yeCM_%6cWck*c^^!-&sq7-C8wvbxB9~5sq@O`tXTbgdT>j1{qJYK zxi4FV7ccxXmw~0BFW+U~qoXUon?K6_vAh0HW0=3h^2Mqjwa&)N_*}hJF0jtv?@hTW z1&>-b*z!E(XxX0Uebu_ez{XIdrQwdnjLfr_AJwLvzuNaIEktO2%tFsttBZ3}?(bIc z`c`@TbeQ(>o^u?X(fj$U7nyFA(y9|F{5X64<%zk`ce5_bYdbT%khuCvcHWXS=A(L_ zcT|1TIa`}4@NxM})$oN*SN?W?JThOY_56uX7mYJ$a*_p<=;M*XXo=XoCTQL z9$k6bQ-1jKx{8TK6|cj7{abt8)kim7`SYH~57PNxyq>7Nu~Mudo!RBowVn4b<;T~n zCS_?$b1=vrzFT-i<6-pUANuw47(ci?lw_F4DWJKgEmCyx41b04g-+jF7@i9mY;xd` z@C-f|-hEI%@and=Em}W6?USDQe6ISxU;eCm#@q!qYHiQ>MXSxYcvsAqaAbHP;c+qB z{^r*yd9g2FSr-5Q<^R@cT~q6d_ckAu>*jAY_$ITPZ_2h+K`U}Bb7vmwnR0QZlftv< z^L^*%Zo0Z)>E)aE?w?s!b5vgN(8h!t-e1y7woF)iwI^j>x!b#6=R2IY#q501y7RMU z_BR>HnOXafe||TAh5|#&KC61kr#xJX>bS)?uUb`qP&oVQy8DT18jI7_{1-btJ;k|m z_MNT5eKR;G8eMyFan)55#RcjMz1${#(473^>gtUA6qUJmq~}kxtXn_1!N<+!+y~3G z>E&~EE4R-&^SRGe!#>z1^48w}f>ZM^IIKANa__u_EsyKDZr(b|!Q@c1B(-com9o6) zd*279))ODC+-fy3;!Vckn~y8{9XdZ01n)Yp+4l3+P3HZ%21obLo%`wP{u=5DvxI#v%I@Qojd(;&fjmloqVf`%A7P5xFsAJJouV?KFQ|iY?*v> zL-T(H754iopEn$zzhJ|)+!Y?JUCXu{FW(+9zB+Q zbj3sw`JI>41tb4f9`Ed&H&<)h&iuPmJhvo2EVr}dOJn6_RPYQ-dwg=!L-|W~C+}RJ z^zhH&7&pPsfwK3uG$-*g?J;jS>TvPFsbwrBU;kLhG~WJMI2gylZaSrzdQ#`uwvCJ_|4$S`oyPYLxVG?v;7_9nXF{r{c~o|Cvip&hLicu6|c>%d|LXS>uS`mi|kwK|5_y#0A{^Y_5;+}rb_c;u8skajW6Qo+_}EfneF1q9TD^2Zo4|a+)>s0V)5m4j*oW@ zay+qNz*iM`uI*VJoW*iMFb-`}4A*_dT--KiG7oeBKQ=BfFww?&oWEM*OW*-~43flfUJi z{>K(1usM7$S14b2DC!gE#7DiR>T&;{|JQIib>*G^#i^UqU3?Og6`AJPH>9(8U0;`+ z6>|OD{Qc(I1xnY-|96=RO*->+|DHX^PUq~4Ntss;X+h2ZoKar6ZF0J;>nU^nFUyMC z`MYP_I>u(qFv)qYX0e#mukIfc=jmJ9dYbF0dTd*C-p2i2jY-198+{RZiD&jl{e1FN z<=2ZJ@oP7IRnmB}v3};HfESKY$IIScn#Nuc_TZW5Z#mU7^Q_Hz|I~F}n4Wp_xctR^ zTeDko)@G^v-t+m%vGjdXJI>Fkbee8xcwc|s4{=p>)kx8;;g6aaE;PnITc5M~9_xeN zo1C&M0$m#zh3<_3wkT%H+)(yF&f`Yke?g z=gXM>=!f&f%6pZcR?Iykc=Yn`?-%DZ{{5S1!Sj}xrGambk@VX&RniO0%`{#)^lAyQ zRO~X_;mYmH!(tm1v}l=K@ICuO)4gPGZaW)R?OE|S@^<-s@9(S9>rZV|{JiIJ{-otb zJ*V!l?Ra|o=9a=^*MIGMQ5VC_-?0 z`LUj*?oNkWve(ZwnOLSLw%f(y#>?2lQnJ>8m;W)hu9odDy!2;bk~?eb+^91X`m;U> zE@MA^&{tZs=#Kcdoh&Ou&PIKo#_kblW8_sP#H_md`hq*H+`{wuEF|UE|Gl&8VZFL~ z%KY-^=jWH+-#07m)c3V9f7!15YwmBUEw1bKjJ5jtbO(pC$6)~`2X)7pkIPp2&M5pn z?@Vs&%EF4r6^s1N>{|8FhvR(5l2E?fn?5!CO>?~(FQu+9(&snH_q5~|`4DmatqPkB z+f{DfmzDQsPR!`}zJupipkAfqbE}7Q)HVLAFfcCo96iz2Kkk)bq0m#!AeU2zuPmRh z7vtxF2C}Jd(1ir~A*pW_I|_o|=;#0y@tZm#n>YrSOTmMWq-EIF{&lj1;m0Gh`uZ-Hd;rLpp z8LnmW=B|76?6WIA_TegW z7N^_ZvXh#ue&DyPTzzcavoo{L@1EN&e(9EHQs?a_oj>Y$&oJyTY@5ln}^H~oUPorKYo7eRLe~!tMlcps$VS7aofN7 zxoRU9ZzPAwq+8dML^!TKz4T7yLK@q*Hw%UB=2%_VPz(Ef_~g;7vR6KHs-65hqkn22 zT^r?D|K^@*=-s)`WzUzLlQ!yD7i*z^b=lk=MTR>vxie=Ul)EN!|8iZ$Yq49q(@J+u zWHHb7OMP`^>4RswCGLB&-bi%C{hIvl*S>&{@$2_2Q#~%IdHdP<#k}#pqJ~?0eLGi$ zu3V(XCKcRQ^K;Lo_brc)n;K3qvfeOzUHqOGQ!OrNWZqQ!*<^U}|1zVbWwO$D_w^># z|7^{>yJzCEor33gUwwT1(mU08d%IN^|BHV6U4VhD$7A*XeQTDcl`dC_+q>wk!oI?n zm-c?GyqA7pdu-vai#a=sc0Zo?rbu|&nY5+a>3)~b{I~Jno_DXLd#!!gv%O5WJ~Tfeb z``+DI*!%QrOSj7^FE_jQ-_~_5d8%w@rd_iCBR6Bhg@98&w$fLYY>>82{d-z6q~Vut zgvOa?*U#H8o*{a=_3hh?6Or#LDjQfC)ulg`B`O|hYA_d-E4S+WF1%oee?$K4D{+5( zX9bx}Hul;jpL1mHBXg?mvv}2)j;S6mY8IY;vfQeB#;;!A z_J_(Va_&|+{e39&ojYDuEhW2rvChp+!9RcTt|*yn6|&4vmW#v0{Otyfe7}8%lODMA z1mAvJ`|m~I#Z}w3Yey{Ov5nd)H8uOf1h1CX->m)m*7lu|N(U#lFbJ@yW|{q1o;t;} zJ-s|+xu~?disbdMy3GqR;@4)W7q?q}KR8)@M#R*aIWc=oj=ny;M}Mi$TdO0-kE{t2 zS|7J`^2frGcOMkrel!2~aQ3T!4x`kQi}rr-4q59q=g5kJpP%YlQ}1~s>#CaCTyr1`HPceRK8*-eS(Rwgyr8>gSm3Jc!# zch|c+JGI&PF8);3T-3nI^nT~Z?~}Gi6uzwt*%hYycCu^3e$ju)>1p%-3%q~rD5%cB zsBq5f)TYe;j3J8`moK|l_-*Qny7kXj#`Vv0N}g8och)w^53hC>JAE_on(eU8sdbAa z<2=a(!vo)iB6fb@Y`!v+DbDMGIETFa1d_@Bcd6erfQ(w`(uU z%xgMc|3*jtr{Uc_H8+EOfB9MqFsSh@J>z|1g@M`mnZC2r9$nMk$MRz4$w%&gelSgc zd;e#Clgi?K@kVu@L^M~u71fB{z3$t~?AD_P|294N^wM~m0LRVGPZrMk+1zpT+F$*e zeG5)VKYcb;8`MIaV(MPD>hjyn{<5s=G)fYEBcN{xocV77Z%!Ws{On(-6)Fyu5W;wc>cWwvFZ6-@is}O1KbxbE_u!&vNB>~mCqcVI}fJq zEY5g*{c`Ku#0O4`^-cZJF^Q&|n^`hu@)fNs0+^21$Yi`!y0KHYD*d?pym_;{TgFiZ*BSeNKOP z#LFbWaBo4MnXOj?XeiBv`yIQ0YAUbw8KD>Q?9*TK$==y9vG2`|b+K2ge~P>dz2JZO zdzKT!k9#u|lVn*cBpaqPyKvoiKmWaB@ejR5rlnqi0V^*Zna}Dqb=iWTr5gX0Rcp38 zv$>sf7x}sLyn5V^rS;Z^7aiUgJoRQ#V5rI5BCtA-X^-FpbC#}YOAp&G`TP1>*Q~?m z*f}hW(w8x*Mhg6im3g8Wb%lM=b#bNVst-<2)RVDwdcJl3;v?Ie7d0>lH!vLden5=H zLN;st%FC_&EOIyZ^@{EPI7|1&jlGj+GBa(7WD;Ylxm)<|PP4nXY1m79yGkyqS;Ns{IcyPKRh{bWix0!F(8F&bCX#U@?Z8`IuiaK}g zJ-}l1AMP z*x#%1YqB1ro&CMqJ1mJ_hT7AF<+)uL83h;^>y;T8ALJ`{{Y&w9@bUWnDZAztzI!14 zGNmS_tuB#)Nr8cBp9=%if$47C8>O5Ufct$_Jsb4THSVi9Qjl0J(Zs;f(4a5S!0@3p z(5a_QIOFrV>X40v!ioDW1QmL?+7uX=?3@^w4!E;%B}#cO2su0JO6Ha2hy3{SZ#v!I z|F>;}EsrAui^G9eED8*3?3_Bzn=rk#m+^b5^oskpdznLGhye?uzz0Sq0R}q*4~~m6 zOsTK0E#^Dy&S7mY_jt)q=XQ?UhXp_$UE{;Rbl}wD<{LihAC5@p2Nrx5JM?zVpFhS$ z>mu}W_?=%1o|t0E&HC)Tf1{&gNml-zuS_m33J(;S1Q_I)dehc;Hf(0Lv&~cb=xV5> z`tV2LEb|hByB;0_hV8wr98dH=YP4?8b3S->*8SbWN*`Z|cJ=oxF%>=@tr671#57Nl zf$@Rlxs0QSSfswc^xnG5PF3dNxue|~Z$>KM&^+DYtGad2W=4H3_7nQ`VvHKs)B_%$^t)1W-~bP^ zZT%C2vu`e2J6lUMH0%e()%1xj_IK1S)V^WS3R~K>K|YS{!BYm2*FqX0+vZIBIx+u= zu;%35Ws9=K^*Ux8Vq>WRC9?DUidG3CjabiTc$Y7W2ic|n1> zzxLZN;*`B5IG@LXk)!Xf>D!+zE<1Q7X8Ajm zy_&ClYq!;;Y5jk0{CRMJi6f$gfu+HfjVUpr-Qn=P+7*7=-yLF9jos~bf3Fo!@bN=O z&X`Y``zt(j>b~kqjlYtzxpf5@j4V2!M5)BwXt2gvA^P2&TRIN^gj8Fat#&0_>sI{@ zO{|ufiO#eXHd%l}+t>K&o={EXoSiyniD^t@X4nXnG-V`Na7G`S(P0w+jnr9z5;*^2@&3MWG4oOm*%IOb6b# ziO3qwa+v5f)kIK0Ktki`ujTyrmorOW^S;`+QKoUt&EkOLf%5}CYAFVZ!n#7Mn3DxQ zm@^45{4-nhqFfOf8W25ZBlRKofKB2 zXukSzvEWqnnjIqY`*zJ-U*N{bDBz*Uz}S$_#Ni>d;@(1KQ|TXzQgj#Hwg2a^TD@oT zx^}L5K@P3Rpxv8hx;FS&?yB9rO`e&R#o>WIlM|DI#hSWU_LZ|4`B)qjS{=F_omXV- z{&vaYn$H}E-E|Q010st7PKV&swCly8&z(!*li*7LSCrA{V!rOln=f*XelKy9w*kpL2B`cHFzn zcY57V!O7_r+iE^{8&J{z$F*Vk zV(Y#?Ek)v5I=!g}4fa))^_ST04y(xf#S^Rlzc=20xo+|E8=}&`c$r=b1;ng7wQ*zg zw`JN4PR`O(3N_a`CvY+;d?;sn`pR5kUxS-}BZt7^W#6C5%kS(8>zQP)sURl0#^Jzs zPKyxtn=@wgwqF)y5M6y$f7;K!szcv*cgr<2d}PTgukDih`f~MYLl=i%H|EX#B`T^D z95(CiOlI~izV+t%@zd6Ib15WR=EDKn+X6E_ZtX#i1nKrS^ z;+1i^YHgz#?Yp_1qrzfaUVP8uM~VwC`BVJXP@<+w*VVU#Iu? zxLm`A4PlMtFK(GyH#){UI!tqzU4CzISMTf-VVB?RuYb*JwdZU8?84HYAKSemi=Qlr zi$A;IPAk{TSLZ$n9?pC}>*}soi-b6CbULV=ntAzUOr`Bz$p$swSt)kqAFt&?jO1@z zeynG)yVKMESx>hq9j|k&o~C#4@|ycsG$Xd@*jhi;zWX=w=g*9ybq>qy?=l2l3}fMX zc79gs-Cd<8Uve@0OP#ubBaVq*~G%P+j+Z|)GXMV7HO z!+VYKs(BL_RtSatmsa{Jc{|Xl-O)k4@u2r~;rrq1m&aI@PBQbE>%?And%^Nu{#P^Y zGB`pnPYgBOIyrE2TF{j>`8BJ~bBM9*@pqUh`uxt9H8U7EdMjp&Tq=KX^S7-li^2m@ zroHLs7S;4mxp3D^edEIvvwsm@*H(Cbo%hbOzoqr%JGr=jyDlzVbeD6*7rz*vD+P*- z0zz^7yH~B^eshlJFFRu-Q>=UcLZOGDsjKg9w%?Siy>`A?>p6MLMYr3hYJJlCUu9br zv{ui5r>I!mzr2Uesk4OxM3!dfd|CFsg@xfA^M;?>S?`v2H(0x~?0ooIT>sLsneoAA zx}N48efaj2sFc~FUH;#fI6XbJQwHBRwF;~ zyPPbiy5EI8)7dWewy+pGx8)0LU~ZgTcy2}eywJKAJPm3LPOsOhx?Y_A>I|R9MRx%K zg@EO^FJIa4y`DwK*bFrFacg@Suk6+vUk|Z*O<(xn+1ahr_uuQO`~H32(Q~sp9~-kV zaSJds_HeFvwQI+Wv%d0aGnO%MaIXH}<@M^n(KkMj{+@@&v)j~6PxgM)|zT?5OvtFyG-gBd!GXXONYqyxgT!aSj)dxSNp6a16#PN z&La)MsVpu642<77Q%+Cqp7l-MBQ(n0o86v)frrJ@#WBS8*}l!}HXpdZTzIC@75!Cv zu64-?ga0>+o-VtzH9PoZ*43@zb^F}q49}FWT73BSwo9)*Ccpf&GPvz`o3p?M%f{rw zb1Q-}4NrJ5)Ofo5&E*rg%g*S``Qg}sUwh{*pX2x}X8Xj7uUs1yc9c9~QJrJ4?(gjQ zb=UP`7Q7bMzcBaq|2?m}r>hr*=O{TfwET>ObvD?y_<<_y_^uK!5s?QJ$4|6`z4{Um6|6AtcKL-Elv%}Y2_{uH* z;@Vm1?{Po+d}i869osn9S|jV5&guC%A2dWv*qGRa14N##yz#;}Q|+sFI0MV|jEF0R zzt4F#CpTFOFf{IFS+({30#3#_xed;qeqNXUJ-TmIzfN{nw_Q_1IOmQ{DO%ggpXX<; zTf0=7!QzuvqTuSz6*I%D8;?02=;svCitdZxkeFzE;M5Gh{JT!G)9am=e|x*RXhsJw z%b(T*vncDa`ri7-q(taLBDy|Egeck4w$}I*)fgST3ytE%DEi$snpYsru z!wxC^kT~cfz{V)>!G`gk@&U>35j-r<%%8tluzT+#aohbLejYu~#K6kpa9}kH+cC?< zKP2jRxq2|Pv|rbrw??bF^MqXVRO3Z$_nRBUIa1C~Zr3u;_nbP*Z1JLl&*q+={_@tz z9~D*~ZdbiMdOrA{h5`dqoO*%j=0$Ao?)lHS|K1U2c%!IdlC*7AK!1t6}H}QPr5?zG@WPWUM|o3<*uH4_xb$C84|mSo^5fz<*KZ}z?8%yGWFS! zV=iAsHj2$+OmGi9q+}&1xb0(CKr1gt#e{}O1pzOkwytog2<6g>^!j}=cu9w%V2oYu ztRJ5i+Am(b)ql?i-h*7~3JGeB=L*lQa8=^v;BJsI%}VjyBYS|o;&g{a8!tyg!*`C9 zlhfYLlQ~~#98q00XGAF2KN;%(){ZYmd2F zR`Z(hSSE+rtQ_4BirZvUrCV${8W_N+A(2JwxaDFC|NfGTx(rT-UT+NxOB0>uxFfl<>be6Xa9b!D)44# zX))1SXf>(w?!qbe7y|g=s%9MsJUVq}V9uL1`=#0U);^fVkRTuGr2K1wQ}9=|hANPC zV0$OAgj6Z&sb$SdS-XGcZe0cw!3N&OcRh@+nxL-cVZ1B-|6TqO0Y(9tuPK znmgM~;^1)u#sddK_*QTCQe4_9*m#f~97YTr4F}>`LV}bZ&z&7Db@WI8Qt90H(xAx2n*sI2Zfm;OG9J6EZds)<*Ete0$tV?cb?#o zUuSv_JQRk;!=ITAt1g`WcrkGC*;k8KGC9oV|ZjwoYs=Ze`gWgGLM;rl_D>GPvGfp^co>vm^35GyF)>2mh$JApsVU_Ui9@C!%C zKJWSD;bhy-$spG=VMB++RE;C;>}(5RDl}O{7Tt(Q4_TpkPX5uA#Y_+0`5cf`(t5Iz zZ;>p_5=N%<$8!Q(Z6%idK zva@W21ZzXXNfy52mWxl#x^v9=ZnZB%fr(<`*YK4~s!}#Ln?G3O3$??eyTQpTWlizq z#O=RNPWrZr;lecLL(0o0cY%k}!iHb@t8QsBnqD~NASey? zZ$m7n#&yv}f*a5ID%UhNoabn`a+87G^2dq<_xOfx2}p^WaFaW3{h~RJfP2^QQ{h!x$Myb$-?SI-+s8x|C7u1 z;GiQXZ*IV`rv)E-9Lkln9{V@9?SquQGyEPHXqsGqSahbN^Jc}3FW2^5Xt;lt!REvU zw_d48p?vl&!68}8wXXDa6je4F&td`R%?);qtGm3sLt3Y$oSw8L<@vd}+t zwSvo3b-VkB+Wk+@2SEYFXNOp$VpuCzq`{$+*tv&r6OIPj*c{dsZz#78G?k zo)7wzgBLB@F-fNUii_*XIVIYgXRWxiXYLf!?0ZN4{LEKf8@*lc=ClN!S0*eCjtURi zK)M_lSZX>MSQ_+u#gZTim4UID!+}A9MJNxNr4CHzaA5dxDMK*~THY9R9Qe;@`7lG~ U=TYT01_lNOPgg&ebxsLQ03CV?L;wH) literal 0 HcmV?d00001 diff --git a/src/locales/en/translation.json b/src/locales/en/translation.json new file mode 100644 index 00000000..2f967b76 --- /dev/null +++ b/src/locales/en/translation.json @@ -0,0 +1,141 @@ +{ + "home": { + "featured": "Featured", + "recently_added": "Recently added", + "trending": "Trending", + "surprise_me": "Surprise me", + "no_results": "No results found" + }, + "sidebar": { + "catalogue": "Catalogue", + "downloads": "Downloads", + "settings": "Settings", + "my_library": "My library", + "downloading_metadata": "{{title}} (Downloading metadata…)", + "checking_files": "{{title}} ({{percentage}} - Checking files…)", + "paused": "{{title}} (Paused)", + "downloading": "{{title}} ({{percentage}} - Downloading…)", + "filter": "Filter library", + "follow_us": "Follow us", + "home": "Home" + }, + "header": { + "search": "Search", + "home": "Home", + "catalogue": "Catalogue", + "downloads": "Downloads", + "search_results": "Search results", + "settings": "Settings" + }, + "bottom_panel": { + "no_downloads_in_progress": "No downloads in progress", + "downloading_metadata": "Downloading {{title}} metadata…", + "checking_files": "Checking {{title}} files… ({{percentage}} complete)", + "downloading": "Downloading {{title}}… ({{percentage}} complete) - Conclusion {{eta}} - {{speed}}" + }, + "catalogue": { + "next_page": "Next page", + "previous_page": "Previous page" + }, + "game_details": { + "open_download_options": "Open download options", + "download_options_zero": "No download option", + "download_options_one": "{{count}} download option", + "download_options_other": "{{count}} download options", + "updated_at": "Updated {{updated_at}}", + "install": "Install", + "resume": "Resume", + "pause": "Pause", + "cancel": "Cancel", + "remove": "Remove", + "remove_from_list": "Remove", + "space_left_on_disk": "{{space}} left on disk", + "eta": "Conclusion {{eta}}", + "downloading_metadata": "Downloading metadata…", + "checking_files": "Checking files…", + "filter": "Filter repacks", + "requirements": "System requirements", + "minimum": "Minimum", + "recommended": "Recommended", + "no_minimum_requirements": "{{title}} doesn't provide minimum requirements information", + "no_recommended_requirements": "{{title}} doesn't provide recommended requirements information", + "paused_progress": "{{progress}} (Paused)", + "release_date": "Released in {{date}}", + "publisher": "Published by {{publisher}}", + "copy_link_to_clipboard": "Copy link", + "copied_link_to_clipboard": "Link copied", + "hours": "hours", + "minutes": "minutes", + "accuracy": "{{accuracy}}% accuracy", + "add_to_library": "Add to library", + "remove_from_library": "Remove from library", + "no_downloads": "No downloads available", + "play_time": "Played for {{amount}}", + "last_time_played": "Last played {{period}}", + "not_played_yet": "You haven't played {{title}} yet", + "next_suggestion": "Next suggestion", + "play": "Play", + "deleting": "Deleting installer…", + "close": "Close", + "playing_now": "Playing now" + }, + "activation": { + "title": "Activate Hydra", + "installation_id": "Installation ID:", + "enter_activation_code": "Enter your activation code", + "message": "If you don't know where to ask for this, then you shouldn't have this.", + "activate": "Activate", + "loading": "Loading…" + }, + "downloads": { + "resume": "Resume", + "pause": "Pause", + "eta": "Conclusion {{eta}}", + "paused": "Paused", + "verifying": "Verifying…", + "completed_at": "Completed in {{date}}", + "completed": "Completed", + "cancelled": "Cancelled", + "download_again": "Download again", + "cancel": "Cancel", + "filter": "Filter downloaded games", + "remove": "Remove", + "downloading_metadata": "Downloading metadata…", + "checking_files": "Checking files…", + "starting_download": "Starting download…", + "deleting": "Deleting installer…", + "delete": "Remove installer", + "remove_from_list": "Remove", + "delete_modal_title": "Are you sure?", + "delete_modal_description": "This will remove all the installation files from your computer", + "install": "Install" + }, + "settings": { + "downloads_path": "Downloads path", + "change": "Update", + "notifications": "Notifications", + "enable_download_notifications": "When a download is complete", + "enable_repack_list_notifications": "When a new repack is added", + "telemetry": "Telemetry", + "telemetry_description": "Enable anonymous usage statistics" + }, + "notifications": { + "download_complete": "Download complete", + "game_ready_to_install": "{{title}} is ready to install", + "repack_list_updated": "Repack list updated", + "repack_count_one": "{{count}} repack added", + "repack_count_other": "{{count}} repacks added" + }, + "system_tray": { + "open": "Open Hydra", + "quit": "Quit" + }, + "game_card": { + "no_downloads": "No downloads available" + }, + "binary_not_found_modal": { + "title": "Programs not installed", + "description": "Wine or Lutris executables were not found on your system", + "instructions": "Check the correct way to install any of them on your Linux distro so that the game can run normally" + } +} diff --git a/src/locales/es/translation.json b/src/locales/es/translation.json new file mode 100644 index 00000000..d28fccc4 --- /dev/null +++ b/src/locales/es/translation.json @@ -0,0 +1,141 @@ +{ + "home": { + "featured": "Destacado", + "recently_added": "Recién Añadidos", + "trending": "Tendencias", + "surprise_me": "¡Sorpréndeme!", + "no_results": "No se encontraron resultados" + }, + "sidebar": { + "catalogue": "Catálogo", + "downloads": "Descargas", + "settings": "Ajustes", + "my_library": "Mi biblioteca", + "downloading_metadata": "{{title}} (Descargando metadatos…)", + "checking_files": "{{title}} ({{percentage}} - Analizando archivos…)", + "paused": "{{title}} (Pausado)", + "downloading": "{{title}} ({{percentage}} - Descargando…)", + "filter": "Filtrar biblioteca", + "home": "Hogar", + "follow_us": "Síganos" + }, + "header": { + "search": "Buscar", + "catalogue": "Catálogo", + "downloads": "Descargas", + "search_results": "Resultados de búsqueda", + "settings": "Ajustes", + "home": "Início" + }, + "bottom_panel": { + "no_downloads_in_progress": "Sin descargas en progreso", + "downloading_metadata": "Descargando metadatos de {{title}}…", + "checking_files": "Analizando archivos de {{title}} - ({{percentage}} completado)", + "downloading": "Descargando {{title}}… ({{percentage}} completado) - Finalizando {{eta}} - {{speed}}" + }, + "game_details": { + "open_download_options": "Ver opciones de descargas", + "download_options_zero": "No hay opciones de descargas disponibles", + "download_options_one": "{{count}} opción de descarga", + "download_options_other": "{{count}} opciones de descargas", + "updated_at": "Actualizado el {{updated_at}}", + "resume": "Continuar", + "pause": "Pausa", + "cancel": "Cancelar", + "remove": "Eliminar", + "remove_from_list": "Quitar", + "space_left_on_disk": "{{space}} restantes en el disco", + "eta": "Finalizando {{eta}}", + "downloading_metadata": "Descargando metadatos…", + "checking_files": "Analizando archivos…", + "filter": "Filtrar repacks", + "requirements": "Requisitos del Sistema", + "minimum": "Mínimos", + "recommended": "Recomendados", + "no_minimum_requirements": "Sin requisitos mínimos para {{title}}", + "no_recommended_requirements": "{{title}} no tiene requisitos recomendados", + "paused_progress": "{{progress}} (Pausado)", + "release_date": "Fecha de lanzamiento {{date}}", + "publisher": "Publicado por {{publisher}}", + "copy_link_to_clipboard": "Copiar enlace", + "copied_link_to_clipboard": "Enlace copiado", + "hours": "horas", + "minutes": "minutos", + "accuracy": "{{accuracy}}% precisión", + "add_to_library": "Agregar a la biblioteca", + "remove_from_library": "Eliminar de la biblioteca", + "no_downloads": "No hay descargas disponibles", + "next_suggestion": "Siguiente sugerencia", + "play_time": "Jugado por {{cantidad}}", + "install": "Instalar", + "play": "Jugar", + "not_played_yet": "Aún no has jugado a {{title}}", + "close": "Cerca", + "deleting": "Eliminando instalador…", + "playing_now": "Jugando ahora", + "last_time_played": "Jugado por última vez {{period}}" + }, + "activation": { + "title": "Activar Hydra", + "installation_id": "ID de la Instalación:", + "enter_activation_code": "Introduce tu código de activación", + "message": "Si no sabes donde obtener el código, no deberías de tener esto.", + "activate": "Activar", + "loading": "Cargando…" + }, + "downloads": { + "resume": "Resumir", + "pause": "Pausa", + "eta": "Finalizando {{eta}}", + "paused": "En Pausa", + "verifying": "Verificando…", + "completed_at": "Completado el {{date}}", + "completed": "Completado", + "cancelled": "Cancelado", + "download_again": "Descargar de nuevo", + "cancel": "Cancelar", + "filter": "Buscar juegos descargados", + "remove": "Eliminar", + "downloading_metadata": "Descargando metadatos…", + "checking_files": "Verificando archivos…", + "starting_download": "Iniciando descarga…", + "remove_from_list": "Eliminar", + "delete": "Quitar instalador", + "delete_modal_description": "Esto eliminará todos los archivos de instalación de su computadora.", + "delete_modal_title": "¿Está seguro?", + "deleting": "Eliminando instalador…", + "install": "Instalar" + }, + "settings": { + "downloads_path": "Ruta de descarga", + "change": "Cambiar", + "notifications": "Notificaciones", + "enable_download_notifications": "Cuando se completa una descarga", + "enable_repack_list_notifications": "Cuando se añade un repack nuevo", + "telemetry": "Telemetria", + "telemetry_description": "Habilitar estadísticas de uso anónimas" + }, + "notifications": { + "download_complete": "Descarga completada", + "game_ready_to_install": "{{title}} está listo para instalarse", + "repack_list_updated": "Lista de repacks actualizadas", + "repack_count_one": "{{count}} repack ha sido añadido", + "repack_count_other": "{{count}} repacks añadidos" + }, + "system_tray": { + "open": "Abrir Hydra", + "quit": "Salir" + }, + "game_card": { + "no_downloads": "No hay descargas disponibles" + }, + "binary_not_found_modal": { + "title": "Programas no instalados", + "description": "Los ejecutables de Wine o Lutris no se encontraron en su sistema", + "instructions": "Comprueba la forma correcta de instalar cualquiera de ellos en tu distro Linux para que el juego pueda ejecutarse con normalidad" + }, + "catalogue": { + "next_page": "Siguiente página", + "previous_page": "Pagina anterior" + } +} diff --git a/src/locales/fr/translation.json b/src/locales/fr/translation.json new file mode 100644 index 00000000..e3d2bd3d --- /dev/null +++ b/src/locales/fr/translation.json @@ -0,0 +1,141 @@ +{ + "home": { + "featured": "En vedette", + "recently_added": "Récemment ajouté", + "trending": "Tendance", + "surprise_me": "Surprenez-moi", + "no_results": "Aucun résultat trouvé" + }, + "sidebar": { + "catalogue": "Catalogue", + "downloads": "Téléchargements", + "settings": "Paramètres", + "my_library": "Ma bibliothèque", + "downloading_metadata": "{{title}} (Téléchargement des métadonnées…)", + "checking_files": "{{title}} ({{percentage}} - Vérification des fichiers…)", + "paused": "{{title}} (En pause)", + "downloading": "{{title}} ({{percentage}} - Téléchargement en cours…)", + "filter": "Filtrer la bibliothèque", + "home": "Page d’accueil", + "follow_us": "Suivez-nous" + }, + "header": { + "search": "Recherche", + "catalogue": "Catalogue", + "downloads": "Téléchargements", + "search_results": "Résultats de la recherche", + "settings": "Paramètres", + "home": "Maison" + }, + "bottom_panel": { + "no_downloads_in_progress": "Aucun téléchargement en cours", + "downloading_metadata": "Téléchargement des métadonnées de {{title}}…", + "checking_files": "Vérification des fichiers de {{title}}… ({{percentage}} complet)", + "downloading": "Téléchargement de {{title}}… ({{percentage}} complet) - Conclusion dans {{eta}} - {{speed}}" + }, + "game_details": { + "open_download_options": "Ouvrir les options de téléchargement", + "download_options_zero": "Aucune option de téléchargement", + "download_options_one": "{{count}} option de téléchargement", + "download_options_other": "{{count}} options de téléchargement", + "updated_at": "Mis à jour le {{updated_at}}", + "resume": "Reprendre", + "pause": "Pause", + "cancel": "Annuler", + "remove": "Supprimer", + "remove_from_list": "Retirer", + "space_left_on_disk": "{{space}} restant sur le disque", + "eta": "Conclusion dans {{eta}}", + "downloading_metadata": "Téléchargement des métadonnées en cours…", + "checking_files": "Vérification des fichiers…", + "filter": "Filtrer les réductions", + "requirements": "Configuration requise", + "minimum": "Minimum", + "recommended": "Recommandée", + "no_minimum_requirements": "{{title}} ne fournit pas d'informations sur les exigences minimales", + "no_recommended_requirements": "{{title}} ne fournit pas d'informations sur les exigences recommandées", + "paused_progress": "{{progress}} (En pause)", + "release_date": "Sorti le {{date}}", + "publisher": "Édité par {{publisher}}", + "copy_link_to_clipboard": "Copier le lien", + "copied_link_to_clipboard": "Lien copié", + "hours": "heures", + "minutes": "minutes", + "accuracy": "{{accuracy}}% précision", + "add_to_library": "Ajouter à la bibliothèque", + "remove_from_library": "Supprimer de la bibliothèque", + "no_downloads": "Aucun téléchargement disponible", + "next_suggestion": "Suggestion suivante", + "play_time": "Joué pour {{montant}}", + "install": "Installer", + "play": "Jouer", + "not_played_yet": "Vous n'avez pas encore joué à {{title}}", + "close": "Fermer", + "deleting": "Suppression du programme d'installation…", + "playing_now": "Je joue maintenant", + "last_time_played": "Dernière lecture {{période}}" + }, + "activation": { + "title": "Activer Hydra", + "installation_id": "ID d'installation :", + "enter_activation_code": "Entrez votre code d'activation", + "message": "Si vous ne savez pas où demander cela, vous ne devriez pas l'avoir.", + "activate": "Activer", + "loading": "Chargement en cours…" + }, + "downloads": { + "resume": "Reprendre", + "pause": "Pause", + "eta": "Conclusion dans {{eta}}", + "paused": "En pause", + "verifying": "Vérification en cours…", + "completed_at": "Terminé en {{date}}", + "completed": "Terminé", + "cancelled": "Annulé", + "download_again": "Télécharger à nouveau", + "cancel": "Annuler", + "filter": "Filtrer les jeux téléchargés", + "remove": "Supprimer", + "downloading_metadata": "Téléchargement des métadonnées en cours…", + "checking_files": "Vérification des fichiers…", + "starting_download": "Démarrage du téléchargement…", + "remove_from_list": "Retirer", + "delete": "Supprimer le programme d'installation", + "delete_modal_description": "Cela supprimera tous les fichiers d'installation de votre ordinateur", + "delete_modal_title": "Es-tu sûr?", + "deleting": "Suppression du programme d'installation…", + "install": "Installer" + }, + "settings": { + "downloads_path": "Chemin des téléchargements", + "change": "Mettre à jour", + "notifications": "Notifications", + "enable_download_notifications": "Quand un téléchargement est terminé", + "enable_repack_list_notifications": "Quand une nouvelle réduction est ajoutée", + "telemetry": "Télémétrie", + "telemetry_description": "Activer les statistiques d'utilisation anonymes" + }, + "notifications": { + "download_complete": "Téléchargement terminé", + "game_ready_to_install": "{{title}} est prêt à être installé", + "repack_list_updated": "Liste de réductions mise à jour", + "repack_count_one": "{{count}} réduction ajoutée", + "repack_count_other": "{{count}} réductions ajoutées" + }, + "system_tray": { + "open": "Ouvrir Hydra", + "quit": "Quitter" + }, + "game_card": { + "no_downloads": "Aucun téléchargement disponible" + }, + "binary_not_found_modal": { + "description": "Les exécutables Wine ou Lutris sont introuvables sur votre système", + "instructions": "Vérifiez la bonne façon d'installer l'un d'entre eux sur votre distribution Linux afin que le jeu puisse fonctionner normalement", + "title": "Programmes non installés" + }, + "catalogue": { + "next_page": "Page suivante", + "previous_page": "Page précédente" + } +} diff --git a/src/locales/index.ts b/src/locales/index.ts new file mode 100644 index 00000000..98a93c78 --- /dev/null +++ b/src/locales/index.ts @@ -0,0 +1,4 @@ +export { default as en } from "./en/translation.json"; +export { default as pt } from "./pt/translation.json"; +export { default as es } from "./es/translation.json"; +export { default as fr } from "./fr/translation.json"; diff --git a/src/locales/pt/translation.json b/src/locales/pt/translation.json new file mode 100644 index 00000000..3498ad83 --- /dev/null +++ b/src/locales/pt/translation.json @@ -0,0 +1,141 @@ +{ + "home": { + "featured": "Destaque", + "recently_added": "Novidades", + "trending": "Populares", + "surprise_me": "Me surpreenda", + "no_results": "Nenhum resultado encontrado" + }, + "sidebar": { + "catalogue": "Catálogo", + "downloads": "Downloads", + "settings": "Configurações", + "my_library": "Minha biblioteca", + "downloading_metadata": "{{title}} (Baixando metadados…)", + "checking_files": "{{title}} ({{percentage}} - Verificando arquivos…)", + "paused": "{{title}} (Pausado)", + "downloading": "{{title}} ({{percentage}} - Baixando…)", + "filter": "Filtrar biblioteca", + "home": "Início", + "follow_us": "Acompanhe-nos" + }, + "header": { + "search": "Buscar", + "catalogue": "Catálogo", + "downloads": "Downloads", + "search_results": "Resultados da busca", + "settings": "Configurações", + "home": "Início" + }, + "bottom_panel": { + "no_downloads_in_progress": "Sem downloads em andamento", + "downloading_metadata": "Baixando metadados de {{title}}…", + "checking_files": "Verificando arquivos de {{title}}… ({{percentage}} completo)", + "downloading": "Baixando {{title}}… ({{percentage}} completo) - Conclusão {{eta}} - {{speed}}" + }, + "game_details": { + "open_download_options": "Ver opções de download", + "download_options_zero": "Sem opções de download", + "download_options_one": "{{count}} opção de download", + "download_options_other": "{{count}} opções de download", + "updated_at": "Atualizado {{updated_at}}", + "resume": "Resumir", + "pause": "Pausar", + "cancel": "Cancelar", + "remove": "Remover", + "remove_from_list": "Remover", + "space_left_on_disk": "{{space}} livres em disco", + "eta": "Conclusão {{eta}}", + "downloading_metadata": "Baixando metadados…", + "checking_files": "Verificando arquivos…", + "filter": "Filtrar repacks", + "requirements": "Requisitos do sistema", + "minimum": "Mínimos", + "recommended": "Recomendados", + "no_minimum_requirements": "{{title}} não possui informações de requisitos mínimos", + "no_recommended_requirements": "{{title}} não possui informações de requisitos recomendados", + "paused_progress": "{{progress}} (Pausado)", + "release_date": "Lançado em {{date}}", + "publisher": "Publicado por {{publisher}}", + "copy_link_to_clipboard": "Copiar link", + "copied_link_to_clipboard": "Link copiado", + "hours": "horas", + "minutes": "minutos", + "accuracy": "{{accuracy}}% de precisão", + "add_to_library": "Adicionar à biblioteca", + "remove_from_library": "Remover da biblioteca", + "no_downloads": "Nenhum download disponível", + "play_time": "Jogado por {{amount}}", + "next_suggestion": "Próxima sugestão", + "install": "Instalar", + "last_time_played": "Jogou por último {{period}}", + "play": "Jogar", + "not_played_yet": "Você ainda não jogou {{title}}", + "close": "Fechar", + "deleting": "Excluindo instalador…", + "playing_now": "Jogando agora" + }, + "activation": { + "title": "Ativação", + "installation_id": "ID da instalação:", + "enter_activation_code": "Insira seu código de ativação", + "message": "Se você não sabe onde conseguir o código, talvez você não devesse estar aqui.", + "activate": "Ativar", + "loading": "Carregando…" + }, + "downloads": { + "resume": "Resumir", + "pause": "Pausar", + "eta": "Conclusão {{eta}}", + "paused": "Pausado", + "verifying": "Verificando…", + "completed_at": "Concluído em {{date}}", + "completed": "Concluído", + "cancelled": "Cancelado", + "download_again": "Baixar novamente", + "cancel": "Cancelar", + "filter": "Filtrar jogos baixados", + "remove": "Remover", + "downloading_metadata": "Baixando metadados…", + "checking_files": "Verificando arquivos…", + "starting_download": "Iniciando download…", + "remove_from_list": "Remover", + "delete": "Remover instalador", + "delete_modal_description": "Isso removerá todos os arquivos de instalação do seu computador", + "delete_modal_title": "Tem certeza?", + "deleting": "Excluindo instalador…", + "install": "Instalar" + }, + "settings": { + "downloads_path": "Diretório dos downloads", + "change": "Mudar", + "notifications": "Notificações", + "enable_download_notifications": "Quando um download for concluído", + "enable_repack_list_notifications": "Quando a lista de repacks for atualizada", + "telemetry": "Telemetria", + "telemetry_description": "Habilitar estatísticas de uso anônimas" + }, + "notifications": { + "download_complete": "Download concluído", + "game_ready_to_install": "{{title}} está pronto para ser instalado", + "repack_list_updated": "Lista de repacks atualizada", + "repack_count_one": "{{count}} novo repack", + "repack_count_other": "{{count}} novos repacks" + }, + "system_tray": { + "open": "Abrir Hydra", + "quit": "Fechar" + }, + "game_card": { + "no_downloads": "Sem downloads disponíveis" + }, + "binary_not_found_modal": { + "title": "Programas não instalados", + "description": "Não foram encontrados no seu sistema os executáveis do Wine ou Lutris", + "instructions": "Verifique a forma correta de instalar algum deles na sua distro Linux para que o jogo possa ser executado normalmente" + }, + "catalogue": { + "next_page": "Próxima página", + "previous_page": "Página anterior" + } +} diff --git a/src/main/constants.ts b/src/main/constants.ts new file mode 100644 index 00000000..43d9d44e --- /dev/null +++ b/src/main/constants.ts @@ -0,0 +1,55 @@ +import { app } from "electron"; +import os from "node:os"; +import path from "node:path"; + +export const repackersOn1337x = [ + "DODI", + "FitGirl", + "0xEMPRESS", + "KaOsKrew", + "TinyRepacks", +] as const; + +export const repackers = [ + ...repackersOn1337x, + "Xatab", + "CPG", + "TinyRepacks", + "GOG", + "onlinefix", +] as const; + +export const months = [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec", +]; + +export enum GameStatus { + Seeding = "seeding", + Downloading = "downloading", + Paused = "paused", + CheckingFiles = "checking_files", + DownloadingMetadata = "downloading_metadata", + Cancelled = "cancelled", +} + +export const defaultDownloadsPath = path.join(os.homedir(), "downloads"); + +export const databasePath = path.join( + app.getPath("appData"), + app.getName(), + "hydra.db" +); + +export const INSTALLATION_ID_LENGTH = 6; +export const ACTIVATION_KEY_MULTIPLIER = 7; diff --git a/src/main/data-source.ts b/src/main/data-source.ts new file mode 100644 index 00000000..a2ca976c --- /dev/null +++ b/src/main/data-source.ts @@ -0,0 +1,35 @@ +import { DataSource } from "typeorm"; +import { + Game, + GameShopCache, + ImageCache, + Repack, + RepackerFriendlyName, + UserPreferences, + MigrationScript, + SteamGame, +} from "@main/entity"; +import type { SqliteConnectionOptions } from "typeorm/driver/sqlite/SqliteConnectionOptions"; + +import { databasePath } from "./constants"; + +export const createDataSource = (options: Partial) => + new DataSource({ + type: "better-sqlite3", + database: databasePath, + entities: [ + Game, + ImageCache, + Repack, + RepackerFriendlyName, + UserPreferences, + GameShopCache, + MigrationScript, + SteamGame, + ], + ...options, + }); + +export const dataSource = createDataSource({ + synchronize: true, +}); diff --git a/src/main/entity/game-shop-cache.entity.ts b/src/main/entity/game-shop-cache.entity.ts new file mode 100644 index 00000000..f83e1b0c --- /dev/null +++ b/src/main/entity/game-shop-cache.entity.ts @@ -0,0 +1,32 @@ +import { + Entity, + PrimaryColumn, + Column, + CreateDateColumn, + UpdateDateColumn, +} from "typeorm"; +import type { GameShop } from "@types"; + +@Entity("game_shop_cache") +export class GameShopCache { + @PrimaryColumn("text", { unique: true }) + objectID: string; + + @Column("text") + shop: GameShop; + + @Column("text", { nullable: true }) + serializedData: string; + + @Column("text", { nullable: true }) + howLongToBeatSerializedData: string; + + @Column("text", { nullable: true }) + language: string; + + @CreateDateColumn() + createdAt: Date; + + @UpdateDateColumn() + updatedAt: Date; +} diff --git a/src/main/entity/game.entity.ts b/src/main/entity/game.entity.ts new file mode 100644 index 00000000..b1598b8b --- /dev/null +++ b/src/main/entity/game.entity.ts @@ -0,0 +1,69 @@ +import { + Entity, + PrimaryGeneratedColumn, + Column, + CreateDateColumn, + UpdateDateColumn, + OneToOne, + JoinColumn, +} from "typeorm"; +import type { GameShop } from "@types"; +import { Repack } from "./repack.entity"; + +@Entity("game") +export class Game { + @PrimaryGeneratedColumn() + id: number; + + @Column("text", { unique: true }) + objectID: string; + + @Column("text") + title: string; + + @Column("text") + iconUrl: string; + + @Column("text", { nullable: true }) + folderName: string | null; + + @Column("text", { nullable: true }) + downloadPath: string | null; + + @Column("text", { nullable: true }) + executablePath: string | null; + + @Column("int", { default: 0 }) + playTimeInMilliseconds: number; + + @Column("text") + shop: GameShop; + + @Column("text", { nullable: true }) + status: string; + + @Column("float", { default: 0 }) + progress: number; + + @Column("float", { default: 0 }) + fileVerificationProgress: number; + + @Column("int", { default: 0 }) + bytesDownloaded: number; + + @Column("text", { nullable: true }) + lastTimePlayed: Date | null; + + @Column("float", { default: 0 }) + fileSize: number; + + @OneToOne(() => Repack, { nullable: true }) + @JoinColumn() + repack: Repack; + + @CreateDateColumn() + createdAt: Date; + + @UpdateDateColumn() + updatedAt: Date; +} diff --git a/src/main/entity/image-cache.entity.ts b/src/main/entity/image-cache.entity.ts new file mode 100644 index 00000000..a795c0d8 --- /dev/null +++ b/src/main/entity/image-cache.entity.ts @@ -0,0 +1,25 @@ +import { + Entity, + PrimaryGeneratedColumn, + Column, + CreateDateColumn, + UpdateDateColumn, +} from "typeorm"; + +@Entity("image_cache") +export class ImageCache { + @PrimaryGeneratedColumn() + id: number; + + @Column("text", { unique: true }) + url: string; + + @Column("text") + data: string; + + @CreateDateColumn() + createdAt: Date; + + @UpdateDateColumn() + updatedAt: Date; +} diff --git a/src/main/entity/index.ts b/src/main/entity/index.ts new file mode 100644 index 00000000..e93ba92e --- /dev/null +++ b/src/main/entity/index.ts @@ -0,0 +1,8 @@ +export * from "./game.entity"; +export * from "./image-cache.entity"; +export * from "./repack.entity"; +export * from "./repacker-friendly-name.entity"; +export * from "./user-preferences.entity"; +export * from "./game-shop-cache.entity"; +export * from "./migration-script.entity"; +export * from "./steam-game.entity"; diff --git a/src/main/entity/migration-script.entity.ts b/src/main/entity/migration-script.entity.ts new file mode 100644 index 00000000..d4166b71 --- /dev/null +++ b/src/main/entity/migration-script.entity.ts @@ -0,0 +1,22 @@ +import { + Entity, + PrimaryGeneratedColumn, + Column, + CreateDateColumn, + UpdateDateColumn, +} from "typeorm"; + +@Entity("migration_script") +export class MigrationScript { + @PrimaryGeneratedColumn() + id: number; + + @Column("text", { unique: true }) + version: string; + + @CreateDateColumn() + createdAt: Date; + + @UpdateDateColumn() + updatedAt: Date; +} diff --git a/src/main/entity/repack.entity.ts b/src/main/entity/repack.entity.ts new file mode 100644 index 00000000..b87925a7 --- /dev/null +++ b/src/main/entity/repack.entity.ts @@ -0,0 +1,37 @@ +import { + Entity, + PrimaryGeneratedColumn, + Column, + CreateDateColumn, + UpdateDateColumn, +} from "typeorm"; + +@Entity("repack") +export class Repack { + @PrimaryGeneratedColumn() + id: number; + + @Column("text", { unique: true }) + title: string; + + @Column("text", { unique: true }) + magnet: string; + + @Column("int") + page: number; + + @Column("text") + repacker: string; + + @Column("text") + fileSize: string; + + @Column("datetime") + uploadDate: Date | string; + + @CreateDateColumn() + createdAt: Date; + + @UpdateDateColumn() + updatedAt: Date; +} diff --git a/src/main/entity/repacker-friendly-name.entity.ts b/src/main/entity/repacker-friendly-name.entity.ts new file mode 100644 index 00000000..16b82e02 --- /dev/null +++ b/src/main/entity/repacker-friendly-name.entity.ts @@ -0,0 +1,25 @@ +import { + Entity, + PrimaryGeneratedColumn, + Column, + CreateDateColumn, + UpdateDateColumn, +} from "typeorm"; + +@Entity("repacker_friendly_name") +export class RepackerFriendlyName { + @PrimaryGeneratedColumn() + id: number; + + @Column("text", { unique: true }) + name: string; + + @Column("text") + friendlyName: string; + + @CreateDateColumn() + createdAt: Date; + + @UpdateDateColumn() + updatedAt: Date; +} diff --git a/src/main/entity/steam-game.entity.ts b/src/main/entity/steam-game.entity.ts new file mode 100644 index 00000000..775372fb --- /dev/null +++ b/src/main/entity/steam-game.entity.ts @@ -0,0 +1,10 @@ +import { Column, Entity, PrimaryColumn } from "typeorm"; + +@Entity("steam_game") +export class SteamGame { + @PrimaryColumn() + id: number; + + @Column() + name: string; +} diff --git a/src/main/entity/user-preferences.entity.ts b/src/main/entity/user-preferences.entity.ts new file mode 100644 index 00000000..40f1a26a --- /dev/null +++ b/src/main/entity/user-preferences.entity.ts @@ -0,0 +1,34 @@ +import { + Entity, + PrimaryGeneratedColumn, + Column, + CreateDateColumn, + UpdateDateColumn, +} from "typeorm"; + +@Entity("user_preferences") +export class UserPreferences { + @PrimaryGeneratedColumn() + id: number; + + @Column("text", { nullable: true }) + downloadsPath: string | null; + + @Column("text", { default: "en" }) + language: string; + + @Column("boolean", { default: false }) + downloadNotificationsEnabled: boolean; + + @Column("boolean", { default: false }) + repackUpdatesNotificationsEnabled: boolean; + + @Column("boolean", { default: true }) + telemetryEnabled: boolean; + + @CreateDateColumn() + createdAt: Date; + + @UpdateDateColumn() + updatedAt: Date; +} diff --git a/src/main/events/catalogue/get-catalogue.ts b/src/main/events/catalogue/get-catalogue.ts new file mode 100644 index 00000000..3e802c92 --- /dev/null +++ b/src/main/events/catalogue/get-catalogue.ts @@ -0,0 +1,117 @@ +import { formatName, getSteamAppAsset, repackerFormatter } from "@main/helpers"; +import type { CatalogueCategory, CatalogueEntry, GameShop } from "@types"; + +import { stateManager } from "@main/state-manager"; +import { searchGames, searchRepacks } from "../helpers/search-games"; +import { registerEvent } from "../register-event"; +import { requestSteam250 } from "@main/services"; + +const repacks = stateManager.getValue("repacks"); + +interface GetStringForLookup { + (index: number): string; +} + +const getCatalogue = async ( + _event: Electron.IpcMainInvokeEvent, + category: CatalogueCategory +) => { + const getStringForLookup = (index: number): string => { + const repack = repacks[index]; + const formatter = + repackerFormatter[repack.repacker as keyof typeof repackerFormatter]; + + return formatName(formatter(repack.title)); + }; + + if (!repacks.length) return []; + + const resultSize = 12; + + if (category === "trending") { + return getTrendingCatalogue(resultSize); + } else { + return getRecentlyAddedCatalogue( + resultSize, + resultSize, + getStringForLookup + ); + } +}; + +const getTrendingCatalogue = async ( + resultSize: number +): Promise => { + const results: CatalogueEntry[] = []; + const trendingGames = await requestSteam250("/30day"); + for ( + let i = 0; + i < trendingGames.length && results.length < resultSize; + i++ + ) { + if (!trendingGames[i]) continue; + + const { title, objectID } = trendingGames[i]; + const repacks = searchRepacks(title); + + if (title && repacks.length) { + const catalogueEntry = { + objectID, + title, + shop: "steam" as GameShop, + cover: getSteamAppAsset("library", objectID), + }; + + results.push({ ...catalogueEntry, repacks }); + } + } + return results; +}; + +const getRecentlyAddedCatalogue = async ( + resultSize: number, + requestSize: number, + getStringForLookup: GetStringForLookup +): Promise => { + let lookupRequest = []; + const results: CatalogueEntry[] = []; + + for (let i = 0; results.length < resultSize; i++) { + const stringForLookup = getStringForLookup(i); + + if (!stringForLookup) { + i++; + continue; + } + + lookupRequest.push(searchGames({ query: stringForLookup })); + + if (lookupRequest.length < requestSize) { + continue; + } + + const games = (await Promise.all(lookupRequest)).map((value) => + value.at(0) + ); + + for (const game of games) { + const isAlreadyIncluded = results.some( + (result) => result.objectID === game?.objectID + ); + + if (!game || !game.repacks.length || isAlreadyIncluded) { + continue; + } + + results.push(game); + } + lookupRequest = []; + } + + return results.slice(0, resultSize); +}; + +registerEvent(getCatalogue, { + name: "getCatalogue", + memoize: true, +}); diff --git a/src/main/events/catalogue/get-game-shop-details.ts b/src/main/events/catalogue/get-game-shop-details.ts new file mode 100644 index 00000000..61629242 --- /dev/null +++ b/src/main/events/catalogue/get-game-shop-details.ts @@ -0,0 +1,72 @@ +import { gameShopCacheRepository } from "@main/repository"; +import { getSteamAppDetails } from "@main/services"; + +import type { ShopDetails, GameShop, SteamAppDetails } from "@types"; + +import { registerEvent } from "../register-event"; +import { searchRepacks } from "../helpers/search-games"; + +const getGameShopDetails = async ( + _event: Electron.IpcMainInvokeEvent, + objectID: string, + shop: GameShop, + language: string +): Promise => { + if (shop === "steam") { + const cachedData = await gameShopCacheRepository.findOne({ + where: { objectID, language }, + }); + + const result = Promise.all([ + getSteamAppDetails(objectID, "english"), + getSteamAppDetails(objectID, language), + ]).then(([appDetails, localizedAppDetails]) => { + if (appDetails && localizedAppDetails) { + gameShopCacheRepository.upsert( + { + objectID, + shop: "steam", + language, + serializedData: JSON.stringify({ + ...localizedAppDetails, + name: appDetails.name, + }), + }, + ["objectID"] + ); + } + + return [appDetails, localizedAppDetails]; + }); + + const cachedGame = cachedData?.serializedData + ? (JSON.parse(cachedData?.serializedData) as SteamAppDetails) + : null; + + if (cachedGame) { + return { + ...cachedGame, + repacks: searchRepacks(cachedGame.name), + objectID, + } as ShopDetails; + } + + return result.then(([appDetails, localizedAppDetails]) => { + if (!appDetails || !localizedAppDetails) return null; + + return { + ...localizedAppDetails, + name: appDetails.name, + repacks: searchRepacks(appDetails.name), + objectID, + } as ShopDetails; + }); + } + + throw new Error("Not implemented"); +}; + +registerEvent(getGameShopDetails, { + name: "getGameShopDetails", + memoize: true, +}); diff --git a/src/main/events/catalogue/get-games.ts b/src/main/events/catalogue/get-games.ts new file mode 100644 index 00000000..75c6b62d --- /dev/null +++ b/src/main/events/catalogue/get-games.ts @@ -0,0 +1,44 @@ +import type { CatalogueEntry, GameShop } from "@types"; + +import { registerEvent } from "../register-event"; +import { searchRepacks } from "../helpers/search-games"; +import { stateManager } from "@main/state-manager"; +import { getSteamAppAsset } from "@main/helpers"; + +const steamGames = stateManager.getValue("steamGames"); + +const getGames = async ( + _event: Electron.IpcMainInvokeEvent, + take?: number, + cursor = 0 +): Promise<{ results: CatalogueEntry[]; cursor: number }> => { + const results: CatalogueEntry[] = []; + + let i = 0 + cursor; + + if (!steamGames.length) return []; + + while (results.length < take) { + const game = steamGames[i]; + const repacks = searchRepacks(game.name); + + if (repacks.length) { + results.push({ + objectID: String(game.id), + title: game.name, + shop: "steam" as GameShop, + cover: getSteamAppAsset("library", String(game.id)), + repacks, + }); + } + + i++; + } + + return { results, cursor: i }; +}; + +registerEvent(getGames, { + name: "getGames", + memoize: true, +}); diff --git a/src/main/events/catalogue/get-how-long-to-beat.ts b/src/main/events/catalogue/get-how-long-to-beat.ts new file mode 100644 index 00000000..601a3bf3 --- /dev/null +++ b/src/main/events/catalogue/get-how-long-to-beat.ts @@ -0,0 +1,48 @@ +import type { GameShop, HowLongToBeatCategory } from "@types"; +import { getHowLongToBeatGame, searchHowLongToBeat } from "@main/services"; + +import { registerEvent } from "../register-event"; +import { gameShopCacheRepository } from "@main/repository"; + +const getHowLongToBeat = async ( + _event: Electron.IpcMainInvokeEvent, + objectID: string, + shop: GameShop, + title: string +): Promise => { + const searchHowLongToBeatPromise = searchHowLongToBeat(title); + + const gameShopCache = await gameShopCacheRepository.findOne({ + where: { objectID, shop }, + }); + + const howLongToBeatCachedData = gameShopCache?.howLongToBeatSerializedData + ? JSON.parse(gameShopCache?.howLongToBeatSerializedData) + : null; + if (howLongToBeatCachedData) return howLongToBeatCachedData; + + return searchHowLongToBeatPromise.then(async (response) => { + const game = response.data.find( + (game) => game.profile_steam === Number(objectID) + ); + + if (!game) return null; + const howLongToBeat = await getHowLongToBeatGame(String(game.game_id)); + + gameShopCacheRepository.upsert( + { + objectID, + shop, + howLongToBeatSerializedData: JSON.stringify(howLongToBeat), + }, + ["objectID"] + ); + + return howLongToBeat; + }); +}; + +registerEvent(getHowLongToBeat, { + name: "getHowLongToBeat", + memoize: true, +}); diff --git a/src/main/events/catalogue/get-random-game.ts b/src/main/events/catalogue/get-random-game.ts new file mode 100644 index 00000000..335fa026 --- /dev/null +++ b/src/main/events/catalogue/get-random-game.ts @@ -0,0 +1,29 @@ +import { shuffle } from "lodash-es"; + +import { getRandomSteam250List } from "@main/services"; + +import { registerEvent } from "../register-event"; +import { searchGames, searchRepacks } from "../helpers/search-games"; +import { formatName } from "@main/helpers"; + +const getRandomGame = async (_event: Electron.IpcMainInvokeEvent) => { + return getRandomSteam250List().then(async (games) => { + const shuffledList = shuffle(games); + + for (const game of shuffledList) { + const repacks = searchRepacks(formatName(game.title)); + + if (repacks.length) { + const results = await searchGames({ query: game.title }); + + if (results.length) { + return results[0].objectID; + } + } + } + }); +}; + +registerEvent(getRandomGame, { + name: "getRandomGame", +}); diff --git a/src/main/events/catalogue/search-games.ts b/src/main/events/catalogue/search-games.ts new file mode 100644 index 00000000..eb9c0640 --- /dev/null +++ b/src/main/events/catalogue/search-games.ts @@ -0,0 +1,11 @@ +import { registerEvent } from "../register-event"; +import { searchGames } from "../helpers/search-games"; + +registerEvent( + (_event: Electron.IpcMainInvokeEvent, query: string) => + searchGames({ query, take: 12 }), + { + name: "searchGames", + memoize: true, + } +); diff --git a/src/main/events/hardware/get-disk-free-space.ts b/src/main/events/hardware/get-disk-free-space.ts new file mode 100644 index 00000000..28dcafa2 --- /dev/null +++ b/src/main/events/hardware/get-disk-free-space.ts @@ -0,0 +1,11 @@ +import checkDiskSpace from "check-disk-space"; + +import { registerEvent } from "../register-event"; +import { getDownloadsPath } from "../helpers/get-downloads-path"; + +const getDiskFreeSpace = async (_event: Electron.IpcMainInvokeEvent) => + checkDiskSpace(await getDownloadsPath()); + +registerEvent(getDiskFreeSpace, { + name: "getDiskFreeSpace", +}); diff --git a/src/main/events/helpers/generate-lutris-yaml.ts b/src/main/events/helpers/generate-lutris-yaml.ts new file mode 100644 index 00000000..75c9786b --- /dev/null +++ b/src/main/events/helpers/generate-lutris-yaml.ts @@ -0,0 +1,44 @@ +import { Document as YMLDocument } from "yaml"; +import { Game } from "@main/entity"; +import path from "node:path"; + +export const generateYML = (game: Game) => { + const slugifiedGameTitle = game.title.replace(/\s/g, "-").toLocaleLowerCase(); + + const doc = new YMLDocument({ + name: game.title, + game_slug: slugifiedGameTitle, + slug: `${slugifiedGameTitle}-installer`, + version: "Installer", + runner: "wine", + script: { + game: { + prefix: "$GAMEDIR", + arch: "win64", + working_dir: "$GAMEDIR", + }, + installer: [ + { + task: { + name: "create_prefix", + arch: "win64", + prefix: "$GAMEDIR", + }, + }, + { + task: { + executable: path.join( + game.downloadPath, + game.folderName, + "setup.exe" + ), + name: "wineexec", + prefix: "$GAMEDIR", + }, + }, + ], + }, + }); + + return doc.toString(); +}; diff --git a/src/main/events/helpers/get-downloads-path.ts b/src/main/events/helpers/get-downloads-path.ts new file mode 100644 index 00000000..c78a0ede --- /dev/null +++ b/src/main/events/helpers/get-downloads-path.ts @@ -0,0 +1,15 @@ +import { userPreferencesRepository } from "@main/repository"; +import { defaultDownloadsPath } from "@main/constants"; + +export const getDownloadsPath = async () => { + const userPreferences = await userPreferencesRepository.findOne({ + where: { + id: 1, + }, + }); + + if (userPreferences && userPreferences.downloadsPath) + return userPreferences.downloadsPath; + + return defaultDownloadsPath; +}; diff --git a/src/main/events/helpers/search-games.ts b/src/main/events/helpers/search-games.ts new file mode 100644 index 00000000..ddba13ba --- /dev/null +++ b/src/main/events/helpers/search-games.ts @@ -0,0 +1,71 @@ +import flexSearch from "flexsearch"; +import { orderBy } from "lodash-es"; + +import type { GameRepack, GameShop, CatalogueEntry } from "@types"; + +import { formatName, getSteamAppAsset, repackerFormatter } from "@main/helpers"; +import { stateManager } from "@main/state-manager"; + +const { Index } = flexSearch; +const repacksIndex = new Index(); +const steamGamesIndex = new Index({ tokenize: "forward" }); + +const repacks = stateManager.getValue("repacks"); +const steamGames = stateManager.getValue("steamGames"); + +for (let i = 0; i < repacks.length; i++) { + const repack = repacks[i]; + const formatter = + repackerFormatter[repack.repacker as keyof typeof repackerFormatter]; + + repacksIndex.add(i, formatName(formatter(repack.title))); +} + +for (let i = 0; i < steamGames.length; i++) { + const steamGame = steamGames[i]; + steamGamesIndex.add(i, formatName(steamGame.name)); +} + +export const searchRepacks = (title: string): GameRepack[] => { + return orderBy( + repacksIndex + .search(formatName(title)) + .map((index) => repacks.at(index as number)!), + ["uploadDate"], + "desc" + ); +}; + +export interface SearchGamesArgs { + query?: string; + take?: number; + skip?: number; +} + +export const searchGames = async ({ + query, + take, + skip, +}: SearchGamesArgs): Promise => { + const results = steamGamesIndex + .search(formatName(query || ""), { limit: take, offset: skip }) + .map((index) => { + const result = steamGames.at(index as number)!; + + return { + objectID: String(result.id), + title: result.name, + shop: "steam" as GameShop, + cover: getSteamAppAsset("library", String(result.id)), + repacks: searchRepacks(result.name), + }; + }); + + return Promise.all(results).then((resultsWithRepacks) => + orderBy( + resultsWithRepacks, + [({ repacks }) => repacks.length, "repacks"], + ["desc"] + ) + ); +}; diff --git a/src/main/events/index.ts b/src/main/events/index.ts new file mode 100644 index 00000000..5eaceff5 --- /dev/null +++ b/src/main/events/index.ts @@ -0,0 +1,32 @@ +import { defaultDownloadsPath } from "@main/constants"; +import { app, ipcMain } from "electron"; + +import "./catalogue/get-catalogue"; +import "./catalogue/get-game-shop-details"; +import "./catalogue/get-games"; +import "./catalogue/get-how-long-to-beat"; +import "./catalogue/get-random-game"; +import "./catalogue/search-games"; +import "./hardware/get-disk-free-space"; +import "./library/add-game-to-library"; +import "./library/close-game"; +import "./library/delete-game-folder"; +import "./library/get-game-by-object-id"; +import "./library/get-library"; +import "./library/get-repackers-friendly-names"; +import "./library/open-game"; +import "./library/open-game-installer"; +import "./library/remove-game"; +import "./misc/get-or-cache-image"; +import "./misc/open-external"; +import "./misc/show-open-dialog"; +import "./torrenting/cancel-game-download"; +import "./torrenting/pause-game-download"; +import "./torrenting/resume-game-download"; +import "./torrenting/start-game-download"; +import "./user-preferences/get-user-preferences"; +import "./user-preferences/update-user-preferences"; + +ipcMain.handle("ping", () => "pong"); +ipcMain.handle("getVersion", () => app.getVersion()); +ipcMain.handle("getDefaultDownloadsPath", () => defaultDownloadsPath); diff --git a/src/main/events/library/add-game-to-library.ts b/src/main/events/library/add-game-to-library.ts new file mode 100644 index 00000000..abbba592 --- /dev/null +++ b/src/main/events/library/add-game-to-library.ts @@ -0,0 +1,29 @@ +import { gameRepository } from "@main/repository"; + +import { registerEvent } from "../register-event"; + +import type { GameShop } from "@types"; +import { getImageBase64 } from "@main/helpers"; +import { getSteamGameIconUrl } from "@main/services"; + +const addGameToLibrary = async ( + _event: Electron.IpcMainInvokeEvent, + objectID: string, + title: string, + gameShop: GameShop, + executablePath: string +) => { + const iconUrl = await getImageBase64(await getSteamGameIconUrl(objectID)); + + return gameRepository.insert({ + title, + iconUrl, + objectID, + shop: gameShop, + executablePath, + }); +}; + +registerEvent(addGameToLibrary, { + name: "addGameToLibrary", +}); diff --git a/src/main/events/library/close-game.ts b/src/main/events/library/close-game.ts new file mode 100644 index 00000000..0d556925 --- /dev/null +++ b/src/main/events/library/close-game.ts @@ -0,0 +1,35 @@ +import path from "node:path"; + +import { gameRepository } from "@main/repository"; + +import { registerEvent } from "../register-event"; +import { getProcesses } from "@main/helpers"; + +const closeGame = async ( + _event: Electron.IpcMainInvokeEvent, + gameId: number +) => { + const processes = await getProcesses(); + const game = await gameRepository.findOne({ where: { id: gameId } }); + + const gameProcess = processes.find((runningProcess) => { + const basename = path.win32.basename(game.executablePath); + const basenameWithoutExtension = path.win32.basename( + game.executablePath, + path.extname(game.executablePath) + ); + + if (process.platform === "win32") { + return runningProcess.name === basename; + } + + return [basename, basenameWithoutExtension].includes(runningProcess.name); + }); + + if (gameProcess) return process.kill(gameProcess.pid); + return false; +}; + +registerEvent(closeGame, { + name: "closeGame", +}); diff --git a/src/main/events/library/delete-game-folder.ts b/src/main/events/library/delete-game-folder.ts new file mode 100644 index 00000000..eaf791ed --- /dev/null +++ b/src/main/events/library/delete-game-folder.ts @@ -0,0 +1,47 @@ +import path from "node:path"; +import fs from "node:fs"; + +import { GameStatus } from "@main/constants"; +import { gameRepository } from "@main/repository"; + +import { getDownloadsPath } from "../helpers/get-downloads-path"; +import { logger } from "@main/services"; +import { registerEvent } from "../register-event"; + +const deleteGameFolder = async ( + _event: Electron.IpcMainInvokeEvent, + gameId: number +) => { + const game = await gameRepository.findOne({ + where: { + id: gameId, + status: GameStatus.Cancelled, + }, + }); + + if (!game) return; + + if (game.folderName) { + const folderPath = path.join(await getDownloadsPath(), game.folderName); + + if (fs.existsSync(folderPath)) { + return new Promise((resolve, reject) => { + fs.rm( + folderPath, + { recursive: true, force: true, maxRetries: 5, retryDelay: 200 }, + (error) => { + if (error) { + logger.error(error); + reject(); + } + resolve(null); + } + ); + }); + } + } +}; + +registerEvent(deleteGameFolder, { + name: "deleteGameFolder", +}); diff --git a/src/main/events/library/get-game-by-object-id.ts b/src/main/events/library/get-game-by-object-id.ts new file mode 100644 index 00000000..522d3bbb --- /dev/null +++ b/src/main/events/library/get-game-by-object-id.ts @@ -0,0 +1,20 @@ +import { gameRepository } from "@main/repository"; + +import { registerEvent } from "../register-event"; + +const getGameByObjectID = async ( + _event: Electron.IpcMainInvokeEvent, + objectID: string +) => + gameRepository.findOne({ + where: { + objectID, + }, + relations: { + repack: true, + }, + }); + +registerEvent(getGameByObjectID, { + name: "getGameByObjectID", +}); diff --git a/src/main/events/library/get-library.ts b/src/main/events/library/get-library.ts new file mode 100644 index 00000000..a38b0cc9 --- /dev/null +++ b/src/main/events/library/get-library.ts @@ -0,0 +1,30 @@ +import { gameRepository } from "@main/repository"; +import { GameStatus } from "@main/constants"; + +import { searchRepacks } from "../helpers/search-games"; +import { registerEvent } from "../register-event"; +import { sortBy } from "lodash-es"; + +const getLibrary = async (_event: Electron.IpcMainInvokeEvent) => + gameRepository + .find({ + order: { + createdAt: "desc", + }, + relations: { + repack: true, + }, + }) + .then((games) => + sortBy( + games.map((game) => ({ + ...game, + repacks: searchRepacks(game.title), + })), + (game) => (game.status !== GameStatus.Cancelled ? 0 : 1) + ) + ); + +registerEvent(getLibrary, { + name: "getLibrary", +}); diff --git a/src/main/events/library/get-repackers-friendly-names.ts b/src/main/events/library/get-repackers-friendly-names.ts new file mode 100644 index 00000000..22481d82 --- /dev/null +++ b/src/main/events/library/get-repackers-friendly-names.ts @@ -0,0 +1,12 @@ +import { registerEvent } from "../register-event"; +import { stateManager } from "@main/state-manager"; + +const getRepackersFriendlyNames = async (_event: Electron.IpcMainInvokeEvent) => + stateManager.getValue("repackersFriendlyNames").reduce((prev, next) => { + return { ...prev, [next.name]: next.friendlyName }; + }, {}); + +registerEvent(getRepackersFriendlyNames, { + name: "getRepackersFriendlyNames", + memoize: true, +}); diff --git a/src/main/events/library/open-game-installer.ts b/src/main/events/library/open-game-installer.ts new file mode 100644 index 00000000..acd3e343 --- /dev/null +++ b/src/main/events/library/open-game-installer.ts @@ -0,0 +1,58 @@ +import { gameRepository } from "@main/repository"; +import { generateYML } from "../helpers/generate-lutris-yaml"; +import path from "node:path"; +import fs from "node:fs"; +import { writeFile } from "node:fs/promises"; +import { spawnSync, exec } from "node:child_process"; + +import { registerEvent } from "../register-event"; +import { shell } from "electron"; +import { getDownloadsPath } from "../helpers/get-downloads-path"; + +const openGameInstaller = async ( + _event: Electron.IpcMainInvokeEvent, + gameId: number +) => { + const game = await gameRepository.findOne({ where: { id: gameId } }); + + if (!game) return true; + + const gamePath = path.join( + game.downloadPath ?? (await getDownloadsPath()), + game.folderName + ); + + if (!fs.existsSync(gamePath)) { + await gameRepository.delete({ id: gameId }); + return true; + } + + const setupPath = path.join(gamePath, "setup.exe"); + if (!fs.existsSync(setupPath)) { + shell.openPath(gamePath); + return true; + } + + if (process.platform === "win32") { + shell.openPath(setupPath); + return true; + } + + if (spawnSync("which", ["lutris"]).status === 0) { + const ymlPath = path.join(gamePath, "setup.yml"); + await writeFile(ymlPath, generateYML(game)); + exec(`lutris --install "${ymlPath}"`); + return true; + } + + if (spawnSync("which", ["wine"]).status === 0) { + exec(`wine "${setupPath}"`); + return true; + } + + return false; +}; + +registerEvent(openGameInstaller, { + name: "openGameInstaller", +}); diff --git a/src/main/events/library/open-game.ts b/src/main/events/library/open-game.ts new file mode 100644 index 00000000..2008e0d6 --- /dev/null +++ b/src/main/events/library/open-game.ts @@ -0,0 +1,18 @@ +import { gameRepository } from "@main/repository"; + +import { registerEvent } from "../register-event"; +import { shell } from "electron"; + +const openGame = async ( + _event: Electron.IpcMainInvokeEvent, + gameId: number, + executablePath: string +) => { + await gameRepository.update({ id: gameId }, { executablePath }); + + shell.openPath(executablePath); +}; + +registerEvent(openGame, { + name: "openGame", +}); diff --git a/src/main/events/library/remove-game.ts b/src/main/events/library/remove-game.ts new file mode 100644 index 00000000..64e84b7d --- /dev/null +++ b/src/main/events/library/remove-game.ts @@ -0,0 +1,11 @@ +import { registerEvent } from "../register-event"; +import { gameRepository } from "../../repository"; + +const removeGame = async ( + _event: Electron.IpcMainInvokeEvent, + gameId: number +) => gameRepository.delete({ id: gameId }); + +registerEvent(removeGame, { + name: "removeGame", +}); diff --git a/src/main/events/misc/get-or-cache-image.ts b/src/main/events/misc/get-or-cache-image.ts new file mode 100644 index 00000000..9734ff7e --- /dev/null +++ b/src/main/events/misc/get-or-cache-image.ts @@ -0,0 +1,37 @@ +import { imageCacheRepository } from "@main/repository"; + +import { registerEvent } from "../register-event"; +import { getImageBase64 } from "@main/helpers"; +import { logger } from "@main/services"; + +const getOrCacheImage = async ( + _event: Electron.IpcMainInvokeEvent, + url: string +) => { + const cache = await imageCacheRepository.findOne({ + where: { + url, + }, + }); + + if (cache) return cache.data; + + getImageBase64(url).then((data) => + imageCacheRepository + .save({ + url, + data, + }) + .catch(() => { + logger.error(`Failed to cache image "${url}"`, { + method: "getOrCacheImage", + }); + }) + ); + + return url; +}; + +registerEvent(getOrCacheImage, { + name: "getOrCacheImage", +}); diff --git a/src/main/events/misc/open-external.ts b/src/main/events/misc/open-external.ts new file mode 100644 index 00000000..3d693c23 --- /dev/null +++ b/src/main/events/misc/open-external.ts @@ -0,0 +1,9 @@ +import { shell } from "electron"; +import { registerEvent } from "../register-event"; + +const openExternal = async (_event: Electron.IpcMainInvokeEvent, src: string) => + shell.openExternal(src); + +registerEvent(openExternal, { + name: "openExternal", +}); diff --git a/src/main/events/misc/show-open-dialog.ts b/src/main/events/misc/show-open-dialog.ts new file mode 100644 index 00000000..123a47d6 --- /dev/null +++ b/src/main/events/misc/show-open-dialog.ts @@ -0,0 +1,12 @@ +import { dialog } from "electron"; +import { WindowManager } from "@main/services"; +import { registerEvent } from "../register-event"; + +const showOpenDialog = async ( + _event: Electron.IpcMainInvokeEvent, + options: Electron.OpenDialogOptions +) => dialog.showOpenDialog(WindowManager.mainWindow, options); + +registerEvent(showOpenDialog, { + name: "showOpenDialog", +}); diff --git a/src/main/events/register-event.ts b/src/main/events/register-event.ts new file mode 100644 index 00000000..60362329 --- /dev/null +++ b/src/main/events/register-event.ts @@ -0,0 +1,39 @@ +import { ipcMain } from "electron"; + +import { stateManager } from "@main/state-manager"; + +interface EventArgs { + name: string; + memoize?: boolean; +} + +export const registerEvent = ( + listener: (event: Electron.IpcMainInvokeEvent, ...args: any[]) => any, + { name, memoize = false }: EventArgs +) => { + ipcMain.handle(name, (event: Electron.IpcMainInvokeEvent, ...args) => { + const eventResults = stateManager.getValue("eventResults"); + const keys = Array.from(eventResults.keys()); + + const key = [name, args] as [string, any[]]; + + const memoizationKey = keys.find(([memoizedEvent, memoizedArgs]) => { + const sameEvent = name === memoizedEvent; + const sameArgs = memoizedArgs.every((arg, index) => arg === args[index]); + + return sameEvent && sameArgs; + }); + + if (memoizationKey) return eventResults.get(memoizationKey); + + return Promise.resolve(listener(event, ...args)).then((result) => { + if (memoize) { + eventResults.set(key, JSON.parse(JSON.stringify(result))); + stateManager.setValue("eventResults", eventResults); + } + + if (!result) return result; + return JSON.parse(JSON.stringify(result)); + }); + }); +}; diff --git a/src/main/events/torrenting/cancel-game-download.ts b/src/main/events/torrenting/cancel-game-download.ts new file mode 100644 index 00000000..686033cc --- /dev/null +++ b/src/main/events/torrenting/cancel-game-download.ts @@ -0,0 +1,53 @@ +import { GameStatus } from "@main/constants"; +import { gameRepository } from "@main/repository"; + +import { registerEvent } from "../register-event"; +import { WindowManager, writePipe } from "@main/services"; + +import { In } from "typeorm"; + +const cancelGameDownload = async ( + _event: Electron.IpcMainInvokeEvent, + gameId: number +) => { + const game = await gameRepository.findOne({ + where: { + id: gameId, + status: In([ + GameStatus.Downloading, + GameStatus.DownloadingMetadata, + GameStatus.CheckingFiles, + GameStatus.Paused, + GameStatus.Seeding, + ]), + }, + }); + + if (!game) return; + + gameRepository + .update( + { + id: game.id, + }, + { + status: GameStatus.Cancelled, + downloadPath: null, + bytesDownloaded: 0, + progress: 0, + } + ) + .then((result) => { + if ( + game.status !== GameStatus.Paused && + game.status !== GameStatus.Seeding + ) { + writePipe.write({ action: "cancel" }); + if (result.affected) WindowManager.mainWindow.setProgressBar(-1); + } + }); +}; + +registerEvent(cancelGameDownload, { + name: "cancelGameDownload", +}); diff --git a/src/main/events/torrenting/pause-game-download.ts b/src/main/events/torrenting/pause-game-download.ts new file mode 100644 index 00000000..d89f2f72 --- /dev/null +++ b/src/main/events/torrenting/pause-game-download.ts @@ -0,0 +1,34 @@ +import { WindowManager, writePipe } from "@main/services"; + +import { registerEvent } from "../register-event"; +import { GameStatus } from "../../constants"; +import { gameRepository } from "../../repository"; +import { In } from "typeorm"; + +const pauseGameDownload = async ( + _event: Electron.IpcMainInvokeEvent, + gameId: number +) => { + await gameRepository + .update( + { + id: gameId, + status: In([ + GameStatus.Downloading, + GameStatus.DownloadingMetadata, + GameStatus.CheckingFiles, + ]), + }, + { status: GameStatus.Paused } + ) + .then((result) => { + if (result.affected) { + writePipe.write({ action: "pause" }); + WindowManager.mainWindow.setProgressBar(-1); + } + }); +}; + +registerEvent(pauseGameDownload, { + name: "pauseGameDownload", +}); diff --git a/src/main/events/torrenting/resume-game-download.ts b/src/main/events/torrenting/resume-game-download.ts new file mode 100644 index 00000000..c1e2e798 --- /dev/null +++ b/src/main/events/torrenting/resume-game-download.ts @@ -0,0 +1,56 @@ +import { registerEvent } from "../register-event"; +import { GameStatus } from "../../constants"; +import { gameRepository } from "../../repository"; +import { getDownloadsPath } from "../helpers/get-downloads-path"; +import { In } from "typeorm"; +import { writePipe } from "@main/services"; + +const resumeGameDownload = async ( + _event: Electron.IpcMainInvokeEvent, + gameId: number +) => { + const game = await gameRepository.findOne({ + where: { + id: gameId, + }, + relations: { repack: true }, + }); + + if (!game) return; + + writePipe.write({ action: "pause" }); + + if (game.status === GameStatus.Paused) { + const downloadsPath = game.downloadPath ?? (await getDownloadsPath()); + + writePipe.write({ + action: "start", + game_id: gameId, + magnet: game.repack.magnet, + save_path: downloadsPath, + }); + + await gameRepository.update( + { + status: In([ + GameStatus.Downloading, + GameStatus.DownloadingMetadata, + GameStatus.CheckingFiles, + ]), + }, + { status: GameStatus.Paused } + ); + + await gameRepository.update( + { id: game.id }, + { + status: GameStatus.DownloadingMetadata, + downloadPath: downloadsPath, + } + ); + } +}; + +registerEvent(resumeGameDownload, { + name: "resumeGameDownload", +}); diff --git a/src/main/events/torrenting/start-game-download.ts b/src/main/events/torrenting/start-game-download.ts new file mode 100644 index 00000000..570fd2ec --- /dev/null +++ b/src/main/events/torrenting/start-game-download.ts @@ -0,0 +1,110 @@ +import { getSteamGameIconUrl, writePipe } from "@main/services"; +import { gameRepository, repackRepository } from "@main/repository"; +import { GameStatus } from "@main/constants"; + +import { registerEvent } from "../register-event"; + +import type { GameShop } from "@types"; +import { getDownloadsPath } from "../helpers/get-downloads-path"; +import { getImageBase64 } from "@main/helpers"; +import { In } from "typeorm"; + +const startGameDownload = async ( + _event: Electron.IpcMainInvokeEvent, + repackId: number, + objectID: string, + title: string, + gameShop: GameShop +) => { + const [game, repack] = await Promise.all([ + gameRepository.findOne({ + where: { + objectID, + }, + }), + repackRepository.findOne({ + where: { + id: repackId, + }, + }), + ]); + + if (!repack) return; + + if (game?.status === GameStatus.Downloading) { + return; + } + + writePipe.write({ action: "pause" }); + + const downloadsPath = game?.downloadPath ?? (await getDownloadsPath()); + + await gameRepository.update( + { + status: In([ + GameStatus.Downloading, + GameStatus.DownloadingMetadata, + GameStatus.CheckingFiles, + ]), + }, + { status: GameStatus.Paused } + ); + + if (game) { + await gameRepository.update( + { + id: game.id, + }, + { + status: GameStatus.DownloadingMetadata, + downloadPath: downloadsPath, + repack: { id: repackId }, + } + ); + + writePipe.write({ + action: "start", + game_id: game.id, + magnet: repack.magnet, + save_path: downloadsPath, + }); + + game.status = GameStatus.DownloadingMetadata; + + writePipe.write({ + action: "start", + game_id: game.id, + magnet: repack.magnet, + save_path: downloadsPath, + }); + + return game; + } else { + const iconUrl = await getImageBase64(await getSteamGameIconUrl(objectID)); + + const createdGame = await gameRepository.save({ + title, + iconUrl, + objectID, + shop: gameShop, + status: GameStatus.DownloadingMetadata, + downloadPath: downloadsPath, + repack: { id: repackId }, + }); + + writePipe.write({ + action: "start", + game_id: createdGame.id, + magnet: repack.magnet, + save_path: downloadsPath, + }); + + const { repack: _, ...rest } = createdGame; + + return rest; + } +}; + +registerEvent(startGameDownload, { + name: "startGameDownload", +}); diff --git a/src/main/events/user-preferences/get-user-preferences.ts b/src/main/events/user-preferences/get-user-preferences.ts new file mode 100644 index 00000000..219713eb --- /dev/null +++ b/src/main/events/user-preferences/get-user-preferences.ts @@ -0,0 +1,11 @@ +import { userPreferencesRepository } from "@main/repository"; +import { registerEvent } from "../register-event"; + +const getUserPreferences = async (_event: Electron.IpcMainInvokeEvent) => + userPreferencesRepository.findOne({ + where: { id: 1 }, + }); + +registerEvent(getUserPreferences, { + name: "getUserPreferences", +}); diff --git a/src/main/events/user-preferences/update-user-preferences.ts b/src/main/events/user-preferences/update-user-preferences.ts new file mode 100644 index 00000000..000eca7b --- /dev/null +++ b/src/main/events/user-preferences/update-user-preferences.ts @@ -0,0 +1,21 @@ +import { userPreferencesRepository } from "@main/repository"; +import { registerEvent } from "../register-event"; + +import type { UserPreferences } from "@types"; + +const updateUserPreferences = async ( + _event: Electron.IpcMainInvokeEvent, + preferences: Partial +) => { + await userPreferencesRepository.upsert( + { + id: 1, + ...preferences, + }, + ["id"] + ); +}; + +registerEvent(updateUserPreferences, { + name: "updateUserPreferences", +}); diff --git a/src/main/helpers/formatters.test.ts b/src/main/helpers/formatters.test.ts new file mode 100644 index 00000000..6b0d0fae --- /dev/null +++ b/src/main/helpers/formatters.test.ts @@ -0,0 +1,98 @@ +import assert from "node:assert/strict"; +import { describe, test } from "node:test"; +import { + dodiFormatter, + empressFormatter, + fitGirlFormatter, + kaosKrewFormatter, +} from "./formatters"; + +describe("testing formatters", () => { + describe("testing fitgirl formatter", () => { + const fitGirlGames = [ + "REVEIL (v1.0.3f4 + 0.5 DLC, MULTi14) [FitGirl Repack]", + "Dune: Spice Wars - The Ixian Edition (v2.0.0.31558 + DLC, MULTi9) [FitGirl Repack]", + "HUMANKIND: Premium Edition (v1.0.22.3819 + 17 DLCs/Bonus Content, MULTi12) [FitGirl Repack, Selective Download - from 7.3 GB]", + "Call to Arms: Gates of Hell - Ostfront: WW2 Bundle (v1.034 Hotfix 3 + 3 DLCs, MULTi9) [FitGirl Repack, Selective Download - from 21.8 GB]", + "SUPER BOMBERMAN R 2 (v1.2.0, MULTi12) [FitGirl Repack]", + "God of Rock (v3110, MULTi11) [FitGirl Repack]", + ]; + + test("should format games correctly", () => { + assert.equal(fitGirlGames.map(fitGirlFormatter), [ + "REVEIL", + "Dune: Spice Wars - The Ixian Edition", + "HUMANKIND: Premium Edition", + "Call to Arms: Gates of Hell - Ostfront: WW2 Bundle", + "SUPER BOMBERMAN R 2", + "God of Rock", + ]); + }); + }); + + describe("testing kaoskrew formatter", () => { + const kaosKrewGames = [ + "Song.Of.Horror.Complete.Edition.v1.25.MULTi4.REPACK-KaOs", + "Remoteness.REPACK-KaOs", + "Persona.5.Royal.v1.0.0.MULTi5.NSW.For.PC.REPACK-KaOs", + "The.Wreck.MULTi5.REPACK-KaOs", + "Nemezis.Mysterious.Journey.III.v1.04.Deluxe.Edition.REPACK-KaOs", + "The.World.Of.Others.v1.05.REPACK-KaOs", + ]; + + test("should format games correctly", () => { + assert.equal(kaosKrewGames.map(kaosKrewFormatter), [ + "Song Of Horror Complete Edition", + "Remoteness", + "Persona 5 Royal NSW For PC", + "The Wreck", + "Nemezis Mysterious Journey III Deluxe Edition", + "The World Of Others", + ]); + }); + }); + + describe("testing empress formatter", () => { + const empressGames = [ + "Resident.Evil.4-EMPRESS", + "Marvels.Guardians.of.the.Galaxy.Crackfix-EMPRESS", + "Life.is.Strange.2.Complete.Edition-EMPRESS", + "Forza.Horizon.4.PROPER-EMPRESS", + "Just.Cause.4.Complete.Edition.READNFO-EMPRESS", + "Immortals.Fenyx.Rising.Crackfix.V2-EMPRESS", + ]; + + test("should format games correctly", () => { + assert.equal(empressGames.map(empressFormatter), [ + "Resident Evil 4", + "Marvels Guardians of the Galaxy", + "Life is Strange 2 Complete Edition", + "Forza Horizon 4 PROPER", + "Just Cause 4 Complete Edition", + "Immortals Fenyx Rising", + ]); + }); + }); + + describe("testing kodi formatter", () => { + const dodiGames = [ + "Tomb Raider I-III Remastered Starring Lara Croft (MULTi20) (From 2.5 GB) [DODI Repack]", + "Trail Out: Complete Edition (v2.9st + All DLCs + MULTi11) [DODI Repack]", + "Call to Arms - Gates of Hell: Ostfront (v1.034.0 + All DLCs + MULTi9) (From 22.4 GB) [DODI Repack]", + "Metal Gear Solid 2: Sons of Liberty - HD Master Collection Edition (Digital book + MULTi6) [DODI Repack]", + "DREDGE: Digital Deluxe Edition (v1.2.0.1922 + All DLCs + Bonus Content + MULTi11) (From 413 MB) [DODI Repack]", + "Outliver: Tribulation [DODI Repack]", + ]; + + test("should format games correctly", () => { + assert.equal(dodiGames.map(dodiFormatter), [ + "Tomb Raider I-III Remastered Starring Lara Croft", + "Trail Out: Complete Edition", + "Call to Arms - Gates of Hell: Ostfront", + "Metal Gear Solid 2: Sons of Liberty - HD Master Collection Edition", + "DREDGE: Digital Deluxe Edition", + "Outliver: Tribulation", + ]); + }); + }); +}); diff --git a/src/main/helpers/formatters.ts b/src/main/helpers/formatters.ts new file mode 100644 index 00000000..6ad67625 --- /dev/null +++ b/src/main/helpers/formatters.ts @@ -0,0 +1,56 @@ +/* String formatting */ + +export const removeReleaseYearFromName = (name: string) => + name.replace(/\([0-9]{4}\)/g, ""); + +export const removeSymbolsFromName = (name: string) => + name.replace(/[^A-Za-z 0-9]/g, ""); + +export const removeSpecialEditionFromName = (name: string) => + name.replace( + /(The |Digital )?(GOTY|Deluxe|Standard|Ultimate|Definitive|Enhanced|Collector's|Premium|Digital|Limited|Game of the Year|Reloaded|[0-9]{4}) Edition/g, + "" + ); + +export const removeDuplicateSpaces = (name: string) => + name.replace(/\s{2,}/g, " "); + +export const removeTrash = (title: string) => + title.replace(/\(.*\)|\[.*]/g, "").replace(/:/g, ""); + +/* Formatters per repacker */ + +export const fitGirlFormatter = (title: string) => + title.replace(/\(.*\)/g, "").trim(); + +export const kaosKrewFormatter = (title: string) => + title + .replace(/(v\.?[0-9])+([0-9]|\.)+/, "") + .replace( + /(\.Build\.[0-9]*)?(\.MULTi[0-9]{1,2})?(\.REPACK-KaOs|\.UPDATE-KaOs)?/g, + "" + ) + .replace(/\./g, " ") + .trim(); + +export const empressFormatter = (title: string) => + title + .replace(/-EMPRESS/, "") + .replace(/\./g, " ") + .trim(); + +export const dodiFormatter = (title: string) => + title.replace(/\(.*?\)/g, "").trim(); + +export const xatabFormatter = (title: string) => + title + .replace(/RePack от xatab|RePack от Decepticon|R.G. GOGFAN/, "") + .replace(/[\u0400-\u04FF]/g, "") + .replace(/(v\.?([0-9]| )+)+([0-9]|\.|-|_|\/|[a-zA-Z]| )+/, ""); + +export const tinyRepacksFormatter = (title: string) => title; +export const onlinefixFormatter = (title: string) => + title.replace("по сети", "").trim(); + +export const gogFormatter = (title: string) => + title.replace(/(v\.[0-9]+|v[0-9]+\.|v[0-9]{4})+.+/, ""); diff --git a/src/main/helpers/index.ts b/src/main/helpers/index.ts new file mode 100644 index 00000000..93b79229 --- /dev/null +++ b/src/main/helpers/index.ts @@ -0,0 +1,85 @@ +import { + removeReleaseYearFromName, + removeSymbolsFromName, + removeSpecialEditionFromName, + empressFormatter, + kaosKrewFormatter, + fitGirlFormatter, + removeDuplicateSpaces, + dodiFormatter, + removeTrash, + xatabFormatter, + tinyRepacksFormatter, + gogFormatter, + onlinefixFormatter, +} from "./formatters"; +import { months, repackers } from "../constants"; + +export const pipe = + (...fns: ((arg: T) => any)[]) => + (arg: T) => + fns.reduce((prev, fn) => fn(prev), arg); + +export const formatName = pipe( + removeTrash, + removeReleaseYearFromName, + removeSymbolsFromName, + removeSpecialEditionFromName, + removeDuplicateSpaces, + (str) => str.trim() +); + +export const repackerFormatter: Record< + (typeof repackers)[number], + (title: string) => string +> = { + DODI: dodiFormatter, + "0xEMPRESS": empressFormatter, + KaOsKrew: kaosKrewFormatter, + FitGirl: fitGirlFormatter, + Xatab: xatabFormatter, + CPG: (title: string) => title, + TinyRepacks: tinyRepacksFormatter, + GOG: gogFormatter, + onlinefix: onlinefixFormatter, +}; + +export const formatUploadDate = (str: string) => { + const date = new Date(); + + const [month, day, year] = str.split(" "); + + date.setMonth(months.indexOf(month.replace(".", ""))); + date.setDate(Number(day.substring(0, 2))); + date.setFullYear(Number("20" + year.replace("'", ""))); + date.setHours(0, 0, 0, 0); + + return date; +}; + +export const getSteamAppAsset = ( + category: "library" | "hero" | "logo" | "icon", + objectID: string, + clientIcon?: string +) => { + if (category === "library") + return `https://steamcdn-a.akamaihd.net/steam/apps/${objectID}/header.jpg`; + + if (category === "hero") + return `https://steamcdn-a.akamaihd.net/steam/apps/${objectID}/library_hero.jpg`; + + if (category === "logo") + return `https://cdn.cloudflare.steamstatic.com/steam/apps/${objectID}/logo.png`; + + return `https://cdn.cloudflare.steamstatic.com/steamcommunity/public/images/apps/${objectID}/${clientIcon}.ico`; +}; + +export const getImageBase64 = async (url: string) => + fetch(url, { method: "GET" }).then((response) => + response.arrayBuffer().then((buffer) => { + return `data:image/jpeg;base64,${Buffer.from(buffer).toString("base64")}`; + }) + ); + +export * from "./formatters"; +export * from "./ps"; diff --git a/src/main/helpers/ps.ts b/src/main/helpers/ps.ts new file mode 100644 index 00000000..f7ce3391 --- /dev/null +++ b/src/main/helpers/ps.ts @@ -0,0 +1,12 @@ +import psList from "ps-list"; +import { tasklist } from "tasklist"; + +export const getProcesses = async () => { + if (process.platform === "win32") { + return tasklist().then((tasks) => + tasks.map((task) => ({ ...task, name: task.imageName })) + ); + } + + return psList(); +}; diff --git a/src/main/index.ts b/src/main/index.ts new file mode 100644 index 00000000..a48db177 --- /dev/null +++ b/src/main/index.ts @@ -0,0 +1,102 @@ +import { app, BrowserWindow } from "electron"; +import { init } from "@sentry/electron/main"; +import i18n from "i18next"; +import path from "node:path"; +import { resolveDatabaseUpdates, WindowManager } from "@main/services"; +import { dataSource } from "@main/data-source"; +import * as resources from "@locales"; +import { userPreferencesRepository } from "@main/repository"; + +const gotTheLock = app.requestSingleInstanceLock(); +if (!gotTheLock) app.quit(); + +if (import.meta.env.MAIN_VITE_SENTRY_DSN) { + init({ + dsn: import.meta.env.MAIN_VITE_SENTRY_DSN, + beforeSend: async (event) => { + const userPreferences = await userPreferencesRepository.findOne({ + where: { id: 1 }, + }); + + if (userPreferences?.telemetryEnabled) return event; + return null; + }, + }); +} + +i18n.init({ + resources, + lng: "en", + fallbackLng: "en", + interpolation: { + escapeValue: false, + }, +}); + +const PROTOCOL = "hydralauncher"; + +if (process.defaultApp) { + if (process.argv.length >= 2) { + app.setAsDefaultProtocolClient(PROTOCOL, process.execPath, [ + path.resolve(process.argv[1]), + ]); + } +} else { + app.setAsDefaultProtocolClient(PROTOCOL); +} + +// This method will be called when Electron has finished +// initialization and is ready to create browser windows. +// Some APIs can only be used after this event occurs. +app.whenReady().then(() => { + dataSource.initialize().then(async () => { + // await resolveDatabaseUpdates(); + + await import("./main"); + + const userPreferences = await userPreferencesRepository.findOne({ + where: { id: 1 }, + }); + + WindowManager.createMainWindow(); + // WindowManager.createSystemTray(userPreferences?.language || "en"); + }); +}); + +app.on("second-instance", (_event, commandLine) => { + // Someone tried to run a second instance, we should focus our window. + if (WindowManager.mainWindow) { + if (WindowManager.mainWindow.isMinimized()) + WindowManager.mainWindow.restore(); + + WindowManager.mainWindow.focus(); + } else { + WindowManager.createMainWindow(); + } + + const [, path] = commandLine.pop().split("://"); + if (path) WindowManager.redirect(path); +}); + +app.on("open-url", (_event, url) => { + const [, path] = url.split("://"); + WindowManager.redirect(path); +}); + +// Quit when all windows are closed, except on macOS. There, it's common +// for applications and their menu bar to stay active until the user quits +// explicitly with Cmd + Q. +app.on("window-all-closed", () => { + WindowManager.mainWindow = null; +}); + +app.on("activate", () => { + // On OS X it's common to re-create a window in the app when the + // dock icon is clicked and there are no other windows open. + if (BrowserWindow.getAllWindows().length === 0) { + WindowManager.createMainWindow(); + } +}); + +// In this file you can include the rest of your app's specific main process +// code. You can also put them in separate files and import them here. diff --git a/src/main/main.ts b/src/main/main.ts new file mode 100644 index 00000000..5637bbd3 --- /dev/null +++ b/src/main/main.ts @@ -0,0 +1,129 @@ +import { stateManager } from "./state-manager"; +import { GameStatus, repackers } from "./constants"; +import { + getNewGOGGames, + getNewRepacksFromCPG, + getNewRepacksFromUser, + getNewRepacksFromXatab, + // getNewRepacksFromOnlineFix, + readPipe, + startProcessWatcher, + writePipe, +} from "./services"; +import { + gameRepository, + repackRepository, + repackerFriendlyNameRepository, + steamGameRepository, + userPreferencesRepository, +} from "./repository"; +import { TorrentClient } from "./services/torrent-client"; +import { Repack } from "./entity"; +import { Notification } from "electron"; +import { t } from "i18next"; +import { In } from "typeorm"; + +startProcessWatcher(); + +TorrentClient.startTorrentClient(writePipe.socketPath, readPipe.socketPath); + +Promise.all([writePipe.createPipe(), readPipe.createPipe()]).then(async () => { + const game = await gameRepository.findOne({ + where: { + status: In([ + GameStatus.Downloading, + GameStatus.DownloadingMetadata, + GameStatus.CheckingFiles, + ]), + }, + relations: { repack: true }, + }); + + if (game) { + writePipe.write({ + action: "start", + game_id: game.id, + magnet: game.repack.magnet, + save_path: game.downloadPath, + }); + } + + readPipe.socket.on("data", (data) => { + TorrentClient.onSocketData(data); + }); +}); + +const track1337xUsers = async (existingRepacks: Repack[]) => { + for (const repacker of repackers) { + await getNewRepacksFromUser( + repacker, + existingRepacks.filter((repack) => repack.repacker === repacker) + ); + } +}; + +const checkForNewRepacks = async () => { + const userPreferences = await userPreferencesRepository.findOne({ + where: { id: 1 }, + }); + + const existingRepacks = stateManager.getValue("repacks"); + + Promise.allSettled([ + getNewGOGGames( + existingRepacks.filter((repack) => repack.repacker === "GOG") + ), + getNewRepacksFromXatab( + existingRepacks.filter((repack) => repack.repacker === "Xatab") + ), + getNewRepacksFromCPG( + existingRepacks.filter((repack) => repack.repacker === "CPG") + ), + // getNewRepacksFromOnlineFix( + // existingRepacks.filter((repack) => repack.repacker === "onlinefix") + // ), + track1337xUsers(existingRepacks), + ]).then(() => { + repackRepository.count().then((count) => { + const total = count - stateManager.getValue("repacks").length; + + if (total > 0 && userPreferences?.repackUpdatesNotificationsEnabled) { + new Notification({ + title: t("repack_list_updated", { + ns: "notifications", + lng: userPreferences?.language || "en", + }), + body: t("repack_count", { + ns: "notifications", + lng: userPreferences?.language || "en", + count: total, + }), + }).show(); + } + }); + }); +}; + +const loadState = async () => { + const [friendlyNames, repacks, steamGames] = await Promise.all([ + repackerFriendlyNameRepository.find(), + repackRepository.find({ + order: { + createdAt: "desc", + }, + }), + steamGameRepository.find({ + order: { + name: "asc", + }, + }), + ]); + + stateManager.setValue("repackersFriendlyNames", friendlyNames); + stateManager.setValue("repacks", repacks); + stateManager.setValue("steamGames", steamGames); + + import("./events"); +}; + +loadState().then(() => checkForNewRepacks()); diff --git a/src/main/repository.ts b/src/main/repository.ts new file mode 100644 index 00000000..f9edfa1c --- /dev/null +++ b/src/main/repository.ts @@ -0,0 +1,30 @@ +import { dataSource } from "./data-source"; +import { + Game, + GameShopCache, + ImageCache, + Repack, + RepackerFriendlyName, + UserPreferences, + MigrationScript, + SteamGame, +} from "@main/entity"; + +export const gameRepository = dataSource.getRepository(Game); + +export const imageCacheRepository = dataSource.getRepository(ImageCache); + +export const repackRepository = dataSource.getRepository(Repack); + +export const repackerFriendlyNameRepository = + dataSource.getRepository(RepackerFriendlyName); + +export const userPreferencesRepository = + dataSource.getRepository(UserPreferences); + +export const gameShopCacheRepository = dataSource.getRepository(GameShopCache); + +export const migrationScriptRepository = + dataSource.getRepository(MigrationScript); + +export const steamGameRepository = dataSource.getRepository(SteamGame); diff --git a/src/main/services/fifo.ts b/src/main/services/fifo.ts new file mode 100644 index 00000000..866232cc --- /dev/null +++ b/src/main/services/fifo.ts @@ -0,0 +1,38 @@ +import path from "node:path"; +import net from "node:net"; +import crypto from "node:crypto"; +import os from "node:os"; + +export class FIFO { + public socket: null | net.Socket = null; + public socketPath = this.generateSocketFilename(); + + private generateSocketFilename() { + const hash = crypto.randomBytes(16).toString("hex"); + + if (process.platform === "win32") { + return "\\\\.\\pipe\\" + hash; + } + + return path.join(os.tmpdir(), hash); + } + + public write(data: any) { + if (!this.socket) return; + this.socket.write(Buffer.from(JSON.stringify(data))); + } + + public createPipe() { + return new Promise((resolve) => { + const server = net.createServer((socket) => { + this.socket = socket; + resolve(null); + }); + + server.listen(this.socketPath); + }); + } +} + +export const writePipe = new FIFO(); +export const readPipe = new FIFO(); diff --git a/src/main/services/how-long-to-beat.ts b/src/main/services/how-long-to-beat.ts new file mode 100644 index 00000000..76d53c6d --- /dev/null +++ b/src/main/services/how-long-to-beat.ts @@ -0,0 +1,60 @@ +import { formatName } from "@main/helpers"; +import axios from "axios"; +import { JSDOM } from "jsdom"; +import { requestWebPage } from "./repack-tracker/helpers"; +import { HowLongToBeatCategory } from "@types"; + +export interface HowLongToBeatResult { + game_id: number; + profile_steam: number; +} + +export interface HowLongToBeatSearchResponse { + data: HowLongToBeatResult[]; +} + +export const searchHowLongToBeat = async (gameName: string) => { + const response = await axios.post( + "https://howlongtobeat.com/api/search", + { + searchType: "games", + searchTerms: formatName(gameName).split(" "), + searchPage: 1, + size: 100, + }, + { + headers: { + "User-Agent": + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36", + Referer: "https://howlongtobeat.com/", + }, + } + ); + + return response.data as HowLongToBeatSearchResponse; +}; + +export const getHowLongToBeatGame = async ( + id: string +): Promise => { + const response = await requestWebPage(`https://howlongtobeat.com/game/${id}`); + + const { window } = new JSDOM(response); + const { document } = window; + + const $ul = document.querySelector(".shadow_shadow ul"); + const $lis = Array.from($ul.children); + + return $lis.map(($li) => { + const title = $li.querySelector("h4").textContent; + const [, accuracyClassName] = Array.from(($li as HTMLElement).classList); + + const accuracy = accuracyClassName.split("time_").at(1); + + return { + title, + duration: $li.querySelector("h5").textContent, + accuracy, + }; + }); +}; diff --git a/src/main/services/index.ts b/src/main/services/index.ts new file mode 100644 index 00000000..2544c6f4 --- /dev/null +++ b/src/main/services/index.ts @@ -0,0 +1,11 @@ +export * from "./logger"; +export * from "./repack-tracker"; +export * from "./steam"; +export * from "./steam-250"; +export * from "./steam-grid"; +export * from "./update-resolver"; +export * from "./window-manager"; +export * from "./fifo"; +export * from "./torrent-client"; +export * from "./how-long-to-beat"; +export * from "./process-watcher"; diff --git a/src/main/services/logger.ts b/src/main/services/logger.ts new file mode 100644 index 00000000..07a5d153 --- /dev/null +++ b/src/main/services/logger.ts @@ -0,0 +1,11 @@ +import winston from "winston"; + +export const logger = winston.createLogger({ + level: "info", + format: winston.format.json(), + transports: [ + new winston.transports.File({ filename: "error.log", level: "error" }), + new winston.transports.File({ filename: "info.log", level: "info" }), + new winston.transports.File({ filename: "combined.log" }), + ], +}); diff --git a/src/main/services/process-watcher.ts b/src/main/services/process-watcher.ts new file mode 100644 index 00000000..96244a60 --- /dev/null +++ b/src/main/services/process-watcher.ts @@ -0,0 +1,80 @@ +import path from "node:path"; + +import { IsNull, Not } from "typeorm"; + +import { gameRepository } from "@main/repository"; +import { getProcesses } from "@main/helpers"; +import { WindowManager } from "./window-manager"; + +const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); + +export const startProcessWatcher = async () => { + const sleepTime = 100; + const gamesPlaytime = new Map(); + + // eslint-disable-next-line no-constant-condition + while (true) { + const games = await gameRepository.find({ + where: { + executablePath: Not(IsNull()), + }, + }); + + const processes = await getProcesses(); + + for (const game of games) { + const gameProcess = processes.find((runningProcess) => { + const basename = path.win32.basename(game.executablePath); + const basenameWithoutExtension = path.win32.basename( + game.executablePath, + path.extname(game.executablePath) + ); + + if (process.platform === "win32") { + return runningProcess.name === basename; + } + + return [basename, basenameWithoutExtension].includes( + runningProcess.name + ); + }); + + if (gameProcess) { + if (gamesPlaytime.has(game.id)) { + const zero = gamesPlaytime.get(game.id); + const delta = performance.now() - zero; + + if (WindowManager.mainWindow) { + WindowManager.mainWindow.webContents.send("on-playtime", game.id); + } + + await gameRepository.update(game.id, { + playTimeInMilliseconds: game.playTimeInMilliseconds + delta, + }); + + gameRepository.update(game.id, { + lastTimePlayed: new Date().toUTCString(), + }); + + gamesPlaytime.set(game.id, performance.now()); + await sleep(sleepTime); + continue; + } + + gamesPlaytime.set(game.id, performance.now()); + + await sleep(sleepTime); + continue; + } + + if (gamesPlaytime.has(game.id)) { + gamesPlaytime.delete(game.id); + if (WindowManager.mainWindow) { + WindowManager.mainWindow.webContents.send("on-game-close", game.id); + } + } + + await sleep(sleepTime); + } + } +}; diff --git a/src/main/services/repack-tracker/1337x.ts b/src/main/services/repack-tracker/1337x.ts new file mode 100644 index 00000000..1cbafa3b --- /dev/null +++ b/src/main/services/repack-tracker/1337x.ts @@ -0,0 +1,135 @@ +import { JSDOM } from "jsdom"; + +import { formatUploadDate } from "@main/helpers"; + +import { Repack } from "@main/entity"; +import { requestWebPage, savePage } from "./helpers"; +import type { GameRepackInput } from "./helpers"; + +export const request1337x = async (path: string) => + requestWebPage(`https://1337xx.to${path}`); + +/* TODO: $a will often be null */ +const getTorrentDetails = async (path: string) => { + const response = await request1337x(path); + + const { window } = new JSDOM(response); + const { document } = window; + + const $a = window.document.querySelector( + ".torrentdown1" + ) as HTMLAnchorElement; + + const $ul = Array.from( + document.querySelectorAll(".torrent-detail-page .list") + ); + const [$firstColumn, $secondColumn] = $ul; + + if (!$firstColumn || !$secondColumn) { + return { magnet: $a?.href }; + } + + const [_$category, _$type, _$language, $totalSize] = $firstColumn.children; + const [_$downloads, _$lastChecked, $dateUploaded] = $secondColumn.children; + + return { + magnet: $a?.href, + fileSize: $totalSize.querySelector("span").textContent ?? undefined, + uploadDate: formatUploadDate( + $dateUploaded.querySelector("span").textContent! + ), + }; +}; + +export const getTorrentListLastPage = async (user: string) => { + const response = await request1337x(`/user/${user}/1`); + + const { window } = new JSDOM(response); + + const $ul = window.document.querySelector(".pagination > ul"); + + if ($ul) { + const $li = Array.from($ul.querySelectorAll("li")).at(-1); + const text = $li?.textContent; + + if (text === ">>") { + const $previousLi = Array.from($ul.querySelectorAll("li")).at(-2); + return Number($previousLi?.textContent); + } + + return Number(text); + } + + return -1; +}; + +export const extractTorrentsFromDocument = async ( + page: number, + user: string, + document: Document, + existingRepacks: Repack[] = [] +): Promise => { + const $trs = Array.from(document.querySelectorAll("tbody tr")); + + return Promise.all( + $trs.map(async ($tr) => { + const $td = $tr.querySelector("td"); + + const [, $name] = Array.from($td!.querySelectorAll("a")); + const url = $name.href; + const title = $name.textContent ?? ""; + + if (existingRepacks.some((repack) => repack.title === title)) { + return { + title, + magnet: "", + fileSize: null, + uploadDate: null, + repacker: user, + page, + }; + } + + const details = await getTorrentDetails(url); + + return { + title, + magnet: details.magnet, + fileSize: details.fileSize ?? null, + uploadDate: details.uploadDate ?? null, + repacker: user, + page, + }; + }) + ); +}; + +export const getNewRepacksFromUser = async ( + user: string, + existingRepacks: Repack[], + page = 1 +): Promise => { + const response = await request1337x(`/user/${user}/${page}`); + const { window } = new JSDOM(response); + + const repacks = await extractTorrentsFromDocument( + page, + user, + window.document, + existingRepacks + ); + + const newRepacks = repacks.filter( + (repack) => + repack.uploadDate && + !existingRepacks.some( + (existingRepack) => existingRepack.title === repack.title + ) + ); + + if (!newRepacks.length) return; + + await savePage(newRepacks); + + return getNewRepacksFromUser(user, existingRepacks, page + 1); +}; diff --git a/src/main/services/repack-tracker/cpg-repacks.ts b/src/main/services/repack-tracker/cpg-repacks.ts new file mode 100644 index 00000000..0d7c172b --- /dev/null +++ b/src/main/services/repack-tracker/cpg-repacks.ts @@ -0,0 +1,65 @@ +import { JSDOM } from "jsdom"; + +import { Repack } from "@main/entity"; + +import { requestWebPage, savePage } from "./helpers"; +import type { GameRepackInput } from "./helpers"; +import { logger } from "../logger"; + +export const getNewRepacksFromCPG = async ( + existingRepacks: Repack[] = [], + page = 1 +): Promise => { + const data = await requestWebPage(`https://cpgrepacks.site/page/${page}`); + + const { window } = new JSDOM(data); + + const repacks: GameRepackInput[] = []; + + try { + Array.from(window.document.querySelectorAll(".post")).forEach(($post) => { + const $title = $post.querySelector(".entry-title"); + const uploadDate = $post.querySelector("time").getAttribute("datetime"); + + const $downloadInfo = Array.from( + $post.querySelectorAll(".wp-block-heading") + ).find(($heading) => $heading.textContent.startsWith("Download")); + + /* Side note: CPG often misspells "Magnet" as "Magent" */ + const $magnet = Array.from($post.querySelectorAll("a")).find( + ($a) => + $a.textContent.startsWith("Magnet") || + $a.textContent.startsWith("Magent") + ); + + const fileSize = $downloadInfo.textContent + .split("Download link => ") + .at(1); + + repacks.push({ + title: $title.textContent, + fileSize: fileSize ?? "N/A", + magnet: $magnet.href, + repacker: "CPG", + page, + uploadDate: new Date(uploadDate), + }); + }); + } catch (err) { + logger.error(err.message, { method: "getNewRepacksFromCPG" }); + } + + const newRepacks = repacks.filter( + (repack) => + repack.uploadDate && + !existingRepacks.some( + (existingRepack) => existingRepack.title === repack.title + ) + ); + + if (!newRepacks.length) return; + + await savePage(newRepacks); + + return getNewRepacksFromCPG(existingRepacks, page + 1); +}; diff --git a/src/main/services/repack-tracker/gog.ts b/src/main/services/repack-tracker/gog.ts new file mode 100644 index 00000000..73daebf7 --- /dev/null +++ b/src/main/services/repack-tracker/gog.ts @@ -0,0 +1,78 @@ +import { JSDOM, VirtualConsole } from "jsdom"; +import { GameRepackInput, requestWebPage, savePage } from "./helpers"; +import { Repack } from "@main/entity"; +import { logger } from "../logger"; + +const virtualConsole = new VirtualConsole(); + +const getGOGGame = async (url: string) => { + const data = await requestWebPage(url); + const { window } = new JSDOM(data, { virtualConsole }); + + const $modifiedTime = window.document.querySelector( + '[property="article:modified_time"]' + ) as HTMLMetaElement; + + const $em = window.document.querySelector( + "p:not(.lightweight-accordion *) em" + ); + const fileSize = $em.textContent.split("Size: ").at(1); + const $downloadButton = window.document.querySelector( + ".download-btn:not(.lightweight-accordion *)" + ) as HTMLAnchorElement; + + const { searchParams } = new URL($downloadButton.href); + const magnet = Buffer.from(searchParams.get("url"), "base64").toString( + "utf-8" + ); + + return { + fileSize: fileSize ?? "N/A", + uploadDate: new Date($modifiedTime.content), + repacker: "GOG", + magnet, + page: 1, + }; +}; + +export const getNewGOGGames = async (existingRepacks: Repack[] = []) => { + try { + const data = await requestWebPage( + "https://freegogpcgames.com/a-z-games-list/" + ); + + const { window } = new JSDOM(data, { virtualConsole }); + + const $uls = Array.from(window.document.querySelectorAll(".az-columns")); + + for (const $ul of $uls) { + const repacks: GameRepackInput[] = []; + const $lis = Array.from($ul.querySelectorAll("li")); + + for (const $li of $lis) { + const $a = $li.querySelector("a"); + const href = $a.href; + + const title = $a.textContent.trim(); + + const gameExists = existingRepacks.some( + (existingRepack) => existingRepack.title === title + ); + + if (!gameExists) { + try { + const game = await getGOGGame(href); + + repacks.push({ ...game, title }); + } catch (err) { + logger.error(err.message, { method: "getGOGGame", url: href }); + } + } + } + + if (repacks.length) await savePage(repacks); + } + } catch (err) { + logger.error(err.message, { method: "getNewGOGGames" }); + } +}; diff --git a/src/main/services/repack-tracker/helpers.ts b/src/main/services/repack-tracker/helpers.ts new file mode 100644 index 00000000..f30bf355 --- /dev/null +++ b/src/main/services/repack-tracker/helpers.ts @@ -0,0 +1,18 @@ +import { repackRepository } from "@main/repository"; + +import type { GameRepack } from "@types"; + +export type GameRepackInput = Omit< + GameRepack, + "id" | "repackerFriendlyName" | "createdAt" | "updatedAt" +>; + +export const savePage = async (repacks: GameRepackInput[]) => + Promise.all( + repacks.map((repack) => repackRepository.insert(repack).catch(() => {})) + ); + +export const requestWebPage = async (url: string) => + fetch(url, { + method: "GET", + }).then((response) => response.text()); diff --git a/src/main/services/repack-tracker/index.ts b/src/main/services/repack-tracker/index.ts new file mode 100644 index 00000000..fb345fae --- /dev/null +++ b/src/main/services/repack-tracker/index.ts @@ -0,0 +1,5 @@ +export * from "./1337x"; +export * from "./xatab"; +export * from "./cpg-repacks"; +export * from "./gog"; +// export * from "./online-fix"; diff --git a/src/main/services/repack-tracker/online-fix.ts b/src/main/services/repack-tracker/online-fix.ts new file mode 100644 index 00000000..c572629c --- /dev/null +++ b/src/main/services/repack-tracker/online-fix.ts @@ -0,0 +1,207 @@ +import { Repack } from "@main/entity"; +import { savePage } from "./helpers"; +import type { GameRepackInput } from "./helpers"; +import { logger } from "../logger"; +import parseTorrent, { + toMagnetURI, + Instance as TorrentInstance, +} from "parse-torrent"; +import { JSDOM } from "jsdom"; +import { gotScraping } from "got-scraping"; +import { CookieJar } from "tough-cookie"; + +import { format, parse, sub } from "date-fns"; +import { ru } from "date-fns/locale"; +import { decode } from "windows-1251"; +import { onlinefixFormatter } from "@main/helpers"; + +export const getNewRepacksFromOnlineFix = async ( + existingRepacks: Repack[] = [], + page = 1, + cookieJar = new CookieJar() +): Promise => { + const hasCredentials = + import.meta.env.MAIN_VITE_ONLINEFIX_USERNAME && + import.meta.env.MAIN_VITE_ONLINEFIX_PASSWORD; + if (!hasCredentials) return; + + const http = gotScraping.extend({ + headerGeneratorOptions: { + browsers: [ + { + name: "chrome", + minVersion: 87, + maxVersion: 89, + }, + ], + devices: ["desktop"], + locales: ["en-US"], + operatingSystems: ["windows", "linux"], + }, + cookieJar: cookieJar, + }); + + if (page === 1) { + await http.get("https://online-fix.me/"); + const preLogin = + ((await http + .get("https://online-fix.me/engine/ajax/authtoken.php", { + headers: { + "X-Requested-With": "XMLHttpRequest", + Referer: "https://online-fix.me/", + }, + }) + .json()) as { + field: string; + value: string; + }) || undefined; + + if (!preLogin.field || !preLogin.value) return; + + const params = new URLSearchParams({ + login_name: import.meta.env.MAIN_VITE_ONLINEFIX_USERNAME, + login_password: import.meta.env.MAIN_VITE_ONLINEFIX_PASSWORD, + login: "submit", + [preLogin.field]: preLogin.value, + }); + + await http + .post("https://online-fix.me/", { + encoding: "binary", + headers: { + Referer: "https://online-fix.me", + Origin: "https://online-fix.me", + "Content-Type": "application/x-www-form-urlencoded", + }, + body: params.toString(), + }) + .text(); + } + + const pageParams = page > 1 ? `${`/page/${page}`}` : ""; + + const home = await http.get(`https://online-fix.me${pageParams}`, { + encoding: "binary", + }); + const document = new JSDOM(home.body).window.document; + + const repacks: GameRepackInput[] = []; + const articles = Array.from(document.querySelectorAll(".news")); + const totalPages = Number( + document.querySelector("nav > a:nth-child(13)").textContent + ); + + try { + await Promise.all( + articles.map(async (article) => { + const gameName = onlinefixFormatter( + decode(article.querySelector("h2.title")?.textContent?.trim()) + ); + + const gameLink = article.querySelector("a")?.getAttribute("href"); + + if (!gameLink) return; + + const gamePage = await http + .get(gameLink, { + encoding: "binary", + }) + .text(); + + const gameDocument = new JSDOM(gamePage).window.document; + + const uploadDateText = gameDocument.querySelector("time").textContent; + + let decodedDateText = decode(uploadDateText); + + // "Вчера" means yesterday. + if (decodedDateText.includes("Вчера")) { + const yesterday = sub(new Date(), { days: 1 }); + const formattedYesterday = format(yesterday, "d LLLL yyyy", { + locale: ru, + }); + decodedDateText = decodedDateText.replace( + "Вчера", // "Change yesterday to the default expected date format" + formattedYesterday + ); + } + + const uploadDate = parse( + decodedDateText, + "d LLLL yyyy, HH:mm", + new Date(), + { + locale: ru, + } + ); + + const torrentButtons = Array.from( + gameDocument.querySelectorAll("a") + ).filter((a) => a.textContent?.includes("Torrent")); + + const torrentPrePage = torrentButtons[0]?.getAttribute("href"); + if (!torrentPrePage) return; + + const torrentPage = await http + .get(torrentPrePage, { + encoding: "binary", + headers: { + Referer: gameLink, + }, + }) + .text(); + + const torrentDocument = new JSDOM(torrentPage).window.document; + + const torrentLink = torrentDocument + .querySelector("a:nth-child(2)") + ?.getAttribute("href"); + + const torrentFile = Buffer.from( + await http + .get(`${torrentPrePage}/${torrentLink}`, { + responseType: "buffer", + }) + .buffer() + ); + + const torrent = parseTorrent(torrentFile) as TorrentInstance; + const magnetLink = toMagnetURI({ + infoHash: torrent.infoHash, + }); + + const torrentSizeInBytes = torrent.length; + const fileSizeFormatted = + torrentSizeInBytes >= 1024 ** 3 + ? `${(torrentSizeInBytes / 1024 ** 3).toFixed(1)}GBs` + : `${(torrentSizeInBytes / 1024 ** 2).toFixed(1)}MBs`; + + repacks.push({ + fileSize: fileSizeFormatted, + magnet: magnetLink, + page: 1, + repacker: "onlinefix", + title: gameName, + uploadDate: uploadDate, + }); + }) + ); + } catch (err) { + logger.error(err.message, { method: "getNewRepacksFromOnlineFix" }); + } + + const newRepacks = repacks.filter( + (repack) => + repack.uploadDate && + !existingRepacks.some( + (existingRepack) => existingRepack.title === repack.title + ) + ); + + if (!newRepacks.length) return; + if (page === totalPages) return; + + await savePage(newRepacks); + + return getNewRepacksFromOnlineFix(existingRepacks, page + 1, cookieJar); +}; diff --git a/src/main/services/repack-tracker/xatab.ts b/src/main/services/repack-tracker/xatab.ts new file mode 100644 index 00000000..91a0a4c4 --- /dev/null +++ b/src/main/services/repack-tracker/xatab.ts @@ -0,0 +1,95 @@ +import { JSDOM } from "jsdom"; + +import parseTorrent, { toMagnetURI } from "parse-torrent"; + +import { Repack } from "@main/entity"; +import { logger } from "../logger"; +import { requestWebPage, savePage } from "./helpers"; +import type { GameRepackInput } from "./helpers"; + +const getTorrentBuffer = (url: string) => + fetch(url, { method: "GET" }).then((response) => + response.arrayBuffer().then((buffer) => Buffer.from(buffer)) + ); + +const formatXatabDate = (str: string) => { + const date = new Date(); + + const [day, month, year] = str.split("."); + + date.setDate(Number(day)); + date.setMonth(Number(month) - 1); + date.setFullYear(Number(year)); + date.setHours(0, 0, 0, 0); + + return date; +}; + +const formatXatabDownloadSize = (str: string) => + str.replace(",", ".").replace(/Гб/g, "GB").replace(/Мб/g, "MB"); + +const getXatabRepack = async (url: string) => { + const data = await requestWebPage(url); + const { window } = new JSDOM(data); + + const $uploadDate = window.document.querySelector(".entry__date"); + const $size = window.document.querySelector(".entry__info-size"); + + const $downloadButton = window.document.querySelector( + ".download-torrent" + ) as HTMLAnchorElement; + + if (!$downloadButton) throw new Error("Download button not found"); + + const torrentBuffer = await getTorrentBuffer($downloadButton.href); + + return { + fileSize: formatXatabDownloadSize($size.textContent).toUpperCase(), + magnet: toMagnetURI({ + infoHash: parseTorrent(torrentBuffer).infoHash, + }), + uploadDate: formatXatabDate($uploadDate.textContent), + }; +}; + +export const getNewRepacksFromXatab = async ( + existingRepacks: Repack[] = [], + page = 1 +): Promise => { + const data = await requestWebPage(`https://byxatab.com/page/${page}`); + + const { window } = new JSDOM(data); + + const repacks: GameRepackInput[] = []; + + for (const $a of Array.from( + window.document.querySelectorAll(".entry__title a") + )) { + try { + const repack = await getXatabRepack(($a as HTMLAnchorElement).href); + + repacks.push({ + title: $a.textContent, + repacker: "Xatab", + ...repack, + page, + }); + } catch (err) { + logger.error(err.message, { method: "getNewRepacksFromXatab" }); + } + } + + const newRepacks = repacks.filter( + (repack) => + repack.uploadDate && + !existingRepacks.some( + (existingRepack) => existingRepack.title === repack.title + ) + ); + + if (!newRepacks.length) return; + + await savePage(newRepacks); + + return getNewRepacksFromXatab(existingRepacks, page + 1); +}; diff --git a/src/main/services/steam-250.ts b/src/main/services/steam-250.ts new file mode 100644 index 00000000..32ccdc56 --- /dev/null +++ b/src/main/services/steam-250.ts @@ -0,0 +1,34 @@ +import axios from "axios"; +import { JSDOM } from "jsdom"; +import { shuffle } from "lodash-es"; + +export const requestSteam250 = async (path: string) => { + return axios.get(`https://steam250.com${path}`).then((response) => { + const { window } = new JSDOM(response.data); + const { document } = window; + + return Array.from(document.querySelectorAll(".appline .title a")).map( + ($title: HTMLAnchorElement) => { + const steamGameUrl = $title.href; + if (!steamGameUrl) return null; + + return { + title: $title.textContent, + objectID: steamGameUrl.split("/").pop(), + }; + } + ); + }); +}; + +const steam250Paths = [ + "/hidden_gems", + `/${new Date().getFullYear()}`, + "/top250", + "/most_played", +]; + +export const getRandomSteam250List = async () => { + const [path] = shuffle(steam250Paths); + return requestSteam250(path); +}; diff --git a/src/main/services/steam-grid.ts b/src/main/services/steam-grid.ts new file mode 100644 index 00000000..9e2ce9d8 --- /dev/null +++ b/src/main/services/steam-grid.ts @@ -0,0 +1,71 @@ +import { getSteamAppAsset } from "@main/helpers"; + +export interface SteamGridResponse { + success: boolean; + data: { + id: number; + }; +} + +export interface SteamGridGameResponse { + data: { + platforms: { + steam: { + metadata: { + clienticon: string; + }; + }; + }; + }; +} + +export const getSteamGridData = async ( + objectID: string, + path: string, + shop: string, + params: Record = {} +): Promise => { + const searchParams = new URLSearchParams(params); + + const response = await fetch( + `https://www.steamgriddb.com/api/v2/${path}/${shop}/${objectID}?${searchParams.toString()}`, + { + method: "GET", + headers: { + Authorization: `Bearer ${import.meta.env.MAIN_VITE_STEAMGRIDDB_API_KEY}`, + }, + } + ); + + return response.json(); +}; + +export const getSteamGridGameById = async ( + id: number +): Promise => { + const response = await fetch( + `https://www.steamgriddb.com/api/public/game/${id}`, + { + method: "GET", + headers: { + Referer: "https://www.steamgriddb.com/", + }, + } + ); + + return response.json(); +}; + +export const getSteamGameIconUrl = async (objectID: string) => { + const { + data: { id: steamGridGameId }, + } = await getSteamGridData(objectID, "games", "steam"); + + const steamGridGame = await getSteamGridGameById(steamGridGameId); + + return getSteamAppAsset( + "icon", + objectID, + steamGridGame.data.platforms.steam.metadata.clienticon + ); +}; diff --git a/src/main/services/steam.ts b/src/main/services/steam.ts new file mode 100644 index 00000000..0f2d4987 --- /dev/null +++ b/src/main/services/steam.ts @@ -0,0 +1,35 @@ +import axios from "axios"; + +import type { SteamAppDetails } from "@types"; + +import { logger } from "./logger"; + +export interface SteamAppDetailsResponse { + [key: string]: { + success: boolean; + data: SteamAppDetails; + }; +} + +export const getSteamAppDetails = async ( + objectID: string, + language: string +) => { + const searchParams = new URLSearchParams({ + appids: objectID, + l: language, + }); + + return axios + .get( + `http://store.steampowered.com/api/appdetails?${searchParams.toString()}` + ) + .then((response) => { + if (response.data[objectID].success) return response.data[objectID].data; + return null; + }) + .catch((err) => { + logger.error(err, { method: "getSteamAppDetails" }); + throw new Error(err); + }); +}; diff --git a/src/main/services/torrent-client.ts b/src/main/services/torrent-client.ts new file mode 100644 index 00000000..fa1cd59d --- /dev/null +++ b/src/main/services/torrent-client.ts @@ -0,0 +1,170 @@ +import path from "node:path"; +import cp from "node:child_process"; +import fs from "node:fs"; +import * as Sentry from "@sentry/electron/main"; +import { Notification, app, dialog } from "electron"; +import type { QueryDeepPartialEntity } from "typeorm/query-builder/QueryPartialEntity"; + +import { Game } from "@main/entity"; +import { gameRepository, userPreferencesRepository } from "@main/repository"; +import { t } from "i18next"; +import { WindowManager } from "./window-manager"; + +const binaryNameByPlatform: Partial> = { + darwin: "hydra-download-manager", + linux: "hydra-download-manager", + win32: "hydra-download-manager.exe", +}; + +enum TorrentState { + CheckingFiles = 1, + DownloadingMetadata = 2, + Downloading = 3, + Finished = 4, + Seeding = 5, +} + +export interface TorrentUpdate { + gameId: number; + progress: number; + downloadSpeed: number; + timeRemaining: number; + numPeers: number; + numSeeds: number; + status: TorrentState; + folderName: string; + fileSize: number; + bytesDownloaded: number; +} + +export const BITTORRENT_PORT = "5881"; + +export class TorrentClient { + public static startTorrentClient( + writePipePath: string, + readPipePath: string + ) { + const commonArgs = [BITTORRENT_PORT, writePipePath, readPipePath]; + + if (app.isPackaged) { + const binaryName = binaryNameByPlatform[process.platform]; + const binaryPath = path.join( + process.resourcesPath, + "dist", + "hydra-download-manager", + binaryName + ); + + if (!fs.existsSync(binaryPath)) { + dialog.showErrorBox( + "Fatal", + "Hydra download manager binary not found. Please check if it has been removed by Windows Defender." + ); + + app.quit(); + } + + cp.spawn(binaryPath, commonArgs, { + stdio: "inherit", + windowsHide: true, + }); + return; + } + + const scriptPath = path.join( + __dirname, + "..", + "..", + "torrent-client", + "main.py" + ); + + cp.spawn("python3", [scriptPath, ...commonArgs], { + stdio: "inherit", + }); + } + + private static getTorrentStateName(state: TorrentState) { + if (state === TorrentState.CheckingFiles) return "checking_files"; + if (state === TorrentState.Downloading) return "downloading"; + if (state === TorrentState.DownloadingMetadata) + return "downloading_metadata"; + if (state === TorrentState.Finished) return "finished"; + if (state === TorrentState.Seeding) return "seeding"; + return ""; + } + + private static getGameProgress(game: Game) { + if (game.status === "checking_files") return game.fileVerificationProgress; + return game.progress; + } + + public static async onSocketData(data: Buffer) { + const message = Buffer.from(data).toString("utf-8"); + + try { + const payload = JSON.parse(message) as TorrentUpdate; + + const updatePayload: QueryDeepPartialEntity = { + bytesDownloaded: payload.bytesDownloaded, + status: this.getTorrentStateName(payload.status), + }; + + if (payload.status === TorrentState.CheckingFiles) { + updatePayload.fileVerificationProgress = payload.progress; + } else { + if (payload.folderName) { + updatePayload.folderName = payload.folderName; + updatePayload.fileSize = payload.fileSize; + } + } + + if ( + [TorrentState.Downloading, TorrentState.Seeding].includes( + payload.status + ) + ) { + updatePayload.progress = payload.progress; + } + + await gameRepository.update({ id: payload.gameId }, updatePayload); + + const game = await gameRepository.findOne({ + where: { id: payload.gameId }, + relations: { repack: true }, + }); + + if (game.progress === 1) { + const userPreferences = await userPreferencesRepository.findOne({ + where: { id: 1 }, + }); + + if (userPreferences?.downloadNotificationsEnabled) { + new Notification({ + title: t("download_complete", { + ns: "notifications", + lng: userPreferences.language, + }), + body: t("game_ready_to_install", { + ns: "notifications", + lng: userPreferences.language, + title: game.title, + }), + }).show(); + } + } + + if (WindowManager.mainWindow) { + const progress = this.getGameProgress(game); + WindowManager.mainWindow.setProgressBar(progress === 1 ? -1 : progress); + + WindowManager.mainWindow.webContents.send( + "on-download-progress", + JSON.parse(JSON.stringify({ ...payload, game })) + ); + } + } catch (err) { + Sentry.captureException(err); + } + } +} diff --git a/src/main/services/update-resolver.ts b/src/main/services/update-resolver.ts new file mode 100644 index 00000000..8701d17d --- /dev/null +++ b/src/main/services/update-resolver.ts @@ -0,0 +1,159 @@ +import path from "node:path"; +import { app } from "electron"; + +import { chunk } from "lodash-es"; + +import { createDataSource, dataSource } from "@main/data-source"; +import { Repack, RepackerFriendlyName, SteamGame } from "@main/entity"; +import { + migrationScriptRepository, + repackRepository, + repackerFriendlyNameRepository, + steamGameRepository, +} from "@main/repository"; +import { MigrationScript } from "@main/entity/migration-script.entity"; +import { Like } from "typeorm"; + +const migrationScripts = { + /* + 0.0.6 -> 0.0.7 + Xatab repacks were previously created with an incorrect upload date. + This migration script will update the upload date of all Xatab repacks. + */ + "0.0.7": async (updateRepacks: Repack[]) => { + const VERSION = "0.0.7"; + + const migrationScript = await migrationScriptRepository.findOne({ + where: { + version: VERSION, + }, + }); + + if (!migrationScript) { + const xatabRepacks = updateRepacks.filter( + (repack) => repack.repacker === "Xatab" + ); + + await dataSource.transaction(async (transactionalEntityManager) => { + await Promise.all( + xatabRepacks.map((repack) => + transactionalEntityManager.getRepository(Repack).update( + { + title: repack.title, + repacker: repack.repacker, + }, + { + uploadDate: repack.uploadDate, + } + ) + ) + ); + + await transactionalEntityManager.getRepository(MigrationScript).insert({ + version: VERSION, + }); + }); + } + }, + /* + 1.0.1 -> 1.1.0 + A few torrents scraped from 1337x were previously created with an incorrect upload date. + */ + "1.1.0": async () => { + const VERSION = "1.1.0"; + + const migrationScript = await migrationScriptRepository.findOne({ + where: { + version: VERSION, + }, + }); + + if (!migrationScript) { + await dataSource.transaction(async (transactionalEntityManager) => { + const repacks = await transactionalEntityManager + .getRepository(Repack) + .find({ + where: { + uploadDate: Like("1%"), + }, + }); + + await Promise.all( + repacks.map(async (repack) => { + return transactionalEntityManager + .getRepository(Repack) + .update( + { id: repack.id }, + { uploadDate: new Date(repack.uploadDate) } + ); + }) + ); + + await transactionalEntityManager.getRepository(MigrationScript).insert({ + version: VERSION, + }); + }); + } + }, +}; + +export const runMigrationScripts = async (updateRepacks: Repack[]) => { + return Promise.all( + Object.values(migrationScripts).map((migrationScript) => { + return migrationScript(updateRepacks); + }) + ); +}; + +export const resolveDatabaseUpdates = async () => { + const updateDataSource = createDataSource({ + database: app.isPackaged + ? path.join(process.resourcesPath, "hydra.db") + : path.join(__dirname, "..", "..", "resources", "hydra.db"), + }); + + return updateDataSource.initialize().then(async () => { + const updateRepackRepository = updateDataSource.getRepository(Repack); + const updateRepackerFriendlyNameRepository = + updateDataSource.getRepository(RepackerFriendlyName); + const updateSteamGameRepository = updateDataSource.getRepository(SteamGame); + + const [updateRepacks, updateSteamGames, updateRepackerFriendlyNames] = + await Promise.all([ + updateRepackRepository.find(), + updateSteamGameRepository.find(), + updateRepackerFriendlyNameRepository.find(), + ]); + + await runMigrationScripts(updateRepacks); + + await repackerFriendlyNameRepository + .createQueryBuilder() + .insert() + .values(updateRepackerFriendlyNames) + .orIgnore() + .execute(); + + const updateRepacksChunks = chunk(updateRepacks, 800); + + for (const chunk of updateRepacksChunks) { + await repackRepository + .createQueryBuilder() + .insert() + .values(chunk) + .orIgnore() + .execute(); + } + + const steamGamesChunks = chunk(updateSteamGames, 800); + + for (const chunk of steamGamesChunks) { + await steamGameRepository + .createQueryBuilder() + .insert() + .values(chunk) + .orIgnore() + .execute(); + } + }); +}; diff --git a/src/main/services/window-manager.ts b/src/main/services/window-manager.ts new file mode 100644 index 00000000..d8b174a2 --- /dev/null +++ b/src/main/services/window-manager.ts @@ -0,0 +1,109 @@ +import { BrowserWindow, Menu, Tray, app } from "electron"; +import { electronApp, optimizer, is } from "@electron-toolkit/utils"; +import { t } from "i18next"; +import path from "node:path"; + +export class WindowManager { + public static mainWindow: Electron.BrowserWindow | null = null; + + public static createMainWindow() { + // Create the browser window. + this.mainWindow = new BrowserWindow({ + width: 1200, + height: 720, + minWidth: 1024, + minHeight: 540, + titleBarStyle: "hidden", + // icon: path.join(__dirname, "..", "..", "images", "icon.png"), + trafficLightPosition: { x: 16, y: 16 }, + titleBarOverlay: { + symbolColor: "#DADBE1", + color: "#151515", + height: 34, + }, + webPreferences: { + preload: path.join(__dirname, "../preload/index.mjs"), + sandbox: false, + }, + }); + + this.mainWindow.removeMenu(); + + // HMR for renderer base on electron-vite cli. + // Load the remote URL for development or the local html file for production. + if (is.dev && process.env["ELECTRON_RENDERER_URL"]) { + this.mainWindow.loadURL(process.env["ELECTRON_RENDERER_URL"]); + } else { + this.mainWindow.loadFile(path.join(__dirname, "../renderer/index.html")); + } + + this.mainWindow.webContents.on("did-finish-load", () => { + if (!app.isPackaged) { + // Open the DevTools. + this.mainWindow.webContents.openDevTools(); + } + }); + + this.mainWindow.on("close", () => { + WindowManager.mainWindow.setProgressBar(-1); + }); + } + + public static redirect(path: string) { + if (!this.mainWindow) this.createMainWindow(); + this.mainWindow.loadURL(`${MAIN_WINDOW_WEBPACK_ENTRY}#${path}`); + + if (this.mainWindow.isMinimized()) this.mainWindow.restore(); + this.mainWindow.focus(); + } + + public static createSystemTray(language: string) { + const tray = new Tray( + app.isPackaged + ? path.join(process.resourcesPath, "icon_tray.png") + : path.join(__dirname, "..", "..", "resources", "icon_tray.png") + ); + + const contextMenu = Menu.buildFromTemplate([ + { + label: t("open", { + ns: "system_tray", + lng: language, + }), + type: "normal", + click: () => { + if (this.mainWindow) { + this.mainWindow.show(); + } else { + this.createMainWindow(); + } + }, + }, + { + label: t("quit", { + ns: "system_tray", + lng: language, + }), + type: "normal", + click: () => app.quit(), + }, + ]); + + tray.setToolTip("Hydra"); + tray.setContextMenu(contextMenu); + + if (process.platform === "win32") { + tray.addListener("click", () => { + if (this.mainWindow) { + if (WindowManager.mainWindow.isMinimized()) + WindowManager.mainWindow.restore(); + + WindowManager.mainWindow.focus(); + return; + } + + this.createMainWindow(); + }); + } + } +} diff --git a/src/main/state-manager.ts b/src/main/state-manager.ts new file mode 100644 index 00000000..6dec3985 --- /dev/null +++ b/src/main/state-manager.ts @@ -0,0 +1,33 @@ +import type { Repack, RepackerFriendlyName, SteamGame } from "@main/entity"; + +interface State { + repacks: Repack[]; + repackersFriendlyNames: RepackerFriendlyName[]; + steamGames: SteamGame[]; + eventResults: Map<[string, any[]], any>; +} + +const initialState: State = { + repacks: [], + repackersFriendlyNames: [], + steamGames: [], + eventResults: new Map(), +}; + +export class StateManager { + private state = initialState; + + public setValue(key: T, value: State[T]) { + this.state = { ...this.state, [key]: value }; + } + + public getValue(key: T) { + return this.state[key]; + } + + public clearValue(key: T) { + this.state = { ...this.state, [key]: initialState[key] }; + } +} + +export const stateManager = new StateManager(); diff --git a/src/main/vite-env.d.ts b/src/main/vite-env.d.ts new file mode 100644 index 00000000..2c277d37 --- /dev/null +++ b/src/main/vite-env.d.ts @@ -0,0 +1,12 @@ +/// + +interface ImportMetaEnv { + readonly MAIN_VITE_STEAMGRIDDB_API_KEY: string; + readonly MAIN_VITE_ONLINEFIX_USERNAME: string; + readonly MAIN_VITE_ONLINEFIX_PASSWORD: string; + readonly MAIN_VITE_SENTRY_DSN: string; +} + +interface ImportMeta { + readonly env: ImportMetaEnv; +} diff --git a/src/preload/index.d.ts b/src/preload/index.d.ts new file mode 100644 index 00000000..97dcca0b --- /dev/null +++ b/src/preload/index.d.ts @@ -0,0 +1,104 @@ +// See the Electron documentation for details on how to use preload scripts: +// https://www.electronjs.org/docs/latest/tutorial/process-model#preload-scripts +import { contextBridge, ipcRenderer } from "electron"; + +import type { + CatalogueCategory, + GameShop, + TorrentProgress, + UserPreferences, +} from "@types"; + +contextBridge.exposeInMainWorld("electron", { + /* Torrenting */ + startGameDownload: ( + repackId: number, + objectID: string, + title: string, + shop: GameShop + ) => ipcRenderer.invoke("startGameDownload", repackId, objectID, title, shop), + cancelGameDownload: (gameId: number) => + ipcRenderer.invoke("cancelGameDownload", gameId), + pauseGameDownload: (gameId: number) => + ipcRenderer.invoke("pauseGameDownload", gameId), + resumeGameDownload: (gameId: number) => + ipcRenderer.invoke("resumeGameDownload", gameId), + onDownloadProgress: (cb: (value: TorrentProgress) => void) => { + const listener = ( + _event: Electron.IpcRendererEvent, + value: TorrentProgress + ) => cb(value); + ipcRenderer.on("on-download-progress", listener); + return () => ipcRenderer.removeListener("on-download-progress", listener); + }, + + /* Catalogue */ + searchGames: (query: string) => ipcRenderer.invoke("searchGames", query), + getCatalogue: (category: CatalogueCategory) => + ipcRenderer.invoke("getCatalogue", category), + getGameShopDetails: (objectID: string, shop: GameShop, language: string) => + ipcRenderer.invoke("getGameShopDetails", objectID, shop, language), + getRandomGame: () => ipcRenderer.invoke("getRandomGame"), + getHowLongToBeat: (objectID: string, shop: GameShop, title: string) => + ipcRenderer.invoke("getHowLongToBeat", objectID, shop, title), + getGames: (take?: number, prevCursor?: number) => + ipcRenderer.invoke("getGames", take, prevCursor), + + /* User preferences */ + getUserPreferences: () => ipcRenderer.invoke("getUserPreferences"), + updateUserPreferences: (preferences: UserPreferences) => + ipcRenderer.invoke("updateUserPreferences", preferences), + + /* Library */ + addGameToLibrary: ( + objectID: string, + title: string, + shop: GameShop, + executablePath: string + ) => + ipcRenderer.invoke( + "addGameToLibrary", + objectID, + title, + shop, + executablePath + ), + getLibrary: () => ipcRenderer.invoke("getLibrary"), + getRepackersFriendlyNames: () => + ipcRenderer.invoke("getRepackersFriendlyNames"), + openGameInstaller: (gameId: number) => + ipcRenderer.invoke("openGameInstaller", gameId), + openGame: (gameId: number, executablePath: string) => + ipcRenderer.invoke("openGame", gameId, executablePath), + closeGame: (gameId: number) => ipcRenderer.invoke("closeGame", gameId), + removeGame: (gameId: number) => ipcRenderer.invoke("removeGame", gameId), + deleteGameFolder: (gameId: number) => + ipcRenderer.invoke("deleteGameFolder", gameId), + getGameByObjectID: (objectID: string) => + ipcRenderer.invoke("getGameByObjectID", objectID), + onPlaytime: (cb: (gameId: number) => void) => { + const listener = (_event: Electron.IpcRendererEvent, gameId: number) => + cb(gameId); + ipcRenderer.on("on-playtime", listener); + return () => ipcRenderer.removeListener("on-playtime", listener); + }, + onGameClose: (cb: (gameId: number) => void) => { + const listener = (_event: Electron.IpcRendererEvent, gameId: number) => + cb(gameId); + ipcRenderer.on("on-game-close", listener); + return () => ipcRenderer.removeListener("on-game-close", listener); + }, + + /* Hardware */ + getDiskFreeSpace: () => ipcRenderer.invoke("getDiskFreeSpace"), + + /* Misc */ + getOrCacheImage: (url: string) => ipcRenderer.invoke("getOrCacheImage", url), + ping: () => ipcRenderer.invoke("ping"), + getVersion: () => ipcRenderer.invoke("getVersion"), + getDefaultDownloadsPath: () => ipcRenderer.invoke("getDefaultDownloadsPath"), + openExternal: (src: string) => ipcRenderer.invoke("openExternal", src), + showOpenDialog: (options: Electron.OpenDialogOptions) => + ipcRenderer.invoke("showOpenDialog", options), + platform: process.platform, +}); diff --git a/src/preload/index.ts b/src/preload/index.ts new file mode 100644 index 00000000..97dcca0b --- /dev/null +++ b/src/preload/index.ts @@ -0,0 +1,104 @@ +// See the Electron documentation for details on how to use preload scripts: +// https://www.electronjs.org/docs/latest/tutorial/process-model#preload-scripts +import { contextBridge, ipcRenderer } from "electron"; + +import type { + CatalogueCategory, + GameShop, + TorrentProgress, + UserPreferences, +} from "@types"; + +contextBridge.exposeInMainWorld("electron", { + /* Torrenting */ + startGameDownload: ( + repackId: number, + objectID: string, + title: string, + shop: GameShop + ) => ipcRenderer.invoke("startGameDownload", repackId, objectID, title, shop), + cancelGameDownload: (gameId: number) => + ipcRenderer.invoke("cancelGameDownload", gameId), + pauseGameDownload: (gameId: number) => + ipcRenderer.invoke("pauseGameDownload", gameId), + resumeGameDownload: (gameId: number) => + ipcRenderer.invoke("resumeGameDownload", gameId), + onDownloadProgress: (cb: (value: TorrentProgress) => void) => { + const listener = ( + _event: Electron.IpcRendererEvent, + value: TorrentProgress + ) => cb(value); + ipcRenderer.on("on-download-progress", listener); + return () => ipcRenderer.removeListener("on-download-progress", listener); + }, + + /* Catalogue */ + searchGames: (query: string) => ipcRenderer.invoke("searchGames", query), + getCatalogue: (category: CatalogueCategory) => + ipcRenderer.invoke("getCatalogue", category), + getGameShopDetails: (objectID: string, shop: GameShop, language: string) => + ipcRenderer.invoke("getGameShopDetails", objectID, shop, language), + getRandomGame: () => ipcRenderer.invoke("getRandomGame"), + getHowLongToBeat: (objectID: string, shop: GameShop, title: string) => + ipcRenderer.invoke("getHowLongToBeat", objectID, shop, title), + getGames: (take?: number, prevCursor?: number) => + ipcRenderer.invoke("getGames", take, prevCursor), + + /* User preferences */ + getUserPreferences: () => ipcRenderer.invoke("getUserPreferences"), + updateUserPreferences: (preferences: UserPreferences) => + ipcRenderer.invoke("updateUserPreferences", preferences), + + /* Library */ + addGameToLibrary: ( + objectID: string, + title: string, + shop: GameShop, + executablePath: string + ) => + ipcRenderer.invoke( + "addGameToLibrary", + objectID, + title, + shop, + executablePath + ), + getLibrary: () => ipcRenderer.invoke("getLibrary"), + getRepackersFriendlyNames: () => + ipcRenderer.invoke("getRepackersFriendlyNames"), + openGameInstaller: (gameId: number) => + ipcRenderer.invoke("openGameInstaller", gameId), + openGame: (gameId: number, executablePath: string) => + ipcRenderer.invoke("openGame", gameId, executablePath), + closeGame: (gameId: number) => ipcRenderer.invoke("closeGame", gameId), + removeGame: (gameId: number) => ipcRenderer.invoke("removeGame", gameId), + deleteGameFolder: (gameId: number) => + ipcRenderer.invoke("deleteGameFolder", gameId), + getGameByObjectID: (objectID: string) => + ipcRenderer.invoke("getGameByObjectID", objectID), + onPlaytime: (cb: (gameId: number) => void) => { + const listener = (_event: Electron.IpcRendererEvent, gameId: number) => + cb(gameId); + ipcRenderer.on("on-playtime", listener); + return () => ipcRenderer.removeListener("on-playtime", listener); + }, + onGameClose: (cb: (gameId: number) => void) => { + const listener = (_event: Electron.IpcRendererEvent, gameId: number) => + cb(gameId); + ipcRenderer.on("on-game-close", listener); + return () => ipcRenderer.removeListener("on-game-close", listener); + }, + + /* Hardware */ + getDiskFreeSpace: () => ipcRenderer.invoke("getDiskFreeSpace"), + + /* Misc */ + getOrCacheImage: (url: string) => ipcRenderer.invoke("getOrCacheImage", url), + ping: () => ipcRenderer.invoke("ping"), + getVersion: () => ipcRenderer.invoke("getVersion"), + getDefaultDownloadsPath: () => ipcRenderer.invoke("getDefaultDownloadsPath"), + openExternal: (src: string) => ipcRenderer.invoke("openExternal", src), + showOpenDialog: (options: Electron.OpenDialogOptions) => + ipcRenderer.invoke("showOpenDialog", options), + platform: process.platform, +}); diff --git a/src/renderer/index.html b/src/renderer/index.html new file mode 100644 index 00000000..027e5085 --- /dev/null +++ b/src/renderer/index.html @@ -0,0 +1,17 @@ + + + + + Electron + + + + + +

+ + + diff --git a/src/renderer/src/app.css.ts b/src/renderer/src/app.css.ts new file mode 100644 index 00000000..fc104adc --- /dev/null +++ b/src/renderer/src/app.css.ts @@ -0,0 +1,107 @@ +import { ComplexStyleRule, globalStyle, style } from "@vanilla-extract/css"; +import { SPACING_UNIT, vars } from "./theme.css"; + +globalStyle("*", { + boxSizing: "border-box", +}); + +globalStyle("::-webkit-scrollbar", { + width: "9px", +}); + +globalStyle("::-webkit-scrollbar-track", { + backgroundColor: "rgba(255, 255, 255, 0.03)", +}); + +globalStyle("::-webkit-scrollbar-thumb", { + backgroundColor: "rgba(255, 255, 255, 0.08)", + borderRadius: "24px", +}); + +globalStyle("html, body, #root, main", { + height: "100%", +}); + +globalStyle("body", { + overflow: "hidden", + userSelect: "none", + fontFamily: "'Fira Mono', monospace", + background: vars.color.background, + color: vars.color.bodyText, + margin: "0", +}); + +globalStyle("button", { + padding: "0", + backgroundColor: "transparent", + border: "none", + fontFamily: "inherit", + fontSize: vars.size.bodyFontSize, +}); + +globalStyle("h1, h2, h3, h4, h5, h6, p", { + margin: 0, +}); + +globalStyle("#root, main", { + display: "flex", +}); + +globalStyle("#root", { + flexDirection: "column", +}); + +globalStyle("main", { + overflow: "hidden", +}); + +globalStyle( + "input::-webkit-outer-spin-button, input::-webkit-inner-spin-button", + { + WebkitAppearance: "none", + margin: "0", + } +); + +globalStyle("label", { + fontSize: vars.size.bodyFontSize, +}); + +globalStyle("input[type=number]", { + MozAppearance: "textfield", +}); + +globalStyle("img", { + WebkitUserDrag: "none", +} as Record); + +export const container = style({ + width: "100%", + height: "100%", + overflow: "hidden", + display: "flex", + flexDirection: "column", +}); + +export const content = style({ + overflowY: "auto", + alignItems: "center", + display: "flex", + flexDirection: "column", + position: "relative", + height: "100%", + background: `linear-gradient(0deg, ${vars.color.darkBackground} 50%, ${vars.color.background} 100%)`, +}); + +export const titleBar = style({ + display: "flex", + width: "100%", + height: "35px", + minHeight: "35px", + backgroundColor: vars.color.darkBackground, + alignItems: "center", + padding: `0 ${SPACING_UNIT * 2}px`, + WebkitAppRegion: "drag", + zIndex: "2", + borderBottom: `1px solid ${vars.color.borderColor}`, +} as ComplexStyleRule); diff --git a/src/renderer/src/app.tsx b/src/renderer/src/app.tsx new file mode 100644 index 00000000..4e633bcf --- /dev/null +++ b/src/renderer/src/app.tsx @@ -0,0 +1,122 @@ +import { useCallback, useEffect, useRef } from "react"; + +import { Sidebar, BottomPanel, Header } from "@renderer/components"; + +import { + useAppDispatch, + useAppSelector, + useDownload, + useLibrary, +} from "@renderer/hooks"; + +import * as styles from "./app.css"; +import { themeClass } from "./theme.css"; + +import { Outlet, useLocation, useNavigate } from "react-router-dom"; +import { + setSearch, + clearSearch, + setUserPreferences, + setRepackersFriendlyNames, +} from "@renderer/features"; + +document.body.classList.add(themeClass); + +export function App() { + const contentRef = useRef(null); + const { updateLibrary } = useLibrary(); + + const { clearDownload, addPacket } = useDownload(); + + const dispatch = useAppDispatch(); + + const navigate = useNavigate(); + const location = useLocation(); + + const search = useAppSelector((state) => state.search.value); + + useEffect(() => { + Promise.all([ + window.electron.getUserPreferences(), + window.electron.getRepackersFriendlyNames(), + updateLibrary(), + ]).then(([preferences, repackersFriendlyNames]) => { + dispatch(setUserPreferences(preferences)); + dispatch(setRepackersFriendlyNames(repackersFriendlyNames)); + }); + }, [navigate, location.pathname, dispatch, updateLibrary]); + + useEffect(() => { + const unsubscribe = window.electron.onDownloadProgress( + (downloadProgress) => { + if (downloadProgress.game.progress === 1) { + clearDownload(); + updateLibrary(); + return; + } + + addPacket(downloadProgress); + } + ); + + return () => { + unsubscribe(); + }; + }, [clearDownload, addPacket, updateLibrary]); + + const handleSearch = useCallback( + (query: string) => { + dispatch(setSearch(query)); + + if (query === "") { + navigate(-1); + return; + } + + const searchParams = new URLSearchParams({ + query, + }); + + navigate(`/search?${searchParams.toString()}`, { + replace: location.pathname.startsWith("/search"), + }); + }, + [dispatch, location.pathname, navigate] + ); + + const handleClear = useCallback(() => { + dispatch(clearSearch()); + navigate(-1); + }, [dispatch, navigate]); + + useEffect(() => { + if (contentRef.current) contentRef.current.scrollTop = 0; + }, [location.pathname, location.search]); + + return ( + <> + {window.electron.platform === "win32" && ( +
+

Hydra

+
+ )} + +
+ + +
+
+ +
+ +
+
+
+ + + ); +} diff --git a/src/renderer/src/assets/discord-icon.svg b/src/renderer/src/assets/discord-icon.svg new file mode 100644 index 00000000..2fba46cd --- /dev/null +++ b/src/renderer/src/assets/discord-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/renderer/src/assets/epic-games-logo.svg b/src/renderer/src/assets/epic-games-logo.svg new file mode 100644 index 00000000..a6c53dbc --- /dev/null +++ b/src/renderer/src/assets/epic-games-logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/renderer/src/assets/lottie/downloading.json b/src/renderer/src/assets/lottie/downloading.json new file mode 100644 index 00000000..1ef705de --- /dev/null +++ b/src/renderer/src/assets/lottie/downloading.json @@ -0,0 +1,843 @@ +{ + "v": "4.8.0", + "meta": { "g": "LottieFiles AE 3.5.6", "a": "", "k": "", "d": "", "tc": "" }, + "fr": 60, + "ip": 0, + "op": 120, + "w": 714, + "h": 678, + "nm": "Pre-comp 1", + "ddd": 0, + "assets": [ + { + "id": "comp_0", + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 4, + "nm": "centro", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.214, "y": 1 }, + "o": { "x": 0.462, "y": 0 }, + "t": 0, + "s": [450, 907, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { "t": 30, "s": [450, 1513, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [-348, -169, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0] + ], + "v": [ + [-348, -420], + [-348, -30] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [0.854901960784, 0.858823529412, 0.882352941176, 1], + "ix": 3 + }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 77, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [-348, -164], "ix": 2 }, + "a": { "a": 0, "k": [-348, -156], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 120, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 2, + "ty": 4, + "nm": "esquerdo", + "parent": 1, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.298], "y": [1] }, + "o": { "x": [0.448], "y": [0] }, + "t": 6, + "s": [43.5] + }, + { "t": 36, "s": [-1] } + ], + "ix": 10 + }, + "p": { "a": 0, "k": [-348.39, -36.55, 0], "ix": 2 }, + "a": { "a": 0, "k": [-2, 84, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0] + ], + "v": [ + [-178, -102], + [-2, 84] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [0.854901960784, 0.858823529412, 0.882352941176, 1], + "ix": 3 + }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 77, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tm", + "s": { "a": 0, "k": 8, "ix": 1 }, + "e": { "a": 0, "k": 100, "ix": 2 }, + "o": { "a": 0, "k": 0, "ix": 3 }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + } + ], + "ip": 0, + "op": 120, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 3, + "ty": 4, + "nm": "direito", + "parent": 1, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.265], "y": [1] }, + "o": { "x": [0.53], "y": [0] }, + "t": 6, + "s": [-43.5] + }, + { "t": 36, "s": [1] } + ], + "ix": 10 + }, + "p": { "a": 0, "k": [-348.39, -36.55, 0], "ix": 2 }, + "a": { "a": 0, "k": [-2, 84, 0], "ix": 1 }, + "s": { "a": 0, "k": [-100, 100, 100], "ix": 6 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0] + ], + "v": [ + [-178, -102], + [-2, 84] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "tm", + "s": { "a": 0, "k": 8, "ix": 1 }, + "e": { "a": 0, "k": 100, "ix": 2 }, + "o": { "a": 0, "k": 0, "ix": 3 }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [0.854901960784, 0.858823529412, 0.882352941176, 1], + "ix": 3 + }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 77, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 4, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 120, + "st": 0, + "bm": 0 + } + ] + }, + { + "id": "comp_1", + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 4, + "nm": "centro", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.569, "y": 1 }, + "o": { "x": 0.809, "y": 0 }, + "t": 0, + "s": [450, 391, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { "t": 30, "s": [450, 997, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [-348, -169, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0] + ], + "v": [ + [-348, -420], + [-348, -30] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [0.854901960784, 0.858823529412, 0.882352941176, 1], + "ix": 3 + }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 77, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [-348, -164], "ix": 2 }, + "a": { "a": 0, "k": [-348, -156], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 120, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 2, + "ty": 4, + "nm": "esquerdo", + "parent": 1, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.552], "y": [1] }, + "o": { "x": [0.702], "y": [0] }, + "t": 0, + "s": [-1] + }, + { "t": 30, "s": [43.5] } + ], + "ix": 10 + }, + "p": { "a": 0, "k": [-348.39, -36.55, 0], "ix": 2 }, + "a": { "a": 0, "k": [-2, 84, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0] + ], + "v": [ + [-178, -102], + [-2, 84] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [0.854901960784, 0.858823529412, 0.882352941176, 1], + "ix": 3 + }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 77, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tm", + "s": { "a": 0, "k": 8, "ix": 1 }, + "e": { "a": 0, "k": 100, "ix": 2 }, + "o": { "a": 0, "k": 0, "ix": 3 }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + } + ], + "ip": 0, + "op": 120, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 3, + "ty": 4, + "nm": "direito", + "parent": 1, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.47], "y": [1] }, + "o": { "x": [0.735], "y": [0] }, + "t": 0, + "s": [1] + }, + { "t": 30, "s": [-43.5] } + ], + "ix": 10 + }, + "p": { "a": 0, "k": [-348.39, -36.55, 0], "ix": 2 }, + "a": { "a": 0, "k": [-2, 84, 0], "ix": 1 }, + "s": { "a": 0, "k": [-100, 100, 100], "ix": 6 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0] + ], + "v": [ + [-178, -102], + [-2, 84] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "tm", + "s": { "a": 0, "k": 8, "ix": 1 }, + "e": { "a": 0, "k": 100, "ix": 2 }, + "o": { "a": 0, "k": 0, "ix": 3 }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [0.854901960784, 0.858823529412, 0.882352941176, 1], + "ix": 3 + }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 77, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 4, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 120, + "st": 0, + "bm": 0 + } + ] + } + ], + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 0, + "nm": "seta 2", + "refId": "comp_0", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [357, -247, 0], "ix": 2 }, + "a": { "a": 0, "k": [450, 960, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } + }, + "ao": 0, + "w": 900, + "h": 1920, + "ip": 30, + "op": 120, + "st": 30, + "bm": 0 + }, + { + "ddd": 0, + "ind": 2, + "ty": 0, + "nm": "seta", + "refId": "comp_1", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [357, 258, 0], "ix": 2 }, + "a": { "a": 0, "k": [450, 345, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } + }, + "ao": 0, + "w": 900, + "h": 690, + "ip": 0, + "op": 120, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 3, + "ty": 4, + "nm": "base Outlines", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [357, 548.713, 0], "ix": 2 }, + "a": { "a": 0, "k": [357.81, 129.934, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 50.043], + [0, 0], + [-21.158, 0], + [0, -21.447], + [0, 0], + [-7.049, 0], + [0, 0], + [0, 7.149], + [0, 0], + [-21.158, 0], + [0, -21.447], + [0, 0], + [49.368, 0] + ], + "o": [ + [-49.369, 0], + [0, 0], + [0, -21.447], + [21.158, 0], + [0, 0], + [0, 7.145], + [0, 0], + [7.053, 0], + [0, 0], + [0, -21.447], + [21.158, 0], + [0, 0], + [0, 50.043], + [0, 0] + ], + "v": [ + [-268.169, 129.445], + [-357.559, 38.834], + [-357.559, -90.61], + [-319.249, -129.445], + [-280.939, -90.61], + [-280.939, 38.834], + [-268.169, 51.778], + [268.169, 51.778], + [280.939, 38.834], + [280.939, -90.61], + [319.249, -129.445], + [357.559, -90.61], + [357.559, 38.834], + [268.169, 129.445] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.865977448108, 0.86824388691, 0.890449075138, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [357.809, 129.695], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 120, + "st": 0, + "bm": 0 + } + ], + "markers": [] +} diff --git a/src/renderer/src/assets/lottie/settings.json b/src/renderer/src/assets/lottie/settings.json new file mode 100644 index 00000000..92fa645e --- /dev/null +++ b/src/renderer/src/assets/lottie/settings.json @@ -0,0 +1,1054 @@ +{ + "v": "4.8.0", + "meta": { "g": "LottieFiles AE 3.5.6", "a": "", "k": "", "d": "", "tc": "" }, + "fr": 60, + "ip": 0, + "op": 120, + "w": 900, + "h": 900, + "nm": "Pre-comp 1", + "ddd": 0, + "assets": [ + { + "id": "comp_0", + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 4, + "nm": "estrela Outlines 2", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.933], "y": [0] }, + "t": 0, + "s": [0] + }, + { "t": 60, "s": [180] } + ], + "ix": 10 + }, + "p": { "a": 0, "k": [450, 450, 0], "ix": 2 }, + "a": { "a": 0, "k": [308.5, 333, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0.011, 34.469], + [34.47, -0.012], + [-0.011, -34.469], + [-34.47, 0.011] + ], + "o": [ + [-0.012, -34.47], + [-34.469, 0.011], + [0.012, 34.47], + [34.469, -0.012] + ], + "v": [ + [62.333, 0.005], + [-0.101, -62.387], + [-62.493, 0.047], + [-0.059, 62.439] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 1, + "ty": "sh", + "ix": 2, + "ks": { + "a": 0, + "k": { + "i": [ + [0, -68.917], + [68.916, 0], + [0, 68.916], + [-68.916, 0] + ], + "o": [ + [0, 68.916], + [-68.916, 0], + [0, -68.917], + [68.916, 0] + ], + "v": [ + [124.725, 0.005], + [-0.059, 124.789], + [-124.843, 0.005], + [-0.059, -124.779] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 2", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 2, + "ty": "sh", + "ix": 3, + "ks": { + "a": 0, + "k": { + "i": [ + [15.804, -1.372], + [1.206, -4.575], + [0, 0], + [18.676, -9.234], + [6.656, -4.451], + [23.252, 6.364], + [0, 0], + [0.832, -1.206], + [6.697, -14.392], + [-3.327, -3.328], + [0, 0], + [1.331, -20.755], + [-0.499, -8.062], + [17.095, -16.887], + [0, 0], + [-0.582, -1.289], + [-9.151, -12.977], + [-4.575, 1.248], + [0, 0], + [-17.345, -11.563], + [-7.196, -3.578], + [-6.114, -23.293], + [0, 0], + [-1.497, -0.124], + [-15.804, 1.373], + [-1.207, 4.575], + [0, 0], + [-18.676, 9.234], + [-6.655, 4.451], + [-23.251, -6.364], + [0, 0], + [-0.832, 1.206], + [-6.739, 14.392], + [3.327, 3.328], + [0, 0], + [-1.331, 20.755], + [0.499, 8.061], + [-17.095, 16.887], + [0, 0], + [0.582, 1.289], + [9.144, 12.981], + [4.576, -1.248], + [0, 0], + [17.345, 11.563], + [7.202, 3.563], + [6.114, 23.293], + [0, 0], + [1.498, 0.125] + ], + "o": [ + [-1.497, 0.125], + [0, 0], + [-6.114, 23.334], + [-7.196, 3.578], + [-17.345, 11.563], + [0, 0], + [-4.534, -1.248], + [-9.151, 12.978], + [-0.582, 1.289], + [0, 0], + [17.095, 16.887], + [-0.5, 8.062], + [1.331, 20.755], + [0, 0], + [-3.369, 3.328], + [6.738, 14.392], + [0.832, 1.248], + [0, 0], + [23.293, -6.364], + [6.697, 4.451], + [18.593, 9.234], + [0, 0], + [1.206, 4.533], + [15.804, 1.373], + [1.498, -0.124], + [0, 0], + [6.114, -23.335], + [7.196, -3.578], + [17.345, -11.563], + [0, 0], + [4.534, 1.206], + [9.151, -13.019], + [0.582, -1.289], + [0, 0], + [-17.095, -16.887], + [0.499, -8.062], + [-1.331, -20.756], + [0, 0], + [3.369, -3.328], + [-6.715, -14.39], + [-0.832, -1.248], + [0, 0], + [-23.293, 6.364], + [-6.676, -4.47], + [-18.592, -9.234], + [0, 0], + [-1.207, -4.575], + [-15.804, -1.372] + ], + "v": [ + [-23.81, -269.32], + [-29.508, -263.247], + [-41.529, -217.285], + [-83.04, -167.829], + [-103.838, -155.766], + [-167.436, -144.536], + [-213.314, -157.139], + [-221.425, -155.267], + [-245.259, -114.089], + [-242.805, -106.185], + [-208.905, -72.66], + [-186.86, -12.099], + [-186.86, 12.109], + [-208.905, 72.671], + [-242.805, 106.195], + [-245.259, 114.099], + [-221.425, 155.236], + [-213.314, 157.15], + [-167.477, 144.547], + [-103.838, 155.777], + [-82.999, 167.839], + [-41.529, 217.295], + [-29.508, 263.257], + [-23.81, 269.329], + [23.691, 269.329], + [29.39, 263.257], + [41.411, 217.295], + [82.922, 167.839], + [103.719, 155.777], + [167.317, 144.547], + [213.196, 157.15], + [221.307, 155.277], + [245.141, 114.099], + [242.687, 106.195], + [208.787, 72.671], + [186.742, 12.109], + [186.742, -12.098], + [208.787, -72.66], + [242.687, -106.185], + [245.141, -114.089], + [221.307, -155.225], + [213.196, -157.139], + [167.359, -144.536], + [103.719, -155.766], + [82.88, -167.828], + [41.411, -217.285], + [29.39, -263.247], + [23.691, -269.32] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 3", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 3, + "ty": "sh", + "ix": 4, + "ks": { + "a": 0, + "k": { + "i": [ + [-9.816, 0], + [-9.697, -0.846], + [-7.071, -26.828], + [0, 0], + [-5.532, -2.745], + [-8.902, -5.948], + [-2.745, 0.79], + [0, 0], + [-17.802, -25.331], + [-8.236, -17.72], + [19.758, -19.508], + [0, 0], + [-0.416, -6.114], + [0.666, -10.69], + [-2.079, -1.997], + [0, 0], + [13.102, -28.076], + [11.232, -15.979], + [26.787, 7.363], + [0, 0], + [5.117, -3.411], + [9.602, -4.741], + [0.707, -2.745], + [0, 0], + [30.904, -2.663], + [19.401, 1.705], + [7.03, 26.87], + [0, 0], + [5.532, 2.745], + [8.891, 5.969], + [2.746, -0.79], + [0, 0], + [17.802, 25.332], + [8.277, 17.703], + [-19.716, 19.508], + [0, 0], + [0.416, 6.114], + [-0.666, 10.693], + [2.08, 1.997], + [0, 0], + [-13.102, 28.076], + [-11.242, 15.972], + [-26.787, -7.363], + [0, 0], + [-5.116, 3.411], + [-9.608, 4.742], + [-0.707, 2.745], + [0, 0], + [-30.905, 2.704] + ], + "o": [ + [9.733, 0.014], + [30.904, 2.662], + [0, 0], + [0.749, 2.745], + [9.609, 4.742], + [5.116, 3.411], + [0, 0], + [26.787, -7.321], + [11.231, 16.014], + [13.102, 28.076], + [0, 0], + [-2.038, 1.997], + [0.666, 10.69], + [-0.416, 6.114], + [0, 0], + [19.758, 19.508], + [-8.252, 17.703], + [-17.802, 25.373], + [0, 0], + [-2.787, -0.79], + [-8.902, 5.952], + [-5.532, 2.745], + [0, 0], + [-6.987, 26.87], + [-19.402, 1.705], + [-30.905, -2.663], + [0, 0], + [-0.748, -2.745], + [-9.611, -4.723], + [-5.116, -3.411], + [0, 0], + [-26.786, 7.321], + [-11.208, -16.008], + [-13.102, -28.076], + [0, 0], + [2.08, -1.997], + [-0.666, -10.693], + [0.416, -6.114], + [0, 0], + [-19.716, -19.508], + [8.241, -17.709], + [17.802, -25.373], + [0, 0], + [2.787, 0.79], + [8.901, -5.948], + [5.532, -2.745], + [0, 0], + [6.988, -26.87], + [9.608, -0.832] + ], + "v": [ + [-0.059, -332.751], + [29.099, -331.462], + [89.785, -279.095], + [101.764, -233.049], + [110.582, -223.733], + [138.368, -207.676], + [150.804, -204.723], + [196.683, -217.327], + [272.385, -191.123], + [301.668, -140.459], + [286.527, -61.805], + [252.669, -28.28], + [249.009, -16.051], + [249.009, 16.061], + [252.669, 28.289], + [286.527, 61.815], + [301.668, 140.47], + [272.385, 191.09], + [196.683, 217.295], + [150.846, 204.734], + [138.367, 207.687], + [110.582, 223.743], + [101.806, 233.059], + [89.743, 279.063], + [29.099, 331.473], + [-29.217, 331.473], + [-89.862, 279.063], + [-101.883, 233.059], + [-110.701, 223.743], + [-138.486, 207.687], + [-150.923, 204.734], + [-196.802, 217.336], + [-272.504, 191.132], + [-301.786, 140.47], + [-286.687, 61.815], + [-252.788, 28.289], + [-249.127, 16.061], + [-249.127, -16.051], + [-252.788, -28.28], + [-286.687, -61.805], + [-301.786, -140.459], + [-272.504, -191.08], + [-196.801, -217.285], + [-150.964, -204.723], + [-138.486, -207.676], + [-110.701, -223.733], + [-101.924, -233.049], + [-89.862, -279.053], + [-29.217, -331.504] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 4", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "mm", + "mm": 1, + "nm": "Merge Paths 1", + "mn": "ADBE Vector Filter - Merge", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.898460657456, 0.889815326765, 0.896223060758, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [308.077, 333.249], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 8, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 120, + "st": 0, + "bm": 0 + } + ] + } + ], + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 0, + "nm": "estrela Outlines 2 Comp 1", + "refId": "comp_0", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [450, 450, 0], "ix": 2 }, + "a": { "a": 0, "k": [450, 450, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, + "o": { "x": [1, 1, 0.333], "y": [0, 0, 0] }, + "t": 0, + "s": [100, 100, 100] + }, + { + "i": { "x": [0, 0, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, + "t": 30, + "s": [80, 80, 100] + }, + { "t": 60, "s": [100, 100, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "hasMask": true, + "masksProperties": [ + { + "inv": false, + "mode": "a", + "pt": { + "a": 0, + "k": { + "i": [ + [89.47, 0], + [0, -89.47], + [-89.47, 0], + [0, 89.47] + ], + "o": [ + [-89.47, 0], + [0, 89.47], + [89.47, 0], + [0, -89.47] + ], + "v": [ + [446, 286], + [284, 448], + [446, 610], + [608, 448] + ], + "c": true + }, + "ix": 1 + }, + "o": { "a": 0, "k": 100, "ix": 3 }, + "x": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Mask 1" + } + ], + "w": 900, + "h": 900, + "ip": 0, + "op": 120, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 2, + "ty": 4, + "nm": "estrela Outlines", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.84], "y": [-1.753] }, + "o": { "x": [0], "y": [0] }, + "t": 0, + "s": [0] + }, + { + "i": { "x": [0.361], "y": [1] }, + "o": { "x": [0], "y": [0] }, + "t": 28, + "s": [15] + }, + { "t": 60, "s": [180] } + ], + "ix": 10 + }, + "p": { "a": 0, "k": [450, 450, 0], "ix": 2 }, + "a": { "a": 0, "k": [308.5, 333, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0.011, 34.469], + [34.47, -0.012], + [-0.011, -34.469], + [-34.47, 0.011] + ], + "o": [ + [-0.012, -34.47], + [-34.469, 0.011], + [0.012, 34.47], + [34.469, -0.012] + ], + "v": [ + [62.333, 0.005], + [-0.101, -62.387], + [-62.493, 0.047], + [-0.059, 62.439] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 1, + "ty": "sh", + "ix": 2, + "ks": { + "a": 0, + "k": { + "i": [ + [0, -68.917], + [68.916, 0], + [0, 68.916], + [-68.916, 0] + ], + "o": [ + [0, 68.916], + [-68.916, 0], + [0, -68.917], + [68.916, 0] + ], + "v": [ + [124.725, 0.005], + [-0.059, 124.789], + [-124.843, 0.005], + [-0.059, -124.779] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 2", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 2, + "ty": "sh", + "ix": 3, + "ks": { + "a": 0, + "k": { + "i": [ + [15.804, -1.372], + [1.206, -4.575], + [0, 0], + [18.676, -9.234], + [6.656, -4.451], + [23.252, 6.364], + [0, 0], + [0.832, -1.206], + [6.697, -14.392], + [-3.327, -3.328], + [0, 0], + [1.331, -20.755], + [-0.499, -8.062], + [17.095, -16.887], + [0, 0], + [-0.582, -1.289], + [-9.151, -12.977], + [-4.575, 1.248], + [0, 0], + [-17.345, -11.563], + [-7.196, -3.578], + [-6.114, -23.293], + [0, 0], + [-1.497, -0.124], + [-15.804, 1.373], + [-1.207, 4.575], + [0, 0], + [-18.676, 9.234], + [-6.655, 4.451], + [-23.251, -6.364], + [0, 0], + [-0.832, 1.206], + [-6.739, 14.392], + [3.327, 3.328], + [0, 0], + [-1.331, 20.755], + [0.499, 8.061], + [-17.095, 16.887], + [0, 0], + [0.582, 1.289], + [9.144, 12.981], + [4.576, -1.248], + [0, 0], + [17.345, 11.563], + [7.202, 3.563], + [6.114, 23.293], + [0, 0], + [1.498, 0.125] + ], + "o": [ + [-1.497, 0.125], + [0, 0], + [-6.114, 23.334], + [-7.196, 3.578], + [-17.345, 11.563], + [0, 0], + [-4.534, -1.248], + [-9.151, 12.978], + [-0.582, 1.289], + [0, 0], + [17.095, 16.887], + [-0.5, 8.062], + [1.331, 20.755], + [0, 0], + [-3.369, 3.328], + [6.738, 14.392], + [0.832, 1.248], + [0, 0], + [23.293, -6.364], + [6.697, 4.451], + [18.593, 9.234], + [0, 0], + [1.206, 4.533], + [15.804, 1.373], + [1.498, -0.124], + [0, 0], + [6.114, -23.335], + [7.196, -3.578], + [17.345, -11.563], + [0, 0], + [4.534, 1.206], + [9.151, -13.019], + [0.582, -1.289], + [0, 0], + [-17.095, -16.887], + [0.499, -8.062], + [-1.331, -20.756], + [0, 0], + [3.369, -3.328], + [-6.715, -14.39], + [-0.832, -1.248], + [0, 0], + [-23.293, 6.364], + [-6.676, -4.47], + [-18.592, -9.234], + [0, 0], + [-1.207, -4.575], + [-15.804, -1.372] + ], + "v": [ + [-23.81, -269.32], + [-29.508, -263.247], + [-41.529, -217.285], + [-83.04, -167.829], + [-103.838, -155.766], + [-167.436, -144.536], + [-213.314, -157.139], + [-221.425, -155.267], + [-245.259, -114.089], + [-242.805, -106.185], + [-208.905, -72.66], + [-186.86, -12.099], + [-186.86, 12.109], + [-208.905, 72.671], + [-242.805, 106.195], + [-245.259, 114.099], + [-221.425, 155.236], + [-213.314, 157.15], + [-167.477, 144.547], + [-103.838, 155.777], + [-82.999, 167.839], + [-41.529, 217.295], + [-29.508, 263.257], + [-23.81, 269.329], + [23.691, 269.329], + [29.39, 263.257], + [41.411, 217.295], + [82.922, 167.839], + [103.719, 155.777], + [167.317, 144.547], + [213.196, 157.15], + [221.307, 155.277], + [245.141, 114.099], + [242.687, 106.195], + [208.787, 72.671], + [186.742, 12.109], + [186.742, -12.098], + [208.787, -72.66], + [242.687, -106.185], + [245.141, -114.089], + [221.307, -155.225], + [213.196, -157.139], + [167.359, -144.536], + [103.719, -155.766], + [82.88, -167.828], + [41.411, -217.285], + [29.39, -263.247], + [23.691, -269.32] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 3", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 3, + "ty": "sh", + "ix": 4, + "ks": { + "a": 0, + "k": { + "i": [ + [-9.816, 0], + [-9.697, -0.846], + [-7.071, -26.828], + [0, 0], + [-5.532, -2.745], + [-8.902, -5.948], + [-2.745, 0.79], + [0, 0], + [-17.802, -25.331], + [-8.236, -17.72], + [19.758, -19.508], + [0, 0], + [-0.416, -6.114], + [0.666, -10.69], + [-2.079, -1.997], + [0, 0], + [13.102, -28.076], + [11.232, -15.979], + [26.787, 7.363], + [0, 0], + [5.117, -3.411], + [9.602, -4.741], + [0.707, -2.745], + [0, 0], + [30.904, -2.663], + [19.401, 1.705], + [7.03, 26.87], + [0, 0], + [5.532, 2.745], + [8.891, 5.969], + [2.746, -0.79], + [0, 0], + [17.802, 25.332], + [8.277, 17.703], + [-19.716, 19.508], + [0, 0], + [0.416, 6.114], + [-0.666, 10.693], + [2.08, 1.997], + [0, 0], + [-13.102, 28.076], + [-11.242, 15.972], + [-26.787, -7.363], + [0, 0], + [-5.116, 3.411], + [-9.608, 4.742], + [-0.707, 2.745], + [0, 0], + [-30.905, 2.704] + ], + "o": [ + [9.733, 0.014], + [30.904, 2.662], + [0, 0], + [0.749, 2.745], + [9.609, 4.742], + [5.116, 3.411], + [0, 0], + [26.787, -7.321], + [11.231, 16.014], + [13.102, 28.076], + [0, 0], + [-2.038, 1.997], + [0.666, 10.69], + [-0.416, 6.114], + [0, 0], + [19.758, 19.508], + [-8.252, 17.703], + [-17.802, 25.373], + [0, 0], + [-2.787, -0.79], + [-8.902, 5.952], + [-5.532, 2.745], + [0, 0], + [-6.987, 26.87], + [-19.402, 1.705], + [-30.905, -2.663], + [0, 0], + [-0.748, -2.745], + [-9.611, -4.723], + [-5.116, -3.411], + [0, 0], + [-26.786, 7.321], + [-11.208, -16.008], + [-13.102, -28.076], + [0, 0], + [2.08, -1.997], + [-0.666, -10.693], + [0.416, -6.114], + [0, 0], + [-19.716, -19.508], + [8.241, -17.709], + [17.802, -25.373], + [0, 0], + [2.787, 0.79], + [8.901, -5.948], + [5.532, -2.745], + [0, 0], + [6.988, -26.87], + [9.608, -0.832] + ], + "v": [ + [-0.059, -332.751], + [29.099, -331.462], + [89.785, -279.095], + [101.764, -233.049], + [110.582, -223.733], + [138.368, -207.676], + [150.804, -204.723], + [196.683, -217.327], + [272.385, -191.123], + [301.668, -140.459], + [286.527, -61.805], + [252.669, -28.28], + [249.009, -16.051], + [249.009, 16.061], + [252.669, 28.289], + [286.527, 61.815], + [301.668, 140.47], + [272.385, 191.09], + [196.683, 217.295], + [150.846, 204.734], + [138.367, 207.687], + [110.582, 223.743], + [101.806, 233.059], + [89.743, 279.063], + [29.099, 331.473], + [-29.217, 331.473], + [-89.862, 279.063], + [-101.883, 233.059], + [-110.701, 223.743], + [-138.486, 207.687], + [-150.923, 204.734], + [-196.802, 217.336], + [-272.504, 191.132], + [-301.786, 140.47], + [-286.687, 61.815], + [-252.788, 28.289], + [-249.127, 16.061], + [-249.127, -16.051], + [-252.788, -28.28], + [-286.687, -61.805], + [-301.786, -140.459], + [-272.504, -191.08], + [-196.801, -217.285], + [-150.964, -204.723], + [-138.486, -207.676], + [-110.701, -223.733], + [-101.924, -233.049], + [-89.862, -279.053], + [-29.217, -331.504] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 4", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "mm", + "mm": 1, + "nm": "Merge Paths 1", + "mn": "ADBE Vector Filter - Merge", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.898460657456, 0.889815326765, 0.896223060758, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [308.077, 333.249], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 8, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 120, + "st": 0, + "bm": 0 + } + ], + "markers": [] +} diff --git a/src/renderer/src/assets/lottie/stars.json b/src/renderer/src/assets/lottie/stars.json new file mode 100644 index 00000000..ae72f2e9 --- /dev/null +++ b/src/renderer/src/assets/lottie/stars.json @@ -0,0 +1,928 @@ +{ + "v": "4.8.0", + "meta": { "g": "LottieFiles AE 3.5.6", "a": "", "k": "", "d": "", "tc": "" }, + "fr": 60, + "ip": 0, + "op": 120, + "w": 300, + "h": 300, + "nm": "Comp 1", + "ddd": 0, + "assets": [ + { + "id": "comp_0", + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 5, + "nm": "3", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.055], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 0, + "s": [0] + }, + { + "i": { "x": [0.055], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 30, + "s": [8] + }, + { "t": 60, "s": [0] } + ], + "ix": 10 + }, + "p": { "a": 0, "k": [930, 525, 0], "ix": 2 }, + "a": { "a": 0, "k": [16.605, -23.904, 0], "ix": 1 }, + "s": { "a": 0, "k": [170, 170, 100], "ix": 6 } + }, + "ao": 0, + "hasMask": true, + "masksProperties": [ + { + "inv": false, + "mode": "a", + "pt": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [14.987, -34.426], + [9.105, -30.309], + [9.987, -22.073], + [17.487, -16.779], + [24.105, -23.544], + [22.193, -30.603] + ], + "c": true + }, + "ix": 1 + }, + "o": { "a": 0, "k": 100, "ix": 3 }, + "x": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Mask 1" + } + ], + "ef": [ + { + "ty": 21, + "nm": "Fill", + "np": 9, + "mn": "ADBE Fill", + "ix": 1, + "en": 1, + "ef": [ + { + "ty": 10, + "nm": "Fill Mask", + "mn": "ADBE Fill-0001", + "ix": 1, + "v": { "a": 0, "k": 0, "ix": 1 } + }, + { + "ty": 7, + "nm": "All Masks", + "mn": "ADBE Fill-0007", + "ix": 2, + "v": { "a": 0, "k": 0, "ix": 2 } + }, + { + "ty": 2, + "nm": "Color", + "mn": "ADBE Fill-0002", + "ix": 3, + "v": { + "a": 0, + "k": [0.992156863213, 0.880375564098, 0.128396704793, 1], + "ix": 3 + } + }, + { + "ty": 7, + "nm": "Invert", + "mn": "ADBE Fill-0006", + "ix": 4, + "v": { "a": 0, "k": 0, "ix": 4 } + }, + { + "ty": 0, + "nm": "Horizontal Feather", + "mn": "ADBE Fill-0003", + "ix": 5, + "v": { "a": 0, "k": 0, "ix": 5 } + }, + { + "ty": 0, + "nm": "Vertical Feather", + "mn": "ADBE Fill-0004", + "ix": 6, + "v": { "a": 0, "k": 0, "ix": 6 } + }, + { + "ty": 0, + "nm": "Opacity", + "mn": "ADBE Fill-0005", + "ix": 7, + "v": { "a": 0, "k": 1, "ix": 7 } + } + ] + } + ], + "t": { + "d": { + "k": [ + { + "s": { + "s": 40, + "f": "SegoeUIEmoji", + "t": "✨", + "j": 0, + "tr": 0, + "lh": 48, + "ls": 0, + "fc": [1, 1, 1] + }, + "t": 0 + } + ] + }, + "p": {}, + "m": { "g": 1, "a": { "a": 0, "k": [0, 0], "ix": 2 } }, + "a": [] + }, + "ip": 0, + "op": 123, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 2, + "ty": 5, + "nm": "2", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.055], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 0, + "s": [0] + }, + { + "i": { "x": [0.055], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 30, + "s": [-8] + }, + { "t": 60, "s": [0] } + ], + "ix": 10 + }, + "p": { "a": 0, "k": [960, 540, 0], "ix": 2 }, + "a": { "a": 0, "k": [31.912, -13.397, 0], "ix": 1 }, + "s": { "a": 0, "k": [170, 170, 100], "ix": 6 } + }, + "ao": 0, + "hasMask": true, + "masksProperties": [ + { + "inv": false, + "mode": "a", + "pt": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [31.31, -34.72], + [24.546, -22.514], + [16.605, -16.485], + [17.046, -11.338], + [21.163, -7.073], + [27.487, -0.309], + [33.663, 10.133], + [47.634, -1.926], + [51.31, -12.073] + ], + "c": true + }, + "ix": 1 + }, + "o": { "a": 0, "k": 100, "ix": 3 }, + "x": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Mask 1" + } + ], + "ef": [ + { + "ty": 21, + "nm": "Fill", + "np": 9, + "mn": "ADBE Fill", + "ix": 1, + "en": 1, + "ef": [ + { + "ty": 10, + "nm": "Fill Mask", + "mn": "ADBE Fill-0001", + "ix": 1, + "v": { "a": 0, "k": 0, "ix": 1 } + }, + { + "ty": 7, + "nm": "All Masks", + "mn": "ADBE Fill-0007", + "ix": 2, + "v": { "a": 0, "k": 0, "ix": 2 } + }, + { + "ty": 2, + "nm": "Color", + "mn": "ADBE Fill-0002", + "ix": 3, + "v": { + "a": 0, + "k": [0.992156863213, 0.880375564098, 0.128396704793, 1], + "ix": 3 + } + }, + { + "ty": 7, + "nm": "Invert", + "mn": "ADBE Fill-0006", + "ix": 4, + "v": { "a": 0, "k": 0, "ix": 4 } + }, + { + "ty": 0, + "nm": "Horizontal Feather", + "mn": "ADBE Fill-0003", + "ix": 5, + "v": { "a": 0, "k": 0, "ix": 5 } + }, + { + "ty": 0, + "nm": "Vertical Feather", + "mn": "ADBE Fill-0004", + "ix": 6, + "v": { "a": 0, "k": 0, "ix": 6 } + }, + { + "ty": 0, + "nm": "Opacity", + "mn": "ADBE Fill-0005", + "ix": 7, + "v": { "a": 0, "k": 1, "ix": 7 } + } + ] + } + ], + "t": { + "d": { + "k": [ + { + "s": { + "s": 40, + "f": "SegoeUIEmoji", + "t": "✨", + "j": 0, + "tr": 0, + "lh": 48, + "ls": 0, + "fc": [1, 1, 1] + }, + "t": 0 + } + ] + }, + "p": {}, + "m": { "g": 1, "a": { "a": 0, "k": [0, 0], "ix": 2 } }, + "a": [] + }, + "ip": 0, + "op": 123, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 3, + "ty": 5, + "nm": "✨", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.055], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 0, + "s": [0] + }, + { + "i": { "x": [0.055], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 30, + "s": [8] + }, + { "t": 60, "s": [0] } + ], + "ix": 10 + }, + "p": { "a": 0, "k": [935, 560, 0], "ix": 2 }, + "a": { "a": 0, "k": [14.973, -6.64, 0], "ix": 1 }, + "s": { "a": 0, "k": [170, 170, 100], "ix": 6 } + }, + "ao": 0, + "hasMask": true, + "masksProperties": [ + { + "inv": false, + "mode": "a", + "pt": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [13.957, -17.514], + [2.928, -9.132], + [2.487, 1.603], + [14.105, 7.339], + [21.605, -0.161], + [22.193, -5.161], + [17.34, -10.014] + ], + "c": true + }, + "ix": 1 + }, + "o": { "a": 0, "k": 100, "ix": 3 }, + "x": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Mask 1" + } + ], + "ef": [ + { + "ty": 21, + "nm": "Fill", + "np": 9, + "mn": "ADBE Fill", + "ix": 1, + "en": 1, + "ef": [ + { + "ty": 10, + "nm": "Fill Mask", + "mn": "ADBE Fill-0001", + "ix": 1, + "v": { "a": 0, "k": 0, "ix": 1 } + }, + { + "ty": 7, + "nm": "All Masks", + "mn": "ADBE Fill-0007", + "ix": 2, + "v": { "a": 0, "k": 0, "ix": 2 } + }, + { + "ty": 2, + "nm": "Color", + "mn": "ADBE Fill-0002", + "ix": 3, + "v": { + "a": 0, + "k": [0.992156863213, 0.880375564098, 0.128396704793, 1], + "ix": 3 + } + }, + { + "ty": 7, + "nm": "Invert", + "mn": "ADBE Fill-0006", + "ix": 4, + "v": { "a": 0, "k": 0, "ix": 4 } + }, + { + "ty": 0, + "nm": "Horizontal Feather", + "mn": "ADBE Fill-0003", + "ix": 5, + "v": { "a": 0, "k": 0, "ix": 5 } + }, + { + "ty": 0, + "nm": "Vertical Feather", + "mn": "ADBE Fill-0004", + "ix": 6, + "v": { "a": 0, "k": 0, "ix": 6 } + }, + { + "ty": 0, + "nm": "Opacity", + "mn": "ADBE Fill-0005", + "ix": 7, + "v": { "a": 0, "k": 1, "ix": 7 } + } + ] + } + ], + "t": { + "d": { + "k": [ + { + "s": { + "s": 40, + "f": "SegoeUIEmoji", + "t": "✨", + "j": 0, + "tr": 0, + "lh": 48, + "ls": 0, + "fc": [1, 1, 1] + }, + "t": 0 + } + ] + }, + "p": {}, + "m": { "g": 1, "a": { "a": 0, "k": [0, 0], "ix": 2 } }, + "a": [] + }, + "ip": 0, + "op": 123, + "st": 0, + "bm": 0 + } + ] + } + ], + "fonts": { + "list": [ + { + "fName": "SegoeUIEmoji", + "fFamily": "Segoe UI Emoji", + "fStyle": "Regular", + "ascent": 74.0234375 + } + ] + }, + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 0, + "nm": "botão", + "refId": "comp_0", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [155, 154, 0], "ix": 2 }, + "a": { "a": 0, "k": [960, 540, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } + }, + "ao": 0, + "ef": [ + { + "ty": 25, + "nm": "Drop Shadow", + "np": 8, + "mn": "ADBE Drop Shadow", + "ix": 1, + "en": 1, + "ef": [ + { + "ty": 2, + "nm": "Shadow Color", + "mn": "ADBE Drop Shadow-0001", + "ix": 1, + "v": { + "a": 0, + "k": [1, 0.829733371735, 0.414901971817, 1], + "ix": 1 + } + }, + { + "ty": 0, + "nm": "Opacity", + "mn": "ADBE Drop Shadow-0002", + "ix": 2, + "v": { + "a": 1, + "k": [ + { + "i": { "x": [0], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 0, + "s": [127.5] + }, + { + "i": { "x": [0], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 15, + "s": [204] + }, + { + "i": { "x": [0], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 30, + "s": [127.5] + }, + { + "i": { "x": [0], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 45, + "s": [204] + }, + { "t": 70, "s": [76.5] } + ], + "ix": 2 + } + }, + { + "ty": 0, + "nm": "Direction", + "mn": "ADBE Drop Shadow-0003", + "ix": 3, + "v": { "a": 0, "k": 135, "ix": 3 } + }, + { + "ty": 0, + "nm": "Distance", + "mn": "ADBE Drop Shadow-0004", + "ix": 4, + "v": { "a": 0, "k": 0, "ix": 4 } + }, + { + "ty": 0, + "nm": "Softness", + "mn": "ADBE Drop Shadow-0005", + "ix": 5, + "v": { "a": 0, "k": 40, "ix": 5 } + }, + { + "ty": 7, + "nm": "Shadow Only", + "mn": "ADBE Drop Shadow-0006", + "ix": 6, + "v": { "a": 0, "k": 0, "ix": 6 } + } + ] + } + ], + "w": 1920, + "h": 1080, + "ip": 0, + "op": 120, + "st": 0, + "bm": 0 + } + ], + "markers": [], + "chars": [ + { + "ch": "✨", + "size": 40, + "style": "Regular", + "w": 137.3, + "data": { + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0.423, 1.042], + [0, 0], + [0.7, 0], + [0.293, -0.618], + [0, 0], + [1.041, -0.488], + [0, 0], + [0, -0.684], + [-0.652, -0.293], + [0, 0], + [-0.423, -1.041], + [0, 0], + [-0.716, 0], + [-0.293, 0.619], + [0, 0], + [-1.042, 0.488], + [0, 0], + [0, 0.684], + [0.618, 0.293], + [0, 0] + ], + "o": [ + [0, 0], + [-0.326, -0.618], + [-0.7, 0], + [0, 0], + [-0.456, 1.009], + [0, 0], + [-0.652, 0.293], + [0, 0.684], + [0, 0], + [1.074, 0.456], + [0, 0], + [0.293, 0.619], + [0.716, 0], + [0, 0], + [0.455, -1.009], + [0, 0], + [0.618, -0.293], + [0, -0.684], + [0, 0], + [-1.074, -0.455] + ], + "v": [ + [47.119, -68.994], + [43.799, -76.562], + [42.261, -77.49], + [40.771, -76.562], + [37.402, -68.994], + [35.156, -66.748], + [30.908, -64.893], + [29.932, -63.428], + [30.908, -61.963], + [35.156, -60.107], + [37.402, -57.861], + [40.771, -50.244], + [42.285, -49.316], + [43.799, -50.244], + [47.119, -57.861], + [49.365, -60.107], + [53.662, -61.963], + [54.59, -63.428], + [53.662, -64.893], + [49.365, -66.748] + ], + "c": true + }, + "ix": 2 + }, + "nm": "✨", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 1, + "ty": "sh", + "ix": 2, + "ks": { + "a": 0, + "k": { + "i": [ + [1.334, 3.223], + [0, 0], + [1.204, 0.423], + [1.204, -0.423], + [0.618, -1.237], + [0, 0], + [3.125, -1.432], + [0, 0], + [0.423, -1.221], + [-0.423, -1.221], + [-1.27, -0.618], + [0, 0], + [-1.335, -3.223], + [0, 0], + [-1.205, -0.407], + [-1.205, 0.407], + [-0.619, 1.27], + [0, 0], + [-3.125, 1.433], + [0, 0], + [-0.423, 1.221], + [0.423, 1.221], + [1.27, 0.619], + [0, 0] + ], + "o": [ + [0, 0], + [-0.619, -1.237], + [-1.205, -0.423], + [-1.205, 0.423], + [0, 0], + [-1.367, 3.223], + [0, 0], + [-1.27, 0.619], + [-0.423, 1.221], + [0.423, 1.221], + [0, 0], + [3.157, 1.433], + [0, 0], + [0.618, 1.27], + [1.204, 0.407], + [1.204, -0.407], + [0, 0], + [1.367, -3.223], + [0, 0], + [1.27, -0.618], + [0.423, -1.221], + [-0.423, -1.221], + [0, 0], + [-3.158, -1.432] + ], + "v": [ + [95.605, -50.83], + [85.498, -74.658], + [82.764, -77.148], + [79.15, -77.148], + [76.416, -74.658], + [66.357, -50.83], + [59.619, -43.848], + [46.875, -38.086], + [44.336, -35.327], + [44.336, -31.665], + [46.875, -28.906], + [59.619, -23.145], + [66.357, -16.162], + [76.416, 7.666], + [79.15, 10.181], + [82.764, 10.181], + [85.498, 7.666], + [95.605, -16.162], + [102.344, -23.145], + [115.088, -28.906], + [117.627, -31.665], + [117.627, -35.327], + [115.088, -38.086], + [102.344, -43.848] + ], + "c": true + }, + "ix": 2 + }, + "nm": "✨", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 2, + "ty": "sh", + "ix": 3, + "ks": { + "a": 0, + "k": { + "i": [ + [-1.367, -0.651], + [0, 0], + [0, -0.928], + [0.813, -0.423], + [0, 0], + [0.586, -1.399], + [0, 0], + [0.895, 0], + [0.391, 0.846], + [0, 0], + [1.334, 0.652], + [0, 0], + [0, 0.928], + [-0.814, 0.423], + [0, 0], + [-0.586, 1.4], + [0, 0], + [-0.896, 0], + [-0.391, -0.846], + [0, 0] + ], + "o": [ + [0, 0], + [0.813, 0.423], + [0, 0.928], + [0, 0], + [-1.335, 0.652], + [0, 0], + [-0.391, 0.846], + [-0.896, 0], + [0, 0], + [-0.586, -1.399], + [0, 0], + [-0.814, -0.423], + [0, -0.928], + [0, 0], + [1.334, -0.651], + [0, 0], + [0.391, -0.846], + [0.895, 0], + [0, 0], + [0.553, 1.4] + ], + "v": [ + [44.385, -16.943], + [49.854, -14.404], + [51.074, -12.378], + [49.854, -10.352], + [44.385, -7.812], + [41.504, -4.736], + [37.158, 5.713], + [35.229, 6.982], + [33.301, 5.713], + [28.955, -4.736], + [26.074, -7.812], + [20.605, -10.352], + [19.385, -12.378], + [20.605, -14.404], + [26.074, -16.943], + [28.955, -20.02], + [33.301, -30.469], + [35.229, -31.738], + [37.158, -30.469], + [41.504, -20.02] + ], + "c": true + }, + "ix": 2 + }, + "nm": "✨", + "mn": "ADBE Vector Shape - Group", + "hd": false + } + ], + "nm": "✨", + "np": 6, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ] + }, + "fFamily": "Segoe UI Emoji" + } + ] +} diff --git a/src/renderer/src/assets/steam-logo.svg b/src/renderer/src/assets/steam-logo.svg new file mode 100644 index 00000000..1e5dd9be --- /dev/null +++ b/src/renderer/src/assets/steam-logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/renderer/src/assets/x-icon.svg b/src/renderer/src/assets/x-icon.svg new file mode 100644 index 00000000..f594427b --- /dev/null +++ b/src/renderer/src/assets/x-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/renderer/src/components/async-image/async-image.tsx b/src/renderer/src/components/async-image/async-image.tsx new file mode 100644 index 00000000..857a9942 --- /dev/null +++ b/src/renderer/src/components/async-image/async-image.tsx @@ -0,0 +1,27 @@ +import { forwardRef, useEffect, useState } from "react"; + +export interface AsyncImageProps + extends React.DetailedHTMLProps< + React.ImgHTMLAttributes, + HTMLImageElement + > { + onSettled?: (url: string) => void; +} + +export const AsyncImage = forwardRef( + ({ onSettled, ...props }, ref) => { + const [source, setSource] = useState(null); + + useEffect(() => { + if (props.src && props.src.startsWith("http")) { + window.electron.getOrCacheImage(props.src).then((url) => { + setSource(url); + + if (onSettled) onSettled(url); + }); + } + }, [props.src, onSettled]); + + return ; + } +); diff --git a/src/renderer/src/components/bottom-panel/bottom-panel.css.ts b/src/renderer/src/components/bottom-panel/bottom-panel.css.ts new file mode 100644 index 00000000..f251d1c0 --- /dev/null +++ b/src/renderer/src/components/bottom-panel/bottom-panel.css.ts @@ -0,0 +1,23 @@ +import { style } from "@vanilla-extract/css"; +import { SPACING_UNIT, vars } from "../../theme.css"; + +export const bottomPanel = style({ + width: "100%", + borderTop: `solid 1px ${vars.color.borderColor}`, + padding: `${SPACING_UNIT / 2}px ${SPACING_UNIT * 2}px`, + display: "flex", + alignItems: "center", + transition: "all ease 0.2s", + justifyContent: "space-between", + fontSize: vars.size.bodyFontSize, + zIndex: "1", +}); + +export const downloadsButton = style({ + color: vars.color.bodyText, + borderBottom: "1px solid transparent", + ":hover": { + borderBottom: `1px solid ${vars.color.bodyText}`, + cursor: "pointer", + }, +}); diff --git a/src/renderer/src/components/bottom-panel/bottom-panel.tsx b/src/renderer/src/components/bottom-panel/bottom-panel.tsx new file mode 100644 index 00000000..df1f49cb --- /dev/null +++ b/src/renderer/src/components/bottom-panel/bottom-panel.tsx @@ -0,0 +1,68 @@ +import { useTranslation } from "react-i18next"; + +import { useDownload } from "@renderer/hooks"; + +import * as styles from "./bottom-panel.css"; +import { vars } from "../../theme.css"; +import { useEffect, useMemo, useState } from "react"; +import { useNavigate } from "react-router-dom"; +import { VERSION_CODENAME } from "@renderer/constants"; + +export function BottomPanel() { + const { t } = useTranslation("bottom_panel"); + + const navigate = useNavigate(); + + const { game, progress, downloadSpeed, eta, isDownloading } = useDownload(); + + const [version, setVersion] = useState(""); + + useEffect(() => { + window.electron.getVersion().then((result) => setVersion(result)); + }, []); + + const status = useMemo(() => { + if (isDownloading) { + if (game.status === "downloading_metadata") + return t("downloading_metadata", { title: game.title }); + + if (game.status === "checking_files") + return t("checking_files", { + title: game.title, + percentage: progress, + }); + + return t("downloading", { + title: game?.title, + percentage: progress, + eta, + speed: downloadSpeed, + }); + } + + return t("no_downloads_in_progress"); + }, [t, game, progress, eta, isDownloading, downloadSpeed]); + + return ( +
+ + + + v{version} "{VERSION_CODENAME}" + +
+ ); +} diff --git a/src/renderer/src/components/button/button.css.ts b/src/renderer/src/components/button/button.css.ts new file mode 100644 index 00000000..18866bc0 --- /dev/null +++ b/src/renderer/src/components/button/button.css.ts @@ -0,0 +1,52 @@ +import { style, styleVariants } from "@vanilla-extract/css"; +import { SPACING_UNIT, vars } from "../../theme.css"; + +const base = style({ + padding: `${SPACING_UNIT}px ${SPACING_UNIT * 2}px`, + backgroundColor: "#c0c1c7", + borderRadius: "8px", + border: "solid 1px transparent", + transition: "all ease 0.2s", + cursor: "pointer", + minHeight: "40px", + display: "flex", + alignItems: "center", + justifyContent: "center", + gap: `${SPACING_UNIT}px`, + ":active": { + opacity: vars.opacity.active, + }, + ":disabled": { + opacity: vars.opacity.disabled, + pointerEvents: "none", + }, +}); + +export const button = styleVariants({ + primary: [ + base, + { + ":hover": { + backgroundColor: "#DADBE1", + }, + }, + ], + outline: [ + base, + { + backgroundColor: "transparent", + border: "solid 1px #c0c1c7", + color: "#c0c1c7", + ":hover": { + backgroundColor: "rgba(255, 255, 255, 0.1)", + }, + }, + ], + dark: [ + base, + { + backgroundColor: vars.color.darkBackground, + color: "#c0c1c7", + }, + ], +}); diff --git a/src/renderer/src/components/button/button.tsx b/src/renderer/src/components/button/button.tsx new file mode 100644 index 00000000..41b58367 --- /dev/null +++ b/src/renderer/src/components/button/button.tsx @@ -0,0 +1,27 @@ +import cn from "classnames"; +import * as styles from "./button.css"; + +export interface ButtonProps + extends React.DetailedHTMLProps< + React.ButtonHTMLAttributes, + HTMLButtonElement + > { + theme?: keyof typeof styles.button; +} + +export function Button({ + children, + theme = "primary", + className, + ...props +}: ButtonProps) { + return ( + + ); +} diff --git a/src/renderer/src/components/checkbox-field/checkbox-field.css.ts b/src/renderer/src/components/checkbox-field/checkbox-field.css.ts new file mode 100644 index 00000000..2b7cb77c --- /dev/null +++ b/src/renderer/src/components/checkbox-field/checkbox-field.css.ts @@ -0,0 +1,40 @@ +import { SPACING_UNIT, vars } from "../../theme.css"; +import { style } from "@vanilla-extract/css"; + +export const checkboxField = style({ + display: "flex", + flexDirection: "row", + alignItems: "center", + gap: `${SPACING_UNIT}px`, + cursor: "pointer", +}); + +export const checkbox = style({ + width: "20px", + height: "20px", + borderRadius: "4px", + backgroundColor: vars.color.darkBackground, + display: "flex", + justifyContent: "center", + alignItems: "center", + position: "relative", + transition: "all ease 0.2s", + border: `solid 1px ${vars.color.borderColor}`, + ":hover": { + borderColor: "rgba(255, 255, 255, 0.5)", + }, +}); + +export const checkboxInput = style({ + width: "100%", + height: "100%", + position: "absolute", + margin: "0", + padding: "0", + opacity: "0", + cursor: "pointer", +}); + +export const checkboxLabel = style({ + cursor: "pointer", +}); diff --git a/src/renderer/src/components/checkbox-field/checkbox-field.tsx b/src/renderer/src/components/checkbox-field/checkbox-field.tsx new file mode 100644 index 00000000..bb81a910 --- /dev/null +++ b/src/renderer/src/components/checkbox-field/checkbox-field.tsx @@ -0,0 +1,32 @@ +import { useId } from "react"; +import * as styles from "./checkbox-field.css"; +import { CheckIcon } from "@primer/octicons-react"; + +export interface CheckboxFieldProps + extends React.DetailedHTMLProps< + React.InputHTMLAttributes, + HTMLInputElement + > { + label: string; +} + +export function CheckboxField({ label, ...props }: CheckboxFieldProps) { + const id = useId(); + + return ( +
+
+ + {props.checked && } +
+ +
+ ); +} diff --git a/src/renderer/src/components/game-card/game-card.css.ts b/src/renderer/src/components/game-card/game-card.css.ts new file mode 100644 index 00000000..f8d835fb --- /dev/null +++ b/src/renderer/src/components/game-card/game-card.css.ts @@ -0,0 +1,127 @@ +import { style } from "@vanilla-extract/css"; +import { recipe } from "@vanilla-extract/recipes"; +import { SPACING_UNIT, vars } from "../../theme.css"; + +export const card = recipe({ + base: { + width: "100%", + height: "180px", + boxShadow: "0px 0px 15px 0px #000000", + overflow: "hidden", + borderRadius: "4px", + transition: "all ease 0.2s", + border: `solid 1px ${vars.color.borderColor}`, + cursor: "pointer", + zIndex: "1", + ":active": { + opacity: vars.opacity.active, + }, + }, + variants: { + disabled: { + true: { + pointerEvents: "none", + boxShadow: "none", + opacity: vars.opacity.disabled, + filter: "grayscale(50%)", + }, + }, + }, +}); + +export const backdrop = style({ + background: "linear-gradient(0deg, rgba(0, 0, 0, 0.7) 50%, transparent 100%)", + width: "100%", + height: "100%", + display: "flex", + justifyContent: "flex-end", + flexDirection: "column", + position: "relative", +}); + +export const cover = style({ + width: "100%", + height: "100%", + objectFit: "cover", + objectPosition: "center", + position: "absolute", + zIndex: "-1", + transition: "all ease 0.2s", + selectors: { + [`${card({})}:hover &`]: { + transform: "scale(1.05)", + }, + }, +}); + +export const content = style({ + color: "#DADBE1", + padding: `${SPACING_UNIT}px ${SPACING_UNIT * 2}px`, + display: "flex", + alignItems: "flex-start", + gap: `${SPACING_UNIT}px`, + flexDirection: "column", + transition: "all ease 0.2s", + transform: "translateY(24px)", + selectors: { + [`${card({})}:hover &`]: { + transform: "translateY(0px)", + }, + }, +}); + +export const title = style({ + fontSize: "16px", + fontWeight: "bold", + textAlign: "left", +}); + +export const downloadOptions = style({ + display: "flex", + margin: "0", + padding: "0", + gap: `${SPACING_UNIT}px`, + flexWrap: "wrap", +}); + +export const downloadOption = style({ + color: "#c0c1c7", + fontSize: "10px", + padding: `${SPACING_UNIT / 2}px ${SPACING_UNIT}px`, + border: "solid 1px #c0c1c7", + borderRadius: "4px", + display: "flex", + alignItems: "center", +}); + +export const specifics = style({ + display: "flex", + gap: `${SPACING_UNIT * 2}px`, + justifyContent: "center", +}); + +export const specificsItem = style({ + gap: `${SPACING_UNIT}px`, + display: "flex", + color: "#c0c1c7", + fontSize: "12px", + alignItems: "flex-end", +}); + +export const titleContainer = style({ + display: "flex", + alignItems: "center", + gap: `${SPACING_UNIT}px`, + color: "#c0c1c7", +}); + +export const shopIcon = style({ + width: "20px", + height: "20px", + minWidth: "20px", +}); + +export const noDownloadsLabel = style({ + color: vars.color.bodyText, + fontWeight: "bold", +}); diff --git a/src/renderer/src/components/game-card/game-card.tsx b/src/renderer/src/components/game-card/game-card.tsx new file mode 100644 index 00000000..ce9789c8 --- /dev/null +++ b/src/renderer/src/components/game-card/game-card.tsx @@ -0,0 +1,87 @@ +import { DownloadIcon, FileDirectoryIcon } from "@primer/octicons-react"; +import type { CatalogueEntry } from "@types"; + +import SteamLogo from "@renderer/assets/steam-logo.svg?react"; +import EpicGamesLogo from "@renderer/assets/epic-games-logo.svg?react"; + +import { AsyncImage } from "../async-image/async-image"; + +import * as styles from "./game-card.css"; +import { useAppSelector } from "@renderer/hooks"; +import { useTranslation } from "react-i18next"; + +export interface GameCardProps + extends React.DetailedHTMLProps< + React.ButtonHTMLAttributes, + HTMLButtonElement + > { + game: CatalogueEntry; + disabled?: boolean; +} + +const shopIcon = { + epic: , + steam: , +}; + +export function GameCard({ game, disabled, ...props }: GameCardProps) { + const { t } = useTranslation("game_card"); + + const repackersFriendlyNames = useAppSelector( + (state) => state.repackersFriendlyNames.value + ); + + const uniqueRepackers = Array.from( + new Set(game.repacks.map(({ repacker }) => repacker)) + ); + + return ( + + ); +} diff --git a/src/renderer/src/components/header/header.css.ts b/src/renderer/src/components/header/header.css.ts new file mode 100644 index 00000000..eb95dc6e --- /dev/null +++ b/src/renderer/src/components/header/header.css.ts @@ -0,0 +1,148 @@ +import type { ComplexStyleRule } from "@vanilla-extract/css"; +import { keyframes, style } from "@vanilla-extract/css"; +import { recipe } from "@vanilla-extract/recipes"; + +import { SPACING_UNIT, vars } from "../../theme.css"; + +export const slideIn = keyframes({ + "0%": { transform: "translateX(20px)", opacity: "0" }, + "100%": { + transform: "translateX(0)", + opacity: "1", + }, +}); + +export const slideOut = keyframes({ + "0%": { transform: "translateX(0px)", opacity: "1" }, + "100%": { + transform: "translateX(20px)", + opacity: "0", + }, +}); + +export const header = recipe({ + base: { + display: "flex", + justifyContent: "space-between", + alignItems: "center", + gap: `${SPACING_UNIT * 2}px`, + WebkitAppRegion: "drag", + width: "100%", + padding: `${SPACING_UNIT * 2}px ${SPACING_UNIT * 3}px`, + color: "#c0c1c7", + borderBottom: `solid 1px ${vars.color.borderColor}`, + backgroundColor: vars.color.darkBackground, + } as ComplexStyleRule, + variants: { + draggingDisabled: { + true: { + WebkitAppRegion: "no-drag", + } as ComplexStyleRule, + }, + isWindows: { + true: { + WebkitAppRegion: "no-drag", + } as ComplexStyleRule, + }, + }, +}); + +export const search = recipe({ + base: { + backgroundColor: vars.color.background, + display: "inline-flex", + transition: "all ease 0.2s", + width: "200px", + alignItems: "center", + borderRadius: "8px", + border: `solid 1px ${vars.color.borderColor}`, + height: "40px", + WebkitAppRegion: "no-drag", + } as ComplexStyleRule, + variants: { + focused: { + true: { + width: "250px", + borderColor: "#DADBE1", + }, + false: { + ":hover": { + borderColor: "rgba(255, 255, 255, 0.5)", + }, + }, + }, + }, +}); + +export const searchInput = style({ + backgroundColor: "transparent", + border: "none", + width: "100%", + height: "100%", + outline: "none", + color: "#DADBE1", + cursor: "default", + fontFamily: "inherit", + fontSize: vars.size.bodyFontSize, + textOverflow: "ellipsis", + ":focus": { + cursor: "text", + }, +}); + +export const actionButton = style({ + color: "inherit", + cursor: "pointer", + transition: "all ease 0.2s", + padding: `${SPACING_UNIT}px`, + ":hover": { + color: "#DADBE1", + }, +}); + +export const section = style({ + display: "flex", + alignItems: "center", + gap: `${SPACING_UNIT * 2}px`, + height: "100%", +}); + +export const backButton = recipe({ + base: { + color: vars.color.bodyText, + cursor: "pointer", + WebkitAppRegion: "no-drag", + position: "absolute", + transition: "transform ease 0.2s", + animationDuration: "0.2s", + width: "16px", + height: "16px", + display: "flex", + alignItems: "center", + } as ComplexStyleRule, + variants: { + enabled: { + true: { + animationName: slideIn, + }, + false: { + opacity: "0", + pointerEvents: "none", + animationName: slideOut, + }, + }, + }, +}); + +export const title = recipe({ + base: { + transition: "all ease 0.2s", + }, + variants: { + hasBackButton: { + true: { + transform: "translateX(28px)", + }, + }, + }, +}); diff --git a/src/renderer/src/components/header/header.tsx b/src/renderer/src/components/header/header.tsx new file mode 100644 index 00000000..ea363c00 --- /dev/null +++ b/src/renderer/src/components/header/header.tsx @@ -0,0 +1,126 @@ +import { useTranslation } from "react-i18next"; +import { useEffect, useMemo, useRef, useState } from "react"; +import { useLocation, useNavigate } from "react-router-dom"; +import { ArrowLeftIcon, SearchIcon, XIcon } from "@primer/octicons-react"; + +import { useAppDispatch, useAppSelector } from "@renderer/hooks"; + +import * as styles from "./header.css"; +import { clearSearch } from "@renderer/features"; + +export interface HeaderProps { + onSearch: (query: string) => void; + onClear: () => void; + search?: string; +} + +const pathTitle: Record = { + "/": "home", + "/catalogue": "catalogue", + "/downloads": "downloads", + "/settings": "settings", +}; + +export function Header({ onSearch, onClear, search }: HeaderProps) { + const inputRef = useRef(null); + + const navigate = useNavigate(); + const location = useLocation(); + + const { headerTitle, draggingDisabled } = useAppSelector( + (state) => state.window + ); + const dispatch = useAppDispatch(); + + const [isFocused, setIsFocused] = useState(false); + + const { t } = useTranslation("header"); + + const title = useMemo(() => { + if (location.pathname.startsWith("/game")) return headerTitle; + if (location.pathname.startsWith("/search")) return t("search_results"); + + return t(pathTitle[location.pathname]); + }, [location.pathname, headerTitle, t]); + + useEffect(() => { + if (search && !location.pathname.startsWith("/search")) { + dispatch(clearSearch()); + } + }, [location.pathname, search, dispatch]); + + const focusInput = () => { + setIsFocused(true); + inputRef.current?.focus(); + }; + + const handleBlur = () => { + setIsFocused(false); + }; + + const handleBackButtonClick = () => { + navigate(-1); + }; + + return ( +
+
+ + +

+ {title} +

+
+ +
+
+ + + onSearch(event.target.value)} + onFocus={() => setIsFocused(true)} + onBlur={handleBlur} + /> + + {search && ( + + )} +
+
+
+ ); +} diff --git a/src/renderer/src/components/hero/hero.css.ts b/src/renderer/src/components/hero/hero.css.ts new file mode 100644 index 00000000..cc4aea7a --- /dev/null +++ b/src/renderer/src/components/hero/hero.css.ts @@ -0,0 +1,64 @@ +import { style } from "@vanilla-extract/css"; +import { SPACING_UNIT, vars } from "../../theme.css"; + +export const hero = style({ + width: "100%", + height: "280px", + minHeight: "280px", + maxHeight: "280px", + borderRadius: "8px", + color: "#DADBE1", + overflow: "hidden", + boxShadow: "0px 0px 15px 0px #000000", + cursor: "pointer", + border: `solid 1px ${vars.color.borderColor}`, + zIndex: "1", + "@media": { + "(min-width: 1250px)": { + backgroundPosition: "center", + }, + }, +}); + +export const heroMedia = style({ + objectFit: "cover", + objectPosition: "center", + position: "absolute", + zIndex: "-1", + width: "100%", + height: "100%", + transition: "all ease 0.2s", + selectors: { + [`${hero}:hover &`]: { + transform: "scale(1.02)", + }, + }, +}); + +export const backdrop = style({ + width: "100%", + height: "100%", + background: "linear-gradient(0deg, rgba(0, 0, 0, 0.6) 25%, transparent 100%)", + position: "relative", + display: "flex", + overflow: "hidden", +}); + +export const description = style({ + maxWidth: "700px", + fontSize: vars.size.bodyFontSize, + color: "#c0c1c7", + textAlign: "left", + fontFamily: "'Fira Sans', sans-serif", + lineHeight: "20px", +}); + +export const content = style({ + width: "100%", + height: "100%", + padding: `${SPACING_UNIT * 4}px ${SPACING_UNIT * 3}px`, + gap: `${SPACING_UNIT * 2}px`, + display: "flex", + flexDirection: "column", + justifyContent: "flex-end", +}); diff --git a/src/renderer/src/components/hero/hero.tsx b/src/renderer/src/components/hero/hero.tsx new file mode 100644 index 00000000..4e766ca8 --- /dev/null +++ b/src/renderer/src/components/hero/hero.tsx @@ -0,0 +1,59 @@ +import { useNavigate } from "react-router-dom"; +import { AsyncImage } from "@renderer/components"; +import * as styles from "./hero.css"; +import { useEffect, useState } from "react"; +import { ShopDetails } from "@types"; +import { getSteamLanguage, steamUrlBuilder } from "@renderer/helpers"; +import { useTranslation } from "react-i18next"; + +const FEATURED_GAME_ID = "377160"; + +export function Hero() { + const [featuredGameDetails, setFeaturedGameDetails] = + useState(null); + + const { i18n } = useTranslation(); + + const navigate = useNavigate(); + + useEffect(() => { + window.electron + .getGameShopDetails( + FEATURED_GAME_ID, + "steam", + getSteamLanguage(i18n.language) + ) + .then((result) => { + setFeaturedGameDetails(result); + }); + }, [i18n.language]); + + return ( + + ); +} diff --git a/src/renderer/src/components/index.ts b/src/renderer/src/components/index.ts new file mode 100644 index 00000000..7e6069f1 --- /dev/null +++ b/src/renderer/src/components/index.ts @@ -0,0 +1,10 @@ +export * from "./bottom-panel/bottom-panel"; +export * from "./button/button"; +export * from "./game-card/game-card"; +export * from "./header/header"; +export * from "./hero/hero"; +export * from "./modal/modal"; +export * from "./sidebar/sidebar"; +export * from "./async-image/async-image"; +export * from "./text-field/text-field"; +export * from "./checkbox-field/checkbox-field"; diff --git a/src/renderer/src/components/modal/modal.css.ts b/src/renderer/src/components/modal/modal.css.ts new file mode 100644 index 00000000..d6e4732d --- /dev/null +++ b/src/renderer/src/components/modal/modal.css.ts @@ -0,0 +1,108 @@ +import { keyframes, style } from "@vanilla-extract/css"; +import { recipe } from "@vanilla-extract/recipes"; +import { SPACING_UNIT, vars } from "../../theme.css"; + +export const backdropFadeIn = keyframes({ + "0%": { backdropFilter: "blur(0px)", backgroundColor: "rgba(0, 0, 0, 0.5)" }, + "100%": { + backdropFilter: "blur(2px)", + backgroundColor: "rgba(0, 0, 0, 0.7)", + }, +}); + +export const backdropFadeOut = keyframes({ + "0%": { backdropFilter: "blur(2px)", backgroundColor: "rgba(0, 0, 0, 0.7)" }, + "100%": { + backdropFilter: "blur(0px)", + backgroundColor: "rgba(0, 0, 0, 0)", + }, +}); + +export const modalSlideIn = keyframes({ + "0%": { opacity: 0 }, + "100%": { + opacity: 1, + }, +}); + +export const modalSlideOut = keyframes({ + "0%": { opacity: 1 }, + "100%": { + opacity: 0, + }, +}); + +export const backdrop = recipe({ + base: { + animationName: backdropFadeIn, + animationDuration: "0.4s", + backgroundColor: "rgba(0, 0, 0, 0.7)", + position: "absolute", + width: "100%", + height: "100%", + display: "flex", + justifyContent: "center", + alignItems: "center", + zIndex: 1, + top: 0, + padding: `${SPACING_UNIT * 3}px`, + backdropFilter: "blur(2px)", + transition: "all ease 0.2s", + }, + variants: { + closing: { + true: { + animationName: backdropFadeOut, + backdropFilter: "blur(0px)", + backgroundColor: "rgba(0, 0, 0, 0)", + }, + }, + }, +}); + +export const modal = recipe({ + base: { + animationName: modalSlideIn, + animationDuration: "0.3s", + backgroundColor: vars.color.background, + borderRadius: "5px", + maxWidth: "600px", + color: vars.color.bodyText, + maxHeight: "100%", + border: `solid 1px ${vars.color.borderColor}`, + overflow: "hidden", + display: "flex", + flexDirection: "column", + }, + variants: { + closing: { + true: { + animationName: modalSlideOut, + opacity: 0, + }, + }, + }, +}); + +export const modalContent = style({ + height: "100%", + overflow: "auto", + padding: `${SPACING_UNIT * 3}px ${SPACING_UNIT * 2}px`, +}); + +export const modalHeader = style({ + display: "flex", + gap: `${SPACING_UNIT}px`, + padding: `${SPACING_UNIT * 2}px`, + borderBottom: `solid 1px ${vars.color.borderColor}`, + justifyContent: "space-between", + alignItems: "flex-start", +}); + +export const closeModalButton = style({ + cursor: "pointer", +}); + +export const closeModalButtonIcon = style({ + color: vars.color.bodyText, +}); diff --git a/src/renderer/src/components/modal/modal.tsx b/src/renderer/src/components/modal/modal.tsx new file mode 100644 index 00000000..35be1bf9 --- /dev/null +++ b/src/renderer/src/components/modal/modal.tsx @@ -0,0 +1,69 @@ +import { useEffect, useState } from "react"; +import { createPortal } from "react-dom"; +import { XIcon } from "@primer/octicons-react"; + +import * as styles from "./modal.css"; +import { useAppDispatch } from "@renderer/hooks"; +import { toggleDragging } from "@renderer/features"; + +export interface ModalProps { + visible: boolean; + title: string; + description: string; + onClose: () => void; + children: React.ReactNode; +} + +export function Modal({ + visible, + title, + description, + onClose, + children, +}: ModalProps) { + const [isClosing, setIsClosing] = useState(false); + const dispatch = useAppDispatch(); + + const handleCloseClick = () => { + setIsClosing(true); + const zero = performance.now(); + + requestAnimationFrame(function animateClosing(time) { + if (time - zero <= 400) { + requestAnimationFrame(animateClosing); + } else { + onClose(); + setIsClosing(false); + } + }); + }; + + useEffect(() => { + dispatch(toggleDragging(visible)); + }, [dispatch, visible]); + + if (!visible) return null; + + return createPortal( +
+
+
+
+

{title}

+

{description}

+
+ + +
+
{children}
+
+
, + document.body + ); +} diff --git a/src/renderer/src/components/sidebar/download-icon.tsx b/src/renderer/src/components/sidebar/download-icon.tsx new file mode 100644 index 00000000..474c631d --- /dev/null +++ b/src/renderer/src/components/sidebar/download-icon.tsx @@ -0,0 +1,22 @@ +import { useRef } from "react"; +import Lottie from "lottie-react"; + +import downloadingAnimation from "@renderer/assets/lottie/downloading.json"; + +export interface DownloadIconProps { + isDownloading: boolean; +} + +export function DownloadIcon({ isDownloading }: DownloadIconProps) { + const lottieRef = useRef(null); + + return ( + + ); +} diff --git a/src/renderer/src/components/sidebar/routes.tsx b/src/renderer/src/components/sidebar/routes.tsx new file mode 100644 index 00000000..8f54bac0 --- /dev/null +++ b/src/renderer/src/components/sidebar/routes.tsx @@ -0,0 +1,27 @@ +import { AppsIcon, GearIcon, HomeIcon } from "@primer/octicons-react"; +import { DownloadIcon } from "./download-icon"; + +export const routes = [ + { + path: "/", + nameKey: "home", + render: () => , + }, + { + path: "/catalogue", + nameKey: "catalogue", + render: () => , + }, + { + path: "/downloads", + nameKey: "downloads", + render: (isDownloading: boolean) => ( + + ), + }, + { + path: "/settings", + nameKey: "settings", + render: () => , + }, +]; diff --git a/src/renderer/src/components/sidebar/sidebar.css.ts b/src/renderer/src/components/sidebar/sidebar.css.ts new file mode 100644 index 00000000..e4ff22f8 --- /dev/null +++ b/src/renderer/src/components/sidebar/sidebar.css.ts @@ -0,0 +1,170 @@ +import { style } from "@vanilla-extract/css"; +import { recipe } from "@vanilla-extract/recipes"; +import { SPACING_UNIT, vars } from "../../theme.css"; + +export const sidebar = recipe({ + base: { + backgroundColor: vars.color.darkBackground, + color: "#c0c1c7", + flexDirection: "column", + display: "flex", + transition: "opacity ease 0.2s", + borderRight: `solid 1px ${vars.color.borderColor}`, + position: "relative", + }, + variants: { + resizing: { + true: { + opacity: vars.opacity.active, + pointerEvents: "none", + }, + }, + }, +}); + +export const content = recipe({ + base: { + display: "flex", + flexDirection: "column", + padding: `${SPACING_UNIT * 2}px`, + paddingBottom: "0", + width: "100%", + overflow: "auto", + }, + variants: { + macos: { + true: { + paddingTop: `${SPACING_UNIT * 6}px`, + }, + }, + }, +}); + +export const handle = style({ + width: "5px", + height: "100%", + cursor: "col-resize", + position: "absolute", + right: "0", +}); + +export const menu = style({ + listStyle: "none", + padding: "0", + margin: "0", + gap: `${SPACING_UNIT * 2}px`, + display: "flex", + flexDirection: "column", + overflow: "hidden", +}); + +export const menuItem = recipe({ + base: { + transition: "all ease 0.1s", + cursor: "pointer", + textWrap: "nowrap", + display: "flex", + opacity: "0.9", + color: "#DADBE1", + ":hover": { + opacity: "1", + }, + }, + variants: { + active: { + true: { + opacity: "1", + fontWeight: "bold", + }, + }, + muted: { + true: { + opacity: vars.opacity.disabled, + ":hover": { + opacity: "1", + }, + }, + }, + }, +}); + +export const menuItemButton = style({ + color: "inherit", + display: "flex", + alignItems: "center", + gap: `${SPACING_UNIT}px`, + cursor: "pointer", + overflow: "hidden", + width: "100%", + selectors: { + [`${menuItem({ active: true }).split(" ")[1]} &`]: { + fontWeight: "bold", + }, + }, +}); + +export const menuItemButtonLabel = style({ + textOverflow: "ellipsis", + overflow: "hidden", +}); + +export const gameIcon = style({ + width: "20px", + height: "20px", + borderRadius: "4px", + backgroundSize: "cover", +}); + +export const sectionTitle = style({ + textTransform: "uppercase", + fontWeight: "bold", +}); + +export const section = recipe({ + base: { + padding: `${SPACING_UNIT * 2}px 0`, + gap: `${SPACING_UNIT * 2}px`, + display: "flex", + flexDirection: "column", + }, + variants: { + hasBorder: { + true: { + borderBottom: `solid 1px ${vars.color.borderColor}`, + }, + }, + }, +}); + +export const sidebarFooter = style({ + marginTop: "auto", + padding: `${SPACING_UNIT * 2}px`, + display: "flex", + alignItems: "center", + justifyContent: "space-between", +}); + +export const footerSocialsContainer = style({ + display: "flex", + alignItems: "center", + gap: `${SPACING_UNIT * 1.5}px`, +}); + +export const footerSocialsItem = style({ + color: vars.color.bodyText, + backgroundColor: vars.color.darkBackground, + width: "16px", + height: "16px", + display: "flex", + alignItems: "center", + transition: "all ease 0.15s", + ":hover": { + opacity: 0.75, + cursor: "pointer", + }, +}); + +export const footerText = style({ + color: vars.color.bodyText, + fontSize: "12px", +}); diff --git a/src/renderer/src/components/sidebar/sidebar.tsx b/src/renderer/src/components/sidebar/sidebar.tsx new file mode 100644 index 00000000..5cdb2572 --- /dev/null +++ b/src/renderer/src/components/sidebar/sidebar.tsx @@ -0,0 +1,255 @@ +import { useEffect, useRef, useState } from "react"; +import { useTranslation } from "react-i18next"; +import { useLocation, useNavigate } from "react-router-dom"; + +import type { Game } from "@types"; + +import { AsyncImage, TextField } from "@renderer/components"; +import { useDownload, useLibrary } from "@renderer/hooks"; +import { SPACING_UNIT } from "../../theme.css"; + +import { routes } from "./routes"; + +import { MarkGithubIcon } from "@primer/octicons-react"; +import DiscordLogo from "@renderer/assets/discord-icon.svg?react"; +import XLogo from "@renderer/assets/x-icon.svg?react"; + +import * as styles from "./sidebar.css"; + +const socials = [ + { + url: "https://discord.gg/hydralauncher", + icon: , + }, + { + url: "https://twitter.com/hydralauncher", + icon: , + }, + { + url: "https://github.com/hydralauncher/hydra", + icon: , + }, +]; + +const SIDEBAR_MIN_WIDTH = 200; +const SIDEBAR_INITIAL_WIDTH = 250; +const SIDEBAR_MAX_WIDTH = 450; + +const initialSidebarWidth = window.localStorage.getItem("sidebarWidth"); + +export function Sidebar() { + const { t } = useTranslation("sidebar"); + const { library, updateLibrary } = useLibrary(); + const navigate = useNavigate(); + + const [filteredLibrary, setFilteredLibrary] = useState([]); + + const [isResizing, setIsResizing] = useState(false); + const [sidebarWidth, setSidebarWidth] = useState( + initialSidebarWidth ? Number(initialSidebarWidth) : SIDEBAR_INITIAL_WIDTH + ); + + const location = useLocation(); + + const { game: gameDownloading, progress } = useDownload(); + + useEffect(() => { + updateLibrary(); + }, [gameDownloading?.id, updateLibrary]); + + const isDownloading = library.some((game) => + ["downloading", "checking_files", "downloading_metadata"].includes( + game.status + ) + ); + + const sidebarRef = useRef(null); + + const cursorPos = useRef({ x: 0 }); + const sidebarInitialWidth = useRef(0); + + const handleMouseDown: React.MouseEventHandler = ( + event + ) => { + setIsResizing(true); + cursorPos.current.x = event.screenX; + sidebarInitialWidth.current = + sidebarRef.current?.clientWidth || SIDEBAR_INITIAL_WIDTH; + }; + + const handleFilter: React.ChangeEventHandler = (event) => { + setFilteredLibrary( + library.filter((game) => + game.title + .toLowerCase() + .includes(event.target.value.toLocaleLowerCase()) + ) + ); + }; + + useEffect(() => { + setFilteredLibrary(library); + }, [library]); + + useEffect(() => { + window.onmousemove = (event) => { + if (isResizing) { + const cursorXDelta = event.screenX - cursorPos.current.x; + const newWidth = Math.max( + SIDEBAR_MIN_WIDTH, + Math.min( + sidebarInitialWidth.current + cursorXDelta, + SIDEBAR_MAX_WIDTH + ) + ); + + setSidebarWidth(newWidth); + window.localStorage.setItem("sidebarWidth", String(newWidth)); + } + }; + + window.onmouseup = () => { + if (isResizing) setIsResizing(false); + }; + + return () => { + window.onmouseup = null; + window.onmousemove = null; + }; + }, [isResizing]); + + const getGameTitle = (game: Game) => { + if (game.status === "paused") return t("paused", { title: game.title }); + + if (gameDownloading?.id === game.id) { + const isVerifying = ["downloading_metadata", "checking_files"].includes( + gameDownloading?.status + ); + + if (isVerifying) + return t(gameDownloading.status, { + title: game.title, + percentage: progress, + }); + + return t("downloading", { + title: game.title, + percentage: progress, + }); + } + + return game.title; + }; + + const handleSidebarItemClick = (path: string) => { + if (path !== location.pathname) { + navigate(path); + } + }; + + return ( + + ); +} diff --git a/src/renderer/src/components/text-field/text-field.css.ts b/src/renderer/src/components/text-field/text-field.css.ts new file mode 100644 index 00000000..d38230ef --- /dev/null +++ b/src/renderer/src/components/text-field/text-field.css.ts @@ -0,0 +1,59 @@ +import { SPACING_UNIT, vars } from "../../theme.css"; +import { style } from "@vanilla-extract/css"; +import { recipe } from "@vanilla-extract/recipes"; + +export const textField = recipe({ + base: { + display: "inline-flex", + transition: "all ease 0.2s", + width: "100%", + alignItems: "center", + borderRadius: "8px", + border: `solid 1px ${vars.color.borderColor}`, + height: "40px", + minHeight: "40px", + }, + variants: { + focused: { + true: { + borderColor: "#DADBE1", + }, + false: { + ":hover": { + borderColor: "rgba(255, 255, 255, 0.5)", + }, + }, + }, + theme: { + primary: { + backgroundColor: vars.color.darkBackground, + }, + dark: { + backgroundColor: vars.color.background, + }, + }, + }, +}); + +export const textFieldInput = style({ + backgroundColor: "transparent", + border: "none", + width: "100%", + height: "100%", + outline: "none", + color: "#DADBE1", + cursor: "default", + fontFamily: "inherit", + fontSize: vars.size.bodyFontSize, + textOverflow: "ellipsis", + padding: `${SPACING_UNIT}px`, + ":focus": { + cursor: "text", + }, +}); + +export const label = style({ + marginBottom: `${SPACING_UNIT}px`, + display: "block", + color: vars.color.bodyText, +}); diff --git a/src/renderer/src/components/text-field/text-field.tsx b/src/renderer/src/components/text-field/text-field.tsx new file mode 100644 index 00000000..62378615 --- /dev/null +++ b/src/renderer/src/components/text-field/text-field.tsx @@ -0,0 +1,42 @@ +import { useId, useState } from "react"; +import type { RecipeVariants } from "@vanilla-extract/recipes"; +import * as styles from "./text-field.css"; + +export interface TextFieldProps + extends React.DetailedHTMLProps< + React.InputHTMLAttributes, + HTMLInputElement + > { + theme?: RecipeVariants["theme"]; + label?: string; +} + +export function TextField({ + theme = "primary", + label, + ...props +}: TextFieldProps) { + const [isFocused, setIsFocused] = useState(false); + const id = useId(); + + return ( +
+ {label && ( + + )} + +
+ setIsFocused(true)} + onBlur={() => setIsFocused(false)} + {...props} + /> +
+
+ ); +} diff --git a/src/renderer/src/constants.ts b/src/renderer/src/constants.ts new file mode 100644 index 00000000..6beac79f --- /dev/null +++ b/src/renderer/src/constants.ts @@ -0,0 +1 @@ +export const VERSION_CODENAME = "Exodus"; diff --git a/src/renderer/src/declaration.d.ts b/src/renderer/src/declaration.d.ts new file mode 100644 index 00000000..6fd533db --- /dev/null +++ b/src/renderer/src/declaration.d.ts @@ -0,0 +1,95 @@ +import type { + CatalogueCategory, + CatalogueEntry, + Game, + GameShop, + HowLongToBeatCategory, + ShopDetails, + TorrentProgress, + UserPreferences, +} from "@types"; +import type { DiskSpace } from "check-disk-space"; + +declare global { + declare module "*.svg" { + const content: React.FunctionComponent>; + export default content; + } + + interface Electron { + /* Torrenting */ + startGameDownload: ( + repackId: number, + objectID: string, + title: string, + shop: GameShop + ) => Promise; + cancelGameDownload: (gameId: number) => Promise; + pauseGameDownload: (gameId: number) => Promise; + resumeGameDownload: (gameId: number) => Promise; + onDownloadProgress: ( + cb: (value: TorrentProgress) => void + ) => () => Electron.IpcRenderer; + + /* Catalogue */ + searchGames: (query: string) => Promise; + getCatalogue: (category: CatalogueCategory) => Promise; + getGameShopDetails: ( + objectID: string, + shop: GameShop, + language: string + ) => Promise; + getRandomGame: () => Promise; + getHowLongToBeat: ( + objectID: string, + shop: GameShop, + title: string + ) => Promise; + getGames: ( + take?: number, + prevCursor?: number + ) => Promise<{ results: CatalogueEntry[]; cursor: number }>; + + /* Library */ + addGameToLibrary: ( + objectID: string, + title: string, + shop: GameShop, + executablePath: string + ) => Promise; + getLibrary: () => Promise; + getRepackersFriendlyNames: () => Promise>; + openGameInstaller: (gameId: number) => Promise; + openGame: (gameId: number, executablePath: string) => Promise; + closeGame: (gameId: number) => Promise; + removeGame: (gameId: number) => Promise; + deleteGameFolder: (gameId: number) => Promise; + getGameByObjectID: (objectID: string) => Promise; + onPlaytime: (cb: (gameId: number) => void) => () => Electron.IpcRenderer; + onGameClose: (cb: (gameId: number) => void) => () => Electron.IpcRenderer; + + /* User preferences */ + getUserPreferences: () => Promise; + updateUserPreferences: ( + preferences: Partial + ) => Promise; + + /* Hardware */ + getDiskFreeSpace: () => Promise; + + /* Misc */ + getOrCacheImage: (url: string) => Promise; + openExternal: (src: string) => Promise; + getVersion: () => Promise; + ping: () => string; + getDefaultDownloadsPath: () => Promise; + showOpenDialog: ( + options: Electron.OpenDialogOptions + ) => Promise; + platform: NodeJS.Platform; + } + + interface Window { + electron: Electron; + } +} diff --git a/src/renderer/src/features/download-slice.ts b/src/renderer/src/features/download-slice.ts new file mode 100644 index 00000000..23ba9c7e --- /dev/null +++ b/src/renderer/src/features/download-slice.ts @@ -0,0 +1,49 @@ +import { createSlice } from "@reduxjs/toolkit"; +import type { PayloadAction } from "@reduxjs/toolkit"; +import type { TorrentProgress } from "@types"; + +interface DownloadState { + packets: TorrentProgress[]; + gameId: number | null; + gamesWithDeletionInProgress: number[]; +} + +const initialState: DownloadState = { + packets: [], + gameId: null, + gamesWithDeletionInProgress: [], +}; + +export const downloadSlice = createSlice({ + name: "download", + initialState, + reducers: { + addPacket: (state, action: PayloadAction) => { + state.packets = [...state.packets, action.payload]; + if (!state.gameId) state.gameId = action.payload.game.id; + }, + clearDownload: (state) => { + state.packets = []; + state.gameId = null; + }, + setGameDeleting: (state, action: PayloadAction) => { + if ( + !state.gamesWithDeletionInProgress.includes(action.payload) && + action.payload + ) { + state.gamesWithDeletionInProgress.push(action.payload); + } + }, + removeGameFromDeleting: (state, action: PayloadAction) => { + const index = state.gamesWithDeletionInProgress.indexOf(action.payload); + if (index >= 0) state.gamesWithDeletionInProgress.splice(index, 1); + }, + }, +}); + +export const { + addPacket, + clearDownload, + setGameDeleting, + removeGameFromDeleting, +} = downloadSlice.actions; diff --git a/src/renderer/src/features/index.ts b/src/renderer/src/features/index.ts new file mode 100644 index 00000000..368afe0d --- /dev/null +++ b/src/renderer/src/features/index.ts @@ -0,0 +1,6 @@ +export * from "./search-slice"; +export * from "./repackers-friendly-names-slice"; +export * from "./library-slice"; +export * from "./use-preferences-slice"; +export * from "./download-slice"; +export * from "./window-slice"; diff --git a/src/renderer/src/features/library-slice.ts b/src/renderer/src/features/library-slice.ts new file mode 100644 index 00000000..15a36ba7 --- /dev/null +++ b/src/renderer/src/features/library-slice.ts @@ -0,0 +1,24 @@ +import { createSlice } from "@reduxjs/toolkit"; +import type { PayloadAction } from "@reduxjs/toolkit"; + +import type { Game } from "@types"; + +interface LibraryState { + value: Game[]; +} + +const initialState: LibraryState = { + value: [], +}; + +export const librarySlice = createSlice({ + name: "library", + initialState, + reducers: { + setLibrary: (state, action: PayloadAction) => { + state.value = action.payload; + }, + }, +}); + +export const { setLibrary } = librarySlice.actions; diff --git a/src/renderer/src/features/repackers-friendly-names-slice.ts b/src/renderer/src/features/repackers-friendly-names-slice.ts new file mode 100644 index 00000000..e7daa109 --- /dev/null +++ b/src/renderer/src/features/repackers-friendly-names-slice.ts @@ -0,0 +1,26 @@ +import { createSlice } from "@reduxjs/toolkit"; +import type { PayloadAction } from "@reduxjs/toolkit"; + +interface RepackersFriendlyNamesState { + value: Record; +} + +const initialState: RepackersFriendlyNamesState = { + value: {}, +}; + +export const repackersFriendlyNamesSlice = createSlice({ + name: "repackersFriendlyNames", + initialState, + reducers: { + setRepackersFriendlyNames: ( + state, + action: PayloadAction + ) => { + state.value = action.payload; + }, + }, +}); + +export const { setRepackersFriendlyNames } = + repackersFriendlyNamesSlice.actions; diff --git a/src/renderer/src/features/search-slice.ts b/src/renderer/src/features/search-slice.ts new file mode 100644 index 00000000..2c064aa2 --- /dev/null +++ b/src/renderer/src/features/search-slice.ts @@ -0,0 +1,25 @@ +import { createSlice } from "@reduxjs/toolkit"; +import type { PayloadAction } from "@reduxjs/toolkit"; + +interface SearchState { + value: string; +} + +const initialState: SearchState = { + value: "", +}; + +export const searchSlice = createSlice({ + name: "search", + initialState, + reducers: { + setSearch: (state, action: PayloadAction) => { + state.value = action.payload; + }, + clearSearch: (state) => { + state.value = ""; + }, + }, +}); + +export const { setSearch, clearSearch } = searchSlice.actions; diff --git a/src/renderer/src/features/use-preferences-slice.ts b/src/renderer/src/features/use-preferences-slice.ts new file mode 100644 index 00000000..f6a3cf65 --- /dev/null +++ b/src/renderer/src/features/use-preferences-slice.ts @@ -0,0 +1,23 @@ +import { createSlice } from "@reduxjs/toolkit"; +import type { PayloadAction } from "@reduxjs/toolkit"; +import type { UserPreferences } from "@types"; + +interface UserPreferencesState { + value: UserPreferences | null; +} + +const initialState: UserPreferencesState = { + value: null, +}; + +export const userPreferencesSlice = createSlice({ + name: "userPreferences", + initialState, + reducers: { + setUserPreferences: (state, action: PayloadAction) => { + state.value = action.payload; + }, + }, +}); + +export const { setUserPreferences } = userPreferencesSlice.actions; diff --git a/src/renderer/src/features/window-slice.ts b/src/renderer/src/features/window-slice.ts new file mode 100644 index 00000000..4d8b5fa7 --- /dev/null +++ b/src/renderer/src/features/window-slice.ts @@ -0,0 +1,27 @@ +import { createSlice } from "@reduxjs/toolkit"; +import type { PayloadAction } from "@reduxjs/toolkit"; + +interface WindowState { + draggingDisabled: boolean; + headerTitle: string; +} + +const initialState: WindowState = { + draggingDisabled: false, + headerTitle: "", +}; + +export const windowSlice = createSlice({ + name: "window", + initialState, + reducers: { + toggleDragging: (state, action: PayloadAction) => { + state.draggingDisabled = action.payload; + }, + setHeaderTitle: (state, action: PayloadAction) => { + state.headerTitle = action.payload; + }, + }, +}); + +export const { toggleDragging, setHeaderTitle } = windowSlice.actions; diff --git a/src/renderer/src/helpers.ts b/src/renderer/src/helpers.ts new file mode 100644 index 00000000..ae100f62 --- /dev/null +++ b/src/renderer/src/helpers.ts @@ -0,0 +1,25 @@ +export const steamUrlBuilder = { + library: (objectID: string) => + `https://steamcdn-a.akamaihd.net/steam/apps/${objectID}/header.jpg`, + libraryHero: (objectID: string) => + `https://steamcdn-a.akamaihd.net/steam/apps/${objectID}/library_hero.jpg`, + logo: (objectID: string) => + `https://cdn.cloudflare.steamstatic.com/steam/apps/${objectID}/logo.png`, +}; + +export const formatDownloadProgress = (progress?: number) => { + if (!progress) return "0%"; + const progressPercentage = progress * 100; + + if (Number(progressPercentage.toFixed(2)) % 1 === 0) + return `${Math.floor(progressPercentage)}%`; + + return `${progressPercentage.toFixed(2)}%`; +}; + +export const getSteamLanguage = (language: string) => { + if (language.startsWith("pt")) return "brazilian"; + if (language.startsWith("es")) return "spanish"; + if (language.startsWith("fr")) return "french"; + return "english"; +}; diff --git a/src/renderer/src/hooks/index.ts b/src/renderer/src/hooks/index.ts new file mode 100644 index 00000000..aae58295 --- /dev/null +++ b/src/renderer/src/hooks/index.ts @@ -0,0 +1,3 @@ +export * from "./use-download"; +export * from "./use-library"; +export * from "./redux"; diff --git a/src/renderer/src/hooks/redux.ts b/src/renderer/src/hooks/redux.ts new file mode 100644 index 00000000..ebfd6382 --- /dev/null +++ b/src/renderer/src/hooks/redux.ts @@ -0,0 +1,7 @@ +import { useDispatch, useSelector } from "react-redux"; +import type { TypedUseSelectorHook } from "react-redux"; + +import type { AppDispatch, RootState } from "@renderer/store"; + +export const useAppDispatch: () => AppDispatch = useDispatch; +export const useAppSelector: TypedUseSelectorHook = useSelector; diff --git a/src/renderer/src/hooks/use-date.ts b/src/renderer/src/hooks/use-date.ts new file mode 100644 index 00000000..2ffcb583 --- /dev/null +++ b/src/renderer/src/hooks/use-date.ts @@ -0,0 +1,33 @@ +import { formatDistance } from "date-fns"; +import type { FormatDistanceOptions } from "date-fns"; +import { ptBR, enUS, es, fr } from "date-fns/locale"; +import { useTranslation } from "react-i18next"; + +export function useDate() { + const { i18n } = useTranslation(); + + const getDateLocale = () => { + if (i18n.language.startsWith("pt")) return ptBR; + if (i18n.language.startsWith("es")) return es; + if (i18n.language.startsWith("fr")) return fr; + + return enUS; + }; + + return { + formatDistance: ( + date: string | number | Date, + baseDate: string | number | Date, + options?: FormatDistanceOptions + ) => { + try { + return formatDistance(date, baseDate, { + ...options, + locale: getDateLocale(), + }); + } catch (err) { + return ""; + } + }, + }; +} diff --git a/src/renderer/src/hooks/use-download.ts b/src/renderer/src/hooks/use-download.ts new file mode 100644 index 00000000..522dd2c2 --- /dev/null +++ b/src/renderer/src/hooks/use-download.ts @@ -0,0 +1,132 @@ +import { addMilliseconds } from "date-fns"; + +import { formatDownloadProgress } from "@renderer/helpers"; +import { useLibrary } from "./use-library"; +import { useAppDispatch, useAppSelector } from "./redux"; +import { + addPacket, + clearDownload, + setGameDeleting, + removeGameFromDeleting, +} from "@renderer/features"; +import type { GameShop, TorrentProgress } from "@types"; +import { useDate } from "./use-date"; +import { formatBytes } from "@renderer/utils"; + +export function useDownload() { + const { updateLibrary } = useLibrary(); + const { formatDistance } = useDate(); + + const { packets, gamesWithDeletionInProgress } = useAppSelector( + (state) => state.download + ); + const dispatch = useAppDispatch(); + + const lastPacket = packets.at(-1); + + const startDownload = ( + repackId: number, + objectID: string, + title: string, + shop: GameShop + ) => + window.electron + .startGameDownload(repackId, objectID, title, shop) + .then((game) => { + dispatch(clearDownload()); + updateLibrary(); + + return game; + }); + + const pauseDownload = (gameId: number) => + window.electron.pauseGameDownload(gameId).then(() => { + dispatch(clearDownload()); + updateLibrary(); + }); + + const resumeDownload = (gameId: number) => + window.electron.resumeGameDownload(gameId).then(() => { + updateLibrary(); + }); + + const cancelDownload = (gameId: number) => + window.electron.cancelGameDownload(gameId).then(() => { + dispatch(clearDownload()); + updateLibrary(); + deleteGame(gameId); + }); + + const removeGame = (gameId: number) => + window.electron.removeGame(gameId).then(() => { + updateLibrary(); + }); + + const isVerifying = ["downloading_metadata", "checking_files"].includes( + lastPacket?.game.status + ); + + const getETA = () => { + if (isVerifying || !isFinite(lastPacket?.timeRemaining)) { + return ""; + } + + try { + return formatDistance( + addMilliseconds(new Date(), lastPacket?.timeRemaining ?? 1), + new Date(), + { addSuffix: true } + ); + } catch (err) { + return ""; + } + }; + + const getProgress = () => { + if (lastPacket?.game.status === "checking_files") { + return formatDownloadProgress(lastPacket?.game.fileVerificationProgress); + } + + return formatDownloadProgress(lastPacket?.game.progress); + }; + + const deleteGame = (gameId: number) => + window.electron + .cancelGameDownload(gameId) + .then(() => { + dispatch(setGameDeleting(gameId)); + return window.electron.deleteGameFolder(gameId); + }) + .catch(() => {}) + .finally(() => { + updateLibrary(); + dispatch(removeGameFromDeleting(gameId)); + }); + + const isGameDeleting = (gameId: number) => { + return gamesWithDeletionInProgress.includes(gameId); + }; + + return { + game: lastPacket?.game, + bytesDownloaded: lastPacket?.game.bytesDownloaded, + fileSize: lastPacket?.game.fileSize, + isVerifying, + gameId: lastPacket?.game.id, + downloadSpeed: `${formatBytes(lastPacket?.downloadSpeed ?? 0)}/s`, + isDownloading: Boolean(lastPacket), + progress: getProgress(), + numPeers: lastPacket?.numPeers, + numSeeds: lastPacket?.numSeeds, + eta: getETA(), + startDownload, + pauseDownload, + resumeDownload, + cancelDownload, + removeGame, + deleteGame, + isGameDeleting, + clearDownload: () => dispatch(clearDownload()), + addPacket: (packet: TorrentProgress) => dispatch(addPacket(packet)), + }; +} diff --git a/src/renderer/src/hooks/use-library.ts b/src/renderer/src/hooks/use-library.ts new file mode 100644 index 00000000..f7310df0 --- /dev/null +++ b/src/renderer/src/hooks/use-library.ts @@ -0,0 +1,16 @@ +import { useCallback } from "react"; +import { useAppDispatch, useAppSelector } from "./redux"; +import { setLibrary } from "@renderer/features"; + +export function useLibrary() { + const dispatch = useAppDispatch(); + const library = useAppSelector((state) => state.library.value); + + const updateLibrary = useCallback(async () => { + return window.electron + .getLibrary() + .then((updatedLibrary) => dispatch(setLibrary(updatedLibrary))); + }, [dispatch]); + + return { library, updateLibrary }; +} diff --git a/src/renderer/src/main.tsx b/src/renderer/src/main.tsx new file mode 100644 index 00000000..2199cc0a --- /dev/null +++ b/src/renderer/src/main.tsx @@ -0,0 +1,102 @@ +import React from "react"; +import ReactDOM from "react-dom/client"; +import i18n from "i18next"; +import { initReactI18next } from "react-i18next"; +import { Provider } from "react-redux"; +import LanguageDetector from "i18next-browser-languagedetector"; +import { createHashRouter, RouterProvider } from "react-router-dom"; + +import { init } from "@sentry/electron/renderer"; +import { init as reactInit } from "@sentry/react"; + +import "@fontsource/fira-mono/400.css"; +import "@fontsource/fira-mono/500.css"; +import "@fontsource/fira-mono/700.css"; +import "@fontsource/fira-sans/400.css"; +import "@fontsource/fira-sans/500.css"; +import "@fontsource/fira-sans/700.css"; +import "react-loading-skeleton/dist/skeleton.css"; + +import { App } from "./app"; +import { + Home, + Downloads, + GameDetails, + SearchResults, + Settings, + Catalogue, +} from "@renderer/pages"; + +import { store } from "./store"; + +import * as resources from "@locales"; + +if (import.meta.env.RENDERER_VITE_SENTRY_DSN) { + init( + { + dsn: import.meta.env.RENDERER_VITE_SENTRY_DSN, + beforeSend: async (event) => { + const userPreferences = await window.electron.getUserPreferences(); + + if (userPreferences?.telemetryEnabled) return event; + return null; + }, + }, + reactInit + ); +} + +const router = createHashRouter([ + { + path: "/", + Component: App, + children: [ + { + path: "/", + Component: Home, + }, + { + path: "/catalogue", + Component: Catalogue, + }, + { + path: "/downloads", + Component: Downloads, + }, + { + path: "/game/:shop/:objectID", + Component: GameDetails, + }, + { + path: "/search", + Component: SearchResults, + }, + { + path: "/settings", + Component: Settings, + }, + ], + }, +]); + +i18n + .use(LanguageDetector) + .use(initReactI18next) + .init({ + resources, + fallbackLng: "en", + interpolation: { + escapeValue: false, + }, + }) + .then(() => { + window.electron.updateUserPreferences({ language: i18n.language }); + }); + +ReactDOM.createRoot(document.getElementById("root")!).render( + + + + + +); diff --git a/src/renderer/src/pages/catalogue/catalogue.tsx b/src/renderer/src/pages/catalogue/catalogue.tsx new file mode 100644 index 00000000..8dc5fc56 --- /dev/null +++ b/src/renderer/src/pages/catalogue/catalogue.tsx @@ -0,0 +1,115 @@ +import { Button, GameCard } from "@renderer/components"; +import Skeleton, { SkeletonTheme } from "react-loading-skeleton"; +import { useTranslation } from "react-i18next"; + +import type { CatalogueEntry } from "@types"; + +import { clearSearch } from "@renderer/features"; +import { useAppDispatch } from "@renderer/hooks"; +import { vars } from "../../theme.css"; +import { useEffect, useRef, useState } from "react"; +import { useNavigate, useSearchParams } from "react-router-dom"; +import * as styles from "../home/home.css"; +import { ArrowLeftIcon, ArrowRightIcon } from "@primer/octicons-react"; + +export function Catalogue() { + const dispatch = useAppDispatch(); + + const { t } = useTranslation("catalogue"); + + const [searchResults, setSearchResults] = useState([]); + const [isLoading, setIsLoading] = useState(false); + + const contentRef = useRef(null); + + const cursorRef = useRef(0); + + const navigate = useNavigate(); + + const [searchParams] = useSearchParams(); + const cursor = Number(searchParams.get("cursor") ?? 0); + + const handleGameClick = (game: CatalogueEntry) => { + dispatch(clearSearch()); + navigate(`/game/${game.shop}/${game.objectID}`); + }; + + useEffect(() => { + if (contentRef.current) contentRef.current.scrollTop = 0; + setIsLoading(true); + setSearchResults([]); + + window.electron + .getGames(24, cursor) + .then(({ results, cursor }) => { + return new Promise((resolve) => { + setTimeout(() => { + cursorRef.current = cursor; + setSearchResults(results); + resolve(null); + }, 500); + }); + }) + .finally(() => { + setIsLoading(false); + }); + }, [dispatch, cursor, searchParams]); + + const handleNextPage = () => { + const params = new URLSearchParams({ + cursor: cursorRef.current.toString(), + }); + + navigate(`/catalogue?${params.toString()}`); + }; + + return ( + +
+ + + +
+ +
+
+ {isLoading && + Array.from({ length: 12 }).map((_, index) => ( + + ))} + + {!isLoading && searchResults.length > 0 && ( + <> + {searchResults.map((game) => ( + handleGameClick(game)} + /> + ))} + + )} +
+
+
+ ); +} diff --git a/src/renderer/src/pages/downloads/delete-modal.css.ts b/src/renderer/src/pages/downloads/delete-modal.css.ts new file mode 100644 index 00000000..ef0ba179 --- /dev/null +++ b/src/renderer/src/pages/downloads/delete-modal.css.ts @@ -0,0 +1,10 @@ +import { SPACING_UNIT } from "../../theme.css"; +import { style } from "@vanilla-extract/css"; + +export const deleteActionsButtonsCtn = style({ + display: "flex", + width: "100%", + justifyContent: "end", + alignItems: "center", + gap: `${SPACING_UNIT}px`, +}); diff --git a/src/renderer/src/pages/downloads/delete-modal.tsx b/src/renderer/src/pages/downloads/delete-modal.tsx new file mode 100644 index 00000000..953d94cd --- /dev/null +++ b/src/renderer/src/pages/downloads/delete-modal.tsx @@ -0,0 +1,43 @@ +import { useTranslation } from "react-i18next"; + +import { Button, Modal } from "@renderer/components"; + +import * as styles from "./delete-modal.css"; + +interface DeleteModalProps { + visible: boolean; + onClose: () => void; + deleteGame: () => void; +} + +export function DeleteModal({ + onClose, + visible, + deleteGame, +}: DeleteModalProps) { + const { t } = useTranslation("downloads"); + + const handleDeleteGame = () => { + deleteGame(); + onClose(); + }; + + return ( + +
+ + + +
+
+ ); +} diff --git a/src/renderer/src/pages/downloads/downloads.css.ts b/src/renderer/src/pages/downloads/downloads.css.ts new file mode 100644 index 00000000..fd68de81 --- /dev/null +++ b/src/renderer/src/pages/downloads/downloads.css.ts @@ -0,0 +1,90 @@ +import { SPACING_UNIT, vars } from "../../theme.css"; +import { style } from "@vanilla-extract/css"; +import { recipe } from "@vanilla-extract/recipes"; + +export const downloadTitle = style({ + fontWeight: "bold", + cursor: "pointer", + color: vars.color.bodyText, + textAlign: "left", + marginBottom: `${SPACING_UNIT}px`, + fontSize: "16px", + display: "block", + ":hover": { + textDecoration: "underline", + }, +}); + +export const downloads = style({ + width: "100%", + gap: `${SPACING_UNIT * 2}px`, + display: "flex", + flexDirection: "column", + margin: "0", + padding: "0", + marginTop: `${SPACING_UNIT * 3}px`, +}); + +export const downloadCover = style({ + width: "280px", + minWidth: "280px", + height: "auto", + objectFit: "cover", + objectPosition: "center", + borderRight: `solid 1px ${vars.color.borderColor}`, +}); + +export const download = recipe({ + base: { + width: "100%", + backgroundColor: vars.color.background, + display: "flex", + borderRadius: "8px", + border: `solid 1px ${vars.color.borderColor}`, + overflow: "hidden", + boxShadow: "0px 0px 15px 0px #000000", + transition: "all ease 0.2s", + height: "140px", + minHeight: "140px", + maxHeight: "140px", + }, + variants: { + cancelled: { + true: { + opacity: vars.opacity.disabled, + ":hover": { + opacity: "1", + }, + }, + }, + }, +}); + +export const downloadDetails = style({ + display: "flex", + flexDirection: "column", + flex: "1", + justifyContent: "center", + gap: `${SPACING_UNIT / 2}px`, + fontSize: "14px", +}); + +export const downloadRightContent = style({ + display: "flex", + padding: `${SPACING_UNIT * 2}px`, + flex: "1", + gap: `${SPACING_UNIT}px`, +}); + +export const downloadActions = style({ + display: "flex", + alignItems: "center", + gap: `${SPACING_UNIT}px`, +}); + +export const downloadsContainer = style({ + display: "flex", + padding: `${SPACING_UNIT * 3}px`, + flexDirection: "column", + width: "100%", +}); diff --git a/src/renderer/src/pages/downloads/downloads.tsx b/src/renderer/src/pages/downloads/downloads.tsx new file mode 100644 index 00000000..aecf7b5e --- /dev/null +++ b/src/renderer/src/pages/downloads/downloads.tsx @@ -0,0 +1,272 @@ +import { useTranslation } from "react-i18next"; +import { useNavigate } from "react-router-dom"; + +import { AsyncImage, Button, TextField } from "@renderer/components"; +import { formatDownloadProgress, steamUrlBuilder } from "@renderer/helpers"; +import { useDownload, useLibrary } from "@renderer/hooks"; +import type { Game } from "@types"; + +import { useEffect, useMemo, useRef, useState } from "react"; +import { BinaryNotFoundModal } from "../shared-modals/binary-not-found-modal"; +import * as styles from "./downloads.css"; +import { DeleteModal } from "./delete-modal"; +import { formatBytes } from "@renderer/utils"; + +export function Downloads() { + const { library, updateLibrary } = useLibrary(); + + const { t } = useTranslation("downloads"); + + const navigate = useNavigate(); + + const gameToBeDeleted = useRef(null); + + const [filteredLibrary, setFilteredLibrary] = useState([]); + const [showBinaryNotFoundModal, setShowBinaryNotFoundModal] = useState(false); + const [showDeleteModal, setShowDeleteModal] = useState(false); + + const { + game: gameDownloading, + progress, + isDownloading, + numPeers, + numSeeds, + pauseDownload, + resumeDownload, + cancelDownload, + deleteGame, + isGameDeleting, + } = useDownload(); + + const libraryWithDownloadedGamesOnly = useMemo(() => { + return library.filter((game) => game.status); + }, [library]); + + useEffect(() => { + setFilteredLibrary(libraryWithDownloadedGamesOnly); + }, [libraryWithDownloadedGamesOnly]); + + const openGameInstaller = (gameId: number) => + window.electron.openGameInstaller(gameId).then((isBinaryInPath) => { + if (!isBinaryInPath) setShowBinaryNotFoundModal(true); + updateLibrary(); + }); + + const removeGame = (gameId: number) => + window.electron.removeGame(gameId).then(() => { + updateLibrary(); + }); + + const getFinalDownloadSize = (game: Game) => { + const isGameDownloading = isDownloading && gameDownloading?.id === game?.id; + + if (!game) return "N/A"; + if (game.fileSize) return formatBytes(game.fileSize); + + if (gameDownloading?.fileSize && isGameDownloading) + return formatBytes(gameDownloading.fileSize); + + return game.repack?.fileSize ?? "N/A"; + }; + + const getGameInfo = (game: Game) => { + const isGameDownloading = isDownloading && gameDownloading?.id === game?.id; + const finalDownloadSize = getFinalDownloadSize(game); + + if (isGameDeleting(game?.id)) { + return

{t("deleting")}

; + } + + if (isGameDownloading) { + return ( + <> +

{progress}

+ + {gameDownloading?.status !== "downloading" ? ( +

{t(gameDownloading?.status)}

+ ) : ( + <> +

+ {formatBytes(gameDownloading?.bytesDownloaded)} /{" "} + {finalDownloadSize} +

+

+ {numPeers} peers / {numSeeds} seeds +

+ + )} + + ); + } + + if (game?.status === "seeding") { + return ( + <> +

{game?.repack.title}

+

{t("completed")}

+ + ); + } + if (game?.status === "cancelled") return

{t("cancelled")}

; + if (game?.status === "downloading_metadata") + return

{t("starting_download")}

; + + if (game?.status === "paused") { + return ( + <> +

{formatDownloadProgress(game.progress)}

+

{t("paused")}

+ + ); + } + }; + + const openDeleteModal = (gameId: number) => { + gameToBeDeleted.current = gameId; + setShowDeleteModal(true); + }; + + const getGameActions = (game: Game) => { + const isGameDownloading = isDownloading && gameDownloading?.id === game?.id; + + const deleting = isGameDeleting(game.id); + + if (isGameDownloading) { + return ( + <> + + + + ); + } + + if (game?.status === "paused") { + return ( + <> + + + + ); + } + + if (game?.status === "seeding") { + return ( + <> + + + + + ); + } + + if (game?.status === "downloading_metadata") { + return ( + + ); + } + + return ( + <> + + + + + ); + }; + + const handleFilter: React.ChangeEventHandler = (event) => { + setFilteredLibrary( + libraryWithDownloadedGamesOnly.filter((game) => + game.title + .toLowerCase() + .includes(event.target.value.toLocaleLowerCase()) + ) + ); + }; + + return ( +
+ setShowBinaryNotFoundModal(false)} + /> + setShowDeleteModal(false)} + deleteGame={() => + deleteGame(gameToBeDeleted.current).then(updateLibrary) + } + /> + + + +
    + {filteredLibrary.map((game) => { + return ( +
  • + +
    +
    + + + {getGameInfo(game)} +
    + +
    + {getGameActions(game)} +
    +
    +
  • + ); + })} +
+
+ ); +} diff --git a/src/renderer/src/pages/game-details/description-header.tsx b/src/renderer/src/pages/game-details/description-header.tsx new file mode 100644 index 00000000..e502a4fb --- /dev/null +++ b/src/renderer/src/pages/game-details/description-header.tsx @@ -0,0 +1,84 @@ +import { useEffect, useState } from "react"; +import { useTranslation } from "react-i18next"; +import { useParams } from "react-router-dom"; +import { ShareAndroidIcon } from "@primer/octicons-react"; + +import { Button } from "@renderer/components"; +import type { ShopDetails } from "@types"; + +import * as styles from "./game-details.css"; + +const OPEN_HYDRA_URL = "https://open.hydralauncher.site"; + +export interface DescriptionHeaderProps { + gameDetails: ShopDetails | null; +} + +export function DescriptionHeader({ gameDetails }: DescriptionHeaderProps) { + const [clipboardLock, setClipboardLock] = useState(false); + const { t, i18n } = useTranslation("game_details"); + + const { objectID, shop } = useParams(); + + useEffect(() => { + if (!gameDetails) return setClipboardLock(true); + setClipboardLock(false); + }, [gameDetails]); + + const handleCopyToClipboard = () => { + setClipboardLock(true); + + const searchParams = new URLSearchParams({ + p: btoa( + JSON.stringify([ + objectID, + shop, + encodeURIComponent(gameDetails?.name), + i18n.language, + ]) + ), + }); + + navigator.clipboard.writeText( + OPEN_HYDRA_URL + `/?${searchParams.toString()}` + ); + + const zero = performance.now(); + + requestAnimationFrame(function holdLock(time) { + if (time - zero <= 3000) { + requestAnimationFrame(holdLock); + } else { + setClipboardLock(false); + } + }); + }; + + return ( +
+
+

+ {t("release_date", { + date: gameDetails?.release_date.date, + })} +

+

{t("publisher", { publisher: gameDetails?.publishers[0] })}

+
+ + +
+ ); +} diff --git a/src/renderer/src/pages/game-details/game-details-skeleton.tsx b/src/renderer/src/pages/game-details/game-details-skeleton.tsx new file mode 100644 index 00000000..4a202d18 --- /dev/null +++ b/src/renderer/src/pages/game-details/game-details-skeleton.tsx @@ -0,0 +1,89 @@ +import Skeleton from "react-loading-skeleton"; + +import { Button } from "@renderer/components"; +import * as styles from "./game-details.css"; +import { useTranslation } from "react-i18next"; +import { ShareAndroidIcon } from "@primer/octicons-react"; + +export function GameDetailsSkeleton() { + const { t } = useTranslation("game_details"); + + return ( +
+
+ +
+
+
+ + +
+
+
+
+
+
+ + +
+ +
+
+ {Array.from({ length: 3 }).map((_, index) => ( + + ))} + + {Array.from({ length: 2 }).map((_, index) => ( + + ))} + + +
+
+
+
+

HowLongToBeat

+
+
    + {Array.from({ length: 3 }).map((_, index) => ( + + ))} +
+
+

{t("requirements")}

+
+
+ + +
+
+ {Array.from({ length: 6 }).map((_, index) => ( + + ))} +
+
+
+
+ ); +} diff --git a/src/renderer/src/pages/game-details/game-details.css.ts b/src/renderer/src/pages/game-details/game-details.css.ts new file mode 100644 index 00000000..52f671eb --- /dev/null +++ b/src/renderer/src/pages/game-details/game-details.css.ts @@ -0,0 +1,259 @@ +import { globalStyle, keyframes, style } from "@vanilla-extract/css"; +import { SPACING_UNIT, vars } from "../../theme.css"; + +export const slideIn = keyframes({ + "0%": { transform: `translateY(${40 + 16}px)` }, + "100%": { transform: "translateY(0)" }, +}); + +export const hero = style({ + width: "100%", + height: "300px", + minHeight: "300px", + display: "flex", + flexDirection: "column", + position: "relative", + transition: "all ease 0.2s", + "@media": { + "(min-width: 1250px)": { + height: "350px", + minHeight: "350px", + }, + }, +}); + +export const heroContent = style({ + padding: `${SPACING_UNIT * 2}px`, + height: "100%", + width: "100%", + display: "flex", +}); + +export const heroBackdrop = style({ + width: "100%", + height: "100%", + background: "linear-gradient(0deg, rgba(0, 0, 0, 0.3) 60%, transparent 100%)", + position: "absolute", + display: "flex", + flexDirection: "column", + justifyContent: "space-between", +}); + +export const heroImage = style({ + width: "100%", + height: "100%", + objectFit: "cover", + objectPosition: "top", + transition: "all ease 0.2s", + "@media": { + "(min-width: 1250px)": { + objectPosition: "center", + }, + }, +}); + +export const heroImageSkeleton = style({ + height: "300px", + "@media": { + "(min-width: 1250px)": { + height: "350px", + }, + }, +}); + +export const container = style({ + width: "100%", + height: "100%", + display: "flex", + flexDirection: "column", +}); + +export const descriptionContainer = style({ + display: "flex", + width: "100%", + flex: "1", +}); + +export const descriptionContent = style({ + width: "100%", + height: "100%", +}); + +export const contentSidebar = style({ + borderLeft: `solid 1px ${vars.color.borderColor};`, + width: "100%", + height: "100%", + "@media": { + "(min-width: 768px)": { + width: "100%", + maxWidth: "200px", + }, + "(min-width: 1024px)": { + maxWidth: "300px", + width: "100%", + }, + "(min-width: 1280px)": { + width: "100%", + maxWidth: "400px", + }, + }, +}); + +export const contentSidebarTitle = style({ + height: "72px", + padding: `${SPACING_UNIT * 2}px ${SPACING_UNIT * 2}px`, + display: "flex", + alignItems: "center", + backgroundColor: vars.color.background, + borderBottom: `solid 1px ${vars.color.borderColor}`, +}); + +export const requirementButtonContainer = style({ + width: "100%", + display: "flex", +}); + +export const requirementButton = style({ + border: `solid 1px ${vars.color.borderColor};`, + borderLeft: "none", + borderRight: "none", + borderRadius: "0", + width: "100%", +}); + +export const requirementsDetails = style({ + padding: `${SPACING_UNIT * 2}px`, + lineHeight: "22px", + fontFamily: "'Fira Sans', sans-serif", + fontSize: "16px", +}); + +export const requirementsDetailsSkeleton = style({ + display: "flex", + flexDirection: "column", + gap: "8px", + padding: `${SPACING_UNIT * 2}px`, + fontSize: "16px", +}); + +export const description = style({ + userSelect: "text", + lineHeight: "22px", + fontFamily: "'Fira Sans', sans-serif", + fontSize: "16px", + padding: `${SPACING_UNIT * 3}px ${SPACING_UNIT * 2}px`, + "@media": { + "(min-width: 1280px)": { + width: "60%", + }, + }, + width: "100%", + marginLeft: "auto", + marginRight: "auto", +}); + +export const descriptionSkeleton = style({ + display: "flex", + flexDirection: "column", + gap: `${SPACING_UNIT}px`, + padding: `${SPACING_UNIT * 3}px ${SPACING_UNIT * 2}px`, + width: "100%", + "@media": { + "(min-width: 1280px)": { + width: "60%", + lineHeight: "22px", + }, + }, + marginLeft: "auto", + marginRight: "auto", +}); + +export const descriptionHeader = style({ + width: "100%", + padding: `${SPACING_UNIT * 2}px ${SPACING_UNIT * 2}px`, + borderBottom: `solid 1px ${vars.color.borderColor}`, + display: "flex", + justifyContent: "space-between", + alignItems: "center", + backgroundColor: vars.color.background, + height: "72px", +}); + +export const descriptionHeaderInfo = style({ + display: "flex", + gap: `${SPACING_UNIT}px`, + flexDirection: "column", + fontSize: vars.size.bodyFontSize, +}); + +export const howLongToBeatCategoriesList = style({ + margin: "0", + padding: "16px", + display: "flex", + flexDirection: "column", + gap: "16px", +}); + +export const howLongToBeatCategory = style({ + display: "flex", + flexDirection: "column", + gap: "4px", + backgroundColor: vars.color.background, + borderRadius: "8px", + padding: `8px 16px`, + border: `solid 1px ${vars.color.borderColor}`, +}); + +export const howLongToBeatCategoryLabel = style({ + fontSize: vars.size.bodyFontSize, + color: "#DADBE1", +}); + +export const howLongToBeatCategorySkeleton = style({ + border: `solid 1px ${vars.color.borderColor}`, + borderRadius: "8px", + height: "76px", +}); + +export const randomizerButton = style({ + animationName: slideIn, + animationDuration: "0.2s", + position: "fixed", + /* Bottom panel height + spacing */ + bottom: `${26 + SPACING_UNIT * 2}px`, + /* Scroll bar + spacing */ + right: `${9 + SPACING_UNIT * 2}px`, + boxShadow: "rgba(255, 255, 255, 0.1) 0px 0px 10px 3px", + border: `solid 2px ${vars.color.borderColor}`, + backgroundColor: vars.color.background, + ":hover": { + backgroundColor: vars.color.background, + boxShadow: "rgba(255, 255, 255, 0.1) 0px 0px 15px 5px", + opacity: "1", + }, + ":active": { + transform: "scale(0.98)", + }, +}); + +globalStyle(".bb_tag", { + marginTop: `${SPACING_UNIT * 2}px`, + marginBottom: `${SPACING_UNIT * 2}px`, +}); + +globalStyle(`${description} img`, { + borderRadius: "5px", + marginTop: `${SPACING_UNIT}px`, + marginBottom: `${SPACING_UNIT * 3}px`, + display: "block", + maxWidth: "100%", +}); + +globalStyle(`${description} a`, { + color: vars.color.bodyText, +}); + +globalStyle(`${requirementsDetails} a`, { + display: "flex", + color: vars.color.bodyText, +}); diff --git a/src/renderer/src/pages/game-details/game-details.tsx b/src/renderer/src/pages/game-details/game-details.tsx new file mode 100644 index 00000000..7f9e8ac2 --- /dev/null +++ b/src/renderer/src/pages/game-details/game-details.tsx @@ -0,0 +1,289 @@ +import Color from "color"; +import { average } from "color.js"; +import { useCallback, useEffect, useRef, useState } from "react"; +import { useNavigate, useParams, useSearchParams } from "react-router-dom"; + +import type { + Game, + GameShop, + HowLongToBeatCategory, + ShopDetails, + SteamAppDetails, +} from "@types"; + +import { AsyncImage, Button } from "@renderer/components"; +import { setHeaderTitle } from "@renderer/features"; +import { getSteamLanguage, steamUrlBuilder } from "@renderer/helpers"; +import { useAppDispatch, useDownload } from "@renderer/hooks"; + +import starsAnimation from "@renderer/assets/lottie/stars.json"; + +import { vars } from "../../theme.css"; +import { useTranslation } from "react-i18next"; +import { SkeletonTheme } from "react-loading-skeleton"; +import { GameDetailsSkeleton } from "./game-details-skeleton"; +import * as styles from "./game-details.css"; +import { HeroPanel } from "./hero-panel"; +import { HowLongToBeatSection } from "./how-long-to-beat-section"; +import { RepacksModal } from "./repacks-modal"; +import Lottie from "lottie-react"; +import { DescriptionHeader } from "./description-header"; + +export function GameDetails() { + const { objectID, shop } = useParams(); + + const [isLoading, setIsLoading] = useState(false); + const [color, setColor] = useState(""); + const [gameDetails, setGameDetails] = useState(null); + const [howLongToBeat, setHowLongToBeat] = useState<{ + isLoading: boolean; + data: HowLongToBeatCategory[] | null; + }>({ isLoading: true, data: null }); + + const [game, setGame] = useState(null); + const [isGamePlaying, setIsGamePlaying] = useState(false); + const [activeRequirement, setActiveRequirement] = + useState("minimum"); + + const navigate = useNavigate(); + const [searchParams] = useSearchParams(); + + const { t, i18n } = useTranslation("game_details"); + + const [showRepacksModal, setShowRepacksModal] = useState(false); + + const randomGameObjectID = useRef(null); + + const dispatch = useAppDispatch(); + + const { game: gameDownloading, startDownload, isDownloading } = useDownload(); + + const getRandomGame = useCallback(() => { + window.electron.getRandomGame().then((objectID) => { + randomGameObjectID.current = objectID; + }); + }, []); + + const handleImageSettled = useCallback((url: string) => { + average(url, { amount: 1, format: "hex" }) + .then((color) => { + setColor(new Color(color).darken(0.6).toString() as string); + }) + .catch(() => {}); + }, []); + + const getGame = useCallback(() => { + window.electron + .getGameByObjectID(objectID) + .then((result) => setGame(result)); + }, [setGame, objectID]); + + useEffect(() => { + getGame(); + }, [getGame, gameDownloading?.id]); + + useEffect(() => { + setGame(null); + setIsLoading(true); + setIsGamePlaying(false); + dispatch(setHeaderTitle("")); + + getRandomGame(); + + window.electron + .getGameShopDetails(objectID, "steam", getSteamLanguage(i18n.language)) + .then((result) => { + if (!result) { + navigate(-1); + return; + } + + window.electron + .getHowLongToBeat(objectID, "steam", result.name) + .then((data) => { + setHowLongToBeat({ isLoading: false, data }); + }); + + setGameDetails(result); + dispatch(setHeaderTitle(result.name)); + }) + .finally(() => { + setIsLoading(false); + }); + + getGame(); + setHowLongToBeat({ isLoading: true, data: null }); + }, [getGame, getRandomGame, dispatch, navigate, objectID, i18n.language]); + + const isGameDownloading = isDownloading && gameDownloading?.id === game?.id; + + useEffect(() => { + if (isGameDownloading) + setGame((prev) => ({ ...prev, status: gameDownloading?.status })); + }, [isGameDownloading, gameDownloading?.status]); + + useEffect(() => { + const listeners = [ + window.electron.onGameClose(() => { + if (isGamePlaying) setIsGamePlaying(false); + }), + window.electron.onPlaytime((gameId) => { + if (gameId === game?.id) { + if (!isGamePlaying) setIsGamePlaying(true); + getGame(); + } + }), + ]; + + return () => { + listeners.forEach((unsubscribe) => unsubscribe()); + }; + }, [game?.id, isGamePlaying, getGame]); + + const handleStartDownload = async (repackId: number) => { + return startDownload( + repackId, + gameDetails.objectID, + gameDetails.name, + shop as GameShop + ).then(() => { + getGame(); + setShowRepacksModal(false); + }); + }; + + const handleRandomizerClick = () => { + if (!randomGameObjectID.current) return; + + const searchParams = new URLSearchParams({ + fromRandomizer: "1", + }); + + navigate( + `/game/steam/${randomGameObjectID.current}?${searchParams.toString()}` + ); + }; + + const fromRandomizer = searchParams.get("fromRandomizer"); + + return ( + + {gameDetails && ( + setShowRepacksModal(false)} + /> + )} + + {isLoading ? ( + + ) : ( +
+
+ +
+
+ +
+
+
+ + setShowRepacksModal(true)} + getGame={getGame} + isGamePlaying={isGamePlaying} + /> + +
+
+ + +
+
+ +
+ + +
+

{t("requirements")}

+
+ +
+ + +
+ +
+
+
+
+ )} + + {fromRandomizer && ( + + )} +
+ ); +} diff --git a/src/renderer/src/pages/game-details/hero-panel-actions.tsx b/src/renderer/src/pages/game-details/hero-panel-actions.tsx new file mode 100644 index 00000000..17394e7e --- /dev/null +++ b/src/renderer/src/pages/game-details/hero-panel-actions.tsx @@ -0,0 +1,212 @@ +import { NoEntryIcon, PlusCircleIcon } from "@primer/octicons-react"; + +import { Button } from "@renderer/components"; +import { useDownload, useLibrary } from "@renderer/hooks"; +import type { Game, ShopDetails } from "@types"; +import { useState } from "react"; +import { useTranslation } from "react-i18next"; + +export interface HeroPanelActionsProps { + game: Game | null; + gameDetails: ShopDetails | null; + isGamePlaying: boolean; + isGameDownloading: boolean; + openRepacksModal: () => void; + openBinaryNotFoundModal: () => void; + getGame: () => void; +} + +export function HeroPanelActions({ + game, + gameDetails, + isGamePlaying, + isGameDownloading, + openRepacksModal, + openBinaryNotFoundModal, + getGame, +}: HeroPanelActionsProps) { + const [toggleLibraryGameDisabled, setToggleLibraryGameDisabled] = + useState(false); + + const { + resumeDownload, + pauseDownload, + cancelDownload, + removeGame, + isGameDeleting, + } = useDownload(); + + const { updateLibrary } = useLibrary(); + + const { t } = useTranslation("game_details"); + + const selectGameExecutable = async () => { + return window.electron + .showOpenDialog({ + properties: ["openFile"], + filters: [ + { + name: "Game executable", + extensions: window.electron.platform === "win32" ? ["exe"] : [], + }, + ], + }) + .then(({ filePaths }) => { + if (filePaths && filePaths.length > 0) { + return filePaths[0]; + } + }); + }; + + const toggleGameOnLibrary = async () => { + setToggleLibraryGameDisabled(true); + + try { + if (game) { + await removeGame(game.id); + } else { + const gameExecutablePath = await selectGameExecutable(); + + await window.electron.addGameToLibrary( + gameDetails.objectID, + gameDetails.name, + "steam", + gameExecutablePath + ); + } + + updateLibrary(); + getGame(); + } finally { + setToggleLibraryGameDisabled(false); + } + }; + + const openGameInstaller = () => { + window.electron.openGameInstaller(game.id).then((isBinaryInPath) => { + if (!isBinaryInPath) openBinaryNotFoundModal(); + updateLibrary(); + }); + }; + + const openGame = async () => { + if (game.executablePath) { + window.electron.openGame(game.id, game.executablePath); + return; + } + + if (game?.executablePath) { + window.electron.openGame(game.id, game.executablePath); + return; + } + + const gameExecutablePath = await selectGameExecutable(); + window.electron.openGame(game.id, gameExecutablePath); + }; + + const closeGame = () => window.electron.closeGame(game.id); + + const deleting = isGameDeleting(game?.id); + + const toggleGameOnLibraryButton = ( + + ); + + if (isGameDownloading) { + return ( + <> + + + + ); + } + + if (game?.status === "paused") { + return ( + <> + + + + ); + } + + if (game?.status === "seeding" || (game && !game.status)) { + return ( + <> + {game?.status === "seeding" ? ( + + ) : ( + toggleGameOnLibraryButton + )} + + {isGamePlaying ? ( + + ) : ( + + )} + + ); + } + + if (game?.status === "cancelled") { + return ( + <> + + + + ); + } + + if (gameDetails && gameDetails.repacks.length) { + return ( + <> + {toggleGameOnLibraryButton} + + + ); + } + + return toggleGameOnLibraryButton; +} diff --git a/src/renderer/src/pages/game-details/hero-panel.css.ts b/src/renderer/src/pages/game-details/hero-panel.css.ts new file mode 100644 index 00000000..6824f9a4 --- /dev/null +++ b/src/renderer/src/pages/game-details/hero-panel.css.ts @@ -0,0 +1,32 @@ +import { style } from "@vanilla-extract/css"; +import { SPACING_UNIT, vars } from "../../theme.css"; + +export const panel = style({ + width: "100%", + height: "72px", + padding: `${SPACING_UNIT * 2}px ${SPACING_UNIT * 3}px`, + display: "flex", + alignItems: "center", + justifyContent: "space-between", + transition: "all ease 0.2s", + borderBottom: `solid 1px ${vars.color.borderColor}`, + boxShadow: "0px 0px 15px 0px #000000", +}); + +export const content = style({ + display: "flex", + flexDirection: "column", + gap: `${SPACING_UNIT}px`, + fontSize: vars.size.bodyFontSize, +}); + +export const actions = style({ + display: "flex", + gap: `${SPACING_UNIT}px`, +}); + +export const downloadDetailsRow = style({ + gap: `${SPACING_UNIT * 2}px`, + display: "flex", + alignItems: "flex-end", +}); diff --git a/src/renderer/src/pages/game-details/hero-panel.tsx b/src/renderer/src/pages/game-details/hero-panel.tsx new file mode 100644 index 00000000..09a04970 --- /dev/null +++ b/src/renderer/src/pages/game-details/hero-panel.tsx @@ -0,0 +1,196 @@ +import { format } from "date-fns"; +import { useCallback, useEffect, useMemo, useState } from "react"; +import { useTranslation } from "react-i18next"; + +import { useDownload } from "@renderer/hooks"; +import type { Game, ShopDetails } from "@types"; + +import { formatDownloadProgress } from "@renderer/helpers"; +import { BinaryNotFoundModal } from "../shared-modals/binary-not-found-modal"; +import * as styles from "./hero-panel.css"; +import { useDate } from "@renderer/hooks/use-date"; +import { formatBytes } from "@renderer/utils"; +import { HeroPanelActions } from "./hero-panel-actions"; + +export interface HeroPanelProps { + game: Game | null; + gameDetails: ShopDetails | null; + color: string; + isGamePlaying: boolean; + openRepacksModal: () => void; + getGame: () => void; +} + +export function HeroPanel({ + game, + gameDetails, + color, + openRepacksModal, + getGame, + isGamePlaying, +}: HeroPanelProps) { + const { t } = useTranslation("game_details"); + + const [showBinaryNotFoundModal, setShowBinaryNotFoundModal] = useState(false); + const [lastTimePlayed, setLastTimePlayed] = useState(""); + + const { formatDistance } = useDate(); + + const { + game: gameDownloading, + isDownloading, + progress, + eta, + numPeers, + numSeeds, + isGameDeleting, + } = useDownload(); + const isGameDownloading = isDownloading && gameDownloading?.id === game?.id; + + const updateLastTimePlayed = useCallback(() => { + setLastTimePlayed( + formatDistance(game.lastTimePlayed, new Date(), { + addSuffix: true, + }) + ); + }, [game?.lastTimePlayed, formatDistance]); + + useEffect(() => { + if (game?.lastTimePlayed) { + updateLastTimePlayed(); + + const interval = setInterval(() => { + updateLastTimePlayed(); + }, 1000); + + return () => { + clearInterval(interval); + }; + } + }, [game?.lastTimePlayed, updateLastTimePlayed]); + + const finalDownloadSize = useMemo(() => { + if (!game) return "N/A"; + if (game.fileSize) return formatBytes(game.fileSize); + + if (gameDownloading?.fileSize && isGameDownloading) + return formatBytes(gameDownloading.fileSize); + + return game.repack?.fileSize ?? "N/A"; + }, [game, isGameDownloading, gameDownloading]); + + const getInfo = () => { + if (!gameDetails) return null; + + if (isGameDeleting(game?.id)) { + return

{t("deleting")}

; + } + + if (isGameDownloading) { + return ( + <> +

+ {progress} + {eta && {t("eta", { eta })}} +

+ + {gameDownloading?.status !== "downloading" ? ( + <> +

{t(gameDownloading?.status)}

+ {eta && {t("eta", { eta })}} + + ) : ( +

+ {formatBytes(gameDownloading?.bytesDownloaded)} /{" "} + {finalDownloadSize} + + {numPeers} peers / {numSeeds} seeds + +

+ )} + + ); + } + + if (game?.status === "paused") { + return ( + <> +

+ {t("paused_progress", { + progress: formatDownloadProgress(game.progress), + })} +

+

+ {formatBytes(game.bytesDownloaded)} / {finalDownloadSize} +

+ + ); + } + + if (game?.status === "seeding" || (game && !game.status)) { + if (!game.lastTimePlayed) { + return

{t("not_played_yet", { title: game.title })}

; + } + + return ( + <> +

+ {t("play_time", { + amount: formatDistance(0, game.playTimeInMilliseconds), + })} +

+ + {isGamePlaying ? ( +

{t("playing_now")}

+ ) : ( +

+ {t("last_time_played", { + period: lastTimePlayed, + })} +

+ )} + + ); + } + + const [latestRepack] = gameDetails.repacks; + + if (latestRepack) { + const lastUpdate = format(latestRepack.uploadDate!, "dd/MM/yyyy"); + const repacksCount = gameDetails.repacks.length; + + return ( + <> +

{t("updated_at", { updated_at: lastUpdate })}

+

{t("download_options", { count: repacksCount })}

+ + ); + } + + return

{t("no_downloads")}

; + }; + + return ( + <> + setShowBinaryNotFoundModal(false)} + /> + +
+
{getInfo()}
+
+ setShowBinaryNotFoundModal(true)} + isGamePlaying={isGamePlaying} + isGameDownloading={isGameDownloading} + /> +
+
+ + ); +} diff --git a/src/renderer/src/pages/game-details/how-long-to-beat-section.tsx b/src/renderer/src/pages/game-details/how-long-to-beat-section.tsx new file mode 100644 index 00000000..c46afbf6 --- /dev/null +++ b/src/renderer/src/pages/game-details/how-long-to-beat-section.tsx @@ -0,0 +1,69 @@ +import Skeleton, { SkeletonTheme } from "react-loading-skeleton"; +import type { HowLongToBeatCategory } from "@types"; +import { useTranslation } from "react-i18next"; +import { vars } from "../../theme.css"; +import * as styles from "./game-details.css"; + +const durationTranslation: Record = { + Hours: "hours", + Mins: "minutes", +}; + +export interface HowLongToBeatSectionProps { + howLongToBeatData: HowLongToBeatCategory[] | null; + isLoading: boolean; +} + +export function HowLongToBeatSection({ + howLongToBeatData, + isLoading, +}: HowLongToBeatSectionProps) { + const { t } = useTranslation("game_details"); + + const getDuration = (duration: string) => { + const [value, unit] = duration.split(" "); + return `${value} ${t(durationTranslation[unit])}`; + }; + + if (!howLongToBeatData && !isLoading) return null; + + return ( + +
+

HowLongToBeat

+
+ +
    + {howLongToBeatData + ? howLongToBeatData.map((category) => ( +
  • +

    + {category.title} +

    + +

    + {getDuration(category.duration)} +

    + + {category.accuracy !== "00" && ( + + {t("accuracy", { accuracy: category.accuracy })} + + )} +
  • + )) + : Array.from({ length: 4 }).map((_, index) => ( + + ))} +
+
+ ); +} diff --git a/src/renderer/src/pages/game-details/repacks-modal.css.ts b/src/renderer/src/pages/game-details/repacks-modal.css.ts new file mode 100644 index 00000000..4e15a63a --- /dev/null +++ b/src/renderer/src/pages/game-details/repacks-modal.css.ts @@ -0,0 +1,18 @@ +import { style } from "@vanilla-extract/css"; +import { SPACING_UNIT, vars } from "../../theme.css"; + +export const repacks = style({ + display: "flex", + gap: `${SPACING_UNIT}px`, + flexDirection: "column", +}); + +export const repackButton = style({ + display: "flex", + textAlign: "left", + flexDirection: "column", + alignItems: "flex-start", + gap: `${SPACING_UNIT}px`, + color: vars.color.bodyText, + padding: `${SPACING_UNIT * 2}px`, +}); diff --git a/src/renderer/src/pages/game-details/repacks-modal.tsx b/src/renderer/src/pages/game-details/repacks-modal.tsx new file mode 100644 index 00000000..da74e53e --- /dev/null +++ b/src/renderer/src/pages/game-details/repacks-modal.tsx @@ -0,0 +1,101 @@ +import { useEffect, useState } from "react"; +import { useTranslation } from "react-i18next"; + +import { Button, Modal, TextField } from "@renderer/components"; +import type { GameRepack, ShopDetails } from "@types"; + +import * as styles from "./repacks-modal.css"; + +import type { DiskSpace } from "check-disk-space"; +import { format } from "date-fns"; +import { SPACING_UNIT } from "../../theme.css"; +import { formatBytes } from "@renderer/utils"; +import { useAppSelector } from "@renderer/hooks"; + +export interface RepacksModalProps { + visible: boolean; + gameDetails: ShopDetails; + startDownload: (repackId: number) => Promise; + onClose: () => void; +} + +export function RepacksModal({ + visible, + gameDetails, + startDownload, + onClose, +}: RepacksModalProps) { + const [downloadStarting, setDownloadStarting] = useState(false); + const [diskFreeSpace, setDiskFreeSpace] = useState(null); + const [filteredRepacks, setFilteredRepacks] = useState([]); + + const repackersFriendlyNames = useAppSelector( + (state) => state.repackersFriendlyNames.value + ); + + const { t } = useTranslation("game_details"); + + useEffect(() => { + setFilteredRepacks(gameDetails.repacks); + }, [gameDetails.repacks]); + + const getDiskFreeSpace = () => { + window.electron.getDiskFreeSpace().then((result) => { + setDiskFreeSpace(result); + }); + }; + + useEffect(() => { + getDiskFreeSpace(); + }, [visible]); + + const handleRepackClick = (repack: GameRepack) => { + setDownloadStarting(true); + startDownload(repack.id).finally(() => { + setDownloadStarting(false); + }); + }; + + const handleFilter: React.ChangeEventHandler = (event) => { + setFilteredRepacks( + gameDetails.repacks.filter((repack) => + repack.title + .toLowerCase() + .includes(event.target.value.toLocaleLowerCase()) + ) + ); + }; + + return ( + +
+ +
+ +
+ {filteredRepacks.map((repack) => ( + + ))} +
+
+ ); +} diff --git a/src/renderer/src/pages/home/catalogue-home.css.ts b/src/renderer/src/pages/home/catalogue-home.css.ts new file mode 100644 index 00000000..c9f00cd7 --- /dev/null +++ b/src/renderer/src/pages/home/catalogue-home.css.ts @@ -0,0 +1,26 @@ +import { style } from "@vanilla-extract/css"; +import { recipe } from "@vanilla-extract/recipes"; +import { SPACING_UNIT } from "../../theme.css"; + +export const catalogueCategories = style({ + display: "flex", + gap: `${SPACING_UNIT}px`, +}); + +export const content = style({ + width: "100%", + display: "flex", + flexDirection: "column", + gap: `${SPACING_UNIT * 3}px`, + padding: `${SPACING_UNIT * 3}px`, + flex: "1", +}); + +export const cards = recipe({ + base: { + display: "grid", + gridTemplateColumns: "repeat(2, 1fr)", + gap: `${SPACING_UNIT * 2}px`, + transition: "all ease 0.2s", + }, +}); diff --git a/src/renderer/src/pages/home/home.css.ts b/src/renderer/src/pages/home/home.css.ts new file mode 100644 index 00000000..8caeffcf --- /dev/null +++ b/src/renderer/src/pages/home/home.css.ts @@ -0,0 +1,65 @@ +import { style } from "@vanilla-extract/css"; +import { SPACING_UNIT, vars } from "../../theme.css"; + +export const homeCategories = style({ + display: "flex", + gap: `${SPACING_UNIT}px`, +}); + +export const homeHeader = style({ + display: "flex", + gap: `${SPACING_UNIT}px`, + justifyContent: "space-between", +}); + +export const content = style({ + width: "100%", + height: "100%", + display: "flex", + flexDirection: "column", + gap: `${SPACING_UNIT * 3}px`, + padding: `${SPACING_UNIT * 3}px`, + flex: "1", + overflowY: "auto", +}); + +export const cards = style({ + display: "grid", + gridTemplateColumns: "repeat(1, 1fr)", + gap: `${SPACING_UNIT * 2}px`, + transition: "all ease 0.2s", + "@media": { + "(min-width: 768px)": { + gridTemplateColumns: "repeat(2, 1fr)", + }, + "(min-width: 1250px)": { + gridTemplateColumns: "repeat(3, 1fr)", + }, + "(min-width: 1600px)": { + gridTemplateColumns: "repeat(4, 1fr)", + }, + }, +}); + +export const cardSkeleton = style({ + width: "100%", + height: "180px", + boxShadow: "0px 0px 15px 0px #000000", + overflow: "hidden", + borderRadius: "4px", + transition: "all ease 0.2s", + zIndex: "1", + ":active": { + opacity: vars.opacity.active, + }, +}); + +export const noResults = style({ + height: "100%", + display: "flex", + alignItems: "center", + justifyContent: "center", + flexDirection: "column", + gap: "16px", + gridColumn: "1 / -1", +}); diff --git a/src/renderer/src/pages/home/home.tsx b/src/renderer/src/pages/home/home.tsx new file mode 100644 index 00000000..da561016 --- /dev/null +++ b/src/renderer/src/pages/home/home.tsx @@ -0,0 +1,143 @@ +import { useCallback, useEffect, useRef, useState } from "react"; +import { useTranslation } from "react-i18next"; +import { useNavigate, useSearchParams } from "react-router-dom"; + +import Skeleton, { SkeletonTheme } from "react-loading-skeleton"; + +import { Button, GameCard, Hero } from "@renderer/components"; +import type { CatalogueCategory, CatalogueEntry } from "@types"; + +import starsAnimation from "@renderer/assets/lottie/stars.json"; + +import * as styles from "./home.css"; +import { vars } from "../../theme.css"; +import Lottie from "lottie-react"; + +const categories: CatalogueCategory[] = ["trending", "recently_added"]; + +export function Home() { + const { t } = useTranslation("home"); + const navigate = useNavigate(); + + const [isLoading, setIsLoading] = useState(false); + const [isLoadingRandomGame, setIsLoadingRandomGame] = useState(false); + const randomGameObjectID = useRef(null); + + const [searchParams] = useSearchParams(); + + const [catalogue, setCatalogue] = useState< + Record + >({ + trending: [], + recently_added: [], + }); + + const getCatalogue = useCallback((category: CatalogueCategory) => { + setIsLoading(true); + + window.electron + .getCatalogue(category) + .then((catalogue) => { + setCatalogue((prev) => ({ ...prev, [category]: catalogue })); + }) + .catch(() => {}) + .finally(() => { + setIsLoading(false); + }); + }, []); + + const currentCategory = searchParams.get("category") || categories[0]; + + const handleSelectCategory = (category: CatalogueCategory) => { + if (category !== currentCategory) { + getCatalogue(category); + navigate(`/?category=${category}`, { replace: true }); + } + }; + + const getRandomGame = useCallback(() => { + setIsLoadingRandomGame(true); + + window.electron + .getRandomGame() + .then((objectID) => { + randomGameObjectID.current = objectID; + }) + .finally(() => { + setIsLoadingRandomGame(false); + }); + }, []); + + const handleRandomizerClick = () => { + const searchParams = new URLSearchParams({ + fromRandomizer: "1", + }); + + navigate( + `/game/steam/${randomGameObjectID.current}?${searchParams.toString()}` + ); + }; + + useEffect(() => { + setIsLoading(true); + getCatalogue(currentCategory as CatalogueCategory); + getRandomGame(); + }, [getCatalogue, currentCategory, getRandomGame]); + + return ( + +
+

{t("featured")}

+ + + +
+
+ {categories.map((category) => ( + + ))} +
+ + +
+ +

{t(currentCategory)}

+ +
+ {isLoading + ? Array.from({ length: 12 }).map((_, index) => ( + + )) + : catalogue[currentCategory as CatalogueCategory].map((result) => ( + + navigate(`/game/${result.shop}/${result.objectID}`) + } + /> + ))} +
+
+
+ ); +} diff --git a/src/renderer/src/pages/home/search-results.tsx b/src/renderer/src/pages/home/search-results.tsx new file mode 100644 index 00000000..65118b17 --- /dev/null +++ b/src/renderer/src/pages/home/search-results.tsx @@ -0,0 +1,86 @@ +import { GameCard } from "@renderer/components"; +import Skeleton, { SkeletonTheme } from "react-loading-skeleton"; + +import type { CatalogueEntry } from "@types"; + +import type { DebouncedFunc } from "lodash"; +import { debounce } from "lodash-es"; + +import { InboxIcon } from "@primer/octicons-react"; +import { clearSearch } from "@renderer/features"; +import { useAppDispatch } from "@renderer/hooks"; +import { vars } from "../../theme.css"; +import { useEffect, useRef, useState } from "react"; +import { useTranslation } from "react-i18next"; +import { useNavigate, useSearchParams } from "react-router-dom"; +import * as styles from "./home.css"; + +export function SearchResults() { + const dispatch = useAppDispatch(); + + const { t } = useTranslation("home"); + const [searchParams] = useSearchParams(); + + const [searchResults, setSearchResults] = useState([]); + const [isLoading, setIsLoading] = useState(false); + + const debouncedFunc = useRef void | null>>(null); + + const navigate = useNavigate(); + + const handleGameClick = (game: CatalogueEntry) => { + dispatch(clearSearch()); + navigate(`/game/${game.shop}/${game.objectID}`); + }; + + useEffect(() => { + setIsLoading(true); + if (debouncedFunc.current) debouncedFunc.current.cancel(); + + debouncedFunc.current = debounce(() => { + window.electron + .searchGames(searchParams.get("query")) + .then((results) => { + setSearchResults(results); + }) + .finally(() => { + setIsLoading(false); + }); + }, 300); + + debouncedFunc.current(); + }, [searchParams, dispatch]); + + return ( + +
+
+ {isLoading && + Array.from({ length: 12 }).map((_, index) => ( + + ))} + + {!isLoading && searchResults.length > 0 && ( + <> + {searchResults.map((game) => ( + handleGameClick(game)} + /> + ))} + + )} +
+ + {!isLoading && searchResults.length === 0 && ( +
+ + +

{t("no_results")}

+
+ )} +
+
+ ); +} diff --git a/src/renderer/src/pages/index.ts b/src/renderer/src/pages/index.ts new file mode 100644 index 00000000..fd883fbf --- /dev/null +++ b/src/renderer/src/pages/index.ts @@ -0,0 +1,6 @@ +export * from "./home/home"; +export * from "./game-details/game-details"; +export * from "./downloads/downloads"; +export * from "./home/search-results"; +export * from "./settings/settings"; +export * from "./catalogue/catalogue"; diff --git a/src/renderer/src/pages/patch-notes/patch-notes-skeleton.tsx b/src/renderer/src/pages/patch-notes/patch-notes-skeleton.tsx new file mode 100644 index 00000000..e69de29b diff --git a/src/renderer/src/pages/settings/settings.css.ts b/src/renderer/src/pages/settings/settings.css.ts new file mode 100644 index 00000000..506b9574 --- /dev/null +++ b/src/renderer/src/pages/settings/settings.css.ts @@ -0,0 +1,26 @@ +import { SPACING_UNIT, vars } from "../../theme.css"; +import { style } from "@vanilla-extract/css"; + +export const container = style({ + padding: "24px", + width: "100%", + display: "flex", +}); + +export const content = style({ + backgroundColor: vars.color.background, + width: "100%", + height: "100%", + padding: `${SPACING_UNIT * 3}px`, + border: `solid 1px ${vars.color.borderColor}`, + boxShadow: "0px 0px 15px 0px #000000", + borderRadius: "8px", + gap: `${SPACING_UNIT * 2}px`, + display: "flex", + flexDirection: "column", +}); + +export const downloadsPathField = style({ + display: "flex", + gap: `${SPACING_UNIT * 2}px`, +}); diff --git a/src/renderer/src/pages/settings/settings.tsx b/src/renderer/src/pages/settings/settings.tsx new file mode 100644 index 00000000..47bd604b --- /dev/null +++ b/src/renderer/src/pages/settings/settings.tsx @@ -0,0 +1,113 @@ +import { useEffect, useState } from "react"; +import { Button, CheckboxField, TextField } from "@renderer/components"; + +import * as styles from "./settings.css"; +import { useTranslation } from "react-i18next"; +import { UserPreferences } from "@types"; + +export function Settings() { + const [form, setForm] = useState({ + downloadsPath: "", + downloadNotificationsEnabled: false, + repackUpdatesNotificationsEnabled: false, + telemetryEnabled: false, + }); + + const { t } = useTranslation("settings"); + + useEffect(() => { + Promise.all([ + window.electron.getDefaultDownloadsPath(), + window.electron.getUserPreferences(), + ]).then(([path, userPreferences]) => { + setForm({ + downloadsPath: userPreferences?.downloadsPath || path, + downloadNotificationsEnabled: + userPreferences?.downloadNotificationsEnabled, + repackUpdatesNotificationsEnabled: + userPreferences?.repackUpdatesNotificationsEnabled, + telemetryEnabled: userPreferences?.telemetryEnabled, + }); + }); + }, []); + + const updateUserPreferences = ( + field: T, + value: UserPreferences[T] + ) => { + setForm((prev) => ({ ...prev, [field]: value })); + + window.electron.updateUserPreferences({ + [field]: value, + }); + }; + + const handleChooseDownloadsPath = async () => { + const { filePaths } = await window.electron.showOpenDialog({ + defaultPath: form.downloadsPath, + properties: ["openDirectory"], + }); + + if (filePaths && filePaths.length > 0) { + const path = filePaths[0]; + updateUserPreferences("downloadsPath", path); + } + }; + + return ( +
+
+
+ + + +
+ +

{t("notifications")}

+ + + updateUserPreferences( + "downloadNotificationsEnabled", + !form.downloadNotificationsEnabled + ) + } + /> + + + updateUserPreferences( + "repackUpdatesNotificationsEnabled", + !form.repackUpdatesNotificationsEnabled + ) + } + /> + +

{t("telemetry")}

+ + + updateUserPreferences("telemetryEnabled", !form.telemetryEnabled) + } + /> +
+
+ ); +} diff --git a/src/renderer/src/pages/shared-modals/binary-not-found-modal.tsx b/src/renderer/src/pages/shared-modals/binary-not-found-modal.tsx new file mode 100644 index 00000000..ec68b512 --- /dev/null +++ b/src/renderer/src/pages/shared-modals/binary-not-found-modal.tsx @@ -0,0 +1,25 @@ +import { Modal } from "@renderer/components"; +import { useTranslation } from "react-i18next"; + +interface BinaryNotFoundModalProps { + visible: boolean; + onClose: () => void; +} + +export const BinaryNotFoundModal = ({ + visible, + onClose, +}: BinaryNotFoundModalProps) => { + const { t } = useTranslation("binary_not_found_modal"); + + return ( + + {t("instructions")} + + ); +}; diff --git a/src/renderer/src/store.ts b/src/renderer/src/store.ts new file mode 100644 index 00000000..e2bb9baa --- /dev/null +++ b/src/renderer/src/store.ts @@ -0,0 +1,23 @@ +import { configureStore } from "@reduxjs/toolkit"; +import { + downloadSlice, + windowSlice, + librarySlice, + repackersFriendlyNamesSlice, + searchSlice, + userPreferencesSlice, +} from "@renderer/features"; + +export const store = configureStore({ + reducer: { + search: searchSlice.reducer, + repackersFriendlyNames: repackersFriendlyNamesSlice.reducer, + window: windowSlice.reducer, + library: librarySlice.reducer, + userPreferences: userPreferencesSlice.reducer, + download: downloadSlice.reducer, + }, +}); + +export type RootState = ReturnType; +export type AppDispatch = typeof store.dispatch; diff --git a/src/renderer/src/theme.css.ts b/src/renderer/src/theme.css.ts new file mode 100644 index 00000000..b11f1acb --- /dev/null +++ b/src/renderer/src/theme.css.ts @@ -0,0 +1,19 @@ +import { createTheme } from "@vanilla-extract/css"; + +export const SPACING_UNIT = 8; + +export const [themeClass, vars] = createTheme({ + color: { + background: "#1c1c1c", + darkBackground: "#151515", + bodyText: "#8e919b", + borderColor: "rgba(255, 255, 255, 0.1)", + }, + opacity: { + disabled: "0.5", + active: "0.7", + }, + size: { + bodyFontSize: "14px", + }, +}); diff --git a/src/renderer/src/utils/format-bytes.ts b/src/renderer/src/utils/format-bytes.ts new file mode 100644 index 00000000..b052b43b --- /dev/null +++ b/src/renderer/src/utils/format-bytes.ts @@ -0,0 +1,15 @@ +const FORMAT = ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"]; + +export const formatBytes = (bytes: number): string => { + if (!Number.isFinite(bytes) || isNaN(bytes) || bytes <= 0) { + return `0 ${FORMAT[0]}`; + } + + const byteKBase = 1024; + + const base = Math.floor(Math.log(bytes) / Math.log(byteKBase)); + + const formatedByte = bytes / byteKBase ** base; + + return `${Math.trunc(formatedByte * 10) / 10} ${FORMAT[base]}`; +}; diff --git a/src/renderer/src/utils/index.ts b/src/renderer/src/utils/index.ts new file mode 100644 index 00000000..7a828a7f --- /dev/null +++ b/src/renderer/src/utils/index.ts @@ -0,0 +1 @@ +export * from "./format-bytes"; diff --git a/src/renderer/src/vite-env.d.ts b/src/renderer/src/vite-env.d.ts new file mode 100644 index 00000000..5208138c --- /dev/null +++ b/src/renderer/src/vite-env.d.ts @@ -0,0 +1,10 @@ +/// +/// + +interface ImportMetaEnv { + readonly RENDERER_VITE_SENTRY_DSN: string; +} + +interface ImportMeta { + readonly env: ImportMetaEnv; +} diff --git a/src/types/index.ts b/src/types/index.ts new file mode 100644 index 00000000..768f110b --- /dev/null +++ b/src/types/index.ts @@ -0,0 +1,114 @@ +export type GameShop = "steam" | "epic"; +export type CatalogueCategory = "recently_added" | "trending"; + +export interface SteamGenre { + id: string; + name: string; +} + +export interface SteamScreenshot { + id: number; + path_thumbnail: string; + path_full: string; +} + +export interface SteamAppDetails { + name: string; + detailed_description: string; + about_the_game: string; + short_description: string; + publishers: string[]; + genres: SteamGenre[]; + screenshots: SteamScreenshot[]; + pc_requirements: { + minimum: string; + recommended: string; + }; + mac_requirements: { + minimum: string; + recommended: string; + }; + linux_requirmenets: { + minimum: string; + recommended: string; + }; + release_date: { + coming_soon: boolean; + date: string; + }; +} + +export type ShopDetails = SteamAppDetails & { + objectID: string; + repacks: GameRepack[]; +}; + +export interface GameRepack { + id: number; + title: string; + magnet: string; + page: number; + repacker: string; + fileSize: string | null; + uploadDate: Date | string | null; + createdAt: Date; + updatedAt: Date; +} + +export interface TorrentFile { + path: string; + length: number; +} + +/* Used by the catalogue */ +export interface CatalogueEntry { + objectID: string; + shop: GameShop; + title: string; + /* Epic Games covers cannot be guessed with objectID */ + cover: string; + repacks: GameRepack[]; +} + +/* Used by the library */ +export interface Game extends Omit { + id: number; + title: string; + iconUrl: string; + status: string; + folderName: string; + downloadPath: string | null; + repacks: GameRepack[]; + repack: GameRepack; + progress: number; + fileVerificationProgress: number; + bytesDownloaded: number; + playTimeInMilliseconds: number; + executablePath: string | null; + lastTimePlayed: Date | null; + fileSize: number; + createdAt: Date; + updatedAt: Date; +} + +export interface TorrentProgress { + downloadSpeed: number; + timeRemaining: number; + numPeers: number; + numSeeds: number; + game: Omit; +} + +export interface UserPreferences { + downloadsPath: string | null; + language: string; + downloadNotificationsEnabled: boolean; + repackUpdatesNotificationsEnabled: boolean; + telemetryEnabled: boolean; +} + +export interface HowLongToBeatCategory { + title: string; + duration: string; + accuracy: string; +} diff --git a/torrent-client/__pycache__/fifo.cpython-39.pyc b/torrent-client/__pycache__/fifo.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..30225a1b672f58a23d54859f00493b0364a6699b GIT binary patch literal 1276 zcmYe~<>g{vU|{&rqmpLK!octt#6iZ)3=9ko3=9m#QVa|XDGVu$ISf$@?hGkRDa%#FG0Hel0hUghU>RtU|>jPh+<4(h+;}%jABk@Nnx79n8KXG(!vtO zn#z{KI)^cZErq>>C5kTP$vwY59JdjJH?{5=%0YnUHK@ zVPIh3WME)$201i^fq|ifVFBYph7`tZrXs5prWA%8rdp;NrUlG3j5SPIEHzA7tWF>= zFw`(*vDGkTv8OOBWUpa}=g3n7tLCg_u3=ulS;L&gRl}Ucy^skcSHqCSv4E$BaUmlk zLkdGM!%AkqTkPSPc`5nj#YKz^3=EpQw>S!N5=+wZi*j$V6;~FQq~_k@EYHj{HcHFP zNsZ!iE=o--Np%CUdE8z7T!TEF|?2c~np?;nbQQX1) z&ff9CAwjN=zPH$u^YijjlS?#NZm|@n=A;#Y;-!d#fq|ijn}LC0B|{M(0|Ub^EB(;o z)S_bjjMSXWeEou={H)aEl4AXg%9Nr+-K5gYoRrie{gV8mqSU++-Q=9i)Vvb?w9K@8 zy@JYH9P#m)d6^~g@ob=25CBCFBM&17lK>;%e-362Mj^&3UQiV3!PIFo-eONGO$*Mf zN=1oHRt5$JP>h0O6O?R_Vp9toKd{(j$YQBsT*wr|RLfk;Qo|C=P{WYLvVav7N5SAY zDgv3K$yNk%QV~1Iw;(S^aRj9%rhww12$cA5u@t2ymua#V@q!cxf(VeRTWm$C#icnV zw^&jVOA^8110nc9Dufsq7(hykK_)POJu1Y=!c@fx_9ECo##_v}#px(s1BE)sEnu&K zvK2nBm9W+@f^yhGCPs!lA+Xoj;9}53sLA421PU*30<2;!ElJb0&}2vVFK2jBCM4lO zJj|L@S&~`|N(p%>n#>S?i-LRw@;AhjpyW^l^64#};?%s9_}tXu;>7e+P$^IhQU&p{ z7*mxX*u%(bG&w= 0 and status.download_rate > 0: + return (remaining_bytes / status.download_rate) * 1000 + else: + return 1 + +def start_download(game_id: int, magnet: str, save_path: str): + global torrent_handle + global downloading_game_id + + params = {'url': magnet, 'save_path': save_path} + torrent_handle = session.add_torrent(params) + downloading_game_id = game_id + torrent_handle.set_flags(lt.torrent_flags.auto_managed) + torrent_handle.resume() + +def pause_download(): + global downloading_game_id + + if torrent_handle: + torrent_handle.pause() + torrent_handle.unset_flags(lt.torrent_flags.auto_managed) + downloading_game_id = 0 + +def cancel_download(): + global downloading_game_id + global torrent_handle + + if torrent_handle: + torrent_handle.pause() + session.remove_torrent(torrent_handle) + torrent_handle = None + downloading_game_id = 0 + +def get_download_updates(): + while True: + if downloading_game_id == 0: + time.sleep(0.5) + continue + + status = torrent_handle.status() + info = torrent_handle.get_torrent_info() + + write_fifo.send_message(json.dumps({ + 'folderName': info.name() if info else "", + 'fileSize': info.total_size() if info else 0, + 'gameId': downloading_game_id, + 'progress': status.progress, + 'downloadSpeed': status.download_rate, + 'timeRemaining': get_eta(status), + 'numPeers': status.num_peers, + 'numSeeds': status.num_seeds, + 'status': status.state, + 'bytesDownloaded': status.progress * info.total_size() if info else status.all_time_download, + })) + + if status.progress == 1: + cancel_download() + + time.sleep(0.5) + +def listen_to_socket(): + while True: + msg = read_fifo.recv(1024 * 2) + payload = json.loads(msg.decode("utf-8")) + + if payload['action'] == "start": + start_download(payload['game_id'], payload['magnet'], payload['save_path']) + continue + + if payload['action'] == "pause": + pause_download() + continue + + if payload['action'] == "cancel": + cancel_download() + +if __name__ == "__main__": + p1 = threading.Thread(target=get_download_updates) + p2 = threading.Thread(target=listen_to_socket) + + p1.start() + p2.start() diff --git a/torrent-client/setup.py b/torrent-client/setup.py new file mode 100644 index 00000000..b26513b1 --- /dev/null +++ b/torrent-client/setup.py @@ -0,0 +1,20 @@ +from cx_Freeze import setup, Executable + +# Dependencies are automatically detected, but it might need fine tuning. +build_exe_options = { + "packages": ["libtorrent"], + "build_exe": "resources/dist/hydra-download-manager", + "include_msvcr": True +} + +setup( + name="hydra-download-manager", + version="0.1", + description="Hydra Torrent Client", + options={"build_exe": build_exe_options}, + executables=[Executable( + "torrent-client/main.py", + target_name="hydra-download-manager", + icon="images/icon.ico" + )] +) diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 00000000..31bac6e9 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,4 @@ +{ + "files": [], + "references": [{ "path": "./tsconfig.node.json" }, { "path": "./tsconfig.web.json" }] +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 00000000..29fcd95c --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,19 @@ +{ + "extends": "@electron-toolkit/tsconfig/tsconfig.node.json", + "include": ["electron.vite.config.*", "src/main/**/*", "src/preload/**/*", "src/locales/index.ts"], + "compilerOptions": { + "module": "ESNext", + "composite": true, + "types": ["electron-vite/node"], + "baseUrl": ".", + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "strictPropertyInitialization": false, + "paths": { + "@main/*": ["src/main/*"], + "@renderer/*": ["src/renderer/*"], + "@types": ["src/types/index.ts"], + "@locales": ["src/locales/index.ts"] + } + } +} diff --git a/tsconfig.web.json b/tsconfig.web.json new file mode 100644 index 00000000..a888cf67 --- /dev/null +++ b/tsconfig.web.json @@ -0,0 +1,22 @@ +{ + "extends": "@electron-toolkit/tsconfig/tsconfig.web.json", + "include": [ + "src/renderer/src/env.d.ts", + "src/renderer/src/**/*", + "src/renderer/src/**/*.tsx", + "src/preload/*.d.ts", + "src/locales/index.ts" + ], + "compilerOptions": { + "composite": true, + "jsx": "react-jsx", + "baseUrl": ".", + "paths": { + "@renderer/*": [ + "src/renderer/src/*" + ], + "@types": ["src/types/index.ts"], + "@locales": ["src/locales/index.ts"] + } + } +} diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 00000000..09b4eabf --- /dev/null +++ b/yarn.lock @@ -0,0 +1,5891 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"7zip-bin@~5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/7zip-bin/-/7zip-bin-5.2.0.tgz#7a03314684dd6572b7dfa89e68ce31d60286854d" + integrity sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A== + +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" + integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== + +"@ampproject/remapping@^2.2.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.23.5", "@babel/code-frame@^7.24.1", "@babel/code-frame@^7.24.2": + version "7.24.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.2.tgz#718b4b19841809a58b29b68cde80bc5e1aa6d9ae" + integrity sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ== + dependencies: + "@babel/highlight" "^7.24.2" + picocolors "^1.0.0" + +"@babel/compat-data@^7.23.5": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.4.tgz#6f102372e9094f25d908ca0d34fc74c74606059a" + integrity sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ== + +"@babel/core@^7.21.3", "@babel/core@^7.23.5", "@babel/core@^7.23.9": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.4.tgz#1f758428e88e0d8c563874741bc4ffc4f71a4717" + integrity sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.24.2" + "@babel/generator" "^7.24.4" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helpers" "^7.24.4" + "@babel/parser" "^7.24.4" + "@babel/template" "^7.24.0" + "@babel/traverse" "^7.24.1" + "@babel/types" "^7.24.0" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/generator@^7.24.1", "@babel/generator@^7.24.4": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.4.tgz#1fc55532b88adf952025d5d2d1e71f946cb1c498" + integrity sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw== + dependencies: + "@babel/types" "^7.24.0" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^2.5.1" + +"@babel/helper-compilation-targets@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" + integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== + dependencies: + "@babel/compat-data" "^7.23.5" + "@babel/helper-validator-option" "^7.23.5" + browserslist "^4.22.2" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-environment-visitor@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" + integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== + +"@babel/helper-function-name@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" + integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== + dependencies: + "@babel/template" "^7.22.15" + "@babel/types" "^7.23.0" + +"@babel/helper-hoist-variables@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" + integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-module-imports@^7.22.15": + version "7.24.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz#6ac476e6d168c7c23ff3ba3cf4f7841d46ac8128" + integrity sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg== + dependencies: + "@babel/types" "^7.24.0" + +"@babel/helper-module-transforms@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" + integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-validator-identifier" "^7.22.20" + +"@babel/helper-plugin-utils@^7.24.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz#945681931a52f15ce879fd5b86ce2dae6d3d7f2a" + integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w== + +"@babel/helper-simple-access@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" + integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-split-export-declaration@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" + integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-string-parser@^7.23.4": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz#f99c36d3593db9540705d0739a1f10b5e20c696e" + integrity sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ== + +"@babel/helper-validator-identifier@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" + integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== + +"@babel/helper-validator-option@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" + integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== + +"@babel/helpers@^7.24.4": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.4.tgz#dc00907fd0d95da74563c142ef4cd21f2cb856b6" + integrity sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw== + dependencies: + "@babel/template" "^7.24.0" + "@babel/traverse" "^7.24.1" + "@babel/types" "^7.24.0" + +"@babel/highlight@^7.24.2": + version "7.24.2" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.2.tgz#3f539503efc83d3c59080a10e6634306e0370d26" + integrity sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA== + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" + js-tokens "^4.0.0" + picocolors "^1.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.24.0", "@babel/parser@^7.24.1", "@babel/parser@^7.24.4": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.4.tgz#234487a110d89ad5a3ed4a8a566c36b9453e8c88" + integrity sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg== + +"@babel/plugin-syntax-typescript@^7.23.3": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz#b3bcc51f396d15f3591683f90239de143c076844" + integrity sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.0" + +"@babel/plugin-transform-arrow-functions@^7.23.3": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz#2bf263617060c9cc45bcdbf492b8cc805082bf27" + integrity sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.0" + +"@babel/plugin-transform-react-jsx-self@^7.23.3": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.1.tgz#a21d866d8167e752c6a7c4555dba8afcdfce6268" + integrity sha512-kDJgnPujTmAZ/9q2CN4m2/lRsUUPDvsG3+tSHWUJIzMGTt5U/b/fwWd3RO3n+5mjLrsBrVa5eKFRVSQbi3dF1w== + dependencies: + "@babel/helper-plugin-utils" "^7.24.0" + +"@babel/plugin-transform-react-jsx-source@^7.23.3": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.1.tgz#a2dedb12b09532846721b5df99e52ef8dc3351d0" + integrity sha512-1v202n7aUq4uXAieRTKcwPzNyphlCuqHHDcdSNc+vdhoTEZcFMh+L5yZuCmGaIO7bs1nJUNfHB89TZyoL48xNA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.0" + +"@babel/runtime@^7.12.5", "@babel/runtime@^7.23.2", "@babel/runtime@^7.23.9": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.4.tgz#de795accd698007a66ba44add6cc86542aff1edd" + integrity sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA== + dependencies: + regenerator-runtime "^0.14.0" + +"@babel/template@^7.22.15", "@babel/template@^7.24.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.0.tgz#c6a524aa93a4a05d66aaf31654258fae69d87d50" + integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA== + dependencies: + "@babel/code-frame" "^7.23.5" + "@babel/parser" "^7.24.0" + "@babel/types" "^7.24.0" + +"@babel/traverse@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.1.tgz#d65c36ac9dd17282175d1e4a3c49d5b7988f530c" + integrity sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ== + dependencies: + "@babel/code-frame" "^7.24.1" + "@babel/generator" "^7.24.1" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/parser" "^7.24.1" + "@babel/types" "^7.24.0" + debug "^4.3.1" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.21.3", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.24.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf" + integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w== + dependencies: + "@babel/helper-string-parser" "^7.23.4" + "@babel/helper-validator-identifier" "^7.22.20" + to-fast-properties "^2.0.0" + +"@colors/colors@1.6.0", "@colors/colors@^1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.6.0.tgz#ec6cd237440700bc23ca23087f513c75508958b0" + integrity sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA== + +"@dabh/diagnostics@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@dabh/diagnostics/-/diagnostics-2.0.3.tgz#7f7e97ee9a725dffc7808d93668cc984e1dc477a" + integrity sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA== + dependencies: + colorspace "1.1.x" + enabled "2.0.x" + kuler "^2.0.0" + +"@develar/schema-utils@~2.6.5": + version "2.6.5" + resolved "https://registry.yarnpkg.com/@develar/schema-utils/-/schema-utils-2.6.5.tgz#3ece22c5838402419a6e0425f85742b961d9b6c6" + integrity sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig== + dependencies: + ajv "^6.12.0" + ajv-keywords "^3.4.1" + +"@electron-toolkit/eslint-config-prettier@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@electron-toolkit/eslint-config-prettier/-/eslint-config-prettier-2.0.0.tgz#a258a28fc0a09b7f910fd71e0aa18ea6ee440735" + integrity sha512-L+uG1FvJcAZkPZpSi6B1pmdpyJFyOxWDTjr1Vs47vSryxv/EX1Ch6o4HVsachlDq3fMEkDgojuP2F3ZvVZMoLw== + dependencies: + eslint-config-prettier "^9.1.0" + eslint-plugin-prettier "^5.0.1" + +"@electron-toolkit/eslint-config-ts@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@electron-toolkit/eslint-config-ts/-/eslint-config-ts-1.0.1.tgz#ee5d5e754871568fe2698b0f18d063ab04ef6092" + integrity sha512-6RkoGE/W/WVlDozy/u6/lo5THNP5CCAPxdKpdQuYaopUfObs3o+JyxdlSb45imh+nL8nv875970EoyplntXaug== + dependencies: + "@typescript-eslint/eslint-plugin" "^6.14.0" + "@typescript-eslint/parser" "^6.14.0" + +"@electron-toolkit/preload@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@electron-toolkit/preload/-/preload-3.0.1.tgz#8bae193fd851f3d38c56eec13a5dd602744e8064" + integrity sha512-EzoQmpK8jqqU8YnM5jRe0GJjGVJPke2KtANqz8QtN2JPT96ViOvProBdK5C6riCm0j1T8jjAGVQCZLQy9OVoIA== + +"@electron-toolkit/tsconfig@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@electron-toolkit/tsconfig/-/tsconfig-1.0.1.tgz#78048d3178dd7a6a573590e23240f0764b0c14af" + integrity sha512-M0Mol3odspvtCuheyujLNAW7bXq7KFNYVMRtpjFa4ZfES4MuklXBC7Nli/omvc+PRKlrklgAGx3l4VakjNo8jg== + +"@electron-toolkit/utils@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@electron-toolkit/utils/-/utils-3.0.0.tgz#74626893d93025eacba086d497b615cf927d42c4" + integrity sha512-GaXHDhiT7KCvMJjXdp/QqpYinq69T/Pdl49Z1XLf8mKGf63dnsODMWyrmIjEQ0z/vG7dO8qF3fvmI6Eb2lUNZA== + +"@electron/asar@^3.2.1": + version "3.2.9" + resolved "https://registry.yarnpkg.com/@electron/asar/-/asar-3.2.9.tgz#7b3a1fd677b485629f334dd80ced8c85353ba7e7" + integrity sha512-Vu2P3X2gcZ3MY9W7yH72X9+AMXwUQZEJBrsPIbX0JsdllLtoh62/Q8Wg370/DawIEVKOyfD6KtTLo645ezqxUA== + dependencies: + commander "^5.0.0" + glob "^7.1.6" + minimatch "^3.0.4" + +"@electron/get@^2.0.0": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@electron/get/-/get-2.0.3.tgz#fba552683d387aebd9f3fcadbcafc8e12ee4f960" + integrity sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ== + dependencies: + debug "^4.1.1" + env-paths "^2.2.0" + fs-extra "^8.1.0" + got "^11.8.5" + progress "^2.0.3" + semver "^6.2.0" + sumchecker "^3.0.1" + optionalDependencies: + global-agent "^3.0.0" + +"@electron/notarize@2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@electron/notarize/-/notarize-2.2.1.tgz#d0aa6bc43cba830c41bfd840b85dbe0e273f59fe" + integrity sha512-aL+bFMIkpR0cmmj5Zgy0LMKEpgy43/hw5zadEArgmAMWWlKc5buwFvFT9G/o/YJkvXAJm5q3iuTuLaiaXW39sg== + dependencies: + debug "^4.1.1" + fs-extra "^9.0.1" + promise-retry "^2.0.1" + +"@electron/osx-sign@1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@electron/osx-sign/-/osx-sign-1.0.5.tgz#0af7149f2fce44d1a8215660fd25a9fb610454d8" + integrity sha512-k9ZzUQtamSoweGQDV2jILiRIHUu7lYlJ3c6IEmjv1hC17rclE+eb9U+f6UFlOOETo0JzY1HNlXy4YOlCvl+Lww== + dependencies: + compare-version "^0.1.2" + debug "^4.3.4" + fs-extra "^10.0.0" + isbinaryfile "^4.0.8" + minimist "^1.2.6" + plist "^3.0.5" + +"@electron/universal@1.5.1": + version "1.5.1" + resolved "https://registry.yarnpkg.com/@electron/universal/-/universal-1.5.1.tgz#f338bc5bcefef88573cf0ab1d5920fac10d06ee5" + integrity sha512-kbgXxyEauPJiQQUNG2VgUeyfQNFk6hBF11ISN2PNI6agUgPl55pv4eQmaqHzTAzchBvqZ2tQuRVaPStGf0mxGw== + dependencies: + "@electron/asar" "^3.2.1" + "@malept/cross-spawn-promise" "^1.1.0" + debug "^4.3.1" + dir-compare "^3.0.0" + fs-extra "^9.0.1" + minimatch "^3.0.4" + plist "^3.0.4" + +"@emotion/hash@^0.9.0": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.1.tgz#4ffb0055f7ef676ebc3a5a91fb621393294e2f43" + integrity sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ== + +"@esbuild/aix-ppc64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz#d1bc06aedb6936b3b6d313bf809a5a40387d2b7f" + integrity sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA== + +"@esbuild/aix-ppc64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz#a70f4ac11c6a1dfc18b8bbb13284155d933b9537" + integrity sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g== + +"@esbuild/android-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz#7ad65a36cfdb7e0d429c353e00f680d737c2aed4" + integrity sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA== + +"@esbuild/android-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz#db1c9202a5bc92ea04c7b6840f1bbe09ebf9e6b9" + integrity sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg== + +"@esbuild/android-arm@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.12.tgz#b0c26536f37776162ca8bde25e42040c203f2824" + integrity sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w== + +"@esbuild/android-arm@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.20.2.tgz#3b488c49aee9d491c2c8f98a909b785870d6e995" + integrity sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w== + +"@esbuild/android-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.12.tgz#cb13e2211282012194d89bf3bfe7721273473b3d" + integrity sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew== + +"@esbuild/android-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.20.2.tgz#3b1628029e5576249d2b2d766696e50768449f98" + integrity sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg== + +"@esbuild/darwin-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz#cbee41e988020d4b516e9d9e44dd29200996275e" + integrity sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g== + +"@esbuild/darwin-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz#6e8517a045ddd86ae30c6608c8475ebc0c4000bb" + integrity sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA== + +"@esbuild/darwin-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz#e37d9633246d52aecf491ee916ece709f9d5f4cd" + integrity sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A== + +"@esbuild/darwin-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz#90ed098e1f9dd8a9381695b207e1cff45540a0d0" + integrity sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA== + +"@esbuild/freebsd-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz#1ee4d8b682ed363b08af74d1ea2b2b4dbba76487" + integrity sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA== + +"@esbuild/freebsd-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz#d71502d1ee89a1130327e890364666c760a2a911" + integrity sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw== + +"@esbuild/freebsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz#37a693553d42ff77cd7126764b535fb6cc28a11c" + integrity sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg== + +"@esbuild/freebsd-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz#aa5ea58d9c1dd9af688b8b6f63ef0d3d60cea53c" + integrity sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw== + +"@esbuild/linux-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz#be9b145985ec6c57470e0e051d887b09dddb2d4b" + integrity sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA== + +"@esbuild/linux-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz#055b63725df678379b0f6db9d0fa85463755b2e5" + integrity sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A== + +"@esbuild/linux-arm@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz#207ecd982a8db95f7b5279207d0ff2331acf5eef" + integrity sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w== + +"@esbuild/linux-arm@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz#76b3b98cb1f87936fbc37f073efabad49dcd889c" + integrity sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg== + +"@esbuild/linux-ia32@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz#d0d86b5ca1562523dc284a6723293a52d5860601" + integrity sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA== + +"@esbuild/linux-ia32@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz#c0e5e787c285264e5dfc7a79f04b8b4eefdad7fa" + integrity sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig== + +"@esbuild/linux-loong64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz#9a37f87fec4b8408e682b528391fa22afd952299" + integrity sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA== + +"@esbuild/linux-loong64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz#a6184e62bd7cdc63e0c0448b83801001653219c5" + integrity sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ== + +"@esbuild/linux-mips64el@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz#4ddebd4e6eeba20b509d8e74c8e30d8ace0b89ec" + integrity sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w== + +"@esbuild/linux-mips64el@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz#d08e39ce86f45ef8fc88549d29c62b8acf5649aa" + integrity sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA== + +"@esbuild/linux-ppc64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz#adb67dadb73656849f63cd522f5ecb351dd8dee8" + integrity sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg== + +"@esbuild/linux-ppc64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz#8d252f0b7756ffd6d1cbde5ea67ff8fd20437f20" + integrity sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg== + +"@esbuild/linux-riscv64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz#11bc0698bf0a2abf8727f1c7ace2112612c15adf" + integrity sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg== + +"@esbuild/linux-riscv64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz#19f6dcdb14409dae607f66ca1181dd4e9db81300" + integrity sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg== + +"@esbuild/linux-s390x@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz#e86fb8ffba7c5c92ba91fc3b27ed5a70196c3cc8" + integrity sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg== + +"@esbuild/linux-s390x@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz#3c830c90f1a5d7dd1473d5595ea4ebb920988685" + integrity sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ== + +"@esbuild/linux-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz#5f37cfdc705aea687dfe5dfbec086a05acfe9c78" + integrity sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg== + +"@esbuild/linux-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz#86eca35203afc0d9de0694c64ec0ab0a378f6fff" + integrity sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw== + +"@esbuild/netbsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz#29da566a75324e0d0dd7e47519ba2f7ef168657b" + integrity sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA== + +"@esbuild/netbsd-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz#e771c8eb0e0f6e1877ffd4220036b98aed5915e6" + integrity sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ== + +"@esbuild/openbsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz#306c0acbdb5a99c95be98bdd1d47c916e7dc3ff0" + integrity sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw== + +"@esbuild/openbsd-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz#9a795ae4b4e37e674f0f4d716f3e226dd7c39baf" + integrity sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ== + +"@esbuild/sunos-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz#0933eaab9af8b9b2c930236f62aae3fc593faf30" + integrity sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA== + +"@esbuild/sunos-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz#7df23b61a497b8ac189def6e25a95673caedb03f" + integrity sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w== + +"@esbuild/win32-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz#773bdbaa1971b36db2f6560088639ccd1e6773ae" + integrity sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A== + +"@esbuild/win32-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz#f1ae5abf9ca052ae11c1bc806fb4c0f519bacf90" + integrity sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ== + +"@esbuild/win32-ia32@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz#000516cad06354cc84a73f0943a4aa690ef6fd67" + integrity sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ== + +"@esbuild/win32-ia32@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz#241fe62c34d8e8461cd708277813e1d0ba55ce23" + integrity sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ== + +"@esbuild/win32-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz#c57c8afbb4054a3ab8317591a0b7320360b444ae" + integrity sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA== + +"@esbuild/win32-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz#9c907b21e30a52db959ba4f80bb01a0cc403d5cc" + integrity sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ== + +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": + version "4.10.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" + integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== + +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.6.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@8.57.0": + version "8.57.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" + integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== + +"@fontsource/fira-mono@^5.0.13": + version "5.0.13" + resolved "https://registry.yarnpkg.com/@fontsource/fira-mono/-/fira-mono-5.0.13.tgz#2aa677938f0759b8d368bddd3c7ec299ee0c17af" + integrity sha512-fZDjR2BdAqmauEbTjcIT62zYzbOgDa5+IQH34D2k8Pxmy1T815mAqQkZciWZVQ9dc/BgdTtTUV9HJ2ulBNwchg== + +"@fontsource/fira-sans@^5.0.20": + version "5.0.20" + resolved "https://registry.yarnpkg.com/@fontsource/fira-sans/-/fira-sans-5.0.20.tgz#92d22b1289f932db1bca7bd20902544fb9706252" + integrity sha512-inmUjoKPrgnO4uUaZTAgP0b6YdhDfA52axHXvdTwgLvwd2kn3ZgK52UZoxD0VnrvTOjLA/iE4oC0tNtz4nyb5g== + +"@humanwhocodes/config-array@^0.11.14": + version "0.11.14" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" + integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== + dependencies: + "@humanwhocodes/object-schema" "^2.0.2" + debug "^4.3.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" + integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + +"@jridgewell/gen-mapping@^0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== + dependencies: + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@malept/cross-spawn-promise@^1.1.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz#504af200af6b98e198bce768bc1730c6936ae01d" + integrity sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ== + dependencies: + cross-spawn "^7.0.1" + +"@malept/flatpak-bundler@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz#e8a32c30a95d20c2b1bb635cc580981a06389858" + integrity sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q== + dependencies: + debug "^4.1.1" + fs-extra "^9.0.0" + lodash "^4.17.15" + tmp-promise "^3.0.2" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + +"@pkgr/core@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.1.tgz#1ec17e2edbec25c8306d424ecfbf13c7de1aaa31" + integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA== + +"@primer/octicons-react@^19.9.0": + version "19.9.0" + resolved "https://registry.yarnpkg.com/@primer/octicons-react/-/octicons-react-19.9.0.tgz#eb90a9b47da924c0ab33055d050e6ea21104d219" + integrity sha512-Uk4XrHyfylyfzZN9d8VFjF8FpfYHEyT4sabw+9+oP+GWAJHhPvNPTz6gXvUzJZmoblAvgcTrDslIPjz8zMh76w== + +"@reduxjs/toolkit@^2.2.3": + version "2.2.3" + resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-2.2.3.tgz#5ce71cbf162f98c5dafb49bd3f1e11c5486ab9c4" + integrity sha512-76dll9EnJXg4EVcI5YNxZA/9hSAmZsFqzMmNRHvIlzw2WS/twfcVX3ysYrWGJMClwEmChQFC4yRq74tn6fdzRA== + dependencies: + immer "^10.0.3" + redux "^5.0.1" + redux-thunk "^3.1.0" + reselect "^5.0.1" + +"@remix-run/router@1.15.3": + version "1.15.3" + resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.15.3.tgz#d2509048d69dbb72d5389a14945339f1430b2d3c" + integrity sha512-Oy8rmScVrVxWZVOpEF57ovlnhpZ8CCPlnIIumVcV9nFdiSIrus99+Lw78ekXyGvVDlIsFJbSfmSovJUhCWYV3w== + +"@rollup/pluginutils@^5.0.5": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.1.0.tgz#7e53eddc8c7f483a4ad0b94afb1f7f5fd3c771e0" + integrity sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g== + dependencies: + "@types/estree" "^1.0.0" + estree-walker "^2.0.2" + picomatch "^2.3.1" + +"@rollup/rollup-android-arm-eabi@4.16.0": + version "4.16.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.16.0.tgz#51e697b1fe08d3bc39d9f0341f22b1b6975a44df" + integrity sha512-4fDVBAfWYlw2CtYgHEWarAYSozTx5OYLsSM/cdGW7H51FwI10DaGnjKgdqWyWXY/VjugelzriCiKf1UdM20Bxg== + +"@rollup/rollup-android-arm64@4.16.0": + version "4.16.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.16.0.tgz#e81fa0fd632ae1c9e6837565b929c95e7bfa0c5a" + integrity sha512-JltUBgsKgN108NO4/hj0B/dJYNrqqmdRCtUet5tFDi/w+0tvQP0FToyWBV4HKBcSX4cvFChrCyt5Rh4FX6M6QQ== + +"@rollup/rollup-darwin-arm64@4.16.0": + version "4.16.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.16.0.tgz#0b4ee897790b299243603e5c3adce2932038be08" + integrity sha512-UwF7tkWf0roggMRv7Vrkof7VgX9tEZIc4vbaQl0/HNX3loWlcum+0ODp1Qsd8s7XvQGT+Zboxx1qxav3vq8YDw== + +"@rollup/rollup-darwin-x64@4.16.0": + version "4.16.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.16.0.tgz#7f9bb7ca0f792bcf35d1bf10f0f4a848f9a2d527" + integrity sha512-RIY42wn6+Yb0qD29T7Dvm9/AhxrkGDf7X5dgI6rUFXR19+vCLh3u45yLcKOayu2ZQEba9rf/+BX3EggVwckiIw== + +"@rollup/rollup-linux-arm-gnueabihf@4.16.0": + version "4.16.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.16.0.tgz#dae816a34b2ea0a29a8e2aacf939199b5ed8d565" + integrity sha512-r2TGCIKzqk8VwjOvW7sveledh6aPao131ejUfZNIyFlWBCruF4HOu51KtLArDa7LL6qKd0vkgxGX3/2NmYpWig== + +"@rollup/rollup-linux-arm-musleabihf@4.16.0": + version "4.16.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.16.0.tgz#9adfa63cc89bf6fa91da38c8af5331c1decd7f1d" + integrity sha512-/QwaDp0RXQTtm25wQFSl02zEm9oveRXr9qAHbdxWCm9YG9dR8esqpyqzS/3GgHDm7jHktPNz9gTENfoUKRCcXQ== + +"@rollup/rollup-linux-arm64-gnu@4.16.0": + version "4.16.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.16.0.tgz#49f4369d436a73fe0b4d4bc4d59cd89c79ee0b4a" + integrity sha512-iypHsz7YEfoyNL0iHbQ7B7pY6hpymvvMgFXXaMd5+WCtvJ9zqWPZKFmo78UeWzWNmTP9JtPiNIQt6efRxx/MNA== + +"@rollup/rollup-linux-arm64-musl@4.16.0": + version "4.16.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.16.0.tgz#fd00d2b08a045a0321776921353cee3cc6383cc8" + integrity sha512-7UpYcO0uVeomnoL5MpQhrS0FT7xZUJrEXtKVLmps5bRA7x5AiA1PDuPnMbxcOBWjIM2HHIG1t3ndnRTVMIbk5A== + +"@rollup/rollup-linux-powerpc64le-gnu@4.16.0": + version "4.16.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.16.0.tgz#d7a0b85cfca2aaf3adbf752569183b21233ac1de" + integrity sha512-FSuFy4/hOQy0lH135ifnElP/6dKoHcZGHovsaRY0jrfNRR2yjMnVYaqNHKGKy0b/1I8DkD/JtclgJfq7SPti1w== + +"@rollup/rollup-linux-riscv64-gnu@4.16.0": + version "4.16.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.16.0.tgz#a419fb6e09baef0119dc7a59df8fda7208a2d672" + integrity sha512-qxAB8MiHuDI8jU0D+WI9Gym3fvUJHA/AjKRXxbEH921SB3AeKQStq1FKFA59dAoqqCArjJ1voXM/gMvgEc1q4Q== + +"@rollup/rollup-linux-s390x-gnu@4.16.0": + version "4.16.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.16.0.tgz#693bac438527beefe3b061da847e3bfd6f6b571d" + integrity sha512-j/9yBgWFlNFBfG/S1M2zkBNLeLkNVG59T5c4tlmlrxU+XITWJ3aMVWdpcZ/+mu7auGZftAXueAgAE9mb4lAlag== + +"@rollup/rollup-linux-x64-gnu@4.16.0": + version "4.16.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.16.0.tgz#41b43abe9073cfa4a02130e4d050fa3b10f82199" + integrity sha512-SjsBA1a9wrEleNneGEsR40HdxKdwCatyHC547o/XINqwPW4cqTYiNy/lL1WTJYWU/KgWIb8HH4SgmFStbWoBzw== + +"@rollup/rollup-linux-x64-musl@4.16.0": + version "4.16.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.16.0.tgz#524046b68de9ccc938245628bb75ef6f07d515c8" + integrity sha512-YKCs7ghJZ5po6/qgfONiXyFKOKcTK4Kerzk/Kc89QK0JT94Qg4NurL+3Y3rZh5am2tu1OlvHPpBHQNBE8cFgJQ== + +"@rollup/rollup-win32-arm64-msvc@4.16.0": + version "4.16.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.16.0.tgz#e9117384c4e340370777c5b5974c5cebf84c8807" + integrity sha512-+wtkF+z2nw0ZwwHji01wOW0loxFl24lBNxPtVAXtnPPDL9Ew0EhiCMOegXe/EAH3Zlr8Iw9tyPJXB3DltQLEyw== + +"@rollup/rollup-win32-ia32-msvc@4.16.0": + version "4.16.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.16.0.tgz#1d9c9477138236a7588ee601513508854f674c69" + integrity sha512-7qLyKTL7Lf2g0B8bduETVAEI3WVUVwBRVcECojVevPNVAmi19IW1P2X+uMSwhmWNy36Q/qEvxXsfts1I8wpawg== + +"@rollup/rollup-win32-x64-msvc@4.16.0": + version "4.16.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.16.0.tgz#0db109f8e1a604da9c9a86deebd84d8d040d6671" + integrity sha512-tkfxXt+7c3Ecgn7ln9NJPdBM+QKwQdmFFpgAP+FYhAuRS5y3tY8xeza82gFjbPpytkHmaQnVdMtuzbToCz2tuw== + +"@sentry-internal/feedback@7.110.0": + version "7.110.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.110.0.tgz#7103a08cd6bfb43583087d7476a5f24c5857cc22" + integrity sha512-hrfWa3WkSOiBO5Srcr1j4kuGOlbsQic+REpLOofllVIs56DOo9+Aj9svxT+dcvZERv/nlFSV/E0BfGy9g08IEg== + dependencies: + "@sentry/core" "7.110.0" + "@sentry/types" "7.110.0" + "@sentry/utils" "7.110.0" + +"@sentry-internal/feedback@7.111.0": + version "7.111.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.111.0.tgz#c715e7e6a1877b60cd1f4dff85969660e0deff3f" + integrity sha512-xaKgPPDEirOan7c9HwzYA1KK87kRp/qfIx9ZKLOEtxwy6nqoMuSByGqSwm1Oqfcjpbd7y6/y+7Bw+69ZKNVLDQ== + dependencies: + "@sentry/core" "7.111.0" + "@sentry/types" "7.111.0" + "@sentry/utils" "7.111.0" + +"@sentry-internal/replay-canvas@7.110.0": + version "7.110.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.110.0.tgz#af21b56157f44c44a2eedf4326ef37f4ea440fa8" + integrity sha512-SNa+AfyfX+vc6Xw0pIfDsa5Qnc9cpexU6M2D19gadtVhmep7qoFBuhBVZrSv6BtdCxvrb5EyYsHYGfjQdIDcvg== + dependencies: + "@sentry/core" "7.110.0" + "@sentry/replay" "7.110.0" + "@sentry/types" "7.110.0" + "@sentry/utils" "7.110.0" + +"@sentry-internal/replay-canvas@7.111.0": + version "7.111.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.111.0.tgz#aa3cba0477f312cbf40eff4eabeaeda6221a55b6" + integrity sha512-3KPBIpiegTYmuVw9gA2aKuliAQONS3Ny1kJc9x5kz6XQGuLFxqlh6KzoCVaKfQJeq2WJqRNeR4KFFuNGuB3H8w== + dependencies: + "@sentry/core" "7.111.0" + "@sentry/replay" "7.111.0" + "@sentry/types" "7.111.0" + "@sentry/utils" "7.111.0" + +"@sentry-internal/tracing@7.110.0": + version "7.110.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.110.0.tgz#00f2086b0efb8dd5a67831074e52b176aa542d32" + integrity sha512-IIHHa9e/mE7uOMJfNELI8adyoELxOy6u6TNCn5t6fphmq84w8FTc9adXkG/FY2AQpglkIvlILojfMROFB2aaAQ== + dependencies: + "@sentry/core" "7.110.0" + "@sentry/types" "7.110.0" + "@sentry/utils" "7.110.0" + +"@sentry-internal/tracing@7.111.0": + version "7.111.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.111.0.tgz#b352df9f38009c5d306308a829a1dd9a57f084fd" + integrity sha512-CgXly8rsdu4loWVKi2RqpInH3C2cVBuaYsx4ZP5IJpzSinsUAMyyr3Pc0PZzCyoVpBBXGBGj/4HhFsY3q6Z0Vg== + dependencies: + "@sentry/core" "7.111.0" + "@sentry/types" "7.111.0" + "@sentry/utils" "7.111.0" + +"@sentry/browser@7.110.0": + version "7.110.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.110.0.tgz#40900d76a8f423a7163a594ec9267a2e0ebd8a5b" + integrity sha512-gIxedVm6ZgkjQfgCDgLWJgAsolq6OxV8hQ2j1+RaDL2RngvelFo/vlX5f2sD6EbjVp77Cri8u5GkMJF+v4p84g== + dependencies: + "@sentry-internal/feedback" "7.110.0" + "@sentry-internal/replay-canvas" "7.110.0" + "@sentry-internal/tracing" "7.110.0" + "@sentry/core" "7.110.0" + "@sentry/replay" "7.110.0" + "@sentry/types" "7.110.0" + "@sentry/utils" "7.110.0" + +"@sentry/browser@7.111.0": + version "7.111.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.111.0.tgz#29da73e7192eb5643d101c47922d7374e4cc88ed" + integrity sha512-x7S9XoJh+TbMnur4eBhPpCVo+p7udABBV2gQk+Iw6LP9e8EFKmGmNyl76vSsT6GeFJ7mwxDEKfuwbVoLBjIvHw== + dependencies: + "@sentry-internal/feedback" "7.111.0" + "@sentry-internal/replay-canvas" "7.111.0" + "@sentry-internal/tracing" "7.111.0" + "@sentry/core" "7.111.0" + "@sentry/replay" "7.111.0" + "@sentry/types" "7.111.0" + "@sentry/utils" "7.111.0" + +"@sentry/core@7.110.0": + version "7.110.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.110.0.tgz#2945d3ac0ef116ed313fbfb9da4f483b66fe5bca" + integrity sha512-g4suCQO94mZsKVaAbyD1zLFC5YSuBQCIPHXx9fdgtfoPib7BWjWWePkllkrvsKAv4u8Oq05RfnKOhOMRHpOKqg== + dependencies: + "@sentry/types" "7.110.0" + "@sentry/utils" "7.110.0" + +"@sentry/core@7.111.0": + version "7.111.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.111.0.tgz#54c9037a3b79b3623377dce1887b69b40670e201" + integrity sha512-/ljeMjZu8CSrLGrseBi/7S2zRIFsqMcvfyG6Nwgfc07J9nbHt8/MqouE1bXZfiaILqDBpK7BK9MLAAph4mkAWg== + dependencies: + "@sentry/types" "7.111.0" + "@sentry/utils" "7.111.0" + +"@sentry/electron@^4.23.0": + version "4.23.0" + resolved "https://registry.yarnpkg.com/@sentry/electron/-/electron-4.23.0.tgz#dfb91734f64e78385b8dd005c4d312b64b16f35a" + integrity sha512-D6OkDJqoxHYrVgQbe6qwfjF0ZUtxNdO7q1E+fYK1vcoan3kWE2SbZJk3UqmqiTLHtR188bYB9z0TwsLM2/CRww== + dependencies: + "@sentry/browser" "7.110.0" + "@sentry/core" "7.110.0" + "@sentry/node" "7.110.0" + "@sentry/types" "7.110.0" + "@sentry/utils" "7.110.0" + deepmerge "4.3.0" + tslib "^2.5.0" + +"@sentry/node@7.110.0": + version "7.110.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.110.0.tgz#c75a7568e641ddb48d1636e62aaa37e9589e8806" + integrity sha512-YPfweCSzo/omnx5q1xOEZfI8Em3jnPqj7OM4ObXmoSKEK+kM1oUF3BTRzw5BJOaOCSTBFY1RAsGyfVIyrwxWnA== + dependencies: + "@sentry-internal/tracing" "7.110.0" + "@sentry/core" "7.110.0" + "@sentry/types" "7.110.0" + "@sentry/utils" "7.110.0" + +"@sentry/react@^7.111.0": + version "7.111.0" + resolved "https://registry.yarnpkg.com/@sentry/react/-/react-7.111.0.tgz#ae9ef6d65f176ed5d5442723c2d278d0d0bd6120" + integrity sha512-8HVl4D5TsNLaIgXsOa1H+/aOcUHvRBsH+25OzxGpyS5Cu2gSlAQxfXKYxZ0axYoMc7TNkMNdmEhYN+CGV+NUZg== + dependencies: + "@sentry/browser" "7.111.0" + "@sentry/core" "7.111.0" + "@sentry/types" "7.111.0" + "@sentry/utils" "7.111.0" + hoist-non-react-statics "^3.3.2" + +"@sentry/replay@7.110.0": + version "7.110.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.110.0.tgz#e185c88cec573724b46b79ada7ef5a7098acd1b6" + integrity sha512-EEpGPf3iBJjWejvoxKLVMnLtLNwPTUxHJV1oxUkbcSi3B/tG5hW7LArYDjAcvkfa4VmA8JLCwj2vYU5MQ8tj6g== + dependencies: + "@sentry-internal/tracing" "7.110.0" + "@sentry/core" "7.110.0" + "@sentry/types" "7.110.0" + "@sentry/utils" "7.110.0" + +"@sentry/replay@7.111.0": + version "7.111.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.111.0.tgz#6d21bddf2ec245db6eb2c471e81efd94364107ae" + integrity sha512-cSbI4A4hrO0sZ0ynvLQauPg8YyaDOQkhGkyvbws8W9WgfxR8X827bY9S0f1TPfgaFiVcKb0iRaAwyXHg3pyzOg== + dependencies: + "@sentry-internal/tracing" "7.111.0" + "@sentry/core" "7.111.0" + "@sentry/types" "7.111.0" + "@sentry/utils" "7.111.0" + +"@sentry/types@7.110.0": + version "7.110.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.110.0.tgz#c3f252b008cab905097fc71e174191f20bdaf4f3" + integrity sha512-DqYBLyE8thC5P5MuPn+sj8tL60nCd/f5cerFFPcudn5nJ4Zs1eI6lKlwwyHYTEu5c4KFjCB0qql6kXfwAHmTyA== + +"@sentry/types@7.111.0": + version "7.111.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.111.0.tgz#9c869c3c51d606041916765ba58f29de915707ac" + integrity sha512-Oti4pgQ55+FBHKKcHGu51ZUxO1u52G5iVNK4mbtAN+5ArSCy/2s1H8IDJiOMswn3acfUnCR0oB/QsbEgAPZ26g== + +"@sentry/utils@7.110.0": + version "7.110.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.110.0.tgz#68ef59359d608a1a6a7205b780196a042ad73ab2" + integrity sha512-VBsdLLN+5tf73fhf/Cm7JIsUJ6y9DkJj8h4I6Mxx0rszrvOyH6S5px40K+V4jdLBzMEvVinC7q2Cbf1YM18BSw== + dependencies: + "@sentry/types" "7.110.0" + +"@sentry/utils@7.111.0": + version "7.111.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.111.0.tgz#e006cc1e751b30ff5cf914c34eb143102e2e8c2d" + integrity sha512-CB5rz1EgCSwj3xoXogsCZ5pQtfERrURc/ItcCuoaijUhkD0iMq5MCNWMHW3mBsBrqx/Oba+XGvDu0t/5+SWwBg== + dependencies: + "@sentry/types" "7.111.0" + +"@sindresorhus/is@^4.0.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" + integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== + +"@sqltools/formatter@^1.2.5": + version "1.2.5" + resolved "https://registry.yarnpkg.com/@sqltools/formatter/-/formatter-1.2.5.tgz#3abc203c79b8c3e90fd6c156a0c62d5403520e12" + integrity sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw== + +"@svgr/babel-plugin-add-jsx-attribute@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz#4001f5d5dd87fa13303e36ee106e3ff3a7eb8b22" + integrity sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g== + +"@svgr/babel-plugin-remove-jsx-attribute@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz#69177f7937233caca3a1afb051906698f2f59186" + integrity sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA== + +"@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz#c2c48104cfd7dcd557f373b70a56e9e3bdae1d44" + integrity sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA== + +"@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz#8fbb6b2e91fa26ac5d4aa25c6b6e4f20f9c0ae27" + integrity sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ== + +"@svgr/babel-plugin-svg-dynamic-title@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz#1d5ba1d281363fc0f2f29a60d6d936f9bbc657b0" + integrity sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og== + +"@svgr/babel-plugin-svg-em-dimensions@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz#35e08df300ea8b1d41cb8f62309c241b0369e501" + integrity sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g== + +"@svgr/babel-plugin-transform-react-native-svg@8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz#90a8b63998b688b284f255c6a5248abd5b28d754" + integrity sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q== + +"@svgr/babel-plugin-transform-svg-component@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz#013b4bfca88779711f0ed2739f3f7efcefcf4f7e" + integrity sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw== + +"@svgr/babel-preset@8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-8.1.0.tgz#0e87119aecdf1c424840b9d4565b7137cabf9ece" + integrity sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug== + dependencies: + "@svgr/babel-plugin-add-jsx-attribute" "8.0.0" + "@svgr/babel-plugin-remove-jsx-attribute" "8.0.0" + "@svgr/babel-plugin-remove-jsx-empty-expression" "8.0.0" + "@svgr/babel-plugin-replace-jsx-attribute-value" "8.0.0" + "@svgr/babel-plugin-svg-dynamic-title" "8.0.0" + "@svgr/babel-plugin-svg-em-dimensions" "8.0.0" + "@svgr/babel-plugin-transform-react-native-svg" "8.1.0" + "@svgr/babel-plugin-transform-svg-component" "8.0.0" + +"@svgr/core@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/core/-/core-8.1.0.tgz#41146f9b40b1a10beaf5cc4f361a16a3c1885e88" + integrity sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA== + dependencies: + "@babel/core" "^7.21.3" + "@svgr/babel-preset" "8.1.0" + camelcase "^6.2.0" + cosmiconfig "^8.1.3" + snake-case "^3.0.4" + +"@svgr/hast-util-to-babel-ast@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz#6952fd9ce0f470e1aded293b792a2705faf4ffd4" + integrity sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q== + dependencies: + "@babel/types" "^7.21.3" + entities "^4.4.0" + +"@svgr/plugin-jsx@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz#96969f04a24b58b174ee4cd974c60475acbd6928" + integrity sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA== + dependencies: + "@babel/core" "^7.21.3" + "@svgr/babel-preset" "8.1.0" + "@svgr/hast-util-to-babel-ast" "8.0.0" + svg-parser "^2.0.4" + +"@swc/core-darwin-arm64@1.4.16": + version "1.4.16" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.4.16.tgz#2cd45d709ce76d448d96bf8d0006849541436611" + integrity sha512-UOCcH1GvjRnnM/LWT6VCGpIk0OhHRq6v1U6QXuPt5wVsgXnXQwnf5k3sG5Cm56hQHDvhRPY6HCsHi/p0oek8oQ== + +"@swc/core-darwin-x64@1.4.16": + version "1.4.16" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.4.16.tgz#a5bc7d8b1dd850adb0bb95c6b5c742b92201fd01" + integrity sha512-t3bgqFoYLWvyVtVL6KkFNCINEoOrIlyggT/kJRgi1y0aXSr0oVgcrQ4ezJpdeahZZ4N+Q6vT3ffM30yIunELNA== + +"@swc/core-linux-arm-gnueabihf@1.4.16": + version "1.4.16" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.4.16.tgz#961744908ee5cbb79bc009dcf58cc8b831111f38" + integrity sha512-DvHuwvEF86YvSd0lwnzVcjOTZ0jcxewIbsN0vc/0fqm9qBdMMjr9ox6VCam1n3yYeRtj4VFgrjeNFksqbUejdQ== + +"@swc/core-linux-arm64-gnu@1.4.16": + version "1.4.16" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.4.16.tgz#43713be3f26757d82d2745dc25f8b63400e0a3d0" + integrity sha512-9Uu5YlPbyCvbidjKtYEsPpyZlu16roOZ5c2tP1vHfnU9bgf5Tz5q5VovSduNxPHx+ed2iC1b1URODHvDzbbDuQ== + +"@swc/core-linux-arm64-musl@1.4.16": + version "1.4.16" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.4.16.tgz#394a7d030f3a61902bd3947bb9d70d26d42f3c81" + integrity sha512-/YZq/qB1CHpeoL0eMzyqK5/tYZn/rzKoCYDviFU4uduSUIJsDJQuQA/skdqUzqbheOXKAd4mnJ1hT04RbJ8FPQ== + +"@swc/core-linux-x64-gnu@1.4.16": + version "1.4.16" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.4.16.tgz#71eb108b784f9d551ee8a35ebcdaed972f567981" + integrity sha512-UUjaW5VTngZYDcA8yQlrFmqs1tLi1TxbKlnaJwoNhel9zRQ0yG1YEVGrzTvv4YApSuIiDK18t+Ip927bwucuVQ== + +"@swc/core-linux-x64-musl@1.4.16": + version "1.4.16" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.4.16.tgz#10dbaedb4e3dfc7268e3a9a66ad3431471ef035b" + integrity sha512-aFhxPifevDTwEDKPi4eRYWzC0p/WYJeiFkkpNU5Uc7a7M5iMWPAbPFUbHesdlb9Jfqs5c07oyz86u+/HySBNPQ== + +"@swc/core-win32-arm64-msvc@1.4.16": + version "1.4.16" + resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.4.16.tgz#80247adff6c245ff32b44d773c1a148858cd655f" + integrity sha512-bTD43MbhIHL2s5QgCwyleaGwl96Gk/scF2TaVKdUe4QlJCDV/YK9h5oIBAp63ckHtE8GHlH4c8dZNBiAXn4Org== + +"@swc/core-win32-ia32-msvc@1.4.16": + version "1.4.16" + resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.4.16.tgz#e540afc3ccf3224267b4ddfb408f9d9737984686" + integrity sha512-/lmZeAN/qV5XbK2SEvi8e2RkIg8FQNYiSA8y2/Zb4gTUMKVO5JMLH0BSWMiIKMstKDPDSxMWgwJaQHF8UMyPmQ== + +"@swc/core-win32-x64-msvc@1.4.16": + version "1.4.16" + resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.4.16.tgz#f880939fca32c181adfe7e3abd2b6b7857bd3489" + integrity sha512-BPAfFfODWXtUu6SwaTTftDHvcbDyWBSI/oanUeRbQR5vVWkXoQ3cxLTsDluc3H74IqXS5z1Uyoe0vNo2hB1opA== + +"@swc/core@^1.4.16": + version "1.4.16" + resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.4.16.tgz#d175bae2acfecd53bcbd4293f1fba5ec316634a0" + integrity sha512-Xaf+UBvW6JNuV131uvSNyMXHn+bh6LyKN4tbv7tOUFQpXyz/t9YWRE04emtlUW9Y0qrm/GKFCbY8n3z6BpZbTA== + dependencies: + "@swc/counter" "^0.1.2" + "@swc/types" "^0.1.5" + optionalDependencies: + "@swc/core-darwin-arm64" "1.4.16" + "@swc/core-darwin-x64" "1.4.16" + "@swc/core-linux-arm-gnueabihf" "1.4.16" + "@swc/core-linux-arm64-gnu" "1.4.16" + "@swc/core-linux-arm64-musl" "1.4.16" + "@swc/core-linux-x64-gnu" "1.4.16" + "@swc/core-linux-x64-musl" "1.4.16" + "@swc/core-win32-arm64-msvc" "1.4.16" + "@swc/core-win32-ia32-msvc" "1.4.16" + "@swc/core-win32-x64-msvc" "1.4.16" + +"@swc/counter@^0.1.2", "@swc/counter@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9" + integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== + +"@swc/types@^0.1.5": + version "0.1.6" + resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.6.tgz#2f13f748995b247d146de2784d3eb7195410faba" + integrity sha512-/JLo/l2JsT/LRd80C3HfbmVpxOAJ11FO2RCEslFrgzLltoP9j8XIbsyDcfCt2WWyX+CM96rBoNM+IToAkFOugg== + dependencies: + "@swc/counter" "^0.1.3" + +"@szmarczak/http-timer@^4.0.5": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" + integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== + dependencies: + defer-to-connect "^2.0.0" + +"@thaunknown/thirty-two@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@thaunknown/thirty-two/-/thirty-two-1.0.3.tgz#64883031c4444c0fd75436219189ab5816b5b826" + integrity sha512-bD6PvWbaf53JC04O7WnGDjqZBDgja/KT2Jd/6I2vJBIy+DLmQfQJZZ/G+16nAkVq1yGTIkO4rfc4RlH0DmEEqA== + dependencies: + uint8-util "^2.1.9" + +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + +"@types/babel__core@^7.20.5": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== + dependencies: + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.8" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" + integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.5.tgz#7b7502be0aa80cc4ef22978846b983edaafcd4dd" + integrity sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ== + dependencies: + "@babel/types" "^7.20.7" + +"@types/cacheable-request@^6.0.1": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" + integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== + dependencies: + "@types/http-cache-semantics" "*" + "@types/keyv" "^3.1.4" + "@types/node" "*" + "@types/responselike" "^1.0.0" + +"@types/debug@^4.1.6": + version "4.1.12" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" + integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== + dependencies: + "@types/ms" "*" + +"@types/estree@1.0.5", "@types/estree@^1.0.0": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" + integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== + +"@types/fs-extra@9.0.13", "@types/fs-extra@^9.0.11": + version "9.0.13" + resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.13.tgz#7594fbae04fe7f1918ce8b3d213f74ff44ac1f45" + integrity sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA== + dependencies: + "@types/node" "*" + +"@types/http-cache-semantics@*": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" + integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== + +"@types/json-schema@^7.0.12": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + +"@types/keyv@^3.1.4": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" + integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== + dependencies: + "@types/node" "*" + +"@types/lodash-es@^4.17.12": + version "4.17.12" + resolved "https://registry.yarnpkg.com/@types/lodash-es/-/lodash-es-4.17.12.tgz#65f6d1e5f80539aa7cfbfc962de5def0cf4f341b" + integrity sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ== + dependencies: + "@types/lodash" "*" + +"@types/lodash@*": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.0.tgz#d774355e41f372d5350a4d0714abb48194a489c3" + integrity sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA== + +"@types/ms@*": + version "0.7.34" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" + integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== + +"@types/node@*": + version "20.12.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.7.tgz#04080362fa3dd6c5822061aa3124f5c152cff384" + integrity sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg== + dependencies: + undici-types "~5.26.4" + +"@types/node@^18.11.18", "@types/node@^18.19.9": + version "18.19.31" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.31.tgz#b7d4a00f7cb826b60a543cebdbda5d189aaecdcd" + integrity sha512-ArgCD39YpyyrtFKIqMDvjz79jto5fcI/SVUs2HwB+f0dAzq68yqOdyaSivLiLugSziTpNXLQrVb7RZFmdZzbhA== + dependencies: + undici-types "~5.26.4" + +"@types/plist@^3.0.1": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@types/plist/-/plist-3.0.5.tgz#9a0c49c0f9886c8c8696a7904dd703f6284036e0" + integrity sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA== + dependencies: + "@types/node" "*" + xmlbuilder ">=11.0.1" + +"@types/prop-types@*": + version "15.7.12" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.12.tgz#12bb1e2be27293c1406acb6af1c3f3a1481d98c6" + integrity sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q== + +"@types/react-dom@^18.2.18": + version "18.2.25" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.25.tgz#2946a30081f53e7c8d585eb138277245caedc521" + integrity sha512-o/V48vf4MQh7juIKZU2QGDfli6p1+OOi5oXx36Hffpc9adsHeXjVp8rHuPkjd8VT8sOJ2Zp05HR7CdpGTIUFUA== + dependencies: + "@types/react" "*" + +"@types/react@*", "@types/react@^18.2.48": + version "18.2.79" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.79.tgz#c40efb4f255711f554d47b449f796d1c7756d865" + integrity sha512-RwGAGXPl9kSXwdNTafkOEuFrTBD5SA2B3iEB96xi8+xu5ddUa/cpvyVCSNn+asgLCTHkb5ZxN8gbuibYJi4s1w== + dependencies: + "@types/prop-types" "*" + csstype "^3.0.2" + +"@types/responselike@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.3.tgz#cc29706f0a397cfe6df89debfe4bf5cea159db50" + integrity sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw== + dependencies: + "@types/node" "*" + +"@types/semver@^7.5.0": + version "7.5.8" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" + integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== + +"@types/triple-beam@^1.3.2": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/triple-beam/-/triple-beam-1.3.5.tgz#74fef9ffbaa198eb8b588be029f38b00299caa2c" + integrity sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw== + +"@types/use-sync-external-store@^0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz#b6725d5f4af24ace33b36fafd295136e75509f43" + integrity sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA== + +"@types/verror@^1.10.3": + version "1.10.10" + resolved "https://registry.yarnpkg.com/@types/verror/-/verror-1.10.10.tgz#d5a4b56abac169bfbc8b23d291363a682e6fa087" + integrity sha512-l4MM0Jppn18hb9xmM6wwD1uTdShpf9Pn80aXTStnK1C94gtPvJcV2FrDmbOQUAQfJ1cKZHktkQUDwEqaAKXMMg== + +"@types/yauzl@^2.9.1": + version "2.10.3" + resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.3.tgz#e9b2808b4f109504a03cda958259876f61017999" + integrity sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q== + dependencies: + "@types/node" "*" + +"@typescript-eslint/eslint-plugin@^6.14.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz#30830c1ca81fd5f3c2714e524c4303e0194f9cd3" + integrity sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA== + dependencies: + "@eslint-community/regexpp" "^4.5.1" + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/type-utils" "6.21.0" + "@typescript-eslint/utils" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" + debug "^4.3.4" + graphemer "^1.4.0" + ignore "^5.2.4" + natural-compare "^1.4.0" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/parser@^6.14.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b" + integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ== + dependencies: + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/typescript-estree" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1" + integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg== + dependencies: + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" + +"@typescript-eslint/type-utils@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz#6473281cfed4dacabe8004e8521cee0bd9d4c01e" + integrity sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag== + dependencies: + "@typescript-eslint/typescript-estree" "6.21.0" + "@typescript-eslint/utils" "6.21.0" + debug "^4.3.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/types@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d" + integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== + +"@typescript-eslint/typescript-estree@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46" + integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ== + dependencies: + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + minimatch "9.0.3" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/utils@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.21.0.tgz#4714e7a6b39e773c1c8e97ec587f520840cd8134" + integrity sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@types/json-schema" "^7.0.12" + "@types/semver" "^7.5.0" + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/typescript-estree" "6.21.0" + semver "^7.5.4" + +"@typescript-eslint/visitor-keys@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47" + integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A== + dependencies: + "@typescript-eslint/types" "6.21.0" + eslint-visitor-keys "^3.4.1" + +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== + +"@vanilla-extract/babel-plugin-debug-ids@^1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@vanilla-extract/babel-plugin-debug-ids/-/babel-plugin-debug-ids-1.0.5.tgz#e24424f46dd7737764a4bb5ac6dcdf19240f88bc" + integrity sha512-Rc9A6ylsw7EBErmpgqCMvc/Z/eEZxI5k1xfLQHw7f5HHh3oc5YfzsAsYU/PdmSNjF1dp3sGEViBdDltvwnfVaA== + dependencies: + "@babel/core" "^7.23.9" + +"@vanilla-extract/css@^1.14.2": + version "1.14.2" + resolved "https://registry.yarnpkg.com/@vanilla-extract/css/-/css-1.14.2.tgz#121d0b8633ea7e85505e4abab64f60670617d38d" + integrity sha512-OasEW4ojGqqRiUpsyEDUMrSkLnmwbChtafkogpCZ1eDAgAZ9eY9CHLYodj2nB8aV5T25kQ5shm92k25ngjYhhg== + dependencies: + "@emotion/hash" "^0.9.0" + "@vanilla-extract/private" "^1.0.4" + chalk "^4.1.1" + css-what "^6.1.0" + cssesc "^3.0.0" + csstype "^3.0.7" + deep-object-diff "^1.1.9" + deepmerge "^4.2.2" + media-query-parser "^2.0.2" + modern-ahocorasick "^1.0.0" + outdent "^0.8.0" + +"@vanilla-extract/integration@^7.1.2": + version "7.1.2" + resolved "https://registry.yarnpkg.com/@vanilla-extract/integration/-/integration-7.1.2.tgz#1685cc899babb3d6f31f4450d95a8324acc9ed17" + integrity sha512-jpjw0L3P1E+U9L8OAFVMGpPFbNPD+/Vpfew7oOKBYipCrRZEqShu3WLXuUxjXz/mcIH7KCS5nasIdy2VclbEaQ== + dependencies: + "@babel/core" "^7.23.9" + "@babel/plugin-syntax-typescript" "^7.23.3" + "@vanilla-extract/babel-plugin-debug-ids" "^1.0.5" + "@vanilla-extract/css" "^1.14.2" + esbuild "npm:esbuild@~0.17.6 || ~0.18.0 || ~0.19.0" + eval "0.1.8" + find-up "^5.0.0" + javascript-stringify "^2.0.1" + lodash "^4.17.21" + mlly "^1.4.2" + outdent "^0.8.0" + vite "^5.0.11" + vite-node "^1.2.0" + +"@vanilla-extract/private@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@vanilla-extract/private/-/private-1.0.4.tgz#35946b917d6b9774a2b9bc725c63c9341049c79b" + integrity sha512-8FGD6AejeC/nXcblgNCM5rnZb9KXa4WNkR03HCWtdJBpANjTgjHEglNLFnhuvdQ78tC6afaxBPI+g7F2NX3tgg== + +"@vanilla-extract/recipes@^0.5.2": + version "0.5.2" + resolved "https://registry.yarnpkg.com/@vanilla-extract/recipes/-/recipes-0.5.2.tgz#fccd09af9ce1ab3abd17fcf20cd649df0e7f30d3" + integrity sha512-IcDw3tFOcSJ+DUxL8MIGbg03eyccYb6NBO/rcgp439PDuHxo5GIQefVeGc1L5mIr/lUVPwDc1N5OXTHiGpiz1A== + +"@vanilla-extract/vite-plugin@^4.0.7": + version "4.0.7" + resolved "https://registry.yarnpkg.com/@vanilla-extract/vite-plugin/-/vite-plugin-4.0.7.tgz#40cd5de73bacf89e2ca69ba61163f50e62e77b3c" + integrity sha512-uRAFWdq5Eq0ybpgW2P0LNOw8eW+MTg/OFo5K0Hsl2cKu/Tu2tabCsBf6vNjfhDrm4jBShHy1wJIVcYxf6sczVQ== + dependencies: + "@vanilla-extract/integration" "^7.1.2" + +"@vitejs/plugin-react@^4.2.1": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz#744d8e4fcb120fc3dbaa471dadd3483f5a304bb9" + integrity sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ== + dependencies: + "@babel/core" "^7.23.5" + "@babel/plugin-transform-react-jsx-self" "^7.23.3" + "@babel/plugin-transform-react-jsx-source" "^7.23.3" + "@types/babel__core" "^7.20.5" + react-refresh "^0.14.0" + +"@xmldom/xmldom@^0.8.8": + version "0.8.10" + resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz#a1337ca426aa61cef9fe15b5b28e340a72f6fa99" + integrity sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw== + +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^8.11.3, acorn@^8.9.0: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== + +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +agent-base@^7.0.2, agent-base@^7.1.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.1.tgz#bdbded7dfb096b751a2a087eeeb9664725b2e317" + integrity sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA== + dependencies: + debug "^4.3.4" + +ajv-keywords@^3.4.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv@^6.10.0, ajv@^6.12.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== + +app-builder-bin@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-4.0.0.tgz#1df8e654bd1395e4a319d82545c98667d7eed2f0" + integrity sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA== + +app-builder-lib@24.13.3: + version "24.13.3" + resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-24.13.3.tgz#36e47b65fecb8780bb73bff0fee4e0480c28274b" + integrity sha512-FAzX6IBit2POXYGnTCT8YHFO/lr5AapAII6zzhQO3Rw4cEDOgK+t1xhLc5tNcKlicTHlo9zxIwnYCX9X2DLkig== + dependencies: + "@develar/schema-utils" "~2.6.5" + "@electron/notarize" "2.2.1" + "@electron/osx-sign" "1.0.5" + "@electron/universal" "1.5.1" + "@malept/flatpak-bundler" "^0.4.0" + "@types/fs-extra" "9.0.13" + async-exit-hook "^2.0.1" + bluebird-lst "^1.0.9" + builder-util "24.13.1" + builder-util-runtime "9.2.4" + chromium-pickle-js "^0.2.0" + debug "^4.3.4" + ejs "^3.1.8" + electron-publish "24.13.1" + form-data "^4.0.0" + fs-extra "^10.1.0" + hosted-git-info "^4.1.0" + is-ci "^3.0.0" + isbinaryfile "^5.0.0" + js-yaml "^4.1.0" + lazy-val "^1.0.5" + minimatch "^5.1.1" + read-config-file "6.3.2" + sanitize-filename "^1.6.3" + semver "^7.3.8" + tar "^6.1.12" + temp-file "^3.4.0" + +app-root-path@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-3.1.0.tgz#5971a2fc12ba170369a7a1ef018c71e6e47c2e86" + integrity sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA== + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-buffer-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" + integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== + dependencies: + call-bind "^1.0.5" + is-array-buffer "^3.0.4" + +array-includes@^3.1.6, array-includes@^3.1.7: + version "3.1.8" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" + integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.4" + is-string "^1.0.7" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array.prototype.findlast@^1.2.4: + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" + integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-shim-unscopables "^1.0.2" + +array.prototype.flat@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" + integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.flatmap@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" + integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.toreversed@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz#b989a6bf35c4c5051e1dc0325151bf8088954eba" + integrity sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.tosorted@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz#c8c89348337e51b8a3c48a9227f9ce93ceedcba8" + integrity sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.1.0" + es-shim-unscopables "^1.0.2" + +arraybuffer.prototype.slice@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" + integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.2.1" + get-intrinsic "^1.2.3" + is-array-buffer "^3.0.4" + is-shared-array-buffer "^1.0.2" + +assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +async-exit-hook@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/async-exit-hook/-/async-exit-hook-2.0.1.tgz#8bd8b024b0ec9b1c01cccb9af9db29bd717dfaf3" + integrity sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw== + +async@^3.2.3: + version "3.2.5" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" + integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" + +axios@^1.6.8: + version "1.6.8" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66" + integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ== + dependencies: + follow-redirects "^1.15.6" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base64-arraybuffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz#1c37589a7c4b0746e34bd1feb951da2df01c1bdc" + integrity sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ== + +base64-js@^1.3.1, base64-js@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +bencode@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/bencode/-/bencode-4.0.0.tgz#36ca0bc366290dad002215fc52fc74edf4eb0625" + integrity sha512-AERXw18df0pF3ziGOCyUjqKZBVNH8HV3lBxnx5w0qtgMIk4a1wb9BkcCQbkp9Zstfrn/dzRwl7MmUHHocX3sRQ== + dependencies: + uint8-util "^2.2.2" + +bep53-range@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/bep53-range/-/bep53-range-2.0.0.tgz#a1770475661b4b814c4359e4b66f7cbd88de2b10" + integrity sha512-sMm2sV5PRs0YOVk0LTKtjuIprVzxgTQUsrGX/7Yph2Rm4FO2Fqqtq7hNjsOB5xezM4v4+5rljCgK++UeQJZguA== + +better-sqlite3@^9.5.0: + version "9.5.0" + resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-9.5.0.tgz#0e10766cfb7f9b8916be3ab95ad9d5bcc4e6e6fd" + integrity sha512-01qVcM4gPNwE+PX7ARNiHINwzVuD6nx0gdldaAAcu+MrzyIAukQ31ZDKEpzRO/CNA9sHpxoTZ8rdjoyAin4dyg== + dependencies: + bindings "^1.5.0" + prebuild-install "^7.1.1" + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +bl@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +bluebird-lst@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/bluebird-lst/-/bluebird-lst-1.0.9.tgz#a64a0e4365658b9ab5fe875eb9dfb694189bb41c" + integrity sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw== + dependencies: + bluebird "^3.5.5" + +bluebird@^3.5.5: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +boolean@^3.0.1: + version "3.2.0" + resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.2.0.tgz#9e5294af4e98314494cbb17979fa54ca159f116b" + integrity sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browserslist@^4.22.2: + version "4.23.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" + integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== + dependencies: + caniuse-lite "^1.0.30001587" + electron-to-chromium "^1.4.668" + node-releases "^2.0.14" + update-browserslist-db "^1.0.13" + +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== + +buffer-equal@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.1.tgz#2f7651be5b1b3f057fcd6e7ee16cf34767077d90" + integrity sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg== + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer@^5.1.0, buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +builder-util-runtime@9.2.4: + version "9.2.4" + resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-9.2.4.tgz#13cd1763da621e53458739a1e63f7fcba673c42a" + integrity sha512-upp+biKpN/XZMLim7aguUyW8s0FUpDvOtK6sbanMFDAMBzpHDqdhgVYm6zc9HJ6nWo7u2Lxk60i2M6Jd3aiNrA== + dependencies: + debug "^4.3.4" + sax "^1.2.4" + +builder-util@24.13.1: + version "24.13.1" + resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-24.13.1.tgz#4a4c4f9466b016b85c6990a0ea15aa14edec6816" + integrity sha512-NhbCSIntruNDTOVI9fdXz0dihaqX2YuE1D6zZMrwiErzH4ELZHE6mdiB40wEgZNprDia+FghRFgKoAqMZRRjSA== + dependencies: + "7zip-bin" "~5.2.0" + "@types/debug" "^4.1.6" + app-builder-bin "4.0.0" + bluebird-lst "^1.0.9" + builder-util-runtime "9.2.4" + chalk "^4.1.2" + cross-spawn "^7.0.3" + debug "^4.3.4" + fs-extra "^10.1.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.1" + is-ci "^3.0.0" + js-yaml "^4.1.0" + source-map-support "^0.5.19" + stat-mode "^1.0.0" + temp-file "^3.4.0" + +cac@^6.7.14: + version "6.7.14" + resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" + integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== + +cacheable-lookup@^5.0.3: + version "5.0.4" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" + integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== + +cacheable-request@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817" + integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^4.0.0" + lowercase-keys "^2.0.0" + normalize-url "^6.0.1" + responselike "^2.0.0" + +call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-lite@^1.0.30001587: + version "1.0.30001611" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001611.tgz#4dbe78935b65851c2d2df1868af39f709a93a96e" + integrity sha512-19NuN1/3PjA3QI8Eki55N8my4LzfkMCRLgCVfrl/slbSAchQfV0+GwjPrK3rq37As4UCLlM/DHajbKkAqbv92Q== + +chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.1, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +check-disk-space@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/check-disk-space/-/check-disk-space-3.4.0.tgz#eb8e69eee7a378fd12e35281b8123a8b4c4a8ff7" + integrity sha512-drVkSqfwA+TvuEhFipiR1OC9boEGZL5RrWvVsOthdcvQNXyCCuKkEiTOTXZ7qxSf/GLwq4GvzfrQD/Wz325hgw== + +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +chromium-pickle-js@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz#04a106672c18b085ab774d983dfa3ea138f22205" + integrity sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw== + +ci-info@^3.2.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== + +classnames@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b" + integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow== + +cli-highlight@^2.1.11: + version "2.1.11" + resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.11.tgz#49736fa452f0aaf4fae580e30acb26828d2dc1bf" + integrity sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg== + dependencies: + chalk "^4.0.0" + highlight.js "^10.7.1" + mz "^2.4.0" + parse5 "^5.1.1" + parse5-htmlparser2-tree-adapter "^6.0.0" + yargs "^16.0.0" + +cli-truncate@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" + integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== + dependencies: + slice-ansi "^3.0.0" + string-width "^4.2.0" + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +clone-response@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== + dependencies: + mimic-response "^1.0.0" + +color-convert@^1.9.0, color-convert@^1.9.3: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^1.6.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color.js@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/color.js/-/color.js-1.2.0.tgz#18d9f55545111730d25ccf18ea8b6933c71440d7" + integrity sha512-0ajlNgWWOR7EK9N6l2h0YKsZPzMCLQG5bheCoTGpGfhkR8tB5eQNItdua1oFHDTeq9JKgSzQJqo+Gp3V/xW+Lw== + +color@^3.1.3: + version "3.2.1" + resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" + integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== + dependencies: + color-convert "^1.9.3" + color-string "^1.6.0" + +colorspace@1.1.x: + version "1.1.4" + resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.1.4.tgz#8d442d1186152f60453bf8070cd66eb364e59243" + integrity sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w== + dependencies: + color "^3.1.3" + text-hex "1.0.x" + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" + integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== + +compare-version@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/compare-version/-/compare-version-0.1.2.tgz#0162ec2d9351f5ddd59a9202cba935366a725080" + integrity sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +confbox@^0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.1.7.tgz#ccfc0a2bcae36a84838e83a3b7f770fb17d6c579" + integrity sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA== + +config-file-ts@^0.2.4: + version "0.2.6" + resolved "https://registry.yarnpkg.com/config-file-ts/-/config-file-ts-0.2.6.tgz#b424ff74612fb37f626d6528f08f92ddf5d22027" + integrity sha512-6boGVaglwblBgJqGyxm4+xCmEGcWgnWHSWHY5jad58awQhB6gftq0G8HbzU39YqCIYHMLAiL1yjwiZ36m/CL8w== + dependencies: + glob "^10.3.10" + typescript "^5.3.3" + +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== + +cosmiconfig@^8.1.3: + version "8.3.6" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" + integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== + dependencies: + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" + path-type "^4.0.0" + +crc@^3.8.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6" + integrity sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ== + dependencies: + buffer "^5.1.0" + +cross-fetch-ponyfill@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/cross-fetch-ponyfill/-/cross-fetch-ponyfill-1.0.3.tgz#5c5524e3bd3374e71d5016c2327e416369a57527" + integrity sha512-uOBkDhUAGAbx/FEzNKkOfx3w57H8xReBBXoZvUnOKTI0FW0Xvrj3GrYv2iZXUqlffC1LMGfQzhmBM/ke+6eTDA== + dependencies: + abort-controller "^3.0.0" + node-fetch "^3.3.0" + +cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +css-what@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssstyle@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-4.0.1.tgz#ef29c598a1e90125c870525490ea4f354db0660a" + integrity sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ== + dependencies: + rrweb-cssom "^0.6.0" + +csstype@^3.0.2, csstype@^3.0.7: + version "3.1.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== + +csv-generate@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/csv-generate/-/csv-generate-3.4.3.tgz#bc42d943b45aea52afa896874291da4b9108ffff" + integrity sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw== + +csv-parse@^4.16.3: + version "4.16.3" + resolved "https://registry.yarnpkg.com/csv-parse/-/csv-parse-4.16.3.tgz#7ca624d517212ebc520a36873c3478fa66efbaf7" + integrity sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg== + +csv-stringify@^5.6.5: + version "5.6.5" + resolved "https://registry.yarnpkg.com/csv-stringify/-/csv-stringify-5.6.5.tgz#c6d74badda4b49a79bf4e72f91cce1e33b94de00" + integrity sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A== + +csv@^5.5.0: + version "5.5.3" + resolved "https://registry.yarnpkg.com/csv/-/csv-5.5.3.tgz#cd26c1e45eae00ce6a9b7b27dcb94955ec95207d" + integrity sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g== + dependencies: + csv-generate "^3.4.3" + csv-parse "^4.16.3" + csv-stringify "^5.6.5" + stream-transform "^2.1.3" + +data-uri-to-buffer@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" + integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== + +data-urls@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-5.0.0.tgz#2f76906bce1824429ffecb6920f45a0b30f00dde" + integrity sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg== + dependencies: + whatwg-mimetype "^4.0.0" + whatwg-url "^14.0.0" + +data-view-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2" + integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2" + integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a" + integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +date-fns@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-3.6.0.tgz#f20ca4fe94f8b754951b24240676e8618c0206bf" + integrity sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww== + +dayjs@^1.11.9: + version "1.11.10" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.10.tgz#68acea85317a6e164457d6d6947564029a6a16a0" + integrity sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ== + +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +decimal.js@^10.4.3: + version "10.4.3" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" + integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deep-object-diff@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/deep-object-diff/-/deep-object-diff-1.1.9.tgz#6df7ef035ad6a0caa44479c536ed7b02570f4595" + integrity sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA== + +deepmerge@4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.0.tgz#65491893ec47756d44719ae520e0e2609233b59b" + integrity sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og== + +deepmerge@^4.2.2: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +defer-to-connect@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" + integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== + +define-data-property@^1.0.1, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + +define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +detect-libc@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" + integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== + +detect-node@^2.0.4: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" + integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== + +dir-compare@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/dir-compare/-/dir-compare-3.3.0.tgz#2c749f973b5c4b5d087f11edaae730db31788416" + integrity sha512-J7/et3WlGUCxjdnD3HAAzQ6nsnc0WL6DD7WcwJb7c39iH1+AWfg+9OqzJNaI6PkBwBvm1mhZNL9iY/nRiZXlPg== + dependencies: + buffer-equal "^1.0.0" + minimatch "^3.0.4" + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dmg-builder@24.13.3: + version "24.13.3" + resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-24.13.3.tgz#95d5b99c587c592f90d168a616d7ec55907c7e55" + integrity sha512-rcJUkMfnJpfCboZoOOPf4L29TRtEieHNOeAbYPWPxlaBw/Z1RKrRA86dOI9rwaI4tQSc/RD82zTNHprfUHXsoQ== + dependencies: + app-builder-lib "24.13.3" + builder-util "24.13.1" + builder-util-runtime "9.2.4" + fs-extra "^10.1.0" + iconv-lite "^0.6.2" + js-yaml "^4.1.0" + optionalDependencies: + dmg-license "^1.0.11" + +dmg-license@^1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/dmg-license/-/dmg-license-1.0.11.tgz#7b3bc3745d1b52be7506b4ee80cb61df6e4cd79a" + integrity sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q== + dependencies: + "@types/plist" "^3.0.1" + "@types/verror" "^1.10.3" + ajv "^6.10.0" + crc "^3.8.0" + iconv-corefoundation "^1.1.7" + plist "^3.0.4" + smart-buffer "^4.0.2" + verror "^1.10.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +dotenv-expand@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" + integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== + +dotenv@^16.0.3: + version "16.4.5" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" + integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== + +dotenv@^9.0.2: + version "9.0.2" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-9.0.2.tgz#dacc20160935a37dea6364aa1bef819fb9b6ab05" + integrity sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg== + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +ejs@^3.1.8: + version "3.1.10" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" + integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== + dependencies: + jake "^10.8.5" + +electron-builder@^24.9.1: + version "24.13.3" + resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-24.13.3.tgz#c506dfebd36d9a50a83ee8aa32d803d83dbe4616" + integrity sha512-yZSgVHft5dNVlo31qmJAe4BVKQfFdwpRw7sFp1iQglDRCDD6r22zfRJuZlhtB5gp9FHUxCMEoWGq10SkCnMAIg== + dependencies: + app-builder-lib "24.13.3" + builder-util "24.13.1" + builder-util-runtime "9.2.4" + chalk "^4.1.2" + dmg-builder "24.13.3" + fs-extra "^10.1.0" + is-ci "^3.0.0" + lazy-val "^1.0.5" + read-config-file "6.3.2" + simple-update-notifier "2.0.0" + yargs "^17.6.2" + +electron-publish@24.13.1: + version "24.13.1" + resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-24.13.1.tgz#57289b2f7af18737dc2ad134668cdd4a1b574a0c" + integrity sha512-2ZgdEqJ8e9D17Hwp5LEq5mLQPjqU3lv/IALvgp+4W8VeNhryfGhYEQC/PgDPMrnWUp+l60Ou5SJLsu+k4mhQ8A== + dependencies: + "@types/fs-extra" "^9.0.11" + builder-util "24.13.1" + builder-util-runtime "9.2.4" + chalk "^4.1.2" + fs-extra "^10.1.0" + lazy-val "^1.0.5" + mime "^2.5.2" + +electron-to-chromium@^1.4.668: + version "1.4.745" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.745.tgz#9c202ce9cbf18a5b5e0ca47145fd127cc4dd2290" + integrity sha512-tRbzkaRI5gbUn5DEvF0dV4TQbMZ5CLkWeTAXmpC9IrYT+GE+x76i9p+o3RJ5l9XmdQlI1pPhVtE9uNcJJ0G0EA== + +electron-vite@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/electron-vite/-/electron-vite-2.1.0.tgz#33908c3b9c90bcab5c5f4c0f6c483263303cc5aa" + integrity sha512-DjToUW6q3ILoW79b1yBywC6LubnOw5Axr2zo9cHMlYf00zAO8oVzrCcqinJQTTbJLvqCuVcBzuICMl5MYshUnQ== + dependencies: + "@babel/core" "^7.23.5" + "@babel/plugin-transform-arrow-functions" "^7.23.3" + cac "^6.7.14" + esbuild "^0.19.8" + magic-string "^0.30.5" + picocolors "^1.0.0" + +electron@^28.2.0: + version "28.3.1" + resolved "https://registry.yarnpkg.com/electron/-/electron-28.3.1.tgz#babb3ff8e246336e9cd1c1966f16a55ba723ea06" + integrity sha512-aF9fONuhVDJlctJS7YOw76ynxVAQdfIWmlhRMKits24tDcdSL0eMHUS0wWYiRfGWbQnUKB6V49Rf17o32f4/fg== + dependencies: + "@electron/get" "^2.0.0" + "@types/node" "^18.11.18" + extract-zip "^2.0.1" + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +enabled@2.0.x: + version "2.0.0" + resolved "https://registry.yarnpkg.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" + integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== + +end-of-stream@^1.1.0, end-of-stream@^1.4.1: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +entities@^4.4.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2: + version "1.23.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" + integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== + dependencies: + array-buffer-byte-length "^1.0.1" + arraybuffer.prototype.slice "^1.0.3" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + data-view-buffer "^1.0.1" + data-view-byte-length "^1.0.1" + data-view-byte-offset "^1.0.0" + es-define-property "^1.0.0" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-set-tostringtag "^2.0.3" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.4" + get-symbol-description "^1.0.2" + globalthis "^1.0.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" + has-symbols "^1.0.3" + hasown "^2.0.2" + internal-slot "^1.0.7" + is-array-buffer "^3.0.4" + is-callable "^1.2.7" + is-data-view "^1.0.1" + is-negative-zero "^2.0.3" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.3" + is-string "^1.0.7" + is-typed-array "^1.1.13" + is-weakref "^1.0.2" + object-inspect "^1.13.1" + object-keys "^1.1.1" + object.assign "^4.1.5" + regexp.prototype.flags "^1.5.2" + safe-array-concat "^1.1.2" + safe-regex-test "^1.0.3" + string.prototype.trim "^1.2.9" + string.prototype.trimend "^1.0.8" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.2" + typed-array-byte-length "^1.0.1" + typed-array-byte-offset "^1.0.2" + typed-array-length "^1.0.6" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.15" + +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.1.0, es-errors@^1.2.1, es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-iterator-helpers@^1.0.17: + version "1.0.18" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz#4d3424f46b24df38d064af6fbbc89274e29ea69d" + integrity sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.0" + es-errors "^1.3.0" + es-set-tostringtag "^2.0.3" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + globalthis "^1.0.3" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" + has-symbols "^1.0.3" + internal-slot "^1.0.7" + iterator.prototype "^1.1.2" + safe-array-concat "^1.1.2" + +es-object-atoms@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" + integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" + integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== + dependencies: + get-intrinsic "^1.2.4" + has-tostringtag "^1.0.2" + hasown "^2.0.1" + +es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" + integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== + dependencies: + hasown "^2.0.0" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es6-error@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" + integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== + +esbuild@^0.19.8, "esbuild@npm:esbuild@~0.17.6 || ~0.18.0 || ~0.19.0": + version "0.19.12" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.12.tgz#dc82ee5dc79e82f5a5c3b4323a2a641827db3e04" + integrity sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg== + optionalDependencies: + "@esbuild/aix-ppc64" "0.19.12" + "@esbuild/android-arm" "0.19.12" + "@esbuild/android-arm64" "0.19.12" + "@esbuild/android-x64" "0.19.12" + "@esbuild/darwin-arm64" "0.19.12" + "@esbuild/darwin-x64" "0.19.12" + "@esbuild/freebsd-arm64" "0.19.12" + "@esbuild/freebsd-x64" "0.19.12" + "@esbuild/linux-arm" "0.19.12" + "@esbuild/linux-arm64" "0.19.12" + "@esbuild/linux-ia32" "0.19.12" + "@esbuild/linux-loong64" "0.19.12" + "@esbuild/linux-mips64el" "0.19.12" + "@esbuild/linux-ppc64" "0.19.12" + "@esbuild/linux-riscv64" "0.19.12" + "@esbuild/linux-s390x" "0.19.12" + "@esbuild/linux-x64" "0.19.12" + "@esbuild/netbsd-x64" "0.19.12" + "@esbuild/openbsd-x64" "0.19.12" + "@esbuild/sunos-x64" "0.19.12" + "@esbuild/win32-arm64" "0.19.12" + "@esbuild/win32-ia32" "0.19.12" + "@esbuild/win32-x64" "0.19.12" + +esbuild@^0.20.1: + version "0.20.2" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.20.2.tgz#9d6b2386561766ee6b5a55196c6d766d28c87ea1" + integrity sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g== + optionalDependencies: + "@esbuild/aix-ppc64" "0.20.2" + "@esbuild/android-arm" "0.20.2" + "@esbuild/android-arm64" "0.20.2" + "@esbuild/android-x64" "0.20.2" + "@esbuild/darwin-arm64" "0.20.2" + "@esbuild/darwin-x64" "0.20.2" + "@esbuild/freebsd-arm64" "0.20.2" + "@esbuild/freebsd-x64" "0.20.2" + "@esbuild/linux-arm" "0.20.2" + "@esbuild/linux-arm64" "0.20.2" + "@esbuild/linux-ia32" "0.20.2" + "@esbuild/linux-loong64" "0.20.2" + "@esbuild/linux-mips64el" "0.20.2" + "@esbuild/linux-ppc64" "0.20.2" + "@esbuild/linux-riscv64" "0.20.2" + "@esbuild/linux-s390x" "0.20.2" + "@esbuild/linux-x64" "0.20.2" + "@esbuild/netbsd-x64" "0.20.2" + "@esbuild/openbsd-x64" "0.20.2" + "@esbuild/sunos-x64" "0.20.2" + "@esbuild/win32-arm64" "0.20.2" + "@esbuild/win32-ia32" "0.20.2" + "@esbuild/win32-x64" "0.20.2" + +escalade@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-config-prettier@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz#31af3d94578645966c082fcb71a5846d3c94867f" + integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== + +eslint-plugin-prettier@^5.0.1: + version "5.1.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz#17cfade9e732cef32b5f5be53bd4e07afd8e67e1" + integrity sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw== + dependencies: + prettier-linter-helpers "^1.0.0" + synckit "^0.8.6" + +eslint-plugin-react@^7.33.2: + version "7.34.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz#6806b70c97796f5bbfb235a5d3379ece5f4da997" + integrity sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw== + dependencies: + array-includes "^3.1.7" + array.prototype.findlast "^1.2.4" + array.prototype.flatmap "^1.3.2" + array.prototype.toreversed "^1.1.2" + array.prototype.tosorted "^1.1.3" + doctrine "^2.1.0" + es-iterator-helpers "^1.0.17" + estraverse "^5.3.0" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.1.2" + object.entries "^1.1.7" + object.fromentries "^2.0.7" + object.hasown "^1.1.3" + object.values "^1.1.7" + prop-types "^15.8.1" + resolve "^2.0.0-next.5" + semver "^6.3.1" + string.prototype.matchall "^4.0.10" + +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint@^8.56.0: + version "8.57.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" + integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.57.0" + "@humanwhocodes/config-array" "^0.11.14" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== + dependencies: + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + +esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +estree-walker@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +eval@0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/eval/-/eval-0.1.8.tgz#2b903473b8cc1d1989b83a1e7923f883eb357f85" + integrity sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw== + dependencies: + "@types/node" "*" + require-like ">= 0.1.1" + +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + +expand-template@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" + integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== + +extract-zip@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" + integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== + dependencies: + debug "^4.1.1" + get-stream "^5.1.0" + yauzl "^2.10.0" + optionalDependencies: + "@types/yauzl" "^2.9.1" + +extsprintf@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-diff@^1.1.2: + version "1.3.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" + integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== + +fast-glob@^3.2.9: + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastq@^1.6.0: + version "1.17.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== + dependencies: + reusify "^1.0.4" + +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== + dependencies: + pend "~1.2.0" + +fecha@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.3.tgz#4d9ccdbc61e8629b259fdca67e65891448d569fd" + integrity sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw== + +fetch-blob@^3.1.2, fetch-blob@^3.1.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" + integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== + dependencies: + node-domexception "^1.0.0" + web-streams-polyfill "^3.0.3" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +filelist@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" + integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== + dependencies: + minimatch "^5.0.1" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.3" + rimraf "^3.0.2" + +flatted@^3.2.9: + version "3.3.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" + integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== + +flexsearch@^0.7.43: + version "0.7.43" + resolved "https://registry.yarnpkg.com/flexsearch/-/flexsearch-0.7.43.tgz#34f89b36278a466ce379c5bf6fb341965ed3f16c" + integrity sha512-c5o/+Um8aqCSOXGcZoqZOm+NqtVwNsvVpWv6lfmSclU954O3wvQKxxK8zj74fPaSJbXpSLTs4PRhh+wnoCXnKg== + +fn.name@1.x.x: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" + integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== + +follow-redirects@^1.15.6: + version "1.15.6" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" + integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +foreground-child@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +formdata-polyfill@^4.0.10: + version "4.0.10" + resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" + integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== + dependencies: + fetch-blob "^3.1.2" + +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + +fs-extra@^10.0.0, fs-extra@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^9.0.0, fs-extra@^9.0.1: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2, fsevents@~2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +function.prototype.name@^1.1.5, function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" + +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + +get-stdin@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-9.0.0.tgz#3983ff82e03d56f1b2ea0d3e60325f39d703a575" + integrity sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA== + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-symbol-description@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" + integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== + dependencies: + call-bind "^1.0.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + +github-from-package@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" + integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== + +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@^10.3.10: + version "10.3.12" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.12.tgz#3a65c363c2e9998d220338e88a5f6ac97302960b" + integrity sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg== + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.3.6" + minimatch "^9.0.1" + minipass "^7.0.4" + path-scurry "^1.10.2" + +glob@^7.1.3, glob@^7.1.6: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-agent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-agent/-/global-agent-3.0.0.tgz#ae7cd31bd3583b93c5a16437a1afe27cc33a1ab6" + integrity sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q== + dependencies: + boolean "^3.0.1" + es6-error "^4.1.1" + matcher "^3.0.0" + roarr "^2.15.3" + semver "^7.3.2" + serialize-error "^7.0.1" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^13.19.0: + version "13.24.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== + dependencies: + type-fest "^0.20.2" + +globalthis@^1.0.1, globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +got@^11.8.5: + version "11.8.6" + resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" + integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== + dependencies: + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" + "@types/cacheable-request" "^6.0.1" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" + lowercase-keys "^2.0.0" + p-cancelable "^2.0.0" + responselike "^2.0.0" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-proto@^1.0.1, has-proto@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +highlight.js@^10.7.1: + version "10.7.3" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" + integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== + +hoist-non-react-statics@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + +hosted-git-info@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" + integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== + dependencies: + lru-cache "^6.0.0" + +html-encoding-sniffer@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz#696df529a7cfd82446369dc5193e590a3735b448" + integrity sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ== + dependencies: + whatwg-encoding "^3.1.1" + +html-parse-stringify@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz#dfc1017347ce9f77c8141a507f233040c59c55d2" + integrity sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg== + dependencies: + void-elements "3.1.0" + +http-cache-semantics@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== + dependencies: + "@tootallnate/once" "2" + agent-base "6" + debug "4" + +http-proxy-agent@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" + integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== + dependencies: + agent-base "^7.1.0" + debug "^4.3.4" + +http2-wrapper@^1.0.0-beta.5.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" + integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.0.0" + +https-proxy-agent@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +https-proxy-agent@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz#8e97b841a029ad8ddc8731f26595bad868cb4168" + integrity sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg== + dependencies: + agent-base "^7.0.2" + debug "4" + +i18next-browser-languagedetector@^7.2.1: + version "7.2.1" + resolved "https://registry.yarnpkg.com/i18next-browser-languagedetector/-/i18next-browser-languagedetector-7.2.1.tgz#1968196d437b4c8db847410c7c33554f6c448f6f" + integrity sha512-h/pM34bcH6tbz8WgGXcmWauNpQupCGr25XPp9cZwZInR9XHSjIFDYp1SIok7zSPsTOMxdvuLyu86V+g2Kycnfw== + dependencies: + "@babel/runtime" "^7.23.2" + +i18next@^23.11.2: + version "23.11.2" + resolved "https://registry.yarnpkg.com/i18next/-/i18next-23.11.2.tgz#4c0e8192a9ba230fe7dc68b76459816ab601826e" + integrity sha512-qMBm7+qT8jdpmmDw/kQD16VpmkL9BdL+XNAK5MNbNFaf1iQQq35ZbPrSlqmnNPOSUY4m342+c0t0evinF5l7sA== + dependencies: + "@babel/runtime" "^7.23.2" + +iconv-corefoundation@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz#31065e6ab2c9272154c8b0821151e2c88f1b002a" + integrity sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ== + dependencies: + cli-truncate "^2.1.0" + node-addon-api "^1.6.3" + +iconv-lite@0.6.3, iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ieee754@^1.1.13, ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore@^5.2.0, ignore@^5.2.4: + version "5.3.1" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== + +immer@^10.0.3: + version "10.0.4" + resolved "https://registry.yarnpkg.com/immer/-/immer-10.0.4.tgz#09af41477236b99449f9d705369a4daaf780362b" + integrity sha512-cuBuGK40P/sk5IzWa9QPUaAdvPHjkk1c+xYsd9oZw+YQQEV+10G0P5uMpGctZZKnyQ+ibRO08bD25nWLmYi2pw== + +import-fresh@^3.2.1, import-fresh@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +internal-slot@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" + integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== + dependencies: + es-errors "^1.3.0" + hasown "^2.0.0" + side-channel "^1.0.4" + +is-array-buffer@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" + integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + +is-async-function@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646" + integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== + dependencies: + has-tostringtag "^1.0.0" + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-ci@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" + integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== + dependencies: + ci-info "^3.2.0" + +is-core-module@^2.13.0: + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== + dependencies: + hasown "^2.0.0" + +is-data-view@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f" + integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== + dependencies: + is-typed-array "^1.1.13" + +is-date-object@^1.0.1, is-date-object@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-finalizationregistry@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz#c8749b65f17c133313e661b1289b95ad3dbd62e6" + integrity sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw== + dependencies: + call-bind "^1.0.2" + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-function@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-map@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" + integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== + +is-negative-zero@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-potential-custom-element-name@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-set@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" + integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== + +is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" + integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== + dependencies: + call-bind "^1.0.7" + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" + integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== + dependencies: + which-typed-array "^1.1.14" + +is-weakmap@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" + integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-weakset@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.3.tgz#e801519df8c0c43e12ff2834eead84ec9e624007" + integrity sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ== + dependencies: + call-bind "^1.0.7" + get-intrinsic "^1.2.4" + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isbinaryfile@^4.0.8: + version "4.0.10" + resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.10.tgz#0c5b5e30c2557a2f06febd37b7322946aaee42b3" + integrity sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw== + +isbinaryfile@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-5.0.2.tgz#fe6e4dfe2e34e947ffa240c113444876ba393ae0" + integrity sha512-GvcjojwonMjWbTkfMpnVHVqXW/wKMYDfEpY94/8zy8HFMOqb/VL6oeONq9v87q4ttVlaTLnGXnJD4B5B1OTGIg== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +iterator.prototype@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.2.tgz#5e29c8924f01916cb9335f1ff80619dcff22b0c0" + integrity sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w== + dependencies: + define-properties "^1.2.1" + get-intrinsic "^1.2.1" + has-symbols "^1.0.3" + reflect.getprototypeof "^1.0.4" + set-function-name "^2.0.1" + +jackspeak@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" + integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + +jake@^10.8.5: + version "10.8.7" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" + integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== + dependencies: + async "^3.2.3" + chalk "^4.0.2" + filelist "^1.0.4" + minimatch "^3.1.2" + +javascript-stringify@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-2.1.0.tgz#27c76539be14d8bd128219a2d731b09337904e79" + integrity sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg== + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsdom@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-24.0.0.tgz#e2dc04e4c79da368481659818ee2b0cd7c39007c" + integrity sha512-UDS2NayCvmXSXVP6mpTj+73JnNQadZlr9N68189xib2tx5Mls7swlTNao26IoHv46BZJFvXygyRtyXd1feAk1A== + dependencies: + cssstyle "^4.0.1" + data-urls "^5.0.0" + decimal.js "^10.4.3" + form-data "^4.0.0" + html-encoding-sniffer "^4.0.0" + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.2" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.7" + parse5 "^7.1.2" + rrweb-cssom "^0.6.0" + saxes "^6.0.0" + symbol-tree "^3.2.4" + tough-cookie "^4.1.3" + w3c-xmlserializer "^5.0.0" + webidl-conversions "^7.0.0" + whatwg-encoding "^3.1.1" + whatwg-mimetype "^4.0.0" + whatwg-url "^14.0.0" + ws "^8.16.0" + xml-name-validator "^5.0.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json-stringify-safe@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + +json5@^2.2.0, json5@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +"jsx-ast-utils@^2.4.1 || ^3.0.0": + version "3.3.5" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" + integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== + dependencies: + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + object.assign "^4.1.4" + object.values "^1.1.6" + +keyv@^4.0.0, keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + +kuler@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" + integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== + +lazy-val@^1.0.4, lazy-val@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.5.tgz#6cf3b9f5bc31cee7ee3e369c0832b7583dcd923d" + integrity sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash-es@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash@^4.17.15, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +logform@^2.3.2, logform@^2.4.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/logform/-/logform-2.6.0.tgz#8c82a983f05d6eaeb2d75e3decae7a768b2bf9b5" + integrity sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ== + dependencies: + "@colors/colors" "1.6.0" + "@types/triple-beam" "^1.3.2" + fecha "^4.2.0" + ms "^2.1.1" + safe-stable-stringify "^2.3.1" + triple-beam "^1.3.0" + +loose-envify@^1.1.0, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lottie-react@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/lottie-react/-/lottie-react-2.4.0.tgz#f7249eee2b1deee70457a2d142194fdf2456e4bd" + integrity sha512-pDJGj+AQlnlyHvOHFK7vLdsDcvbuqvwPZdMlJ360wrzGFurXeKPr8SiRCjLf3LrNYKANQtSsh5dz9UYQHuqx4w== + dependencies: + lottie-web "^5.10.2" + +lottie-web@^5.10.2: + version "5.12.2" + resolved "https://registry.yarnpkg.com/lottie-web/-/lottie-web-5.12.2.tgz#579ca9fe6d3fd9e352571edd3c0be162492f68e5" + integrity sha512-uvhvYPC8kGPjXT3MyKMrL3JitEAmDMp30lVkuq/590Mw9ok6pWcFCwXJveo0t5uqYw1UREQHofD+jVpdjBv8wg== + +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lru-cache@^10.2.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" + integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +magic-string@^0.30.5: + version "0.30.10" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.10.tgz#123d9c41a0cb5640c892b041d4cfb3bd0aa4b39e" + integrity sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.15" + +magnet-uri@^7.0.5: + version "7.0.5" + resolved "https://registry.yarnpkg.com/magnet-uri/-/magnet-uri-7.0.5.tgz#7b5143fd5527f3f612959eeeae264d6f4aeff37b" + integrity sha512-Ke+dDiYHK1Rq/ZyGUAgk7NIkoypivxolTj/A0qr60ypP0FjeP+NTUNEhr965HsRan0zGxKEBK73+SsjRyJWkXg== + dependencies: + "@thaunknown/thirty-two" "^1.0.3" + bep53-range "^2.0.0" + uint8-util "^2.1.9" + +matcher@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/matcher/-/matcher-3.0.0.tgz#bd9060f4c5b70aa8041ccc6f80368760994f30ca" + integrity sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng== + dependencies: + escape-string-regexp "^4.0.0" + +media-query-parser@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/media-query-parser/-/media-query-parser-2.0.2.tgz#ff79e56cee92615a304a1c2fa4f2bd056c0a1d29" + integrity sha512-1N4qp+jE0pL5Xv4uEcwVUhIkwdUO3S/9gML90nqKA7v7FcOS5vUtatfzok9S9U1EJU8dHWlcv95WLnKmmxZI9w== + dependencies: + "@babel/runtime" "^7.12.5" + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@^2.5.2: + version "2.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" + integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== + +mimic-response@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +minimatch@9.0.3: + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1, minimatch@^5.1.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^9.0.1: + version "9.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" + integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +minipass@^3.0.0: + version "3.3.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== + dependencies: + yallist "^4.0.0" + +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4: + version "7.0.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" + integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== + +minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mixme@^0.5.1: + version "0.5.10" + resolved "https://registry.yarnpkg.com/mixme/-/mixme-0.5.10.tgz#d653b2984b75d9018828f1ea333e51717ead5f51" + integrity sha512-5H76ANWinB1H3twpJ6JY8uvAtpmFvHNArpilJAjXRKXSDDLPIMoZArw5SH0q9z+lLs8IrMw7Q2VWpWimFKFT1Q== + +mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== + +mkdirp@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mkdirp@^2.1.3: + version "2.1.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-2.1.6.tgz#964fbcb12b2d8c5d6fbc62a963ac95a273e2cc19" + integrity sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A== + +mlly@^1.4.2, mlly@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.6.1.tgz#0983067dc3366d6314fc5e12712884e6978d028f" + integrity sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA== + dependencies: + acorn "^8.11.3" + pathe "^1.1.2" + pkg-types "^1.0.3" + ufo "^1.3.2" + +modern-ahocorasick@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/modern-ahocorasick/-/modern-ahocorasick-1.0.1.tgz#dec373444f51b5458ac05216a8ec376e126dd283" + integrity sha512-yoe+JbhTClckZ67b2itRtistFKf8yPYelHLc7e5xAwtNAXxM6wJTUx2C7QeVSJFDzKT7bCIFyBVybPMKvmB9AA== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +mz@^2.4.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +nanoid@^3.3.7: + version "3.3.7" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" + integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== + +napi-build-utils@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" + integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + +node-abi@^3.3.0: + version "3.60.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.60.0.tgz#a325b13b3c401c2230202897559fbf0b5f9a90ac" + integrity sha512-zcGgwoXbzw9NczqbGzAWL/ToDYAxv1V8gL1D67ClbdkIfeeDBbY0GelZtC25ayLvVjr2q2cloHeQV1R0QAWqRQ== + dependencies: + semver "^7.3.5" + +node-addon-api@^1.6.3: + version "1.7.2" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-1.7.2.tgz#3df30b95720b53c24e59948b49532b662444f54d" + integrity sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg== + +node-domexception@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" + integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== + +node-fetch@^3.3.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" + integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== + dependencies: + data-uri-to-buffer "^4.0.0" + fetch-blob "^3.1.4" + formdata-polyfill "^4.0.10" + +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== + +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +nwsapi@^2.2.7: + version "2.2.8" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.8.tgz#a3552e65b74bf8cc89d0480c4132b61dbe54eccf" + integrity sha512-GU/I3lTEFQ9mkEm07Q7HvdRajss8E1wVMGOk3/lHl60QPseG+B3BIQY+JUjYWw7gF8cCeoQCXd4N7DB7avw0Rg== + +object-assign@^4.0.1, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.13.1: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.4, object.assign@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.entries@^1.1.7: + version "1.1.8" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" + integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +object.fromentries@^2.0.7: + version "2.0.8" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" + integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + +object.hasown@^1.1.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.4.tgz#e270ae377e4c120cdcb7656ce66884a6218283dc" + integrity sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg== + dependencies: + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + +object.values@^1.1.6, object.values@^1.1.7: + version "1.2.0" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" + integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +one-time@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45" + integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g== + dependencies: + fn.name "1.x.x" + +optionator@^0.9.3: + version "0.9.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" + integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== + dependencies: + "@aashutoshrathi/word-wrap" "^1.2.3" + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + +outdent@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/outdent/-/outdent-0.8.0.tgz#2ebc3e77bf49912543f1008100ff8e7f44428eb0" + integrity sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A== + +p-cancelable@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" + integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse-torrent@^11.0.16: + version "11.0.16" + resolved "https://registry.yarnpkg.com/parse-torrent/-/parse-torrent-11.0.16.tgz#839abce12c3c376f08516b8608a551154963b99c" + integrity sha512-5GoOdmW0HpiB78aQpBz8/5V3V1LjBRDNiL7DOs33pKeCLOzFnfMrsRD6CYmaUBT5Vi/dXE0hfePsjDGJSMF48w== + dependencies: + bencode "^4.0.0" + cross-fetch-ponyfill "^1.0.3" + get-stdin "^9.0.0" + magnet-uri "^7.0.5" + queue-microtask "^1.2.3" + uint8-util "^2.2.4" + +parse5-htmlparser2-tree-adapter@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" + integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== + dependencies: + parse5 "^6.0.1" + +parse5@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== + +parse5@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +parse5@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" + integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== + dependencies: + entities "^4.4.0" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-scurry@^1.10.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.2.tgz#8f6357eb1239d5fa1da8b9f70e9c080675458ba7" + integrity sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA== + dependencies: + lru-cache "^10.2.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pathe@^1.1.1, pathe@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" + integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== + +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pkg-types@^1.0.3: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.1.0.tgz#3ec1bf33379030fd0a34c227b6c650e8ea7ca271" + integrity sha512-/RpmvKdxKf8uILTtoOhAgf30wYbP2Qw+L9p3Rvshx1JZVX+XQNZQFjlbmGHEGIm4CkVPlSn+NXmIM8+9oWQaSA== + dependencies: + confbox "^0.1.7" + mlly "^1.6.1" + pathe "^1.1.2" + +plist@^3.0.4, plist@^3.0.5: + version "3.1.0" + resolved "https://registry.yarnpkg.com/plist/-/plist-3.1.0.tgz#797a516a93e62f5bde55e0b9cc9c967f860893c9" + integrity sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ== + dependencies: + "@xmldom/xmldom" "^0.8.8" + base64-js "^1.5.1" + xmlbuilder "^15.1.1" + +possible-typed-array-names@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" + integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== + +postcss@^8.4.38: + version "8.4.38" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e" + integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== + dependencies: + nanoid "^3.3.7" + picocolors "^1.0.0" + source-map-js "^1.2.0" + +prebuild-install@^7.1.1: + version "7.1.2" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.2.tgz#a5fd9986f5a6251fbc47e1e5c65de71e68c0a056" + integrity sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ== + dependencies: + detect-libc "^2.0.0" + expand-template "^2.0.3" + github-from-package "0.0.0" + minimist "^1.2.3" + mkdirp-classic "^0.5.3" + napi-build-utils "^1.0.1" + node-abi "^3.3.0" + pump "^3.0.0" + rc "^1.2.7" + simple-get "^4.0.0" + tar-fs "^2.0.0" + tunnel-agent "^0.6.0" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier@^3.2.4: + version "3.2.5" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" + integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== + +progress@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + +prop-types@^15.8.1: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +ps-list@^8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/ps-list/-/ps-list-8.1.1.tgz#9ff1952b26a9a07fcc05270407e60544237ae581" + integrity sha512-OPS9kEJYVmiO48u/B9qneqhkMvgCxT+Tm28VCEJpheTpl8cJ0ffZRRNgS5mrQRTrX5yRTpaJ+hRDeefXYmmorQ== + +psl@^1.1.33: + version "1.9.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + +queue-microtask@^1.2.2, queue-microtask@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +react-dom@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" + integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== + dependencies: + loose-envify "^1.1.0" + scheduler "^0.23.0" + +react-i18next@^14.1.0: + version "14.1.0" + resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-14.1.0.tgz#44da74fbffd416f5d0c5307ef31735cf10cc91d9" + integrity sha512-3KwX6LHpbvGQ+sBEntjV4sYW3Zovjjl3fpoHbUwSgFHf0uRBcbeCBLR5al6ikncI5+W0EFb71QXZmfop+J6NrQ== + dependencies: + "@babel/runtime" "^7.23.9" + html-parse-stringify "^3.0.1" + +react-is@^16.13.1, react-is@^16.7.0: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-loading-skeleton@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/react-loading-skeleton/-/react-loading-skeleton-3.4.0.tgz#c71a3a17259d08e4064974aa0b07f150a09dfd57" + integrity sha512-1oJEBc9+wn7BbkQQk7YodlYEIjgeR+GrRjD+QXkVjwZN7LGIcAFHrx4NhT7UHGBxNY1+zax3c+Fo6XQM4R7CgA== + +react-redux@^9.1.1: + version "9.1.1" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-9.1.1.tgz#852ec13084bd7375e26db697d2fc9027ffada204" + integrity sha512-5ynfGDzxxsoV73+4czQM56qF43vsmgJsO22rmAvU5tZT2z5Xow/A2uhhxwXuGTxgdReF3zcp7A80gma2onRs1A== + dependencies: + "@types/use-sync-external-store" "^0.0.3" + use-sync-external-store "^1.0.0" + +react-refresh@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.0.tgz#4e02825378a5f227079554d4284889354e5f553e" + integrity sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ== + +react-router-dom@^6.22.3: + version "6.22.3" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.22.3.tgz#9781415667fd1361a475146c5826d9f16752a691" + integrity sha512-7ZILI7HjcE+p31oQvwbokjk6OA/bnFxrhJ19n82Ex9Ph8fNAq+Hm/7KchpMGlTgWhUxRHMMCut+vEtNpWpowKw== + dependencies: + "@remix-run/router" "1.15.3" + react-router "6.22.3" + +react-router@6.22.3: + version "6.22.3" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.22.3.tgz#9d9142f35e08be08c736a2082db5f0c9540a885e" + integrity sha512-dr2eb3Mj5zK2YISHK++foM9w4eBnO23eKnZEDs7c880P6oKbrjz/Svg9+nxqtHQK+oMW4OtjZca0RqPglXxguQ== + dependencies: + "@remix-run/router" "1.15.3" + +react@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== + dependencies: + loose-envify "^1.1.0" + +read-config-file@6.3.2: + version "6.3.2" + resolved "https://registry.yarnpkg.com/read-config-file/-/read-config-file-6.3.2.tgz#556891aa6ffabced916ed57457cb192e61880411" + integrity sha512-M80lpCjnE6Wt6zb98DoW8WHR09nzMSpu8XHtPkiTHrJ5Az9CybfeQhTJ8D7saeBHpGhLPIVyA8lcL6ZmdKwY6Q== + dependencies: + config-file-ts "^0.2.4" + dotenv "^9.0.2" + dotenv-expand "^5.1.0" + js-yaml "^4.1.0" + json5 "^2.2.0" + lazy-val "^1.0.4" + +readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +redux-thunk@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-3.1.0.tgz#94aa6e04977c30e14e892eae84978c1af6058ff3" + integrity sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw== + +redux@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/redux/-/redux-5.0.1.tgz#97fa26881ce5746500125585d5642c77b6e9447b" + integrity sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w== + +reflect-metadata@^0.2.1: + version "0.2.2" + resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.2.2.tgz#400c845b6cba87a21f2c65c4aeb158f4fa4d9c5b" + integrity sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q== + +reflect.getprototypeof@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz#3ab04c32a8390b770712b7a8633972702d278859" + integrity sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.1" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + globalthis "^1.0.3" + which-builtin-type "^1.1.3" + +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + +regexp.prototype.flags@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" + integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== + dependencies: + call-bind "^1.0.6" + define-properties "^1.2.1" + es-errors "^1.3.0" + set-function-name "^2.0.1" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +"require-like@>= 0.1.1": + version "0.1.2" + resolved "https://registry.yarnpkg.com/require-like/-/require-like-0.1.2.tgz#ad6f30c13becd797010c468afa775c0c0a6b47fa" + integrity sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + +reselect@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-5.1.0.tgz#c479139ab9dd91be4d9c764a7f3868210ef8cd21" + integrity sha512-aw7jcGLDpSgNDyWBQLv2cedml85qd95/iszJjN988zX1t7AVRJi19d9kto5+W7oCfQ94gyo40dVbT6g2k4/kXg== + +resolve-alpn@^1.0.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" + integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve@^2.0.0-next.5: + version "2.0.0-next.5" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" + integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +responselike@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" + integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== + dependencies: + lowercase-keys "^2.0.0" + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +roarr@^2.15.3: + version "2.15.4" + resolved "https://registry.yarnpkg.com/roarr/-/roarr-2.15.4.tgz#f5fe795b7b838ccfe35dc608e0282b9eba2e7afd" + integrity sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A== + dependencies: + boolean "^3.0.1" + detect-node "^2.0.4" + globalthis "^1.0.1" + json-stringify-safe "^5.0.1" + semver-compare "^1.0.0" + sprintf-js "^1.1.2" + +rollup@^4.13.0: + version "4.16.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.16.0.tgz#6234ae756ff14bce900c1c926175d14cc3e1f5f4" + integrity sha512-joxy/Hd4Ee289394//Q1aoebcxXyHasDieCTk8YtP4G4al4TUlx85EnuCLrfrdtLzrna9kNjH++Sx063wxSgmA== + dependencies: + "@types/estree" "1.0.5" + optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.16.0" + "@rollup/rollup-android-arm64" "4.16.0" + "@rollup/rollup-darwin-arm64" "4.16.0" + "@rollup/rollup-darwin-x64" "4.16.0" + "@rollup/rollup-linux-arm-gnueabihf" "4.16.0" + "@rollup/rollup-linux-arm-musleabihf" "4.16.0" + "@rollup/rollup-linux-arm64-gnu" "4.16.0" + "@rollup/rollup-linux-arm64-musl" "4.16.0" + "@rollup/rollup-linux-powerpc64le-gnu" "4.16.0" + "@rollup/rollup-linux-riscv64-gnu" "4.16.0" + "@rollup/rollup-linux-s390x-gnu" "4.16.0" + "@rollup/rollup-linux-x64-gnu" "4.16.0" + "@rollup/rollup-linux-x64-musl" "4.16.0" + "@rollup/rollup-win32-arm64-msvc" "4.16.0" + "@rollup/rollup-win32-ia32-msvc" "4.16.0" + "@rollup/rollup-win32-x64-msvc" "4.16.0" + fsevents "~2.3.2" + +rrweb-cssom@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz#ed298055b97cbddcdeb278f904857629dec5e0e1" + integrity sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw== + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-array-concat@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" + integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== + dependencies: + call-bind "^1.0.7" + get-intrinsic "^1.2.4" + has-symbols "^1.0.3" + isarray "^2.0.5" + +safe-buffer@^5.0.1, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-regex-test@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" + integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-regex "^1.1.4" + +safe-stable-stringify@^2.3.1: + version "2.4.3" + resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" + integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== + +"safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sanitize-filename@^1.6.3: + version "1.6.3" + resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.3.tgz#755ebd752045931977e30b2025d340d7c9090378" + integrity sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg== + dependencies: + truncate-utf8-bytes "^1.0.0" + +sax@^1.2.4: + version "1.3.0" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.3.0.tgz#a5dbe77db3be05c9d1ee7785dbd3ea9de51593d0" + integrity sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA== + +saxes@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" + integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA== + dependencies: + xmlchars "^2.2.0" + +scheduler@^0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" + integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== + dependencies: + loose-envify "^1.1.0" + +sec@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/sec/-/sec-2.0.0.tgz#4f5b82e7d1da27da6c7a40799e63caef21ce374f" + integrity sha512-uq35HWa7mG6YyojrduMXjF8UhOySEf3X0V1uMpSOBYUF09xAMnJaKNSmWXeE3mN7NfJTpNUkmGa6nIpEBMN8Xw== + +semver-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" + integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow== + +semver@^6.2.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.3.2, semver@^7.3.5, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== + dependencies: + lru-cache "^6.0.0" + +serialize-error@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-7.0.1.tgz#f1360b0447f61ffb483ec4157c737fab7d778e18" + integrity sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw== + dependencies: + type-fest "^0.13.1" + +set-function-length@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + +set-function-name@^2.0.1, set-function-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.2" + +sha.js@^2.4.11: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel@^1.0.4, side-channel@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" + +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" + integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== + dependencies: + decompress-response "^6.0.0" + once "^1.3.1" + simple-concat "^1.0.0" + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== + dependencies: + is-arrayish "^0.3.1" + +simple-update-notifier@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz#d70b92bdab7d6d90dfd73931195a30b6e3d7cebb" + integrity sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w== + dependencies: + semver "^7.5.3" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" + integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +smart-buffer@^4.0.2: + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +snake-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" + integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + +source-map-js@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" + integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== + +source-map-support@^0.5.19: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +sprintf-js@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" + integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== + +stack-trace@0.0.x: + version "0.0.10" + resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" + integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== + +stat-mode@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-1.0.0.tgz#68b55cb61ea639ff57136f36b216a291800d1465" + integrity sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg== + +stream-transform@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/stream-transform/-/stream-transform-2.1.3.tgz#a1c3ecd72ddbf500aa8d342b0b9df38f5aa598e3" + integrity sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ== + dependencies: + mixme "^0.5.1" + +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string.prototype.matchall@^4.0.10: + version "4.0.11" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz#1092a72c59268d2abaad76582dccc687c0297e0a" + integrity sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.7" + regexp.prototype.flags "^1.5.2" + set-function-name "^2.0.2" + side-channel "^1.0.6" + +string.prototype.trim@^1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" + integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.0" + es-object-atoms "^1.0.0" + +string.prototype.trimend@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229" + integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string.prototype.trimstart@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + +sumchecker@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-3.0.1.tgz#6377e996795abb0b6d348e9b3e1dfb24345a8e42" + integrity sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg== + dependencies: + debug "^4.1.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +svg-parser@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" + integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== + +symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + +synckit@^0.8.6: + version "0.8.8" + resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.8.tgz#fe7fe446518e3d3d49f5e429f443cf08b6edfcd7" + integrity sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ== + dependencies: + "@pkgr/core" "^0.1.0" + tslib "^2.6.2" + +tar-fs@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" + integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== + dependencies: + chownr "^1.1.1" + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^2.1.4" + +tar-stream@^2.1.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + +tar@^6.1.12: + version "6.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" + integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^5.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +tasklist@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/tasklist/-/tasklist-5.0.0.tgz#0214f8a28c0fa9e042333154e3e3faa45c640404" + integrity sha512-qPB4J6pseXRqdxAFT1GhlvDPv4FHxWkXs8QVYQWIqusGwn7UXVKOoYu09DZuYWe1K7T5iusHfSoKrv8k9+RfxA== + dependencies: + csv "^5.5.0" + sec "^2.0.0" + +temp-file@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/temp-file/-/temp-file-3.4.0.tgz#766ea28911c683996c248ef1a20eea04d51652c7" + integrity sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg== + dependencies: + async-exit-hook "^2.0.1" + fs-extra "^10.0.0" + +text-hex@1.0.x: + version "1.0.0" + resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" + integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + +tmp-promise@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/tmp-promise/-/tmp-promise-3.0.3.tgz#60a1a1cc98c988674fcbfd23b6e3367bdeac4ce7" + integrity sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ== + dependencies: + tmp "^0.2.0" + +tmp@^0.2.0: + version "0.2.3" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" + integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +tough-cookie@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" + integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== + dependencies: + psl "^1.1.33" + punycode "^2.1.1" + universalify "^0.2.0" + url-parse "^1.5.3" + +tr46@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-5.0.0.tgz#3b46d583613ec7283020d79019f1335723801cec" + integrity sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g== + dependencies: + punycode "^2.3.1" + +triple-beam@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.4.1.tgz#6fde70271dc6e5d73ca0c3b24e2d92afb7441984" + integrity sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg== + +truncate-utf8-bytes@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b" + integrity sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ== + dependencies: + utf8-byte-length "^1.0.1" + +ts-api-utils@^1.0.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" + integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== + +tslib@^2.0.3, tslib@^2.5.0, tslib@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" + integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +typed-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" + integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-typed-array "^1.1.13" + +typed-array-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" + integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + +typed-array-byte-offset@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" + integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + +typed-array-length@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3" + integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" + +typeorm@^0.3.20: + version "0.3.20" + resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.3.20.tgz#4b61d737c6fed4e9f63006f88d58a5e54816b7ab" + integrity sha512-sJ0T08dV5eoZroaq9uPKBoNcGslHBR4E4y+EBHs//SiGbblGe7IeduP/IH4ddCcj0qp3PHwDwGnuvqEAnKlq/Q== + dependencies: + "@sqltools/formatter" "^1.2.5" + app-root-path "^3.1.0" + buffer "^6.0.3" + chalk "^4.1.2" + cli-highlight "^2.1.11" + dayjs "^1.11.9" + debug "^4.3.4" + dotenv "^16.0.3" + glob "^10.3.10" + mkdirp "^2.1.3" + reflect-metadata "^0.2.1" + sha.js "^2.4.11" + tslib "^2.5.0" + uuid "^9.0.0" + yargs "^17.6.2" + +typescript@^5.3.3: + version "5.4.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" + integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== + +ufo@^1.3.2: + version "1.5.3" + resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.5.3.tgz#3325bd3c977b6c6cd3160bf4ff52989adc9d3344" + integrity sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw== + +uint8-util@^2.1.9, uint8-util@^2.2.2, uint8-util@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/uint8-util/-/uint8-util-2.2.4.tgz#4df57c7b25b821d02b1599e80f0f1f5f56bc90e1" + integrity sha512-uEI5lLozmKQPYEevfEhP9LY3Je5ZmrQhaWXrzTVqrLNQl36xsRh8NiAxYwB9J+2BAt99TRbmCkROQB2ZKhx4UA== + dependencies: + base64-arraybuffer "^1.0.2" + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" + integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== + +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + +update-browserslist-db@^1.0.13: + version "1.0.13" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" + integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +url-parse@^1.5.3: + version "1.5.10" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +use-sync-external-store@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" + integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== + +utf8-byte-length@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61" + integrity sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA== + +util-deprecate@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +uuid@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" + integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== + +verror@^1.10.0: + version "1.10.1" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.1.tgz#4bf09eeccf4563b109ed4b3d458380c972b0cdeb" + integrity sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg== + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vite-node@^1.2.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-1.5.0.tgz#7f74dadfecb15bca016c5ce5ef85e5cc4b82abf2" + integrity sha512-tV8h6gMj6vPzVCa7l+VGq9lwoJjW8Y79vst8QZZGiuRAfijU+EEWuc0kFpmndQrWhMMhet1jdSF+40KSZUqIIw== + dependencies: + cac "^6.7.14" + debug "^4.3.4" + pathe "^1.1.1" + picocolors "^1.0.0" + vite "^5.0.0" + +vite-plugin-svgr@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/vite-plugin-svgr/-/vite-plugin-svgr-4.2.0.tgz#9f3bf5206b0ec510287e56d16f1915e729bb4e6b" + integrity sha512-SC7+FfVtNQk7So0XMjrrtLAbEC8qjFPifyD7+fs/E6aaNdVde6umlVVh0QuwDLdOMu7vp5RiGFsB70nj5yo0XA== + dependencies: + "@rollup/pluginutils" "^5.0.5" + "@svgr/core" "^8.1.0" + "@svgr/plugin-jsx" "^8.1.0" + +vite@^5.0.0, vite@^5.0.11, vite@^5.0.12: + version "5.2.10" + resolved "https://registry.yarnpkg.com/vite/-/vite-5.2.10.tgz#2ac927c91e99d51b376a5c73c0e4b059705f5bd7" + integrity sha512-PAzgUZbP7msvQvqdSD+ErD5qGnSFiGOoWmV5yAKUEI0kdhjbH6nMWVyZQC/hSc4aXwc0oJ9aEdIiF9Oje0JFCw== + dependencies: + esbuild "^0.20.1" + postcss "^8.4.38" + rollup "^4.13.0" + optionalDependencies: + fsevents "~2.3.3" + +void-elements@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" + integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== + +w3c-xmlserializer@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz#f925ba26855158594d907313cedd1476c5967f6c" + integrity sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA== + dependencies: + xml-name-validator "^5.0.0" + +web-streams-polyfill@^3.0.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b" + integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw== + +webidl-conversions@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" + integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== + +whatwg-encoding@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz#d0f4ef769905d426e1688f3e34381a99b60b76e5" + integrity sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ== + dependencies: + iconv-lite "0.6.3" + +whatwg-mimetype@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz#bc1bf94a985dc50388d54a9258ac405c3ca2fc0a" + integrity sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg== + +whatwg-url@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-14.0.0.tgz#00baaa7fd198744910c4b1ef68378f2200e4ceb6" + integrity sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw== + dependencies: + tr46 "^5.0.0" + webidl-conversions "^7.0.0" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-builtin-type@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.3.tgz#b1b8443707cc58b6e9bf98d32110ff0c2cbd029b" + integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw== + dependencies: + function.prototype.name "^1.1.5" + has-tostringtag "^1.0.0" + is-async-function "^2.0.0" + is-date-object "^1.0.5" + is-finalizationregistry "^1.0.2" + is-generator-function "^1.0.10" + is-regex "^1.1.4" + is-weakref "^1.0.2" + isarray "^2.0.5" + which-boxed-primitive "^1.0.2" + which-collection "^1.0.1" + which-typed-array "^1.1.9" + +which-collection@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" + integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== + dependencies: + is-map "^2.0.3" + is-set "^2.0.3" + is-weakmap "^2.0.2" + is-weakset "^2.0.3" + +which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.9: + version "1.1.15" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" + integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.2" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +winston-transport@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.7.0.tgz#e302e6889e6ccb7f383b926df6936a5b781bd1f0" + integrity sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg== + dependencies: + logform "^2.3.2" + readable-stream "^3.6.0" + triple-beam "^1.3.0" + +winston@^3.13.0: + version "3.13.0" + resolved "https://registry.yarnpkg.com/winston/-/winston-3.13.0.tgz#e76c0d722f78e04838158c61adc1287201de7ce3" + integrity sha512-rwidmA1w3SE4j0E5MuIufFhyJPBDG7Nu71RkZor1p2+qHvJSZ9GYDA81AyleQcZbh/+V6HjeBdfnTZJm9rSeQQ== + dependencies: + "@colors/colors" "^1.6.0" + "@dabh/diagnostics" "^2.0.2" + async "^3.2.3" + is-stream "^2.0.0" + logform "^2.4.0" + one-time "^1.0.0" + readable-stream "^3.4.0" + safe-stable-stringify "^2.3.1" + stack-trace "0.0.x" + triple-beam "^1.3.0" + winston-transport "^4.7.0" + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +ws@^8.16.0: + version "8.16.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.16.0.tgz#d1cd774f36fbc07165066a60e40323eab6446fd4" + integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== + +xml-name-validator@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-5.0.0.tgz#82be9b957f7afdacf961e5980f1bf227c0bf7673" + integrity sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg== + +xmlbuilder@>=11.0.1, xmlbuilder@^15.1.1: + version "15.1.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-15.1.1.tgz#9dcdce49eea66d8d10b42cae94a79c3c8d0c2ec5" + integrity sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg== + +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.4.1.tgz#2e57e0b5e995292c25c75d2658f0664765210eed" + integrity sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg== + +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^16.0.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yargs@^17.6.2: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + +yauzl@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==