From 6e1ebbbfd7e834a7e191e1e55214ef3ac94195ee Mon Sep 17 00:00:00 2001 From: "Wei S." <5291640+wayneshn@users.noreply.github.com> Date: Fri, 24 Oct 2025 17:11:05 +0200 Subject: [PATCH] v0.4 init: File encryption, integrity report, deletion protection, job monitoring (#187) * open-core setup, adding enterprise package * enterprise: Audit log API, UI * Audit-log docs * feat: Integrity report, allowing users to verify the integrity of archived emails and their attachments. - When an email is archived, Open Archiver calculates a unique cryptographic signature (a SHA256 hash) for the email's raw `.eml` file and for each of its attachments. These signatures are stored in the database alongside the email's metadata. - The integrity check feature recalculates these signatures for the stored files and compares them to the original signatures stored in the database. This process allows you to verify that the content of your archived emails has not been altered, corrupted, or tampered with since the moment they were archived. - Add docs of Integrity report * Update Docker-compose.yml to use bind mount for Open Archiver data. Fix API rate-limiter warning about trust proxy * File encryption support * Scope attachment deduplication to ingestion source Previously, attachment deduplication was handled globally by enforcing a unique constraint on the content hash (contentHashSha256) in the `attachments` table. This caused an issue where an attachment from one ingestion source would be incorrectly linked if the same attachment was processed by a different source. This commit refactors the deduplication logic to be scoped on a per-ingestion-source basis. Changes: - **Schema:** The `attachments` table schema has been updated to include a nullable `ingestionSourceId` column. A composite unique index has been added on `(ingestionSourceId, contentHashSha256)` to enforce per-source uniqueness. The `ingestionSourceId` is nullable to ensure backward compatibility with existing databases. - **Ingestion Logic:** The `IngestionService` has been updated to provide the `ingestionSourceId` when inserting attachment records. The `onConflictDoUpdate` clause now targets the new composite key, ensuring that attachments are only considered duplicates if they have the same hash and originate from the same ingestion source. * Scope attachment deduplication to ingestion source Previously, attachment deduplication was handled globally by enforcing a unique constraint on the content hash (contentHashSha256) in the `attachments` table. This caused an issue where an attachment from one ingestion source would be incorrectly linked if the same attachment was processed by a different source. This commit refactors the deduplication logic to be scoped on a per-ingestion-source basis. Changes: - **Schema:** The `attachments` table schema has been updated to include a nullable `ingestionSourceId` column. A composite unique index has been added on `(ingestionSourceId, contentHashSha256)` to enforce per-source uniqueness. The `ingestionSourceId` is nullable to ensure backward compatibility with existing databases. - **Ingestion Logic:** The `IngestionService` has been updated to provide the `ingestionSourceId` when inserting attachment records. The `onConflictDoUpdate` clause now targets the new composite key, ensuring that attachments are only considered duplicates if they have the same hash and originate from the same ingestion source. * Add option to disable deletions This commit introduces a new feature that allows admins to disable the deletion of emails and ingestion sources for the entire instance. This is a critical feature for compliance and data retention, as it prevents accidental or unauthorized deletions. Changes: - **Configuration**: Added an `ENABLE_DELETION` environment variable. If this variable is not set to `true`, all deletion operations will be disabled. - **Deletion Guard**: A centralized `checkDeletionEnabled` guard has been implemented to enforce this setting at both the controller and service levels, ensuring a robust and secure implementation. - **Documentation**: The installation guide has been updated to include the new `ENABLE_DELETION` environment variable and its behavior. - **Refactor**: The `IngestionService`'s `create` method was refactored to remove unnecessary calls to the `delete` method, simplifying the code and improving its robustness. * Adding position for menu items * feat(docker): Fix CORS errors This commit fixes CORS errors when running the app in Docker by introducing the `APP_URL` environment variable. A CORS policy is set up for the backend to only allow origin from the `APP_URL`. Key changes include: - New `APP_URL` and `ORIGIN` environment variables have been added to properly configure CORS and the SvelteKit adapter, making the application's public URL easily configurable. - Dockerfiles are updated to copy the entrypoint script, Drizzle config, and migration files into the final image. - Documentation and example files (`.env.example`, `docker-compose.yml`) have been updated to reflect these changes. * feat(attachments): De-duplicate attachment content by content hash This commit refactors attachment handling to allow multiple emails within the same ingestion source to reference attachments with identical content (same hash). Changes: - The unique index on the `attachments` table has been changed to a non-unique index to permit duplicate hash/source pairs. - The ingestion logic is updated to first check for an existing attachment with the same hash and source. If found, it reuses the existing record; otherwise, it creates a new one. This maintains storage de-duplication. - The email deletion logic is improved to be more robust. It now correctly removes the email-attachment link before checking if the attachment record and its corresponding file can be safely deleted. * Not filtering our Trash folder * feat(backend): Add BullMQ dashboard for job monitoring This commit introduces a web-based UI for monitoring and managing background jobs using Bullmq. Key changes: - A new `/api/v1/jobs` endpoint is created, serving the Bull Board dashboard. Access is restricted to authenticated administrators. - All BullMQ queue definitions (`ingestion`, `indexing`, `sync-scheduler`) have been centralized into a new `packages/backend/src/jobs/queues.ts` file. - Workers and services now import queue instances from this central file, improving code organization and removing redundant queue instantiations. * Add `ALL_INCLUSIVE_ARCHIVE` environment variable to disable jun filtering * Using BSL license * frontend: Responsive design for menu bar, pagination * License service/module * Remove demoMode logic * Formatting code * Remove enterprise packages * Fix package.json in packages * Search page responsive fix --------- Co-authored-by: Wayne <5291640+ringoinca@users.noreply.github.com> --- .env.example | 23 +- .github/ISSUE_TEMPLATE/bug_report.md | 7 +- .github/ISSUE_TEMPLATE/feature_request.md | 3 +- .github/workflows/docker-deployment.yml | 2 +- .gitignore | 4 + LICENSE | 140 +- {docker => apps/open-archiver}/Dockerfile | 17 +- apps/open-archiver/index.ts | 24 + apps/open-archiver/package.json | 18 + apps/open-archiver/tsconfig.json | 8 + assets/screenshots/integrity-report.png | Bin 0 -> 311017 bytes docker-compose.yml | 4 +- docs/.vitepress/config.mts | 3 + docs/api/integrity.md | 51 + docs/api/jobs.md | 128 + docs/enterprise/audit-log/api.md | 78 + docs/enterprise/audit-log/audit-service.md | 31 + docs/enterprise/audit-log/guide.md | 39 + docs/enterprise/audit-log/index.md | 27 + docs/user-guides/installation.md | 100 +- docs/user-guides/integrity-check.md | 37 + .../troubleshooting/cors-errors.md | 75 + package.json | 18 +- packages/backend/package.json | 11 +- .../src/api/controllers/api-key.controller.ts | 28 +- .../controllers/archived-email.controller.ts | 29 +- .../src/api/controllers/auth.controller.ts | 4 +- .../src/api/controllers/iam.controller.ts | 10 - .../api/controllers/ingestion.controller.ts | 86 +- .../api/controllers/integrity.controller.ts | 29 + .../src/api/controllers/jobs.controller.ts | 42 + .../src/api/controllers/search.controller.ts | 3 +- .../api/controllers/settings.controller.ts | 17 +- .../src/api/controllers/user.controller.ts | 41 +- .../backend/src/api/middleware/rateLimiter.ts | 7 +- .../backend/src/api/routes/api-key.routes.ts | 2 +- .../src/api/routes/integrity.routes.ts | 16 + .../backend/src/api/routes/jobs.routes.ts | 25 + packages/backend/src/api/server.ts | 170 ++ packages/backend/src/config/api.ts | 1 + packages/backend/src/config/app.ts | 3 +- packages/backend/src/config/storage.ts | 7 + packages/backend/src/database/index.ts | 3 +- .../database/migrations/0021_nosy_veda.sql | 9 + .../migrations/0022_complete_triton.sql | 4 + .../migrations/0023_swift_swordsman.sql | 2 + .../migrations/meta/0020_snapshot.json | 2421 ++++++++--------- .../migrations/meta/0021_snapshot.json | 1225 +++++++++ .../migrations/meta/0022_snapshot.json | 1257 +++++++++ .../migrations/meta/0023_snapshot.json | 1257 +++++++++ .../database/migrations/meta/_journal.json | 325 +-- packages/backend/src/database/schema.ts | 2 + .../src/database/schema/attachments.ts | 26 +- .../backend/src/database/schema/audit-logs.ts | 30 +- packages/backend/src/database/schema/enums.ts | 5 + packages/backend/src/helpers/deletionGuard.ts | 9 + packages/backend/src/helpers/textExtractor.ts | 17 +- packages/backend/src/index.ts | 165 +- .../processors/index-email-batch.processor.ts | 6 +- .../processors/process-mailbox.processor.ts | 6 +- .../backend/src/locales/de/translation.json | 3 +- .../backend/src/locales/en/translation.json | 3 +- .../backend/src/services/ApiKeyService.ts | 32 +- .../src/services/ArchivedEmailService.ts | 77 +- packages/backend/src/services/AuditService.ts | 199 ++ packages/backend/src/services/AuthService.ts | 41 +- .../backend/src/services/IndexingService.ts | 17 +- .../backend/src/services/IngestionService.ts | 204 +- .../backend/src/services/IntegrityService.ts | 93 + packages/backend/src/services/JobsService.ts | 101 + packages/backend/src/services/OcrService.ts | 451 +-- .../backend/src/services/SearchService.ts | 34 +- .../backend/src/services/SettingsService.ts | 30 +- .../backend/src/services/StorageService.ts | 62 +- packages/backend/src/services/UserService.ts | 62 +- .../ingestion-connectors/ImapConnector.ts | 19 +- .../ingestion-connectors/MboxConnector.ts | 286 +- .../ingestion-connectors/PSTConnector.ts | 4 +- .../backend/src/workers/indexing.worker.ts | 5 +- packages/backend/tsconfig.json | 10 +- packages/backend/tsconfig.tsbuildinfo | 1 - packages/frontend/package.json | 6 +- packages/frontend/src/app.d.ts | 1 + packages/frontend/src/hooks.server.ts | 5 + .../custom/IngestionSourceForm.svelte | 5 +- .../src/lib/components/ui/pagination/index.ts | 25 + .../ui/pagination/pagination-content.svelte | 20 + .../ui/pagination/pagination-ellipsis.svelte | 22 + .../ui/pagination/pagination-item.svelte | 14 + .../ui/pagination/pagination-link.svelte | 39 + .../pagination/pagination-next-button.svelte | 33 + .../pagination/pagination-prev-button.svelte | 33 + .../ui/pagination/pagination.svelte | 28 + .../src/lib/components/ui/progress/index.ts | 7 + .../components/ui/progress/progress.svelte | 27 + .../frontend/src/lib/translations/de.json | 86 +- .../frontend/src/lib/translations/en.json | 96 +- .../frontend/src/routes/+layout.server.ts | 2 +- packages/frontend/src/routes/+layout.ts | 2 +- .../src/routes/api/[...slug]/+server.ts | 30 +- .../src/routes/dashboard/+error.svelte | 1 - .../src/routes/dashboard/+layout.svelte | 219 +- .../dashboard/admin/jobs/+page.server.ts | 27 + .../routes/dashboard/admin/jobs/+page.svelte | 58 + .../admin/jobs/[queueName]/+page.server.ts | 35 + .../admin/jobs/[queueName]/+page.svelte | 212 ++ .../dashboard/admin/license/+page.server.ts | 39 + .../dashboard/admin/license/+page.svelte | 177 ++ .../dashboard/archived-emails/+page.svelte | 147 +- .../archived-emails/[id]/+page.server.ts | 34 +- .../archived-emails/[id]/+page.svelte | 76 + .../compliance/audit-log/+page.server.ts | 29 + .../compliance/audit-log/+page.svelte | 313 +++ .../routes/dashboard/ingestions/+page.svelte | 18 +- .../src/routes/dashboard/search/+page.svelte | 214 +- packages/frontend/vite.config.ts | 4 + packages/types/package.json | 1 + packages/types/src/audit-log.enums.ts | 37 + packages/types/src/audit-log.types.ts | 39 + packages/types/src/index.ts | 5 + packages/types/src/integrity.types.ts | 7 + packages/types/src/jobs.types.ts | 93 + packages/types/src/license.types.ts | 49 + packages/types/src/storage.types.ts | 2 + packages/types/tsconfig.json | 3 +- packages/types/tsconfig.tsbuildinfo | 1 - pnpm-lock.yaml | 304 ++- pnpm-workspace.yaml | 1 + tsconfig.base.json | 7 +- 129 files changed, 9805 insertions(+), 2699 deletions(-) rename {docker => apps/open-archiver}/Dockerfile (84%) create mode 100644 apps/open-archiver/index.ts create mode 100644 apps/open-archiver/package.json create mode 100644 apps/open-archiver/tsconfig.json create mode 100644 assets/screenshots/integrity-report.png create mode 100644 docs/api/integrity.md create mode 100644 docs/api/jobs.md create mode 100644 docs/enterprise/audit-log/api.md create mode 100644 docs/enterprise/audit-log/audit-service.md create mode 100644 docs/enterprise/audit-log/guide.md create mode 100644 docs/enterprise/audit-log/index.md create mode 100644 docs/user-guides/integrity-check.md create mode 100644 docs/user-guides/troubleshooting/cors-errors.md create mode 100644 packages/backend/src/api/controllers/integrity.controller.ts create mode 100644 packages/backend/src/api/controllers/jobs.controller.ts create mode 100644 packages/backend/src/api/routes/integrity.routes.ts create mode 100644 packages/backend/src/api/routes/jobs.routes.ts create mode 100644 packages/backend/src/api/server.ts create mode 100644 packages/backend/src/database/migrations/0021_nosy_veda.sql create mode 100644 packages/backend/src/database/migrations/0022_complete_triton.sql create mode 100644 packages/backend/src/database/migrations/0023_swift_swordsman.sql create mode 100644 packages/backend/src/database/migrations/meta/0021_snapshot.json create mode 100644 packages/backend/src/database/migrations/meta/0022_snapshot.json create mode 100644 packages/backend/src/database/migrations/meta/0023_snapshot.json create mode 100644 packages/backend/src/database/schema/enums.ts create mode 100644 packages/backend/src/helpers/deletionGuard.ts create mode 100644 packages/backend/src/services/AuditService.ts create mode 100644 packages/backend/src/services/IntegrityService.ts create mode 100644 packages/backend/src/services/JobsService.ts delete mode 100644 packages/backend/tsconfig.tsbuildinfo create mode 100644 packages/frontend/src/lib/components/ui/pagination/index.ts create mode 100644 packages/frontend/src/lib/components/ui/pagination/pagination-content.svelte create mode 100644 packages/frontend/src/lib/components/ui/pagination/pagination-ellipsis.svelte create mode 100644 packages/frontend/src/lib/components/ui/pagination/pagination-item.svelte create mode 100644 packages/frontend/src/lib/components/ui/pagination/pagination-link.svelte create mode 100644 packages/frontend/src/lib/components/ui/pagination/pagination-next-button.svelte create mode 100644 packages/frontend/src/lib/components/ui/pagination/pagination-prev-button.svelte create mode 100644 packages/frontend/src/lib/components/ui/pagination/pagination.svelte create mode 100644 packages/frontend/src/lib/components/ui/progress/index.ts create mode 100644 packages/frontend/src/lib/components/ui/progress/progress.svelte create mode 100644 packages/frontend/src/routes/dashboard/admin/jobs/+page.server.ts create mode 100644 packages/frontend/src/routes/dashboard/admin/jobs/+page.svelte create mode 100644 packages/frontend/src/routes/dashboard/admin/jobs/[queueName]/+page.server.ts create mode 100644 packages/frontend/src/routes/dashboard/admin/jobs/[queueName]/+page.svelte create mode 100644 packages/frontend/src/routes/dashboard/admin/license/+page.server.ts create mode 100644 packages/frontend/src/routes/dashboard/admin/license/+page.svelte create mode 100644 packages/frontend/src/routes/dashboard/compliance/audit-log/+page.server.ts create mode 100644 packages/frontend/src/routes/dashboard/compliance/audit-log/+page.svelte create mode 100644 packages/types/src/audit-log.enums.ts create mode 100644 packages/types/src/audit-log.types.ts create mode 100644 packages/types/src/integrity.types.ts create mode 100644 packages/types/src/jobs.types.ts create mode 100644 packages/types/src/license.types.ts delete mode 100644 packages/types/tsconfig.tsbuildinfo diff --git a/.env.example b/.env.example index d6c551f..4f2b2c4 100644 --- a/.env.example +++ b/.env.example @@ -4,8 +4,15 @@ NODE_ENV=development PORT_BACKEND=4000 PORT_FRONTEND=3000 +# The public-facing URL of your application. This is used by the backend to configure CORS. +APP_URL=http://localhost:3000 +# This is used by the SvelteKit Node adapter to determine the server's public-facing URL. +# It should always be set to the value of APP_URL. +ORIGIN=$APP_URL # The frequency of continuous email syncing. Default is every minutes, but you can change it to another value based on your needs. SYNC_FREQUENCY='* * * * *' +# Set to 'true' to include Junk and Trash folders in the email archive. Defaults to false. +ALL_INCLUSIVE_ARCHIVE=false # --- Docker Compose Service Configuration --- # These variables are used by docker-compose.yml to configure the services. Leave them unchanged if you use Docker services for Postgresql, Valkey (Redis) and Meilisearch. If you decide to use your own instances of these services, you can substitute them with your own connection credentials. @@ -40,7 +47,9 @@ BODY_SIZE_LIMIT=100M # --- Local Storage Settings --- # The path inside the container where files will be stored. # This is mapped to a Docker volume for persistence. -# This is only used if STORAGE_TYPE is 'local'. +# This is not an optional variable, it is where the Open Archiver service stores application data. Set this even if you are using S3 storage. +# Make sure the user that runs the Open Archiver service has read and write access to this path. +# Important: It is recommended to create this path manually before installation, otherwise you may face permission and ownership problems. STORAGE_LOCAL_ROOT_PATH=/var/data/open-archiver # --- S3-Compatible Storage Settings --- @@ -53,8 +62,18 @@ STORAGE_S3_REGION= # Set to 'true' for MinIO and other non-AWS S3 services STORAGE_S3_FORCE_PATH_STYLE=false +# --- Storage Encryption --- +# IMPORTANT: Generate a secure, random 32-byte hex string for this key. +# You can use `openssl rand -hex 32` to generate a key. +# This key is used for AES-256 encryption of files at rest. +# This is an optional variable, if not set, files will not be encrypted. +STORAGE_ENCRYPTION_KEY= + # --- Security & Authentication --- +# Enable or disable deletion of emails and ingestion sources. Defaults to false. +ENABLE_DELETION=false + # Rate Limiting # The window in milliseconds for which API requests are checked. Defaults to 60000 (1 minute). RATE_LIMIT_WINDOW_MS=60000 @@ -77,5 +96,3 @@ ENCRYPTION_KEY= # Apache Tika Integration # ONLY active if TIKA_URL is set TIKA_URL=http://tika:9998 - - diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index c2d7a33..67e7bb6 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -4,7 +4,6 @@ about: Create a report to help us improve title: '' labels: bug assignees: '' - --- **Describe the bug** @@ -12,9 +11,10 @@ A clear and concise description of what the bug is. **To Reproduce** Steps to reproduce the behavior: + 1. Go to '...' 2. Click on '....' -5. See error +3. See error **Expected behavior** A clear and concise description of what you expected to happen. @@ -23,7 +23,8 @@ A clear and concise description of what you expected to happen. If applicable, add screenshots to help explain your problem. **System:** - - Open Archiver Version: + +- Open Archiver Version: **Relevant logs:** Any relevant logs (Redact sensitive information) diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 361075c..0871c30 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -4,11 +4,10 @@ about: Suggest an idea for this project title: '' labels: enhancement assignees: '' - --- **Is your feature request related to a problem? Please describe.** -A clear and concise description of what the problem is. +A clear and concise description of what the problem is. **Describe the solution you'd like** A clear and concise description of what you want to happen. diff --git a/.github/workflows/docker-deployment.yml b/.github/workflows/docker-deployment.yml index 099c7d1..7a157f2 100644 --- a/.github/workflows/docker-deployment.yml +++ b/.github/workflows/docker-deployment.yml @@ -35,7 +35,7 @@ jobs: uses: docker/build-push-action@v6 with: context: . - file: ./docker/Dockerfile + file: ./apps/open-archiver/Dockerfile platforms: linux/amd64,linux/arm64 push: true tags: logiclabshq/open-archiver:${{ steps.sha.outputs.sha }} diff --git a/.gitignore b/.gitignore index e91fade..40efdf5 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,7 @@ pnpm-debug.log # Vitepress docs/.vitepress/dist docs/.vitepress/cache + + +# TS +**/tsconfig.tsbuildinfo diff --git a/LICENSE b/LICENSE index 7374290..14d5625 100644 --- a/LICENSE +++ b/LICENSE @@ -200,23 +200,23 @@ You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: -- **a)** The work must carry prominent notices stating that you modified - it, and giving a relevant date. -- **b)** The work must carry prominent notices stating that it is - released under this License and any conditions added under section 7. - This requirement modifies the requirement in section 4 to - “keep intact all notices”. -- **c)** You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. -- **d)** If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. +- **a)** The work must carry prominent notices stating that you modified + it, and giving a relevant date. +- **b)** The work must carry prominent notices stating that it is + released under this License and any conditions added under section 7. + This requirement modifies the requirement in section 4 to + “keep intact all notices”. +- **c)** You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. +- **d)** If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, @@ -235,42 +235,42 @@ of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: -- **a)** Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. -- **b)** Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either **(1)** a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or **(2)** access to copy the - Corresponding Source from a network server at no charge. -- **c)** Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. -- **d)** Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. -- **e)** Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. +- **a)** Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. +- **b)** Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either **(1)** a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or **(2)** access to copy the + Corresponding Source from a network server at no charge. +- **c)** Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. +- **d)** Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. +- **e)** Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be @@ -344,23 +344,23 @@ Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: -- **a)** Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or -- **b)** Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or -- **c)** Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or -- **d)** Limiting the use for publicity purposes of names of licensors or - authors of the material; or -- **e)** Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or -- **f)** Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. +- **a)** Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or +- **b)** Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or +- **c)** Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or +- **d)** Limiting the use for publicity purposes of names of licensors or + authors of the material; or +- **e)** Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or +- **f)** Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you diff --git a/docker/Dockerfile b/apps/open-archiver/Dockerfile similarity index 84% rename from docker/Dockerfile rename to apps/open-archiver/Dockerfile index 11b8341..cf5570f 100644 --- a/docker/Dockerfile +++ b/apps/open-archiver/Dockerfile @@ -1,4 +1,4 @@ -# Dockerfile for Open Archiver +# Dockerfile for the OSS version of Open Archiver ARG BASE_IMAGE=node:22-alpine @@ -15,12 +15,13 @@ COPY package.json pnpm-workspace.yaml pnpm-lock.yaml* ./ COPY packages/backend/package.json ./packages/backend/ COPY packages/frontend/package.json ./packages/frontend/ COPY packages/types/package.json ./packages/types/ +COPY apps/open-archiver/package.json ./apps/open-archiver/ # 1. Build Stage: Install all dependencies and build the project FROM base AS build COPY packages/frontend/svelte.config.js ./packages/frontend/ -# Install all dependencies. Use --shamefully-hoist to create a flat node_modules structure +# Install all dependencies. ENV PNPM_HOME="/pnpm" RUN --mount=type=cache,id=pnpm,target=/pnpm/store \ pnpm install --shamefully-hoist --frozen-lockfile --prod=false @@ -28,19 +29,19 @@ RUN --mount=type=cache,id=pnpm,target=/pnpm/store \ # Copy the rest of the source code COPY . . -# Build all packages. -RUN pnpm build +# Build the OSS packages. +RUN pnpm build:oss # 2. Production Stage: Install only production dependencies and copy built artifacts FROM base AS production - # Copy built application from build stage COPY --from=build /app/packages/backend/dist ./packages/backend/dist -COPY --from=build /app/packages/frontend/build ./packages/frontend/build -COPY --from=build /app/packages/types/dist ./packages/types/dist COPY --from=build /app/packages/backend/drizzle.config.ts ./packages/backend/drizzle.config.ts COPY --from=build /app/packages/backend/src/database/migrations ./packages/backend/src/database/migrations +COPY --from=build /app/packages/frontend/build ./packages/frontend/build +COPY --from=build /app/packages/types/dist ./packages/types/dist +COPY --from=build /app/apps/open-archiver/dist ./apps/open-archiver/dist # Copy the entrypoint script and make it executable COPY docker/docker-entrypoint.sh /usr/local/bin/ @@ -53,4 +54,4 @@ EXPOSE 3000 ENTRYPOINT ["docker-entrypoint.sh"] # Start the application -CMD ["pnpm", "docker-start"] +CMD ["pnpm", "docker-start:oss"] diff --git a/apps/open-archiver/index.ts b/apps/open-archiver/index.ts new file mode 100644 index 0000000..b9a3009 --- /dev/null +++ b/apps/open-archiver/index.ts @@ -0,0 +1,24 @@ +import { createServer, logger } from '@open-archiver/backend'; +import * as dotenv from 'dotenv'; + +dotenv.config(); + +async function start() { + // --- Environment Variable Validation --- + const { PORT_BACKEND } = process.env; + + if (!PORT_BACKEND) { + throw new Error('Missing required environment variables for the backend: PORT_BACKEND.'); + } + // Create the server instance (passing no modules for the default OSS version) + const app = await createServer([]); + + app.listen(PORT_BACKEND, () => { + logger.info({}, `✅ Open Archiver (OSS) running on port ${PORT_BACKEND}`); + }); +} + +start().catch((error) => { + logger.error({ error }, 'Failed to start the server:', error); + process.exit(1); +}); diff --git a/apps/open-archiver/package.json b/apps/open-archiver/package.json new file mode 100644 index 0000000..07f9a4d --- /dev/null +++ b/apps/open-archiver/package.json @@ -0,0 +1,18 @@ +{ + "name": "open-archiver-app", + "version": "1.0.0", + "private": true, + "scripts": { + "dev": "ts-node-dev --respawn --transpile-only index.ts", + "build": "tsc", + "start": "node dist/index.js" + }, + "dependencies": { + "@open-archiver/backend": "workspace:*", + "dotenv": "^17.2.0" + }, + "devDependencies": { + "@types/dotenv": "^8.2.3", + "ts-node-dev": "^2.0.0" + } +} diff --git a/apps/open-archiver/tsconfig.json b/apps/open-archiver/tsconfig.json new file mode 100644 index 0000000..c4839ce --- /dev/null +++ b/apps/open-archiver/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "dist" + }, + "include": ["./**/*.ts"], + "references": [{ "path": "../../packages/backend" }] +} diff --git a/assets/screenshots/integrity-report.png b/assets/screenshots/integrity-report.png new file mode 100644 index 0000000000000000000000000000000000000000..43671d2c352670193f60d4e4ef79a346a44e5225 GIT binary patch literal 311017 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ξZOLvrb%1eOB<@0hzx-ah?H)n?qcnaRJE+F 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

x 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

uc^vW^l^!Nj_GQl_A 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 literal 0 HcmV?d00001 diff --git a/docker-compose.yml b/docker-compose.yml index ab0f1f2..b9468c0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,7 +10,7 @@ services: env_file: - .env volumes: - - archiver-data:/var/data/open-archiver + - ${STORAGE_LOCAL_ROOT_PATH}:${STORAGE_LOCAL_ROOT_PATH} depends_on: - postgres - valkey @@ -66,8 +66,6 @@ volumes: driver: local meilidata: driver: local - archiver-data: - driver: local networks: open-archiver-net: diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index 92d951a..d4df390 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -33,6 +33,7 @@ export default defineConfig({ items: [ { text: 'Get Started', link: '/' }, { text: 'Installation', link: '/user-guides/installation' }, + { text: 'Email Integrity Check', link: '/user-guides/integrity-check' }, { text: 'Email Providers', link: '/user-guides/email-providers/', @@ -91,8 +92,10 @@ export default defineConfig({ { text: 'Archived Email', link: '/api/archived-email' }, { text: 'Dashboard', link: '/api/dashboard' }, { text: 'Ingestion', link: '/api/ingestion' }, + { text: 'Integrity Check', link: '/api/integrity' }, { text: 'Search', link: '/api/search' }, { text: 'Storage', link: '/api/storage' }, + { text: 'Jobs', link: '/api/jobs' }, ], }, { diff --git a/docs/api/integrity.md b/docs/api/integrity.md new file mode 100644 index 0000000..b3070d3 --- /dev/null +++ b/docs/api/integrity.md @@ -0,0 +1,51 @@ +# Integrity Check API + +The Integrity Check API provides an endpoint to verify the cryptographic hash of an archived email and its attachments against the stored values in the database. This allows you to ensure that the stored files have not been tampered with or corrupted since they were archived. + +## Check Email Integrity + +Verifies the integrity of a specific archived email and all of its associated attachments. + +- **URL:** `/api/v1/integrity/:id` +- **Method:** `GET` +- **URL Params:** + - `id=[string]` (required) - The UUID of the archived email to check. +- **Permissions:** `read:archive` +- **Success Response:** + - **Code:** 200 OK + - **Content:** `IntegrityCheckResult[]` + +### Response Body `IntegrityCheckResult` + +An array of objects, each representing the result of an integrity check for a single file (either the email itself or an attachment). + +| Field | Type | Description | +| :--------- | :------------------------ | :-------------------------------------------------------------------------- | +| `type` | `'email' \| 'attachment'` | The type of the file being checked. | +| `id` | `string` | The UUID of the email or attachment. | +| `filename` | `string` (optional) | The filename of the attachment. This field is only present for attachments. | +| `isValid` | `boolean` | `true` if the current hash matches the stored hash, otherwise `false`. | +| `reason` | `string` (optional) | A reason for the failure. Only present if `isValid` is `false`. | + +### Example Response + +```json +[ + { + "type": "email", + "id": "a1b2c3d4-e5f6-7890-1234-567890abcdef", + "isValid": true + }, + { + "type": "attachment", + "id": "b2c3d4e5-f6a7-8901-2345-67890abcdef1", + "filename": "document.pdf", + "isValid": false, + "reason": "Stored hash does not match current hash." + } +] +``` + +- **Error Response:** + - **Code:** 404 Not Found + - **Content:** `{ "message": "Archived email not found" }` diff --git a/docs/api/jobs.md b/docs/api/jobs.md new file mode 100644 index 0000000..7b63f68 --- /dev/null +++ b/docs/api/jobs.md @@ -0,0 +1,128 @@ +# Jobs API + +The Jobs API provides endpoints for monitoring the job queues and the jobs within them. + +## Overview + +Open Archiver uses a job queue system to handle asynchronous tasks like email ingestion and indexing. The system is built on Redis and BullMQ and uses a producer-consumer pattern. + +### Job Statuses + +Jobs can have one of the following statuses: + +- **active:** The job is currently being processed. +- **completed:** The job has been completed successfully. +- **failed:** The job has failed after all retry attempts. +- **delayed:** The job is delayed and will be processed at a later time. +- **waiting:** The job is waiting to be processed. +- **paused:** The job is paused and will not be processed until it is resumed. + +### Errors + +When a job fails, the `failedReason` and `stacktrace` fields will contain information about the error. The `error` field will also be populated with the `failedReason` for easier access. + +### Job Preservation + +Jobs are preserved for a limited time after they are completed or failed. This means that the job counts and the jobs that you see in the API are for a limited time. + +- **Completed jobs:** The last 1000 completed jobs are preserved. +- **Failed jobs:** The last 5000 failed jobs are preserved. + +## Get All Queues + +- **Endpoint:** `GET /v1/jobs/queues` +- **Description:** Retrieves a list of all job queues and their job counts. +- **Permissions:** `manage:all` +- **Responses:** + - `200 OK`: Returns a list of queue overviews. + - `401 Unauthorized`: If the user is not authenticated. + - `403 Forbidden`: If the user does not have the required permissions. + +### Response Body + +```json +{ + "queues": [ + { + "name": "ingestion", + "counts": { + "active": 0, + "completed": 56, + "failed": 4, + "delayed": 3, + "waiting": 0, + "paused": 0 + } + }, + { + "name": "indexing", + "counts": { + "active": 0, + "completed": 0, + "failed": 0, + "delayed": 0, + "waiting": 0, + "paused": 0 + } + } + ] +} +``` + +## Get Queue Jobs + +- **Endpoint:** `GET /v1/jobs/queues/:queueName` +- **Description:** Retrieves a list of jobs within a specific queue, with pagination and filtering by status. +- **Permissions:** `manage:all` +- **URL Parameters:** + - `queueName` (string, required): The name of the queue to retrieve jobs from. +- **Query Parameters:** + - `status` (string, optional): The status of the jobs to retrieve. Can be one of `active`, `completed`, `failed`, `delayed`, `waiting`, `paused`. Defaults to `failed`. + - `page` (number, optional): The page number to retrieve. Defaults to `1`. + - `limit` (number, optional): The number of jobs to retrieve per page. Defaults to `10`. +- **Responses:** + - `200 OK`: Returns a detailed view of the queue, including a paginated list of jobs. + - `401 Unauthorized`: If the user is not authenticated. + - `403 Forbidden`: If the user does not have the required permissions. + - `404 Not Found`: If the specified queue does not exist. + +### Response Body + +```json +{ + "name": "ingestion", + "counts": { + "active": 0, + "completed": 56, + "failed": 4, + "delayed": 3, + "waiting": 0, + "paused": 0 + }, + "jobs": [ + { + "id": "1", + "name": "initial-import", + "data": { + "ingestionSourceId": "clx1y2z3a0000b4d2e5f6g7h8" + }, + "state": "failed", + "failedReason": "Error: Connection timed out", + "timestamp": 1678886400000, + "processedOn": 1678886401000, + "finishedOn": 1678886402000, + "attemptsMade": 5, + "stacktrace": ["..."], + "returnValue": null, + "ingestionSourceId": "clx1y2z3a0000b4d2e5f6g7h8", + "error": "Error: Connection timed out" + } + ], + "pagination": { + "currentPage": 1, + "totalPages": 1, + "totalJobs": 4, + "limit": 10 + } +} +``` diff --git a/docs/enterprise/audit-log/api.md b/docs/enterprise/audit-log/api.md new file mode 100644 index 0000000..abaf38d --- /dev/null +++ b/docs/enterprise/audit-log/api.md @@ -0,0 +1,78 @@ +# Audit Log: API Endpoints + +The audit log feature exposes two API endpoints for retrieving and verifying audit log data. Both endpoints require authentication and are only accessible to users with the appropriate permissions. + +## Get Audit Logs + +Retrieves a paginated list of audit log entries, with support for filtering and sorting. + +- **Endpoint:** `GET /api/v1/enterprise/audit-logs` +- **Method:** `GET` +- **Authentication:** Required + +### Query Parameters + +| Parameter | Type | Description | +| ------------ | -------- | --------------------------------------------------------------------------- | +| `page` | `number` | The page number to retrieve. Defaults to `1`. | +| `limit` | `number` | The number of entries to retrieve per page. Defaults to `20`. | +| `startDate` | `date` | The start date for the date range filter. | +| `endDate` | `date` | The end date for the date range filter. | +| `actor` | `string` | The actor identifier to filter by. | +| `actionType` | `string` | The action type to filter by (e.g., `LOGIN`, `CREATE`). | +| `sort` | `string` | The sort order for the results. Can be `asc` or `desc`. Defaults to `desc`. | + +### Response Body + +```json +{ + "data": [ + { + "id": 1, + "previousHash": null, + "timestamp": "2025-10-03T00:00:00.000Z", + "actorIdentifier": "e8026a75-b58a-4902-8858-eb8780215f82", + "actorIp": "::1", + "actionType": "LOGIN", + "targetType": "User", + "targetId": "e8026a75-b58a-4902-8858-eb8780215f82", + "details": {}, + "currentHash": "..." + } + ], + "meta": { + "total": 100, + "page": 1, + "limit": 20 + } +} +``` + +## Verify Audit Log Integrity + +Initiates a verification process to check the integrity of the entire audit log chain. + +- **Endpoint:** `POST /api/v1/enterprise/audit-logs/verify` +- **Method:** `POST` +- **Authentication:** Required + +### Response Body + +**Success** + +```json +{ + "ok": true, + "message": "Audit log integrity verified successfully." +} +``` + +**Failure** + +```json +{ + "ok": false, + "message": "Audit log chain is broken!", + "logId": 123 +} +``` diff --git a/docs/enterprise/audit-log/audit-service.md b/docs/enterprise/audit-log/audit-service.md new file mode 100644 index 0000000..6183cb2 --- /dev/null +++ b/docs/enterprise/audit-log/audit-service.md @@ -0,0 +1,31 @@ +# Audit Log: Backend Implementation + +The backend implementation of the audit log is handled by the `AuditService`, located in `packages/backend/src/services/AuditService.ts`. This service encapsulates all the logic for creating, retrieving, and verifying audit log entries. + +## Hashing and Verification Logic + +The core of the audit log's immutability lies in its hashing and verification logic. + +### Hash Calculation + +The `calculateHash` method is responsible for generating a SHA-256 hash of a log entry. To ensure consistency, it performs the following steps: + +1. **Canonical Object Creation:** It constructs a new object with a fixed property order, ensuring that the object's structure is always the same. +2. **Timestamp Normalization:** It converts the `timestamp` to milliseconds since the epoch (`getTime()`) to avoid any precision-related discrepancies between the application and the database. +3. **Canonical Stringification:** It uses a custom `canonicalStringify` function to create a JSON string representation of the object. This function sorts the object keys, ensuring that the output is always the same, regardless of the in-memory property order. +4. **Hash Generation:** It computes a SHA-256 hash of the canonical string. + +### Verification Process + +The `verifyAuditLog` method is designed to be highly scalable and efficient, even with millions of log entries. It processes the logs in manageable chunks (e.g., 1000 at a time) to avoid loading the entire table into memory. + +The verification process involves the following steps: + +1. **Iterative Processing:** It fetches the logs in batches within a `while` loop. +2. **Chain Verification:** For each log entry, it compares the `previousHash` with the `currentHash` of the preceding log. If they do not match, the chain is broken, and the verification fails. +3. **Hash Recalculation:** It recalculates the hash of the current log entry using the same `calculateHash` method used during creation. +4. **Integrity Check:** It compares the recalculated hash with the `currentHash` stored in the database. If they do not match, the log entry has been tampered with, and the verification fails. + +## Service Integration + +The `AuditService` is integrated into the application through the `AuditLogModule` (`packages/enterprise/src/modules/audit-log/audit-log.module.ts`), which registers the API routes for the audit log feature. The service's `createAuditLog` method is called from various other services throughout the application to record significant events. diff --git a/docs/enterprise/audit-log/guide.md b/docs/enterprise/audit-log/guide.md new file mode 100644 index 0000000..2b3237d --- /dev/null +++ b/docs/enterprise/audit-log/guide.md @@ -0,0 +1,39 @@ +# Audit Log: User Interface + +The audit log user interface provides a comprehensive view of all significant events that have occurred within the Open Archiver system. It is designed to be intuitive and user-friendly, allowing administrators to easily monitor and review system activity. + +## Viewing Audit Logs + +The main audit log page displays a table of log entries, with the following columns: + +- **Timestamp:** The date and time of the event. +- **Actor:** The identifier of the user or system process that performed the action. +- **IP Address:** The IP address from which the action was initiated. +- **Action:** The type of action performed, displayed as a color-coded badge for easy identification. +- **Target Type:** The type of resource that was affected. +- **Target ID:** The unique identifier of the affected resource. +- **Details:** A truncated preview of the event's details. The full JSON object is displayed in a pop-up card on hover. + +## Filtering and Sorting + +The table can be sorted by timestamp by clicking the "Timestamp" header. This allows you to view the logs in either chronological or reverse chronological order. + +## Pagination + +Pagination controls are available below the table, allowing you to navigate through the entire history of audit log entries. + +## Verifying Log Integrity + +The "Verify Log Integrity" button allows you to initiate a verification process to check the integrity of the entire audit log chain. This process recalculates the hash of each log entry and compares it to the stored hash, ensuring that the cryptographic chain is unbroken and no entries have been tampered with. + +### Verification Responses + +- **Success:** A success notification is displayed, confirming that the audit log integrity has been verified successfully. This means that the log chain is complete and no entries have been tampered with. + +- **Failure:** An error notification is displayed, indicating that the audit log chain is broken or an entry has been tampered with. The notification will include the ID of the log entry where the issue was detected. There are two types of failures: + - **Audit log chain is broken:** This means that the `previousHash` of a log entry does not match the `currentHash` of the preceding entry. This indicates that one or more log entries may have been deleted or inserted into the chain. + - **Audit log entry is tampered!:** This means that the recalculated hash of a log entry does not match its stored `currentHash`. This indicates that the data within the log entry has been altered. + +## Viewing Log Details + +You can view the full details of any log entry by clicking on its row in the table. This will open a dialog containing all the information associated with the log entry, including the previous and current hashes. diff --git a/docs/enterprise/audit-log/index.md b/docs/enterprise/audit-log/index.md new file mode 100644 index 0000000..7790043 --- /dev/null +++ b/docs/enterprise/audit-log/index.md @@ -0,0 +1,27 @@ +# Audit Log + +The Audit Log is an enterprise-grade feature designed to provide a complete, immutable, and verifiable record of every significant action that occurs within the Open Archiver system. Its primary purpose is to ensure compliance with strict regulatory standards, such as the German GoBD, by establishing a tamper-proof chain of evidence for all activities. + +## Core Principles + +To fulfill its compliance and security functions, the audit log adheres to the following core principles: + +### 1. Immutability + +Every log entry is cryptographically chained to the previous one. Each new entry contains a SHA-256 hash of the preceding entry's hash, creating a verifiable chain. Any attempt to alter or delete a past entry would break this chain and be immediately detectable through the verification process. + +### 2. Completeness + +The system is designed to log every significant event without exception. This includes not only user-initiated actions (like logins, searches, and downloads) but also automated system processes, such as data ingestion and policy-based deletions. + +### 3. Attribution + +Each log entry is unambiguously linked to the actor that initiated the event. This could be a specific authenticated user, an external auditor, or an automated system process. The actor's identifier and source IP address are recorded to ensure full traceability. + +### 4. Clarity and Detail + +Log entries are structured to be detailed and human-readable, providing sufficient context for an auditor to understand the event without needing specialized system knowledge. This includes the action performed, the target resource affected, and a JSON object with specific, contextual details of the event. + +### 5. Verifiability + +The integrity of the entire audit log can be verified at any time. A dedicated process iterates through the logs from the beginning, recalculating the hash of each entry and comparing it to the stored hash, ensuring the cryptographic chain is unbroken and no entries have been tampered with. diff --git a/docs/user-guides/installation.md b/docs/user-guides/installation.md index 2d34b5d..1b66c1a 100644 --- a/docs/user-guides/installation.md +++ b/docs/user-guides/installation.md @@ -17,7 +17,22 @@ git clone https://github.com/LogicLabs-OU/OpenArchiver.git cd OpenArchiver ``` -## 2. Configure Your Environment +## 2. Create a Directory for Local Storage (Important) + +Before configuring the application, you **must** create a directory on your host machine where Open Archiver will store its data (such as emails and attachments). Manually creating this directory helps prevent potential permission issues. + +Foe examples, you can use this path `/var/data/open-archiver`. + +Run the following commands to create the directory and set the correct permissions: + +```bash +sudo mkdir -p /var/data/open-archiver +sudo chown -R $(id -u):$(id -g) /var/data/open-archiver +``` + +This ensures the directory is owned by your current user, which is necessary for the application to have write access. You will set this path in your `.env` file in the next step. + +## 3. Configure Your Environment The application is configured using environment variables. You'll need to create a `.env` file to store your configuration. @@ -29,9 +44,15 @@ cp .env.example.docker .env Now, open the `.env` file in a text editor and customize the settings. -### Important Configuration +### Key Configuration Steps -You must change the following placeholder values to secure your instance: +1. **Set the Storage Path**: Find the `STORAGE_LOCAL_ROOT_PATH` variable and set it to the path you just created. + + ```env + STORAGE_LOCAL_ROOT_PATH=/var/data/open-archiver + ``` + +2. **Secure Your Instance**: You must change the following placeholder values to secure your instance: - `POSTGRES_PASSWORD`: A strong, unique password for the database. - `REDIS_PASSWORD`: A strong, unique password for the Valkey/Redis service. @@ -41,6 +62,10 @@ You must change the following placeholder values to secure your instance: ```bash openssl rand -hex 32 ``` +- `STORAGE_ENCRYPTION_KEY`: **(Optional but Recommended)** A 32-byte hex string for encrypting emails and attachments at rest. If this key is not provided, storage encryption will be disabled. You can generate one with: + ```bash + openssl rand -hex 32 + ``` ### Storage Configuration @@ -65,12 +90,15 @@ Here is a complete list of environment variables available for configuration: #### Application Settings -| Variable | Description | Default Value | -| ---------------- | ----------------------------------------------------------------------------------------------------- | ------------- | -| `NODE_ENV` | The application environment. | `development` | -| `PORT_BACKEND` | The port for the backend service. | `4000` | -| `PORT_FRONTEND` | The port for the frontend service. | `3000` | -| `SYNC_FREQUENCY` | The frequency of continuous email syncing. See [cron syntax](https://crontab.guru/) for more details. | `* * * * *` | +| Variable | Description | Default Value | +| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------- | +| `NODE_ENV` | The application environment. | `development` | +| `PORT_BACKEND` | The port for the backend service. | `4000` | +| `PORT_FRONTEND` | The port for the frontend service. | `3000` | +| `APP_URL` | The public-facing URL of your application. This is used by the backend to configure CORS. | `http://localhost:3000` | +| `ORIGIN` | Used by the SvelteKit Node adapter to determine the server's public-facing URL. It should always be set to the value of `APP_URL` (e.g., `ORIGIN=$APP_URL`). | `http://localhost:3000` | +| `SYNC_FREQUENCY` | The frequency of continuous email syncing. See [cron syntax](https://crontab.guru/) for more details. | `* * * * *` | +| `ALL_INCLUSIVE_ARCHIVE` | Set to `true` to include all emails, including Junk and Trash folders, in the email archive. | `false` | #### Docker Compose Service Configuration @@ -96,24 +124,26 @@ These variables are used by `docker-compose.yml` to configure the services. | ------------------------------ | ----------------------------------------------------------------------------------------------------------- | ------------------------- | | `STORAGE_TYPE` | The storage backend to use (`local` or `s3`). | `local` | | `BODY_SIZE_LIMIT` | The maximum request body size for uploads. Can be a number in bytes or a string with a unit (e.g., `100M`). | `100M` | -| `STORAGE_LOCAL_ROOT_PATH` | The root path for local file storage. | `/var/data/open-archiver` | +| `STORAGE_LOCAL_ROOT_PATH` | The root path for Open Archiver app data. | `/var/data/open-archiver` | | `STORAGE_S3_ENDPOINT` | The endpoint for S3-compatible storage (required if `STORAGE_TYPE` is `s3`). | | | `STORAGE_S3_BUCKET` | The bucket name for S3-compatible storage (required if `STORAGE_TYPE` is `s3`). | | | `STORAGE_S3_ACCESS_KEY_ID` | The access key ID for S3-compatible storage (required if `STORAGE_TYPE` is `s3`). | | | `STORAGE_S3_SECRET_ACCESS_KEY` | The secret access key for S3-compatible storage (required if `STORAGE_TYPE` is `s3`). | | | `STORAGE_S3_REGION` | The region for S3-compatible storage (required if `STORAGE_TYPE` is `s3`). | | | `STORAGE_S3_FORCE_PATH_STYLE` | Force path-style addressing for S3 (optional). | `false` | +| `STORAGE_ENCRYPTION_KEY` | A 32-byte hex string for AES-256 encryption of files at rest. If not set, files will not be encrypted. | | #### Security & Authentication -| Variable | Description | Default Value | -| -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------ | -| `JWT_SECRET` | A secret key for signing JWT tokens. | `a-very-secret-key-that-you-should-change` | -| `JWT_EXPIRES_IN` | The expiration time for JWT tokens. | `7d` | -| ~~`SUPER_API_KEY`~~ (Deprecated) | An API key with super admin privileges. (The SUPER_API_KEY is deprecated since v0.3.0 after we roll out the role-based access control system.) | | -| `RATE_LIMIT_WINDOW_MS` | The window in milliseconds for which API requests are checked. | `900000` (15 minutes) | -| `RATE_LIMIT_MAX_REQUESTS` | The maximum number of API requests allowed from an IP within the window. | `100` | -| `ENCRYPTION_KEY` | A 32-byte hex string for encrypting sensitive data in the database. | | +| Variable | Description | Default Value | +| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------ | +| `ENABLE_DELETION` | Enable or disable deletion of emails and ingestion sources. If this option is not set, or is set to any value other than `true`, deletion will be disabled for the entire instance. | `false` | +| `JWT_SECRET` | A secret key for signing JWT tokens. | `a-very-secret-key-that-you-should-change` | +| `JWT_EXPIRES_IN` | The expiration time for JWT tokens. | `7d` | +| ~~`SUPER_API_KEY`~~ (Deprecated) | An API key with super admin privileges. (The SUPER_API_KEY is deprecated since v0.3.0 after we roll out the role-based access control system.) | | +| `RATE_LIMIT_WINDOW_MS` | The window in milliseconds for which API requests are checked. | `900000` (15 minutes) | +| `RATE_LIMIT_MAX_REQUESTS` | The maximum number of API requests allowed from an IP within the window. | `100` | +| `ENCRYPTION_KEY` | A 32-byte hex string for encrypting sensitive data in the database. | | #### Apache Tika Integration @@ -121,7 +151,7 @@ These variables are used by `docker-compose.yml` to configure the services. | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------ | | `TIKA_URL` | Optional. The URL of an Apache Tika server for advanced text extraction from attachments. If not set, the application falls back to built-in parsers for PDF, Word, and Excel files. | `http://tika:9998` | -## 3. Run the Application +## 4. Run the Application Once you have configured your `.env` file, you can start all the services using Docker Compose: @@ -141,7 +171,7 @@ You can check the status of the running containers with: docker compose ps ``` -## 4. Access the Application +## 5. Access the Application Once the services are running, you can access the Open Archiver web interface by navigating to `http://localhost:3000` in your web browser. @@ -149,7 +179,7 @@ Upon first visit, you will be redirected to the `/setup` page where you can set If you are not redirected to the `/setup` page but instead see the login page, there might be something wrong with the database. Restart the service and try again. -## 5. Next Steps +## 6. Next Steps After successfully deploying and logging into Open Archiver, the next step is to configure your ingestion sources to start archiving emails. @@ -308,31 +338,3 @@ docker-compose up -d --force-recreate ``` After this, any new data will be saved directly into the `./data/open-archiver` folder in your project directory. - -## Troubleshooting - -### 403 Cross-Site POST Forbidden Error - -If you are running the application behind a reverse proxy or have mapped the application to a different port (e.g., `3005:3000`), you may encounter a `403 Cross-site POST from submissions are forbidden` error when uploading files. - -To resolve this, you must set the `ORIGIN` environment variable to the URL of your application. This ensures that the backend can verify the origin of requests and prevent cross-site request forgery (CSRF) attacks. - -Add the following line to your `.env` file, replacing `` and `` with your specific values: - -```bash -ORIGIN=http://: -``` - -For example, if your application is accessible at `http://localhost:3005`, you would set the variable as follows: - -```bash -ORIGIN=http://localhost:3005 -``` - -After adding the `ORIGIN` variable, restart your Docker containers for the changes to take effect: - -```bash -docker-compose up -d --force-recreate -``` - -This will ensure that your file uploads are correctly authorized. diff --git a/docs/user-guides/integrity-check.md b/docs/user-guides/integrity-check.md new file mode 100644 index 0000000..cd3ec58 --- /dev/null +++ b/docs/user-guides/integrity-check.md @@ -0,0 +1,37 @@ +# Email Integrity Check + +Open Archiver allows you to verify the integrity of your archived emails and their attachments. This guide explains how the integrity check works and what the results mean. + +## How It Works + +When an email is archived, Open Archiver calculates a unique cryptographic signature (a SHA256 hash) for the email's raw `.eml` file and for each of its attachments. These signatures are stored in the database alongside the email's metadata. + +The integrity check feature recalculates these signatures for the stored files and compares them to the original signatures stored in the database. This process allows you to verify that the content of your archived emails has not been altered, corrupted, or tampered with since the moment they were archived. + +## The Integrity Report + +When you view an email in the Open Archiver interface, an integrity report is automatically generated and displayed. This report provides a clear, at-a-glance status for the email file and each of its attachments. + +### Statuses + +- **Valid (Green Badge):** A "Valid" status means that the current signature of the file matches the original signature stored in the database. This is the expected status and indicates that the file's integrity is intact. + +- **Invalid (Red Badge):** An "Invalid" status means that the current signature of the file does _not_ match the original signature. This indicates that the file's content has changed since it was archived. + +### Reasons for an "Invalid" Status + +If a file is marked as "Invalid," you can hover over the badge to see a reason for the failure. Common reasons include: + +- **Stored hash does not match current hash:** This is the most common reason and indicates that the file's content has been modified. This could be due to accidental changes, data corruption, or unauthorized tampering. + +- **Could not read attachment file from storage:** This message indicates that the file could not be read from its storage location. This could be due to a storage system issue, a file permission problem, or because the file has been deleted. + +## What to Do If an Integrity Check Fails + +If you encounter an "Invalid" status for an email or attachment, it is important to investigate the issue. Here are some steps you can take: + +1. **Check Storage:** Verify that the file exists in its storage location and that its permissions are correct. +2. **Review Audit Logs:** If you have audit logging enabled, review the logs for any unauthorized access or modifications to the file. +3. **Restore from Backup:** If you suspect data corruption, you may need to restore the affected file from a backup. + +The integrity check feature is a crucial tool for ensuring the long-term reliability and trustworthiness of your email archive. By regularly monitoring the integrity of your archived data, you can be confident that your records are accurate and complete. diff --git a/docs/user-guides/troubleshooting/cors-errors.md b/docs/user-guides/troubleshooting/cors-errors.md new file mode 100644 index 0000000..e32f5dc --- /dev/null +++ b/docs/user-guides/troubleshooting/cors-errors.md @@ -0,0 +1,75 @@ +# Troubleshooting CORS Errors + +Cross-Origin Resource Sharing (CORS) is a security feature that controls how web applications in one domain can request and interact with resources in another. If not configured correctly, you may encounter errors when performing actions like uploading files. + +This guide will help you diagnose and resolve common CORS-related issues. + +## Symptoms + +You may be experiencing a CORS issue if you see one of the following errors in your browser's developer console or in the application's logs: + +- `TypeError: fetch failed` +- `Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource.` +- `Unexpected token 'C', "Cross-site"... is not valid JSON` +- A JSON error response similar to the following: + ```json + { + "message": "CORS Error: This origin is not allowed.", + "requiredOrigin": "http://localhost:3000", + "receivedOrigin": "https://localhost:3000" + } + ``` + +## Root Cause + +These errors typically occur when the URL you are using to access the application in your browser does not exactly match the `APP_URL` configured in your `.env` file. + +This can happen for several reasons: + +- You are accessing the application via a different port. +- You are using a reverse proxy that changes the protocol (e.g., from `http` to `https`). +- The SvelteKit server, in a production build, is incorrectly guessing its public-facing URL. + +## Solution + +The solution is to ensure that the application's frontend and backend are correctly configured with the public-facing URL of your instance. This is done by setting two environment variables: `APP_URL` and `ORIGIN`. + +1. **Open your `.env` file** in a text editor. + +2. **Set `APP_URL`**: Define the `APP_URL` variable with the exact URL you use to access the application in your browser. + + ```env + APP_URL=http://your-domain-or-ip:3000 + ``` + +3. **Set `ORIGIN`**: The SvelteKit server requires a specific `ORIGIN` variable to correctly identify itself. This should always be set to the value of your `APP_URL`. + + ```env + ORIGIN=$APP_URL + ``` + + By using `$APP_URL`, you ensure that both variables are always in sync. + +### Example Configuration + +If you are running the application locally on port `3000`, your configuration should look like this: + +```env +APP_URL=http://localhost:3000 +ORIGIN=$APP_URL +``` + +If your application is behind a reverse proxy and is accessible at `https://archive.mycompany.com`, your configuration should be: + +```env +APP_URL=https://archive.mycompany.com +ORIGIN=$APP_URL +``` + +After making these changes to your `.env` file, you must restart the application for them to take effect: + +```bash +docker compose up -d --force-recreate +``` + +This will ensure that the backend's CORS policy and the frontend server's origin are correctly aligned, resolving the errors. diff --git a/package.json b/package.json index f6a5f63..9703dbb 100644 --- a/package.json +++ b/package.json @@ -1,17 +1,24 @@ { "name": "open-archiver", - "version": "0.3.4", + "version": "0.4.0", "private": true, + "license": "SEE LICENSE IN LICENSE file", "scripts": { - "dev": "dotenv -- pnpm --filter \"./packages/*\" --parallel dev", - "build": "pnpm --filter \"./packages/*\" build", - "start": "dotenv -- pnpm --filter \"./packages/*\" --parallel start", + "build:oss": "pnpm --filter \"./packages/*\" --filter \"!./packages/enterprise\" --filter \"./apps/open-archiver\" build", + "build:enterprise": "cross-env VITE_ENTERPRISE_MODE=true pnpm build", + "start:oss": "dotenv -- concurrently \"node apps/open-archiver/dist/index.js\" \"pnpm --filter @open-archiver/frontend start\"", + "start:enterprise": "dotenv -- concurrently \"node apps/open-archiver-enterprise/dist/index.js\" \"pnpm --filter @open-archiver/frontend start\"", + "dev:enterprise": "cross-env VITE_ENTERPRISE_MODE=true dotenv -- pnpm --filter \"@open-archiver/*\" --filter \"open-archiver-enterprise-app\" --parallel dev", + "dev:oss": "dotenv -- pnpm --filter \"./packages/*\" --filter \"!./packages/@open-archiver/enterprise\" --filter \"open-archiver-app\" --parallel dev", + "build": "pnpm --filter \"./packages/*\" --filter \"./apps/*\" build", + "start": "dotenv -- pnpm --filter \"open-archiver-app\" --parallel start", "start:workers": "dotenv -- concurrently \"pnpm --filter @open-archiver/backend start:ingestion-worker\" \"pnpm --filter @open-archiver/backend start:indexing-worker\" \"pnpm --filter @open-archiver/backend start:sync-scheduler\"", "start:workers:dev": "dotenv -- concurrently \"pnpm --filter @open-archiver/backend start:ingestion-worker:dev\" \"pnpm --filter @open-archiver/backend start:indexing-worker:dev\" \"pnpm --filter @open-archiver/backend start:sync-scheduler:dev\"", "db:generate": "dotenv -- pnpm --filter @open-archiver/backend db:generate", "db:migrate": "dotenv -- pnpm --filter @open-archiver/backend db:migrate", "db:migrate:dev": "dotenv -- pnpm --filter @open-archiver/backend db:migrate:dev", - "docker-start": "concurrently \"pnpm start:workers\" \"pnpm start\"", + "docker-start:oss": "concurrently \"pnpm start:workers\" \"pnpm start:oss\"", + "docker-start:enterprise": "concurrently \"pnpm start:workers\" \"pnpm start:enterprise\"", "docs:dev": "vitepress dev docs --port 3009", "docs:build": "vitepress build docs", "docs:preview": "vitepress preview docs", @@ -23,6 +30,7 @@ "dotenv-cli": "8.0.0" }, "devDependencies": { + "cross-env": "^10.0.0", "prettier": "^3.6.2", "prettier-plugin-svelte": "^3.4.0", "prettier-plugin-tailwindcss": "^0.6.14", diff --git a/packages/backend/package.json b/packages/backend/package.json index d3d570b..aae276b 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -2,12 +2,13 @@ "name": "@open-archiver/backend", "version": "0.1.0", "private": true, + "license": "SEE LICENSE IN LICENSE file", "main": "dist/index.js", + "types": "dist/index.d.ts", "scripts": { - "dev": "ts-node-dev --respawn --transpile-only src/index.ts ", "build": "tsc && pnpm copy-assets", + "dev": "tsc --watch", "copy-assets": "cp -r src/locales dist/locales", - "start": "node dist/index.js", "start:ingestion-worker": "node dist/workers/ingestion.worker.js", "start:indexing-worker": "node dist/workers/indexing.worker.js", "start:sync-scheduler": "node dist/jobs/schedulers/sync-scheduler.js", @@ -31,6 +32,7 @@ "bcryptjs": "^3.0.2", "bullmq": "^5.56.3", "busboy": "^1.6.0", + "cors": "^2.8.5", "cross-fetch": "^4.1.0", "deepmerge-ts": "^7.1.5", "dotenv": "^17.2.0", @@ -58,16 +60,14 @@ "pst-extractor": "^1.11.0", "reflect-metadata": "^0.2.2", "sqlite3": "^5.1.7", - "tsconfig-paths": "^4.2.0", "xlsx": "https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz", "yauzl": "^3.2.0", "zod": "^4.1.5" }, "devDependencies": { - "@bull-board/api": "^6.11.0", - "@bull-board/express": "^6.11.0", "@types/archiver": "^6.0.3", "@types/busboy": "^1.5.4", + "@types/cors": "^2.8.19", "@types/express": "^5.0.3", "@types/mailparser": "^3.4.6", "@types/microsoft-graph": "^2.40.1", @@ -75,6 +75,7 @@ "@types/node": "^24.0.12", "@types/yauzl": "^2.10.3", "ts-node-dev": "^2.0.0", + "tsconfig-paths": "^4.2.0", "typescript": "^5.8.3" } } diff --git a/packages/backend/src/api/controllers/api-key.controller.ts b/packages/backend/src/api/controllers/api-key.controller.ts index ad31352..97b2b95 100644 --- a/packages/backend/src/api/controllers/api-key.controller.ts +++ b/packages/backend/src/api/controllers/api-key.controller.ts @@ -1,7 +1,7 @@ import { Request, Response } from 'express'; import { ApiKeyService } from '../../services/ApiKeyService'; import { z } from 'zod'; -import { config } from '../../config'; +import { UserService } from '../../services/UserService'; const generateApiKeySchema = z.object({ name: z @@ -14,20 +14,27 @@ const generateApiKeySchema = z.object({ .positive('Only positive number is allowed') .max(730, 'The API key must expire within 2 years / 730 days.'), }); - export class ApiKeyController { + private userService = new UserService(); public async generateApiKey(req: Request, res: Response) { - if (config.app.isDemo) { - return res.status(403).json({ message: req.t('errors.demoMode') }); - } try { const { name, expiresInDays } = generateApiKeySchema.parse(req.body); if (!req.user || !req.user.sub) { return res.status(401).json({ message: 'Unauthorized' }); } const userId = req.user.sub; + const actor = await this.userService.findById(userId); + if (!actor) { + return res.status(401).json({ message: 'Unauthorized' }); + } - const key = await ApiKeyService.generate(userId, name, expiresInDays); + const key = await ApiKeyService.generate( + userId, + name, + expiresInDays, + actor, + req.ip || 'unknown' + ); res.status(201).json({ key }); } catch (error) { @@ -51,15 +58,16 @@ export class ApiKeyController { } public async deleteApiKey(req: Request, res: Response) { - if (config.app.isDemo) { - return res.status(403).json({ message: req.t('errors.demoMode') }); - } const { id } = req.params; if (!req.user || !req.user.sub) { return res.status(401).json({ message: 'Unauthorized' }); } const userId = req.user.sub; - await ApiKeyService.deleteKey(id, userId); + const actor = await this.userService.findById(userId); + if (!actor) { + return res.status(401).json({ message: 'Unauthorized' }); + } + await ApiKeyService.deleteKey(id, userId, actor, req.ip || 'unknown'); res.status(204).send({ message: req.t('apiKeys.deleteSuccess') }); } diff --git a/packages/backend/src/api/controllers/archived-email.controller.ts b/packages/backend/src/api/controllers/archived-email.controller.ts index 19a991a..2b3a25e 100644 --- a/packages/backend/src/api/controllers/archived-email.controller.ts +++ b/packages/backend/src/api/controllers/archived-email.controller.ts @@ -1,8 +1,10 @@ import { Request, Response } from 'express'; import { ArchivedEmailService } from '../../services/ArchivedEmailService'; -import { config } from '../../config'; +import { UserService } from '../../services/UserService'; +import { checkDeletionEnabled } from '../../helpers/deletionGuard'; export class ArchivedEmailController { + private userService = new UserService(); public getArchivedEmails = async (req: Request, res: Response): Promise => { try { const { ingestionSourceId } = req.params; @@ -35,8 +37,17 @@ export class ArchivedEmailController { if (!userId) { return res.status(401).json({ message: req.t('errors.unauthorized') }); } + const actor = await this.userService.findById(userId); + if (!actor) { + return res.status(401).json({ message: req.t('errors.unauthorized') }); + } - const email = await ArchivedEmailService.getArchivedEmailById(id, userId); + const email = await ArchivedEmailService.getArchivedEmailById( + id, + userId, + actor, + req.ip || 'unknown' + ); if (!email) { return res.status(404).json({ message: req.t('archivedEmail.notFound') }); } @@ -48,12 +59,18 @@ export class ArchivedEmailController { }; public deleteArchivedEmail = async (req: Request, res: Response): Promise => { - if (config.app.isDemo) { - return res.status(403).json({ message: req.t('errors.demoMode') }); - } try { + checkDeletionEnabled(); const { id } = req.params; - await ArchivedEmailService.deleteArchivedEmail(id); + const userId = req.user?.sub; + if (!userId) { + return res.status(401).json({ message: req.t('errors.unauthorized') }); + } + const actor = await this.userService.findById(userId); + if (!actor) { + return res.status(401).json({ message: req.t('errors.unauthorized') }); + } + await ArchivedEmailService.deleteArchivedEmail(id, actor, req.ip || 'unknown'); return res.status(204).send(); } catch (error) { console.error(`Delete archived email ${req.params.id} error:`, error); diff --git a/packages/backend/src/api/controllers/auth.controller.ts b/packages/backend/src/api/controllers/auth.controller.ts index dcd602c..e21a349 100644 --- a/packages/backend/src/api/controllers/auth.controller.ts +++ b/packages/backend/src/api/controllers/auth.controller.ts @@ -44,7 +44,7 @@ export class AuthController { { email, password, first_name, last_name }, true ); - const result = await this.#authService.login(email, password); + const result = await this.#authService.login(email, password, req.ip || 'unknown'); return res.status(201).json(result); } catch (error) { console.error('Setup error:', error); @@ -60,7 +60,7 @@ export class AuthController { } try { - const result = await this.#authService.login(email, password); + const result = await this.#authService.login(email, password, req.ip || 'unknown'); if (!result) { return res.status(401).json({ message: req.t('auth.login.invalidCredentials') }); diff --git a/packages/backend/src/api/controllers/iam.controller.ts b/packages/backend/src/api/controllers/iam.controller.ts index 713e908..4e6fed3 100644 --- a/packages/backend/src/api/controllers/iam.controller.ts +++ b/packages/backend/src/api/controllers/iam.controller.ts @@ -3,7 +3,6 @@ import { IamService } from '../../services/IamService'; import { PolicyValidator } from '../../iam-policy/policy-validator'; import type { CaslPolicy } from '@open-archiver/types'; import { logger } from '../../config/logger'; -import { config } from '../../config'; export class IamController { #iamService: IamService; @@ -42,9 +41,6 @@ export class IamController { }; public createRole = async (req: Request, res: Response) => { - if (config.app.isDemo) { - return res.status(403).json({ message: req.t('errors.demoMode') }); - } const { name, policies } = req.body; if (!name || !policies) { @@ -69,9 +65,6 @@ export class IamController { }; public deleteRole = async (req: Request, res: Response) => { - if (config.app.isDemo) { - return res.status(403).json({ message: req.t('errors.demoMode') }); - } const { id } = req.params; try { @@ -83,9 +76,6 @@ export class IamController { }; public updateRole = async (req: Request, res: Response) => { - if (config.app.isDemo) { - return res.status(403).json({ message: req.t('errors.demoMode') }); - } const { id } = req.params; const { name, policies } = req.body; diff --git a/packages/backend/src/api/controllers/ingestion.controller.ts b/packages/backend/src/api/controllers/ingestion.controller.ts index f63e6ec..f0d05d3 100644 --- a/packages/backend/src/api/controllers/ingestion.controller.ts +++ b/packages/backend/src/api/controllers/ingestion.controller.ts @@ -7,9 +7,11 @@ import { SafeIngestionSource, } from '@open-archiver/types'; import { logger } from '../../config/logger'; -import { config } from '../../config'; +import { UserService } from '../../services/UserService'; +import { checkDeletionEnabled } from '../../helpers/deletionGuard'; export class IngestionController { + private userService = new UserService(); /** * Converts an IngestionSource object to a safe version for client-side consumption * by removing the credentials. @@ -22,16 +24,22 @@ export class IngestionController { } public create = async (req: Request, res: Response): Promise => { - if (config.app.isDemo) { - return res.status(403).json({ message: req.t('errors.demoMode') }); - } try { const dto: CreateIngestionSourceDto = req.body; const userId = req.user?.sub; if (!userId) { return res.status(401).json({ message: req.t('errors.unauthorized') }); } - const newSource = await IngestionService.create(dto, userId); + const actor = await this.userService.findById(userId); + if (!actor) { + return res.status(401).json({ message: req.t('errors.unauthorized') }); + } + const newSource = await IngestionService.create( + dto, + userId, + actor, + req.ip || 'unknown' + ); const safeSource = this.toSafeIngestionSource(newSource); return res.status(201).json(safeSource); } catch (error: any) { @@ -74,13 +82,23 @@ export class IngestionController { }; public update = async (req: Request, res: Response): Promise => { - if (config.app.isDemo) { - return res.status(403).json({ message: req.t('errors.demoMode') }); - } try { const { id } = req.params; const dto: UpdateIngestionSourceDto = req.body; - const updatedSource = await IngestionService.update(id, dto); + const userId = req.user?.sub; + if (!userId) { + return res.status(401).json({ message: req.t('errors.unauthorized') }); + } + const actor = await this.userService.findById(userId); + if (!actor) { + return res.status(401).json({ message: req.t('errors.unauthorized') }); + } + const updatedSource = await IngestionService.update( + id, + dto, + actor, + req.ip || 'unknown' + ); const safeSource = this.toSafeIngestionSource(updatedSource); return res.status(200).json(safeSource); } catch (error) { @@ -93,26 +111,31 @@ export class IngestionController { }; public delete = async (req: Request, res: Response): Promise => { - if (config.app.isDemo) { - return res.status(403).json({ message: req.t('errors.demoMode') }); - } try { + checkDeletionEnabled(); const { id } = req.params; - await IngestionService.delete(id); + const userId = req.user?.sub; + if (!userId) { + return res.status(401).json({ message: req.t('errors.unauthorized') }); + } + const actor = await this.userService.findById(userId); + if (!actor) { + return res.status(401).json({ message: req.t('errors.unauthorized') }); + } + await IngestionService.delete(id, actor, req.ip || 'unknown'); return res.status(204).send(); } catch (error) { console.error(`Delete ingestion source ${req.params.id} error:`, error); if (error instanceof Error && error.message === 'Ingestion source not found') { return res.status(404).json({ message: req.t('ingestion.notFound') }); + } else if (error instanceof Error) { + return res.status(400).json({ message: error.message }); } return res.status(500).json({ message: req.t('errors.internalServerError') }); } }; public triggerInitialImport = async (req: Request, res: Response): Promise => { - if (config.app.isDemo) { - return res.status(403).json({ message: req.t('errors.demoMode') }); - } try { const { id } = req.params; await IngestionService.triggerInitialImport(id); @@ -127,12 +150,22 @@ export class IngestionController { }; public pause = async (req: Request, res: Response): Promise => { - if (config.app.isDemo) { - return res.status(403).json({ message: req.t('errors.demoMode') }); - } try { const { id } = req.params; - const updatedSource = await IngestionService.update(id, { status: 'paused' }); + const userId = req.user?.sub; + if (!userId) { + return res.status(401).json({ message: req.t('errors.unauthorized') }); + } + const actor = await this.userService.findById(userId); + if (!actor) { + return res.status(401).json({ message: req.t('errors.unauthorized') }); + } + const updatedSource = await IngestionService.update( + id, + { status: 'paused' }, + actor, + req.ip || 'unknown' + ); const safeSource = this.toSafeIngestionSource(updatedSource); return res.status(200).json(safeSource); } catch (error) { @@ -145,12 +178,17 @@ export class IngestionController { }; public triggerForceSync = async (req: Request, res: Response): Promise => { - if (config.app.isDemo) { - return res.status(403).json({ message: req.t('errors.demoMode') }); - } try { const { id } = req.params; - await IngestionService.triggerForceSync(id); + const userId = req.user?.sub; + if (!userId) { + return res.status(401).json({ message: req.t('errors.unauthorized') }); + } + const actor = await this.userService.findById(userId); + if (!actor) { + return res.status(401).json({ message: req.t('errors.unauthorized') }); + } + await IngestionService.triggerForceSync(id, actor, req.ip || 'unknown'); return res.status(202).json({ message: req.t('ingestion.forceSyncTriggered') }); } catch (error) { console.error(`Trigger force sync for ${req.params.id} error:`, error); diff --git a/packages/backend/src/api/controllers/integrity.controller.ts b/packages/backend/src/api/controllers/integrity.controller.ts new file mode 100644 index 0000000..d585b59 --- /dev/null +++ b/packages/backend/src/api/controllers/integrity.controller.ts @@ -0,0 +1,29 @@ +import { Request, Response } from 'express'; +import { IntegrityService } from '../../services/IntegrityService'; +import { z } from 'zod'; + +const checkIntegritySchema = z.object({ + id: z.string().uuid(), +}); + +export class IntegrityController { + private integrityService = new IntegrityService(); + + public checkIntegrity = async (req: Request, res: Response) => { + try { + const { id } = checkIntegritySchema.parse(req.params); + const results = await this.integrityService.checkEmailIntegrity(id); + res.status(200).json(results); + } catch (error) { + if (error instanceof z.ZodError) { + return res + .status(400) + .json({ message: req.t('api.requestBodyInvalid'), errors: error.message }); + } + if (error instanceof Error && error.message === 'Archived email not found') { + return res.status(404).json({ message: req.t('errors.notFound') }); + } + res.status(500).json({ message: req.t('errors.internalServerError') }); + } + }; +} diff --git a/packages/backend/src/api/controllers/jobs.controller.ts b/packages/backend/src/api/controllers/jobs.controller.ts new file mode 100644 index 0000000..3e45eba --- /dev/null +++ b/packages/backend/src/api/controllers/jobs.controller.ts @@ -0,0 +1,42 @@ +import { Request, Response } from 'express'; +import { JobsService } from '../../services/JobsService'; +import { + IGetQueueJobsRequestParams, + IGetQueueJobsRequestQuery, + JobStatus, +} from '@open-archiver/types'; + +export class JobsController { + private jobsService: JobsService; + + constructor() { + this.jobsService = new JobsService(); + } + + public getQueues = async (req: Request, res: Response) => { + try { + const queues = await this.jobsService.getQueues(); + res.status(200).json({ queues }); + } catch (error) { + res.status(500).json({ message: 'Error fetching queues', error }); + } + }; + + public getQueueJobs = async (req: Request, res: Response) => { + try { + const { queueName } = req.params as unknown as IGetQueueJobsRequestParams; + const { status, page, limit } = req.query as unknown as IGetQueueJobsRequestQuery; + const pageNumber = parseInt(page, 10) || 1; + const limitNumber = parseInt(limit, 10) || 10; + const queueDetails = await this.jobsService.getQueueDetails( + queueName, + status, + pageNumber, + limitNumber + ); + res.status(200).json(queueDetails); + } catch (error) { + res.status(500).json({ message: 'Error fetching queue jobs', error }); + } + }; +} diff --git a/packages/backend/src/api/controllers/search.controller.ts b/packages/backend/src/api/controllers/search.controller.ts index a7c86ee..9dcd2f1 100644 --- a/packages/backend/src/api/controllers/search.controller.ts +++ b/packages/backend/src/api/controllers/search.controller.ts @@ -31,7 +31,8 @@ export class SearchController { limit: limit ? parseInt(limit as string) : 10, matchingStrategy: matchingStrategy as MatchingStrategies, }, - userId + userId, + req.ip || 'unknown' ); res.status(200).json(results); diff --git a/packages/backend/src/api/controllers/settings.controller.ts b/packages/backend/src/api/controllers/settings.controller.ts index 6ebc730..5ffa180 100644 --- a/packages/backend/src/api/controllers/settings.controller.ts +++ b/packages/backend/src/api/controllers/settings.controller.ts @@ -1,8 +1,9 @@ import type { Request, Response } from 'express'; import { SettingsService } from '../../services/SettingsService'; -import { config } from '../../config'; +import { UserService } from '../../services/UserService'; const settingsService = new SettingsService(); +const userService = new UserService(); export const getSystemSettings = async (req: Request, res: Response) => { try { @@ -17,10 +18,18 @@ export const getSystemSettings = async (req: Request, res: Response) => { export const updateSystemSettings = async (req: Request, res: Response) => { try { // Basic validation can be performed here if necessary - if (config.app.isDemo) { - return res.status(403).json({ message: req.t('errors.demoMode') }); + if (!req.user || !req.user.sub) { + return res.status(401).json({ message: 'Unauthorized' }); } - const updatedSettings = await settingsService.updateSystemSettings(req.body); + const actor = await userService.findById(req.user.sub); + if (!actor) { + return res.status(401).json({ message: 'Unauthorized' }); + } + const updatedSettings = await settingsService.updateSystemSettings( + req.body, + actor, + req.ip || 'unknown' + ); res.status(200).json(updatedSettings); } catch (error) { // A more specific error could be logged here diff --git a/packages/backend/src/api/controllers/user.controller.ts b/packages/backend/src/api/controllers/user.controller.ts index 940e043..418c1de 100644 --- a/packages/backend/src/api/controllers/user.controller.ts +++ b/packages/backend/src/api/controllers/user.controller.ts @@ -3,7 +3,6 @@ import { UserService } from '../../services/UserService'; import * as schema from '../../database/schema'; import { sql } from 'drizzle-orm'; import { db } from '../../database'; -import { config } from '../../config'; const userService = new UserService(); @@ -21,27 +20,39 @@ export const getUser = async (req: Request, res: Response) => { }; export const createUser = async (req: Request, res: Response) => { - if (config.app.isDemo) { - return res.status(403).json({ message: req.t('errors.demoMode') }); - } const { email, first_name, last_name, password, roleId } = req.body; + if (!req.user || !req.user.sub) { + return res.status(401).json({ message: 'Unauthorized' }); + } + const actor = await userService.findById(req.user.sub); + if (!actor) { + return res.status(401).json({ message: 'Unauthorized' }); + } const newUser = await userService.createUser( { email, first_name, last_name, password }, - roleId + roleId, + actor, + req.ip || 'unknown' ); res.status(201).json(newUser); }; export const updateUser = async (req: Request, res: Response) => { - if (config.app.isDemo) { - return res.status(403).json({ message: req.t('errors.demoMode') }); - } const { email, first_name, last_name, roleId } = req.body; + if (!req.user || !req.user.sub) { + return res.status(401).json({ message: 'Unauthorized' }); + } + const actor = await userService.findById(req.user.sub); + if (!actor) { + return res.status(401).json({ message: 'Unauthorized' }); + } const updatedUser = await userService.updateUser( req.params.id, { email, first_name, last_name }, - roleId + roleId, + actor, + req.ip || 'unknown' ); if (!updatedUser) { return res.status(404).json({ message: req.t('user.notFound') }); @@ -50,9 +61,6 @@ export const updateUser = async (req: Request, res: Response) => { }; export const deleteUser = async (req: Request, res: Response) => { - if (config.app.isDemo) { - return res.status(403).json({ message: req.t('errors.demoMode') }); - } const userCountResult = await db.select({ count: sql`count(*)` }).from(schema.users); const isOnlyUser = Number(userCountResult[0].count) === 1; @@ -61,6 +69,13 @@ export const deleteUser = async (req: Request, res: Response) => { message: req.t('user.cannotDeleteOnlyUser'), }); } - await userService.deleteUser(req.params.id); + if (!req.user || !req.user.sub) { + return res.status(401).json({ message: 'Unauthorized' }); + } + const actor = await userService.findById(req.user.sub); + if (!actor) { + return res.status(401).json({ message: 'Unauthorized' }); + } + await userService.deleteUser(req.params.id, actor, req.ip || 'unknown'); res.status(204).send(); }; diff --git a/packages/backend/src/api/middleware/rateLimiter.ts b/packages/backend/src/api/middleware/rateLimiter.ts index b0f4568..de40c2c 100644 --- a/packages/backend/src/api/middleware/rateLimiter.ts +++ b/packages/backend/src/api/middleware/rateLimiter.ts @@ -1,4 +1,4 @@ -import rateLimit from 'express-rate-limit'; +import { rateLimit, ipKeyGenerator } from 'express-rate-limit'; import { config } from '../../config'; const windowInMinutes = Math.ceil(config.api.rateLimit.windowMs / 60000); @@ -6,6 +6,11 @@ const windowInMinutes = Math.ceil(config.api.rateLimit.windowMs / 60000); export const rateLimiter = rateLimit({ windowMs: config.api.rateLimit.windowMs, max: config.api.rateLimit.max, + keyGenerator: (req, res) => { + // Use the real IP address of the client, even if it's behind a proxy. + // `app.set('trust proxy', true)` in `server.ts`. + return ipKeyGenerator(req.ip || 'unknown'); + }, message: { status: 429, message: `Too many requests from this IP, please try again after ${windowInMinutes} minutes`, diff --git a/packages/backend/src/api/routes/api-key.routes.ts b/packages/backend/src/api/routes/api-key.routes.ts index 9691f43..3f6e4de 100644 --- a/packages/backend/src/api/routes/api-key.routes.ts +++ b/packages/backend/src/api/routes/api-key.routes.ts @@ -3,7 +3,7 @@ import { ApiKeyController } from '../controllers/api-key.controller'; import { requireAuth } from '../middleware/requireAuth'; import { AuthService } from '../../services/AuthService'; -export const apiKeyRoutes = (authService: AuthService) => { +export const apiKeyRoutes = (authService: AuthService): Router => { const router = Router(); const controller = new ApiKeyController(); diff --git a/packages/backend/src/api/routes/integrity.routes.ts b/packages/backend/src/api/routes/integrity.routes.ts new file mode 100644 index 0000000..bcd5d74 --- /dev/null +++ b/packages/backend/src/api/routes/integrity.routes.ts @@ -0,0 +1,16 @@ +import { Router } from 'express'; +import { IntegrityController } from '../controllers/integrity.controller'; +import { requireAuth } from '../middleware/requireAuth'; +import { requirePermission } from '../middleware/requirePermission'; +import { AuthService } from '../../services/AuthService'; + +export const integrityRoutes = (authService: AuthService): Router => { + const router = Router(); + const controller = new IntegrityController(); + + router.use(requireAuth(authService)); + + router.get('/:id', requirePermission('read', 'archive'), controller.checkIntegrity); + + return router; +}; diff --git a/packages/backend/src/api/routes/jobs.routes.ts b/packages/backend/src/api/routes/jobs.routes.ts new file mode 100644 index 0000000..9387c14 --- /dev/null +++ b/packages/backend/src/api/routes/jobs.routes.ts @@ -0,0 +1,25 @@ +import { Router } from 'express'; +import { JobsController } from '../controllers/jobs.controller'; +import { requireAuth } from '../middleware/requireAuth'; +import { requirePermission } from '../middleware/requirePermission'; +import { AuthService } from '../../services/AuthService'; + +export const createJobsRouter = (authService: AuthService): Router => { + const router = Router(); + const jobsController = new JobsController(); + + router.use(requireAuth(authService)); + + router.get( + '/queues', + requirePermission('manage', 'all', 'user.requiresSuperAdminRole'), + jobsController.getQueues + ); + router.get( + '/queues/:queueName', + requirePermission('manage', 'all', 'user.requiresSuperAdminRole'), + jobsController.getQueueJobs + ); + + return router; +}; diff --git a/packages/backend/src/api/server.ts b/packages/backend/src/api/server.ts new file mode 100644 index 0000000..f3f74a5 --- /dev/null +++ b/packages/backend/src/api/server.ts @@ -0,0 +1,170 @@ +import express, { Express } from 'express'; +import cors from 'cors'; +import dotenv from 'dotenv'; +import { AuthController } from './controllers/auth.controller'; +import { IngestionController } from './controllers/ingestion.controller'; +import { ArchivedEmailController } from './controllers/archived-email.controller'; +import { StorageController } from './controllers/storage.controller'; +import { SearchController } from './controllers/search.controller'; +import { IamController } from './controllers/iam.controller'; +import { createAuthRouter } from './routes/auth.routes'; +import { createIamRouter } from './routes/iam.routes'; +import { createIngestionRouter } from './routes/ingestion.routes'; +import { createArchivedEmailRouter } from './routes/archived-email.routes'; +import { createStorageRouter } from './routes/storage.routes'; +import { createSearchRouter } from './routes/search.routes'; +import { createDashboardRouter } from './routes/dashboard.routes'; +import { createUploadRouter } from './routes/upload.routes'; +import { createUserRouter } from './routes/user.routes'; +import { createSettingsRouter } from './routes/settings.routes'; +import { apiKeyRoutes } from './routes/api-key.routes'; +import { integrityRoutes } from './routes/integrity.routes'; +import { createJobsRouter } from './routes/jobs.routes'; +import { AuthService } from '../services/AuthService'; +import { AuditService } from '../services/AuditService'; +import { UserService } from '../services/UserService'; +import { IamService } from '../services/IamService'; +import { StorageService } from '../services/StorageService'; +import { SearchService } from '../services/SearchService'; +import { SettingsService } from '../services/SettingsService'; +import i18next from 'i18next'; +import FsBackend from 'i18next-fs-backend'; +import i18nextMiddleware from 'i18next-http-middleware'; +import path from 'path'; +import { logger } from '../config/logger'; +import { rateLimiter } from './middleware/rateLimiter'; +import { config } from '../config'; +import { OpenArchiverFeature } from '@open-archiver/types'; +// Define the "plugin" interface +export interface ArchiverModule { + initialize: (app: Express, authService: AuthService) => Promise; + name: OpenArchiverFeature; +} + +export let authService: AuthService; + +export async function createServer(modules: ArchiverModule[] = []): Promise { + // Load environment variables + dotenv.config(); + + // --- Environment Variable Validation --- + const { JWT_SECRET, JWT_EXPIRES_IN } = process.env; + + if (!JWT_SECRET || !JWT_EXPIRES_IN) { + throw new Error( + 'Missing required environment variables for the backend: JWT_SECRET, JWT_EXPIRES_IN.' + ); + } + + // --- Dependency Injection Setup --- + const auditService = new AuditService(); + const userService = new UserService(); + authService = new AuthService(userService, auditService, JWT_SECRET, JWT_EXPIRES_IN); + const authController = new AuthController(authService, userService); + const ingestionController = new IngestionController(); + const archivedEmailController = new ArchivedEmailController(); + const storageService = new StorageService(); + const storageController = new StorageController(storageService); + const searchService = new SearchService(); + const searchController = new SearchController(); + const iamService = new IamService(); + const iamController = new IamController(iamService); + const settingsService = new SettingsService(); + + // --- i18next Initialization --- + const initializeI18next = async () => { + const systemSettings = await settingsService.getSystemSettings(); + const defaultLanguage = systemSettings?.language || 'en'; + logger.info({ language: defaultLanguage }, 'Default language'); + await i18next.use(FsBackend).init({ + lng: defaultLanguage, + fallbackLng: defaultLanguage, + ns: ['translation'], + defaultNS: 'translation', + backend: { + loadPath: path.resolve(__dirname, '../locales/{{lng}}/{{ns}}.json'), + }, + }); + }; + + // Initialize i18next + await initializeI18next(); + logger.info({}, 'i18next initialized'); + + // Configure the Meilisearch index on startup + logger.info({}, 'Configuring email index...'); + await searchService.configureEmailIndex(); + + const app = express(); + + // --- CORS --- + app.use( + cors({ + origin: process.env.APP_URL || 'http://localhost:3000', + credentials: true, + }) + ); + + // Trust the proxy to get the real IP address of the client. + // This is important for audit logging and security. + app.set('trust proxy', true); + + // --- Routes --- + const authRouter = createAuthRouter(authController); + const ingestionRouter = createIngestionRouter(ingestionController, authService); + const archivedEmailRouter = createArchivedEmailRouter(archivedEmailController, authService); + const storageRouter = createStorageRouter(storageController, authService); + const searchRouter = createSearchRouter(searchController, authService); + const dashboardRouter = createDashboardRouter(authService); + const iamRouter = createIamRouter(iamController, authService); + const uploadRouter = createUploadRouter(authService); + const userRouter = createUserRouter(authService); + const settingsRouter = createSettingsRouter(authService); + const apiKeyRouter = apiKeyRoutes(authService); + const integrityRouter = integrityRoutes(authService); + const jobsRouter = createJobsRouter(authService); + + // Middleware for all other routes + app.use((req, res, next) => { + // exclude certain API endpoints from the rate limiter, for example status, system settings + const excludedPatterns = [/^\/v\d+\/auth\/status$/, /^\/v\d+\/settings\/system$/]; + for (const pattern of excludedPatterns) { + if (pattern.test(req.path)) { + return next(); + } + } + rateLimiter(req, res, next); + }); + app.use(express.json()); + app.use(express.urlencoded({ extended: true })); + + // i18n middleware + app.use(i18nextMiddleware.handle(i18next)); + + app.use(`/${config.api.version}/auth`, authRouter); + app.use(`/${config.api.version}/iam`, iamRouter); + app.use(`/${config.api.version}/upload`, uploadRouter); + app.use(`/${config.api.version}/ingestion-sources`, ingestionRouter); + app.use(`/${config.api.version}/archived-emails`, archivedEmailRouter); + app.use(`/${config.api.version}/storage`, storageRouter); + app.use(`/${config.api.version}/search`, searchRouter); + app.use(`/${config.api.version}/dashboard`, dashboardRouter); + app.use(`/${config.api.version}/users`, userRouter); + app.use(`/${config.api.version}/settings`, settingsRouter); + app.use(`/${config.api.version}/api-keys`, apiKeyRouter); + app.use(`/${config.api.version}/integrity`, integrityRouter); + app.use(`/${config.api.version}/jobs`, jobsRouter); + + // Load all provided extension modules + for (const module of modules) { + await module.initialize(app, authService); + console.log(`🏢 Enterprise module loaded: ${module.name}`); + } + app.get('/', (req, res) => { + res.send('Backend is running!!'); + }); + + console.log('✅ Core OSS modules loaded.'); + + return app; +} diff --git a/packages/backend/src/config/api.ts b/packages/backend/src/config/api.ts index d82a244..0175c21 100644 --- a/packages/backend/src/config/api.ts +++ b/packages/backend/src/config/api.ts @@ -9,4 +9,5 @@ export const apiConfig = { ? parseInt(process.env.RATE_LIMIT_MAX_REQUESTS, 10) : 100, // limit each IP to 100 requests per windowMs }, + version: 'v1', }; diff --git a/packages/backend/src/config/app.ts b/packages/backend/src/config/app.ts index f527986..4e579b0 100644 --- a/packages/backend/src/config/app.ts +++ b/packages/backend/src/config/app.ts @@ -4,6 +4,7 @@ export const app = { nodeEnv: process.env.NODE_ENV || 'development', port: process.env.PORT_BACKEND ? parseInt(process.env.PORT_BACKEND, 10) : 4000, encryptionKey: process.env.ENCRYPTION_KEY, - isDemo: process.env.IS_DEMO === 'true', syncFrequency: process.env.SYNC_FREQUENCY || '* * * * *', //default to 1 minute + enableDeletion: process.env.ENABLE_DELETION === 'true', + allInclusiveArchive: process.env.ALL_INCLUSIVE_ARCHIVE === 'true', }; diff --git a/packages/backend/src/config/storage.ts b/packages/backend/src/config/storage.ts index 3d1e4cc..e94124f 100644 --- a/packages/backend/src/config/storage.ts +++ b/packages/backend/src/config/storage.ts @@ -2,9 +2,14 @@ import { StorageConfig } from '@open-archiver/types'; import 'dotenv/config'; const storageType = process.env.STORAGE_TYPE; +const encryptionKey = process.env.STORAGE_ENCRYPTION_KEY; const openArchiverFolderName = 'open-archiver'; let storageConfig: StorageConfig; +if (encryptionKey && !/^[a-fA-F0-9]{64}$/.test(encryptionKey)) { + throw new Error('STORAGE_ENCRYPTION_KEY must be a 64-character hex string (32 bytes)'); +} + if (storageType === 'local') { if (!process.env.STORAGE_LOCAL_ROOT_PATH) { throw new Error('STORAGE_LOCAL_ROOT_PATH is not defined in the environment variables'); @@ -13,6 +18,7 @@ if (storageType === 'local') { type: 'local', rootPath: process.env.STORAGE_LOCAL_ROOT_PATH, openArchiverFolderName: openArchiverFolderName, + encryptionKey: encryptionKey, }; } else if (storageType === 's3') { if ( @@ -32,6 +38,7 @@ if (storageType === 'local') { region: process.env.STORAGE_S3_REGION, forcePathStyle: process.env.STORAGE_S3_FORCE_PATH_STYLE === 'true', openArchiverFolderName: openArchiverFolderName, + encryptionKey: encryptionKey, }; } else { throw new Error(`Invalid STORAGE_TYPE: ${storageType}`); diff --git a/packages/backend/src/database/index.ts b/packages/backend/src/database/index.ts index 8d6c85a..d6b78b5 100644 --- a/packages/backend/src/database/index.ts +++ b/packages/backend/src/database/index.ts @@ -1,4 +1,4 @@ -import { drizzle } from 'drizzle-orm/postgres-js'; +import { drizzle, PostgresJsDatabase } from 'drizzle-orm/postgres-js'; import postgres from 'postgres'; import 'dotenv/config'; @@ -12,3 +12,4 @@ if (!process.env.DATABASE_URL) { const connectionString = encodeDatabaseUrl(process.env.DATABASE_URL); const client = postgres(connectionString); export const db = drizzle(client, { schema }); +export type Database = PostgresJsDatabase; diff --git a/packages/backend/src/database/migrations/0021_nosy_veda.sql b/packages/backend/src/database/migrations/0021_nosy_veda.sql new file mode 100644 index 0000000..ad5c898 --- /dev/null +++ b/packages/backend/src/database/migrations/0021_nosy_veda.sql @@ -0,0 +1,9 @@ +CREATE TYPE "public"."audit_log_action" AS ENUM('CREATE', 'READ', 'UPDATE', 'DELETE', 'LOGIN', 'LOGOUT', 'SETUP', 'IMPORT', 'PAUSE', 'SYNC', 'UPLOAD', 'SEARCH', 'DOWNLOAD', 'GENERATE');--> statement-breakpoint +CREATE TYPE "public"."audit_log_target_type" AS ENUM('ApiKey', 'ArchivedEmail', 'Dashboard', 'IngestionSource', 'Role', 'SystemSettings', 'User', 'File');--> statement-breakpoint +ALTER TABLE "audit_logs" ALTER COLUMN "target_type" SET DATA TYPE "public"."audit_log_target_type" USING "target_type"::"public"."audit_log_target_type";--> statement-breakpoint +ALTER TABLE "audit_logs" ADD COLUMN "previous_hash" varchar(64);--> statement-breakpoint +ALTER TABLE "audit_logs" ADD COLUMN "actor_ip" text;--> statement-breakpoint +ALTER TABLE "audit_logs" ADD COLUMN "action_type" "audit_log_action" NOT NULL;--> statement-breakpoint +ALTER TABLE "audit_logs" ADD COLUMN "current_hash" varchar(64) NOT NULL;--> statement-breakpoint +ALTER TABLE "audit_logs" DROP COLUMN "action";--> statement-breakpoint +ALTER TABLE "audit_logs" DROP COLUMN "is_tamper_evident"; \ No newline at end of file diff --git a/packages/backend/src/database/migrations/0022_complete_triton.sql b/packages/backend/src/database/migrations/0022_complete_triton.sql new file mode 100644 index 0000000..011cc19 --- /dev/null +++ b/packages/backend/src/database/migrations/0022_complete_triton.sql @@ -0,0 +1,4 @@ +ALTER TABLE "attachments" DROP CONSTRAINT "attachments_content_hash_sha256_unique";--> statement-breakpoint +ALTER TABLE "attachments" ADD COLUMN "ingestion_source_id" uuid;--> statement-breakpoint +ALTER TABLE "attachments" ADD CONSTRAINT "attachments_ingestion_source_id_ingestion_sources_id_fk" FOREIGN KEY ("ingestion_source_id") REFERENCES "public"."ingestion_sources"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +CREATE UNIQUE INDEX "source_hash_unique" ON "attachments" USING btree ("ingestion_source_id","content_hash_sha256"); \ No newline at end of file diff --git a/packages/backend/src/database/migrations/0023_swift_swordsman.sql b/packages/backend/src/database/migrations/0023_swift_swordsman.sql new file mode 100644 index 0000000..cf8e632 --- /dev/null +++ b/packages/backend/src/database/migrations/0023_swift_swordsman.sql @@ -0,0 +1,2 @@ +DROP INDEX "source_hash_unique";--> statement-breakpoint +CREATE INDEX "source_hash_idx" ON "attachments" USING btree ("ingestion_source_id","content_hash_sha256"); \ No newline at end of file diff --git a/packages/backend/src/database/migrations/meta/0020_snapshot.json b/packages/backend/src/database/migrations/meta/0020_snapshot.json index 57eeb9e..6d22496 100644 --- a/packages/backend/src/database/migrations/meta/0020_snapshot.json +++ b/packages/backend/src/database/migrations/meta/0020_snapshot.json @@ -1,1245 +1,1178 @@ { - "id": "ed44e48c-b43b-402b-bf9d-5b5312edf42e", - "prevId": "a83bff5b-47ef-43e9-8e7d-667af35a206f", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.archived_emails": { - "name": "archived_emails", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true, - "default": "gen_random_uuid()" - }, - "thread_id": { - "name": "thread_id", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "ingestion_source_id": { - "name": "ingestion_source_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "user_email": { - "name": "user_email", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "message_id_header": { - "name": "message_id_header", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sent_at": { - "name": "sent_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "subject": { - "name": "subject", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sender_name": { - "name": "sender_name", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sender_email": { - "name": "sender_email", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "recipients": { - "name": "recipients", - "type": "jsonb", - "primaryKey": false, - "notNull": false - }, - "storage_path": { - "name": "storage_path", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "storage_hash_sha256": { - "name": "storage_hash_sha256", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "size_bytes": { - "name": "size_bytes", - "type": "bigint", - "primaryKey": false, - "notNull": true - }, - "is_indexed": { - "name": "is_indexed", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "has_attachments": { - "name": "has_attachments", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "is_on_legal_hold": { - "name": "is_on_legal_hold", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "archived_at": { - "name": "archived_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "path": { - "name": "path", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "tags": { - "name": "tags", - "type": "jsonb", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "thread_id_idx": { - "name": "thread_id_idx", - "columns": [ - { - "expression": "thread_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "archived_emails_ingestion_source_id_ingestion_sources_id_fk": { - "name": "archived_emails_ingestion_source_id_ingestion_sources_id_fk", - "tableFrom": "archived_emails", - "tableTo": "ingestion_sources", - "columnsFrom": [ - "ingestion_source_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.attachments": { - "name": "attachments", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true, - "default": "gen_random_uuid()" - }, - "filename": { - "name": "filename", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "mime_type": { - "name": "mime_type", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "size_bytes": { - "name": "size_bytes", - "type": "bigint", - "primaryKey": false, - "notNull": true - }, - "content_hash_sha256": { - "name": "content_hash_sha256", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "storage_path": { - "name": "storage_path", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "attachments_content_hash_sha256_unique": { - "name": "attachments_content_hash_sha256_unique", - "nullsNotDistinct": false, - "columns": [ - "content_hash_sha256" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.email_attachments": { - "name": "email_attachments", - "schema": "", - "columns": { - "email_id": { - "name": "email_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "attachment_id": { - "name": "attachment_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "email_attachments_email_id_archived_emails_id_fk": { - "name": "email_attachments_email_id_archived_emails_id_fk", - "tableFrom": "email_attachments", - "tableTo": "archived_emails", - "columnsFrom": [ - "email_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "email_attachments_attachment_id_attachments_id_fk": { - "name": "email_attachments_attachment_id_attachments_id_fk", - "tableFrom": "email_attachments", - "tableTo": "attachments", - "columnsFrom": [ - "attachment_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "restrict", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "email_attachments_email_id_attachment_id_pk": { - "name": "email_attachments_email_id_attachment_id_pk", - "columns": [ - "email_id", - "attachment_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.audit_logs": { - "name": "audit_logs", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "bigserial", - "primaryKey": true, - "notNull": true - }, - "timestamp": { - "name": "timestamp", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "actor_identifier": { - "name": "actor_identifier", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "action": { - "name": "action", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "target_type": { - "name": "target_type", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "target_id": { - "name": "target_id", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "details": { - "name": "details", - "type": "jsonb", - "primaryKey": false, - "notNull": false - }, - "is_tamper_evident": { - "name": "is_tamper_evident", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.ediscovery_cases": { - "name": "ediscovery_cases", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true, - "default": "gen_random_uuid()" - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "status": { - "name": "status", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'open'" - }, - "created_by_identifier": { - "name": "created_by_identifier", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "ediscovery_cases_name_unique": { - "name": "ediscovery_cases_name_unique", - "nullsNotDistinct": false, - "columns": [ - "name" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.export_jobs": { - "name": "export_jobs", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true, - "default": "gen_random_uuid()" - }, - "case_id": { - "name": "case_id", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "format": { - "name": "format", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "status": { - "name": "status", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'pending'" - }, - "query": { - "name": "query", - "type": "jsonb", - "primaryKey": false, - "notNull": true - }, - "file_path": { - "name": "file_path", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "created_by_identifier": { - "name": "created_by_identifier", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "completed_at": { - "name": "completed_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "export_jobs_case_id_ediscovery_cases_id_fk": { - "name": "export_jobs_case_id_ediscovery_cases_id_fk", - "tableFrom": "export_jobs", - "tableTo": "ediscovery_cases", - "columnsFrom": [ - "case_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.legal_holds": { - "name": "legal_holds", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true, - "default": "gen_random_uuid()" - }, - "case_id": { - "name": "case_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "custodian_id": { - "name": "custodian_id", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "hold_criteria": { - "name": "hold_criteria", - "type": "jsonb", - "primaryKey": false, - "notNull": false - }, - "reason": { - "name": "reason", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "applied_by_identifier": { - "name": "applied_by_identifier", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applied_at": { - "name": "applied_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "removed_at": { - "name": "removed_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "legal_holds_case_id_ediscovery_cases_id_fk": { - "name": "legal_holds_case_id_ediscovery_cases_id_fk", - "tableFrom": "legal_holds", - "tableTo": "ediscovery_cases", - "columnsFrom": [ - "case_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "legal_holds_custodian_id_custodians_id_fk": { - "name": "legal_holds_custodian_id_custodians_id_fk", - "tableFrom": "legal_holds", - "tableTo": "custodians", - "columnsFrom": [ - "custodian_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.retention_policies": { - "name": "retention_policies", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true, - "default": "gen_random_uuid()" - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "priority": { - "name": "priority", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "retention_period_days": { - "name": "retention_period_days", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "action_on_expiry": { - "name": "action_on_expiry", - "type": "retention_action", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "is_enabled": { - "name": "is_enabled", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": true - }, - "conditions": { - "name": "conditions", - "type": "jsonb", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "retention_policies_name_unique": { - "name": "retention_policies_name_unique", - "nullsNotDistinct": false, - "columns": [ - "name" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.custodians": { - "name": "custodians", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true, - "default": "gen_random_uuid()" - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "display_name": { - "name": "display_name", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "source_type": { - "name": "source_type", - "type": "ingestion_provider", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "custodians_email_unique": { - "name": "custodians_email_unique", - "nullsNotDistinct": false, - "columns": [ - "email" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.ingestion_sources": { - "name": "ingestion_sources", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true, - "default": "gen_random_uuid()" - }, - "user_id": { - "name": "user_id", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "provider": { - "name": "provider", - "type": "ingestion_provider", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "credentials": { - "name": "credentials", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "status": { - "name": "status", - "type": "ingestion_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'pending_auth'" - }, - "last_sync_started_at": { - "name": "last_sync_started_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "last_sync_finished_at": { - "name": "last_sync_finished_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false - }, - "last_sync_status_message": { - "name": "last_sync_status_message", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sync_state": { - "name": "sync_state", - "type": "jsonb", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": { - "ingestion_sources_user_id_users_id_fk": { - "name": "ingestion_sources_user_id_users_id_fk", - "tableFrom": "ingestion_sources", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.roles": { - "name": "roles", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true, - "default": "gen_random_uuid()" - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "policies": { - "name": "policies", - "type": "jsonb", - "primaryKey": false, - "notNull": true, - "default": "'[]'::jsonb" - }, - "slug": { - "name": "slug", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "roles_name_unique": { - "name": "roles_name_unique", - "nullsNotDistinct": false, - "columns": [ - "name" - ] - }, - "roles_slug_unique": { - "name": "roles_slug_unique", - "nullsNotDistinct": false, - "columns": [ - "slug" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.sessions": { - "name": "sessions", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "expires_at": { - "name": "expires_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "sessions_user_id_users_id_fk": { - "name": "sessions_user_id_users_id_fk", - "tableFrom": "sessions", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.user_roles": { - "name": "user_roles", - "schema": "", - "columns": { - "user_id": { - "name": "user_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "role_id": { - "name": "role_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "user_roles_user_id_users_id_fk": { - "name": "user_roles_user_id_users_id_fk", - "tableFrom": "user_roles", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "user_roles_role_id_roles_id_fk": { - "name": "user_roles_role_id_roles_id_fk", - "tableFrom": "user_roles", - "tableTo": "roles", - "columnsFrom": [ - "role_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "user_roles_user_id_role_id_pk": { - "name": "user_roles_user_id_role_id_pk", - "columns": [ - "user_id", - "role_id" - ] - } - }, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.users": { - "name": "users", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true, - "default": "gen_random_uuid()" - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "first_name": { - "name": "first_name", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "last_name": { - "name": "last_name", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "provider": { - "name": "provider", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'local'" - }, - "provider_id": { - "name": "provider_id", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "users_email_unique": { - "name": "users_email_unique", - "nullsNotDistinct": false, - "columns": [ - "email" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.system_settings": { - "name": "system_settings", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "config": { - "name": "config", - "type": "jsonb", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.api_keys": { - "name": "api_keys", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true, - "default": "gen_random_uuid()" - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "key": { - "name": "key", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "key_hash": { - "name": "key_hash", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expires_at": { - "name": "expires_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": { - "api_keys_user_id_users_id_fk": { - "name": "api_keys_user_id_users_id_fk", - "tableFrom": "api_keys", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": { - "public.retention_action": { - "name": "retention_action", - "schema": "public", - "values": [ - "delete_permanently", - "notify_admin" - ] - }, - "public.ingestion_provider": { - "name": "ingestion_provider", - "schema": "public", - "values": [ - "google_workspace", - "microsoft_365", - "generic_imap", - "pst_import", - "eml_import", - "mbox_import" - ] - }, - "public.ingestion_status": { - "name": "ingestion_status", - "schema": "public", - "values": [ - "active", - "paused", - "error", - "pending_auth", - "syncing", - "importing", - "auth_success", - "imported" - ] - } - }, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file + "id": "ed44e48c-b43b-402b-bf9d-5b5312edf42e", + "prevId": "a83bff5b-47ef-43e9-8e7d-667af35a206f", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.archived_emails": { + "name": "archived_emails", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "thread_id": { + "name": "thread_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "ingestion_source_id": { + "name": "ingestion_source_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "user_email": { + "name": "user_email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "message_id_header": { + "name": "message_id_header", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sent_at": { + "name": "sent_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true + }, + "subject": { + "name": "subject", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sender_name": { + "name": "sender_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sender_email": { + "name": "sender_email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "recipients": { + "name": "recipients", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "storage_path": { + "name": "storage_path", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "storage_hash_sha256": { + "name": "storage_hash_sha256", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "size_bytes": { + "name": "size_bytes", + "type": "bigint", + "primaryKey": false, + "notNull": true + }, + "is_indexed": { + "name": "is_indexed", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "has_attachments": { + "name": "has_attachments", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "is_on_legal_hold": { + "name": "is_on_legal_hold", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "archived_at": { + "name": "archived_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "tags": { + "name": "tags", + "type": "jsonb", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "thread_id_idx": { + "name": "thread_id_idx", + "columns": [ + { + "expression": "thread_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "archived_emails_ingestion_source_id_ingestion_sources_id_fk": { + "name": "archived_emails_ingestion_source_id_ingestion_sources_id_fk", + "tableFrom": "archived_emails", + "tableTo": "ingestion_sources", + "columnsFrom": ["ingestion_source_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.attachments": { + "name": "attachments", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "filename": { + "name": "filename", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "mime_type": { + "name": "mime_type", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "size_bytes": { + "name": "size_bytes", + "type": "bigint", + "primaryKey": false, + "notNull": true + }, + "content_hash_sha256": { + "name": "content_hash_sha256", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "storage_path": { + "name": "storage_path", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "attachments_content_hash_sha256_unique": { + "name": "attachments_content_hash_sha256_unique", + "nullsNotDistinct": false, + "columns": ["content_hash_sha256"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.email_attachments": { + "name": "email_attachments", + "schema": "", + "columns": { + "email_id": { + "name": "email_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "attachment_id": { + "name": "attachment_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "email_attachments_email_id_archived_emails_id_fk": { + "name": "email_attachments_email_id_archived_emails_id_fk", + "tableFrom": "email_attachments", + "tableTo": "archived_emails", + "columnsFrom": ["email_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "email_attachments_attachment_id_attachments_id_fk": { + "name": "email_attachments_attachment_id_attachments_id_fk", + "tableFrom": "email_attachments", + "tableTo": "attachments", + "columnsFrom": ["attachment_id"], + "columnsTo": ["id"], + "onDelete": "restrict", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "email_attachments_email_id_attachment_id_pk": { + "name": "email_attachments_email_id_attachment_id_pk", + "columns": ["email_id", "attachment_id"] + } + }, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.audit_logs": { + "name": "audit_logs", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "bigserial", + "primaryKey": true, + "notNull": true + }, + "timestamp": { + "name": "timestamp", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "actor_identifier": { + "name": "actor_identifier", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "action": { + "name": "action", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "target_type": { + "name": "target_type", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "target_id": { + "name": "target_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "details": { + "name": "details", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "is_tamper_evident": { + "name": "is_tamper_evident", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.ediscovery_cases": { + "name": "ediscovery_cases", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'open'" + }, + "created_by_identifier": { + "name": "created_by_identifier", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "ediscovery_cases_name_unique": { + "name": "ediscovery_cases_name_unique", + "nullsNotDistinct": false, + "columns": ["name"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.export_jobs": { + "name": "export_jobs", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "case_id": { + "name": "case_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "format": { + "name": "format", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'pending'" + }, + "query": { + "name": "query", + "type": "jsonb", + "primaryKey": false, + "notNull": true + }, + "file_path": { + "name": "file_path", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_by_identifier": { + "name": "created_by_identifier", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "completed_at": { + "name": "completed_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "export_jobs_case_id_ediscovery_cases_id_fk": { + "name": "export_jobs_case_id_ediscovery_cases_id_fk", + "tableFrom": "export_jobs", + "tableTo": "ediscovery_cases", + "columnsFrom": ["case_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.legal_holds": { + "name": "legal_holds", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "case_id": { + "name": "case_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "custodian_id": { + "name": "custodian_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "hold_criteria": { + "name": "hold_criteria", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "reason": { + "name": "reason", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "applied_by_identifier": { + "name": "applied_by_identifier", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "applied_at": { + "name": "applied_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "removed_at": { + "name": "removed_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "legal_holds_case_id_ediscovery_cases_id_fk": { + "name": "legal_holds_case_id_ediscovery_cases_id_fk", + "tableFrom": "legal_holds", + "tableTo": "ediscovery_cases", + "columnsFrom": ["case_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "legal_holds_custodian_id_custodians_id_fk": { + "name": "legal_holds_custodian_id_custodians_id_fk", + "tableFrom": "legal_holds", + "tableTo": "custodians", + "columnsFrom": ["custodian_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.retention_policies": { + "name": "retention_policies", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "priority": { + "name": "priority", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "retention_period_days": { + "name": "retention_period_days", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "action_on_expiry": { + "name": "action_on_expiry", + "type": "retention_action", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "is_enabled": { + "name": "is_enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "conditions": { + "name": "conditions", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "retention_policies_name_unique": { + "name": "retention_policies_name_unique", + "nullsNotDistinct": false, + "columns": ["name"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.custodians": { + "name": "custodians", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "display_name": { + "name": "display_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "source_type": { + "name": "source_type", + "type": "ingestion_provider", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "custodians_email_unique": { + "name": "custodians_email_unique", + "nullsNotDistinct": false, + "columns": ["email"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.ingestion_sources": { + "name": "ingestion_sources", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "provider": { + "name": "provider", + "type": "ingestion_provider", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "credentials": { + "name": "credentials", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "status": { + "name": "status", + "type": "ingestion_status", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'pending_auth'" + }, + "last_sync_started_at": { + "name": "last_sync_started_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "last_sync_finished_at": { + "name": "last_sync_finished_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "last_sync_status_message": { + "name": "last_sync_status_message", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sync_state": { + "name": "sync_state", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "ingestion_sources_user_id_users_id_fk": { + "name": "ingestion_sources_user_id_users_id_fk", + "tableFrom": "ingestion_sources", + "tableTo": "users", + "columnsFrom": ["user_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.roles": { + "name": "roles", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "policies": { + "name": "policies", + "type": "jsonb", + "primaryKey": false, + "notNull": true, + "default": "'[]'::jsonb" + }, + "slug": { + "name": "slug", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "roles_name_unique": { + "name": "roles_name_unique", + "nullsNotDistinct": false, + "columns": ["name"] + }, + "roles_slug_unique": { + "name": "roles_slug_unique", + "nullsNotDistinct": false, + "columns": ["slug"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.sessions": { + "name": "sessions", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "sessions_user_id_users_id_fk": { + "name": "sessions_user_id_users_id_fk", + "tableFrom": "sessions", + "tableTo": "users", + "columnsFrom": ["user_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.user_roles": { + "name": "user_roles", + "schema": "", + "columns": { + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "role_id": { + "name": "role_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "user_roles_user_id_users_id_fk": { + "name": "user_roles_user_id_users_id_fk", + "tableFrom": "user_roles", + "tableTo": "users", + "columnsFrom": ["user_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "user_roles_role_id_roles_id_fk": { + "name": "user_roles_role_id_roles_id_fk", + "tableFrom": "user_roles", + "tableTo": "roles", + "columnsFrom": ["role_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "user_roles_user_id_role_id_pk": { + "name": "user_roles_user_id_role_id_pk", + "columns": ["user_id", "role_id"] + } + }, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.users": { + "name": "users", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "first_name": { + "name": "first_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "last_name": { + "name": "last_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "provider": { + "name": "provider", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'local'" + }, + "provider_id": { + "name": "provider_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "users_email_unique": { + "name": "users_email_unique", + "nullsNotDistinct": false, + "columns": ["email"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.system_settings": { + "name": "system_settings", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "config": { + "name": "config", + "type": "jsonb", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.api_keys": { + "name": "api_keys", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "key": { + "name": "key", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "key_hash": { + "name": "key_hash", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "api_keys_user_id_users_id_fk": { + "name": "api_keys_user_id_users_id_fk", + "tableFrom": "api_keys", + "tableTo": "users", + "columnsFrom": ["user_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + } + }, + "enums": { + "public.retention_action": { + "name": "retention_action", + "schema": "public", + "values": ["delete_permanently", "notify_admin"] + }, + "public.ingestion_provider": { + "name": "ingestion_provider", + "schema": "public", + "values": [ + "google_workspace", + "microsoft_365", + "generic_imap", + "pst_import", + "eml_import", + "mbox_import" + ] + }, + "public.ingestion_status": { + "name": "ingestion_status", + "schema": "public", + "values": [ + "active", + "paused", + "error", + "pending_auth", + "syncing", + "importing", + "auth_success", + "imported" + ] + } + }, + "schemas": {}, + "sequences": {}, + "roles": {}, + "policies": {}, + "views": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} diff --git a/packages/backend/src/database/migrations/meta/0021_snapshot.json b/packages/backend/src/database/migrations/meta/0021_snapshot.json new file mode 100644 index 0000000..58083ac --- /dev/null +++ b/packages/backend/src/database/migrations/meta/0021_snapshot.json @@ -0,0 +1,1225 @@ +{ + "id": "93820787-6893-434f-8b7b-99f6b84f5123", + "prevId": "ed44e48c-b43b-402b-bf9d-5b5312edf42e", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.archived_emails": { + "name": "archived_emails", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "thread_id": { + "name": "thread_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "ingestion_source_id": { + "name": "ingestion_source_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "user_email": { + "name": "user_email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "message_id_header": { + "name": "message_id_header", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sent_at": { + "name": "sent_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true + }, + "subject": { + "name": "subject", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sender_name": { + "name": "sender_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sender_email": { + "name": "sender_email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "recipients": { + "name": "recipients", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "storage_path": { + "name": "storage_path", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "storage_hash_sha256": { + "name": "storage_hash_sha256", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "size_bytes": { + "name": "size_bytes", + "type": "bigint", + "primaryKey": false, + "notNull": true + }, + "is_indexed": { + "name": "is_indexed", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "has_attachments": { + "name": "has_attachments", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "is_on_legal_hold": { + "name": "is_on_legal_hold", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "archived_at": { + "name": "archived_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "tags": { + "name": "tags", + "type": "jsonb", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "thread_id_idx": { + "name": "thread_id_idx", + "columns": [ + { + "expression": "thread_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "archived_emails_ingestion_source_id_ingestion_sources_id_fk": { + "name": "archived_emails_ingestion_source_id_ingestion_sources_id_fk", + "tableFrom": "archived_emails", + "tableTo": "ingestion_sources", + "columnsFrom": ["ingestion_source_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.attachments": { + "name": "attachments", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "filename": { + "name": "filename", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "mime_type": { + "name": "mime_type", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "size_bytes": { + "name": "size_bytes", + "type": "bigint", + "primaryKey": false, + "notNull": true + }, + "content_hash_sha256": { + "name": "content_hash_sha256", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "storage_path": { + "name": "storage_path", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "attachments_content_hash_sha256_unique": { + "name": "attachments_content_hash_sha256_unique", + "nullsNotDistinct": false, + "columns": ["content_hash_sha256"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.email_attachments": { + "name": "email_attachments", + "schema": "", + "columns": { + "email_id": { + "name": "email_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "attachment_id": { + "name": "attachment_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "email_attachments_email_id_archived_emails_id_fk": { + "name": "email_attachments_email_id_archived_emails_id_fk", + "tableFrom": "email_attachments", + "tableTo": "archived_emails", + "columnsFrom": ["email_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "email_attachments_attachment_id_attachments_id_fk": { + "name": "email_attachments_attachment_id_attachments_id_fk", + "tableFrom": "email_attachments", + "tableTo": "attachments", + "columnsFrom": ["attachment_id"], + "columnsTo": ["id"], + "onDelete": "restrict", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "email_attachments_email_id_attachment_id_pk": { + "name": "email_attachments_email_id_attachment_id_pk", + "columns": ["email_id", "attachment_id"] + } + }, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.audit_logs": { + "name": "audit_logs", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "bigserial", + "primaryKey": true, + "notNull": true + }, + "previous_hash": { + "name": "previous_hash", + "type": "varchar(64)", + "primaryKey": false, + "notNull": false + }, + "timestamp": { + "name": "timestamp", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "actor_identifier": { + "name": "actor_identifier", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "actor_ip": { + "name": "actor_ip", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "action_type": { + "name": "action_type", + "type": "audit_log_action", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "target_type": { + "name": "target_type", + "type": "audit_log_target_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": false + }, + "target_id": { + "name": "target_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "details": { + "name": "details", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "current_hash": { + "name": "current_hash", + "type": "varchar(64)", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.ediscovery_cases": { + "name": "ediscovery_cases", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'open'" + }, + "created_by_identifier": { + "name": "created_by_identifier", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "ediscovery_cases_name_unique": { + "name": "ediscovery_cases_name_unique", + "nullsNotDistinct": false, + "columns": ["name"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.export_jobs": { + "name": "export_jobs", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "case_id": { + "name": "case_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "format": { + "name": "format", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'pending'" + }, + "query": { + "name": "query", + "type": "jsonb", + "primaryKey": false, + "notNull": true + }, + "file_path": { + "name": "file_path", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_by_identifier": { + "name": "created_by_identifier", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "completed_at": { + "name": "completed_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "export_jobs_case_id_ediscovery_cases_id_fk": { + "name": "export_jobs_case_id_ediscovery_cases_id_fk", + "tableFrom": "export_jobs", + "tableTo": "ediscovery_cases", + "columnsFrom": ["case_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.legal_holds": { + "name": "legal_holds", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "case_id": { + "name": "case_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "custodian_id": { + "name": "custodian_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "hold_criteria": { + "name": "hold_criteria", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "reason": { + "name": "reason", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "applied_by_identifier": { + "name": "applied_by_identifier", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "applied_at": { + "name": "applied_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "removed_at": { + "name": "removed_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "legal_holds_case_id_ediscovery_cases_id_fk": { + "name": "legal_holds_case_id_ediscovery_cases_id_fk", + "tableFrom": "legal_holds", + "tableTo": "ediscovery_cases", + "columnsFrom": ["case_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "legal_holds_custodian_id_custodians_id_fk": { + "name": "legal_holds_custodian_id_custodians_id_fk", + "tableFrom": "legal_holds", + "tableTo": "custodians", + "columnsFrom": ["custodian_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.retention_policies": { + "name": "retention_policies", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "priority": { + "name": "priority", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "retention_period_days": { + "name": "retention_period_days", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "action_on_expiry": { + "name": "action_on_expiry", + "type": "retention_action", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "is_enabled": { + "name": "is_enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "conditions": { + "name": "conditions", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "retention_policies_name_unique": { + "name": "retention_policies_name_unique", + "nullsNotDistinct": false, + "columns": ["name"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.custodians": { + "name": "custodians", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "display_name": { + "name": "display_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "source_type": { + "name": "source_type", + "type": "ingestion_provider", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "custodians_email_unique": { + "name": "custodians_email_unique", + "nullsNotDistinct": false, + "columns": ["email"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.ingestion_sources": { + "name": "ingestion_sources", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "provider": { + "name": "provider", + "type": "ingestion_provider", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "credentials": { + "name": "credentials", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "status": { + "name": "status", + "type": "ingestion_status", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'pending_auth'" + }, + "last_sync_started_at": { + "name": "last_sync_started_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "last_sync_finished_at": { + "name": "last_sync_finished_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "last_sync_status_message": { + "name": "last_sync_status_message", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sync_state": { + "name": "sync_state", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "ingestion_sources_user_id_users_id_fk": { + "name": "ingestion_sources_user_id_users_id_fk", + "tableFrom": "ingestion_sources", + "tableTo": "users", + "columnsFrom": ["user_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.roles": { + "name": "roles", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "policies": { + "name": "policies", + "type": "jsonb", + "primaryKey": false, + "notNull": true, + "default": "'[]'::jsonb" + }, + "slug": { + "name": "slug", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "roles_name_unique": { + "name": "roles_name_unique", + "nullsNotDistinct": false, + "columns": ["name"] + }, + "roles_slug_unique": { + "name": "roles_slug_unique", + "nullsNotDistinct": false, + "columns": ["slug"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.sessions": { + "name": "sessions", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "sessions_user_id_users_id_fk": { + "name": "sessions_user_id_users_id_fk", + "tableFrom": "sessions", + "tableTo": "users", + "columnsFrom": ["user_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.user_roles": { + "name": "user_roles", + "schema": "", + "columns": { + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "role_id": { + "name": "role_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "user_roles_user_id_users_id_fk": { + "name": "user_roles_user_id_users_id_fk", + "tableFrom": "user_roles", + "tableTo": "users", + "columnsFrom": ["user_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "user_roles_role_id_roles_id_fk": { + "name": "user_roles_role_id_roles_id_fk", + "tableFrom": "user_roles", + "tableTo": "roles", + "columnsFrom": ["role_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "user_roles_user_id_role_id_pk": { + "name": "user_roles_user_id_role_id_pk", + "columns": ["user_id", "role_id"] + } + }, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.users": { + "name": "users", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "first_name": { + "name": "first_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "last_name": { + "name": "last_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "provider": { + "name": "provider", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'local'" + }, + "provider_id": { + "name": "provider_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "users_email_unique": { + "name": "users_email_unique", + "nullsNotDistinct": false, + "columns": ["email"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.system_settings": { + "name": "system_settings", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "config": { + "name": "config", + "type": "jsonb", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.api_keys": { + "name": "api_keys", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "key": { + "name": "key", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "key_hash": { + "name": "key_hash", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "api_keys_user_id_users_id_fk": { + "name": "api_keys_user_id_users_id_fk", + "tableFrom": "api_keys", + "tableTo": "users", + "columnsFrom": ["user_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + } + }, + "enums": { + "public.retention_action": { + "name": "retention_action", + "schema": "public", + "values": ["delete_permanently", "notify_admin"] + }, + "public.ingestion_provider": { + "name": "ingestion_provider", + "schema": "public", + "values": [ + "google_workspace", + "microsoft_365", + "generic_imap", + "pst_import", + "eml_import", + "mbox_import" + ] + }, + "public.ingestion_status": { + "name": "ingestion_status", + "schema": "public", + "values": [ + "active", + "paused", + "error", + "pending_auth", + "syncing", + "importing", + "auth_success", + "imported" + ] + }, + "public.audit_log_action": { + "name": "audit_log_action", + "schema": "public", + "values": [ + "CREATE", + "READ", + "UPDATE", + "DELETE", + "LOGIN", + "LOGOUT", + "SETUP", + "IMPORT", + "PAUSE", + "SYNC", + "UPLOAD", + "SEARCH", + "DOWNLOAD", + "GENERATE" + ] + }, + "public.audit_log_target_type": { + "name": "audit_log_target_type", + "schema": "public", + "values": [ + "ApiKey", + "ArchivedEmail", + "Dashboard", + "IngestionSource", + "Role", + "SystemSettings", + "User", + "File" + ] + } + }, + "schemas": {}, + "sequences": {}, + "roles": {}, + "policies": {}, + "views": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} diff --git a/packages/backend/src/database/migrations/meta/0022_snapshot.json b/packages/backend/src/database/migrations/meta/0022_snapshot.json new file mode 100644 index 0000000..440d70f --- /dev/null +++ b/packages/backend/src/database/migrations/meta/0022_snapshot.json @@ -0,0 +1,1257 @@ +{ + "id": "d61a882f-72c4-4fbb-8a6e-6c9dc8372679", + "prevId": "93820787-6893-434f-8b7b-99f6b84f5123", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.archived_emails": { + "name": "archived_emails", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "thread_id": { + "name": "thread_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "ingestion_source_id": { + "name": "ingestion_source_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "user_email": { + "name": "user_email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "message_id_header": { + "name": "message_id_header", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sent_at": { + "name": "sent_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true + }, + "subject": { + "name": "subject", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sender_name": { + "name": "sender_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sender_email": { + "name": "sender_email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "recipients": { + "name": "recipients", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "storage_path": { + "name": "storage_path", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "storage_hash_sha256": { + "name": "storage_hash_sha256", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "size_bytes": { + "name": "size_bytes", + "type": "bigint", + "primaryKey": false, + "notNull": true + }, + "is_indexed": { + "name": "is_indexed", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "has_attachments": { + "name": "has_attachments", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "is_on_legal_hold": { + "name": "is_on_legal_hold", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "archived_at": { + "name": "archived_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "tags": { + "name": "tags", + "type": "jsonb", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "thread_id_idx": { + "name": "thread_id_idx", + "columns": [ + { + "expression": "thread_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "archived_emails_ingestion_source_id_ingestion_sources_id_fk": { + "name": "archived_emails_ingestion_source_id_ingestion_sources_id_fk", + "tableFrom": "archived_emails", + "tableTo": "ingestion_sources", + "columnsFrom": ["ingestion_source_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.attachments": { + "name": "attachments", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "filename": { + "name": "filename", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "mime_type": { + "name": "mime_type", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "size_bytes": { + "name": "size_bytes", + "type": "bigint", + "primaryKey": false, + "notNull": true + }, + "content_hash_sha256": { + "name": "content_hash_sha256", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "storage_path": { + "name": "storage_path", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "ingestion_source_id": { + "name": "ingestion_source_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "source_hash_unique": { + "name": "source_hash_unique", + "columns": [ + { + "expression": "ingestion_source_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "content_hash_sha256", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "attachments_ingestion_source_id_ingestion_sources_id_fk": { + "name": "attachments_ingestion_source_id_ingestion_sources_id_fk", + "tableFrom": "attachments", + "tableTo": "ingestion_sources", + "columnsFrom": ["ingestion_source_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.email_attachments": { + "name": "email_attachments", + "schema": "", + "columns": { + "email_id": { + "name": "email_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "attachment_id": { + "name": "attachment_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "email_attachments_email_id_archived_emails_id_fk": { + "name": "email_attachments_email_id_archived_emails_id_fk", + "tableFrom": "email_attachments", + "tableTo": "archived_emails", + "columnsFrom": ["email_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "email_attachments_attachment_id_attachments_id_fk": { + "name": "email_attachments_attachment_id_attachments_id_fk", + "tableFrom": "email_attachments", + "tableTo": "attachments", + "columnsFrom": ["attachment_id"], + "columnsTo": ["id"], + "onDelete": "restrict", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "email_attachments_email_id_attachment_id_pk": { + "name": "email_attachments_email_id_attachment_id_pk", + "columns": ["email_id", "attachment_id"] + } + }, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.audit_logs": { + "name": "audit_logs", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "bigserial", + "primaryKey": true, + "notNull": true + }, + "previous_hash": { + "name": "previous_hash", + "type": "varchar(64)", + "primaryKey": false, + "notNull": false + }, + "timestamp": { + "name": "timestamp", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "actor_identifier": { + "name": "actor_identifier", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "actor_ip": { + "name": "actor_ip", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "action_type": { + "name": "action_type", + "type": "audit_log_action", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "target_type": { + "name": "target_type", + "type": "audit_log_target_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": false + }, + "target_id": { + "name": "target_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "details": { + "name": "details", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "current_hash": { + "name": "current_hash", + "type": "varchar(64)", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.ediscovery_cases": { + "name": "ediscovery_cases", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'open'" + }, + "created_by_identifier": { + "name": "created_by_identifier", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "ediscovery_cases_name_unique": { + "name": "ediscovery_cases_name_unique", + "nullsNotDistinct": false, + "columns": ["name"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.export_jobs": { + "name": "export_jobs", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "case_id": { + "name": "case_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "format": { + "name": "format", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'pending'" + }, + "query": { + "name": "query", + "type": "jsonb", + "primaryKey": false, + "notNull": true + }, + "file_path": { + "name": "file_path", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_by_identifier": { + "name": "created_by_identifier", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "completed_at": { + "name": "completed_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "export_jobs_case_id_ediscovery_cases_id_fk": { + "name": "export_jobs_case_id_ediscovery_cases_id_fk", + "tableFrom": "export_jobs", + "tableTo": "ediscovery_cases", + "columnsFrom": ["case_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.legal_holds": { + "name": "legal_holds", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "case_id": { + "name": "case_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "custodian_id": { + "name": "custodian_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "hold_criteria": { + "name": "hold_criteria", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "reason": { + "name": "reason", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "applied_by_identifier": { + "name": "applied_by_identifier", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "applied_at": { + "name": "applied_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "removed_at": { + "name": "removed_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "legal_holds_case_id_ediscovery_cases_id_fk": { + "name": "legal_holds_case_id_ediscovery_cases_id_fk", + "tableFrom": "legal_holds", + "tableTo": "ediscovery_cases", + "columnsFrom": ["case_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "legal_holds_custodian_id_custodians_id_fk": { + "name": "legal_holds_custodian_id_custodians_id_fk", + "tableFrom": "legal_holds", + "tableTo": "custodians", + "columnsFrom": ["custodian_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.retention_policies": { + "name": "retention_policies", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "priority": { + "name": "priority", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "retention_period_days": { + "name": "retention_period_days", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "action_on_expiry": { + "name": "action_on_expiry", + "type": "retention_action", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "is_enabled": { + "name": "is_enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "conditions": { + "name": "conditions", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "retention_policies_name_unique": { + "name": "retention_policies_name_unique", + "nullsNotDistinct": false, + "columns": ["name"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.custodians": { + "name": "custodians", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "display_name": { + "name": "display_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "source_type": { + "name": "source_type", + "type": "ingestion_provider", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "custodians_email_unique": { + "name": "custodians_email_unique", + "nullsNotDistinct": false, + "columns": ["email"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.ingestion_sources": { + "name": "ingestion_sources", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "provider": { + "name": "provider", + "type": "ingestion_provider", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "credentials": { + "name": "credentials", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "status": { + "name": "status", + "type": "ingestion_status", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'pending_auth'" + }, + "last_sync_started_at": { + "name": "last_sync_started_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "last_sync_finished_at": { + "name": "last_sync_finished_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "last_sync_status_message": { + "name": "last_sync_status_message", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sync_state": { + "name": "sync_state", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "ingestion_sources_user_id_users_id_fk": { + "name": "ingestion_sources_user_id_users_id_fk", + "tableFrom": "ingestion_sources", + "tableTo": "users", + "columnsFrom": ["user_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.roles": { + "name": "roles", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "policies": { + "name": "policies", + "type": "jsonb", + "primaryKey": false, + "notNull": true, + "default": "'[]'::jsonb" + }, + "slug": { + "name": "slug", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "roles_name_unique": { + "name": "roles_name_unique", + "nullsNotDistinct": false, + "columns": ["name"] + }, + "roles_slug_unique": { + "name": "roles_slug_unique", + "nullsNotDistinct": false, + "columns": ["slug"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.sessions": { + "name": "sessions", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "sessions_user_id_users_id_fk": { + "name": "sessions_user_id_users_id_fk", + "tableFrom": "sessions", + "tableTo": "users", + "columnsFrom": ["user_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.user_roles": { + "name": "user_roles", + "schema": "", + "columns": { + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "role_id": { + "name": "role_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "user_roles_user_id_users_id_fk": { + "name": "user_roles_user_id_users_id_fk", + "tableFrom": "user_roles", + "tableTo": "users", + "columnsFrom": ["user_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "user_roles_role_id_roles_id_fk": { + "name": "user_roles_role_id_roles_id_fk", + "tableFrom": "user_roles", + "tableTo": "roles", + "columnsFrom": ["role_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "user_roles_user_id_role_id_pk": { + "name": "user_roles_user_id_role_id_pk", + "columns": ["user_id", "role_id"] + } + }, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.users": { + "name": "users", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "first_name": { + "name": "first_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "last_name": { + "name": "last_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "provider": { + "name": "provider", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'local'" + }, + "provider_id": { + "name": "provider_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "users_email_unique": { + "name": "users_email_unique", + "nullsNotDistinct": false, + "columns": ["email"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.system_settings": { + "name": "system_settings", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "config": { + "name": "config", + "type": "jsonb", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.api_keys": { + "name": "api_keys", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "key": { + "name": "key", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "key_hash": { + "name": "key_hash", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "api_keys_user_id_users_id_fk": { + "name": "api_keys_user_id_users_id_fk", + "tableFrom": "api_keys", + "tableTo": "users", + "columnsFrom": ["user_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + } + }, + "enums": { + "public.retention_action": { + "name": "retention_action", + "schema": "public", + "values": ["delete_permanently", "notify_admin"] + }, + "public.ingestion_provider": { + "name": "ingestion_provider", + "schema": "public", + "values": [ + "google_workspace", + "microsoft_365", + "generic_imap", + "pst_import", + "eml_import", + "mbox_import" + ] + }, + "public.ingestion_status": { + "name": "ingestion_status", + "schema": "public", + "values": [ + "active", + "paused", + "error", + "pending_auth", + "syncing", + "importing", + "auth_success", + "imported" + ] + }, + "public.audit_log_action": { + "name": "audit_log_action", + "schema": "public", + "values": [ + "CREATE", + "READ", + "UPDATE", + "DELETE", + "LOGIN", + "LOGOUT", + "SETUP", + "IMPORT", + "PAUSE", + "SYNC", + "UPLOAD", + "SEARCH", + "DOWNLOAD", + "GENERATE" + ] + }, + "public.audit_log_target_type": { + "name": "audit_log_target_type", + "schema": "public", + "values": [ + "ApiKey", + "ArchivedEmail", + "Dashboard", + "IngestionSource", + "Role", + "SystemSettings", + "User", + "File" + ] + } + }, + "schemas": {}, + "sequences": {}, + "roles": {}, + "policies": {}, + "views": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} diff --git a/packages/backend/src/database/migrations/meta/0023_snapshot.json b/packages/backend/src/database/migrations/meta/0023_snapshot.json new file mode 100644 index 0000000..2b760be --- /dev/null +++ b/packages/backend/src/database/migrations/meta/0023_snapshot.json @@ -0,0 +1,1257 @@ +{ + "id": "2747b009-4502-4e19-a725-1c5e9807c52b", + "prevId": "d61a882f-72c4-4fbb-8a6e-6c9dc8372679", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.archived_emails": { + "name": "archived_emails", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "thread_id": { + "name": "thread_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "ingestion_source_id": { + "name": "ingestion_source_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "user_email": { + "name": "user_email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "message_id_header": { + "name": "message_id_header", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sent_at": { + "name": "sent_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true + }, + "subject": { + "name": "subject", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sender_name": { + "name": "sender_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sender_email": { + "name": "sender_email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "recipients": { + "name": "recipients", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "storage_path": { + "name": "storage_path", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "storage_hash_sha256": { + "name": "storage_hash_sha256", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "size_bytes": { + "name": "size_bytes", + "type": "bigint", + "primaryKey": false, + "notNull": true + }, + "is_indexed": { + "name": "is_indexed", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "has_attachments": { + "name": "has_attachments", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "is_on_legal_hold": { + "name": "is_on_legal_hold", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "archived_at": { + "name": "archived_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "tags": { + "name": "tags", + "type": "jsonb", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "thread_id_idx": { + "name": "thread_id_idx", + "columns": [ + { + "expression": "thread_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "archived_emails_ingestion_source_id_ingestion_sources_id_fk": { + "name": "archived_emails_ingestion_source_id_ingestion_sources_id_fk", + "tableFrom": "archived_emails", + "tableTo": "ingestion_sources", + "columnsFrom": ["ingestion_source_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.attachments": { + "name": "attachments", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "filename": { + "name": "filename", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "mime_type": { + "name": "mime_type", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "size_bytes": { + "name": "size_bytes", + "type": "bigint", + "primaryKey": false, + "notNull": true + }, + "content_hash_sha256": { + "name": "content_hash_sha256", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "storage_path": { + "name": "storage_path", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "ingestion_source_id": { + "name": "ingestion_source_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "source_hash_idx": { + "name": "source_hash_idx", + "columns": [ + { + "expression": "ingestion_source_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "content_hash_sha256", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "attachments_ingestion_source_id_ingestion_sources_id_fk": { + "name": "attachments_ingestion_source_id_ingestion_sources_id_fk", + "tableFrom": "attachments", + "tableTo": "ingestion_sources", + "columnsFrom": ["ingestion_source_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.email_attachments": { + "name": "email_attachments", + "schema": "", + "columns": { + "email_id": { + "name": "email_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "attachment_id": { + "name": "attachment_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "email_attachments_email_id_archived_emails_id_fk": { + "name": "email_attachments_email_id_archived_emails_id_fk", + "tableFrom": "email_attachments", + "tableTo": "archived_emails", + "columnsFrom": ["email_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "email_attachments_attachment_id_attachments_id_fk": { + "name": "email_attachments_attachment_id_attachments_id_fk", + "tableFrom": "email_attachments", + "tableTo": "attachments", + "columnsFrom": ["attachment_id"], + "columnsTo": ["id"], + "onDelete": "restrict", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "email_attachments_email_id_attachment_id_pk": { + "name": "email_attachments_email_id_attachment_id_pk", + "columns": ["email_id", "attachment_id"] + } + }, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.audit_logs": { + "name": "audit_logs", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "bigserial", + "primaryKey": true, + "notNull": true + }, + "previous_hash": { + "name": "previous_hash", + "type": "varchar(64)", + "primaryKey": false, + "notNull": false + }, + "timestamp": { + "name": "timestamp", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "actor_identifier": { + "name": "actor_identifier", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "actor_ip": { + "name": "actor_ip", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "action_type": { + "name": "action_type", + "type": "audit_log_action", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "target_type": { + "name": "target_type", + "type": "audit_log_target_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": false + }, + "target_id": { + "name": "target_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "details": { + "name": "details", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "current_hash": { + "name": "current_hash", + "type": "varchar(64)", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.ediscovery_cases": { + "name": "ediscovery_cases", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'open'" + }, + "created_by_identifier": { + "name": "created_by_identifier", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "ediscovery_cases_name_unique": { + "name": "ediscovery_cases_name_unique", + "nullsNotDistinct": false, + "columns": ["name"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.export_jobs": { + "name": "export_jobs", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "case_id": { + "name": "case_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "format": { + "name": "format", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'pending'" + }, + "query": { + "name": "query", + "type": "jsonb", + "primaryKey": false, + "notNull": true + }, + "file_path": { + "name": "file_path", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_by_identifier": { + "name": "created_by_identifier", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "completed_at": { + "name": "completed_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "export_jobs_case_id_ediscovery_cases_id_fk": { + "name": "export_jobs_case_id_ediscovery_cases_id_fk", + "tableFrom": "export_jobs", + "tableTo": "ediscovery_cases", + "columnsFrom": ["case_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.legal_holds": { + "name": "legal_holds", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "case_id": { + "name": "case_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "custodian_id": { + "name": "custodian_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "hold_criteria": { + "name": "hold_criteria", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "reason": { + "name": "reason", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "applied_by_identifier": { + "name": "applied_by_identifier", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "applied_at": { + "name": "applied_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "removed_at": { + "name": "removed_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "legal_holds_case_id_ediscovery_cases_id_fk": { + "name": "legal_holds_case_id_ediscovery_cases_id_fk", + "tableFrom": "legal_holds", + "tableTo": "ediscovery_cases", + "columnsFrom": ["case_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "legal_holds_custodian_id_custodians_id_fk": { + "name": "legal_holds_custodian_id_custodians_id_fk", + "tableFrom": "legal_holds", + "tableTo": "custodians", + "columnsFrom": ["custodian_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.retention_policies": { + "name": "retention_policies", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "priority": { + "name": "priority", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "retention_period_days": { + "name": "retention_period_days", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "action_on_expiry": { + "name": "action_on_expiry", + "type": "retention_action", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "is_enabled": { + "name": "is_enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "conditions": { + "name": "conditions", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "retention_policies_name_unique": { + "name": "retention_policies_name_unique", + "nullsNotDistinct": false, + "columns": ["name"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.custodians": { + "name": "custodians", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "display_name": { + "name": "display_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "source_type": { + "name": "source_type", + "type": "ingestion_provider", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "custodians_email_unique": { + "name": "custodians_email_unique", + "nullsNotDistinct": false, + "columns": ["email"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.ingestion_sources": { + "name": "ingestion_sources", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "provider": { + "name": "provider", + "type": "ingestion_provider", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "credentials": { + "name": "credentials", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "status": { + "name": "status", + "type": "ingestion_status", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'pending_auth'" + }, + "last_sync_started_at": { + "name": "last_sync_started_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "last_sync_finished_at": { + "name": "last_sync_finished_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "last_sync_status_message": { + "name": "last_sync_status_message", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sync_state": { + "name": "sync_state", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "ingestion_sources_user_id_users_id_fk": { + "name": "ingestion_sources_user_id_users_id_fk", + "tableFrom": "ingestion_sources", + "tableTo": "users", + "columnsFrom": ["user_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.roles": { + "name": "roles", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "policies": { + "name": "policies", + "type": "jsonb", + "primaryKey": false, + "notNull": true, + "default": "'[]'::jsonb" + }, + "slug": { + "name": "slug", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "roles_name_unique": { + "name": "roles_name_unique", + "nullsNotDistinct": false, + "columns": ["name"] + }, + "roles_slug_unique": { + "name": "roles_slug_unique", + "nullsNotDistinct": false, + "columns": ["slug"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.sessions": { + "name": "sessions", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "sessions_user_id_users_id_fk": { + "name": "sessions_user_id_users_id_fk", + "tableFrom": "sessions", + "tableTo": "users", + "columnsFrom": ["user_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.user_roles": { + "name": "user_roles", + "schema": "", + "columns": { + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "role_id": { + "name": "role_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "user_roles_user_id_users_id_fk": { + "name": "user_roles_user_id_users_id_fk", + "tableFrom": "user_roles", + "tableTo": "users", + "columnsFrom": ["user_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "user_roles_role_id_roles_id_fk": { + "name": "user_roles_role_id_roles_id_fk", + "tableFrom": "user_roles", + "tableTo": "roles", + "columnsFrom": ["role_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "user_roles_user_id_role_id_pk": { + "name": "user_roles_user_id_role_id_pk", + "columns": ["user_id", "role_id"] + } + }, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.users": { + "name": "users", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "first_name": { + "name": "first_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "last_name": { + "name": "last_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "provider": { + "name": "provider", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'local'" + }, + "provider_id": { + "name": "provider_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "users_email_unique": { + "name": "users_email_unique", + "nullsNotDistinct": false, + "columns": ["email"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.system_settings": { + "name": "system_settings", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "config": { + "name": "config", + "type": "jsonb", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.api_keys": { + "name": "api_keys", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "key": { + "name": "key", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "key_hash": { + "name": "key_hash", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "api_keys_user_id_users_id_fk": { + "name": "api_keys_user_id_users_id_fk", + "tableFrom": "api_keys", + "tableTo": "users", + "columnsFrom": ["user_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + } + }, + "enums": { + "public.retention_action": { + "name": "retention_action", + "schema": "public", + "values": ["delete_permanently", "notify_admin"] + }, + "public.ingestion_provider": { + "name": "ingestion_provider", + "schema": "public", + "values": [ + "google_workspace", + "microsoft_365", + "generic_imap", + "pst_import", + "eml_import", + "mbox_import" + ] + }, + "public.ingestion_status": { + "name": "ingestion_status", + "schema": "public", + "values": [ + "active", + "paused", + "error", + "pending_auth", + "syncing", + "importing", + "auth_success", + "imported" + ] + }, + "public.audit_log_action": { + "name": "audit_log_action", + "schema": "public", + "values": [ + "CREATE", + "READ", + "UPDATE", + "DELETE", + "LOGIN", + "LOGOUT", + "SETUP", + "IMPORT", + "PAUSE", + "SYNC", + "UPLOAD", + "SEARCH", + "DOWNLOAD", + "GENERATE" + ] + }, + "public.audit_log_target_type": { + "name": "audit_log_target_type", + "schema": "public", + "values": [ + "ApiKey", + "ArchivedEmail", + "Dashboard", + "IngestionSource", + "Role", + "SystemSettings", + "User", + "File" + ] + } + }, + "schemas": {}, + "sequences": {}, + "roles": {}, + "policies": {}, + "views": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} diff --git a/packages/backend/src/database/migrations/meta/_journal.json b/packages/backend/src/database/migrations/meta/_journal.json index 79ac072..de1ed47 100644 --- a/packages/backend/src/database/migrations/meta/_journal.json +++ b/packages/backend/src/database/migrations/meta/_journal.json @@ -1,153 +1,174 @@ { - "version": "7", - "dialect": "postgresql", - "entries": [ - { - "idx": 0, - "version": "7", - "when": 1752225352591, - "tag": "0000_amusing_namora", - "breakpoints": true - }, - { - "idx": 1, - "version": "7", - "when": 1752326803882, - "tag": "0001_odd_night_thrasher", - "breakpoints": true - }, - { - "idx": 2, - "version": "7", - "when": 1752332648392, - "tag": "0002_lethal_quentin_quire", - "breakpoints": true - }, - { - "idx": 3, - "version": "7", - "when": 1752332967084, - "tag": "0003_petite_wrecker", - "breakpoints": true - }, - { - "idx": 4, - "version": "7", - "when": 1752606108876, - "tag": "0004_sleepy_paper_doll", - "breakpoints": true - }, - { - "idx": 5, - "version": "7", - "when": 1752606327253, - "tag": "0005_chunky_sue_storm", - "breakpoints": true - }, - { - "idx": 6, - "version": "7", - "when": 1753112018514, - "tag": "0006_majestic_caretaker", - "breakpoints": true - }, - { - "idx": 7, - "version": "7", - "when": 1753190159356, - "tag": "0007_handy_archangel", - "breakpoints": true - }, - { - "idx": 8, - "version": "7", - "when": 1753370737317, - "tag": "0008_eminent_the_spike", - "breakpoints": true - }, - { - "idx": 9, - "version": "7", - "when": 1754337938241, - "tag": "0009_late_lenny_balinger", - "breakpoints": true - }, - { - "idx": 10, - "version": "7", - "when": 1754420780849, - "tag": "0010_perpetual_lightspeed", - "breakpoints": true - }, - { - "idx": 11, - "version": "7", - "when": 1754422064158, - "tag": "0011_tan_blackheart", - "breakpoints": true - }, - { - "idx": 12, - "version": "7", - "when": 1754476962901, - "tag": "0012_warm_the_stranger", - "breakpoints": true - }, - { - "idx": 13, - "version": "7", - "when": 1754659373517, - "tag": "0013_classy_talkback", - "breakpoints": true - }, - { - "idx": 14, - "version": "7", - "when": 1754831765718, - "tag": "0014_foamy_vapor", - "breakpoints": true - }, - { - "idx": 15, - "version": "7", - "when": 1755443936046, - "tag": "0015_wakeful_norman_osborn", - "breakpoints": true - }, - { - "idx": 16, - "version": "7", - "when": 1755780572342, - "tag": "0016_lonely_mariko_yashida", - "breakpoints": true - }, - { - "idx": 17, - "version": "7", - "when": 1755961566627, - "tag": "0017_tranquil_shooting_star", - "breakpoints": true - }, - { - "idx": 18, - "version": "7", - "when": 1756911118035, - "tag": "0018_flawless_owl", - "breakpoints": true - }, - { - "idx": 19, - "version": "7", - "when": 1756937533843, - "tag": "0019_confused_scream", - "breakpoints": true - }, - { - "idx": 20, - "version": "7", - "when": 1757860242528, - "tag": "0020_panoramic_wolverine", - "breakpoints": true - } - ] -} \ No newline at end of file + "version": "7", + "dialect": "postgresql", + "entries": [ + { + "idx": 0, + "version": "7", + "when": 1752225352591, + "tag": "0000_amusing_namora", + "breakpoints": true + }, + { + "idx": 1, + "version": "7", + "when": 1752326803882, + "tag": "0001_odd_night_thrasher", + "breakpoints": true + }, + { + "idx": 2, + "version": "7", + "when": 1752332648392, + "tag": "0002_lethal_quentin_quire", + "breakpoints": true + }, + { + "idx": 3, + "version": "7", + "when": 1752332967084, + "tag": "0003_petite_wrecker", + "breakpoints": true + }, + { + "idx": 4, + "version": "7", + "when": 1752606108876, + "tag": "0004_sleepy_paper_doll", + "breakpoints": true + }, + { + "idx": 5, + "version": "7", + "when": 1752606327253, + "tag": "0005_chunky_sue_storm", + "breakpoints": true + }, + { + "idx": 6, + "version": "7", + "when": 1753112018514, + "tag": "0006_majestic_caretaker", + "breakpoints": true + }, + { + "idx": 7, + "version": "7", + "when": 1753190159356, + "tag": "0007_handy_archangel", + "breakpoints": true + }, + { + "idx": 8, + "version": "7", + "when": 1753370737317, + "tag": "0008_eminent_the_spike", + "breakpoints": true + }, + { + "idx": 9, + "version": "7", + "when": 1754337938241, + "tag": "0009_late_lenny_balinger", + "breakpoints": true + }, + { + "idx": 10, + "version": "7", + "when": 1754420780849, + "tag": "0010_perpetual_lightspeed", + "breakpoints": true + }, + { + "idx": 11, + "version": "7", + "when": 1754422064158, + "tag": "0011_tan_blackheart", + "breakpoints": true + }, + { + "idx": 12, + "version": "7", + "when": 1754476962901, + "tag": "0012_warm_the_stranger", + "breakpoints": true + }, + { + "idx": 13, + "version": "7", + "when": 1754659373517, + "tag": "0013_classy_talkback", + "breakpoints": true + }, + { + "idx": 14, + "version": "7", + "when": 1754831765718, + "tag": "0014_foamy_vapor", + "breakpoints": true + }, + { + "idx": 15, + "version": "7", + "when": 1755443936046, + "tag": "0015_wakeful_norman_osborn", + "breakpoints": true + }, + { + "idx": 16, + "version": "7", + "when": 1755780572342, + "tag": "0016_lonely_mariko_yashida", + "breakpoints": true + }, + { + "idx": 17, + "version": "7", + "when": 1755961566627, + "tag": "0017_tranquil_shooting_star", + "breakpoints": true + }, + { + "idx": 18, + "version": "7", + "when": 1756911118035, + "tag": "0018_flawless_owl", + "breakpoints": true + }, + { + "idx": 19, + "version": "7", + "when": 1756937533843, + "tag": "0019_confused_scream", + "breakpoints": true + }, + { + "idx": 20, + "version": "7", + "when": 1757860242528, + "tag": "0020_panoramic_wolverine", + "breakpoints": true + }, + { + "idx": 21, + "version": "7", + "when": 1759412986134, + "tag": "0021_nosy_veda", + "breakpoints": true + }, + { + "idx": 22, + "version": "7", + "when": 1759701622932, + "tag": "0022_complete_triton", + "breakpoints": true + }, + { + "idx": 23, + "version": "7", + "when": 1760354094610, + "tag": "0023_swift_swordsman", + "breakpoints": true + } + ] +} diff --git a/packages/backend/src/database/schema.ts b/packages/backend/src/database/schema.ts index 8441331..19f6e17 100644 --- a/packages/backend/src/database/schema.ts +++ b/packages/backend/src/database/schema.ts @@ -7,3 +7,5 @@ export * from './schema/ingestion-sources'; export * from './schema/users'; export * from './schema/system-settings'; export * from './schema/api-keys'; +export * from './schema/audit-logs'; +export * from './schema/enums'; diff --git a/packages/backend/src/database/schema/attachments.ts b/packages/backend/src/database/schema/attachments.ts index c15d4c2..a1e938b 100644 --- a/packages/backend/src/database/schema/attachments.ts +++ b/packages/backend/src/database/schema/attachments.ts @@ -1,15 +1,23 @@ import { relations } from 'drizzle-orm'; -import { pgTable, text, uuid, bigint, primaryKey } from 'drizzle-orm/pg-core'; +import { pgTable, text, uuid, bigint, primaryKey, index } from 'drizzle-orm/pg-core'; import { archivedEmails } from './archived-emails'; +import { ingestionSources } from './ingestion-sources'; -export const attachments = pgTable('attachments', { - id: uuid('id').primaryKey().defaultRandom(), - filename: text('filename').notNull(), - mimeType: text('mime_type'), - sizeBytes: bigint('size_bytes', { mode: 'number' }).notNull(), - contentHashSha256: text('content_hash_sha256').notNull().unique(), - storagePath: text('storage_path').notNull(), -}); +export const attachments = pgTable( + 'attachments', + { + id: uuid('id').primaryKey().defaultRandom(), + filename: text('filename').notNull(), + mimeType: text('mime_type'), + sizeBytes: bigint('size_bytes', { mode: 'number' }).notNull(), + contentHashSha256: text('content_hash_sha256').notNull(), + storagePath: text('storage_path').notNull(), + ingestionSourceId: uuid('ingestion_source_id').references(() => ingestionSources.id, { + onDelete: 'cascade', + }), + }, + (table) => [index('source_hash_idx').on(table.ingestionSourceId, table.contentHashSha256)] +); export const emailAttachments = pgTable( 'email_attachments', diff --git a/packages/backend/src/database/schema/audit-logs.ts b/packages/backend/src/database/schema/audit-logs.ts index ec667ba..7e8e26e 100644 --- a/packages/backend/src/database/schema/audit-logs.ts +++ b/packages/backend/src/database/schema/audit-logs.ts @@ -1,12 +1,34 @@ -import { bigserial, boolean, jsonb, pgTable, text, timestamp } from 'drizzle-orm/pg-core'; +import { bigserial, jsonb, pgTable, text, timestamp, varchar } from 'drizzle-orm/pg-core'; +import { auditLogActionEnum, auditLogTargetTypeEnum } from './enums'; export const auditLogs = pgTable('audit_logs', { + // A unique, sequential, and gapless primary key for ordering. id: bigserial('id', { mode: 'number' }).primaryKey(), + + // The SHA-256 hash of the preceding log entry's `currentHash`. + previousHash: varchar('previous_hash', { length: 64 }), + + // A high-precision, UTC timestamp of when the event occurred. timestamp: timestamp('timestamp', { withTimezone: true }).notNull().defaultNow(), + + // A stable identifier for the actor who performed the action. actorIdentifier: text('actor_identifier').notNull(), - action: text('action').notNull(), - targetType: text('target_type'), + + // The IP address from which the action was initiated. + actorIp: text('actor_ip'), + + // A standardized, machine-readable identifier for the event. + actionType: auditLogActionEnum('action_type').notNull(), + + // The type of resource that was affected by the action. + targetType: auditLogTargetTypeEnum('target_type'), + + // The unique identifier of the affected resource. targetId: text('target_id'), + + // A JSON object containing specific, contextual details of the event. details: jsonb('details'), - isTamperEvident: boolean('is_tamper_evident').default(false), + + // The SHA-256 hash of this entire log entry's contents. + currentHash: varchar('current_hash', { length: 64 }).notNull(), }); diff --git a/packages/backend/src/database/schema/enums.ts b/packages/backend/src/database/schema/enums.ts new file mode 100644 index 0000000..24ea9ea --- /dev/null +++ b/packages/backend/src/database/schema/enums.ts @@ -0,0 +1,5 @@ +import { pgEnum } from 'drizzle-orm/pg-core'; +import { AuditLogActions, AuditLogTargetTypes } from '@open-archiver/types'; + +export const auditLogActionEnum = pgEnum('audit_log_action', AuditLogActions); +export const auditLogTargetTypeEnum = pgEnum('audit_log_target_type', AuditLogTargetTypes); diff --git a/packages/backend/src/helpers/deletionGuard.ts b/packages/backend/src/helpers/deletionGuard.ts new file mode 100644 index 0000000..996b274 --- /dev/null +++ b/packages/backend/src/helpers/deletionGuard.ts @@ -0,0 +1,9 @@ +import { config } from '../config'; +import i18next from 'i18next'; + +export function checkDeletionEnabled() { + if (!config.app.enableDeletion) { + const errorMessage = i18next.t('Deletion is disabled for this instance.'); + throw new Error(errorMessage); + } +} diff --git a/packages/backend/src/helpers/textExtractor.ts b/packages/backend/src/helpers/textExtractor.ts index f82c301..07335ae 100644 --- a/packages/backend/src/helpers/textExtractor.ts +++ b/packages/backend/src/helpers/textExtractor.ts @@ -59,14 +59,17 @@ async function extractTextLegacy(buffer: Buffer, mimeType: string): Promise 50 * 1024 * 1024) { // 50MB Limit + if (buffer.length > 50 * 1024 * 1024) { + // 50MB Limit logger.warn('PDF too large for legacy extraction, skipping'); return ''; } return await extractTextFromPdf(buffer); } - if (mimeType === 'application/vnd.openxmlformats-officedocument.wordprocessingml.document') { + if ( + mimeType === 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' + ) { const { value } = await mammoth.extractRawText({ buffer }); return value; } @@ -118,7 +121,9 @@ export async function extractText(buffer: Buffer, mimeType: string): Promise maxSize) { - logger.warn(`File too large for text extraction: ${buffer.length} bytes (limit: ${maxSize})`); + logger.warn( + `File too large for text extraction: ${buffer.length} bytes (limit: ${maxSize})` + ); return ''; } @@ -128,12 +133,12 @@ export async function extractText(buffer: Buffer, mimeType: string): Promise { - const systemSettings = await settingsService.getSystemSettings(); - const defaultLanguage = systemSettings?.language || 'en'; - logger.info({ language: defaultLanguage }, 'Default language'); - await i18next.use(FsBackend).init({ - lng: defaultLanguage, - fallbackLng: defaultLanguage, - ns: ['translation'], - defaultNS: 'translation', - backend: { - loadPath: path.resolve(__dirname, './locales/{{lng}}/{{ns}}.json'), - }, - }); -}; - -// --- Dependency Injection Setup --- - -const userService = new UserService(); -const authService = new AuthService(userService, JWT_SECRET, JWT_EXPIRES_IN); -const authController = new AuthController(authService, userService); -const ingestionController = new IngestionController(); -const archivedEmailController = new ArchivedEmailController(); -const storageService = new StorageService(); -const storageController = new StorageController(storageService); -const searchService = new SearchService(); -const searchController = new SearchController(); -const iamService = new IamService(); -const iamController = new IamController(iamService); -const settingsService = new SettingsService(); - -// --- Express App Initialization --- -const app = express(); - -// --- Routes --- -const authRouter = createAuthRouter(authController); -const ingestionRouter = createIngestionRouter(ingestionController, authService); -const archivedEmailRouter = createArchivedEmailRouter(archivedEmailController, authService); -const storageRouter = createStorageRouter(storageController, authService); -const searchRouter = createSearchRouter(searchController, authService); -const dashboardRouter = createDashboardRouter(authService); -const iamRouter = createIamRouter(iamController, authService); -const uploadRouter = createUploadRouter(authService); -const userRouter = createUserRouter(authService); -const settingsRouter = createSettingsRouter(authService); -const apiKeyRouter = apiKeyRoutes(authService); -// upload route is added before middleware because it doesn't use the json middleware. -app.use('/v1/upload', uploadRouter); - -// Middleware for all other routes -app.use((req, res, next) => { - // exclude certain API endpoints from the rate limiter, for example status, system settings - const excludedPatterns = [/^\/v\d+\/auth\/status$/, /^\/v\d+\/settings\/system$/]; - for (const pattern of excludedPatterns) { - if (pattern.test(req.path)) { - return next(); - } - } - rateLimiter(req, res, next); -}); -app.use(express.json()); -app.use(express.urlencoded({ extended: true })); - -// i18n middleware -app.use(i18nextMiddleware.handle(i18next)); - -app.use('/v1/auth', authRouter); -app.use('/v1/iam', iamRouter); -app.use('/v1/ingestion-sources', ingestionRouter); -app.use('/v1/archived-emails', archivedEmailRouter); -app.use('/v1/storage', storageRouter); -app.use('/v1/search', searchRouter); -app.use('/v1/dashboard', dashboardRouter); -app.use('/v1/users', userRouter); -app.use('/v1/settings', settingsRouter); -app.use('/v1/api-keys', apiKeyRouter); - -// Example of a protected route -app.get('/v1/protected', requireAuth(authService), (req, res) => { - res.json({ - message: 'You have accessed a protected route!', - user: req.user, // The user payload is attached by the requireAuth middleware - }); -}); - -app.get('/', (req, res) => { - res.send('Backend is running!'); -}); - -// --- Server Start --- -const startServer = async () => { - try { - // Initialize i18next - await initializeI18next(); - logger.info({}, 'i18next initialized'); - - // Configure the Meilisearch index on startup - logger.info({}, 'Configuring email index...'); - await searchService.configureEmailIndex(); - - app.listen(PORT_BACKEND, () => { - logger.info({}, `Backend listening at http://localhost:${PORT_BACKEND}`); - }); - } catch (error) { - logger.error({ error }, 'Failed to start the server:', error); - process.exit(1); - } -}; - -startServer(); +export { createServer, ArchiverModule } from './api/server'; +export { logger } from './config/logger'; +export { config } from './config'; +export * from './services/AuthService'; +export * from './services/AuditService'; +export * from './api/middleware/requireAuth'; +export * from './api/middleware/requirePermission'; +export { db } from './database'; +export * as drizzleOrm from 'drizzle-orm'; +export * from './database/schema'; diff --git a/packages/backend/src/jobs/processors/index-email-batch.processor.ts b/packages/backend/src/jobs/processors/index-email-batch.processor.ts index dea7b5d..1b4f173 100644 --- a/packages/backend/src/jobs/processors/index-email-batch.processor.ts +++ b/packages/backend/src/jobs/processors/index-email-batch.processor.ts @@ -11,7 +11,7 @@ const databaseService = new DatabaseService(); const indexingService = new IndexingService(databaseService, searchService, storageService); export default async function (job: Job<{ emails: PendingEmail[] }>) { - const { emails } = job.data; - console.log(`Indexing email batch with ${emails.length} emails`); - await indexingService.indexEmailBatch(emails); + const { emails } = job.data; + console.log(`Indexing email batch with ${emails.length} emails`); + await indexingService.indexEmailBatch(emails); } diff --git a/packages/backend/src/jobs/processors/process-mailbox.processor.ts b/packages/backend/src/jobs/processors/process-mailbox.processor.ts index ce94001..0d95914 100644 --- a/packages/backend/src/jobs/processors/process-mailbox.processor.ts +++ b/packages/backend/src/jobs/processors/process-mailbox.processor.ts @@ -13,7 +13,7 @@ import { IndexingService } from '../../services/IndexingService'; import { SearchService } from '../../services/SearchService'; import { DatabaseService } from '../../services/DatabaseService'; import { config } from '../../config'; - +import { indexingQueue } from '../queues'; /** * This processor handles the ingestion of emails for a single user's mailbox. @@ -55,7 +55,7 @@ export const processMailboxProcessor = async (job: Job= BATCH_SIZE) { - await indexingService.indexEmailBatch(emailBatch); + await indexingQueue.add('index-email-batch', { emails: emailBatch }); emailBatch = []; } } @@ -63,7 +63,7 @@ export const processMailboxProcessor = async (job: Job 0) { - await indexingService.indexEmailBatch(emailBatch); + await indexingQueue.add('index-email-batch', { emails: emailBatch }); emailBatch = []; } diff --git a/packages/backend/src/locales/de/translation.json b/packages/backend/src/locales/de/translation.json index 2f679f7..4a861ec 100644 --- a/packages/backend/src/locales/de/translation.json +++ b/packages/backend/src/locales/de/translation.json @@ -14,7 +14,8 @@ "demoMode": "Dieser Vorgang ist im Demo-Modus nicht zulässig.", "unauthorized": "Unbefugt", "unknown": "Ein unbekannter Fehler ist aufgetreten", - "noPermissionToAction": "Sie haben keine Berechtigung, die aktuelle Aktion auszuführen." + "noPermissionToAction": "Sie haben keine Berechtigung, die aktuelle Aktion auszuführen.", + "deletion_disabled": "Das Löschen ist für diese Instanz deaktiviert." }, "user": { "notFound": "Benutzer nicht gefunden", diff --git a/packages/backend/src/locales/en/translation.json b/packages/backend/src/locales/en/translation.json index 5978d9d..9ac9c2b 100644 --- a/packages/backend/src/locales/en/translation.json +++ b/packages/backend/src/locales/en/translation.json @@ -14,7 +14,8 @@ "demoMode": "This operation is not allowed in demo mode.", "unauthorized": "Unauthorized", "unknown": "An unknown error occurred", - "noPermissionToAction": "You don't have the permission to perform the current action." + "noPermissionToAction": "You don't have the permission to perform the current action.", + "deletion_disabled": "Deletion is disabled for this instance." }, "user": { "notFound": "User not found", diff --git a/packages/backend/src/services/ApiKeyService.ts b/packages/backend/src/services/ApiKeyService.ts index a2d3b5c..64fe4fb 100644 --- a/packages/backend/src/services/ApiKeyService.ts +++ b/packages/backend/src/services/ApiKeyService.ts @@ -3,13 +3,17 @@ import { db } from '../database'; import { apiKeys } from '../database/schema/api-keys'; import { CryptoService } from './CryptoService'; import { and, eq } from 'drizzle-orm'; -import { ApiKey } from '@open-archiver/types'; +import { ApiKey, User } from '@open-archiver/types'; +import { AuditService } from './AuditService'; export class ApiKeyService { + private static auditService = new AuditService(); public static async generate( userId: string, name: string, - expiresInDays: number + expiresInDays: number, + actor: User, + actorIp: string ): Promise { const key = randomBytes(32).toString('hex'); const expiresAt = new Date(); @@ -24,6 +28,17 @@ export class ApiKeyService { expiresAt, }); + await this.auditService.createAuditLog({ + actorIdentifier: actor.id, + actionType: 'GENERATE', + targetType: 'ApiKey', + targetId: name, + actorIp, + details: { + keyName: name, + }, + }); + return key; } @@ -46,8 +61,19 @@ export class ApiKeyService { .filter((k): k is NonNullable => k !== null); } - public static async deleteKey(id: string, userId: string) { + public static async deleteKey(id: string, userId: string, actor: User, actorIp: string) { + const [key] = await db.select().from(apiKeys).where(eq(apiKeys.id, id)); await db.delete(apiKeys).where(and(eq(apiKeys.id, id), eq(apiKeys.userId, userId))); + await this.auditService.createAuditLog({ + actorIdentifier: actor.id, + actionType: 'DELETE', + targetType: 'ApiKey', + targetId: id, + actorIp, + details: { + keyName: key?.name, + }, + }); } /** * diff --git a/packages/backend/src/services/ArchivedEmailService.ts b/packages/backend/src/services/ArchivedEmailService.ts index 76abc55..ccf322d 100644 --- a/packages/backend/src/services/ArchivedEmailService.ts +++ b/packages/backend/src/services/ArchivedEmailService.ts @@ -17,6 +17,9 @@ import type { import { StorageService } from './StorageService'; import { SearchService } from './SearchService'; import type { Readable } from 'stream'; +import { AuditService } from './AuditService'; +import { User } from '@open-archiver/types'; +import { checkDeletionEnabled } from '../helpers/deletionGuard'; interface DbRecipients { to: { name: string; address: string }[]; @@ -34,6 +37,7 @@ async function streamToBuffer(stream: Readable): Promise { } export class ArchivedEmailService { + private static auditService = new AuditService(); private static mapRecipients(dbRecipients: unknown): Recipient[] { const { to = [], cc = [], bcc = [] } = dbRecipients as DbRecipients; @@ -98,7 +102,9 @@ export class ArchivedEmailService { public static async getArchivedEmailById( emailId: string, - userId: string + userId: string, + actor: User, + actorIp: string ): Promise { const email = await db.query.archivedEmails.findFirst({ where: eq(archivedEmails.id, emailId), @@ -118,6 +124,15 @@ export class ArchivedEmailService { return null; } + await this.auditService.createAuditLog({ + actorIdentifier: actor.id, + actionType: 'READ', + targetType: 'ArchivedEmail', + targetId: emailId, + actorIp, + details: {}, + }); + let threadEmails: ThreadEmail[] = []; if (email.threadId) { @@ -179,7 +194,12 @@ export class ArchivedEmailService { return mappedEmail; } - public static async deleteArchivedEmail(emailId: string): Promise { + public static async deleteArchivedEmail( + emailId: string, + actor: User, + actorIp: string + ): Promise { + checkDeletionEnabled(); const [email] = await db .select() .from(archivedEmails) @@ -193,7 +213,7 @@ export class ArchivedEmailService { // Load and handle attachments before deleting the email itself if (email.hasAttachments) { - const emailAttachmentsResult = await db + const attachmentsForEmail = await db .select({ attachmentId: attachments.id, storagePath: attachments.storagePath, @@ -203,37 +223,33 @@ export class ArchivedEmailService { .where(eq(emailAttachments.emailId, emailId)); try { - for (const attachment of emailAttachmentsResult) { - const [refCount] = await db - .select({ count: count(emailAttachments.emailId) }) + for (const attachment of attachmentsForEmail) { + // Delete the link between this email and the attachment record. + await db + .delete(emailAttachments) + .where( + and( + eq(emailAttachments.emailId, emailId), + eq(emailAttachments.attachmentId, attachment.attachmentId) + ) + ); + + // Check if any other emails are linked to this attachment record. + const [recordRefCount] = await db + .select({ count: count() }) .from(emailAttachments) .where(eq(emailAttachments.attachmentId, attachment.attachmentId)); - if (refCount.count === 1) { + // If no other emails are linked to this record, it's safe to delete it and the file. + if (recordRefCount.count === 0) { await storage.delete(attachment.storagePath); - await db - .delete(emailAttachments) - .where( - and( - eq(emailAttachments.emailId, emailId), - eq(emailAttachments.attachmentId, attachment.attachmentId) - ) - ); await db .delete(attachments) .where(eq(attachments.id, attachment.attachmentId)); - } else { - await db - .delete(emailAttachments) - .where( - and( - eq(emailAttachments.emailId, emailId), - eq(emailAttachments.attachmentId, attachment.attachmentId) - ) - ); } } - } catch { + } catch (error) { + console.error('Failed to delete email attachments', error); throw new Error('Failed to delete email attachments'); } } @@ -245,5 +261,16 @@ export class ArchivedEmailService { await searchService.deleteDocuments('emails', [emailId]); await db.delete(archivedEmails).where(eq(archivedEmails.id, emailId)); + + await this.auditService.createAuditLog({ + actorIdentifier: actor.id, + actionType: 'DELETE', + targetType: 'ArchivedEmail', + targetId: emailId, + actorIp, + details: { + reason: 'ManualDeletion', + }, + }); } } diff --git a/packages/backend/src/services/AuditService.ts b/packages/backend/src/services/AuditService.ts new file mode 100644 index 0000000..b6fc776 --- /dev/null +++ b/packages/backend/src/services/AuditService.ts @@ -0,0 +1,199 @@ +import { db, Database } from '../database'; +import * as schema from '../database/schema'; +import { + AuditLogEntry, + CreateAuditLogEntry, + GetAuditLogsOptions, + GetAuditLogsResponse, +} from '@open-archiver/types'; +import { desc, sql, asc, and, gte, lte, eq } from 'drizzle-orm'; +import { createHash } from 'crypto'; + +export class AuditService { + private sanitizeObject(obj: any): any { + if (obj === null || typeof obj !== 'object') { + return obj; + } + if (Array.isArray(obj)) { + return obj.map((item) => this.sanitizeObject(item)); + } + const sanitizedObj: { [key: string]: any } = {}; + for (const key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) { + const value = obj[key]; + sanitizedObj[key] = value === undefined ? null : this.sanitizeObject(value); + } + } + return sanitizedObj; + } + + public async createAuditLog(entry: CreateAuditLogEntry) { + return db.transaction(async (tx) => { + // Lock the table to prevent race conditions + await tx.execute(sql`LOCK TABLE audit_logs IN EXCLUSIVE MODE`); + + const sanitizedEntry = this.sanitizeObject(entry); + + const previousHash = await this.getLatestHash(tx); + const newEntry = { + ...sanitizedEntry, + previousHash, + timestamp: new Date(), + }; + const currentHash = this.calculateHash(newEntry); + + const finalEntry = { + ...newEntry, + currentHash, + }; + + await tx.insert(schema.auditLogs).values(finalEntry); + + return finalEntry; + }); + } + + private async getLatestHash(tx: Database): Promise { + const [latest] = await tx + .select({ + currentHash: schema.auditLogs.currentHash, + }) + .from(schema.auditLogs) + .orderBy(desc(schema.auditLogs.id)) + .limit(1); + + return latest?.currentHash ?? null; + } + + private calculateHash(entry: any): string { + // Create a canonical object for hashing to ensure consistency in property order and types. + const objectToHash = { + actorIdentifier: entry.actorIdentifier, + actorIp: entry.actorIp ?? null, + actionType: entry.actionType, + targetType: entry.targetType ?? null, + targetId: entry.targetId ?? null, + details: entry.details ?? null, + previousHash: entry.previousHash ?? null, + // Normalize timestamp to milliseconds since epoch to avoid precision issues. + timestamp: new Date(entry.timestamp).getTime(), + }; + + const data = this.canonicalStringify(objectToHash); + return createHash('sha256').update(data).digest('hex'); + } + + private canonicalStringify(obj: any): string { + if (obj === undefined) { + return 'null'; + } + if (obj === null || typeof obj !== 'object') { + return JSON.stringify(obj); + } + + if (Array.isArray(obj)) { + return `[${obj.map((item) => this.canonicalStringify(item)).join(',')}]`; + } + + const keys = Object.keys(obj).sort(); + const pairs = keys.map((key) => { + const value = obj[key]; + return `${JSON.stringify(key)}:${this.canonicalStringify(value)}`; + }); + return `{${pairs.join(',')}}`; + } + + public async getAuditLogs(options: GetAuditLogsOptions = {}): Promise { + const { + page = 1, + limit = 20, + startDate, + endDate, + actor, + actionType, + sort = 'desc', + } = options; + + const whereClauses = []; + if (startDate) whereClauses.push(gte(schema.auditLogs.timestamp, startDate)); + if (endDate) whereClauses.push(lte(schema.auditLogs.timestamp, endDate)); + if (actor) whereClauses.push(eq(schema.auditLogs.actorIdentifier, actor)); + if (actionType) whereClauses.push(eq(schema.auditLogs.actionType, actionType)); + + const where = and(...whereClauses); + + const logs = await db.query.auditLogs.findMany({ + where, + orderBy: [sort === 'asc' ? asc(schema.auditLogs.id) : desc(schema.auditLogs.id)], + limit, + offset: (page - 1) * limit, + }); + + const totalResult = await db + .select({ + count: sql`count(*)`, + }) + .from(schema.auditLogs) + .where(where); + + const total = totalResult[0].count; + + return { + data: logs as AuditLogEntry[], + meta: { + total, + page, + limit, + }, + }; + } + + public async verifyAuditLog(): Promise<{ ok: boolean; message: string; logId?: number }> { + const chunkSize = 1000; + let offset = 0; + let previousHash: string | null = null; + /** + * TODO: create job for audit log verification, generate audit report (new DB table) + */ + while (true) { + const logs = await db.query.auditLogs.findMany({ + orderBy: [asc(schema.auditLogs.id)], + limit: chunkSize, + offset, + }); + + if (logs.length === 0) { + break; + } + + for (const log of logs) { + if (log.previousHash !== previousHash) { + return { + ok: false, + message: 'Audit log chain is broken!', + logId: log.id, + }; + } + + const calculatedHash = this.calculateHash(log); + + if (log.currentHash !== calculatedHash) { + return { + ok: false, + message: 'Audit log entry is tampered!', + logId: log.id, + }; + } + previousHash = log.currentHash; + } + + offset += chunkSize; + } + + return { + ok: true, + message: + 'Audit log integrity verified successfully. The logs are not tempered with and the log chain is complete.', + }; + } +} diff --git a/packages/backend/src/services/AuthService.ts b/packages/backend/src/services/AuthService.ts index fa995c3..8a5a04b 100644 --- a/packages/backend/src/services/AuthService.ts +++ b/packages/backend/src/services/AuthService.ts @@ -2,17 +2,25 @@ import { compare } from 'bcryptjs'; import { SignJWT, jwtVerify } from 'jose'; import type { AuthTokenPayload, LoginResponse } from '@open-archiver/types'; import { UserService } from './UserService'; +import { AuditService } from './AuditService'; import { db } from '../database'; import * as schema from '../database/schema'; import { eq } from 'drizzle-orm'; export class AuthService { #userService: UserService; + #auditService: AuditService; #jwtSecret: Uint8Array; #jwtExpiresIn: string; - constructor(userService: UserService, jwtSecret: string, jwtExpiresIn: string) { + constructor( + userService: UserService, + auditService: AuditService, + jwtSecret: string, + jwtExpiresIn: string + ) { this.#userService = userService; + this.#auditService = auditService; this.#jwtSecret = new TextEncoder().encode(jwtSecret); this.#jwtExpiresIn = jwtExpiresIn; } @@ -33,16 +41,36 @@ export class AuthService { .sign(this.#jwtSecret); } - public async login(email: string, password: string): Promise { + public async login(email: string, password: string, ip: string): Promise { const user = await this.#userService.findByEmail(email); if (!user || !user.password) { + await this.#auditService.createAuditLog({ + actorIdentifier: email, + actionType: 'LOGIN', + targetType: 'User', + targetId: email, + actorIp: ip, + details: { + error: 'UserNotFound', + }, + }); return null; // User not found or password not set } const isPasswordValid = await this.verifyPassword(password, user.password); if (!isPasswordValid) { + await this.#auditService.createAuditLog({ + actorIdentifier: user.id, + actionType: 'LOGIN', + targetType: 'User', + targetId: user.id, + actorIp: ip, + details: { + error: 'InvalidPassword', + }, + }); return null; // Invalid password } @@ -63,6 +91,15 @@ export class AuthService { roles: roles, }); + await this.#auditService.createAuditLog({ + actorIdentifier: user.id, + actionType: 'LOGIN', + targetType: 'User', + targetId: user.id, + actorIp: ip, + details: {}, + }); + return { accessToken, user: { diff --git a/packages/backend/src/services/IndexingService.ts b/packages/backend/src/services/IndexingService.ts index 1b4bba8..f5b0bc2 100644 --- a/packages/backend/src/services/IndexingService.ts +++ b/packages/backend/src/services/IndexingService.ts @@ -60,7 +60,6 @@ function sanitizeObject(obj: T): T { return obj; } - export class IndexingService { private dbService: DatabaseService; private searchService: SearchService; @@ -235,9 +234,7 @@ export class IndexingService { /** * @deprecated */ - private async indexByEmail( - pendingEmail: PendingEmail - ): Promise { + private async indexByEmail(pendingEmail: PendingEmail): Promise { const attachments: AttachmentsType = []; if (pendingEmail.email.attachments && pendingEmail.email.attachments.length > 0) { for (const attachment of pendingEmail.email.attachments) { @@ -259,7 +256,6 @@ export class IndexingService { await this.searchService.addDocuments('emails', [document], 'id'); } - /** * Creates a search document from a raw email object and its attachments. */ @@ -478,14 +474,12 @@ export class IndexingService { 'image/heif', ]; - - return extractableTypes.some((type) => mimeType.toLowerCase().includes(type)); } /** - * Ensures all required fields are present in EmailDocument - */ + * Ensures all required fields are present in EmailDocument + */ private ensureEmailDocumentFields(doc: Partial): EmailDocument { return { id: doc.id || 'missing-id', @@ -510,7 +504,10 @@ export class IndexingService { JSON.stringify(doc); return true; } catch (error) { - logger.error({ doc, error: (error as Error).message }, 'Invalid EmailDocument detected'); + logger.error( + { doc, error: (error as Error).message }, + 'Invalid EmailDocument detected' + ); return false; } } diff --git a/packages/backend/src/services/IngestionService.ts b/packages/backend/src/services/IngestionService.ts index e0eeb02..e59708a 100644 --- a/packages/backend/src/services/IngestionService.ts +++ b/packages/backend/src/services/IngestionService.ts @@ -20,16 +20,17 @@ import { attachments as attachmentsSchema, emailAttachments, } from '../database/schema'; -import { createHash } from 'crypto'; +import { createHash, randomUUID } from 'crypto'; import { logger } from '../config/logger'; -import { IndexingService } from './IndexingService'; import { SearchService } from './SearchService'; -import { DatabaseService } from './DatabaseService'; import { config } from '../config/index'; import { FilterBuilder } from './FilterBuilder'; -import e from 'express'; +import { AuditService } from './AuditService'; +import { User } from '@open-archiver/types'; +import { checkDeletionEnabled } from '../helpers/deletionGuard'; export class IngestionService { + private static auditService = new AuditService(); private static decryptSource( source: typeof ingestionSources.$inferSelect ): IngestionSource | null { @@ -54,7 +55,9 @@ export class IngestionService { public static async create( dto: CreateIngestionSourceDto, - userId: string + userId: string, + actor: User, + actorIp: string ): Promise { const { providerConfig, ...rest } = dto; const encryptedCredentials = CryptoService.encryptObject(providerConfig); @@ -68,9 +71,21 @@ export class IngestionService { const [newSource] = await db.insert(ingestionSources).values(valuesToInsert).returning(); + await this.auditService.createAuditLog({ + actorIdentifier: actor.id, + actionType: 'CREATE', + targetType: 'IngestionSource', + targetId: newSource.id, + actorIp, + details: { + sourceName: newSource.name, + sourceType: newSource.provider, + }, + }); + const decryptedSource = this.decryptSource(newSource); if (!decryptedSource) { - await this.delete(newSource.id); + await this.delete(newSource.id, actor, actorIp); throw new Error( 'Failed to process newly created ingestion source due to a decryption error.' ); @@ -81,13 +96,18 @@ export class IngestionService { const connectionValid = await connector.testConnection(); // If connection succeeds, update status to auth_success, which triggers the initial import. if (connectionValid) { - return await this.update(decryptedSource.id, { status: 'auth_success' }); + return await this.update( + decryptedSource.id, + { status: 'auth_success' }, + actor, + actorIp + ); } else { - throw Error('Ingestion authentication failed.') + throw Error('Ingestion authentication failed.'); } } catch (error) { // If connection fails, delete the newly created source and throw the error. - await this.delete(decryptedSource.id); + await this.delete(decryptedSource.id, actor, actorIp); throw error; } } @@ -124,7 +144,9 @@ export class IngestionService { public static async update( id: string, - dto: UpdateIngestionSourceDto + dto: UpdateIngestionSourceDto, + actor?: User, + actorIp?: string ): Promise { const { providerConfig, ...rest } = dto; const valuesToUpdate: Partial = { ...rest }; @@ -159,11 +181,32 @@ export class IngestionService { if (originalSource.status !== 'auth_success' && decryptedSource.status === 'auth_success') { await this.triggerInitialImport(decryptedSource.id); } + if (actor && actorIp) { + const changedFields = Object.keys(dto).filter( + (key) => + key !== 'providerConfig' && + originalSource[key as keyof IngestionSource] !== + decryptedSource[key as keyof IngestionSource] + ); + if (changedFields.length > 0) { + await this.auditService.createAuditLog({ + actorIdentifier: actor.id, + actionType: 'UPDATE', + targetType: 'IngestionSource', + targetId: id, + actorIp, + details: { + changedFields, + }, + }); + } + } return decryptedSource; } - public static async delete(id: string): Promise { + public static async delete(id: string, actor: User, actorIp: string): Promise { + checkDeletionEnabled(); const source = await this.findById(id); if (!source) { throw new Error('Ingestion source not found'); @@ -196,6 +239,17 @@ export class IngestionService { .where(eq(ingestionSources.id, id)) .returning(); + await this.auditService.createAuditLog({ + actorIdentifier: actor.id, + actionType: 'DELETE', + targetType: 'IngestionSource', + targetId: id, + actorIp, + details: { + sourceName: deletedSource.name, + }, + }); + const decryptedSource = this.decryptSource(deletedSource); if (!decryptedSource) { // Even if decryption fails, we should confirm deletion. @@ -216,7 +270,7 @@ export class IngestionService { await ingestionQueue.add('initial-import', { ingestionSourceId: source.id }); } - public static async triggerForceSync(id: string): Promise { + public static async triggerForceSync(id: string, actor: User, actorIp: string): Promise { const source = await this.findById(id); logger.info({ ingestionSourceId: id }, 'Force syncing started.'); if (!source) { @@ -241,15 +295,35 @@ export class IngestionService { } // Reset status to 'active' - await this.update(id, { - status: 'active', - lastSyncStatusMessage: 'Force sync triggered by user.', + await this.update( + id, + { + status: 'active', + lastSyncStatusMessage: 'Force sync triggered by user.', + }, + actor, + actorIp + ); + + await this.auditService.createAuditLog({ + actorIdentifier: actor.id, + actionType: 'SYNC', + targetType: 'IngestionSource', + targetId: id, + actorIp, + details: { + sourceName: source.name, + }, }); await ingestionQueue.add('continuous-sync', { ingestionSourceId: source.id }); } - public async performBulkImport(job: IInitialImportJob): Promise { + public static async performBulkImport( + job: IInitialImportJob, + actor: User, + actorIp: string + ): Promise { const { ingestionSourceId } = job; const source = await IngestionService.findById(ingestionSourceId); if (!source) { @@ -257,10 +331,15 @@ export class IngestionService { } logger.info(`Starting bulk import for source: ${source.name} (${source.id})`); - await IngestionService.update(ingestionSourceId, { - status: 'importing', - lastSyncStartedAt: new Date(), - }); + await IngestionService.update( + ingestionSourceId, + { + status: 'importing', + lastSyncStartedAt: new Date(), + }, + actor, + actorIp + ); const connector = EmailProviderFactory.createConnector(source); @@ -288,12 +367,17 @@ export class IngestionService { } } catch (error) { logger.error(`Bulk import failed for source: ${source.name} (${source.id})`, error); - await IngestionService.update(ingestionSourceId, { - status: 'error', - lastSyncFinishedAt: new Date(), - lastSyncStatusMessage: - error instanceof Error ? error.message : 'An unknown error occurred.', - }); + await IngestionService.update( + ingestionSourceId, + { + status: 'error', + lastSyncFinishedAt: new Date(), + lastSyncStatusMessage: + error instanceof Error ? error.message : 'An unknown error occurred.', + }, + actor, + actorIp + ); throw error; // Re-throw to allow BullMQ to handle the job failure } } @@ -372,29 +456,63 @@ export class IngestionService { const attachmentHash = createHash('sha256') .update(attachmentBuffer) .digest('hex'); - const attachmentPath = `${config.storage.openArchiverFolderName}/${source.name.replaceAll(' ', '-')}-${source.id}/attachments/${attachment.filename}`; - await storage.put(attachmentPath, attachmentBuffer); - const [newAttachment] = await db - .insert(attachmentsSchema) - .values({ - filename: attachment.filename, - mimeType: attachment.contentType, - sizeBytes: attachment.size, - contentHashSha256: attachmentHash, - storagePath: attachmentPath, - }) - .onConflictDoUpdate({ - target: attachmentsSchema.contentHashSha256, - set: { filename: attachment.filename }, - }) - .returning(); + // Check if an attachment with the same hash already exists for this source + const existingAttachment = await db.query.attachments.findFirst({ + where: and( + eq(attachmentsSchema.contentHashSha256, attachmentHash), + eq(attachmentsSchema.ingestionSourceId, source.id) + ), + }); + let storagePath: string; + + if (existingAttachment) { + // If it exists, reuse the storage path and don't save the file again + storagePath = existingAttachment.storagePath; + logger.info( + { + attachmentHash, + ingestionSourceId: source.id, + reusedPath: storagePath, + }, + 'Reusing existing attachment file for deduplication.' + ); + } else { + // If it's a new attachment, create a unique path and save it + const uniqueId = randomUUID().slice(0, 7); + storagePath = `${config.storage.openArchiverFolderName}/${source.name.replaceAll(' ', '-')}-${source.id}/attachments/${uniqueId}-${attachment.filename}`; + await storage.put(storagePath, attachmentBuffer); + } + + let attachmentRecord = existingAttachment; + + if (!attachmentRecord) { + // If it's a new attachment, create a unique path and save it + const uniqueId = randomUUID().slice(0, 5); + const storagePath = `${config.storage.openArchiverFolderName}/${source.name.replaceAll(' ', '-')}-${source.id}/attachments/${uniqueId}-${attachment.filename}`; + await storage.put(storagePath, attachmentBuffer); + + // Insert a new attachment record + [attachmentRecord] = await db + .insert(attachmentsSchema) + .values({ + filename: attachment.filename, + mimeType: attachment.contentType, + sizeBytes: attachment.size, + contentHashSha256: attachmentHash, + storagePath: storagePath, + ingestionSourceId: source.id, + }) + .returning(); + } + + // Link the attachment record (either new or existing) to the email await db .insert(emailAttachments) .values({ emailId: archivedEmail.id, - attachmentId: newAttachment.id, + attachmentId: attachmentRecord.id, }) .onConflictDoNothing(); } diff --git a/packages/backend/src/services/IntegrityService.ts b/packages/backend/src/services/IntegrityService.ts new file mode 100644 index 0000000..5e8fd30 --- /dev/null +++ b/packages/backend/src/services/IntegrityService.ts @@ -0,0 +1,93 @@ +import { db } from '../database'; +import { archivedEmails, emailAttachments } from '../database/schema'; +import { eq } from 'drizzle-orm'; +import { StorageService } from './StorageService'; +import { createHash } from 'crypto'; +import { logger } from '../config/logger'; +import type { IntegrityCheckResult } from '@open-archiver/types'; +import { streamToBuffer } from '../helpers/streamToBuffer'; + +export class IntegrityService { + private storageService = new StorageService(); + + public async checkEmailIntegrity(emailId: string): Promise { + const results: IntegrityCheckResult[] = []; + + // 1. Fetch the archived email + const email = await db.query.archivedEmails.findFirst({ + where: eq(archivedEmails.id, emailId), + }); + + if (!email) { + throw new Error('Archived email not found'); + } + + // 2. Check the email's integrity + const emailStream = await this.storageService.get(email.storagePath); + const emailBuffer = await streamToBuffer(emailStream); + const currentEmailHash = createHash('sha256').update(emailBuffer).digest('hex'); + + if (currentEmailHash === email.storageHashSha256) { + results.push({ type: 'email', id: email.id, isValid: true }); + } else { + results.push({ + type: 'email', + id: email.id, + isValid: false, + reason: 'Stored hash does not match current hash.', + }); + } + + // 3. If the email has attachments, check them + if (email.hasAttachments) { + const emailAttachmentsRelations = await db.query.emailAttachments.findMany({ + where: eq(emailAttachments.emailId, emailId), + with: { + attachment: true, + }, + }); + + for (const relation of emailAttachmentsRelations) { + const attachment = relation.attachment; + try { + const attachmentStream = await this.storageService.get(attachment.storagePath); + const attachmentBuffer = await streamToBuffer(attachmentStream); + const currentAttachmentHash = createHash('sha256') + .update(attachmentBuffer) + .digest('hex'); + + if (currentAttachmentHash === attachment.contentHashSha256) { + results.push({ + type: 'attachment', + id: attachment.id, + filename: attachment.filename, + isValid: true, + }); + } else { + results.push({ + type: 'attachment', + id: attachment.id, + filename: attachment.filename, + isValid: false, + reason: 'Stored hash does not match current hash.', + }); + } + } catch (error) { + logger.error( + { attachmentId: attachment.id, error }, + 'Failed to read attachment from storage for integrity check.' + ); + results.push({ + type: 'attachment', + id: attachment.id, + filename: attachment.filename, + isValid: false, + reason: 'Could not read attachment file from storage.', + }); + } + } + } + + return results; + } +} diff --git a/packages/backend/src/services/JobsService.ts b/packages/backend/src/services/JobsService.ts new file mode 100644 index 0000000..93cdd84 --- /dev/null +++ b/packages/backend/src/services/JobsService.ts @@ -0,0 +1,101 @@ +import { Job, Queue } from 'bullmq'; +import { ingestionQueue, indexingQueue } from '../jobs/queues'; +import { IJob, IQueueCounts, IQueueDetails, IQueueOverview, JobStatus } from '@open-archiver/types'; + +export class JobsService { + private queues: Queue[]; + + constructor() { + this.queues = [ingestionQueue, indexingQueue]; + } + + public async getQueues(): Promise { + const queueOverviews: IQueueOverview[] = []; + for (const queue of this.queues) { + const counts = await queue.getJobCounts( + 'active', + 'completed', + 'failed', + 'delayed', + 'waiting', + 'paused' + ); + queueOverviews.push({ + name: queue.name, + counts: { + active: counts.active || 0, + completed: counts.completed || 0, + failed: counts.failed || 0, + delayed: counts.delayed || 0, + waiting: counts.waiting || 0, + paused: counts.paused || 0, + }, + }); + } + return queueOverviews; + } + + public async getQueueDetails( + queueName: string, + status: JobStatus, + page: number, + limit: number + ): Promise { + const queue = this.queues.find((q) => q.name === queueName); + if (!queue) { + throw new Error(`Queue ${queueName} not found`); + } + + const counts = await queue.getJobCounts( + 'active', + 'completed', + 'failed', + 'delayed', + 'waiting', + 'paused' + ); + const start = (page - 1) * limit; + const end = start + limit - 1; + const jobStatus = status === 'waiting' ? 'wait' : status; + const jobs = await queue.getJobs([jobStatus], start, end, true); + const totalJobs = await queue.getJobCountByTypes(jobStatus); + + return { + name: queue.name, + counts: { + active: counts.active || 0, + completed: counts.completed || 0, + failed: counts.failed || 0, + delayed: counts.delayed || 0, + waiting: counts.waiting || 0, + paused: counts.paused || 0, + }, + jobs: await Promise.all(jobs.map((job) => this.formatJob(job))), + pagination: { + currentPage: page, + totalPages: Math.ceil(totalJobs / limit), + totalJobs, + limit, + }, + }; + } + + private async formatJob(job: Job): Promise { + const state = await job.getState(); + return { + id: job.id, + name: job.name, + data: job.data, + state: state, + failedReason: job.failedReason, + timestamp: job.timestamp, + processedOn: job.processedOn, + finishedOn: job.finishedOn, + attemptsMade: job.attemptsMade, + stacktrace: job.stacktrace, + returnValue: job.returnvalue, + ingestionSourceId: job.data.ingestionSourceId, + error: state === 'failed' ? job.stacktrace : undefined, + }; + } +} diff --git a/packages/backend/src/services/OcrService.ts b/packages/backend/src/services/OcrService.ts index 1aceca7..4945e2b 100644 --- a/packages/backend/src/services/OcrService.ts +++ b/packages/backend/src/services/OcrService.ts @@ -3,269 +3,270 @@ import { logger } from '../config/logger'; // Simple LRU cache for Tika results with statistics class TikaCache { - private cache = new Map(); - private maxSize = 50; - private hits = 0; - private misses = 0; + private cache = new Map(); + private maxSize = 50; + private hits = 0; + private misses = 0; - get(key: string): string | undefined { - const value = this.cache.get(key); - if (value !== undefined) { - this.hits++; - // LRU: Move element to the end - this.cache.delete(key); - this.cache.set(key, value); - } else { - this.misses++; - } - return value; - } + get(key: string): string | undefined { + const value = this.cache.get(key); + if (value !== undefined) { + this.hits++; + // LRU: Move element to the end + this.cache.delete(key); + this.cache.set(key, value); + } else { + this.misses++; + } + return value; + } - set(key: string, value: string): void { - // If already exists, delete first - if (this.cache.has(key)) { - this.cache.delete(key); - } - // If cache is full, remove oldest element - else if (this.cache.size >= this.maxSize) { - const firstKey = this.cache.keys().next().value; - if (firstKey !== undefined) { - this.cache.delete(firstKey); - } - } + set(key: string, value: string): void { + // If already exists, delete first + if (this.cache.has(key)) { + this.cache.delete(key); + } + // If cache is full, remove oldest element + else if (this.cache.size >= this.maxSize) { + const firstKey = this.cache.keys().next().value; + if (firstKey !== undefined) { + this.cache.delete(firstKey); + } + } - this.cache.set(key, value); - } + this.cache.set(key, value); + } - getStats(): { size: number; maxSize: number; hits: number; misses: number; hitRate: number } { - const total = this.hits + this.misses; - const hitRate = total > 0 ? (this.hits / total) * 100 : 0; - return { - size: this.cache.size, - maxSize: this.maxSize, - hits: this.hits, - misses: this.misses, - hitRate: Math.round(hitRate * 100) / 100 // 2 decimal places - }; - } + getStats(): { size: number; maxSize: number; hits: number; misses: number; hitRate: number } { + const total = this.hits + this.misses; + const hitRate = total > 0 ? (this.hits / total) * 100 : 0; + return { + size: this.cache.size, + maxSize: this.maxSize, + hits: this.hits, + misses: this.misses, + hitRate: Math.round(hitRate * 100) / 100, // 2 decimal places + }; + } - reset(): void { - this.cache.clear(); - this.hits = 0; - this.misses = 0; - } + reset(): void { + this.cache.clear(); + this.hits = 0; + this.misses = 0; + } } // Semaphore for running Tika requests class TikaSemaphore { - private inProgress = new Map>(); - private waitCount = 0; + private inProgress = new Map>(); + private waitCount = 0; - async acquire(key: string, operation: () => Promise): Promise { - // Check if a request for this key is already running - const existingPromise = this.inProgress.get(key); - if (existingPromise) { - this.waitCount++; - logger.debug(`Waiting for in-progress Tika request (${key.slice(0, 8)}...)`); - try { - return await existingPromise; - } finally { - this.waitCount--; - } - } + async acquire(key: string, operation: () => Promise): Promise { + // Check if a request for this key is already running + const existingPromise = this.inProgress.get(key); + if (existingPromise) { + this.waitCount++; + logger.debug(`Waiting for in-progress Tika request (${key.slice(0, 8)}...)`); + try { + return await existingPromise; + } finally { + this.waitCount--; + } + } - // Start new request - const promise = this.executeOperation(key, operation); - this.inProgress.set(key, promise); + // Start new request + const promise = this.executeOperation(key, operation); + this.inProgress.set(key, promise); - try { - return await promise; - } finally { - // Remove promise from map when finished - this.inProgress.delete(key); - } - } + try { + return await promise; + } finally { + // Remove promise from map when finished + this.inProgress.delete(key); + } + } - private async executeOperation(key: string, operation: () => Promise): Promise { - try { - return await operation(); - } catch (error) { - // Remove promise from map even on errors - logger.error(`Tika operation failed for key ${key.slice(0, 8)}...`, error); - throw error; - } - } + private async executeOperation(key: string, operation: () => Promise): Promise { + try { + return await operation(); + } catch (error) { + // Remove promise from map even on errors + logger.error(`Tika operation failed for key ${key.slice(0, 8)}...`, error); + throw error; + } + } - getStats(): { inProgress: number; waitCount: number } { - return { - inProgress: this.inProgress.size, - waitCount: this.waitCount - }; - } + getStats(): { inProgress: number; waitCount: number } { + return { + inProgress: this.inProgress.size, + waitCount: this.waitCount, + }; + } - clear(): void { - this.inProgress.clear(); - this.waitCount = 0; - } + clear(): void { + this.inProgress.clear(); + this.waitCount = 0; + } } export class OcrService { - private tikaCache = new TikaCache(); - private tikaSemaphore = new TikaSemaphore(); + private tikaCache = new TikaCache(); + private tikaSemaphore = new TikaSemaphore(); - // Tika-based text extraction with cache and semaphore - async extractTextWithTika(buffer: Buffer, mimeType: string): Promise { - const tikaUrl = process.env.TIKA_URL; - if (!tikaUrl) { - throw new Error('TIKA_URL environment variable not set'); - } + // Tika-based text extraction with cache and semaphore + async extractTextWithTika(buffer: Buffer, mimeType: string): Promise { + const tikaUrl = process.env.TIKA_URL; + if (!tikaUrl) { + throw new Error('TIKA_URL environment variable not set'); + } - // Cache key: SHA-256 hash of the buffer - const hash = crypto.createHash('sha256').update(buffer).digest('hex'); + // Cache key: SHA-256 hash of the buffer + const hash = crypto.createHash('sha256').update(buffer).digest('hex'); - // Cache lookup (before semaphore!) - const cachedResult = this.tikaCache.get(hash); - if (cachedResult !== undefined) { - logger.debug(`Tika cache hit for ${mimeType} (${buffer.length} bytes)`); - return cachedResult; - } + // Cache lookup (before semaphore!) + const cachedResult = this.tikaCache.get(hash); + if (cachedResult !== undefined) { + logger.debug(`Tika cache hit for ${mimeType} (${buffer.length} bytes)`); + return cachedResult; + } - // Use semaphore to deduplicate parallel requests - return await this.tikaSemaphore.acquire(hash, async () => { - // Check cache again (might have been filled by parallel request) - const cachedAfterWait = this.tikaCache.get(hash); - if (cachedAfterWait !== undefined) { - logger.debug(`Tika cache hit after wait for ${mimeType} (${buffer.length} bytes)`); - return cachedAfterWait; - } + // Use semaphore to deduplicate parallel requests + return await this.tikaSemaphore.acquire(hash, async () => { + // Check cache again (might have been filled by parallel request) + const cachedAfterWait = this.tikaCache.get(hash); + if (cachedAfterWait !== undefined) { + logger.debug(`Tika cache hit after wait for ${mimeType} (${buffer.length} bytes)`); + return cachedAfterWait; + } - logger.debug(`Executing Tika request for ${mimeType} (${buffer.length} bytes)`); + logger.debug(`Executing Tika request for ${mimeType} (${buffer.length} bytes)`); - // DNS fallback: If "tika" hostname, also try localhost - const urlsToTry = [ - `${tikaUrl}/tika`, - // Fallback falls DNS-Problem mit "tika" hostname - ...(tikaUrl.includes('://tika:') - ? [`${tikaUrl.replace('://tika:', '://localhost:')}/tika`] - : []) - ]; + // DNS fallback: If "tika" hostname, also try localhost + const urlsToTry = [ + `${tikaUrl}/tika`, + // Fallback falls DNS-Problem mit "tika" hostname + ...(tikaUrl.includes('://tika:') + ? [`${tikaUrl.replace('://tika:', '://localhost:')}/tika`] + : []), + ]; - for (const url of urlsToTry) { - try { - logger.debug(`Trying Tika URL: ${url}`); - const response = await fetch(url, { - method: 'PUT', - headers: { - 'Content-Type': mimeType || 'application/octet-stream', - Accept: 'text/plain', - Connection: 'close' - }, - body: buffer, - signal: AbortSignal.timeout(180000) - }); + for (const url of urlsToTry) { + try { + logger.debug(`Trying Tika URL: ${url}`); + const response = await fetch(url, { + method: 'PUT', + headers: { + 'Content-Type': mimeType || 'application/octet-stream', + Accept: 'text/plain', + Connection: 'close', + }, + body: buffer, + signal: AbortSignal.timeout(180000), + }); - if (!response.ok) { - logger.warn( - `Tika extraction failed at ${url}: ${response.status} ${response.statusText}` - ); - continue; // Try next URL - } + if (!response.ok) { + logger.warn( + `Tika extraction failed at ${url}: ${response.status} ${response.statusText}` + ); + continue; // Try next URL + } - const text = await response.text(); - const result = text.trim(); + const text = await response.text(); + const result = text.trim(); - // Cache result (also empty strings to avoid repeated attempts) - this.tikaCache.set(hash, result); + // Cache result (also empty strings to avoid repeated attempts) + this.tikaCache.set(hash, result); - const cacheStats = this.tikaCache.getStats(); - const semaphoreStats = this.tikaSemaphore.getStats(); - logger.debug( - `Tika extraction successful - Cache: ${cacheStats.hits}H/${cacheStats.misses}M (${cacheStats.hitRate}%) - Semaphore: ${semaphoreStats.inProgress} active, ${semaphoreStats.waitCount} waiting` - ); + const cacheStats = this.tikaCache.getStats(); + const semaphoreStats = this.tikaSemaphore.getStats(); + logger.debug( + `Tika extraction successful - Cache: ${cacheStats.hits}H/${cacheStats.misses}M (${cacheStats.hitRate}%) - Semaphore: ${semaphoreStats.inProgress} active, ${semaphoreStats.waitCount} waiting` + ); - return result; - } catch (error) { - logger.warn( - `Tika extraction error at ${url}:`, - error instanceof Error ? error.message : 'Unknown error' - ); - // Continue to next URL - } - } + return result; + } catch (error) { + logger.warn( + `Tika extraction error at ${url}:`, + error instanceof Error ? error.message : 'Unknown error' + ); + // Continue to next URL + } + } - // All URLs failed - cache this too (as empty string) - logger.error('All Tika URLs failed'); - this.tikaCache.set(hash, ''); - return ''; - }); - } + // All URLs failed - cache this too (as empty string) + logger.error('All Tika URLs failed'); + this.tikaCache.set(hash, ''); + return ''; + }); + } - // Helper function to check Tika availability - async checkTikaAvailability(): Promise { - const tikaUrl = process.env.TIKA_URL; - if (!tikaUrl) { - return false; - } + // Helper function to check Tika availability + async checkTikaAvailability(): Promise { + const tikaUrl = process.env.TIKA_URL; + if (!tikaUrl) { + return false; + } - try { - const response = await fetch(`${tikaUrl}/version`, { - method: 'GET', - signal: AbortSignal.timeout(5000) // 5 seconds timeout - }); + try { + const response = await fetch(`${tikaUrl}/version`, { + method: 'GET', + signal: AbortSignal.timeout(5000), // 5 seconds timeout + }); - if (response.ok) { - const version = await response.text(); - logger.info(`Tika server available, version: ${version.trim()}`); - return true; - } + if (response.ok) { + const version = await response.text(); + logger.info(`Tika server available, version: ${version.trim()}`); + return true; + } - return false; - } catch (error) { - logger.warn( - 'Tika server not available:', - error instanceof Error ? error.message : 'Unknown error' - ); - return false; - } - } + return false; + } catch (error) { + logger.warn( + 'Tika server not available:', + error instanceof Error ? error.message : 'Unknown error' + ); + return false; + } + } - // Optional: Tika health check on startup - async initializeTextExtractor(): Promise { - const tikaUrl = process.env.TIKA_URL; + // Optional: Tika health check on startup + async initializeTextExtractor(): Promise { + const tikaUrl = process.env.TIKA_URL; - if (tikaUrl) { - const isAvailable = await this.checkTikaAvailability(); - if (!isAvailable) { - logger.error(`Tika server configured but not available at: ${tikaUrl}`); - logger.error('Text extraction will fall back to legacy methods or fail'); - } - } else { - logger.info('Using legacy text extraction methods (pdf2json, mammoth, xlsx)'); - logger.info('Set TIKA_URL environment variable to use Apache Tika for better extraction'); - } - } + if (tikaUrl) { + const isAvailable = await this.checkTikaAvailability(); + if (!isAvailable) { + logger.error(`Tika server configured but not available at: ${tikaUrl}`); + logger.error('Text extraction will fall back to legacy methods or fail'); + } + } else { + logger.info('Using legacy text extraction methods (pdf2json, mammoth, xlsx)'); + logger.info( + 'Set TIKA_URL environment variable to use Apache Tika for better extraction' + ); + } + } - // Get cache statistics - getTikaCacheStats(): { - size: number; - maxSize: number; - hits: number; - misses: number; - hitRate: number; - } { - return this.tikaCache.getStats(); - } + // Get cache statistics + getTikaCacheStats(): { + size: number; + maxSize: number; + hits: number; + misses: number; + hitRate: number; + } { + return this.tikaCache.getStats(); + } - // Get semaphore statistics - getTikaSemaphoreStats(): { inProgress: number; waitCount: number } { - return this.tikaSemaphore.getStats(); - } + // Get semaphore statistics + getTikaSemaphoreStats(): { inProgress: number; waitCount: number } { + return this.tikaSemaphore.getStats(); + } - // Clear cache (e.g. for tests or manual reset) - clearTikaCache(): void { - this.tikaCache.reset(); - this.tikaSemaphore.clear(); - logger.info('Tika cache and semaphore cleared'); - } + // Clear cache (e.g. for tests or manual reset) + clearTikaCache(): void { + this.tikaCache.reset(); + this.tikaSemaphore.clear(); + logger.info('Tika cache and semaphore cleared'); + } } - diff --git a/packages/backend/src/services/SearchService.ts b/packages/backend/src/services/SearchService.ts index b57efc2..3d784be 100644 --- a/packages/backend/src/services/SearchService.ts +++ b/packages/backend/src/services/SearchService.ts @@ -1,16 +1,25 @@ import { Index, MeiliSearch, SearchParams } from 'meilisearch'; import { config } from '../config'; -import type { SearchQuery, SearchResult, EmailDocument, TopSender } from '@open-archiver/types'; +import type { + SearchQuery, + SearchResult, + EmailDocument, + TopSender, + User, +} from '@open-archiver/types'; import { FilterBuilder } from './FilterBuilder'; +import { AuditService } from './AuditService'; export class SearchService { private client: MeiliSearch; + private auditService: AuditService; constructor() { this.client = new MeiliSearch({ host: config.search.host, apiKey: config.search.apiKey, }); + this.auditService = new AuditService(); } public async getIndex>(name: string): Promise> { @@ -48,7 +57,11 @@ export class SearchService { return index.deleteDocuments({ filter }); } - public async searchEmails(dto: SearchQuery, userId: string): Promise { + public async searchEmails( + dto: SearchQuery, + userId: string, + actorIp: string + ): Promise { const { query, filters, page = 1, limit = 10, matchingStrategy = 'last' } = dto; const index = await this.getIndex('emails'); @@ -84,9 +97,24 @@ export class SearchService { searchParams.filter = searchFilter; } } - console.log('searchParams', searchParams); + // console.log('searchParams', searchParams); const searchResults = await index.search(query, searchParams); + await this.auditService.createAuditLog({ + actorIdentifier: userId, + actionType: 'SEARCH', + targetType: 'ArchivedEmail', + targetId: '', + actorIp, + details: { + query, + filters, + page, + limit, + matchingStrategy, + }, + }); + return { hits: searchResults.hits, total: searchResults.estimatedTotalHits ?? searchResults.hits.length, diff --git a/packages/backend/src/services/SettingsService.ts b/packages/backend/src/services/SettingsService.ts index eea4225..6682ff6 100644 --- a/packages/backend/src/services/SettingsService.ts +++ b/packages/backend/src/services/SettingsService.ts @@ -1,7 +1,7 @@ import { db } from '../database'; import { systemSettings } from '../database/schema/system-settings'; -import type { SystemSettings } from '@open-archiver/types'; -import { eq } from 'drizzle-orm'; +import type { SystemSettings, User } from '@open-archiver/types'; +import { AuditService } from './AuditService'; const DEFAULT_SETTINGS: SystemSettings = { language: 'en', @@ -10,6 +10,7 @@ const DEFAULT_SETTINGS: SystemSettings = { }; export class SettingsService { + private auditService = new AuditService(); /** * Retrieves the current system settings. * If no settings exist, it initializes and returns the default settings. @@ -30,13 +31,36 @@ export class SettingsService { * @param newConfig - A partial object of the new settings configuration. * @returns The updated system settings. */ - public async updateSystemSettings(newConfig: Partial): Promise { + public async updateSystemSettings( + newConfig: Partial, + actor: User, + actorIp: string + ): Promise { const currentConfig = await this.getSystemSettings(); const mergedConfig = { ...currentConfig, ...newConfig }; // Since getSettings ensures a record always exists, we can directly update. const [result] = await db.update(systemSettings).set({ config: mergedConfig }).returning(); + const changedFields = Object.keys(newConfig).filter( + (key) => + currentConfig[key as keyof SystemSettings] !== + newConfig[key as keyof SystemSettings] + ); + + if (changedFields.length > 0) { + await this.auditService.createAuditLog({ + actorIdentifier: actor.id, + actionType: 'UPDATE', + targetType: 'SystemSettings', + targetId: 'system', + actorIp, + details: { + changedFields, + }, + }); + } + return result.config; } diff --git a/packages/backend/src/services/StorageService.ts b/packages/backend/src/services/StorageService.ts index a486fe1..565a41a 100644 --- a/packages/backend/src/services/StorageService.ts +++ b/packages/backend/src/services/StorageService.ts @@ -2,11 +2,25 @@ import { IStorageProvider, StorageConfig } from '@open-archiver/types'; import { LocalFileSystemProvider } from './storage/LocalFileSystemProvider'; import { S3StorageProvider } from './storage/S3StorageProvider'; import { config } from '../config/index'; +import { createCipheriv, createDecipheriv, randomBytes } from 'crypto'; +import { streamToBuffer } from '../helpers/streamToBuffer'; +import { Readable } from 'stream'; + +/** + * A unique identifier for Open Archiver encrypted files. This value SHOULD NOT BE ALTERED in future development to ensure compatibility. + */ +const ENCRYPTION_PREFIX = Buffer.from('oa_enc_idf_v1::'); export class StorageService implements IStorageProvider { private provider: IStorageProvider; + private encryptionKey: Buffer | null = null; + private readonly algorithm = 'aes-256-cbc'; constructor(storageConfig: StorageConfig = config.storage) { + if (storageConfig.encryptionKey) { + this.encryptionKey = Buffer.from(storageConfig.encryptionKey, 'hex'); + } + switch (storageConfig.type) { case 'local': this.provider = new LocalFileSystemProvider(storageConfig); @@ -19,12 +33,52 @@ export class StorageService implements IStorageProvider { } } - put(path: string, content: Buffer | NodeJS.ReadableStream): Promise { - return this.provider.put(path, content); + private async encrypt(content: Buffer): Promise { + if (!this.encryptionKey) { + return content; + } + const iv = randomBytes(16); + const cipher = createCipheriv(this.algorithm, this.encryptionKey, iv); + const encrypted = Buffer.concat([cipher.update(content), cipher.final()]); + return Buffer.concat([ENCRYPTION_PREFIX, iv, encrypted]); } - get(path: string): Promise { - return this.provider.get(path); + private async decrypt(content: Buffer): Promise { + if (!this.encryptionKey) { + return content; + } + const prefix = content.subarray(0, ENCRYPTION_PREFIX.length); + if (!prefix.equals(ENCRYPTION_PREFIX)) { + // File is not encrypted, return as is + return content; + } + + try { + const iv = content.subarray(ENCRYPTION_PREFIX.length, ENCRYPTION_PREFIX.length + 16); + const encrypted = content.subarray(ENCRYPTION_PREFIX.length + 16); + const decipher = createDecipheriv(this.algorithm, this.encryptionKey, iv); + return Buffer.concat([decipher.update(encrypted), decipher.final()]); + } catch (error) { + // Decryption failed for a file that has the prefix. + // This indicates a corrupted file or a wrong key. + throw new Error('Failed to decrypt file. It may be corrupted or the key is incorrect.'); + } + } + + async put(path: string, content: Buffer | NodeJS.ReadableStream): Promise { + const buffer = + content instanceof Buffer + ? content + : await streamToBuffer(content as NodeJS.ReadableStream); + const encryptedContent = await this.encrypt(buffer); + return this.provider.put(path, encryptedContent); + } + + async get(path: string): Promise { + const stream = await this.provider.get(path); + const buffer = await streamToBuffer(stream); + const decryptedContent = await this.decrypt(buffer); + return Readable.from(decryptedContent); } delete(path: string): Promise { diff --git a/packages/backend/src/services/UserService.ts b/packages/backend/src/services/UserService.ts index 0842c93..037fa53 100644 --- a/packages/backend/src/services/UserService.ts +++ b/packages/backend/src/services/UserService.ts @@ -3,8 +3,10 @@ import * as schema from '../database/schema'; import { eq, sql } from 'drizzle-orm'; import { hash } from 'bcryptjs'; import type { CaslPolicy, User } from '@open-archiver/types'; +import { AuditService } from './AuditService'; export class UserService { + private static auditService = new AuditService(); /** * Finds a user by their email address. * @param email The email address of the user to find. @@ -60,7 +62,9 @@ export class UserService { public async createUser( userDetails: Pick & { password?: string }, - roleId: string + roleId: string, + actor: User, + actorIp: string ): Promise { const { email, first_name, last_name, password } = userDetails; const hashedPassword = password ? await hash(password, 10) : undefined; @@ -80,33 +84,72 @@ export class UserService { roleId: roleId, }); + await UserService.auditService.createAuditLog({ + actorIdentifier: actor.id, + actionType: 'CREATE', + targetType: 'User', + targetId: newUser[0].id, + actorIp, + details: { + createdUserEmail: newUser[0].email, + }, + }); + return newUser[0]; } public async updateUser( id: string, userDetails: Partial>, - roleId?: string + roleId: string | undefined, + actor: User, + actorIp: string ): Promise { + const originalUser = await this.findById(id); const updatedUser = await db .update(schema.users) .set(userDetails) .where(eq(schema.users.id, id)) .returning(); - if (roleId) { + if (roleId && originalUser?.role?.id !== roleId) { await db.delete(schema.userRoles).where(eq(schema.userRoles.userId, id)); await db.insert(schema.userRoles).values({ userId: id, roleId: roleId, }); + await UserService.auditService.createAuditLog({ + actorIdentifier: actor.id, + actionType: 'UPDATE', + targetType: 'User', + targetId: id, + actorIp, + details: { + field: 'role', + oldValue: originalUser?.role?.name, + newValue: roleId, // TODO: get role name + }, + }); } + // TODO: log other user detail changes + return updatedUser[0] || null; } - public async deleteUser(id: string): Promise { + public async deleteUser(id: string, actor: User, actorIp: string): Promise { + const userToDelete = await this.findById(id); await db.delete(schema.users).where(eq(schema.users.id, id)); + await UserService.auditService.createAuditLog({ + actorIdentifier: actor.id, + actionType: 'DELETE', + targetType: 'User', + targetId: id, + actorIp, + details: { + deletedUserEmail: userToDelete?.email, + }, + }); } /** @@ -152,6 +195,17 @@ export class UserService { roleId: superAdminRole.id, }); + await UserService.auditService.createAuditLog({ + actorIdentifier: 'SYSTEM', + actionType: 'SETUP', + targetType: 'User', + targetId: newUser[0].id, + actorIp: '::1', // System action + details: { + setupAdminEmail: newUser[0].email, + }, + }); + return newUser[0]; } diff --git a/packages/backend/src/services/ingestion-connectors/ImapConnector.ts b/packages/backend/src/services/ingestion-connectors/ImapConnector.ts index 9f32469..56e8106 100644 --- a/packages/backend/src/services/ingestion-connectors/ImapConnector.ts +++ b/packages/backend/src/services/ingestion-connectors/ImapConnector.ts @@ -8,6 +8,7 @@ import type { import type { IEmailConnector } from '../EmailProviderFactory'; import { ImapFlow } from 'imapflow'; import { simpleParser, ParsedMail, Attachment, AddressObject, Headers } from 'mailparser'; +import { config } from '../../config'; import { logger } from '../../config/logger'; import { getThreadId } from './helpers/utils'; @@ -154,24 +155,18 @@ export class ImapConnector implements IEmailConnector { const mailboxes = await this.withRetry(async () => await this.client.list()); const processableMailboxes = mailboxes.filter((mailbox) => { - // filter out trash and all mail emails + if (config.app.allInclusiveArchive) { + return true; + } + // filter out junk/spam mail emails if (mailbox.specialUse) { const specialUse = mailbox.specialUse.toLowerCase(); - if ( - specialUse === '\\junk' || - specialUse === '\\trash' || - specialUse === '\\all' - ) { + if (specialUse === '\\junk' || specialUse === '\\trash') { return false; } } // Fallback to checking flags - if ( - mailbox.flags.has('\\Noselect') || - mailbox.flags.has('\\Trash') || - mailbox.flags.has('\\Junk') || - mailbox.flags.has('\\All') - ) { + if (mailbox.flags.has('\\Trash') || mailbox.flags.has('\\Junk')) { return false; } diff --git a/packages/backend/src/services/ingestion-connectors/MboxConnector.ts b/packages/backend/src/services/ingestion-connectors/MboxConnector.ts index b193d03..1af2596 100644 --- a/packages/backend/src/services/ingestion-connectors/MboxConnector.ts +++ b/packages/backend/src/services/ingestion-connectors/MboxConnector.ts @@ -1,9 +1,9 @@ import type { - MboxImportCredentials, - EmailObject, - EmailAddress, - SyncState, - MailboxUser, + MboxImportCredentials, + EmailObject, + EmailAddress, + SyncState, + MailboxUser, } from '@open-archiver/types'; import type { IEmailConnector } from '../EmailProviderFactory'; import { simpleParser, ParsedMail, Attachment, AddressObject } from 'mailparser'; @@ -15,160 +15,160 @@ import { createHash } from 'crypto'; import { streamToBuffer } from '../../helpers/streamToBuffer'; export class MboxConnector implements IEmailConnector { - private storage: StorageService; + private storage: StorageService; - constructor(private credentials: MboxImportCredentials) { - this.storage = new StorageService(); - } + constructor(private credentials: MboxImportCredentials) { + this.storage = new StorageService(); + } - public async testConnection(): Promise { - try { - if (!this.credentials.uploadedFilePath) { - throw Error('Mbox file path not provided.'); - } - if (!this.credentials.uploadedFilePath.includes('.mbox')) { - throw Error('Provided file is not in the MBOX format.'); - } - const fileExist = await this.storage.exists(this.credentials.uploadedFilePath); - if (!fileExist) { - throw Error('Mbox file upload not finished yet, please wait.'); - } + public async testConnection(): Promise { + try { + if (!this.credentials.uploadedFilePath) { + throw Error('Mbox file path not provided.'); + } + if (!this.credentials.uploadedFilePath.includes('.mbox')) { + throw Error('Provided file is not in the MBOX format.'); + } + const fileExist = await this.storage.exists(this.credentials.uploadedFilePath); + if (!fileExist) { + throw Error('Mbox file upload not finished yet, please wait.'); + } - return true; - } catch (error) { - logger.error({ error, credentials: this.credentials }, 'Mbox file validation failed.'); - throw error; - } - } + return true; + } catch (error) { + logger.error({ error, credentials: this.credentials }, 'Mbox file validation failed.'); + throw error; + } + } - public async *listAllUsers(): AsyncGenerator { - const displayName = - this.credentials.uploadedFileName || `mbox-import-${new Date().getTime()}`; - logger.info(`Found potential mailbox: ${displayName}`); - const constructedPrimaryEmail = `${displayName.replace(/ /g, '.').toLowerCase()}@mbox.local`; - yield { - id: constructedPrimaryEmail, - primaryEmail: constructedPrimaryEmail, - displayName: displayName, - }; - } + public async *listAllUsers(): AsyncGenerator { + const displayName = + this.credentials.uploadedFileName || `mbox-import-${new Date().getTime()}`; + logger.info(`Found potential mailbox: ${displayName}`); + const constructedPrimaryEmail = `${displayName.replace(/ /g, '.').toLowerCase()}@mbox.local`; + yield { + id: constructedPrimaryEmail, + primaryEmail: constructedPrimaryEmail, + displayName: displayName, + }; + } - public async *fetchEmails( - userEmail: string, - syncState?: SyncState | null - ): AsyncGenerator { - try { - const fileStream = await this.storage.get(this.credentials.uploadedFilePath); - const fileBuffer = await streamToBuffer(fileStream as Readable); - const mboxContent = fileBuffer.toString('utf-8'); - const emailDelimiter = '\nFrom '; - const emails = mboxContent.split(emailDelimiter); + public async *fetchEmails( + userEmail: string, + syncState?: SyncState | null + ): AsyncGenerator { + try { + const fileStream = await this.storage.get(this.credentials.uploadedFilePath); + const fileBuffer = await streamToBuffer(fileStream as Readable); + const mboxContent = fileBuffer.toString('utf-8'); + const emailDelimiter = '\nFrom '; + const emails = mboxContent.split(emailDelimiter); - // The first split part might be empty or part of the first email's header, so we adjust. - if (emails.length > 0 && !mboxContent.startsWith('From ')) { - emails.shift(); // Adjust if the file doesn't start with "From " - } + // The first split part might be empty or part of the first email's header, so we adjust. + if (emails.length > 0 && !mboxContent.startsWith('From ')) { + emails.shift(); // Adjust if the file doesn't start with "From " + } - logger.info(`Found ${emails.length} potential emails in the mbox file.`); - let emailCount = 0; + logger.info(`Found ${emails.length} potential emails in the mbox file.`); + let emailCount = 0; - for (const email of emails) { - try { - // Re-add the "From " delimiter for the parser, except for the very first email - const emailWithDelimiter = - emailCount > 0 || mboxContent.startsWith('From ') ? `From ${email}` : email; - const emailBuffer = Buffer.from(emailWithDelimiter, 'utf-8'); - const emailObject = await this.parseMessage(emailBuffer, ''); - yield emailObject; - emailCount++; - } catch (error) { - logger.error( - { error, file: this.credentials.uploadedFilePath }, - 'Failed to process a single message from mbox file. Skipping.' - ); - } - } - logger.info(`Finished processing mbox file. Total emails processed: ${emailCount}`); - } finally { - try { - await this.storage.delete(this.credentials.uploadedFilePath); - } catch (error) { - logger.error( - { error, file: this.credentials.uploadedFilePath }, - 'Failed to delete mbox file after processing.' - ); - } - } - } + for (const email of emails) { + try { + // Re-add the "From " delimiter for the parser, except for the very first email + const emailWithDelimiter = + emailCount > 0 || mboxContent.startsWith('From ') ? `From ${email}` : email; + const emailBuffer = Buffer.from(emailWithDelimiter, 'utf-8'); + const emailObject = await this.parseMessage(emailBuffer, ''); + yield emailObject; + emailCount++; + } catch (error) { + logger.error( + { error, file: this.credentials.uploadedFilePath }, + 'Failed to process a single message from mbox file. Skipping.' + ); + } + } + logger.info(`Finished processing mbox file. Total emails processed: ${emailCount}`); + } finally { + try { + await this.storage.delete(this.credentials.uploadedFilePath); + } catch (error) { + logger.error( + { error, file: this.credentials.uploadedFilePath }, + 'Failed to delete mbox file after processing.' + ); + } + } + } - private async parseMessage(emlBuffer: Buffer, path: string): Promise { - const parsedEmail: ParsedMail = await simpleParser(emlBuffer); + private async parseMessage(emlBuffer: Buffer, path: string): Promise { + const parsedEmail: ParsedMail = await simpleParser(emlBuffer); - const attachments = parsedEmail.attachments.map((attachment: Attachment) => ({ - filename: attachment.filename || 'untitled', - contentType: attachment.contentType, - size: attachment.size, - content: attachment.content as Buffer, - })); + const attachments = parsedEmail.attachments.map((attachment: Attachment) => ({ + filename: attachment.filename || 'untitled', + contentType: attachment.contentType, + size: attachment.size, + content: attachment.content as Buffer, + })); - const mapAddresses = ( - addresses: AddressObject | AddressObject[] | undefined - ): EmailAddress[] => { - if (!addresses) return []; - const addressArray = Array.isArray(addresses) ? addresses : [addresses]; - return addressArray.flatMap((a) => - a.value.map((v) => ({ - name: v.name, - address: v.address?.replaceAll(`'`, '') || '', - })) - ); - }; + const mapAddresses = ( + addresses: AddressObject | AddressObject[] | undefined + ): EmailAddress[] => { + if (!addresses) return []; + const addressArray = Array.isArray(addresses) ? addresses : [addresses]; + return addressArray.flatMap((a) => + a.value.map((v) => ({ + name: v.name, + address: v.address?.replaceAll(`'`, '') || '', + })) + ); + }; - const threadId = getThreadId(parsedEmail.headers); - let messageId = parsedEmail.messageId; + const threadId = getThreadId(parsedEmail.headers); + let messageId = parsedEmail.messageId; - if (!messageId) { - messageId = `generated-${createHash('sha256').update(emlBuffer).digest('hex')}`; - } + if (!messageId) { + messageId = `generated-${createHash('sha256').update(emlBuffer).digest('hex')}`; + } - const from = mapAddresses(parsedEmail.from); - if (from.length === 0) { - from.push({ name: 'No Sender', address: 'No Sender' }); - } + const from = mapAddresses(parsedEmail.from); + if (from.length === 0) { + from.push({ name: 'No Sender', address: 'No Sender' }); + } - // Extract folder path from headers. Mbox files don't have a standard folder structure, so we rely on custom headers added by email clients. - // Gmail uses 'X-Gmail-Labels', and other clients like Thunderbird may use 'X-Folder'. - const gmailLabels = parsedEmail.headers.get('x-gmail-labels'); - const folderHeader = parsedEmail.headers.get('x-folder'); - let finalPath = ''; + // Extract folder path from headers. Mbox files don't have a standard folder structure, so we rely on custom headers added by email clients. + // Gmail uses 'X-Gmail-Labels', and other clients like Thunderbird may use 'X-Folder'. + const gmailLabels = parsedEmail.headers.get('x-gmail-labels'); + const folderHeader = parsedEmail.headers.get('x-folder'); + let finalPath = ''; - if (gmailLabels && typeof gmailLabels === 'string') { - // We take the first label as the primary folder. - // Gmail labels can be hierarchical, but we'll simplify to the first label. - finalPath = gmailLabels.split(',')[0]; - } else if (folderHeader && typeof folderHeader === 'string') { - finalPath = folderHeader; - } + if (gmailLabels && typeof gmailLabels === 'string') { + // We take the first label as the primary folder. + // Gmail labels can be hierarchical, but we'll simplify to the first label. + finalPath = gmailLabels.split(',')[0]; + } else if (folderHeader && typeof folderHeader === 'string') { + finalPath = folderHeader; + } - return { - id: messageId, - threadId: threadId, - from, - to: mapAddresses(parsedEmail.to), - cc: mapAddresses(parsedEmail.cc), - bcc: mapAddresses(parsedEmail.bcc), - subject: parsedEmail.subject || '', - body: parsedEmail.text || '', - html: parsedEmail.html || '', - headers: parsedEmail.headers, - attachments, - receivedAt: parsedEmail.date || new Date(), - eml: emlBuffer, - path: finalPath, - }; - } + return { + id: messageId, + threadId: threadId, + from, + to: mapAddresses(parsedEmail.to), + cc: mapAddresses(parsedEmail.cc), + bcc: mapAddresses(parsedEmail.bcc), + subject: parsedEmail.subject || '', + body: parsedEmail.text || '', + html: parsedEmail.html || '', + headers: parsedEmail.headers, + attachments, + receivedAt: parsedEmail.date || new Date(), + eml: emlBuffer, + path: finalPath, + }; + } - public getUpdatedSyncState(): SyncState { - return {}; - } + public getUpdatedSyncState(): SyncState { + return {}; + } } diff --git a/packages/backend/src/services/ingestion-connectors/PSTConnector.ts b/packages/backend/src/services/ingestion-connectors/PSTConnector.ts index 1199b32..405d1b3 100644 --- a/packages/backend/src/services/ingestion-connectors/PSTConnector.ts +++ b/packages/backend/src/services/ingestion-connectors/PSTConnector.ts @@ -281,8 +281,8 @@ export class PSTConnector implements IEmailConnector { emlBuffer ?? Buffer.from(parsedEmail.text || parsedEmail.html || '', 'utf-8') ) .digest('hex')}-${createHash('sha256') - .update(emlBuffer ?? Buffer.from(msg.subject || '', 'utf-8')) - .digest('hex')}-${msg.clientSubmitTime?.getTime()}`; + .update(emlBuffer ?? Buffer.from(msg.subject || '', 'utf-8')) + .digest('hex')}-${msg.clientSubmitTime?.getTime()}`; } return { id: messageId, diff --git a/packages/backend/src/workers/indexing.worker.ts b/packages/backend/src/workers/indexing.worker.ts index 3fcbf25..00708c7 100644 --- a/packages/backend/src/workers/indexing.worker.ts +++ b/packages/backend/src/workers/indexing.worker.ts @@ -13,12 +13,11 @@ const processor = async (job: any) => { const worker = new Worker('indexing', processor, { connection, - concurrency: 5, removeOnComplete: { - count: 1000, // keep last 1000 jobs + count: 100, // keep last 100 jobs }, removeOnFail: { - count: 5000, // keep last 5000 failed jobs + count: 500, // keep last 500 failed jobs }, }); diff --git a/packages/backend/tsconfig.json b/packages/backend/tsconfig.json index 39366b9..d671f09 100644 --- a/packages/backend/tsconfig.json +++ b/packages/backend/tsconfig.json @@ -4,8 +4,14 @@ "outDir": "./dist", "rootDir": "./src", "emitDecoratorMetadata": true, - "experimentalDecorators": true + "experimentalDecorators": true, + "composite": true }, "include": ["src/**/*.ts"], - "exclude": ["node_modules", "dist"] + "exclude": ["node_modules", "dist"], + "references": [ + { + "path": "../types" + } + ] } diff --git a/packages/backend/tsconfig.tsbuildinfo b/packages/backend/tsconfig.tsbuildinfo deleted file mode 100644 index 4a4149e..0000000 --- a/packages/backend/tsconfig.tsbuildinfo +++ /dev/null @@ -1 +0,0 @@ -{"fileNames":["../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2023.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2024.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.dom.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.dom.asynciterable.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.scripthost.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2023.array.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2023.collection.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2023.intl.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2024.collection.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2024.object.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2024.promise.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2024.regexp.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2024.string.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.array.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.collection.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.intl.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.promise.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.decorators.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.iterator.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.float16.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.full.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/globals.typedarray.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/buffer.buffer.d.ts","../../node_modules/.pnpm/buffer@5.6.0/node_modules/buffer/index.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/utility.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/header.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/readable.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/fetch.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/formdata.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/connector.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/client.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/errors.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/dispatcher.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/global-origin.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/pool-stats.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/pool.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/handlers.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/balanced-pool.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/h2c-client.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/agent.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/mock-call-history.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/mock-agent.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/mock-client.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/mock-pool.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/mock-errors.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/retry-handler.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/retry-agent.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/api.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/cache-interceptor.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/interceptors.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/util.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/cookies.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/patch.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/websocket.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/eventsource.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/content-type.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/cache.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/index.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/globals.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/assert.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/assert/strict.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/async_hooks.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/buffer.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/child_process.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/cluster.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/console.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/constants.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/crypto.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/dgram.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/dns.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/dns/promises.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/domain.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/dom-events.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/events.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/fs.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/fs/promises.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/http.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/http2.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/https.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/inspector.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/module.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/net.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/os.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/path.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/perf_hooks.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/process.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/punycode.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/querystring.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/readline.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/readline/promises.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/repl.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/sea.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/sqlite.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/stream.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/stream/promises.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/stream/consumers.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/stream/web.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/string_decoder.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/test.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/timers.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/timers/promises.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/tls.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/trace_events.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/tty.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/url.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/util.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/v8.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/vm.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/wasi.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/worker_threads.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/zlib.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/index.d.ts","../../node_modules/.pnpm/@types+mime@1.3.5/node_modules/@types/mime/index.d.ts","../../node_modules/.pnpm/@types+send@0.17.5/node_modules/@types/send/index.d.ts","../../node_modules/.pnpm/@types+qs@6.14.0/node_modules/@types/qs/index.d.ts","../../node_modules/.pnpm/@types+range-parser@1.2.7/node_modules/@types/range-parser/index.d.ts","../../node_modules/.pnpm/@types+express-serve-static-core@5.0.7/node_modules/@types/express-serve-static-core/index.d.ts","../../node_modules/.pnpm/@types+http-errors@2.0.5/node_modules/@types/http-errors/index.d.ts","../../node_modules/.pnpm/@types+serve-static@1.15.8/node_modules/@types/serve-static/index.d.ts","../../node_modules/.pnpm/@types+connect@3.4.38/node_modules/@types/connect/index.d.ts","../../node_modules/.pnpm/@types+body-parser@1.19.6/node_modules/@types/body-parser/index.d.ts","../../node_modules/.pnpm/@types+express@5.0.3/node_modules/@types/express/index.d.ts","../../node_modules/.pnpm/dotenv@17.2.0/node_modules/dotenv/lib/main.d.ts","../../node_modules/.pnpm/bcryptjs@3.0.2/node_modules/bcryptjs/umd/types.d.ts","../../node_modules/.pnpm/bcryptjs@3.0.2/node_modules/bcryptjs/umd/index.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/types.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/jwe/compact/decrypt.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/jwe/flattened/decrypt.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/jwe/general/decrypt.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/jwe/general/encrypt.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/jws/compact/verify.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/jws/flattened/verify.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/jws/general/verify.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/jwt/verify.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/jwt/decrypt.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/jwe/compact/encrypt.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/jwe/flattened/encrypt.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/jws/compact/sign.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/jws/flattened/sign.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/jws/general/sign.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/jwt/sign.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/jwt/encrypt.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/jwk/thumbprint.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/jwk/embedded.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/jwks/local.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/jwks/remote.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/jwt/unsecured.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/key/export.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/key/import.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/util/decode_protected_header.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/util/decode_jwt.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/util/errors.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/key/generate_key_pair.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/key/generate_secret.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/util/base64url.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/index.d.ts","../types/dist/user.types.d.ts","../types/dist/auth.types.d.ts","../types/dist/ingestion.types.d.ts","../types/dist/storage.types.d.ts","../types/dist/email.types.d.ts","../types/dist/archived-emails.types.d.ts","../types/dist/search.types.d.ts","../types/dist/dashboard.types.d.ts","../types/dist/index.d.ts","./src/services/authservice.ts","./src/api/controllers/auth.controller.ts","../../node_modules/.pnpm/postgres@3.4.7/node_modules/postgres/types/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/entity.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/logger.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/casing.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/table.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/operations.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/subquery.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/query-builders/select.types.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/sql/sql.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/utils.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/sql/expressions/conditions.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/sql/expressions/select.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/sql/expressions/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/sql/functions/aggregate.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/query-builders/query-builder.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/sql/functions/vector.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/sql/functions/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/sql/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/checks.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/sequence.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/columns/int.common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/columns/bigintt.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/columns/boolean.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/columns/bytes.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/columns/custom.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/columns/date-duration.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/columns/decimal.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/columns/double-precision.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/columns/duration.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/columns/integer.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/columns/json.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/columns/date.common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/columns/localdate.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/columns/localtime.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/columns/real.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/columns/relative-duration.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/columns/smallint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/columns/text.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/columns/timestamp.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/columns/timestamptz.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/columns/uuid.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/columns/all.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/indexes.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/roles.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/policies.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/primary-keys.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/unique-constraint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/table.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/foreign-keys.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/columns/common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/columns/bigint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/columns/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/view-base.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/cache/core/types.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/relations.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/session.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/query-builders/count.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/query-promise.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/runnable-query.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/query-builders/query.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/query-builders/raw.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/subquery.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/db.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/session.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/query-builders/delete.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/query-builders/update.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/query-builders/insert.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/query-builders/refresh-materialized-view.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/query-builders/select.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/query-builders/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/dialect.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/query-builders/query-builder.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/view-common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/view.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/query-builders/select.types.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/alias.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/schema.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/utils.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/gel-core/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/checks.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/columns/binary.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/columns/boolean.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/columns/char.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/columns/custom.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/columns/date.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/columns/datetime.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/columns/decimal.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/columns/double.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/columns/enum.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/columns/float.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/columns/int.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/columns/json.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/columns/mediumint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/columns/real.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/columns/serial.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/columns/smallint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/columns/text.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/columns/time.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/columns/date.common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/columns/timestamp.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/columns/tinyint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/columns/varbinary.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/columns/varchar.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/columns/year.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/columns/all.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/indexes.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/primary-keys.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/unique-constraint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/table.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/foreign-keys.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/columns/common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/columns/bigint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/columns/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/migrator.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/query-builders/delete.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/subquery.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/view-base.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/query-builders/select.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/query-builders/query-builder.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/query-builders/update.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/query-builders/insert.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/dialect.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/query-builders/count.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/query-builders/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/query-builders/query.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/db.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/session.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/view-common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/view.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/query-builders/select.types.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/alias.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/schema.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/utils.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/mysql-core/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/checks.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/columns/bigserial.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/columns/boolean.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/columns/char.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/columns/cidr.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/columns/custom.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/columns/date.common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/columns/date.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/columns/double-precision.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/columns/inet.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/sequence.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/columns/int.common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/columns/integer.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/columns/timestamp.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/columns/interval.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/columns/json.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/columns/jsonb.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/columns/line.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/columns/macaddr.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/columns/macaddr8.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/columns/numeric.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/columns/point.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/columns/postgis_extension/geometry.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/columns/real.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/columns/serial.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/columns/smallint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/columns/smallserial.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/columns/text.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/columns/time.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/columns/uuid.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/columns/varchar.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/columns/vector_extension/bit.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/columns/vector_extension/halfvec.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/columns/vector_extension/sparsevec.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/columns/vector_extension/vector.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/columns/all.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/indexes.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/roles.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/policies.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/primary-keys.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/unique-constraint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/table.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/foreign-keys.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/columns/common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/columns/bigint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/columns/enum.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/columns/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/view-base.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/session.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/query-builders/delete.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/query-builders/update.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/query-builders/insert.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/query-builders/refresh-materialized-view.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/subquery.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/query-builders/select.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/query-builders/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/dialect.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/query-builders/query-builder.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/view-common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/view.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/query-builders/select.types.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/alias.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/schema.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/utils.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/utils/array.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/utils/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/columns/binary.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/columns/boolean.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/columns/char.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/columns/custom.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/columns/date.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/columns/datetime.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/columns/decimal.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/columns/double.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/columns/enum.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/columns/float.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/columns/int.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/columns/json.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/columns/mediumint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/columns/real.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/columns/serial.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/columns/smallint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/columns/text.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/columns/time.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/columns/date.common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/columns/timestamp.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/columns/tinyint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/columns/varbinary.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/columns/varchar.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/columns/vector.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/columns/year.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/columns/all.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/indexes.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/primary-keys.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/unique-constraint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/table.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/columns/common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/columns/bigint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/columns/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/query-builders/delete.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/query-builders/update.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/query-builders/insert.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/dialect.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/cache/core/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore/session.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore/driver.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/query-builders/count.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/subquery.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/query-builders/select.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/query-builders/query-builder.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/query-builders/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/db.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/session.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/query-builders/select.types.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/alias.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/schema.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/utils.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/singlestore-core/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/sqlite-core/checks.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/sqlite-core/columns/custom.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/sqlite-core/indexes.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/sqlite-core/primary-keys.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/sqlite-core/unique-constraint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/sqlite-core/view-base.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/sqlite-core/query-builders/count.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/sqlite-core/query-builders/query.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/sqlite-core/subquery.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/sqlite-core/db.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/sqlite-core/query-builders/raw.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/sqlite-core/session.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/sqlite-core/query-builders/delete.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/sqlite-core/query-builders/update.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/sqlite-core/query-builders/insert.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/sqlite-core/query-builders/select.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/sqlite-core/query-builders/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/sqlite-core/dialect.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/sqlite-core/query-builders/query-builder.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/sqlite-core/view.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/sqlite-core/utils.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/sqlite-core/columns/integer.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/sqlite-core/columns/numeric.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/sqlite-core/columns/real.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/sqlite-core/columns/text.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/sqlite-core/columns/all.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/sqlite-core/table.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/sqlite-core/foreign-keys.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/sqlite-core/columns/common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/sqlite-core/columns/blob.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/sqlite-core/columns/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/sqlite-core/query-builders/select.types.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/sqlite-core/alias.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/sqlite-core/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/column-builder.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/column.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/alias.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/errors.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/view-common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/cache/core/cache.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/query-builders/count.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/query-builders/query.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/query-builders/raw.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/pg-core/db.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/postgres-js/session.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/postgres-js/driver.d.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/postgres-js/index.d.ts","../../node_modules/.pnpm/dotenv@17.2.0/node_modules/dotenv/config.d.ts","./src/database/schema/ingestion-sources.ts","./src/database/schema/archived-emails.ts","./src/database/schema/attachments.ts","./src/database/schema/audit-logs.ts","./src/database/schema/custodians.ts","./src/database/schema/compliance.ts","./src/database/schema.ts","./src/database/index.ts","./src/config/storage.ts","./src/config/app.ts","./src/config/search.ts","./src/config/redis.ts","./src/config/index.ts","./src/services/cryptoservice.ts","../../node_modules/.pnpm/gaxios@7.1.1/node_modules/gaxios/build/cjs/src/common.d.ts","../../node_modules/.pnpm/gaxios@7.1.1/node_modules/gaxios/build/cjs/src/interceptor.d.ts","../../node_modules/.pnpm/gaxios@7.1.1/node_modules/gaxios/build/cjs/src/gaxios.d.ts","../../node_modules/.pnpm/gaxios@7.1.1/node_modules/gaxios/build/cjs/src/index.d.ts","../../node_modules/.pnpm/google-auth-library@10.1.0/node_modules/google-auth-library/build/src/auth/credentials.d.ts","../../node_modules/.pnpm/google-auth-library@10.1.0/node_modules/google-auth-library/build/src/crypto/shared.d.ts","../../node_modules/.pnpm/google-auth-library@10.1.0/node_modules/google-auth-library/build/src/crypto/crypto.d.ts","../../node_modules/.pnpm/google-auth-library@10.1.0/node_modules/google-auth-library/build/src/util.d.ts","../../node_modules/.pnpm/google-logging-utils@1.1.1/node_modules/google-logging-utils/build/src/logging-utils.d.ts","../../node_modules/.pnpm/google-logging-utils@1.1.1/node_modules/google-logging-utils/build/src/index.d.ts","../../node_modules/.pnpm/google-auth-library@10.1.0/node_modules/google-auth-library/build/src/auth/authclient.d.ts","../../node_modules/.pnpm/google-auth-library@10.1.0/node_modules/google-auth-library/build/src/auth/loginticket.d.ts","../../node_modules/.pnpm/google-auth-library@10.1.0/node_modules/google-auth-library/build/src/auth/oauth2client.d.ts","../../node_modules/.pnpm/google-auth-library@10.1.0/node_modules/google-auth-library/build/src/auth/idtokenclient.d.ts","../../node_modules/.pnpm/google-auth-library@10.1.0/node_modules/google-auth-library/build/src/auth/envdetect.d.ts","../../node_modules/.pnpm/gtoken@8.0.0/node_modules/gtoken/build/cjs/src/index.d.ts","../../node_modules/.pnpm/google-auth-library@10.1.0/node_modules/google-auth-library/build/src/auth/jwtclient.d.ts","../../node_modules/.pnpm/google-auth-library@10.1.0/node_modules/google-auth-library/build/src/auth/refreshclient.d.ts","../../node_modules/.pnpm/google-auth-library@10.1.0/node_modules/google-auth-library/build/src/auth/impersonated.d.ts","../../node_modules/.pnpm/google-auth-library@10.1.0/node_modules/google-auth-library/build/src/auth/baseexternalclient.d.ts","../../node_modules/.pnpm/google-auth-library@10.1.0/node_modules/google-auth-library/build/src/auth/identitypoolclient.d.ts","../../node_modules/.pnpm/google-auth-library@10.1.0/node_modules/google-auth-library/build/src/auth/awsrequestsigner.d.ts","../../node_modules/.pnpm/google-auth-library@10.1.0/node_modules/google-auth-library/build/src/auth/awsclient.d.ts","../../node_modules/.pnpm/google-auth-library@10.1.0/node_modules/google-auth-library/build/src/auth/executable-response.d.ts","../../node_modules/.pnpm/google-auth-library@10.1.0/node_modules/google-auth-library/build/src/auth/pluggable-auth-handler.d.ts","../../node_modules/.pnpm/google-auth-library@10.1.0/node_modules/google-auth-library/build/src/auth/pluggable-auth-client.d.ts","../../node_modules/.pnpm/google-auth-library@10.1.0/node_modules/google-auth-library/build/src/auth/externalclient.d.ts","../../node_modules/.pnpm/google-auth-library@10.1.0/node_modules/google-auth-library/build/src/auth/externalaccountauthorizeduserclient.d.ts","../../node_modules/.pnpm/google-auth-library@10.1.0/node_modules/google-auth-library/build/src/auth/googleauth.d.ts","../../node_modules/.pnpm/gcp-metadata@7.0.1/node_modules/gcp-metadata/build/src/gcp-residency.d.ts","../../node_modules/.pnpm/gcp-metadata@7.0.1/node_modules/gcp-metadata/build/src/index.d.ts","../../node_modules/.pnpm/google-auth-library@10.1.0/node_modules/google-auth-library/build/src/auth/computeclient.d.ts","../../node_modules/.pnpm/google-auth-library@10.1.0/node_modules/google-auth-library/build/src/auth/iam.d.ts","../../node_modules/.pnpm/google-auth-library@10.1.0/node_modules/google-auth-library/build/src/auth/jwtaccess.d.ts","../../node_modules/.pnpm/google-auth-library@10.1.0/node_modules/google-auth-library/build/src/auth/downscopedclient.d.ts","../../node_modules/.pnpm/google-auth-library@10.1.0/node_modules/google-auth-library/build/src/auth/passthrough.d.ts","../../node_modules/.pnpm/google-auth-library@10.1.0/node_modules/google-auth-library/build/src/index.d.ts","../../node_modules/.pnpm/googleapis-common@8.0.0/node_modules/googleapis-common/build/src/schema.d.ts","../../node_modules/.pnpm/googleapis-common@8.0.0/node_modules/googleapis-common/build/src/endpoint.d.ts","../../node_modules/.pnpm/googleapis-common@8.0.0/node_modules/googleapis-common/build/src/http2.d.ts","../../node_modules/.pnpm/googleapis-common@8.0.0/node_modules/googleapis-common/build/src/api.d.ts","../../node_modules/.pnpm/googleapis-common@8.0.0/node_modules/googleapis-common/build/src/apiindex.d.ts","../../node_modules/.pnpm/googleapis-common@8.0.0/node_modules/googleapis-common/build/src/apirequest.d.ts","../../node_modules/.pnpm/googleapis-common@8.0.0/node_modules/googleapis-common/build/src/authplus.d.ts","../../node_modules/.pnpm/googleapis-common@8.0.0/node_modules/googleapis-common/build/src/discovery.d.ts","../../node_modules/.pnpm/googleapis-common@8.0.0/node_modules/googleapis-common/build/src/util.d.ts","../../node_modules/.pnpm/googleapis-common@8.0.0/node_modules/googleapis-common/build/src/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/abusiveexperiencereport/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/abusiveexperiencereport/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/acceleratedmobilepageurl/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/acceleratedmobilepageurl/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/accessapproval/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/accessapproval/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/accessapproval/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/accesscontextmanager/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/accesscontextmanager/v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/accesscontextmanager/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/acmedns/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/acmedns/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/addressvalidation/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/addressvalidation/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/adexchangebuyer/v1.2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/adexchangebuyer/v1.3.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/adexchangebuyer/v1.4.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/adexchangebuyer/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/adexchangebuyer2/v2beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/adexchangebuyer2/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/adexperiencereport/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/adexperiencereport/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/admin/datatransfer_v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/admin/directory_v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/admin/reports_v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/admin/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/admob/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/admob/v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/admob/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/adsense/v1.4.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/adsense/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/adsense/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/adsensehost/v4.1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/adsensehost/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/adsenseplatform/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/adsenseplatform/v1alpha.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/adsenseplatform/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/advisorynotifications/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/advisorynotifications/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/aiplatform/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/aiplatform/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/aiplatform/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/airquality/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/airquality/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/alertcenter/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/alertcenter/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/alloydb/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/alloydb/v1alpha.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/alloydb/v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/alloydb/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/analytics/v3.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/analytics/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/analyticsadmin/v1alpha.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/analyticsadmin/v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/analyticsadmin/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/analyticsdata/v1alpha.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/analyticsdata/v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/analyticsdata/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/analyticshub/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/analyticshub/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/analyticshub/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/analyticsreporting/v4.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/analyticsreporting/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/androiddeviceprovisioning/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/androiddeviceprovisioning/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/androidenterprise/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/androidenterprise/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/androidmanagement/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/androidmanagement/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/androidpublisher/v1.1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/androidpublisher/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/androidpublisher/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/androidpublisher/v3.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/androidpublisher/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/apigateway/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/apigateway/v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/apigateway/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/apigeeregistry/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/apigeeregistry/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/apihub/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/apihub/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/apikeys/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/apikeys/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/apim/v1alpha.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/apim/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/appengine/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/appengine/v1alpha.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/appengine/v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/appengine/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/apphub/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/apphub/v1alpha.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/apphub/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/appsactivity/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/appsactivity/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/area120tables/v1alpha1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/area120tables/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/areainsights/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/areainsights/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/artifactregistry/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/artifactregistry/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/artifactregistry/v1beta2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/artifactregistry/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/assuredworkloads/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/assuredworkloads/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/assuredworkloads/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/authorizedbuyersmarketplace/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/authorizedbuyersmarketplace/v1alpha.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/authorizedbuyersmarketplace/v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/authorizedbuyersmarketplace/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/backupdr/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/backupdr/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/baremetalsolution/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/baremetalsolution/v1alpha1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/baremetalsolution/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/baremetalsolution/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/batch/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/batch/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/beyondcorp/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/beyondcorp/v1alpha.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/beyondcorp/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/biglake/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/biglake/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/bigquery/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/bigquery/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/bigqueryconnection/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/bigqueryconnection/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/bigqueryconnection/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/bigquerydatapolicy/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/bigquerydatapolicy/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/bigquerydatatransfer/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/bigquerydatatransfer/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/bigqueryreservation/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/bigqueryreservation/v1alpha2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/bigqueryreservation/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/bigqueryreservation/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/bigtableadmin/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/bigtableadmin/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/bigtableadmin/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/billingbudgets/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/billingbudgets/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/billingbudgets/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/binaryauthorization/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/binaryauthorization/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/binaryauthorization/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/blockchainnodeengine/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/blockchainnodeengine/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/blogger/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/blogger/v3.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/blogger/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/books/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/books/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/businessprofileperformance/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/businessprofileperformance/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/calendar/v3.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/calendar/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/certificatemanager/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/certificatemanager/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/chat/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/chat/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/checks/v1alpha.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/checks/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/chromemanagement/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/chromemanagement/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/chromepolicy/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/chromepolicy/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/chromeuxreport/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/chromeuxreport/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/civicinfo/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/civicinfo/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/classroom/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/classroom/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudasset/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudasset/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudasset/v1p1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudasset/v1p4beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudasset/v1p5beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudasset/v1p7beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudasset/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudbilling/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudbilling/v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudbilling/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudbuild/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudbuild/v1alpha1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudbuild/v1alpha2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudbuild/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudbuild/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudbuild/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudchannel/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudchannel/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudcontrolspartner/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudcontrolspartner/v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudcontrolspartner/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/clouddebugger/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/clouddebugger/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/clouddeploy/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/clouddeploy/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/clouderrorreporting/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/clouderrorreporting/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudfunctions/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudfunctions/v1beta2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudfunctions/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudfunctions/v2alpha.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudfunctions/v2beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudfunctions/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudidentity/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudidentity/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudidentity/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudiot/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudiot/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudkms/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudkms/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudlocationfinder/v1alpha.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudlocationfinder/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudprofiler/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudprofiler/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudresourcemanager/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudresourcemanager/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudresourcemanager/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudresourcemanager/v2beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudresourcemanager/v3.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudresourcemanager/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudscheduler/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudscheduler/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudscheduler/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudsearch/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudsearch/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudshell/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudshell/v1alpha1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudshell/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudsupport/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudsupport/v2beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudsupport/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudtasks/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudtasks/v2beta2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudtasks/v2beta3.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudtasks/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudtrace/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudtrace/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudtrace/v2beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/cloudtrace/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/composer/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/composer/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/composer/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/compute/alpha.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/compute/beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/compute/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/compute/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/config/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/config/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/connectors/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/connectors/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/connectors/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/contactcenteraiplatform/v1alpha1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/contactcenteraiplatform/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/contactcenterinsights/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/contactcenterinsights/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/container/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/container/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/container/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/containeranalysis/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/containeranalysis/v1alpha1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/containeranalysis/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/containeranalysis/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/content/v2.1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/content/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/content/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/contentwarehouse/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/contentwarehouse/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/css/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/css/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/customsearch/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/customsearch/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/datacatalog/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/datacatalog/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/datacatalog/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/dataflow/v1b3.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/dataflow/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/dataform/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/dataform/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/datafusion/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/datafusion/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/datafusion/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/datalabeling/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/datalabeling/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/datalineage/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/datalineage/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/datamigration/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/datamigration/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/datamigration/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/datapipelines/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/datapipelines/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/dataplex/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/dataplex/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/dataportability/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/dataportability/v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/dataportability/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/dataproc/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/dataproc/v1beta2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/dataproc/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/datastore/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/datastore/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/datastore/v1beta3.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/datastore/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/datastream/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/datastream/v1alpha1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/datastream/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/deploymentmanager/alpha.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/deploymentmanager/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/deploymentmanager/v2beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/deploymentmanager/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/developerconnect/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/developerconnect/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/dfareporting/v3.3.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/dfareporting/v3.4.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/dfareporting/v3.5.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/dfareporting/v4.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/dfareporting/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/dialogflow/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/dialogflow/v2beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/dialogflow/v3.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/dialogflow/v3beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/dialogflow/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/digitalassetlinks/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/digitalassetlinks/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/discovery/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/discovery/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/discoveryengine/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/discoveryengine/v1alpha.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/discoveryengine/v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/discoveryengine/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/displayvideo/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/displayvideo/v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/displayvideo/v1beta2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/displayvideo/v1dev.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/displayvideo/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/displayvideo/v3.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/displayvideo/v4.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/displayvideo/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/dlp/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/dlp/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/dns/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/dns/v1beta2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/dns/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/dns/v2beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/dns/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/docs/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/docs/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/documentai/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/documentai/v1beta2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/documentai/v1beta3.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/documentai/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/domains/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/domains/v1alpha2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/domains/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/domains/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/domainsrdap/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/domainsrdap/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/doubleclickbidmanager/v1.1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/doubleclickbidmanager/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/doubleclickbidmanager/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/doubleclickbidmanager/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/doubleclicksearch/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/doubleclicksearch/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/drive/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/drive/v3.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/drive/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/driveactivity/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/driveactivity/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/drivelabels/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/drivelabels/v2beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/drivelabels/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/essentialcontacts/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/essentialcontacts/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/eventarc/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/eventarc/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/eventarc/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/factchecktools/v1alpha1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/factchecktools/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/fcm/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/fcm/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/fcmdata/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/fcmdata/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/file/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/file/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/file/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/firebase/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/firebase/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/firebaseappcheck/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/firebaseappcheck/v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/firebaseappcheck/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/firebaseappdistribution/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/firebaseappdistribution/v1alpha.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/firebaseappdistribution/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/firebaseapphosting/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/firebaseapphosting/v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/firebaseapphosting/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/firebasedatabase/v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/firebasedatabase/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/firebasedataconnect/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/firebasedataconnect/v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/firebasedataconnect/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/firebasedynamiclinks/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/firebasedynamiclinks/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/firebasehosting/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/firebasehosting/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/firebasehosting/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/firebaseml/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/firebaseml/v1beta2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/firebaseml/v2beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/firebaseml/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/firebaserules/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/firebaserules/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/firebasestorage/v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/firebasestorage/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/firestore/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/firestore/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/firestore/v1beta2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/firestore/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/fitness/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/fitness/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/forms/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/forms/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/games/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/games/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/gamesconfiguration/v1configuration.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/gamesconfiguration/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/gamesmanagement/v1management.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/gamesmanagement/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/gameservices/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/gameservices/v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/gameservices/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/genomics/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/genomics/v1alpha2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/genomics/v2alpha1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/genomics/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/gkebackup/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/gkebackup/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/gkehub/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/gkehub/v1alpha.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/gkehub/v1alpha2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/gkehub/v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/gkehub/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/gkehub/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/gkehub/v2alpha.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/gkehub/v2beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/gkehub/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/gkeonprem/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/gkeonprem/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/gmail/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/gmail/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/gmailpostmastertools/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/gmailpostmastertools/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/gmailpostmastertools/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/groupsmigration/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/groupsmigration/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/groupssettings/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/groupssettings/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/healthcare/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/healthcare/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/healthcare/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/homegraph/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/homegraph/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/iam/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/iam/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/iam/v2beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/iam/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/iamcredentials/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/iamcredentials/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/iap/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/iap/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/iap/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/ideahub/v1alpha.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/ideahub/v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/ideahub/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/identitytoolkit/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/identitytoolkit/v3.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/identitytoolkit/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/ids/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/ids/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/indexing/v3.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/indexing/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/integrations/v1alpha.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/integrations/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/jobs/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/jobs/v3.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/jobs/v3p1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/jobs/v4.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/jobs/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/keep/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/keep/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/kgsearch/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/kgsearch/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/kmsinventory/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/kmsinventory/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/language/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/language/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/language/v1beta2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/language/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/language/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/libraryagent/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/libraryagent/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/licensing/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/licensing/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/lifesciences/v2beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/lifesciences/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/localservices/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/localservices/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/logging/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/logging/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/looker/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/looker/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/managedidentities/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/managedidentities/v1alpha1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/managedidentities/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/managedidentities/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/managedkafka/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/managedkafka/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/manufacturers/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/manufacturers/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/marketingplatformadmin/v1alpha.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/marketingplatformadmin/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/meet/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/meet/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/memcache/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/memcache/v1beta2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/memcache/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/merchantapi/accounts_v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/merchantapi/conversions_v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/merchantapi/datasources_v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/merchantapi/inventories_v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/merchantapi/issueresolution_v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/merchantapi/lfp_v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/merchantapi/notifications_v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/merchantapi/ordertracking_v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/merchantapi/products_v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/merchantapi/promotions_v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/merchantapi/quota_v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/merchantapi/reports_v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/merchantapi/reviews_v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/merchantapi/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/metastore/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/metastore/v1alpha.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/metastore/v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/metastore/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/metastore/v2alpha.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/metastore/v2beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/metastore/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/migrationcenter/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/migrationcenter/v1alpha1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/migrationcenter/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/ml/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/ml/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/monitoring/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/monitoring/v3.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/monitoring/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/mybusinessaccountmanagement/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/mybusinessaccountmanagement/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/mybusinessbusinesscalls/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/mybusinessbusinesscalls/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/mybusinessbusinessinformation/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/mybusinessbusinessinformation/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/mybusinesslodging/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/mybusinesslodging/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/mybusinessnotifications/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/mybusinessnotifications/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/mybusinessplaceactions/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/mybusinessplaceactions/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/mybusinessqanda/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/mybusinessqanda/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/mybusinessverifications/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/mybusinessverifications/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/netapp/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/netapp/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/netapp/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/networkconnectivity/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/networkconnectivity/v1alpha1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/networkconnectivity/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/networkmanagement/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/networkmanagement/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/networkmanagement/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/networksecurity/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/networksecurity/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/networksecurity/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/networkservices/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/networkservices/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/networkservices/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/notebooks/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/notebooks/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/notebooks/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/oauth2/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/oauth2/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/observability/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/observability/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/ondemandscanning/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/ondemandscanning/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/ondemandscanning/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/oracledatabase/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/oracledatabase/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/orgpolicy/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/orgpolicy/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/osconfig/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/osconfig/v1alpha.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/osconfig/v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/osconfig/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/osconfig/v2beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/osconfig/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/oslogin/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/oslogin/v1alpha.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/oslogin/v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/oslogin/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/pagespeedonline/v5.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/pagespeedonline/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/parallelstore/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/parallelstore/v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/parallelstore/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/paymentsresellersubscription/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/paymentsresellersubscription/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/people/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/people/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/places/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/places/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/playablelocations/v3.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/playablelocations/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/playcustomapp/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/playcustomapp/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/playdeveloperreporting/v1alpha1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/playdeveloperreporting/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/playdeveloperreporting/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/playgrouping/v1alpha1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/playgrouping/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/playintegrity/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/playintegrity/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/plus/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/plus/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/policyanalyzer/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/policyanalyzer/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/policyanalyzer/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/policysimulator/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/policysimulator/v1alpha.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/policysimulator/v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/policysimulator/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/policysimulator/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/policytroubleshooter/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/policytroubleshooter/v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/policytroubleshooter/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/pollen/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/pollen/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/poly/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/poly/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/privateca/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/privateca/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/privateca/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/prod_tt_sasportal/v1alpha1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/prod_tt_sasportal/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/publicca/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/publicca/v1alpha1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/publicca/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/publicca/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/pubsub/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/pubsub/v1beta1a.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/pubsub/v1beta2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/pubsub/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/pubsublite/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/pubsublite/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/rapidmigrationassessment/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/rapidmigrationassessment/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/readerrevenuesubscriptionlinking/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/readerrevenuesubscriptionlinking/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/realtimebidding/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/realtimebidding/v1alpha.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/realtimebidding/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/recaptchaenterprise/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/recaptchaenterprise/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/recommendationengine/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/recommendationengine/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/recommender/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/recommender/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/recommender/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/redis/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/redis/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/redis/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/remotebuildexecution/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/remotebuildexecution/v1alpha.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/remotebuildexecution/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/remotebuildexecution/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/reseller/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/reseller/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/resourcesettings/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/resourcesettings/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/retail/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/retail/v2alpha.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/retail/v2beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/retail/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/run/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/run/v1alpha1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/run/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/run/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/run/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/runtimeconfig/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/runtimeconfig/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/runtimeconfig/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/saasservicemgmt/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/saasservicemgmt/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/safebrowsing/v4.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/safebrowsing/v5.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/safebrowsing/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/sasportal/v1alpha1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/sasportal/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/script/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/script/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/searchads360/v0.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/searchads360/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/searchconsole/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/searchconsole/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/secretmanager/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/secretmanager/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/secretmanager/v1beta2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/secretmanager/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/securitycenter/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/securitycenter/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/securitycenter/v1beta2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/securitycenter/v1p1alpha1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/securitycenter/v1p1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/securitycenter/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/securityposture/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/securityposture/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/serviceconsumermanagement/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/serviceconsumermanagement/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/serviceconsumermanagement/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/servicecontrol/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/servicecontrol/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/servicecontrol/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/servicedirectory/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/servicedirectory/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/servicedirectory/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/servicemanagement/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/servicemanagement/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/servicenetworking/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/servicenetworking/v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/servicenetworking/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/serviceusage/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/serviceusage/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/serviceusage/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/sheets/v4.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/sheets/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/siteverification/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/siteverification/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/slides/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/slides/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/smartdevicemanagement/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/smartdevicemanagement/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/solar/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/solar/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/sourcerepo/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/sourcerepo/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/spanner/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/spanner/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/speech/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/speech/v1p1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/speech/v2beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/speech/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/sql/v1beta4.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/sql/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/sqladmin/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/sqladmin/v1beta4.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/sqladmin/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/storage/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/storage/v1beta2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/storage/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/storagebatchoperations/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/storagebatchoperations/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/storagetransfer/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/storagetransfer/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/streetviewpublish/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/streetviewpublish/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/sts/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/sts/v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/sts/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/tagmanager/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/tagmanager/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/tagmanager/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/tasks/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/tasks/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/testing/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/testing/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/texttospeech/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/texttospeech/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/texttospeech/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/toolresults/v1beta3.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/toolresults/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/tpu/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/tpu/v1alpha1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/tpu/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/tpu/v2alpha1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/tpu/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/trafficdirector/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/trafficdirector/v3.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/trafficdirector/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/transcoder/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/transcoder/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/transcoder/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/translate/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/translate/v3.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/translate/v3beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/translate/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/travelimpactmodel/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/travelimpactmodel/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/vault/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/vault/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/vectortile/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/vectortile/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/verifiedaccess/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/verifiedaccess/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/verifiedaccess/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/versionhistory/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/versionhistory/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/videointelligence/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/videointelligence/v1beta2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/videointelligence/v1p1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/videointelligence/v1p2beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/videointelligence/v1p3beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/videointelligence/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/vision/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/vision/v1p1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/vision/v1p2beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/vision/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/vmmigration/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/vmmigration/v1alpha1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/vmmigration/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/vmwareengine/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/vmwareengine/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/vpcaccess/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/vpcaccess/v1beta1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/vpcaccess/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/walletobjects/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/walletobjects/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/webfonts/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/webfonts/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/webmasters/v3.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/webmasters/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/webrisk/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/webrisk/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/websecurityscanner/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/websecurityscanner/v1alpha.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/websecurityscanner/v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/websecurityscanner/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/workflowexecutions/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/workflowexecutions/v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/workflowexecutions/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/workflows/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/workflows/v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/workflows/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/workloadmanager/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/workloadmanager/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/workspaceevents/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/workspaceevents/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/workstations/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/workstations/v1beta.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/workstations/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/youtube/v3.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/youtube/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/youtubeanalytics/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/youtubeanalytics/v2.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/youtubeanalytics/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/youtubereporting/v1.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/youtubereporting/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/apis/index.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/googleapis.d.ts","../../node_modules/.pnpm/googleapis@152.0.0/node_modules/googleapis/build/src/index.d.ts","../../node_modules/.pnpm/pino-std-serializers@7.0.0/node_modules/pino-std-serializers/index.d.ts","../../node_modules/.pnpm/sonic-boom@4.2.0/node_modules/sonic-boom/types/index.d.ts","../../node_modules/.pnpm/pino@9.7.0/node_modules/pino/pino.d.ts","./src/config/logger.ts","../../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/lib/index.d.ts","../../node_modules/.pnpm/@types+mailparser@3.4.6/node_modules/@types/mailparser/index.d.ts","./src/services/ingestion-connectors/googleworkspaceconnector.ts","../../node_modules/.pnpm/cross-fetch@4.1.0_encoding@0.1.13/node_modules/cross-fetch/index.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/account/tokenclaims.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/account/authtoken.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/authority/authoritytype.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/authority/openidconfigresponse.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/url/iuri.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/network/networkresponse.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/network/inetworkmodule.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/authority/protocolmode.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/utils/constants.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/logger/logger.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/authority/oidcoptions.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/authority/azureregion.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/authority/azureregionconfiguration.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/authority/clouddiscoverymetadata.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/authority/cloudinstancediscoveryresponse.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/authority/authorityoptions.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/cache/entities/credentialentity.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/cache/entities/idtokenentity.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/cache/entities/accesstokenentity.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/cache/entities/refreshtokenentity.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/cache/entities/appmetadataentity.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/cache/entities/cacherecord.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/account/accountinfo.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/cache/entities/servertelemetryentity.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/cache/entities/throttlingentity.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/cache/entities/authoritymetadataentity.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/request/storeincache.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/telemetry/performance/performanceevent.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/telemetry/performance/iperformancemeasurement.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/telemetry/performance/iperformanceclient.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/cache/cachemanager.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/telemetry/server/servertelemetryrequest.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/authority/regiondiscoverymetadata.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/telemetry/server/servertelemetrymanager.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/cache/interface/iserializabletokencache.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/cache/persistence/tokencachecontext.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/cache/interface/icacheplugin.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/account/clientcredentials.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/config/clientconfiguration.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/utils/msaltypes.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/crypto/joseheader.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/crypto/signedhttprequest.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/request/baseauthrequest.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/crypto/icrypto.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/cache/entities/accountentity.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/request/scopeset.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/cache/utils/cachetypes.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/cache/interface/icachemanager.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/authority/authority.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/authority/authorityfactory.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/cache/utils/cachehelpers.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/utils/timeutils.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/response/authorizeresponse.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/utils/urlutils.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/constants/aadserverparamkeys.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/response/serverauthorizationtokenresponse.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/network/requestthumbprint.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/account/ccscredential.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/client/baseclient.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/request/commonauthorizationcoderequest.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/response/authenticationresult.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/request/commonendsessionrequest.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/response/authorizationcodepayload.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/client/authorizationcodeclient.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/request/commonrefreshtokenrequest.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/request/commonsilentflowrequest.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/client/refreshtokenclient.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/client/silentflowclient.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/account/clientinfo.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/network/throttlingutils.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/url/urlstring.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/request/commonauthorizationurlrequest.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/protocol/authorize.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/request/requestparameterbuilder.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/utils/protocolutils.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/response/responsehandler.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/request/authenticationheaderparser.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/error/autherrorcodes.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/error/autherror.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/error/interactionrequiredautherrorcodes.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/error/interactionrequiredautherror.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/error/servererror.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/error/networkerror.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/error/cacheerrorcodes.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/error/cacheerror.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/error/clientautherrorcodes.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/error/clientautherror.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/error/clientconfigurationerrorcodes.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/error/clientconfigurationerror.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/utils/stringutils.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/utils/functionwrappers.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/packagemetadata.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/exports-common.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/utils/clientassertionutils.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/config/apptokenprovider.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/request/nativerequest.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/request/nativesignoutrequest.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/broker/nativebroker/inativebrokerplugin.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/request/commonclientcredentialrequest.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/request/commononbehalfofrequest.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/response/devicecoderesponse.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/request/commondevicecoderequest.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/request/commonusernamepasswordrequest.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/crypto/iguidgenerator.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/exports-node-only.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/lib/types/index-node.d.ts","../../node_modules/.pnpm/@azure+msal-node@3.6.3/node_modules/@azure/msal-node/dist/cache/serializer/serializertypes.d.ts","../../node_modules/.pnpm/@azure+msal-node@3.6.3/node_modules/@azure/msal-node/dist/cache/serializer/serializer.d.ts","../../node_modules/.pnpm/@azure+msal-node@3.6.3/node_modules/@azure/msal-node/dist/cache/serializer/deserializer.d.ts","../../node_modules/.pnpm/@azure+msal-node@3.6.3/node_modules/@azure/msal-node/dist/internals.d.ts","../../node_modules/.pnpm/@azure+msal-node@3.6.3/node_modules/@azure/msal-node/dist/request/authorizationcoderequest.d.ts","../../node_modules/.pnpm/@azure+msal-node@3.6.3/node_modules/@azure/msal-node/dist/request/authorizationurlrequest.d.ts","../../node_modules/.pnpm/@azure+msal-node@3.6.3/node_modules/@azure/msal-node/dist/request/devicecoderequest.d.ts","../../node_modules/.pnpm/@azure+msal-node@3.6.3/node_modules/@azure/msal-node/dist/request/refreshtokenrequest.d.ts","../../node_modules/.pnpm/@azure+msal-node@3.6.3/node_modules/@azure/msal-node/dist/request/silentflowrequest.d.ts","../../node_modules/.pnpm/@azure+msal-node@3.6.3/node_modules/@azure/msal-node/dist/request/usernamepasswordrequest.d.ts","../../node_modules/.pnpm/@azure+msal-node@3.6.3/node_modules/@azure/msal-node/dist/cache/nodestorage.d.ts","../../node_modules/.pnpm/@azure+msal-node@3.6.3/node_modules/@azure/msal-node/dist/cache/itokencache.d.ts","../../node_modules/.pnpm/@azure+msal-node@3.6.3/node_modules/@azure/msal-node/dist/cache/tokencache.d.ts","../../node_modules/.pnpm/@azure+msal-node@3.6.3/node_modules/@azure/msal-node/dist/network/iloopbackclient.d.ts","../../node_modules/.pnpm/@azure+msal-node@3.6.3/node_modules/@azure/msal-node/dist/request/interactiverequest.d.ts","../../node_modules/.pnpm/@azure+msal-node@3.6.3/node_modules/@azure/msal-node/dist/request/signoutrequest.d.ts","../../node_modules/.pnpm/@azure+msal-node@3.6.3/node_modules/@azure/msal-node/dist/client/ipublicclientapplication.d.ts","../../node_modules/.pnpm/@azure+msal-node@3.6.3/node_modules/@azure/msal-node/dist/request/clientcredentialrequest.d.ts","../../node_modules/.pnpm/@azure+msal-node@3.6.3/node_modules/@azure/msal-node/dist/request/onbehalfofrequest.d.ts","../../node_modules/.pnpm/@azure+msal-node@3.6.3/node_modules/@azure/msal-node/dist/client/iconfidentialclientapplication.d.ts","../../node_modules/.pnpm/@azure+msal-node@3.6.3/node_modules/@azure/msal-node/dist/cache/distributed/icacheclient.d.ts","../../node_modules/.pnpm/@azure+msal-node@3.6.3/node_modules/@azure/msal-node/dist/cache/distributed/ipartitionmanager.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/account/tokenclaims.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/account/authtoken.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/authority/authoritytype.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/authority/openidconfigresponse.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/url/iuri.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/network/networkresponse.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/network/inetworkmodule.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/authority/protocolmode.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/utils/constants.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/logger/logger.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/authority/oidcoptions.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/authority/azureregion.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/authority/azureregionconfiguration.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/authority/clouddiscoverymetadata.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/authority/cloudinstancediscoveryresponse.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/authority/authorityoptions.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/cache/entities/credentialentity.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/cache/entities/idtokenentity.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/cache/entities/accesstokenentity.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/cache/entities/refreshtokenentity.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/cache/entities/appmetadataentity.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/cache/entities/cacherecord.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/account/accountinfo.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/cache/entities/servertelemetryentity.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/cache/entities/throttlingentity.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/cache/entities/authoritymetadataentity.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/request/storeincache.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/telemetry/performance/performanceevent.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/telemetry/performance/iperformancemeasurement.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/telemetry/performance/iperformanceclient.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/cache/cachemanager.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/telemetry/server/servertelemetryrequest.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/authority/regiondiscoverymetadata.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/telemetry/server/servertelemetrymanager.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/cache/interface/iserializabletokencache.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/cache/persistence/tokencachecontext.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/cache/interface/icacheplugin.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/account/clientcredentials.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/config/clientconfiguration.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/utils/msaltypes.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/crypto/joseheader.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/crypto/signedhttprequest.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/request/baseauthrequest.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/crypto/icrypto.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/cache/entities/accountentity.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/request/scopeset.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/cache/utils/cachetypes.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/cache/interface/icachemanager.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/authority/authority.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/authority/authorityfactory.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/cache/utils/cachehelpers.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/utils/timeutils.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/response/authorizeresponse.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/utils/urlutils.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/constants/aadserverparamkeys.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/response/serverauthorizationtokenresponse.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/network/requestthumbprint.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/account/ccscredential.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/client/baseclient.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/request/commonauthorizationcoderequest.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/response/authenticationresult.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/request/commonendsessionrequest.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/response/authorizationcodepayload.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/client/authorizationcodeclient.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/request/commonrefreshtokenrequest.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/request/commonsilentflowrequest.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/client/refreshtokenclient.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/client/silentflowclient.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/account/clientinfo.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/network/throttlingutils.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/url/urlstring.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/request/commonauthorizationurlrequest.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/protocol/authorize.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/request/requestparameterbuilder.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/utils/protocolutils.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/response/responsehandler.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/request/authenticationheaderparser.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/error/autherrorcodes.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/error/autherror.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/error/interactionrequiredautherrorcodes.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/error/interactionrequiredautherror.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/error/servererror.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/error/networkerror.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/error/cacheerrorcodes.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/error/cacheerror.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/error/clientautherrorcodes.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/error/clientautherror.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/error/clientconfigurationerrorcodes.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/error/clientconfigurationerror.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/utils/stringutils.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/utils/functionwrappers.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/packagemetadata.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/exports-common.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/response/externaltokenresponse.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/telemetry/performance/performanceclient.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/telemetry/performance/stubperformanceclient.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/crypto/poptokengenerator.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/exports-browser-only.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/utils/clientassertionutils.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/config/apptokenprovider.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/request/nativerequest.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/request/nativesignoutrequest.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/broker/nativebroker/inativebrokerplugin.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/request/commonclientcredentialrequest.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/request/commononbehalfofrequest.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/response/devicecoderesponse.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/request/commondevicecoderequest.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/request/commonusernamepasswordrequest.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/crypto/iguidgenerator.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/exports-node-only.d.ts","../../node_modules/.pnpm/@azure+msal-common@15.8.1/node_modules/@azure/msal-common/dist/index.d.ts","../../node_modules/.pnpm/@azure+msal-node@3.6.3/node_modules/@azure/msal-node/dist/retry/ihttpretrypolicy.d.ts","../../node_modules/.pnpm/@azure+msal-node@3.6.3/node_modules/@azure/msal-node/dist/retry/defaultmanagedidentityretrypolicy.d.ts","../../node_modules/.pnpm/@azure+msal-node@3.6.3/node_modules/@azure/msal-node/dist/retry/imdsretrypolicy.d.ts","../../node_modules/.pnpm/@azure+msal-node@3.6.3/node_modules/@azure/msal-node/dist/utils/constants.d.ts","../../node_modules/.pnpm/@azure+msal-node@3.6.3/node_modules/@azure/msal-node/dist/config/managedidentityid.d.ts","../../node_modules/.pnpm/@azure+msal-node@3.6.3/node_modules/@azure/msal-node/dist/config/configuration.d.ts","../../node_modules/.pnpm/@azure+msal-node@3.6.3/node_modules/@azure/msal-node/dist/crypto/cryptoprovider.d.ts","../../node_modules/.pnpm/@azure+msal-node@3.6.3/node_modules/@azure/msal-node/dist/client/clientassertion.d.ts","../../node_modules/.pnpm/@azure+msal-node@3.6.3/node_modules/@azure/msal-node/dist/client/clientapplication.d.ts","../../node_modules/.pnpm/@azure+msal-node@3.6.3/node_modules/@azure/msal-node/dist/client/publicclientapplication.d.ts","../../node_modules/.pnpm/@azure+msal-node@3.6.3/node_modules/@azure/msal-node/dist/client/confidentialclientapplication.d.ts","../../node_modules/.pnpm/@azure+msal-node@3.6.3/node_modules/@azure/msal-node/dist/client/clientcredentialclient.d.ts","../../node_modules/.pnpm/@azure+msal-node@3.6.3/node_modules/@azure/msal-node/dist/client/devicecodeclient.d.ts","../../node_modules/.pnpm/@azure+msal-node@3.6.3/node_modules/@azure/msal-node/dist/client/onbehalfofclient.d.ts","../../node_modules/.pnpm/@azure+msal-node@3.6.3/node_modules/@azure/msal-node/dist/request/managedidentityrequestparams.d.ts","../../node_modules/.pnpm/@azure+msal-node@3.6.3/node_modules/@azure/msal-node/dist/client/managedidentityapplication.d.ts","../../node_modules/.pnpm/@azure+msal-node@3.6.3/node_modules/@azure/msal-node/dist/client/usernamepasswordclient.d.ts","../../node_modules/.pnpm/@azure+msal-node@3.6.3/node_modules/@azure/msal-node/dist/cache/distributed/distributedcacheplugin.d.ts","../../node_modules/.pnpm/@azure+msal-node@3.6.3/node_modules/@azure/msal-node/dist/packagemetadata.d.ts","../../node_modules/.pnpm/@azure+msal-node@3.6.3/node_modules/@azure/msal-node/dist/index.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/shims.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/content/batchrequestcontent.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/content/batchresponsecontent.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/iauthenticationprovideroptions.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/iauthenticationprovider.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/ifetchoptions.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/middleware/options/imiddlewareoptions.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/middleware/middlewarecontrol.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/icontext.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/middleware/imiddleware.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/middleware/authenticationhandler.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/middleware/httpmessagehandler.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/middleware/options/retryhandleroptions.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/middleware/retryhandler.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/middleware/options/redirecthandleroptions.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/middleware/redirecthandler.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/middleware/telemetryhandler.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/middleware/middlewarefactory.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/middleware/options/authenticationhandleroptions.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/middleware/options/telemetryhandleroptions.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/middleware/options/chaosstrategy.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/middleware/options/chaoshandleroptions.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/middleware/chaoshandler.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/tasks/fileuploadtask/range.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/tasks/fileuploadtask/interfaces/iuploadeventhandlers.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/tasks/fileuploadtask/uploadresult.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/tasks/largefileuploadtask.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/tasks/onedrivelargefileuploadtask.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/tasks/onedrivelargefileuploadtaskutil.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/tasks/fileuploadtask/fileobjectclasses/streamupload.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/tasks/fileuploadtask/fileobjectclasses/fileupload.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/tasks/pageiterator.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/httpclient.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/iclientoptions.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/grapherror.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/igraphrequestcallback.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/responsetype.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/graphrequest.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/iauthprovidercallback.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/iauthprovider.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/ioptions.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/client.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/customauthenticationprovider.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/graphclienterror.d.ts","../../node_modules/.pnpm/@microsoft+microsoft-graph-client@3.0.7/node_modules/@microsoft/microsoft-graph-client/lib/src/index.d.ts","../../node_modules/.pnpm/@types+microsoft-graph@2.40.1/node_modules/@types/microsoft-graph/index.d.ts","./src/services/ingestion-connectors/microsoftconnector.ts","../../node_modules/.pnpm/imapflow@1.0.191/node_modules/imapflow/lib/imap-flow.d.ts","./src/services/ingestion-connectors/imapconnector.ts","./src/services/emailproviderfactory.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/classes/async-fifo-queue.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/interfaces/parent.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/interfaces/job-json.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/interfaces/parent-options.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/interfaces/minimal-job.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/types/backoff-strategy.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/types/deduplication-options.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/types/finished-status.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/classes/redis-connection.d.ts","../../node_modules/.pnpm/ioredis@5.6.1/node_modules/ioredis/built/types.d.ts","../../node_modules/.pnpm/ioredis@5.6.1/node_modules/ioredis/built/command.d.ts","../../node_modules/.pnpm/ioredis@5.6.1/node_modules/ioredis/built/scanstream.d.ts","../../node_modules/.pnpm/ioredis@5.6.1/node_modules/ioredis/built/utils/rediscommander.d.ts","../../node_modules/.pnpm/ioredis@5.6.1/node_modules/ioredis/built/transaction.d.ts","../../node_modules/.pnpm/ioredis@5.6.1/node_modules/ioredis/built/utils/commander.d.ts","../../node_modules/.pnpm/ioredis@5.6.1/node_modules/ioredis/built/connectors/abstractconnector.d.ts","../../node_modules/.pnpm/ioredis@5.6.1/node_modules/ioredis/built/connectors/connectorconstructor.d.ts","../../node_modules/.pnpm/ioredis@5.6.1/node_modules/ioredis/built/connectors/sentinelconnector/types.d.ts","../../node_modules/.pnpm/ioredis@5.6.1/node_modules/ioredis/built/connectors/sentinelconnector/sentineliterator.d.ts","../../node_modules/.pnpm/ioredis@5.6.1/node_modules/ioredis/built/connectors/sentinelconnector/index.d.ts","../../node_modules/.pnpm/ioredis@5.6.1/node_modules/ioredis/built/connectors/standaloneconnector.d.ts","../../node_modules/.pnpm/ioredis@5.6.1/node_modules/ioredis/built/redis/redisoptions.d.ts","../../node_modules/.pnpm/ioredis@5.6.1/node_modules/ioredis/built/cluster/util.d.ts","../../node_modules/.pnpm/ioredis@5.6.1/node_modules/ioredis/built/cluster/clusteroptions.d.ts","../../node_modules/.pnpm/ioredis@5.6.1/node_modules/ioredis/built/cluster/index.d.ts","../../node_modules/.pnpm/denque@2.1.0/node_modules/denque/index.d.ts","../../node_modules/.pnpm/ioredis@5.6.1/node_modules/ioredis/built/subscriptionset.d.ts","../../node_modules/.pnpm/ioredis@5.6.1/node_modules/ioredis/built/datahandler.d.ts","../../node_modules/.pnpm/ioredis@5.6.1/node_modules/ioredis/built/redis.d.ts","../../node_modules/.pnpm/ioredis@5.6.1/node_modules/ioredis/built/pipeline.d.ts","../../node_modules/.pnpm/ioredis@5.6.1/node_modules/ioredis/built/index.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/classes/scripts.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/classes/queue-events.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/classes/job.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/classes/queue-keys.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/enums/child-command.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/enums/error-code.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/enums/parent-command.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/enums/metrics-time.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/enums/telemetry-attributes.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/enums/index.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/classes/queue-base.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/types/minimal-queue.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/types/job-json-sandbox.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/types/job-options.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/types/job-scheduler-template-options.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/types/job-type.d.ts","../../node_modules/.pnpm/cron-parser@4.9.0/node_modules/cron-parser/types/common.d.ts","../../node_modules/.pnpm/cron-parser@4.9.0/node_modules/cron-parser/types/index.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/interfaces/repeat-options.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/types/repeat-strategy.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/types/job-progress.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/types/script-queue-context.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/types/index.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/interfaces/advanced-options.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/interfaces/backoff-options.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/interfaces/keep-jobs.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/interfaces/base-job-options.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/interfaces/child-message.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/interfaces/connection.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/interfaces/redis-options.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/interfaces/telemetry.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/interfaces/queue-options.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/interfaces/flow-job.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/interfaces/ioredis-events.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/interfaces/job-scheduler-json.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/interfaces/metrics-options.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/interfaces/metrics.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/interfaces/parent-message.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/interfaces/rate-limiter-options.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/interfaces/redis-streams.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/interfaces/repeatable-job.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/interfaces/repeatable-options.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/interfaces/sandboxed-job.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/interfaces/sandboxed-job-processor.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/interfaces/sandboxed-options.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/interfaces/worker-options.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/interfaces/receiver.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/interfaces/index.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/classes/backoffs.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/classes/child.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/classes/child-pool.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/classes/child-processor.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/classes/errors/delayed-error.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/classes/errors/rate-limit-error.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/classes/errors/unrecoverable-error.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/classes/errors/waiting-children-error.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/classes/errors/waiting-error.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/classes/errors/index.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/classes/flow-producer.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/classes/job-scheduler.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/classes/queue-events-producer.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/classes/queue-getters.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/classes/repeat.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/classes/queue.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/classes/sandbox.d.ts","../../node_modules/.pnpm/node-abort-controller@3.1.1/node_modules/node-abort-controller/index.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/classes/worker.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/classes/index.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/utils.d.ts","../../node_modules/.pnpm/bullmq@5.56.3/node_modules/bullmq/dist/esm/index.d.ts","./src/jobs/queues.ts","./src/services/storage/localfilesystemprovider.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/abort-handler.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/abort.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/auth/auth.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/auth/httpapikeyauth.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/identity/identity.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/response.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/command.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/endpoint.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/feature-ids.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/logger.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/uri.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/http.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/util.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/middleware.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/auth/httpsigner.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/auth/identityproviderconfig.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/auth/httpauthscheme.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/auth/httpauthschemeprovider.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/auth/index.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/transform/exact.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/externals-check/browser-externals-check.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/blob/blob-payload-input-types.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/crypto.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/checksum.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/client.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/connection/config.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/transfer.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/connection/manager.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/connection/pool.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/connection/index.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/eventstream.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/encode.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/endpoints/shared.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/endpoints/endpointruleobject.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/endpoints/errorruleobject.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/endpoints/treeruleobject.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/endpoints/rulesetobject.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/endpoints/index.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/extensions/checksum.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/extensions/defaultclientconfiguration.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/shapes.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/retry.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/extensions/retry.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/extensions/defaultextensionconfiguration.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/extensions/index.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/http/httphandlerinitialization.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/identity/apikeyidentity.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/identity/awscredentialidentity.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/identity/tokenidentity.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/identity/index.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/pagination.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/profile.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/serde.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/schema/sentinels.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/schema/traits.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/schema/schema.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/signature.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/stream.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/streaming-payload/streaming-blob-common-types.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/streaming-payload/streaming-blob-payload-input-types.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/streaming-payload/streaming-blob-payload-output-types.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/transform/type-transform.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/transform/client-method-transforms.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/transform/client-payload-blob-type-narrow.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/transform/mutable.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/transform/no-undefined.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/waiter.d.ts","../../node_modules/.pnpm/@smithy+types@4.3.1/node_modules/@smithy/types/dist-types/index.d.ts","../../node_modules/.pnpm/@smithy+node-config-provider@4.1.3/node_modules/@smithy/node-config-provider/dist-types/fromenv.d.ts","../../node_modules/.pnpm/@smithy+shared-ini-file-loader@4.0.4/node_modules/@smithy/shared-ini-file-loader/dist-types/gethomedir.d.ts","../../node_modules/.pnpm/@smithy+shared-ini-file-loader@4.0.4/node_modules/@smithy/shared-ini-file-loader/dist-types/getprofilename.d.ts","../../node_modules/.pnpm/@smithy+shared-ini-file-loader@4.0.4/node_modules/@smithy/shared-ini-file-loader/dist-types/getssotokenfilepath.d.ts","../../node_modules/.pnpm/@smithy+shared-ini-file-loader@4.0.4/node_modules/@smithy/shared-ini-file-loader/dist-types/getssotokenfromfile.d.ts","../../node_modules/.pnpm/@smithy+shared-ini-file-loader@4.0.4/node_modules/@smithy/shared-ini-file-loader/dist-types/loadsharedconfigfiles.d.ts","../../node_modules/.pnpm/@smithy+shared-ini-file-loader@4.0.4/node_modules/@smithy/shared-ini-file-loader/dist-types/loadssosessiondata.d.ts","../../node_modules/.pnpm/@smithy+shared-ini-file-loader@4.0.4/node_modules/@smithy/shared-ini-file-loader/dist-types/parseknownfiles.d.ts","../../node_modules/.pnpm/@smithy+shared-ini-file-loader@4.0.4/node_modules/@smithy/shared-ini-file-loader/dist-types/types.d.ts","../../node_modules/.pnpm/@smithy+shared-ini-file-loader@4.0.4/node_modules/@smithy/shared-ini-file-loader/dist-types/index.d.ts","../../node_modules/.pnpm/@smithy+node-config-provider@4.1.3/node_modules/@smithy/node-config-provider/dist-types/fromsharedconfigfiles.d.ts","../../node_modules/.pnpm/@smithy+node-config-provider@4.1.3/node_modules/@smithy/node-config-provider/dist-types/fromstatic.d.ts","../../node_modules/.pnpm/@smithy+node-config-provider@4.1.3/node_modules/@smithy/node-config-provider/dist-types/configloader.d.ts","../../node_modules/.pnpm/@smithy+node-config-provider@4.1.3/node_modules/@smithy/node-config-provider/dist-types/index.d.ts","../../node_modules/.pnpm/@aws-sdk+middleware-flexible-checksums@3.844.0/node_modules/@aws-sdk/middleware-flexible-checksums/dist-types/constants.d.ts","../../node_modules/.pnpm/@aws-sdk+middleware-flexible-checksums@3.844.0/node_modules/@aws-sdk/middleware-flexible-checksums/dist-types/node_request_checksum_calculation_config_options.d.ts","../../node_modules/.pnpm/@aws-sdk+middleware-flexible-checksums@3.844.0/node_modules/@aws-sdk/middleware-flexible-checksums/dist-types/node_response_checksum_validation_config_options.d.ts","../../node_modules/.pnpm/@aws-sdk+middleware-flexible-checksums@3.844.0/node_modules/@aws-sdk/middleware-flexible-checksums/dist-types/crc64-nvme-crt-container.d.ts","../../node_modules/.pnpm/@aws-sdk+middleware-flexible-checksums@3.844.0/node_modules/@aws-sdk/middleware-flexible-checksums/dist-types/configuration.d.ts","../../node_modules/.pnpm/@aws-sdk+middleware-flexible-checksums@3.844.0/node_modules/@aws-sdk/middleware-flexible-checksums/dist-types/flexiblechecksumsmiddleware.d.ts","../../node_modules/.pnpm/@aws-sdk+middleware-flexible-checksums@3.844.0/node_modules/@aws-sdk/middleware-flexible-checksums/dist-types/flexiblechecksumsinputmiddleware.d.ts","../../node_modules/.pnpm/@aws-sdk+middleware-flexible-checksums@3.844.0/node_modules/@aws-sdk/middleware-flexible-checksums/dist-types/flexiblechecksumsresponsemiddleware.d.ts","../../node_modules/.pnpm/@aws-sdk+middleware-flexible-checksums@3.844.0/node_modules/@aws-sdk/middleware-flexible-checksums/dist-types/getflexiblechecksumsplugin.d.ts","../../node_modules/.pnpm/@aws-sdk+middleware-flexible-checksums@3.844.0/node_modules/@aws-sdk/middleware-flexible-checksums/dist-types/resolveflexiblechecksumsconfig.d.ts","../../node_modules/.pnpm/@aws-sdk+middleware-flexible-checksums@3.844.0/node_modules/@aws-sdk/middleware-flexible-checksums/dist-types/index.d.ts","../../node_modules/.pnpm/@aws-sdk+middleware-host-header@3.840.0/node_modules/@aws-sdk/middleware-host-header/dist-types/index.d.ts","../../node_modules/.pnpm/@aws-sdk+middleware-sdk-s3@3.844.0/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/check-content-length-header.d.ts","../../node_modules/.pnpm/@aws-sdk+middleware-sdk-s3@3.844.0/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/region-redirect-middleware.d.ts","../../node_modules/.pnpm/@aws-sdk+middleware-sdk-s3@3.844.0/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/region-redirect-endpoint-middleware.d.ts","../../node_modules/.pnpm/@aws-sdk+middleware-sdk-s3@3.844.0/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/s3-expires-middleware.d.ts","../../node_modules/.pnpm/@aws-sdk+types@3.840.0/node_modules/@aws-sdk/types/dist-types/abort.d.ts","../../node_modules/.pnpm/@aws-sdk+types@3.840.0/node_modules/@aws-sdk/types/dist-types/auth.d.ts","../../node_modules/.pnpm/@aws-sdk+types@3.840.0/node_modules/@aws-sdk/types/dist-types/blob/blob-types.d.ts","../../node_modules/.pnpm/@aws-sdk+types@3.840.0/node_modules/@aws-sdk/types/dist-types/checksum.d.ts","../../node_modules/.pnpm/@aws-sdk+types@3.840.0/node_modules/@aws-sdk/types/dist-types/client.d.ts","../../node_modules/.pnpm/@aws-sdk+types@3.840.0/node_modules/@aws-sdk/types/dist-types/command.d.ts","../../node_modules/.pnpm/@aws-sdk+types@3.840.0/node_modules/@aws-sdk/types/dist-types/connection.d.ts","../../node_modules/.pnpm/@aws-sdk+types@3.840.0/node_modules/@aws-sdk/types/dist-types/identity/identity.d.ts","../../node_modules/.pnpm/@aws-sdk+types@3.840.0/node_modules/@aws-sdk/types/dist-types/identity/anonymousidentity.d.ts","../../node_modules/.pnpm/@aws-sdk+types@3.840.0/node_modules/@aws-sdk/types/dist-types/feature-ids.d.ts","../../node_modules/.pnpm/@aws-sdk+types@3.840.0/node_modules/@aws-sdk/types/dist-types/identity/awscredentialidentity.d.ts","../../node_modules/.pnpm/@aws-sdk+types@3.840.0/node_modules/@aws-sdk/types/dist-types/identity/loginidentity.d.ts","../../node_modules/.pnpm/@aws-sdk+types@3.840.0/node_modules/@aws-sdk/types/dist-types/identity/tokenidentity.d.ts","../../node_modules/.pnpm/@aws-sdk+types@3.840.0/node_modules/@aws-sdk/types/dist-types/identity/index.d.ts","../../node_modules/.pnpm/@aws-sdk+types@3.840.0/node_modules/@aws-sdk/types/dist-types/util.d.ts","../../node_modules/.pnpm/@aws-sdk+types@3.840.0/node_modules/@aws-sdk/types/dist-types/credentials.d.ts","../../node_modules/.pnpm/@aws-sdk+types@3.840.0/node_modules/@aws-sdk/types/dist-types/crypto.d.ts","../../node_modules/.pnpm/@aws-sdk+types@3.840.0/node_modules/@aws-sdk/types/dist-types/dns.d.ts","../../node_modules/.pnpm/@aws-sdk+types@3.840.0/node_modules/@aws-sdk/types/dist-types/encode.d.ts","../../node_modules/.pnpm/@aws-sdk+types@3.840.0/node_modules/@aws-sdk/types/dist-types/endpoint.d.ts","../../node_modules/.pnpm/@aws-sdk+types@3.840.0/node_modules/@aws-sdk/types/dist-types/eventstream.d.ts","../../node_modules/.pnpm/@aws-sdk+types@3.840.0/node_modules/@aws-sdk/types/dist-types/extensions/index.d.ts","../../node_modules/.pnpm/@aws-sdk+types@3.840.0/node_modules/@aws-sdk/types/dist-types/function.d.ts","../../node_modules/.pnpm/@aws-sdk+types@3.840.0/node_modules/@aws-sdk/types/dist-types/http.d.ts","../../node_modules/.pnpm/@aws-sdk+types@3.840.0/node_modules/@aws-sdk/types/dist-types/logger.d.ts","../../node_modules/.pnpm/@aws-sdk+types@3.840.0/node_modules/@aws-sdk/types/dist-types/middleware.d.ts","../../node_modules/.pnpm/@aws-sdk+types@3.840.0/node_modules/@aws-sdk/types/dist-types/pagination.d.ts","../../node_modules/.pnpm/@aws-sdk+types@3.840.0/node_modules/@aws-sdk/types/dist-types/profile.d.ts","../../node_modules/.pnpm/@aws-sdk+types@3.840.0/node_modules/@aws-sdk/types/dist-types/request.d.ts","../../node_modules/.pnpm/@aws-sdk+types@3.840.0/node_modules/@aws-sdk/types/dist-types/response.d.ts","../../node_modules/.pnpm/@aws-sdk+types@3.840.0/node_modules/@aws-sdk/types/dist-types/retry.d.ts","../../node_modules/.pnpm/@aws-sdk+types@3.840.0/node_modules/@aws-sdk/types/dist-types/serde.d.ts","../../node_modules/.pnpm/@aws-sdk+types@3.840.0/node_modules/@aws-sdk/types/dist-types/shapes.d.ts","../../node_modules/.pnpm/@aws-sdk+types@3.840.0/node_modules/@aws-sdk/types/dist-types/signature.d.ts","../../node_modules/.pnpm/@aws-sdk+types@3.840.0/node_modules/@aws-sdk/types/dist-types/stream.d.ts","../../node_modules/.pnpm/@aws-sdk+types@3.840.0/node_modules/@aws-sdk/types/dist-types/token.d.ts","../../node_modules/.pnpm/@aws-sdk+types@3.840.0/node_modules/@aws-sdk/types/dist-types/transfer.d.ts","../../node_modules/.pnpm/@aws-sdk+types@3.840.0/node_modules/@aws-sdk/types/dist-types/uri.d.ts","../../node_modules/.pnpm/@aws-sdk+types@3.840.0/node_modules/@aws-sdk/types/dist-types/waiter.d.ts","../../node_modules/.pnpm/@aws-sdk+types@3.840.0/node_modules/@aws-sdk/types/dist-types/index.d.ts","../../node_modules/.pnpm/@aws-sdk+middleware-sdk-s3@3.844.0/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/s3-express/interfaces/s3expressidentity.d.ts","../../node_modules/.pnpm/@aws-sdk+middleware-sdk-s3@3.844.0/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/s3-express/classes/s3expressidentitycacheentry.d.ts","../../node_modules/.pnpm/@aws-sdk+middleware-sdk-s3@3.844.0/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/s3-express/classes/s3expressidentitycache.d.ts","../../node_modules/.pnpm/@aws-sdk+middleware-sdk-s3@3.844.0/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/s3-express/interfaces/s3expressidentityprovider.d.ts","../../node_modules/.pnpm/@aws-sdk+middleware-sdk-s3@3.844.0/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/s3-express/classes/s3expressidentityproviderimpl.d.ts","../../node_modules/.pnpm/@smithy+signature-v4@5.1.2/node_modules/@smithy/signature-v4/dist-types/signaturev4base.d.ts","../../node_modules/.pnpm/@smithy+signature-v4@5.1.2/node_modules/@smithy/signature-v4/dist-types/signaturev4.d.ts","../../node_modules/.pnpm/@smithy+signature-v4@5.1.2/node_modules/@smithy/signature-v4/dist-types/constants.d.ts","../../node_modules/.pnpm/@smithy+signature-v4@5.1.2/node_modules/@smithy/signature-v4/dist-types/getcanonicalheaders.d.ts","../../node_modules/.pnpm/@smithy+signature-v4@5.1.2/node_modules/@smithy/signature-v4/dist-types/getcanonicalquery.d.ts","../../node_modules/.pnpm/@smithy+signature-v4@5.1.2/node_modules/@smithy/signature-v4/dist-types/getpayloadhash.d.ts","../../node_modules/.pnpm/@smithy+signature-v4@5.1.2/node_modules/@smithy/signature-v4/dist-types/moveheaderstoquery.d.ts","../../node_modules/.pnpm/@smithy+signature-v4@5.1.2/node_modules/@smithy/signature-v4/dist-types/preparerequest.d.ts","../../node_modules/.pnpm/@smithy+signature-v4@5.1.2/node_modules/@smithy/signature-v4/dist-types/credentialderivation.d.ts","../../node_modules/.pnpm/@smithy+signature-v4@5.1.2/node_modules/@smithy/signature-v4/dist-types/headerutil.d.ts","../../node_modules/.pnpm/@smithy+signature-v4@5.1.2/node_modules/@smithy/signature-v4/dist-types/signature-v4a-container.d.ts","../../node_modules/.pnpm/@smithy+signature-v4@5.1.2/node_modules/@smithy/signature-v4/dist-types/index.d.ts","../../node_modules/.pnpm/@aws-sdk+middleware-sdk-s3@3.844.0/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/s3-express/classes/signaturev4s3express.d.ts","../../node_modules/.pnpm/@aws-sdk+middleware-sdk-s3@3.844.0/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/s3-express/constants.d.ts","../../node_modules/.pnpm/@aws-sdk+middleware-sdk-s3@3.844.0/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/s3-express/functions/s3expressmiddleware.d.ts","../../node_modules/.pnpm/@smithy+protocol-http@5.1.2/node_modules/@smithy/protocol-http/dist-types/httprequest.d.ts","../../node_modules/.pnpm/@smithy+protocol-http@5.1.2/node_modules/@smithy/protocol-http/dist-types/httpresponse.d.ts","../../node_modules/.pnpm/@smithy+protocol-http@5.1.2/node_modules/@smithy/protocol-http/dist-types/httphandler.d.ts","../../node_modules/.pnpm/@smithy+protocol-http@5.1.2/node_modules/@smithy/protocol-http/dist-types/extensions/httpextensionconfiguration.d.ts","../../node_modules/.pnpm/@smithy+protocol-http@5.1.2/node_modules/@smithy/protocol-http/dist-types/extensions/index.d.ts","../../node_modules/.pnpm/@smithy+protocol-http@5.1.2/node_modules/@smithy/protocol-http/dist-types/field.d.ts","../../node_modules/.pnpm/@smithy+protocol-http@5.1.2/node_modules/@smithy/protocol-http/dist-types/fields.d.ts","../../node_modules/.pnpm/@smithy+protocol-http@5.1.2/node_modules/@smithy/protocol-http/dist-types/isvalidhostname.d.ts","../../node_modules/.pnpm/@smithy+protocol-http@5.1.2/node_modules/@smithy/protocol-http/dist-types/types.d.ts","../../node_modules/.pnpm/@smithy+protocol-http@5.1.2/node_modules/@smithy/protocol-http/dist-types/index.d.ts","../../node_modules/.pnpm/@aws-sdk+middleware-sdk-s3@3.844.0/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/s3-express/functions/s3expresshttpsigningmiddleware.d.ts","../../node_modules/.pnpm/@aws-sdk+middleware-sdk-s3@3.844.0/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/s3-express/index.d.ts","../../node_modules/.pnpm/@aws-sdk+middleware-sdk-s3@3.844.0/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/s3configuration.d.ts","../../node_modules/.pnpm/@aws-sdk+middleware-sdk-s3@3.844.0/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/throw-200-exceptions.d.ts","../../node_modules/.pnpm/@aws-sdk+middleware-sdk-s3@3.844.0/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/validate-bucket-name.d.ts","../../node_modules/.pnpm/@aws-sdk+middleware-sdk-s3@3.844.0/node_modules/@aws-sdk/middleware-sdk-s3/dist-types/index.d.ts","../../node_modules/.pnpm/@aws-sdk+middleware-user-agent@3.844.0/node_modules/@aws-sdk/middleware-user-agent/dist-types/configurations.d.ts","../../node_modules/.pnpm/@aws-sdk+middleware-user-agent@3.844.0/node_modules/@aws-sdk/middleware-user-agent/dist-types/user-agent-middleware.d.ts","../../node_modules/.pnpm/@aws-sdk+middleware-user-agent@3.844.0/node_modules/@aws-sdk/middleware-user-agent/dist-types/index.d.ts","../../node_modules/.pnpm/@smithy+config-resolver@4.1.4/node_modules/@smithy/config-resolver/dist-types/endpointsconfig/nodeusedualstackendpointconfigoptions.d.ts","../../node_modules/.pnpm/@smithy+config-resolver@4.1.4/node_modules/@smithy/config-resolver/dist-types/endpointsconfig/nodeusefipsendpointconfigoptions.d.ts","../../node_modules/.pnpm/@smithy+config-resolver@4.1.4/node_modules/@smithy/config-resolver/dist-types/endpointsconfig/resolveendpointsconfig.d.ts","../../node_modules/.pnpm/@smithy+config-resolver@4.1.4/node_modules/@smithy/config-resolver/dist-types/endpointsconfig/resolvecustomendpointsconfig.d.ts","../../node_modules/.pnpm/@smithy+config-resolver@4.1.4/node_modules/@smithy/config-resolver/dist-types/endpointsconfig/index.d.ts","../../node_modules/.pnpm/@smithy+config-resolver@4.1.4/node_modules/@smithy/config-resolver/dist-types/regionconfig/config.d.ts","../../node_modules/.pnpm/@smithy+config-resolver@4.1.4/node_modules/@smithy/config-resolver/dist-types/regionconfig/resolveregionconfig.d.ts","../../node_modules/.pnpm/@smithy+config-resolver@4.1.4/node_modules/@smithy/config-resolver/dist-types/regionconfig/index.d.ts","../../node_modules/.pnpm/@smithy+config-resolver@4.1.4/node_modules/@smithy/config-resolver/dist-types/regioninfo/endpointvarianttag.d.ts","../../node_modules/.pnpm/@smithy+config-resolver@4.1.4/node_modules/@smithy/config-resolver/dist-types/regioninfo/endpointvariant.d.ts","../../node_modules/.pnpm/@smithy+config-resolver@4.1.4/node_modules/@smithy/config-resolver/dist-types/regioninfo/partitionhash.d.ts","../../node_modules/.pnpm/@smithy+config-resolver@4.1.4/node_modules/@smithy/config-resolver/dist-types/regioninfo/regionhash.d.ts","../../node_modules/.pnpm/@smithy+config-resolver@4.1.4/node_modules/@smithy/config-resolver/dist-types/regioninfo/getregioninfo.d.ts","../../node_modules/.pnpm/@smithy+config-resolver@4.1.4/node_modules/@smithy/config-resolver/dist-types/regioninfo/index.d.ts","../../node_modules/.pnpm/@smithy+config-resolver@4.1.4/node_modules/@smithy/config-resolver/dist-types/index.d.ts","../../node_modules/.pnpm/@smithy+eventstream-serde-config-resolver@4.1.2/node_modules/@smithy/eventstream-serde-config-resolver/dist-types/eventstreamserdeconfig.d.ts","../../node_modules/.pnpm/@smithy+eventstream-serde-config-resolver@4.1.2/node_modules/@smithy/eventstream-serde-config-resolver/dist-types/index.d.ts","../../node_modules/.pnpm/@smithy+middleware-endpoint@4.1.14/node_modules/@smithy/middleware-endpoint/dist-types/resolveendpointconfig.d.ts","../../node_modules/.pnpm/@smithy+middleware-endpoint@4.1.14/node_modules/@smithy/middleware-endpoint/dist-types/types.d.ts","../../node_modules/.pnpm/@smithy+middleware-endpoint@4.1.14/node_modules/@smithy/middleware-endpoint/dist-types/adaptors/getendpointfrominstructions.d.ts","../../node_modules/.pnpm/@smithy+middleware-endpoint@4.1.14/node_modules/@smithy/middleware-endpoint/dist-types/adaptors/toendpointv1.d.ts","../../node_modules/.pnpm/@smithy+middleware-endpoint@4.1.14/node_modules/@smithy/middleware-endpoint/dist-types/adaptors/index.d.ts","../../node_modules/.pnpm/@smithy+middleware-endpoint@4.1.14/node_modules/@smithy/middleware-endpoint/dist-types/endpointmiddleware.d.ts","../../node_modules/.pnpm/@smithy+middleware-endpoint@4.1.14/node_modules/@smithy/middleware-endpoint/dist-types/getendpointplugin.d.ts","../../node_modules/.pnpm/@smithy+middleware-endpoint@4.1.14/node_modules/@smithy/middleware-endpoint/dist-types/resolveendpointrequiredconfig.d.ts","../../node_modules/.pnpm/@smithy+middleware-endpoint@4.1.14/node_modules/@smithy/middleware-endpoint/dist-types/index.d.ts","../../node_modules/.pnpm/@smithy+util-retry@4.0.6/node_modules/@smithy/util-retry/dist-types/types.d.ts","../../node_modules/.pnpm/@smithy+util-retry@4.0.6/node_modules/@smithy/util-retry/dist-types/adaptiveretrystrategy.d.ts","../../node_modules/.pnpm/@smithy+util-retry@4.0.6/node_modules/@smithy/util-retry/dist-types/standardretrystrategy.d.ts","../../node_modules/.pnpm/@smithy+util-retry@4.0.6/node_modules/@smithy/util-retry/dist-types/configuredretrystrategy.d.ts","../../node_modules/.pnpm/@smithy+util-retry@4.0.6/node_modules/@smithy/util-retry/dist-types/defaultratelimiter.d.ts","../../node_modules/.pnpm/@smithy+util-retry@4.0.6/node_modules/@smithy/util-retry/dist-types/config.d.ts","../../node_modules/.pnpm/@smithy+util-retry@4.0.6/node_modules/@smithy/util-retry/dist-types/constants.d.ts","../../node_modules/.pnpm/@smithy+util-retry@4.0.6/node_modules/@smithy/util-retry/dist-types/index.d.ts","../../node_modules/.pnpm/@smithy+middleware-retry@4.1.15/node_modules/@smithy/middleware-retry/dist-types/types.d.ts","../../node_modules/.pnpm/@smithy+middleware-retry@4.1.15/node_modules/@smithy/middleware-retry/dist-types/standardretrystrategy.d.ts","../../node_modules/.pnpm/@smithy+middleware-retry@4.1.15/node_modules/@smithy/middleware-retry/dist-types/adaptiveretrystrategy.d.ts","../../node_modules/.pnpm/@smithy+middleware-retry@4.1.15/node_modules/@smithy/middleware-retry/dist-types/configurations.d.ts","../../node_modules/.pnpm/@smithy+middleware-retry@4.1.15/node_modules/@smithy/middleware-retry/dist-types/delaydecider.d.ts","../../node_modules/.pnpm/@smithy+middleware-retry@4.1.15/node_modules/@smithy/middleware-retry/dist-types/omitretryheadersmiddleware.d.ts","../../node_modules/.pnpm/@smithy+middleware-retry@4.1.15/node_modules/@smithy/middleware-retry/dist-types/retrydecider.d.ts","../../node_modules/.pnpm/@smithy+middleware-retry@4.1.15/node_modules/@smithy/middleware-retry/dist-types/retrymiddleware.d.ts","../../node_modules/.pnpm/@smithy+middleware-retry@4.1.15/node_modules/@smithy/middleware-retry/dist-types/index.d.ts","../../node_modules/.pnpm/@smithy+smithy-client@4.4.6/node_modules/@smithy/smithy-client/dist-types/client.d.ts","../../node_modules/.pnpm/@smithy+util-stream@4.2.3/node_modules/@smithy/util-stream/dist-types/blob/uint8arrayblobadapter.d.ts","../../node_modules/.pnpm/@smithy+util-stream@4.2.3/node_modules/@smithy/util-stream/dist-types/checksum/checksumstream.d.ts","../../node_modules/.pnpm/@smithy+util-stream@4.2.3/node_modules/@smithy/util-stream/dist-types/checksum/checksumstream.browser.d.ts","../../node_modules/.pnpm/@smithy+util-stream@4.2.3/node_modules/@smithy/util-stream/dist-types/checksum/createchecksumstream.browser.d.ts","../../node_modules/.pnpm/@smithy+util-stream@4.2.3/node_modules/@smithy/util-stream/dist-types/checksum/createchecksumstream.d.ts","../../node_modules/.pnpm/@smithy+util-stream@4.2.3/node_modules/@smithy/util-stream/dist-types/createbufferedreadable.d.ts","../../node_modules/.pnpm/@smithy+util-stream@4.2.3/node_modules/@smithy/util-stream/dist-types/getawschunkedencodingstream.d.ts","../../node_modules/.pnpm/@smithy+util-stream@4.2.3/node_modules/@smithy/util-stream/dist-types/headstream.d.ts","../../node_modules/.pnpm/@smithy+util-stream@4.2.3/node_modules/@smithy/util-stream/dist-types/sdk-stream-mixin.d.ts","../../node_modules/.pnpm/@smithy+util-stream@4.2.3/node_modules/@smithy/util-stream/dist-types/splitstream.d.ts","../../node_modules/.pnpm/@smithy+util-stream@4.2.3/node_modules/@smithy/util-stream/dist-types/stream-type-check.d.ts","../../node_modules/.pnpm/@smithy+util-stream@4.2.3/node_modules/@smithy/util-stream/dist-types/index.d.ts","../../node_modules/.pnpm/@smithy+core@3.7.0/node_modules/@smithy/core/dist-types/submodules/protocols/collect-stream-body.d.ts","../../node_modules/.pnpm/@smithy+core@3.7.0/node_modules/@smithy/core/dist-types/submodules/protocols/extended-encode-uri-component.d.ts","../../node_modules/.pnpm/@smithy+core@3.7.0/node_modules/@smithy/core/dist-types/submodules/schema/deref.d.ts","../../node_modules/.pnpm/@smithy+core@3.7.0/node_modules/@smithy/core/dist-types/submodules/schema/middleware/schema-middleware-types.d.ts","../../node_modules/.pnpm/@smithy+core@3.7.0/node_modules/@smithy/core/dist-types/submodules/schema/middleware/getschemaserdeplugin.d.ts","../../node_modules/.pnpm/@smithy+core@3.7.0/node_modules/@smithy/core/dist-types/submodules/schema/schemas/schema.d.ts","../../node_modules/.pnpm/@smithy+core@3.7.0/node_modules/@smithy/core/dist-types/submodules/schema/schemas/listschema.d.ts","../../node_modules/.pnpm/@smithy+core@3.7.0/node_modules/@smithy/core/dist-types/submodules/schema/schemas/mapschema.d.ts","../../node_modules/.pnpm/@smithy+core@3.7.0/node_modules/@smithy/core/dist-types/submodules/schema/schemas/operationschema.d.ts","../../node_modules/.pnpm/@smithy+core@3.7.0/node_modules/@smithy/core/dist-types/submodules/schema/schemas/structureschema.d.ts","../../node_modules/.pnpm/@smithy+core@3.7.0/node_modules/@smithy/core/dist-types/submodules/schema/schemas/errorschema.d.ts","../../node_modules/.pnpm/@smithy+core@3.7.0/node_modules/@smithy/core/dist-types/submodules/schema/schemas/normalizedschema.d.ts","../../node_modules/.pnpm/@smithy+core@3.7.0/node_modules/@smithy/core/dist-types/submodules/schema/schemas/simpleschema.d.ts","../../node_modules/.pnpm/@smithy+core@3.7.0/node_modules/@smithy/core/dist-types/submodules/schema/schemas/sentinels.d.ts","../../node_modules/.pnpm/@smithy+core@3.7.0/node_modules/@smithy/core/dist-types/submodules/schema/typeregistry.d.ts","../../node_modules/.pnpm/@smithy+core@3.7.0/node_modules/@smithy/core/dist-types/submodules/schema/index.d.ts","../../node_modules/.pnpm/@smithy+core@3.7.0/node_modules/@smithy/core/schema.d.ts","../../node_modules/.pnpm/@smithy+core@3.7.0/node_modules/@smithy/core/dist-types/submodules/protocols/httpprotocol.d.ts","../../node_modules/.pnpm/@smithy+core@3.7.0/node_modules/@smithy/core/dist-types/submodules/protocols/httpbindingprotocol.d.ts","../../node_modules/.pnpm/@smithy+core@3.7.0/node_modules/@smithy/core/dist-types/submodules/protocols/rpcprotocol.d.ts","../../node_modules/.pnpm/@smithy+core@3.7.0/node_modules/@smithy/core/dist-types/submodules/protocols/requestbuilder.d.ts","../../node_modules/.pnpm/@smithy+core@3.7.0/node_modules/@smithy/core/dist-types/submodules/protocols/resolve-path.d.ts","../../node_modules/.pnpm/@smithy+core@3.7.0/node_modules/@smithy/core/dist-types/submodules/protocols/serde/fromstringshapedeserializer.d.ts","../../node_modules/.pnpm/@smithy+core@3.7.0/node_modules/@smithy/core/dist-types/submodules/protocols/serde/httpinterceptingshapedeserializer.d.ts","../../node_modules/.pnpm/@smithy+core@3.7.0/node_modules/@smithy/core/dist-types/submodules/protocols/serde/tostringshapeserializer.d.ts","../../node_modules/.pnpm/@smithy+core@3.7.0/node_modules/@smithy/core/dist-types/submodules/protocols/serde/httpinterceptingshapeserializer.d.ts","../../node_modules/.pnpm/@smithy+core@3.7.0/node_modules/@smithy/core/dist-types/submodules/protocols/serde/determinetimestampformat.d.ts","../../node_modules/.pnpm/@smithy+core@3.7.0/node_modules/@smithy/core/dist-types/submodules/protocols/index.d.ts","../../node_modules/.pnpm/@smithy+core@3.7.0/node_modules/@smithy/core/protocols.d.ts","../../node_modules/.pnpm/@smithy+smithy-client@4.4.6/node_modules/@smithy/smithy-client/dist-types/collect-stream-body.d.ts","../../node_modules/.pnpm/@smithy+smithy-client@4.4.6/node_modules/@smithy/smithy-client/dist-types/command.d.ts","../../node_modules/.pnpm/@smithy+smithy-client@4.4.6/node_modules/@smithy/smithy-client/dist-types/constants.d.ts","../../node_modules/.pnpm/@smithy+smithy-client@4.4.6/node_modules/@smithy/smithy-client/dist-types/create-aggregated-client.d.ts","../../node_modules/.pnpm/@smithy+smithy-client@4.4.6/node_modules/@smithy/smithy-client/dist-types/default-error-handler.d.ts","../../node_modules/.pnpm/@smithy+smithy-client@4.4.6/node_modules/@smithy/smithy-client/dist-types/defaults-mode.d.ts","../../node_modules/.pnpm/@smithy+smithy-client@4.4.6/node_modules/@smithy/smithy-client/dist-types/emitwarningifunsupportedversion.d.ts","../../node_modules/.pnpm/@smithy+smithy-client@4.4.6/node_modules/@smithy/smithy-client/dist-types/exceptions.d.ts","../../node_modules/.pnpm/@smithy+smithy-client@4.4.6/node_modules/@smithy/smithy-client/dist-types/extended-encode-uri-component.d.ts","../../node_modules/.pnpm/@smithy+smithy-client@4.4.6/node_modules/@smithy/smithy-client/dist-types/extensions/checksum.d.ts","../../node_modules/.pnpm/@smithy+smithy-client@4.4.6/node_modules/@smithy/smithy-client/dist-types/extensions/retry.d.ts","../../node_modules/.pnpm/@smithy+smithy-client@4.4.6/node_modules/@smithy/smithy-client/dist-types/extensions/defaultextensionconfiguration.d.ts","../../node_modules/.pnpm/@smithy+smithy-client@4.4.6/node_modules/@smithy/smithy-client/dist-types/extensions/index.d.ts","../../node_modules/.pnpm/@smithy+smithy-client@4.4.6/node_modules/@smithy/smithy-client/dist-types/get-array-if-single-item.d.ts","../../node_modules/.pnpm/@smithy+smithy-client@4.4.6/node_modules/@smithy/smithy-client/dist-types/get-value-from-text-node.d.ts","../../node_modules/.pnpm/@smithy+smithy-client@4.4.6/node_modules/@smithy/smithy-client/dist-types/is-serializable-header-value.d.ts","../../node_modules/.pnpm/@smithy+smithy-client@4.4.6/node_modules/@smithy/smithy-client/dist-types/nooplogger.d.ts","../../node_modules/.pnpm/@smithy+smithy-client@4.4.6/node_modules/@smithy/smithy-client/dist-types/object-mapping.d.ts","../../node_modules/.pnpm/@smithy+smithy-client@4.4.6/node_modules/@smithy/smithy-client/dist-types/resolve-path.d.ts","../../node_modules/.pnpm/@smithy+smithy-client@4.4.6/node_modules/@smithy/smithy-client/dist-types/ser-utils.d.ts","../../node_modules/.pnpm/@smithy+smithy-client@4.4.6/node_modules/@smithy/smithy-client/dist-types/serde-json.d.ts","../../node_modules/.pnpm/@smithy+core@3.7.0/node_modules/@smithy/core/dist-types/submodules/serde/copydocumentwithtransform.d.ts","../../node_modules/.pnpm/@smithy+core@3.7.0/node_modules/@smithy/core/dist-types/submodules/serde/date-utils.d.ts","../../node_modules/.pnpm/@smithy+core@3.7.0/node_modules/@smithy/core/dist-types/submodules/serde/lazy-json.d.ts","../../node_modules/.pnpm/@smithy+core@3.7.0/node_modules/@smithy/core/dist-types/submodules/serde/parse-utils.d.ts","../../node_modules/.pnpm/@smithy+core@3.7.0/node_modules/@smithy/core/dist-types/submodules/serde/quote-header.d.ts","../../node_modules/.pnpm/@smithy+core@3.7.0/node_modules/@smithy/core/dist-types/submodules/serde/split-every.d.ts","../../node_modules/.pnpm/@smithy+core@3.7.0/node_modules/@smithy/core/dist-types/submodules/serde/split-header.d.ts","../../node_modules/.pnpm/@smithy+core@3.7.0/node_modules/@smithy/core/dist-types/submodules/serde/value/numericvalue.d.ts","../../node_modules/.pnpm/@smithy+core@3.7.0/node_modules/@smithy/core/dist-types/submodules/serde/index.d.ts","../../node_modules/.pnpm/@smithy+core@3.7.0/node_modules/@smithy/core/serde.d.ts","../../node_modules/.pnpm/@smithy+smithy-client@4.4.6/node_modules/@smithy/smithy-client/dist-types/index.d.ts","../../node_modules/.pnpm/@aws-sdk+core@3.844.0/node_modules/@aws-sdk/core/dist-types/submodules/client/emitwarningifunsupportedversion.d.ts","../../node_modules/.pnpm/@aws-sdk+core@3.844.0/node_modules/@aws-sdk/core/dist-types/submodules/client/setcredentialfeature.d.ts","../../node_modules/.pnpm/@aws-sdk+core@3.844.0/node_modules/@aws-sdk/core/dist-types/submodules/client/setfeature.d.ts","../../node_modules/.pnpm/@aws-sdk+core@3.844.0/node_modules/@aws-sdk/core/dist-types/submodules/client/settokenfeature.d.ts","../../node_modules/.pnpm/@aws-sdk+core@3.844.0/node_modules/@aws-sdk/core/dist-types/submodules/client/index.d.ts","../../node_modules/.pnpm/@aws-sdk+core@3.844.0/node_modules/@aws-sdk/core/dist-types/submodules/httpauthschemes/aws_sdk/resolveawssdksigv4aconfig.d.ts","../../node_modules/.pnpm/@aws-sdk+core@3.844.0/node_modules/@aws-sdk/core/dist-types/submodules/httpauthschemes/aws_sdk/awssdksigv4signer.d.ts","../../node_modules/.pnpm/@aws-sdk+core@3.844.0/node_modules/@aws-sdk/core/dist-types/submodules/httpauthschemes/aws_sdk/awssdksigv4asigner.d.ts","../../node_modules/.pnpm/@aws-sdk+core@3.844.0/node_modules/@aws-sdk/core/dist-types/submodules/httpauthschemes/aws_sdk/node_auth_scheme_preference_options.d.ts","../../node_modules/.pnpm/@aws-sdk+core@3.844.0/node_modules/@aws-sdk/core/dist-types/submodules/httpauthschemes/aws_sdk/resolveawssdksigv4config.d.ts","../../node_modules/.pnpm/@aws-sdk+core@3.844.0/node_modules/@aws-sdk/core/dist-types/submodules/httpauthschemes/aws_sdk/index.d.ts","../../node_modules/.pnpm/@aws-sdk+core@3.844.0/node_modules/@aws-sdk/core/dist-types/submodules/httpauthschemes/utils/getbearertokenenvkey.d.ts","../../node_modules/.pnpm/@aws-sdk+core@3.844.0/node_modules/@aws-sdk/core/dist-types/submodules/httpauthschemes/index.d.ts","../../node_modules/.pnpm/@aws-sdk+core@3.844.0/node_modules/@aws-sdk/core/dist-types/submodules/protocols/coercing-serializers.d.ts","../../node_modules/.pnpm/@aws-sdk+core@3.844.0/node_modules/@aws-sdk/core/dist-types/submodules/protocols/configurableserdecontext.d.ts","../../node_modules/.pnpm/@aws-sdk+core@3.844.0/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/jsonshapedeserializer.d.ts","../../node_modules/.pnpm/@aws-sdk+core@3.844.0/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/jsonshapeserializer.d.ts","../../node_modules/.pnpm/@aws-sdk+core@3.844.0/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/jsoncodec.d.ts","../../node_modules/.pnpm/@aws-sdk+core@3.844.0/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/awsjsonrpcprotocol.d.ts","../../node_modules/.pnpm/@aws-sdk+core@3.844.0/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/awsjson1_0protocol.d.ts","../../node_modules/.pnpm/@aws-sdk+core@3.844.0/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/awsjson1_1protocol.d.ts","../../node_modules/.pnpm/@aws-sdk+core@3.844.0/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/awsrestjsonprotocol.d.ts","../../node_modules/.pnpm/@aws-sdk+core@3.844.0/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/awsexpectunion.d.ts","../../node_modules/.pnpm/@aws-sdk+core@3.844.0/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/parsejsonbody.d.ts","../../node_modules/.pnpm/@aws-sdk+core@3.844.0/node_modules/@aws-sdk/core/dist-types/submodules/protocols/xml/xmlshapeserializer.d.ts","../../node_modules/.pnpm/@aws-sdk+core@3.844.0/node_modules/@aws-sdk/core/dist-types/submodules/protocols/xml/xmlcodec.d.ts","../../node_modules/.pnpm/@aws-sdk+core@3.844.0/node_modules/@aws-sdk/core/dist-types/submodules/protocols/xml/xmlshapedeserializer.d.ts","../../node_modules/.pnpm/@aws-sdk+core@3.844.0/node_modules/@aws-sdk/core/dist-types/submodules/protocols/query/queryserializersettings.d.ts","../../node_modules/.pnpm/@aws-sdk+core@3.844.0/node_modules/@aws-sdk/core/dist-types/submodules/protocols/query/queryshapeserializer.d.ts","../../node_modules/.pnpm/@aws-sdk+core@3.844.0/node_modules/@aws-sdk/core/dist-types/submodules/protocols/query/awsqueryprotocol.d.ts","../../node_modules/.pnpm/@aws-sdk+core@3.844.0/node_modules/@aws-sdk/core/dist-types/submodules/protocols/query/awsec2queryprotocol.d.ts","../../node_modules/.pnpm/@aws-sdk+core@3.844.0/node_modules/@aws-sdk/core/dist-types/submodules/protocols/xml/awsrestxmlprotocol.d.ts","../../node_modules/.pnpm/@aws-sdk+core@3.844.0/node_modules/@aws-sdk/core/dist-types/submodules/protocols/xml/parsexmlbody.d.ts","../../node_modules/.pnpm/@aws-sdk+core@3.844.0/node_modules/@aws-sdk/core/dist-types/submodules/protocols/index.d.ts","../../node_modules/.pnpm/@aws-sdk+core@3.844.0/node_modules/@aws-sdk/core/dist-types/index.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/endpoint/endpointparameters.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/auth/httpauthschemeprovider.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/models/s3serviceexception.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/models/models_0.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/abortmultipartuploadcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/completemultipartuploadcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/copyobjectcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/createbucketcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/createbucketmetadatatableconfigurationcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/createmultipartuploadcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/createsessioncommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/deletebucketanalyticsconfigurationcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/deletebucketcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/deletebucketcorscommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/deletebucketencryptioncommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/deletebucketintelligenttieringconfigurationcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/deletebucketinventoryconfigurationcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/deletebucketlifecyclecommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/deletebucketmetadatatableconfigurationcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/deletebucketmetricsconfigurationcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/deletebucketownershipcontrolscommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/deletebucketpolicycommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/deletebucketreplicationcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/deletebuckettaggingcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/deletebucketwebsitecommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/deleteobjectcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/deleteobjectscommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/deleteobjecttaggingcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/deletepublicaccessblockcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/getbucketaccelerateconfigurationcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/getbucketaclcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/getbucketanalyticsconfigurationcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/getbucketcorscommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/getbucketencryptioncommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/getbucketintelligenttieringconfigurationcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/getbucketinventoryconfigurationcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/getbucketlifecycleconfigurationcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/getbucketlocationcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/getbucketloggingcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/getbucketmetadatatableconfigurationcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/getbucketmetricsconfigurationcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/getbucketnotificationconfigurationcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/getbucketownershipcontrolscommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/getbucketpolicycommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/getbucketpolicystatuscommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/getbucketreplicationcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/getbucketrequestpaymentcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/getbuckettaggingcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/getbucketversioningcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/getbucketwebsitecommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/getobjectaclcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/getobjectattributescommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/getobjectcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/getobjectlegalholdcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/getobjectlockconfigurationcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/getobjectretentioncommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/getobjecttaggingcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/getobjecttorrentcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/getpublicaccessblockcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/headbucketcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/headobjectcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/listbucketanalyticsconfigurationscommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/listbucketintelligenttieringconfigurationscommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/listbucketinventoryconfigurationscommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/listbucketmetricsconfigurationscommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/listbucketscommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/listdirectorybucketscommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/listmultipartuploadscommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/listobjectscommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/listobjectsv2command.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/listobjectversionscommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/listpartscommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/putbucketaccelerateconfigurationcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/putbucketaclcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/putbucketanalyticsconfigurationcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/models/models_1.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/putbucketcorscommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/putbucketencryptioncommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/putbucketintelligenttieringconfigurationcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/putbucketinventoryconfigurationcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/putbucketlifecycleconfigurationcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/putbucketloggingcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/putbucketmetricsconfigurationcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/putbucketnotificationconfigurationcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/putbucketownershipcontrolscommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/putbucketpolicycommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/putbucketreplicationcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/putbucketrequestpaymentcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/putbuckettaggingcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/putbucketversioningcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/putbucketwebsitecommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/putobjectaclcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/putobjectcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/putobjectlegalholdcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/putobjectlockconfigurationcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/putobjectretentioncommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/putobjecttaggingcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/putpublicaccessblockcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/renameobjectcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/restoreobjectcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/selectobjectcontentcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/uploadpartcommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/uploadpartcopycommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/writegetobjectresponsecommand.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/auth/httpauthextensionconfiguration.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/extensionconfiguration.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/runtimeextensions.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/s3client.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/s3.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/commands/index.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/pagination/interfaces.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/pagination/listbucketspaginator.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/pagination/listdirectorybucketspaginator.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/pagination/listobjectsv2paginator.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/pagination/listpartspaginator.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/pagination/index.d.ts","../../node_modules/.pnpm/@smithy+util-waiter@4.0.6/node_modules/@smithy/util-waiter/dist-types/waiter.d.ts","../../node_modules/.pnpm/@smithy+util-waiter@4.0.6/node_modules/@smithy/util-waiter/dist-types/createwaiter.d.ts","../../node_modules/.pnpm/@smithy+util-waiter@4.0.6/node_modules/@smithy/util-waiter/dist-types/index.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/waiters/waitforbucketexists.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/waiters/waitforbucketnotexists.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/waiters/waitforobjectexists.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/waiters/waitforobjectnotexists.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/waiters/index.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/models/index.d.ts","../../node_modules/.pnpm/@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/client-s3/dist-types/index.d.ts","../../node_modules/.pnpm/@aws-sdk+lib-storage@3.844.0_@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/lib-storage/dist-types/types.d.ts","../../node_modules/.pnpm/@aws-sdk+lib-storage@3.844.0_@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/lib-storage/dist-types/upload.d.ts","../../node_modules/.pnpm/@aws-sdk+lib-storage@3.844.0_@aws-sdk+client-s3@3.844.0/node_modules/@aws-sdk/lib-storage/dist-types/index.d.ts","./src/services/storage/s3storageprovider.ts","./src/services/storageservice.ts","../../node_modules/.pnpm/meilisearch@0.51.0/node_modules/meilisearch/dist/types/types/experimental-features.d.ts","../../node_modules/.pnpm/meilisearch@0.51.0/node_modules/meilisearch/dist/types/types/types.d.ts","../../node_modules/.pnpm/meilisearch@0.51.0/node_modules/meilisearch/dist/types/types/shared.d.ts","../../node_modules/.pnpm/meilisearch@0.51.0/node_modules/meilisearch/dist/types/types/task_and_batch.d.ts","../../node_modules/.pnpm/meilisearch@0.51.0/node_modules/meilisearch/dist/types/types/token.d.ts","../../node_modules/.pnpm/meilisearch@0.51.0/node_modules/meilisearch/dist/types/types/index.d.ts","../../node_modules/.pnpm/meilisearch@0.51.0/node_modules/meilisearch/dist/types/errors/meilisearch-error.d.ts","../../node_modules/.pnpm/meilisearch@0.51.0/node_modules/meilisearch/dist/types/errors/meilisearch-api-error.d.ts","../../node_modules/.pnpm/meilisearch@0.51.0/node_modules/meilisearch/dist/types/errors/meilisearch-request-error.d.ts","../../node_modules/.pnpm/meilisearch@0.51.0/node_modules/meilisearch/dist/types/errors/meilisearch-request-timeout-error.d.ts","../../node_modules/.pnpm/meilisearch@0.51.0/node_modules/meilisearch/dist/types/errors/meilisearch-task-timeout-error.d.ts","../../node_modules/.pnpm/meilisearch@0.51.0/node_modules/meilisearch/dist/types/errors/index.d.ts","../../node_modules/.pnpm/meilisearch@0.51.0/node_modules/meilisearch/dist/types/http-requests.d.ts","../../node_modules/.pnpm/meilisearch@0.51.0/node_modules/meilisearch/dist/types/task.d.ts","../../node_modules/.pnpm/meilisearch@0.51.0/node_modules/meilisearch/dist/types/indexes.d.ts","../../node_modules/.pnpm/meilisearch@0.51.0/node_modules/meilisearch/dist/types/batch.d.ts","../../node_modules/.pnpm/meilisearch@0.51.0/node_modules/meilisearch/dist/types/meilisearch.d.ts","../../node_modules/.pnpm/meilisearch@0.51.0/node_modules/meilisearch/dist/types/index.d.ts","./src/services/searchservice.ts","../../node_modules/.pnpm/pdf2json@3.1.6/node_modules/pdf2json/pdfparser.d.ts","../../node_modules/.pnpm/mammoth@1.9.1/node_modules/mammoth/lib/index.d.ts","../../node_modules/.pnpm/xlsx@0.18.5/node_modules/xlsx/types/index.d.ts","./src/helpers/textextractor.ts","./src/services/databaseservice.ts","./src/helpers/streamtobuffer.ts","./src/services/indexingservice.ts","./src/services/ingestionservice.ts","./src/api/controllers/ingestion.controller.ts","./src/services/archivedemailservice.ts","./src/api/controllers/archived-email.controller.ts","./src/api/controllers/storage.controller.ts","./src/api/controllers/search.controller.ts","./src/api/middleware/requireauth.ts","./src/api/routes/auth.routes.ts","./src/api/routes/ingestion.routes.ts","./src/api/routes/archived-email.routes.ts","./src/api/routes/storage.routes.ts","./src/api/routes/search.routes.ts","./src/services/dashboardservice.ts","./src/api/controllers/dashboard.controller.ts","./src/api/routes/dashboard.routes.ts","./src/api/routes/test.routes.ts","./src/services/userservice.ts","./src/index.ts","../../node_modules/.pnpm/drizzle-orm@0.44.2_pg@8.16.3_postgres@3.4.7_sqlite3@5.1.7/node_modules/drizzle-orm/postgres-js/migrator.d.ts","./src/database/migrate.ts","./src/jobs/processors/continuous-sync.processor.ts","./src/jobs/processors/index-email.processor.ts","./src/jobs/processors/initial-import.processor.ts","./src/jobs/processors/process-mailbox.processor.ts","./src/jobs/processors/schedule-continuous-sync.processor.ts","../../node_modules/.pnpm/deepmerge-ts@7.1.5/node_modules/deepmerge-ts/dist/index.d.cts","./src/jobs/processors/sync-cycle-finished.processor.ts","./src/jobs/schedulers/sync-scheduler.ts","./src/workers/indexing.worker.ts","./src/workers/ingestion.worker.ts"],"fileIdsList":[[87,132,1957,2047,2220],[87,132,1957,2047,2218,2219,2326],[87,132,1957,2047,2092,2183,2222,2326],[87,132,2223,2224,2225,2226,2227,2228,2229,2230,2231,2232,2233,2234,2235,2236,2237,2238,2239,2240,2241,2242,2243,2244,2245,2246,2247,2248,2249,2250,2251,2252,2253,2254,2255,2256,2257,2258,2259,2260,2261,2262,2263,2264,2265,2266,2267,2268,2269,2270,2271,2272,2273,2274,2275,2276,2277,2278,2279,2280,2281,2282,2283,2284,2285,2286,2287,2288,2289,2290,2291,2292,2293,2295,2296,2297,2298,2299,2300,2301,2302,2303,2304,2305,2306,2307,2308,2309,2310,2311,2312,2313,2314,2315,2316,2317,2318,2319,2320,2321,2322],[87,132,1957,2047,2092,2183,2294,2326],[87,132,1957,2047],[87,132,1957,2027,2047,2057,2323],[87,132,2219,2221,2324,2325,2326,2327,2328,2334,2342,2343],[87,132,2222,2294],[87,132,1957,2047,2183,2221],[87,132,1957,2047,2183,2221,2222],[87,132,2183],[87,132,2329,2330,2331,2332,2333],[87,132,1957,2047,2326],[87,132,1957,2047,2284,2329],[87,132,1957,2047,2285,2329],[87,132,1957,2047,2288,2329],[87,132,1957,2047,2290,2329],[87,132,2324],[87,132,1957,2047,2223,2224,2225,2226,2227,2228,2229,2230,2231,2232,2233,2234,2235,2236,2237,2238,2239,2240,2241,2242,2243,2244,2245,2246,2247,2248,2249,2250,2251,2252,2253,2254,2255,2256,2257,2258,2259,2260,2261,2262,2263,2264,2265,2266,2267,2268,2269,2270,2271,2272,2273,2274,2275,2276,2277,2278,2279,2280,2281,2282,2283,2284,2285,2286,2287,2288,2289,2290,2291,2292,2293,2295,2296,2297,2298,2299,2300,2301,2302,2303,2304,2305,2306,2307,2308,2309,2310,2311,2312,2313,2314,2315,2316,2317,2318,2319,2320,2321,2322,2326],[87,132,164,1957,1982,1983,2027,2047,2057,2063,2066,2081,2083,2092,2109,2183,2219,2220,2223,2224,2225,2226,2227,2228,2229,2230,2231,2232,2233,2234,2235,2236,2237,2238,2239,2240,2241,2242,2243,2244,2245,2246,2247,2248,2249,2250,2251,2252,2253,2254,2255,2256,2257,2258,2259,2260,2261,2262,2263,2264,2265,2266,2267,2268,2269,2270,2271,2272,2273,2274,2275,2276,2277,2278,2279,2280,2281,2282,2283,2284,2285,2286,2287,2288,2289,2290,2291,2292,2293,2295,2296,2297,2298,2299,2300,2301,2302,2303,2304,2305,2306,2307,2308,2309,2310,2311,2312,2313,2314,2315,2316,2317,2318,2319,2320,2321,2322,2325],[87,132,2338,2339,2340,2341],[87,132,2278,2326,2337],[87,132,2279,2326,2337],[87,132,2188,2196,2217],[87,132],[87,132,2184,2185,2186,2187],[87,132,2027],[87,132,1957,2047,2190],[87,132,1957,2047,2189],[87,132,2189,2190,2191,2192,2193],[87,132,1971],[87,132,1957,1971,2047],[87,132,1957,2027,2044,2047],[87,132,2194,2195],[87,132,2197,2199,2200,2201,2202,2203,2204,2205,2206,2207,2208,2209,2210,2213,2214,2215,2216],[87,132,2202],[87,132,1957,2047,2151,2201],[87,132,1957,2047,2198,2199,2200],[87,132,1957,2047,2198,2201],[87,132,2213],[87,132,1901,1957,2047,2151,2210,2212],[87,132,1957,2047,2198,2211],[87,132,1957,2047,2139,2151,2209],[87,132,1957,2047,2198,2208,2210],[87,132,1957,2047,2198,2209],[87,132,2345,2346],[87,132,1957,2047,2344],[87,132,144,2344,2345],[87,132,1957,1972,2047],[87,132,1957,1976,2047],[87,132,1957,1976,1977,1978,1979,2047],[87,132,1972,1973,1974,1975,1977,1980,1981],[87,132,1971,1972],[87,132,1984,1985,1986,1987,2059,2060,2061,2062],[87,132,1957,1985,2047],[87,132,2029],[87,132,2028],[87,132,2027,2028,2030,2031],[87,132,1957,2047,2057],[87,132,1957,2027,2028,2031,2047],[87,132,2028,2029,2030,2031,2032,2045,2046,2047,2058],[87,132,2027,2028],[87,132,1957,2047,2059],[87,132,1957,2047,2060],[87,132,2064,2065],[87,132,1957,2027,2047,2064],[87,132,1957,2001,2002,2047],[87,132,1995],[87,132,1957,1997,2047],[87,132,1995,1996,1998,1999,2000],[87,132,1988,1989,1990,1991,1992,1993,1994,1997,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026],[87,132,2001,2002],[87,132,1606],[87,132,1608,1609,1610,1612,1613,1615,1619,1621,1635,1638,1644,1653],[87,132,1612,1615,1621,1635,1653,1654],[87,132,1613,1616,1618,1620],[87,132,1617],[87,132,1619],[87,132,1614],[87,132,182,1628,1644,1666,1706,1707],[87,132,1615,1621,1623,1624,1625,1626,1627,1628,1629,1630,1631,1632,1635,1648,1649,1650,1652,1653],[87,132,1614,1622],[87,132,1606,1608,1615,1628,1649,1654],[87,132,1623,1624,1625,1626,1650],[87,132,1622],[87,132,1623,1624,1625,1626,1627,1628,1629,1630,1631,1632,1650,1652],[87,132,1641],[87,132,1640],[87,132,1609,1614,1619,1622,1623,1624,1625,1626,1631],[87,132,1614,1623,1624,1625,1626,1628,1629,1630,1631,1650,1651],[87,132,1635,1644,1664,1665,1666,1667,1668],[87,132,1611,1612,1615,1635,1636,1639,1644,1648,1649,1654,1661,1662,1663],[87,132,1635,1644,1664,1666,1670,1671],[87,132,1614,1635,1644,1664,1666,1671],[87,132,1612,1615,1621,1636,1639,1640,1642,1643,1649,1654],[87,132,1647,1648],[87,132,1615,1635,1649],[87,132,1646],[87,132,1683],[87,132,1684,1689],[87,132,1684,1691],[87,132,1684,1693],[87,132,1684,1685],[87,132,1684],[87,132,1633,1634,1635,1646,1647,1699,1700,1701,1702],[87,132,1606,1607,1608,1610,1611,1612,1613,1614,1615,1616,1617,1618,1621,1622,1623,1624,1625,1626,1627,1628,1629,1630,1631,1632,1636,1637,1639,1644,1645,1648,1649,1650,1651,1652,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672,1673,1674,1675,1676,1677,1678,1679,1680,1681,1682,1684,1686,1687,1688,1690,1692,1694,1695,1696,1697],[87,132,1640,1641,1642,1643,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714],[87,132,1698,1703,1715],[87,132,1644],[87,132,1611],[87,132,1614,1647,1648],[87,132,1611,1636,1648,1661,1662],[87,132,1615,1635,1644,1645,1654,1658,1668,1677],[87,132,1614,1632,1644,1645,1647],[87,132,1648,1663],[87,132,1614,1628,1645,1648],[87,132,1617,1643,1648],[87,132,1645,1648,1711],[87,132,1628,1645],[87,132,1648],[87,132,1628,1648],[87,132,1645],[87,132,1614,1635,1639,1644,1645,1674],[87,132,1628],[87,132,1661],[87,132,1606,1615,1627,1635,1636,1640,1642,1648,1649,1650,1654,1661,1666,1668,1680],[87,132,1633,1634],[87,132,1615,1633,1634,1635,1644],[87,132,1633,1634,1635],[87,132,1614,1629,1636,1637,1638],[87,132,1610],[87,132,1643],[87,132,1615,1635],[87,132,1649],[87,132,1645,1658],[87,132,1478],[87,132,1480,1481,1482,1484,1485,1487,1491,1493,1507,1510,1516,1525],[87,132,1484,1487,1493,1507,1525,1526],[87,132,1485,1488,1490,1492],[87,132,1489],[87,132,1491],[87,132,1486],[87,132,182,1500,1516,1538,1573,1574],[87,132,1487,1493,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1507,1520,1521,1522,1524,1525],[87,132,1486,1494],[87,132,1478,1480,1487,1500,1521,1526],[87,132,1495,1496,1497,1498,1522],[87,132,1494],[87,132,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1522,1524],[87,132,1513],[87,132,1512],[87,132,1481,1486,1491,1494,1495,1496,1497,1498,1503],[87,132,1486,1495,1496,1497,1498,1500,1501,1502,1503,1522,1523],[87,132,1507,1516,1536,1537,1538,1539,1540],[87,132,1483,1484,1487,1507,1508,1511,1516,1520,1521,1526,1533,1534,1535],[87,132,1507,1516,1536,1538,1542,1543],[87,132,1486,1507,1516,1536,1538,1543],[87,132,1484,1487,1493,1508,1511,1512,1514,1515,1521,1526],[87,132,1519,1520],[87,132,1518],[87,132,1555],[87,132,1556,1561],[87,132,1556,1563],[87,132,1556,1565],[87,132,1556,1557],[87,132,1556],[87,132,1478,1479,1480,1482,1483,1484,1485,1486,1487,1488,1489,1490,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1508,1509,1511,1516,1517,1520,1521,1522,1523,1524,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1546,1547,1548,1549,1550,1551,1552,1553,1554,1556,1558,1559,1560,1562,1564,1566,1567,1568,1569],[87,132,1512,1513,1514,1515,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581],[87,132,1570,1582],[87,132,1516],[87,132,1483],[87,132,1486,1519,1520],[87,132,1483,1508,1520,1533,1534],[87,132,1487,1507,1516,1517,1526,1530,1540,1549],[87,132,1486,1504,1516,1517,1519],[87,132,1520,1535],[87,132,1486,1500,1517,1520],[87,132,1489,1515,1520],[87,132,1517,1520,1578],[87,132,1500,1517],[87,132,1520],[87,132,1500,1520],[87,132,1517],[87,132,1486,1507,1511,1516,1517,1546],[87,132,1500],[87,132,1478,1487,1499,1507,1508,1512,1514,1520,1521,1522,1526,1533,1538,1540,1552],[87,132,1505,1506],[87,132,1486,1501,1508,1509,1510],[87,132,1482],[87,132,1515],[87,132,1487,1507],[87,132,1521],[87,132,1517,1530],[87,132,1583,1604,1605],[87,132,1583],[87,132,1583,1584],[87,132,1583,1584,1594,1595],[87,132,1583,1588,1589,1591,1592,1593,1594,1596,1722,1723,1724],[87,132,1723],[87,132,1583,1722],[87,132,1583,1601,1602,1603,1722,1725],[87,132,1583,1588,1589,1591,1592,1593,1596,1601,1602],[87,132,1583,1588,1589,1590,1591,1592,1593,1596,1598,1599],[87,132,1583,1720,1722,1731],[87,132,1583,1590,1592,1598,1599,1600,1722,1725],[87,132,147,149,182,1583,1721],[87,132,1720,1722],[87,132,1583,1584,1587,1588,1589,1590,1591,1592,1593,1595,1596,1597,1598,1599,1600,1601,1602,1603,1604,1605,1720,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735],[87,132,1585,1586],[87,132,182,1583,1597],[87,132,147,182,1716,1717],[87,132,147,182,1716],[87,132,1716,1717],[87,132,1718,1719],[87,132,1770,1774,1777],[87,132,1741,1776],[87,132,1743,1769,1770,1772,1773],[87,132,1745,1746],[87,132,1740],[87,132,1775],[87,132,1741,1742,1746],[87,132,1742,1744],[87,132,1771],[87,132,1737,1738,1739,1740,1741,1742,1743,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780],[87,132,1742,1776],[87,132,1741,1745,1746],[87,132,1745,1746,1758],[87,132,1745],[87,132,1743],[87,132,1741,1746],[87,132,1740,1741,1743],[87,132,1743,1757],[87,132,1742,1743],[87,132,1743,1745],[87,132,1745,1746,1751],[87,132,1745,1746,1749],[87,132,1760,1763],[87,132,1760],[87,132,1760,1761,1762,1781],[87,132,1761,1763,1781],[87,132,1742,1743,1781],[87,132,2067,2068,2069,2070],[87,132,1957,2047,2069],[87,132,2071,2074,2080],[87,132,2072,2073],[87,132,2075],[87,132,1957,2047,2077,2078],[87,132,2077,2078,2079],[87,132,2076],[87,132,1957,2047,2122],[87,132,1957,2047,2057,2139,2140],[87,132,2123,2124,2141,2142,2143,2144,2145,2146,2147,2148,2149],[87,132,1957,2047,2140],[87,132,1957,2047,2139],[87,132,1957,2047,2147],[87,132,2125,2127,2128,2129,2130,2131,2132,2133,2134,2135,2136,2137],[87,132,1957,2047,2126],[87,132,1957,2047,2132],[87,132,1957,2047,2128],[87,132,1957,2047,2133],[87,132,2173,2174,2175,2176,2177,2178,2179,2180],[87,132,2150],[87,132,2138],[87,132,2181],[87,132,2082],[87,132,1957,2047,2084,2085],[87,132,2086,2087],[87,132,2084,2085,2088,2089,2090,2091],[87,132,1957,2047,2100,2102],[87,132,2102,2103,2104,2105,2106,2107,2108],[87,132,1957,2047,2104],[87,132,1957,2047,2101],[87,132,1957,1958,1968,1969,2047],[87,132,1957,1967,2047],[87,132,1958,1968,1969,1970],[87,132,2050],[87,132,2051],[87,132,1957,2047,2053],[87,132,1957,2047,2048,2049],[87,132,2048,2049,2050,2052,2053,2054,2055,2056],[87,132,1959,1960,1961,1962,1963,1964,1965,1966],[87,132,1957,1963,2047],[87,132,2033,2034,2035,2036,2037,2038,2039,2040,2041,2042,2043],[87,132,1957,2033,2047],[87,132,2151],[87,132,1957,2047,2092],[87,132,2110],[87,132,1957,2047,2161,2162],[87,132,2163],[87,132,1957,2047,2110,2152,2153,2154,2155,2156,2157,2158,2159,2160,2164,2165,2166,2167,2168,2169,2170,2171,2172,2182],[87,132,1891],[87,132,1890],[87,132,1894,1903,1904,1905],[87,132,1903,1906],[87,132,1894,1901],[87,132,1894,1906],[87,132,1892,1893,1904,1905,1906,1907],[87,132,164,1910],[87,132,1912],[87,132,1895,1896,1902,1903],[87,132,1895,1903],[87,132,1915,1917,1918],[87,132,1915,1916],[87,132,1920],[87,132,1892],[87,132,1897,1922],[87,132,1922],[87,132,1922,1923,1924,1925,1926],[87,132,1925],[87,132,1899],[87,132,1922,1923,1924],[87,132,1895,1901,1903],[87,132,1912,1913],[87,132,1928],[87,132,1928,1932],[87,132,1928,1929,1932,1933],[87,132,1902,1931],[87,132,1909],[87,132,1891,1900],[87,132,147,149,1899,1901],[87,132,1894],[87,132,1894,1936,1937,1938],[87,132,1891,1895,1896,1897,1898,1899,1900,1901,1902,1903,1908,1911,1912,1913,1914,1916,1919,1920,1921,1927,1930,1931,1934,1935,1939,1940,1941,1942,1943,1945,1946,1947,1948,1949,1950,1951,1953,1954,1955,1956],[87,132,1892,1896,1897,1898,1899,1902,1906],[87,132,1896,1914],[87,132,1930],[87,132,1895,1897,1903,1942,1943,1944],[87,132,1901,1902,1916,1945],[87,132,1895,1901],[87,132,1901,1920],[87,132,1902,1912,1913],[87,132,147,164,1910,1942],[87,132,1895,1896,1950,1951],[87,132,147,148,1896,1901,1914,1942,1949,1950,1951,1952],[87,132,1896,1914,1930],[87,132,1901],[87,132,1957,2047,2093],[87,132,1957,2047,2095],[87,132,2093],[87,132,2093,2094,2095,2096,2097,2098,2099],[87,132,164,1957,2047],[87,132,2113],[87,132,164,2112,2114],[87,132,164],[87,132,2111,2112,2115,2116,2117,2118,2119,2120,2121],[87,132,2335],[87,132,2335,2336],[87,132,147,182,190],[87,132,147,182],[87,132,144,147,182,184,185,186],[87,132,187,189,191],[87,132,164,182,1474],[87,129,132],[87,131,132],[132],[87,132,137,167],[87,132,133,138,144,145,152,164,175],[87,132,133,134,144,152],[87,132,135,176],[87,132,136,137,145,153],[87,132,137,164,172],[87,132,138,140,144,152],[87,131,132,139],[87,132,140,141],[87,132,142,144],[87,131,132,144],[87,132,144,145,146,164,175],[87,132,144,145,146,159,164,167],[87,127,132],[87,127,132,140,144,147,152,164,175],[87,132,144,145,147,148,152,164,172,175],[87,132,147,149,164,172,175],[85,86,87,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181],[87,132,144,150],[87,132,151,175],[87,132,140,144,152,164],[87,132,153],[87,132,154],[87,131,132,155],[87,129,130,131,132,133,134,135,136,137,138,139,140,141,142,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181],[87,132,157],[87,132,158],[87,132,144,159,160],[87,132,159,161,176,178],[87,132,144,164,165,167],[87,132,166,167],[87,132,164,165],[87,132,167],[87,132,168],[87,129,132,164,169],[87,132,144,170,171],[87,132,170,171],[87,132,137,152,164,172],[87,132,173],[87,132,152,174],[87,132,147,158,175],[87,132,137,176],[87,132,164,177],[87,132,151,178],[87,132,179],[87,132,144,146,155,164,167,175,177,178,180],[87,132,164,181],[87,132,145,164,182,183],[87,132,147,182,184,188],[87,132,194],[87,132,1840,1865],[87,132,1865,1867],[87,132,133,144,180,182,1865],[87,132,1870,1871,1872,1873,1874],[87,132,144,182,1795,1817,1820,1821,1865],[87,132,1787,1795,1818,1819,1820,1821,1828,1866,1867,1868,1869,1875,1876,1877,1878,1879,1880,1881,1882,1884],[87,132,1795,1820,1828,1840,1865],[87,132,1818,1819,1840,1865],[87,132,144,182,1795,1818,1820,1821,1827,1840,1865],[87,132,1795,1828,1865],[87,132,1795,1828,1840,1865],[87,132,1820,1828,1840,1865],[87,132,1795,1820,1840,1865,1877,1879,1880],[87,132,144,182,1865],[87,132,1820,1868],[87,132,182,1817,1840,1865],[87,132,175,182,1795,1820,1828,1840,1865,1877,1880,1883],[87,132,1822,1823,1824,1825,1826],[87,132,1827,1840,1865,1885,1886],[87,132,1840],[87,132,1790,1836,1842,1843],[87,132,1824],[87,132,144,182,1817],[87,132,1840,1849],[87,132,1788,1789,1790,1791,1836,1841,1842,1843,1844,1845,1846,1847,1848,1849,1850,1851,1852,1853,1854,1855,1856,1857,1858,1859,1860,1861,1862,1863,1864],[87,132,1788,1840],[87,132,1788,1789,1790,1840],[87,132,1789,1822],[87,132,1841,1844,1847,1848],[87,132,1817],[87,132,1835],[87,132,1860],[87,132,133,180,182],[87,132,1827],[87,132,1820,1841,1843,1848,1849,1853,1856,1862],[87,132,1791],[87,132,1792,1793,1794,1829,1830,1831,1832,1833,1837,1838,1839],[87,132,1865],[87,132,1831],[87,132,1794],[87,132,1828],[87,132,1836],[87,132,144,182,1817,1818,1827,1840,1865,1883],[87,132,1834],[87,132,175,182],[87,132,239,242,246,292,526],[87,132,239,291,530],[87,132,531],[87,132,239,247,526],[87,132,239,246,247,316,371,438,490,524,526],[87,132,239,242,246,247,525],[87,132,239],[87,132,285,290,312],[87,132,239,255,285],[87,132,259,260,261,262,263,264,265,266,267,268,270,271,272,273,274,275,276,277,278,288],[87,132,239,258,287,525,526],[87,132,239,287,525,526],[87,132,239,246,247,280,285,286,525,526],[87,132,239,246,247,285,287,525,526],[87,132,239,287,525],[87,132,239,285,287,525,526],[87,132,258,259,260,261,262,263,264,265,266,267,268,270,271,272,273,274,275,276,277,278,287,288],[87,132,239,257,287,525],[87,132,239,269,287,525,526],[87,132,239,269,285,287,525,526],[87,132,239,244,246,247,252,285,289,290,292,294,297,298,299,301,307,308,312,531],[87,132,239,246,247,285,289,292,307,311,312],[87,132,239,285,289],[87,132,256,257,280,281,282,283,284,285,286,289,299,300,301,307,308,310,311,313,314,315],[87,132,239,246,285,289],[87,132,239,246,281,285],[87,132,239,246,285,301],[87,132,239,244,245,246,285,295,296,301,308,312],[87,132,302,303,304,305,306,309,312],[87,132,239,242,244,245,246,252,280,285,287,295,296,301,303,308,309,312],[87,132,239,244,246,252,289,299,306,308,312],[87,132,239,246,247,285,292,295,296,301,308],[87,132,239,246,293,295,296],[87,132,239,246,295,296,301,308,311],[87,132,239,244,245,246,247,252,285,289,290,291,295,296,299,301,308,312],[87,132,242,243,244,245,246,247,252,285,289,290,301,306,311],[87,132,239,242,244,245,246,247,285,287,290,295,296,301,308,312,526],[87,132,239,246,257,285],[87,132,239,247,255,291,292,293,300,308,312,531],[87,132,244,245,246],[87,132,239,242,256,279,280,282,283,284,286,287,525],[87,132,244,246,256,280,282,283,284,285,286,289,290,311,316,525,526],[87,132,239,246],[87,132,239,245,246,247,252,287,290,309,310,525],[87,132,239,240,242,243,244,247,255,292,295,525,526,527,528,529],[87,132,346,354,367],[87,132,239,246,346],[87,132,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,337,338,339,340,341,349],[87,132,239,348,525,526],[87,132,239,247,348,525,526],[87,132,239,246,247,346,347,525,526],[87,132,239,246,247,346,348,525,526],[87,132,239,247,346,348,525,526],[87,132,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,337,338,339,340,341,348,349],[87,132,239,328,348,525,526],[87,132,239,247,336,525,526],[87,132,239,244,246,247,292,346,353,354,359,360,361,362,364,367,531],[87,132,239,246,247,292,346,348,351,352,357,358,364,367],[87,132,239,346,350],[87,132,317,343,344,345,346,347,350,353,359,361,363,364,365,366,368,369,370],[87,132,239,246,346,350],[87,132,239,246,346,354,364],[87,132,239,244,246,247,295,346,348,359,364,367],[87,132,352,355,356,357,358,367],[87,132,239,242,246,252,291,295,296,346,348,356,357,359,364,367],[87,132,239,244,353,355,359,367],[87,132,239,246,247,292,295,346,359,364],[87,132,239,244,245,246,247,252,291,295,343,346,350,353,354,359,364,367],[87,132,242,243,244,245,246,247,252,346,350,354,355,364,366],[87,132,239,244,246,247,291,295,346,348,359,364,367,526],[87,132,239,346,366],[87,132,239,246,247,291,292,359,363,367,531],[87,132,244,245,246,252,356],[87,132,239,242,317,342,343,344,345,347,348,525],[87,132,244,317,343,344,345,346,347,354,355,366,371,530],[87,132,239,245,246,252,350,354,356,365,525],[87,132,242,246,526],[87,132,413,419,432],[87,132,239,255,413],[87,132,373,374,375,376,377,379,380,381,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,416],[87,132,239,383,415,525,526],[87,132,239,415,525,526],[87,132,239,247,415,525,526],[87,132,239,246,247,408,413,414,525,526],[87,132,239,246,247,413,415,525,526],[87,132,239,415,525],[87,132,239,247,378,415,525,526],[87,132,239,247,413,415,525,526],[87,132,373,374,375,376,377,379,380,381,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,415,416,417],[87,132,239,382,415,525],[87,132,239,385,415,525,526],[87,132,239,413,415,525,526],[87,132,239,378,385,413,415,525,526],[87,132,239,247,378,413,415,525,526],[87,132,239,244,246,247,292,413,418,419,420,424,425,427,428,431,432,531,532,533,534],[87,132,239,246,247,292,351,413,418,420,427,431,432],[87,132,239,413,418],[87,132,372,382,408,409,410,411,412,413,414,418,420,425,427,428,430,431,433,434,435,437,535],[87,132,239,246,413,418],[87,132,239,246,409,413],[87,132,239,246,247,413,420],[87,132,239,244,245,246,252,291,295,296,413,420,428,432],[87,132,421,422,423,424,426,429,432],[87,132,239,242,244,245,246,252,291,295,296,408,413,415,420,422,428,429,432],[87,132,239,244,246,418,425,426,428,432],[87,132,239,246,247,292,295,296,413,420,428],[87,132,239,246,295,296,420,428,431],[87,132,239,244,245,246,247,252,291,295,296,413,418,419,420,425,428,432],[87,132,242,243,244,245,246,247,252,413,418,419,420,426,431],[87,132,239,242,244,245,246,247,252,291,295,296,413,415,419,420,428,432,526],[87,132,239,246,247,382,413,417,431],[87,132,239,247,255,291,292,293,428,432,531,535],[87,132,244,245,246,252,429],[87,132,239,242,372,407,408,410,411,412,414,415,525],[87,132,244,246,372,408,410,411,412,413,414,418,419,431,438,525,526],[87,132,436],[87,132,239,245,246,247,252,415,419,429,430,525],[87,132,238,239,247,535,536],[87,132,536,537],[87,132,351,537],[87,132,238,239,240,246,247,291,292,420,428,432,438,476],[87,132,239,255],[87,132,242,243,244,246,247,525,526],[87,132,239,242,246,247,250,526,530],[87,132,525],[87,132,530],[87,132,468,486],[87,132,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,458,459,460,461,462,463,470],[87,132,239,469,525,526],[87,132,239,247,469,525,526],[87,132,239,247,468,525,526],[87,132,239,246,247,468,469,525,526],[87,132,239,247,468,469,525,526],[87,132,239,247,255,469,525,526],[87,132,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,458,459,460,461,462,463,469,470],[87,132,239,449,469,525,526],[87,132,239,247,457,525,526],[87,132,239,244,246,292,468,475,478,479,480,483,485,486,531],[87,132,239,246,247,292,351,468,469,472,473,474,485,486],[87,132,465,466,467,468,471,475,480,483,484,485,487,488,489],[87,132,239,246,468,471],[87,132,239,468,471],[87,132,239,246,468,485],[87,132,239,244,246,247,295,468,469,475,485,486],[87,132,472,473,474,481,482,486],[87,132,239,242,246,295,296,468,469,473,475,485,486],[87,132,239,244,475,480,481,486],[87,132,239,244,245,246,247,252,291,295,468,471,475,480,485,486],[87,132,242,243,244,245,246,247,252,468,471,481,485],[87,132,239,244,246,247,295,468,469,475,485,486,526],[87,132,239,468],[87,132,239,246,247,291,292,475,484,486,531],[87,132,244,245,246,252,482],[87,132,239,242,464,465,466,467,469,525],[87,132,244,246,465,466,467,468,490,525,526],[87,132,239,240,247,292,475,477,484,531],[87,132,239,240,246,247,291,292,475,476,485,486],[87,132,246,526],[87,132,248,249],[87,132,251,253],[87,132,246,252,526],[87,132,246,250,254],[87,132,239,241,242,244,245,247,526],[87,132,496,517,522],[87,132,239,246,517],[87,132,492,512,513,514,515,520],[87,132,239,247,519,525,526],[87,132,239,246,247,517,518,525,526],[87,132,239,246,247,517,519,525,526],[87,132,492,512,513,514,515,519,520],[87,132,239,247,511,517,519,525,526],[87,132,239,519,525,526],[87,132,239,247,517,519,525,526],[87,132,239,244,246,247,292,496,497,498,499,502,507,508,517,522,531],[87,132,239,246,247,292,351,502,507,517,521,522],[87,132,239,517,521],[87,132,491,493,494,495,499,500,502,507,508,510,511,517,518,521,523],[87,132,239,246,517,521],[87,132,239,246,502,510,517],[87,132,239,244,245,246,247,295,296,502,508,517,519,522],[87,132,503,504,505,506,509,522],[87,132,239,244,245,246,247,252,295,296,493,502,504,508,509,517,519,522],[87,132,239,244,499,506,508,522],[87,132,239,246,247,292,295,296,502,508,517],[87,132,239,246,293,295,296,508],[87,132,239,244,245,246,247,252,291,295,296,496,499,502,508,517,521,522],[87,132,242,243,244,245,246,247,252,496,502,506,510,517,521],[87,132,239,244,245,246,247,295,296,496,502,508,517,519,522,526],[87,132,239,246,291,292,293,295,500,501,508,522,531],[87,132,244,245,246,252,509],[87,132,239,242,491,493,494,495,516,518,519,525],[87,132,239,517,519],[87,132,244,246,491,493,494,495,496,510,517,518,524],[87,132,239,245,246,252,496,509,519,525],[87,132,239,243,246,247,526],[87,132,240,242,246,526,531],[87,127,132,147,164],[87,132,147,554,555],[87,132,554,555,556],[87,132,554],[87,132,583],[87,132,144,557,558,561,563],[87,132,561,573,575],[87,132,557],[87,132,557,558,561,564],[87,132,557,566],[87,132,557,558,564],[87,132,557,558,564,573],[87,132,573,574,576,579],[87,132,164,557,558,564,567,568,570,571,572,573,580,581,590],[87,132,561,573],[87,132,566],[87,132,564,566,567,582],[87,132,164,558],[87,132,164,558,566,567,569],[87,132,158,557,558,560,564,565],[87,132,557,564],[87,132,573,578],[87,132,577],[87,132,164,558,566],[87,132,559],[87,132,557,558,564,565,566,567,568,570,571,572,573,574,575,576,579,580,582,584,585,586,587,588,589,590],[87,132,562],[87,132,144],[87,132,557,590,592,593],[87,132,600],[87,132,593,594],[87,132,590],[87,132,592,594],[87,132,591,594],[87,132,148,175,557],[87,132,557,590,591,592,593,594,595,596,597,598,599],[87,132,557,593],[87,132,600,601],[87,132,164,600],[87,132,600,603],[87,132,600,605,606],[87,132,600,608,609],[87,132,600,611],[87,132,600,613],[87,132,600,615,616,617],[87,132,600,619],[87,132,600,621],[87,132,600,623,624,625],[87,132,600,627,628],[87,132,600,630,631],[87,132,600,633],[87,132,600,635,636],[87,132,600,638],[87,132,600,640,641],[87,132,600,643],[87,132,600,645],[87,132,600,647,648,649],[87,132,600,651],[87,132,600,653,654],[87,132,600,656,657],[87,132,600,659,660],[87,132,600,662],[87,132,600,664],[87,132,600,666],[87,132,600,668],[87,132,600,670,671,672,673],[87,132,600,675,676],[87,132,600,678],[87,132,600,680],[87,132,600,682],[87,132,600,684],[87,132,600,686,687,688],[87,132,600,690,691],[87,132,600,693],[87,132,600,695],[87,132,600,697],[87,132,600,699,700,701],[87,132,600,703,704],[87,132,600,706,707,708],[87,132,600,710],[87,132,600,712,713,714],[87,132,600,716],[87,132,600,718,719],[87,132,600,721],[87,132,600,723],[87,132,600,725,726],[87,132,600,728],[87,132,600,730],[87,132,600,732,733,734],[87,132,600,736,737],[87,132,600,739,740],[87,132,600,742,743],[87,132,600,745],[87,132,600,747,748],[87,132,600,750],[87,132,600,752],[87,132,600,754],[87,132,600,756],[87,132,600,758],[87,132,600,760],[87,132,600,762],[87,132,600,764],[87,132,600,766],[87,132,600,768],[87,132,600,770],[87,132,600,772,773,774,775,776,777],[87,132,600,779,780],[87,132,600,782,783,784,785,786],[87,132,600,788],[87,132,600,790,791],[87,132,600,793],[87,132,600,795],[87,132,600,797],[87,132,600,799,800,801,802,803],[87,132,600,805,806],[87,132,600,808],[87,132,600,810],[87,132,600,812],[87,132,600,814],[87,132,600,816,817,818,819,820],[87,132,600,822,823],[87,132,600,825],[87,132,600,827,828],[87,132,600,830,831],[87,132,600,833,834,835],[87,132,600,837,838,839],[87,132,600,841,842],[87,132,600,844,845,846],[87,132,600,848],[87,132,600,850,851],[87,132,600,853],[87,132,600,855],[87,132,600,857,858],[87,132,600,860,861,862],[87,132,600,864,865],[87,132,600,867],[87,132,600,869],[87,132,600,871],[87,132,600,873,874],[87,132,600,876],[87,132,600,878],[87,132,600,880,881],[87,132,600,883],[87,132,600,885],[87,132,600,887,888],[87,132,600,890],[87,132,600,892],[87,132,600,894,895],[87,132,600,897,898],[87,132,600,900,901,902],[87,132,600,904,905],[87,132,600,907,908,909],[87,132,600,911],[87,132,600,913,914,915,916],[87,132,600,918,919,920,921],[87,132,600,923],[87,132,600,925],[87,132,600,927,928,929],[87,132,600,931,932,933,934,935,936,937],[87,132,600,939],[87,132,600,941,942,943,944],[87,132,600,946],[87,132,600,948,949,950],[87,132,600,952,953,954],[87,132,600,956],[87,132,600,958,959,960],[87,132,600,962],[87,132,600,964,965],[87,132,600,967],[87,132,600,969,970],[87,132,600,972],[87,132,600,974,975],[87,132,600,977],[87,132,600,979],[87,132,600,981],[87,132,600,983,984],[87,132,600,986],[87,132,600,988,989],[87,132,600,991,992],[87,132,600,994,995],[87,132,600,997],[87,132,600,999,1000],[87,132,600,1002],[87,132,600,1004,1005],[87,132,600,1007,1008,1009],[87,132,600,1011],[87,132,600,1013],[87,132,600,1015,1016,1017],[87,132,600,1019],[87,132,600,1021],[87,132,600,1023],[87,132,600,1025],[87,132,600,1029,1030],[87,132,600,1027],[87,132,600,1032,1033,1034],[87,132,600,1036],[87,132,600,1038,1039,1040,1041,1042,1043,1044,1045],[87,132,600,1047],[87,132,600,1049],[87,132,600,1051,1052],[87,132,600,1054],[87,132,600,1056],[87,132,600,1058,1059],[87,132,600,1061],[87,132,600,1063,1064,1065],[87,132,600,1067],[87,132,600,1069,1070],[87,132,600,1072,1073],[87,132,600,1075,1076],[87,132,600,1078],[87,132,602,604,607,610,612,614,618,620,622,626,629,632,634,637,639,642,644,646,650,652,655,658,661,663,665,667,669,674,677,679,681,683,685,689,692,694,696,698,702,705,709,711,715,717,720,722,724,727,729,731,735,738,741,744,746,749,751,753,755,757,759,761,763,765,767,769,771,778,781,787,789,792,794,796,798,804,807,809,811,813,815,821,824,826,829,832,836,840,843,847,849,852,854,856,859,863,866,868,870,872,875,877,879,882,884,886,889,891,893,896,899,903,906,910,912,917,922,924,926,930,938,940,945,947,951,955,957,961,963,966,968,971,973,976,978,980,982,985,987,990,993,996,998,1001,1003,1006,1010,1012,1014,1018,1020,1022,1024,1026,1028,1031,1035,1037,1046,1048,1050,1053,1055,1057,1060,1062,1066,1068,1071,1074,1077,1079,1081,1083,1088,1090,1092,1094,1099,1101,1103,1105,1107,1109,1111,1115,1117,1119,1121,1123,1126,1140,1147,1150,1152,1155,1157,1159,1161,1163,1165,1167,1169,1171,1174,1177,1180,1183,1186,1189,1191,1193,1196,1198,1200,1206,1210,1212,1215,1217,1219,1221,1223,1225,1228,1230,1232,1234,1237,1242,1245,1247,1249,1252,1254,1258,1262,1264,1266,1268,1271,1273,1275,1278,1281,1285,1287,1289,1293,1298,1301,1303,1306,1308,1310,1312,1314,1318,1324,1326,1329,1332,1335,1337,1340,1343,1345,1347,1349,1351,1353,1355,1357,1361,1363,1366,1369,1371,1373,1375,1378,1381,1383,1385,1388,1390,1395,1398,1401,1405,1407,1409,1411,1414,1416,1422,1426,1429,1431,1434,1436,1438,1440,1442,1446,1449,1452,1454,1456,1459,1461,1464,1466],[87,132,600,1080],[87,132,600,1082],[87,132,600,1084,1085,1086,1087],[87,132,600,1089],[87,132,600,1091],[87,132,600,1093],[87,132,600,1095,1096,1097,1098],[87,132,600,1100],[87,132,600,1102],[87,132,600,1104],[87,132,600,1106],[87,132,600,1108],[87,132,600,1110],[87,132,600,1112,1113,1114],[87,132,600,1116],[87,132,600,1118],[87,132,600,1120],[87,132,600,1122],[87,132,600,1124,1125],[87,132,600,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139],[87,132,600,1141,1142,1143,1144,1145,1146],[87,132,600,1148,1149],[87,132,600,1151],[87,132,600,1153,1154],[87,132,600,1156],[87,132,600,1158],[87,132,600,1160],[87,132,600,1162],[87,132,600,1164],[87,132,600,1166],[87,132,600,1168],[87,132,600,1170],[87,132,600,1172,1173],[87,132,600,1175,1176],[87,132,600,1178,1179],[87,132,600,1181,1182],[87,132,600,1184,1185],[87,132,600,1187,1188],[87,132,600,1190],[87,132,600,1192],[87,132,600,1194,1195],[87,132,600,1197],[87,132,600,1199],[87,132,600,1201,1202,1203,1204,1205],[87,132,600,1207,1208,1209],[87,132,600,1211],[87,132,600,1213,1214],[87,132,600,1216],[87,132,600,1218],[87,132,600,1220],[87,132,600,1222],[87,132,600,1224],[87,132,600,1226,1227],[87,132,600,1229],[87,132,600,1231],[87,132,600,1233],[87,132,600,1235,1236],[87,132,600,1238,1239,1240,1241],[87,132,600,1243,1244],[87,132,600,1246],[87,132,600,1248],[87,132,600,1250,1251],[87,132,600,1253],[87,132,600,1255,1256,1257],[87,132,600,1259,1260,1261],[87,132,600,1263],[87,132,600,1265],[87,132,600,1267],[87,132,600,1269,1270],[87,132,600,1272],[87,132,600,1274],[87,132,600,1276,1277],[87,132,600,1279,1280],[87,132,600,1282,1283,1284],[87,132,600,1286],[87,132,600,1288],[87,132,600,1290,1291,1292],[87,132,600,1294,1295,1296,1297],[87,132,600,1299,1300],[87,132,600,1302],[87,132,600,1304,1305],[87,132,600,1307],[87,132,600,1309],[87,132,600,1311],[87,132,600,1313],[87,132,600,1315,1316,1317],[87,132,600,1319,1320,1321,1322,1323],[87,132,600,1325],[87,132,600,1327,1328],[87,132,600,1330,1331],[87,132,600,1333,1334],[87,132,600,1336],[87,132,600,1338,1339],[87,132,600,1341,1342],[87,132,600,1344],[87,132,600,1346],[87,132,600,1348],[87,132,600,1350],[87,132,600,1352],[87,132,600,1354],[87,132,600,1356],[87,132,600,1358,1359,1360],[87,132,600,1362],[87,132,600,1364,1365],[87,132,600,1367,1368],[87,132,600,1370],[87,132,600,1372],[87,132,600,1374],[87,132,600,1376,1377],[87,132,600,1379,1380],[87,132,600,1382],[87,132,600,1384],[87,132,600,1386,1387],[87,132,600,1389],[87,132,600,1391,1392,1393,1394],[87,132,600,1396,1397],[87,132,600,1399,1400],[87,132,600,1402,1403,1404],[87,132,600,1406],[87,132,600,1408],[87,132,600,1410],[87,132,600,1412,1413],[87,132,600,1415],[87,132,600,1417,1418,1419,1420,1421],[87,132,600,1423,1424,1425],[87,132,600,1427,1428],[87,132,600,1430],[87,132,600,1432,1433],[87,132,600,1435],[87,132,600,1437],[87,132,600,1439],[87,132,600,1441],[87,132,600,1443,1444,1445],[87,132,600,1447,1448],[87,132,600,1450,1451],[87,132,600,1453],[87,132,600,1455],[87,132,600,1457,1458],[87,132,600,1460],[87,132,600,1462,1463],[87,132,600,1465],[87,132,600,1467],[87,132,590,600,601,603,605,606,608,609,611,613,615,616,617,619,621,623,624,625,627,628,630,631,633,635,636,638,640,641,643,645,647,648,649,651,653,654,656,657,659,660,662,664,666,668,670,671,672,673,675,676,678,680,682,684,686,687,688,690,691,693,695,697,699,700,701,703,704,706,707,708,710,712,713,714,716,718,719,721,723,725,726,728,730,732,733,734,736,737,739,740,742,743,745,747,748,750,752,754,756,758,760,762,764,766,768,770,772,773,774,775,776,777,779,780,782,783,784,785,786,788,790,791,793,795,797,799,800,801,802,803,805,806,808,810,812,814,816,817,818,819,820,822,823,825,827,828,830,831,833,834,835,837,838,839,841,842,844,845,846,848,850,851,853,855,857,858,860,861,862,864,865,867,869,871,873,874,876,878,880,881,883,885,887,888,890,892,894,895,897,898,900,901,902,904,905,907,908,909,911,913,914,915,916,918,919,920,921,923,925,927,928,929,931,932,933,934,935,936,937,939,941,942,943,944,946,948,949,950,952,953,954,956,958,959,960,962,964,965,967,969,970,972,974,975,977,979,981,983,984,986,988,989,991,992,994,995,997,999,1000,1002,1004,1005,1007,1008,1009,1011,1013,1015,1016,1017,1019,1021,1023,1025,1027,1029,1030,1032,1033,1034,1036,1038,1039,1040,1041,1042,1043,1044,1045,1047,1049,1051,1052,1054,1056,1058,1059,1061,1063,1064,1065,1067,1069,1070,1072,1073,1075,1076,1078,1080,1082,1084,1085,1086,1087,1089,1091,1093,1095,1096,1097,1098,1100,1102,1104,1106,1108,1110,1112,1113,1114,1116,1118,1120,1122,1124,1125,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1141,1142,1143,1144,1145,1146,1148,1149,1151,1153,1154,1156,1158,1160,1162,1164,1166,1168,1170,1172,1173,1175,1176,1178,1179,1181,1182,1184,1185,1187,1188,1190,1192,1194,1195,1197,1199,1201,1202,1203,1204,1205,1207,1208,1209,1211,1213,1214,1216,1218,1220,1222,1224,1226,1227,1229,1231,1233,1235,1236,1238,1239,1240,1241,1243,1244,1246,1248,1250,1251,1253,1255,1256,1257,1259,1260,1261,1263,1265,1267,1269,1270,1272,1274,1276,1277,1279,1280,1282,1283,1284,1286,1288,1290,1291,1292,1294,1295,1296,1297,1299,1300,1302,1304,1305,1307,1309,1311,1313,1315,1316,1317,1319,1320,1321,1322,1323,1325,1327,1328,1330,1331,1333,1334,1336,1338,1339,1341,1342,1344,1346,1348,1350,1352,1354,1356,1358,1359,1360,1362,1364,1365,1367,1368,1370,1372,1374,1376,1377,1379,1380,1382,1384,1386,1387,1389,1391,1392,1393,1394,1396,1397,1399,1400,1402,1403,1404,1406,1408,1410,1412,1413,1415,1417,1418,1419,1420,1421,1423,1424,1425,1427,1428,1430,1432,1433,1435,1437,1439,1441,1443,1444,1445,1447,1448,1450,1451,1453,1455,1457,1458,1460,1462,1463,1465,1468],[87,132,144,164,172],[87,132,140,182,1801,1808,1809],[87,132,144,182,1796,1797,1798,1800,1801,1809,1810,1815],[87,132,140,182],[87,132,182,1796],[87,132,1796],[87,132,1802],[87,132,144,172,182,1796,1802,1804,1805,1810],[87,132,1804],[87,132,1808],[87,132,152,172,182,1796,1802],[87,132,144,182,1796,1812,1813],[87,132,1796,1797,1798,1799,1802,1806,1807,1808,1809,1810,1811,1815,1816],[87,132,1797,1801,1811,1815],[87,132,144,182,1796,1797,1798,1800,1801,1808,1811,1812,1814],[87,132,1801,1803,1806,1807],[87,132,164,182],[87,132,1797],[87,132,1799],[87,132,152,172,182],[87,132,1796,1797,1799],[87,132,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225],[87,132,196],[87,132,2355,2362],[87,132,2356,2357,2358,2359,2360],[87,132,2355,2356],[87,132,2356],[87,132,2355],[87,132,2355,2361,2364,2366],[87,132,2355,2362,2363],[87,132,2355,2362,2363,2364,2365],[87,132,2350,2351,2353,2354],[87,132,2351],[87,132,2351,2352],[87,132,2353],[87,132,144,145,164],[87,132,144,180,1470,1471],[87,132,144,182],[87,97,101,132,175],[87,97,132,164,175],[87,92,132],[87,94,97,132,175],[87,132,152,172],[87,132,182],[87,92,132,182],[87,94,97,132,152,175],[87,89,90,91,93,96,132,144,164,175],[87,97,105,132],[87,90,95,132],[87,97,121,122,132],[87,90,93,97,132,167,175,182],[87,97,132],[87,89,132],[87,92,93,94,95,96,97,98,99,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,122,123,124,125,126,132],[87,97,114,117,132,140],[87,97,105,106,107,132],[87,95,97,106,108,132],[87,96,132],[87,90,92,97,132],[87,97,101,106,108,132],[87,101,132],[87,95,97,100,132,175],[87,90,94,97,105,132],[87,97,114,132],[87,92,97,121,132,167,180,182],[87,132,192,2378],[87,132,192,236],[87,132,192,2388],[87,132,192,235,2376],[87,132,192,2367,2368],[87,132,192,2349],[87,132,192,235,236,539],[87,132,192,236,2379,2382],[87,132,192,237],[87,132,192,236,2382,2389],[87,132,192,236,2377,2382],[87,132,192,236,2381,2382],[87,132,192,236,2380,2382],[87,132,192,1888],[87,132,539],[87,132,548,549,550,551],[87,132,1472],[87,132,235,539],[87,132,238,538,539,546],[87,132,193,238,538,2394],[87,132,540,541,542,543,544,545],[87,132,438,530,540],[87,132,438,530,541],[87,132,438],[87,132,438,530,544],[87,132,438,540],[87,132,2369,2370,2371],[87,132,192,193,236,237,2349,2368,2377,2379,2380,2381,2382,2383,2384,2385,2386,2387,2390,2391,2392],[87,132,235,1473,1786,1887,1888,2376],[87,132,1887,2349,2368,2373,2375],[87,132,235,1473,1786,1887,2349,2376],[87,132,530,546,547,1887,1888],[87,132,235,530,546,547,1473,1887,2376,2401],[87,132,551,1887],[87,132,1888],[87,132,164,235,530,546,547,2349],[87,132,195,226,235],[87,132,137,552],[87,132,235,530,546,2368,2373],[87,132,547],[87,132,235,1476,1783,1785],[87,132,235,530,546,1475,2349,2368,2372,2373,2374],[87,132,235,1469,1473,1475,1786],[87,132,235,1475,1784,1786],[87,132,235,1473,1475,1736,1781,1782,1786],[87,132,137,235,530,546,547,553,1473,1786,1888,2349,2368,2373,2375],[87,132,235,552,2367],[87,132,145,154,165,235],[87,132,164,235,2344,2347],[87,132,235,552,1889,2348],[87,132,195,235,236],[87,132,551,1887,2397],[87,132,551,1887,2396,2398,2399,2400,2402],[87,132,226,227],[87,132,227,228,229,230,231,232,233,234],[87,132,231]],"fileInfos":[{"version":"69684132aeb9b5642cbcd9e22dff7818ff0ee1aa831728af0ecf97d3364d5546","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"8fd575e12870e9944c7e1d62e1f5a73fcf23dd8d3a321f2a2c74c20d022283fe","impliedFormat":1},{"version":"8bf8b5e44e3c9c36f98e1007e8b7018c0f38d8adc07aecef42f5200114547c70","impliedFormat":1},{"version":"092c2bfe125ce69dbb1223c85d68d4d2397d7d8411867b5cc03cec902c233763","affectsGlobalScope":true,"impliedFormat":1},{"version":"07f073f19d67f74d732b1adea08e1dc66b1b58d77cb5b43931dee3d798a2fd53","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7a3c8b952931daebdfc7a2897c53c0a1c73624593fa070e46bd537e64dcd20a","affectsGlobalScope":true,"impliedFormat":1},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"936e80ad36a2ee83fc3caf008e7c4c5afe45b3cf3d5c24408f039c1d47bdc1df","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"fef8cfad2e2dc5f5b3d97a6f4f2e92848eb1b88e897bb7318cef0e2820bceaab","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"b5ce7a470bc3628408429040c4e3a53a27755022a32fd05e2cb694e7015386c7","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"87dc0f382502f5bbce5129bdc0aea21e19a3abbc19259e0b43ae038a9fc4e326","affectsGlobalScope":true,"impliedFormat":1},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ece9f17b3866cc077099c73f4983bddbcb1dc7ddb943227f1ec070f529dedd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c9319a09485199c1f7b0498f2988d6d2249793ef67edda49d1e584746be9032","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3a2a0cee0f03ffdde24d89660eba2685bfbdeae955a6c67e8c4c9fd28928eeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"60037901da1a425516449b9a20073aa03386cce92f7a1fd902d7602be3a7c2e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true,"impliedFormat":1},{"version":"22adec94ef7047a6c9d1af3cb96be87a335908bf9ef386ae9fd50eeb37f44c47","affectsGlobalScope":true,"impliedFormat":1},{"version":"4245fee526a7d1754529d19227ecbf3be066ff79ebb6a380d78e41648f2f224d","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"bde31fd423cd93b0eff97197a3f66df7c93e8c0c335cbeb113b7ff1ac35c23f4","impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0671b50bb99cc7ad46e9c68fa0e7f15ba4bc898b59c31a17ea4611fab5095da","affectsGlobalScope":true,"impliedFormat":1},{"version":"d802f0e6b5188646d307f070d83512e8eb94651858de8a82d1e47f60fb6da4e2","affectsGlobalScope":true,"impliedFormat":1},{"version":"ef18cbf1d8374576e3db03ff33c2c7499845972eb0c4adf87392949709c5e160","impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"487b694c3de27ddf4ad107d4007ad304d29effccf9800c8ae23c2093638d906a","impliedFormat":1},{"version":"e525f9e67f5ddba7b5548430211cae2479070b70ef1fd93550c96c10529457bd","impliedFormat":1},{"version":"ccf4552357ce3c159ef75f0f0114e80401702228f1898bdc9402214c9499e8c0","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"17fe9131bec653b07b0a1a8b99a830216e3e43fe0ea2605be318dc31777c8bbf","impliedFormat":1},{"version":"3c8e93af4d6ce21eb4c8d005ad6dc02e7b5e6781f429d52a35290210f495a674","impliedFormat":1},{"version":"2c9875466123715464539bfd69bcaccb8ff6f3e217809428e0d7bd6323416d01","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"2472ef4c28971272a897fdb85d4155df022e1f5d9a474a526b8fc2ef598af94e","impliedFormat":1},{"version":"6c8e442ba33b07892169a14f7757321e49ab0f1032d676d321a1fdab8a67d40c","impliedFormat":1},{"version":"b41767d372275c154c7ea6c9d5449d9a741b8ce080f640155cc88ba1763e35b3","impliedFormat":1},{"version":"1cd673d367293fc5cb31cd7bf03d598eb368e4f31f39cf2b908abbaf120ab85a","impliedFormat":1},{"version":"19851a6596401ca52d42117108d35e87230fc21593df5c4d3da7108526b6111c","impliedFormat":1},{"version":"3825bf209f1662dfd039010a27747b73d0ef379f79970b1d05601ec8e8a4249f","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"40bfc70953be2617dc71979c14e9e99c5e65c940a4f1c9759ddb90b0f8ff6b1a","impliedFormat":1},{"version":"da52342062e70c77213e45107921100ba9f9b3a30dd019444cf349e5fb3470c4","impliedFormat":1},{"version":"e9ace91946385d29192766bf783b8460c7dbcbfc63284aa3c9cae6de5155c8bc","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"561c60d8bfe0fec2c08827d09ff039eca0c1f9b50ef231025e5a549655ed0298","impliedFormat":1},{"version":"1e30c045732e7db8f7a82cf90b516ebe693d2f499ce2250a977ec0d12e44a529","impliedFormat":1},{"version":"84b736594d8760f43400202859cda55607663090a43445a078963031d47e25e7","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"54c3e2371e3d016469ad959697fd257e5621e16296fa67082c2575d0bf8eced0","impliedFormat":1},{"version":"beb8233b2c220cfa0feea31fbe9218d89fa02faa81ef744be8dce5acb89bb1fd","impliedFormat":1},{"version":"78b29846349d4dfdd88bd6650cc5d2baaa67f2e89dc8a80c8e26ef7995386583","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"e38d4fdf79e1eadd92ed7844c331dbaa40f29f21541cfee4e1acff4db09cda33","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"7c10a32ae6f3962672e6869ee2c794e8055d8225ef35c91c0228e354b4e5d2d3","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"99f569b42ea7e7c5fe404b2848c0893f3e1a56e0547c1cd0f74d5dbb9a9de27e","impliedFormat":1},{"version":"f4b4faedc57701ae727d78ba4a83e466a6e3bdcbe40efbf913b17e860642897c","affectsGlobalScope":true,"impliedFormat":1},{"version":"bbcfd9cd76d92c3ee70475270156755346c9086391e1b9cb643d072e0cf576b8","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"72c1f5e0a28e473026074817561d1bc9647909cf253c8d56c41d1df8d95b85f7","impliedFormat":1},{"version":"003ec918ec442c3a4db2c36dc0c9c766977ea1c8bcc1ca7c2085868727c3d3f6","affectsGlobalScope":true,"impliedFormat":1},{"version":"938f94db8400d0b479626b9006245a833d50ce8337f391085fad4af540279567","impliedFormat":1},{"version":"c4e8e8031808b158cfb5ac5c4b38d4a26659aec4b57b6a7e2ba0a141439c208c","impliedFormat":1},{"version":"2c91d8366ff2506296191c26fd97cc1990bab3ee22576275d28b654a21261a44","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"12fb9c13f24845000d7bd9660d11587e27ef967cbd64bd9df19ae3e6aa9b52d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"289e9894a4668c61b5ffed09e196c1f0c2f87ca81efcaebdf6357cfb198dac14","impliedFormat":1},{"version":"25a1105595236f09f5bce42398be9f9ededc8d538c258579ab662d509aa3b98e","impliedFormat":1},{"version":"5078cd62dbdf91ae8b1dc90b1384dec71a9c0932d62bdafb1a811d2a8e26bef2","impliedFormat":1},{"version":"a2e2bbde231b65c53c764c12313897ffdfb6c49183dd31823ee2405f2f7b5378","impliedFormat":1},{"version":"ad1cc0ed328f3f708771272021be61ab146b32ecf2b78f3224959ff1e2cd2a5c","impliedFormat":1},{"version":"71450bbc2d82821d24ca05699a533e72758964e9852062c53b30f31c36978ab8","affectsGlobalScope":true,"impliedFormat":1},{"version":"62f572306e0b173cc5dfc4c583471151f16ef3779cf27ab96922c92ec82a3bc8","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f32444438ecb1fa4519f6ec3977d69ce0e3acfa18b803e5cd725c204501f350","impliedFormat":1},{"version":"0ab3c844f1eb5a1d94c90edc346a25eb9d3943af7a7812f061bf2d627d8afac0","impliedFormat":1},{"version":"b0a84d9348601dbc217017c0721d6064c3b1af9b392663348ba146fdae0c7afd","impliedFormat":1},{"version":"161f09445a8b4ba07f62ae54b27054e4234e7957062e34c6362300726dabd315","impliedFormat":1},{"version":"77fced47f495f4ff29bb49c52c605c5e73cd9b47d50080133783032769a9d8a6","impliedFormat":1},{"version":"e6057f9e7b0c64d4527afeeada89f313f96a53291705f069a9193c18880578cb","impliedFormat":1},{"version":"34ecb9596317c44dab586118fb62c1565d3dad98d201cd77f3e6b0dde453339c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0f5cda0282e1d18198e2887387eb2f026372ebc4e11c4e4516fef8a19ee4d514","impliedFormat":1},{"version":"e99b0e71f07128fc32583e88ccd509a1aaa9524c290efb2f48c22f9bf8ba83b1","impliedFormat":1},{"version":"76957a6d92b94b9e2852cf527fea32ad2dc0ef50f67fe2b14bd027c9ceef2d86","impliedFormat":1},{"version":"237581f5ec4620a17e791d3bb79bad3af01e27a274dbee875ac9b0721a4fe97d","affectsGlobalScope":true,"impliedFormat":1},{"version":"a8a99a5e6ed33c4a951b67cc1fd5b64fd6ad719f5747845c165ca12f6c21ba16","affectsGlobalScope":true,"impliedFormat":1},{"version":"a58a15da4c5ba3df60c910a043281256fa52d36a0fcdef9b9100c646282e88dd","impliedFormat":1},{"version":"b36beffbf8acdc3ebc58c8bb4b75574b31a2169869c70fc03f82895b93950a12","impliedFormat":1},{"version":"de263f0089aefbfd73c89562fb7254a7468b1f33b61839aafc3f035d60766cb4","impliedFormat":1},{"version":"70b57b5529051497e9f6482b76d91c0dcbb103d9ead8a0549f5bab8f65e5d031","impliedFormat":1},{"version":"e6d81b1f7ab11dc1b1ad7ad29fcfad6904419b36baf55ed5e80df48d56ac3aff","impliedFormat":1},{"version":"1013eb2e2547ad8c100aca52ef9df8c3f209edee32bb387121bb3227f7c00088","impliedFormat":1},{"version":"b6b8e3736383a1d27e2592c484a940eeb37ec4808ba9e74dd57679b2453b5865","impliedFormat":1},{"version":"d6f36b683c59ac0d68a1d5ee906e578e2f5e9a285bca80ff95ce61cdc9ddcdeb","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"125d792ec6c0c0f657d758055c494301cc5fdb327d9d9d5960b3f129aff76093","impliedFormat":1},{"version":"12aad38de6f0594dc21efa78a2c1f67bf6a7ef5a389e05417fe9945284450908","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea713aa14a670b1ea0fbaaca4fd204e645f71ca7653a834a8ec07ee889c45de6","impliedFormat":1},{"version":"b338a6e6c1d456e65a6ea78da283e3077fe8edf7202ae10490abbba5b952b05e","impliedFormat":1},{"version":"2918b7c516051c30186a1055ebcdb3580522be7190f8a2fff4100ea714c7c366","affectsGlobalScope":true,"impliedFormat":1},{"version":"ae86f30d5d10e4f75ce8dcb6e1bd3a12ecec3d071a21e8f462c5c85c678efb41","impliedFormat":1},{"version":"982efeb2573605d4e6d5df4dc7e40846bda8b9e678e058fc99522ab6165c479e","impliedFormat":1},{"version":"e03460fe72b259f6d25ad029f085e4bedc3f90477da4401d8fbc1efa9793230e","impliedFormat":1},{"version":"4286a3a6619514fca656089aee160bb6f2e77f4dd53dc5a96b26a0b4fc778055","impliedFormat":1},{"version":"d67fc92a91171632fc74f413ce42ff1aa7fbcc5a85b127101f7ec446d2039a1f","affectsGlobalScope":true,"impliedFormat":1},{"version":"d40e4631100dbc067268bce96b07d7aff7f28a541b1bfb7ef791c64a696b3d33","affectsGlobalScope":true,"impliedFormat":1},{"version":"784490137935e1e38c49b9289110e74a1622baf8a8907888dcbe9e476d7c5e44","impliedFormat":1},{"version":"42180b657831d1b8fead051698618b31da623fb71ff37f002cb9d932cfa775f1","impliedFormat":1},{"version":"4f98d6fb4fe7cbeaa04635c6eaa119d966285d4d39f0eb55b2654187b0b27446","impliedFormat":1},{"version":"e4c653466d0497d87fa9ffd00e59a95f33bc1c1722c3f5c84dab2e950c18da70","affectsGlobalScope":true,"impliedFormat":1},{"version":"e6dcc3b933e864e91d4bea94274ad69854d5d2a1311a4b0e20408a57af19e95d","impliedFormat":1},{"version":"a51f786b9f3c297668f8f322a6c58f85d84948ef69ade32069d5d63ec917221c","impliedFormat":1},{"version":"d3f2d715f57df3f04bf7b16dde01dec10366f64fce44503c92b8f78f614c1769","impliedFormat":1},{"version":"b78cd10245a90e27e62d0558564f5d9a16576294eee724a59ae21b91f9269e4a","impliedFormat":1},{"version":"baac9896d29bcc55391d769e408ff400d61273d832dd500f21de766205255acb","impliedFormat":1},{"version":"2f5747b1508ccf83fad0c251ba1e5da2f5a30b78b09ffa1cfaf633045160afed","impliedFormat":1},{"version":"a8932b7a5ef936687cc5b2492b525e2ad5e7ed321becfea4a17d5a6c80f49e92","affectsGlobalScope":true,"impliedFormat":1},{"version":"b71c603a539078a5e3a039b20f2b0a0d1708967530cf97dec8850a9ca45baa2b","impliedFormat":1},{"version":"0e13570a7e86c6d83dd92e81758a930f63747483e2cd34ef36fcdb47d1f9726a","impliedFormat":1},{"version":"104c67f0da1bdf0d94865419247e20eded83ce7f9911a1aa75fc675c077ca66e","impliedFormat":1},{"version":"cc0d0b339f31ce0ab3b7a5b714d8e578ce698f1e13d7f8c60bfb766baeb1d35c","impliedFormat":1},{"version":"d26a79f97f25eb1c5fc36a8552e4decc7ad11104a016d31b1307c3afaf48feb1","impliedFormat":1},{"version":"3b41aa444e12a13b537f18024efbff44c42289c9c08a47f96139d0ee12b3a00a","impliedFormat":1},{"version":"07fcc9be98e12bd2f0f71a501a9bfbe2e53d38c50e8a5e84223fdd05bd8749c5","impliedFormat":1},{"version":"8c724ec27deda8f7ecdca0f22d9bb8c97a4507500ec645f49dea9c73184c2512","impliedFormat":1},{"version":"dc9e7909f3edca55a7da578ab1f2b473490cf1cea844fd05af2daee94e17e518","impliedFormat":99},{"version":"a380cd0a371b5b344c2f679a932593f02445571f9de0014bdf013dddf2a77376","impliedFormat":99},{"version":"dbbcd13911daafc1554acc17dad18ab92f91b5b8f084c6c4370cb8c60520c3b6","impliedFormat":99},{"version":"ab17464cd8391785c29509c629aa8477c8e86d4d3013f4c200b71ac574774ec2","impliedFormat":99},{"version":"d7f1043cbc447d09c8962c973d9f60e466c18e6bbaa470777901d9c2d357cfbe","impliedFormat":99},{"version":"e130a73d7e1e34953b1964c17c218fd14fccd1df6f15f111352b0d53291311bb","impliedFormat":99},{"version":"4ddecad872558e2b3df434ef0b01114d245e7a18a86afa6e7b5c68e75f9b8f76","impliedFormat":99},{"version":"a0ab7a82c3f844d4d4798f68f7bd6dc304e9ad6130631c90a09fb2636cb62756","impliedFormat":99},{"version":"270ceb915b1304c042b6799de28ff212cfa4baf06900d3a8bc4b79f62f00c8a7","impliedFormat":99},{"version":"1b3174ea6e3b4ae157c88eb28bf8e6d67f044edc9c552daf5488628fd8e5be97","impliedFormat":99},{"version":"1d1c0e6bda55b6fdcc247c4abd1ba2a36b50aac71bbf78770cbd172713c4e05f","impliedFormat":99},{"version":"d7d8a5f6a306b755dfa5a9b101cb800fd912b256222fb7d4629b5de416b4b8d5","impliedFormat":99},{"version":"5585ed538922e2e58655218652dcb262f08afa902f26f490cdec4967887ac31a","impliedFormat":99},{"version":"b46de7238d9d2243b27a21797e4772ba91465caae9c31f21dc43748dc9de9cd0","impliedFormat":99},{"version":"625fdbce788630c62f793cb6c80e0072ce0b8bf1d4d0a9922430671164371e0b","impliedFormat":99},{"version":"b6790300d245377671c085e76e9ef359b3cbba6821b913d6ce6b2739d00b9fb1","impliedFormat":99},{"version":"6beaff23ae0b12aa3b7672c7fd4e924f5088efa899b58fe83c7cc5675234ff14","impliedFormat":99},{"version":"a36c717362d06d76e7332d9c1d2744c2c5e4b4a5da6218ef7b4a299a62d23a6d","impliedFormat":99},{"version":"a61f8455fd21cec75a8288cd761f5bcc72441848841eb64aa09569e9d8929ff0","impliedFormat":99},{"version":"7539c82be2eb9b83ec335b11bb06dc35497f0b7dab8830b2c08b650d62707160","impliedFormat":99},{"version":"0eaa77f9ed4c3eb8fac011066c987b6faa7c70db95cfe9e3fb434573e095c4c8","impliedFormat":99},{"version":"466e7296272b827c55b53a7858502de733733558966e2e3a7cc78274e930210a","impliedFormat":99},{"version":"364a5c527037fdd7d494ab0a97f510d3ceda30b8a4bc598b490c135f959ff3c6","impliedFormat":99},{"version":"d26c255888cc20d5ab7397cc267ad81c8d7e97624c442a218afec00949e7316e","impliedFormat":99},{"version":"83d2dab980f2d1a2fe333f0001de8f42c831a438159d47b77c686ae405891b7f","impliedFormat":99},{"version":"ca369bcbdafc423d1a9dccd69de98044534900ff8236d2dd970b52438afb5355","impliedFormat":99},{"version":"5b90280e84e8eba347caaefc18210de3ce6ac176f5e82705a28e7f497dcc8689","impliedFormat":99},{"version":"6fc2d85e6d20a566b97001ee9a74dacc18d801bc9e9b735988119036db992932","impliedFormat":99},{"version":"d57bf30bf951ca5ce0119fcce3810bd03205377d78f08dfe6fca9d350ce73edc","impliedFormat":99},{"version":"e7878d8cd1fd0d0f1c55dcd8f5539f4c22e44993852f588dd194bd666b230727","impliedFormat":99},{"version":"638575c7a309a595c5ac3a65f03a643438fd81bf378aac93eadb84461cdd247c","impliedFormat":99},"4c60eadea5f3da0a00a59d1d46e3c9e106da50e89df04f75bd88e81c2d3cb42d","9033c48366f3826f3e362190c39da048e43e4fe22b27eb7b3f5550d47c41dfec","8bd99c6be3a52d47a10fa2241b0446fbd3f6a4ecb2694ccaceab39854bfc7092","f4dab491108e5772996f2e4fb909f964a3745bfb77fca4759cf2dfd5c7edac52","fc11adc025eb09fd73e7f16c7c8829b6af9ec3bc34b88c4e30041f8d7e39f123","0b4916ea558a245dc7e6b688d967f275f87d2d000e56132d5f303adae183fe76","2f6cbd9bfa908dfd07bbb0c7592a65992c49c6f4b7bd3a6abe0a33da0c6c55fb","1a3402d44e8d98436c0ba27ce108efbfb7a84dcccc83dbbf4a33391ae2d6ccd1","5284d608aa39a0c7bad17b914d22d4cd3b254ec1a1c4cbf56a17b50996e5e52f",{"version":"6199f8dff301b88d4f694ff338f81b7625135e19fb3af63e5409a6b6bab3eab4","signature":"55f14458b4132870fef12a88db0c5ef12284a812dc28617a527f8efe8c80ccce"},{"version":"996c6b4326eaf748deafb609c8509da2aeb819801106a879657281fa1158aec1","signature":"0563b620a5a582f99bf0df4d6f9312fa4cb49616d838679c533a280c67d8144d"},{"version":"12d19496f25ecd6afef2094be494b3b0ae12c02bd631901f6da760c7540a5ec1","impliedFormat":1},{"version":"c6fe327c538417b8dd5b9bb32abcd7911534b10da3a4514f3445cdb28cf3abf2","impliedFormat":99},{"version":"0065cdb7ac9f5b19921632de63f888ec2cc11ad57f7fc868f44bf0faad2fce3e","impliedFormat":99},{"version":"8c1adc3171d0287f3a26f4891a7d1834c89999573a9b444aa5ff519dcc43a2b7","impliedFormat":99},{"version":"27aee784c447854a4719f11058579e49f08faa70d06d8e30abe00f5e25538de6","impliedFormat":99},{"version":"fbc610f9dde70f0bbea39eefec2e31ca1d99f715e9c71fb118bd2306a832bcb5","impliedFormat":99},{"version":"a829052855dca3affb8e2ef0afa0f013b03fa9b55762348b1fba76d9c2741c99","impliedFormat":99},{"version":"1d61288b34b2dd2029b85bc70fabbb1da90c2a370396d5df5f620e62eb47ddbe","impliedFormat":99},{"version":"5a2cf4cd852a58131b320da62269b2143850920ce27e8fdec41fed5c2c54ec95","impliedFormat":99},{"version":"43552100e757fad5a9bb5dabc0ea24ba3b6f2632eb1a4be8915da39d65e83e1c","impliedFormat":99},{"version":"6a99940a8a76a1aa20ae6f2afd8e909e47e0b17df939e7cf5a585171480655ff","impliedFormat":99},{"version":"043195af0b52aadd10713870dd60369df0377ed153104b26e6bac1213b19f63e","impliedFormat":99},{"version":"ad17a36132569045ab97c8e5badf8febb556011a8ed7b2776ff823967d6d5aca","impliedFormat":99},{"version":"698d2b22251dbbfc0735e2d6ed350addead9ad031fac48b8bb316e0103d865db","impliedFormat":99},{"version":"7298d28b75c52e89c0b3e5681eac19e14480132cd30baaba5e5ca10211a740ef","impliedFormat":99},{"version":"ff10facf373a13d2864ff4de38c4892d74be27d9c6468dac49c08adabbf9b0eb","impliedFormat":99},{"version":"97b1cf4599cc3bc2e84b997aa1af60d91ca489d96bea0e20aaff0e52a5504b29","impliedFormat":99},{"version":"853dfbcd0999d3edc6be547d83dc0e0d75bf44530365b9583e75519d35984c35","impliedFormat":99},{"version":"9c80bed388d4ed47080423402db9cb1b35a31449045a83a0487f4dfde3d9d747","impliedFormat":99},{"version":"f29bc6a122a4a26c4e23289daae3aa845a18af10da90989cb8b51987e962b7be","impliedFormat":99},{"version":"3a1f39e098971c10633a064bd7a5dbdec464fcf3864300772763c16aa24457f9","impliedFormat":99},{"version":"20e614d6e045d687c3f7d707561b7655ad6177e859afc0c55649b7e346704c77","impliedFormat":99},{"version":"aa0ae1910ba709bc9db460bdc89a6a24d262be1fbea99451bedac8cbbc5fb0cd","impliedFormat":99},{"version":"161d113c2a8b8484de2916480c7ba505c81633d201200d12678f7f91b7a086f0","impliedFormat":99},{"version":"b998a57d4f43e32ac50a1a11f4505e1d7f71c3b87f155c140debe40df10386c8","impliedFormat":99},{"version":"5710e8ed9797ae0042e815eb8f87df2956cb1bf912939c9b98eeb58494a63c13","impliedFormat":99},{"version":"a6bb421dccfec767dbd3e99180b24c07c4a216c0fd549f54a3313f6ce3f9d2c7","impliedFormat":99},{"version":"3b6f1be46f573b1c1f3e6cd949890bfb96b40ff90b6f313e425a379c1c4d5d77","impliedFormat":99},{"version":"28a2c54d0a78d32c29f7279ca04dc6c7860c008579e4e3033938c0ed0201eb9a","impliedFormat":99},{"version":"c2714a402843287624210a47ebea2b1c8dd3ad1438f448633f6831e31eaf37b8","impliedFormat":99},{"version":"b89945ec6707415d739f3e76f2820982d4927dc6b681910b3c433b5ad261b817","impliedFormat":99},{"version":"a72d5822fb2a2c1ef985b30aed889f4c00342c90e12318762fccc550c6a599cf","impliedFormat":99},{"version":"c8616ab60eda93ca87fbb20aada1d6a6cdbcd2cb181a70a2d7728a3cb0613391","impliedFormat":99},{"version":"eeddfd3e0b09890822068de5248d38144f8328e74b5292847eb4e558d8aba8cb","impliedFormat":99},{"version":"d4dc0b6592543314c8549c71e35ad2ec4a57904662d905ff9585836bde1c855a","impliedFormat":99},{"version":"56e1687a174cd10912a35a4676af434bb213aafa5d4371040986c578afe644ab","impliedFormat":99},{"version":"470c280cc484340b97d0942e0c3aa312399eba3849ceb95312d0d7413bac7458","impliedFormat":99},{"version":"ae183f4a6300aad2be92cdbd4dd12d8bcd36eddf8dd1846f998c237235fe0c33","impliedFormat":99},{"version":"4b0eeffddaf51b967e95926a825a6ba1205b81b3a8fecddbe21eaf0e86bdee91","impliedFormat":99},{"version":"bf3ec0d42e33e487c359a989b30e1c9e90fa06de484dc4751e93fb34a9b5cf90","impliedFormat":99},{"version":"7b9656a61d83df1a46c38c2984dbf96dd057bf48f477ddf3f8990311ab98ec23","impliedFormat":99},{"version":"366b85ddb698f3a035e0caa68dc9fef39a85c4368c0810eaf937c3a3c63ac31e","impliedFormat":99},{"version":"d440ee730bc60a5c605903842e398863e7ecdb7a91fc32a9152f14061bf6cc17","impliedFormat":99},{"version":"a12c86c4a691608d19a75320946c80bbce38bb62c091dda32572aee7158edd38","impliedFormat":99},{"version":"3109cb3f8ab0308d2944c26742b6a8a02b4a4ffc23f479a81f0e945d6a6721dd","impliedFormat":99},{"version":"a2289c12a987f2a06f4cf049afde4fdc9455a4af37913445148865938c6eb613","impliedFormat":99},{"version":"55933c1450edcfaf166429425dbbad0a27c0ae8672d5ab5d427e46946a6f2f63","impliedFormat":99},{"version":"6c684fda6998db4112e82367c9e82e27996dc8086a10d58ac9b51d89770d5f9d","impliedFormat":99},{"version":"5c4b4dd983471fcaed17ad3241c98a1f880729f1ca579ddbcdae7e0bf04035df","impliedFormat":99},{"version":"9e430429c7e9e70071a836ac91a1bf6e6651f91d47d9f4baf0a92eefc6130818","impliedFormat":99},{"version":"b3db7f6d7ef72669dc83fa1ff7b90a2ec31d1d8f82778f2a00ef6d101f5247e5","impliedFormat":99},{"version":"354f61bd2a5acaf20462bc4d61048aa25f8fc0dd04dfe3d2f30bdbabbab54e7d","impliedFormat":99},{"version":"d51756340928e549f076c832d7bc2b4180385597b0b4daaa50e422bed53e1a72","impliedFormat":99},{"version":"32c6e3ef96f2bcbc1db7d7f891459241657633aa663cab6812fb28ade7c90608","impliedFormat":99},{"version":"ac2ea00eb8f73665842e57e729e14c6d3feabe9859dc5e87a1ed451b20b889e4","impliedFormat":99},{"version":"730cb342a128f5a8a036ffbd6dbc1135b623ce2100cefe1e1817bb8845bc7100","impliedFormat":99},{"version":"78e387f16df573a98dd51b3c86d023ddbd5bf68e510711a9fee8340e7ccc3703","impliedFormat":99},{"version":"e2381c64702025b4d57b005e94ed0b994b5592488d76f1e5f67f59d1860ebb70","impliedFormat":99},{"version":"d7dfcb039ff9cff38ccd48d2cc1ba95ca45c316670eddbcf81784e21b7128692","impliedFormat":99},{"version":"acaf0a60eb243938f7742df08bf5d52482fbea033fd27141ee3a6d878bbb0d3d","impliedFormat":99},{"version":"fb89aeecfc8eb28f5677c2c89bced74d13442b7f4ebd01ce2ce92127d1b36d69","impliedFormat":99},{"version":"9e91cb0a5bd7aefa2b94a2872828d6d2321df0ca44412e74d99e8b94e579b7d8","impliedFormat":99},{"version":"3e4f06b464ef1654b91be02777d1773ccc5d43b53c1c8b0a9794ec224cfe8928","impliedFormat":99},{"version":"192c1a207b44af476190ae66920636de5d56c33b57206bbc2421adc23f673e2e","impliedFormat":99},{"version":"e5aa35b3740170492e06e60989d35a222cfda2148507c650ea55753f726c9213","impliedFormat":99},{"version":"057aa42f6983120c35373aed62b219ffcbd7b476b2df08709139a9eb8dfeed26","impliedFormat":99},{"version":"95a0c46b4675d4d02de6a7c167738f1176b53b26ebec9ccfe8e5d9acb0dc7aee","impliedFormat":99},{"version":"94ad4d9745811c482ae3bad61e5b206e0904f77e0dacf783199193a3df9f6ce6","impliedFormat":99},{"version":"407dc18ecd25802296fade17be81d0d4f499ae75fe88ed132f94e7efdad269e2","impliedFormat":99},{"version":"77dabe31d44c48782c529d5c9acddc41f799bf9b424b259596131efc77355478","impliedFormat":99},{"version":"f6dfe21d867aa5e13bc53d536b69b66427f571707a01e7c3604dc51ded097313","impliedFormat":99},{"version":"4ecd02d0e4ccf7befb9c28802c6c208060e33291d56fd1868900ca295c399077","impliedFormat":99},{"version":"37ada75be4b3f6b888f538091020d81b2a0ad721dc42734f70f639fa4703a5c8","impliedFormat":99},{"version":"aa73ff0024d5434a3e87ea2824f6faece7aad7b9f6c22bd399268241ca051dc7","impliedFormat":99},{"version":"4c9fb50b0697756bab3e4095f28839cf5b55430a4744d2ebbaf850ec8dca54d8","impliedFormat":99},{"version":"782868b723c055c5612c4a243f72a78a8b3c0c3b707ae04954e36e8ab966df4c","impliedFormat":99},{"version":"3de9d9ad4876972e7599fc0b3bddb0fddb1923be75787480a599045a30f14292","impliedFormat":99},{"version":"0f4b3c05937bbdb9cf954722ddc97cd72624e3b810f6f2cf4be334adb1796ec1","impliedFormat":99},{"version":"9fc243c4c87d8560348501080341e923be2e70bf7b5e09a1b26c585d97ae8535","impliedFormat":99},{"version":"4f97089fe15655ae448c9d005bb9a87cc4e599b155edc9e115738c87aa788464","impliedFormat":99},{"version":"f948d562d0a8085f1bd17b50798d5032529a75c147f40adfeb4fd3e453368643","impliedFormat":99},{"version":"22929f9874783b059156ee3cfa864d6f718e1abf9c139f298a037ae0274186f6","impliedFormat":99},{"version":"c72a7c316459b2e872ca4a9aca36cc05d1354798cee10077c57ff34a34440ac2","impliedFormat":99},{"version":"3e5bbf8893b975875f5325ebf790ab1ab38a4173f295ffea2ed1f108d9b1512c","impliedFormat":99},{"version":"9e4a38448c1d26d4503cf408cc96f81b7440a3f0a95d2741df2459fe29807f67","impliedFormat":99},{"version":"84124d21216da35986f92d4d7d1192ca54620baeca32b267d6d7f08b5db00df9","impliedFormat":99},{"version":"efba354914a2dc1056a55510188b6ced85ead18c5d10cc8a767b534e2db4b11b","impliedFormat":99},{"version":"25f5bf39f0785a2976d0af5ac02f5c18ca759cde62bc48dd1d0d99871d9ad86f","impliedFormat":99},{"version":"e711fa7718a2060058ff98ac6bff494c1615b9d42c4f03aa9c8270bc34927164","impliedFormat":99},{"version":"e324b2143fa6e32fac37ed9021b88815e181b045a9f17dbb555b72d55e47cdc1","impliedFormat":99},{"version":"3e90ea83e3803a3da248229e3027a01428c3b3de0f3029f86c121dc76c5cdcc2","impliedFormat":99},{"version":"9368c3e26559a30ad3431d461f3e1b9060ab1d59413f9576e37e19aaf2458041","impliedFormat":99},{"version":"915e5bb8e0e5e65f1dc5f5f36b53872ffcdcaef53903e1c5db7338ea0d57587a","impliedFormat":99},{"version":"92cf986f065f18496f7fcb4f135bff8692588c5973e6c270d523191ef13525ad","impliedFormat":99},{"version":"652f2bd447e7135918bc14c74b964e5fe48f0ba10ff05e96ed325c45ac2e65fb","impliedFormat":99},{"version":"cc2156d0ec0f00ff121ce1a91e23bd2f35b5ab310129ad9f920ddaf1a18c2a4d","impliedFormat":99},{"version":"7b371e5d6e44e49b5c4ff88312ae00e11ab798cfcdd629dee13edc97f32133d8","impliedFormat":99},{"version":"e9166dab89930e97bb2ce6fc18bcc328de1287b1d6e42c2349a0f136fc1f73e6","impliedFormat":99},{"version":"6dc0813d9091dfaed7d19df0c5a079ee72e0248ce5e412562c5633913900be25","impliedFormat":99},{"version":"e704c601079399b3f2ec4acdfc4c761f5fe42f533feaaab7d2c1c1528248ca3e","impliedFormat":99},{"version":"49104d28daa32b15716179e61d76b343635c40763d75fe11369f681a8346b976","impliedFormat":99},{"version":"04cd3418706b1851d2c1d394644775626529c23e615a829b8abfe26ec0ee3aef","impliedFormat":99},{"version":"21e459e9485fc48f21708d946c102e4aaa4a87b4c9ad178e1c5667e3ff6bbc59","impliedFormat":99},{"version":"97e685ac984fc93dcdae6c24f733a7a466274c103fdcf5d3b028eaa9245f59d6","impliedFormat":99},{"version":"68526ea8f3bbf75a95f63a3629bebe3eb8a8d2f81af790ce40bc6aad352a0c12","impliedFormat":99},{"version":"bcab57f5fe8791f2576249dfcc21a688ecf2a5929348cfe94bf3eb152cff8205","impliedFormat":99},{"version":"b5428f35f4ebf7ea46652b0158181d9c709e40a0182e93034b291a9dc53718d8","impliedFormat":99},{"version":"0afcd28553038bca2db622646c1e7fcf3fb6a1c4d3b919ef205a6014edeeae0f","impliedFormat":99},{"version":"ee016606dd83ceedc6340f36c9873fbc319a864948bc88837e71bd3b99fdb4f6","impliedFormat":99},{"version":"0e09ffe659fdd2e452e1cbe4159a51059ae4b2de7c9a02227553f69b82303234","impliedFormat":99},{"version":"4126cb6e6864f09ca50c23a6986f74e8744e6216f08c0e1fe91ab16260dab248","impliedFormat":99},{"version":"4927dba9193c224e56aa3e71474d17623d78a236d58711d8f517322bd752b320","impliedFormat":99},{"version":"3d3f189177511d1452e7095471e3e7854b8c44d94443485dc21f6599c2161921","impliedFormat":99},{"version":"bb0519ff5ef245bbf829d51ad1f90002de702b536691f25334136864be259ec5","impliedFormat":99},{"version":"a64e28f2333ea0324632cf81fd73dc0f7090525547a76308cb1dfe5dab96596a","impliedFormat":99},{"version":"883f9faa0229f5d114f8c89dadd186d0bdf60bdafe94d67d886e0e3b81a3372e","impliedFormat":99},{"version":"d204b9ae964f73721d593e97c54fc55f7fd67de826ce9e9f14b1e762190f23d1","impliedFormat":99},{"version":"91830d20b424859e5582a141efe9a799dc520b5cce17d61b579fb053c9a6cd85","impliedFormat":99},{"version":"68115cdc58303bad32e2b6d59e821ccaada2c3fb63f964df7bd4b2ebd6735e80","impliedFormat":99},{"version":"ee27e47098f1d0955c8a70a50ab89eb0d033d28c5f2d76e071d8f52a804afe07","impliedFormat":99},{"version":"7957b11f126c6af955dc2e08a1288013260f9ec2776ff8cc69045270643bf43e","impliedFormat":99},{"version":"d010efe139c8bb78497dc7185dddbbcefc84d3059b5d8549c26221257818a961","impliedFormat":99},{"version":"85059ed9b6605d92c753daf3a534855ba944be69ff1a12ab4eca28cefbabd07a","impliedFormat":99},{"version":"687208233ae7a969baa2d0c565c9f24eb4cb1e64d6cfb30f71afec9e929e58c2","impliedFormat":99},{"version":"ea68a96f4e2ba9ca97d557b7080fbdb7f6e6cf781bb6d2e084e54da2ac2bb36c","impliedFormat":99},{"version":"879de92d0104d490be2f9571face192664ec9b45e87afd3f024dbbf18afb4399","impliedFormat":99},{"version":"424df1d45a2602f93010cb92967dfe76c3fcadad77d59deb9ca9f7ab76995d40","impliedFormat":99},{"version":"21f96085ed19d415725c5a7d665de964f8283cacef43957de10bdd0333721cc4","impliedFormat":99},{"version":"e8d4da9e0859c6d41c4f1c3f4d0e70446554ba6a6ab91e470f01af6a2dcac9bf","impliedFormat":99},{"version":"2e2421a3eec7afefa5a1344a6852d6fee6304678e2d4ee5380b7805f0ac8b58a","impliedFormat":99},{"version":"a10fd5d76a2aaba572bec4143a35ff58912e81f107aa9e6d97f0cd11e4f12483","impliedFormat":99},{"version":"1215f54401c4af167783d0f88f5bfb2dcb6f0dacf48495607920229a84005538","impliedFormat":99},{"version":"476f8eb2ea60d8ad6b2e9a056fdda655b13fd891b73556b85ef0e2af4f764180","impliedFormat":99},{"version":"2fe93aef0ee58eaa1b22a9b93c8d8279fe94490160703e1aabeff026591f8300","impliedFormat":99},{"version":"bbb02e695c037f84947e56da3485bb0d0da9493ed005fa59e4b3c5bc6d448529","impliedFormat":99},{"version":"ba666b3ab51c8bc916c0cebc11a23f4afec6c504c767fd5f0228358f7d285322","impliedFormat":99},{"version":"c10972922d1887fe48ed1722e04ab963e85e1ac12263a167edef9b804a2af097","impliedFormat":99},{"version":"6efeacbd1759ea57a4c7264eb766c531ae0ab2c00385294be58bc5031ef43ad1","impliedFormat":99},{"version":"1c261f5504d0175be4f1b6b99f101f4c3a129a5a29fc768e65c52d6861ca5784","impliedFormat":99},{"version":"f0e69b5877b378d47cbac219992b851e2bbc0f7e3a3d3579d67496dabd341ec4","impliedFormat":99},{"version":"b5ea27f19a54feca5621f5ba36a51026128ea98e7777e5d47f08b79637527cf5","impliedFormat":99},{"version":"b54890769fa3c34ab3eb7e315b474f52d5237c86c35f17d59eb21541e7078f11","impliedFormat":99},{"version":"c133db4b6c17a96db7fa36607c59151dec1e5364d9444cbe15e8c0ea4943861e","impliedFormat":99},{"version":"3a0514f77606d399838431166a0da6dbd9f3c7914eae5bbfbd603e3b6a552959","impliedFormat":99},{"version":"fa568f8d605595e1cffbfca3e8c8c492cf88ae2c6ed151f6c64acf0f9e8c25d8","impliedFormat":99},{"version":"c76fb65cb2eb09a0ee91f02ff5b43a607b94a12c34d16d005b2c0afc62870766","impliedFormat":99},{"version":"cf7af60a0d4308a150df0ab01985aabb1128638df2c22dd81a2f5b74495a3e45","impliedFormat":99},{"version":"913bbf31f6b3a7388b0c92c39aec4e2b5dba6711bf3b04d065bd80c85b6da007","impliedFormat":99},{"version":"42d8c168ca861f0a5b3c4c1a91ff299f07e07c2dd31532cd586fd1ee7b5e3ae6","impliedFormat":99},{"version":"a29faa7cb35193109ec1777562ca52c72e7382ffe9916b26859b5874ad61ff29","impliedFormat":99},{"version":"15bdf2eeef95500ba9f1602896e288cb425e50462b77a07fa4ca23f1068abb21","impliedFormat":99},{"version":"452db58fd828ab87401f6cecc9a44e75fa40716cc4be80a6f66cf0a43c5a60cc","impliedFormat":99},{"version":"54592d0215a3fd239a6aa773b1e1a448dc598b7be6ce9554629cd006ee63a9d6","impliedFormat":99},{"version":"9ee28966bb038151e21e240234f81c6ba5be6fde90b07a9e57d4d84ae8bc030c","impliedFormat":99},{"version":"2fe1c1b2b8a41c22a4e44b0ac7316323d1627d8c72f3f898fa979e8b60d83753","impliedFormat":99},{"version":"956e43b28b5244b27fdb431a1737a90f68c042e162673769330947a8d727d399","impliedFormat":99},{"version":"92a2034da56c329a965c55fd7cffb31ccb293627c7295a114a2ccd19ab558d28","impliedFormat":99},{"version":"c1b7957cd42a98ab392ef9027565404e5826d290a2b3239a81fbac51970b2e63","impliedFormat":99},{"version":"4861ee34a633706bcbba4ea64216f52c82c0b972f3e790b14cf02202994d87c5","impliedFormat":99},{"version":"7af4e33f8b95528de005282d6cca852c48d293655dd7118ad3ce3d4e2790146f","impliedFormat":99},{"version":"df345b8d5bf736526fb45ae28992d043b2716838a128d73a47b18efffe90ffa7","impliedFormat":99},{"version":"d22c5b9861c5fc08ccd129b5fc3dcdc7536e053c0c1d463f3ab39820f751c923","impliedFormat":99},{"version":"dcc38f415a89780b34d827b45493d6dbadb05447d194feb4498172e508c416ac","impliedFormat":99},{"version":"7e917e3b599572a2dd9cfa58ff1f68fda9e659537c077a2c08380b2f2b14f523","impliedFormat":99},{"version":"20b108e922abd1c1966c3f7eb79e530d9ac2140e5f51bfa90f299ad5a3180cf9","impliedFormat":99},{"version":"2bc82315d4e4ed88dc470778e2351a11bc32d57e5141807e4cdb612727848740","impliedFormat":99},{"version":"e2dd1e90801b6cd63705f8e641e41efd1e65abd5fce082ef66d472ba1e7b531b","impliedFormat":99},{"version":"a3cb22545f99760ba147eec92816f8a96222fbb95d62e00706a4c0637176df28","impliedFormat":99},{"version":"287671a0fe52f3e017a58a7395fd8e00f1d7cd9af974a8c4b2baf35cfda63cfa","impliedFormat":99},{"version":"e2cdad7543a43a2fb6ed9b5928821558a03665d3632c95e3212094358ae5896b","impliedFormat":99},{"version":"326a980e72f7b9426be0805774c04838e95195b467bea2072189cefe708e9be7","impliedFormat":99},{"version":"e3588e9db86c6eaa572c313a23bf10f7f2f8370e62972996ac79b99da065acaa","impliedFormat":99},{"version":"1f4700278d1383d6b53ef1f5aecd88e84d1b7e77578761838ffac8e305655c29","impliedFormat":99},{"version":"6362a4854c52419f71f14d3fee88b3b434d1e89dcd58a970e9a82602c0fd707a","impliedFormat":99},{"version":"fb1cc1e09d57dfeb315875453a228948b904cbe1450aaf8fda396ff58364a740","impliedFormat":99},{"version":"50652ed03ea16011bb20e5fa5251301bb7e88c80a6bf0c2ea7ed469be353923b","impliedFormat":99},{"version":"d388e0c1c9a42d59ce88412d3f6ce111f63ce2ff558e0a3f84510092431dfee0","impliedFormat":99},{"version":"35ea0a1e995aef5ae19b1553548a793c76eb31bdf7fef30bc74656660c3a09c3","impliedFormat":99},{"version":"56f4ae4e34cbff1e4158ccada4feea68a357bae86adb3bedaa65260d0af579df","impliedFormat":99},{"version":"6eebdacf8e85b2cf70ad7a2f43ead1f8acccfd214ab57ff1d989e9e35661015d","impliedFormat":99},{"version":"a4f90a12cbfac13b45d256697ce70a6b4227790ca2bf3898ffd2359c19eab4eb","impliedFormat":99},{"version":"4a6c2ac831cff2d8fa846dfb010ee5f7afce3f1b9bd294298ee54fdc555f1161","impliedFormat":99},{"version":"a8d491b4eb728dab387933a518d9e1f32d5c9d5a5225ff134d847b0c8cc9c8ce","impliedFormat":99},{"version":"668f628ae1f164dcf6ea8f334ea6a629d5d1a8e7a2754245720a8326ff7f1dc0","impliedFormat":99},{"version":"5105c00e1ae2c0a17c4061e552fa9ec8c74ec41f69359b8719cb88523781018e","impliedFormat":99},{"version":"d2c033af6f2ea426de4657177f0e548ee5bed6756c618a8b3b296c424e542388","impliedFormat":99},{"version":"2d4530d6228c27906cb4351f0b6af52ff761a7fab728622c5f67e946f55f7f00","impliedFormat":99},{"version":"ec359d001e98bf56b0e06b4882bd1421fd088d4d181dff3138f52175c0582a51","impliedFormat":99},{"version":"45be28de10e6f91aacb29fbd2955ba65a0fd3d1b5fddefece9c381043e91e68d","impliedFormat":99},{"version":"77dabe31d44c48782c529d5c9acddc41f799bf9b424b259596131efc77355478","impliedFormat":99},{"version":"6801ebe0b7ab3b24832bc352e939302f481496b5d90b3bc128c00823990d7c7d","impliedFormat":99},{"version":"0abb1feddc76a0283c7e8e8910c28b366612a71f8bfdd5ca42271d7ad96e50b2","impliedFormat":99},{"version":"ac56b2f316b70d6a727fdbbcfa8d124bcd1798c293487acb2b27a43b5c886bb0","impliedFormat":99},{"version":"d849376baf73ec0b17ffd29de702a2fdbbe0c0390ec91bebf12b6732bf430d29","impliedFormat":99},{"version":"40dcd290c10cc7b04a55f7ee5c76f77250f48022cea1624eba2c0589753993b4","impliedFormat":99},{"version":"0f9c9f7d13a5cf1c63eb56318b6ae4dfa2accef1122b2e88b5ed1c22a4f24e3b","impliedFormat":99},{"version":"9c4178832d47d29c9af3b1377c6b019f7813828887b80bb96777393f700eb260","impliedFormat":99},{"version":"dddb8672a0a6d0e51958d539beb906669a0f1d3be87425aaa0ae3141a9ad6402","impliedFormat":99},{"version":"6b514d5159d0d189675a1d5a707ba068a6da6bc097afb2828aae0c98d8b32f08","impliedFormat":99},{"version":"39d7dbcfec85393fedc8c7cf62ee93f7e97c67605279492b085723b54ccaca8e","impliedFormat":99},{"version":"81882f1fa8d1e43debb7fa1c71f50aa14b81de8c94a7a75db803bb714a9d4e27","impliedFormat":99},{"version":"c727a1218e119f1549b56dd0057e721d67cfa456c060174bac8a5594d95cdb2d","impliedFormat":99},{"version":"bca335fd821572e3f8f1522f6c3999b0bc1fe3782b4d443c317df57c925543ed","impliedFormat":99},{"version":"73332a05f142e33969f9a9b4fb9c12b08b57f09ada25eb3bb94194ca035dc83d","impliedFormat":99},{"version":"c366621e6a8febe9bbca8c26275a1272d99a45440156ca11c860df7aa9d97e6d","impliedFormat":99},{"version":"d9397a54c21d12091a2c9f1d6e40d23baa327ae0b5989462a7a4c6e88e360781","impliedFormat":99},{"version":"dc0e2f7f4d1f850eb20e226de8e751d29d35254b36aa34412509e74d79348b75","impliedFormat":99},{"version":"af3102f6aec26d237c750decefdc7a37d167226bb1f90af80e1e900ceb197659","impliedFormat":99},{"version":"dea1773a15722931fbfe48c14a2a1e1ad4b06a9d9f315b6323ee112c0522c814","impliedFormat":99},{"version":"b26e3175cf5cee8367964e73647d215d1bf38be594ac5362a096c611c0e2eea8","impliedFormat":99},{"version":"4280093ace6386de2a0d941b04cff77dda252f59a0c08282bd3d41ccc79f1a50","impliedFormat":99},{"version":"fe17427083904947a4125a325d5e2afa3a3d34adaedf6630170886a74803f4a2","impliedFormat":99},{"version":"0246f9f332b3c3171dcdd10edafab6eccb918c04b2509a74e251f82e8d423fb7","impliedFormat":99},{"version":"f6ef33c2ff6bbdf1654609a6ca52e74600d16d933fda1893f969fc922160d4d7","impliedFormat":99},{"version":"1abd22816a0d992fd33b3465bf17a5c8066bf13a8c6ca4fc0cd28884b495762d","impliedFormat":99},{"version":"82032a08169ea01cf01aa5fd3f7a02f1f417697df5e42fc27d811d23450bc28d","impliedFormat":99},{"version":"9c8cbd1871126e98602502444cffb28997e6aa9fbc62d85a844d9fd142e9ae1b","impliedFormat":99},{"version":"b0e20abc4a73df8f97b3f1223cc330e9ba3b2062db1908aa2a97754a792139ac","impliedFormat":99},{"version":"bc1f2428d738ab789339030078adf313100471c37d8d69f6cf512a5715333afc","impliedFormat":99},{"version":"dc500c6a23c9432849c82478bdab762fa7bdf9245298c2279a7063dd05ae9f9a","impliedFormat":99},{"version":"cd1b6a2503fc554dcab602e053565c4696e4262b641b897664d840a61f519229","impliedFormat":99},{"version":"af1580cd202df0e33fc592fe1d75d720c15930a4127a87633542b33811316724","impliedFormat":99},{"version":"538608f9242fbf4260d694f19c95b454f855152ab3b882ac72114f19b08984d2","impliedFormat":99},{"version":"cd0e1083bd8ae52661544329c311836abdda5d5dda89fc5d7ab038956c0394e8","impliedFormat":99},{"version":"9ea6fea875302b2bb3976f7431680affc45a4319499d057ce12be04e4f487bf9","impliedFormat":99},{"version":"66e0c3f9875da7be383d0c78c8b8940b6ebae3c6a0fbfd7e77698b5e8ade3b05","impliedFormat":99},{"version":"da38d326fe6a72491cad23ea22c4c94dfc244363b6a3ec8a03b5ad5f4ee6337b","impliedFormat":99},{"version":"da587bf084b08ea4e36a134ec5fb19ae71a0f32ec3ec2a22158029cb2b671e28","impliedFormat":99},{"version":"517a31c520e08c51cfe6d372bc0f5a6bf7bd6287b670bcaa180a1e05c6d4c4da","impliedFormat":99},{"version":"0263d94b7d33716a01d3e3a348b56c2c59e6d897d89b4210bdbf27311127223c","impliedFormat":99},{"version":"d0120e583750834bf1951c8b9936781a98426fe8d3ad3d951f96e12f43090469","impliedFormat":99},{"version":"a2e6a99c0fb4257e9301d592da0834a2cb321b9b1e0a81498424036109295f8b","impliedFormat":99},{"version":"c6b5ae9f99f1fccadc23d56307a28c8490c48e687678f2cafa006b3b9b8e73e4","impliedFormat":99},{"version":"eae178ee8d7292bcd23be2b773dda60b055bc008a0ddce2acc1bfe30cc36cf04","impliedFormat":99},{"version":"e0b5f197fb47b39a4689ad356b8488e335bbf399b283492c0ffae0cfda88837b","impliedFormat":99},{"version":"adb7aa4b8d8b423d0d7e78b6a8affb88c3a32a98e21cd54fcafd570ad8588d0c","impliedFormat":99},{"version":"643e22362c15304f344868ec0e7c0b4a1bc2b56c8b81d5b9f0ee0a6f3c690fff","impliedFormat":99},{"version":"f89e713e33bfcc7cc1d505a1e76f260b7aae72f8ba83f800ab47b5db2fed8653","impliedFormat":99},{"version":"4e095c719ab15aa641872ab286d8be229562c4b3dc4eec79888bc4e8e0426ed8","impliedFormat":99},{"version":"6022afc443d2fe0af44f2f5912a0bdd7d17e32fd1d49e6c5694cbc2c0fa11a8f","impliedFormat":99},{"version":"fb8798a20d65371f37186a99c59bce1527f0ee3b0f6a4a58c7d4e58ae0548c82","impliedFormat":99},{"version":"a5bf6d947ce6a4f1935e692c376058493dbfbd9f69d9b60bbaf43fd5d22c324b","impliedFormat":99},{"version":"4927ef881b202105603e8416d63f317a1f1ea47d321e32826b9b20a44caa55e2","impliedFormat":99},{"version":"914d11655546eba92ac24d73e6efdb350738bcf4a9a161a2b96e904bad4de809","impliedFormat":99},{"version":"f9fdd2efc37eefc321338d39b5bd341b2aa82292b72610cb900f205f6803ff66","impliedFormat":99},{"version":"687208233ae7a969baa2d0c565c9f24eb4cb1e64d6cfb30f71afec9e929e58c2","impliedFormat":99},{"version":"62e7bd567baa5bac0771297f45c78365918fb7ba7adba64013b32faa645e5d6d","impliedFormat":99},{"version":"3fb3501967b0f0224023736d0ad41419482b88a69122e5cb46a50ae5635adb6a","impliedFormat":99},{"version":"06d66a6723085295f3f0ecd254a674478c4dba80e7b01c23a9693a586682252f","impliedFormat":99},{"version":"cc411cd97607f993efb008c8b8a67207e50fdd927b7e33657e8e332c2326c9f3","impliedFormat":99},{"version":"b144c6cdf6525af185cd417dc85fd680a386f0840d7135932a8b6839fdee4da6","impliedFormat":99},{"version":"e8dfa804c81c6b3e3dc411ea7cea81adf192fe20b7c6db21bf5574255f1c9c0e","impliedFormat":99},{"version":"572ee8f367fe4068ccb83f44028ddb124c93e3b2dcc20d65e27544d77a0b84d3","impliedFormat":99},{"version":"7d604c1d876ef8b7fec441cf799296fd0d8f66844cf2232d82cf36eb2ddff8fe","impliedFormat":99},{"version":"7b86b536d3e8ca578f8fbc7e48500f89510925aeda67ed82d5b5a3213baf5685","impliedFormat":99},{"version":"861596a3b58ade9e9733374bd6b45e5833b8b80fd2eb9fe504368fc8f73ae257","impliedFormat":99},{"version":"a3da7cf20826f3344ad9a8a56da040186a1531cace94e2788a2db795f277df94","impliedFormat":99},{"version":"900a9da363740d29e4df6298e09fad18ae01771d4639b4024aa73841c6a725da","impliedFormat":99},{"version":"442f6a9e83bb7d79ff61877dc5f221eea37f1d8609d8848dfbc6228ebc7a8e90","impliedFormat":99},{"version":"4e979a85e80e332414f45089ff02f396683c0b5919598032a491eb7b981fedfd","impliedFormat":99},{"version":"6d3496cac1c65b8a645ecbb3e45ec678dd4d39ce360eecbcb6806a33e3d9a7ae","impliedFormat":99},{"version":"9909129eb7301f470e49bbf19f62a6e7dcdfe9c39fdc3f5030fd1578565c1d28","impliedFormat":99},{"version":"7ee8d0a327359e4b13421db97c77a3264e76474d4ee7d1b1ca303a736060dbc6","impliedFormat":99},{"version":"7e4fc245cc369ba9c1a39df427563e008b8bfe5bf73c6c3f5d3a928d926a8708","impliedFormat":99},{"version":"3aa7c4c9a6a658802099fb7f72495b9ba80d8203b2a35c4669ddfcbbe4ff402b","impliedFormat":99},{"version":"d39330cb139d83d5fa5071995bb615ea48aa093018646d4985acd3c04b4e443d","impliedFormat":99},{"version":"663800dc36a836040573a5bb161d044da01e1eaf827ccc71a40721c532125a80","impliedFormat":99},{"version":"f28691d933673efd0f69ac7eae66dea47f44d8aa29ec3f9e8b3210f3337d34df","impliedFormat":99},{"version":"ae89fb16575dc616df3ff907c6338d94cfa731881ecef82155b21ab4134b3826","impliedFormat":99},{"version":"687208233ae7a969baa2d0c565c9f24eb4cb1e64d6cfb30f71afec9e929e58c2","impliedFormat":99},{"version":"f716500cce26a598e550ac0908723b9c452e0929738c55a3c7fe3c348416c3d0","impliedFormat":99},{"version":"6b7c511d20403a5a1e3f5099056bc55973479960ceff56c066ff0dd14174c53c","impliedFormat":99},{"version":"48b83bd0962dac0e99040e91a49f794d341c7271e1744d84e1077e43ecda9e04","impliedFormat":99},{"version":"b8fd98862aa6e7ea8fe0663309f15b15f54add29d610e70d62cbccff39ea5065","impliedFormat":99},{"version":"ffa53626a9de934a9447b4152579a54a61b2ea103dbbf02b0f65519bfef98cdd","impliedFormat":99},{"version":"d171a70a6e5ff6700fa3e2f0569a15b12401ad9bc5f4d650f8b844f7f20ef977","impliedFormat":99},{"version":"b6e9b15869788861fff21ec7f371bda9a2e1a1b15040cc005db4d2e792ece5ca","impliedFormat":99},{"version":"22c844fbe7c52ee4e27da1e33993c3bbb60f378fa27bb8348f32841baecb9086","impliedFormat":99},{"version":"dee6934166088b55fe84eae24de63d2e7aae9bfe918dfe635b252f682ceca95a","impliedFormat":99},{"version":"c39b9c4f5cc37a8ed51bef12075f5d023135e11a9b215739fd0dd87ee8da804a","impliedFormat":99},{"version":"db027bc9edef650cff3cbe542959f0d4ef8532073308c04a5217af25fc4f5860","impliedFormat":99},{"version":"a4e026fe4d88d36f577fbd38a390bd846a698206b6d0ca669a70c226e444af1b","impliedFormat":99},{"version":"b5a0d4f7a2d54acbe0d05f4d9f5c9efaaeddc06c3ee0ca0c66aba037e1dca34b","impliedFormat":99},{"version":"fa910f88f55844718a277ee9519206abce66629de2692676c3e2ad1c9278bdfd","impliedFormat":99},{"version":"a886a5af337cce28fe3e956fd0ed921345933163f5b14f739266ba9400b92484","impliedFormat":99},{"version":"9ae87bd743e93b6384efbfa306bde1fa70b6ff27533983e1e1fe08a4ef7037b8","impliedFormat":99},{"version":"5f7c0a4aad7a3406db65d674a5de9e36e0d08773f638b0f49d70e441de7127c0","impliedFormat":99},{"version":"29062edaa0d16f06627831f95681877b49c576c0a439ccd1a2f2a8173774d6b2","impliedFormat":99},{"version":"49fcfda71ea42a9475b530479a547f93d4e88c2deb0c713845243f5c08af8d76","impliedFormat":99},{"version":"6d640d840f53fb5f1613829a7627096717b9b0d98356fb86bb771b6168299e2e","impliedFormat":99},{"version":"07603bb68d27ff41499e4ed871cde4f6b4bb519c389dcf25d7f0256dfaa56554","impliedFormat":99},{"version":"6bd4aa523d61e94da44cee0ee0f3b6c8d5f1a91ef0bd9e8a8cf14530b0a1a6df","impliedFormat":99},{"version":"e3ee1b2216275817b78d5ae0a448410089bc1bd2ed05951eb1958b66affbdec0","impliedFormat":99},{"version":"17da8f27c18a2a07c1a48feb81887cb69dacc0af77c3257217016dacf9202151","impliedFormat":99},{"version":"8395cc6350a8233a4da1c471bdac6b63d5ed0a0605da9f1e0c50818212145b5b","impliedFormat":99},{"version":"b58dda762d6bd8608d50e1a9cc4b4a1663a9d4aa50a9476d592a6ecdc6194af4","impliedFormat":99},{"version":"bc14cb4f3868dab2a0293f54a8fe10aa23c0428f37aece586270e35631dd6b67","impliedFormat":99},{"version":"946e34a494ec3237c2e2a3cb4320f5d678936845c0acf680b6358acf5ecc7a34","impliedFormat":99},{"version":"b85aa9cc05b0c2d32bec9a10c8329138d9297e3ab76d4dd321d6e08b767b33ed","impliedFormat":99},{"version":"b478cef88033c3b939a6b8a9076af57fc7030e7fd957557f82f2f57eddfc2b51","impliedFormat":99},{"version":"2fac70f99da22181acfda399eed248b47395a8eeb33c9c82d75ca966aee58912","impliedFormat":99},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"bb4b76f90cc132482607f6bef90d9b55b68d2dbdbb2b92f595f4d85ae317aa1c","signature":"7fc69cb9274e8b8a0b4ec064a8285eda1b0e5c4735530ee531d7d3e2a5002fd8"},{"version":"c84fdd16e28399aee5da24e60444e069654f1ac6b83be846d1c1bcbe924f174f","signature":"c1ca39cead77ac4cb97026314db3a9fc99ecc56638804690043572509f29df43"},{"version":"3b8f25f65ad80f7887071c6e6fecda63325cd28b794de8260c859364f533d9f6","signature":"f2023e278bcc47cf766853ded6d60a9e02569a4560dd43f0c5aa84f575720d40"},{"version":"5a4da69c56d82a7302fbd211ddedb8d41d719771715c83b71786ac0b3de87c34","signature":"46a0dd85c75edefbe2ed0bfffd3d150abb97b215265f9577ebaae623b428ac48"},{"version":"d2f50038bfac9fcc50916abb7a8050267770b48de5027d1b34a3edc1c105d228","signature":"3939112f919e40aa417b5c7b00ca82cd7464928feb63ed9add5f769ad2924227"},{"version":"fd332b135c99a30934d04443db9db199c672cfb77c2e3b1e97904a304f6db0d6","signature":"76c454864fc57a3c067d633782c386ec7d4a34342301ac31c43213f43ed5e925"},"0dbacbfd025b5d3909890c682f16bcb4d7e3d932aa6089c68569f4dd7a649e61",{"version":"27667e7151a6b89919cddde1bf42fc63da38960ae07836cc6d3bcb5c448a9154","signature":"33be33d91a617c9513649df7db8c3e89fd6eddfc24f66758c3a3ee2da936ff80"},{"version":"0243aae79bc47d79196178b6b4b7555aaf77ee82331dfac0e53516373046de60","signature":"64130eb38ca5d7a2519bb0d3faf519ed12bbf295c0818d0983f9d6a935530094"},{"version":"18fa130f138fa563c9908fea1c8827bfe329d6f7ceaef18a2246a548748f43ba","signature":"cb10104454ccebc5f1a561d2fe5fe6afee7304ce7c90b18148132f1b54e44d55"},{"version":"ca3b7d444775d66905337fdacf0415442823964d5f5865fe97e4461127b20543","signature":"1d5156cd7ea9d8dd78cd0ec28f69c4df96c7cfa7c8c7cb1ac946fc364593ad2b"},{"version":"c9489544352cb4fdd8ebd9cd2013717b0c883e78935f3cac0767677c384e0d75","signature":"8dda4311fa78aefe6d18363d726b45e8c64355941339942292a4f2f2b56fdf15"},{"version":"0326b40dc7ec7a1ae704166c49f93f1aadca50126337ec1f2fa4d5764b07eff6","signature":"b466bf6620c2622820184c6a6ae76fde74f4728c2c13274b9b296f958b77bea5"},{"version":"44c04566f5db7b5efa4e347398f15f87835df672810a93014fe7a8366abc01b8","signature":"d13e1d85d8bc2cc7628ba838c053404dc23411137397991afb6a0768d8029d82"},{"version":"6efc68a04c4246e8094b2cedc3ff0362692400ac584c55adb61b1b600e87f35b","impliedFormat":1},{"version":"9c050864eda338f75b7686cf2a73b5fbc26f413da865bf6d634704e67d094f02","impliedFormat":1},{"version":"dd2fcde58fb0a8e1fb52f32b1beaaa7ab5ccc64a8bdfab315a285746897a074e","impliedFormat":1},{"version":"b0c3718c44ae65a562cfb3e8715de949579b41ae663c489528e1554a445ab327","impliedFormat":1},{"version":"57de3f0b1730cf8439c8aa4686f78f38b170a9b55e7a8393ae6f8a524bb3ba5a","impliedFormat":1},{"version":"b2d82eec62cd8dc67e76f48202c6f7f960bf2da43330049433b3789f9629aa17","impliedFormat":1},{"version":"e32e40fc15d990701d0aec5c6d45fffae084227cadded964cc63650ba25db7cc","impliedFormat":1},{"version":"d8494e07052ad439a95c890efb8b65ef5ad785dbf795e468401034af8e1b3f8b","impliedFormat":1},{"version":"543aa245d5822952f0530c19cb290a99bc337844a677b30987a23a1727688784","impliedFormat":1},{"version":"8473fdf1a96071669e4455ee3ab547239e06ac6590e7bdb1dc3369e772c897a0","impliedFormat":1},{"version":"707c3921c82c82944699adbe1d2f0f69ccbc9f51074ca15d8206676a9f9199ab","impliedFormat":1},{"version":"f025aff69699033567ebb4925578dedb18f63b4aa185f85005451cfd5fc53343","impliedFormat":1},{"version":"2aa6d7fd0402e9039708183ccfd6f9a8fdbc69a3097058920fefbd0b60c67c74","impliedFormat":1},{"version":"393afda5b6d31c5baf8470d9cf208262769b10a89f9492c196d0f015ce3c512f","impliedFormat":1},{"version":"a24a9c59b7baecbb85c0ace2c07c9c5b7c2330bb5a2ae5d766f6bbf68f75e727","impliedFormat":1},{"version":"3c264d6a0f6be4f8684cb9e025f32c9b131cca7199c658eea28f0dae1f439124","impliedFormat":99},{"version":"aca2a09edb3ce6ab7a5a9049a3778722b8cf7d9131d2a6027299494bcdfeeb72","impliedFormat":1},{"version":"a627ecdf6b6639db9e372d8bc1623aa6a36613eac561d5191e141b297d804a16","impliedFormat":1},{"version":"04ebb965333800caba800cabd1e18b02e0e69ab6a6f8948f2d53211df00a193c","impliedFormat":1},{"version":"7f2179f5eaaf4c4026299694f4461df8ac477865d746a73dc9458e3bdc38102f","impliedFormat":1},{"version":"10a4a27738127765691487a02af5197914a54d65c31eb8c5c98a1d5209f94e50","impliedFormat":1},{"version":"c2fa79fd37e4b0e4040de9d8db1b79accb1f8f63b3458cd0e5dac9d4f9e6f3f1","impliedFormat":1},{"version":"94ed2e4dc0a5a2c6cadd26cde5e961aa4d4431f0aa72f3c3ad62ba19f65e5218","impliedFormat":1},{"version":"6f90d00ac7797a8212bbb2f8940697fe3fa7b7f9e9af94bee929fd6ff24c21ba","impliedFormat":1},{"version":"4a6ae4ef1ec5f5e76ab3a48c9f118a9bac170aba1a73e02d9c151b1a6ac84fb3","impliedFormat":1},{"version":"474bd6a05b43eca468895c62e2efb5fa878e0a29f7bf2ba973409366a0a23886","impliedFormat":1},{"version":"d82e48a04f69342eaaf17d0f383fe6ec0552352f5363b807c56af11ba53278b2","impliedFormat":1},{"version":"30734b36d7c1b1024526d77c716ad88427edaf8929c4566b9c629b09939dc1fe","impliedFormat":1},{"version":"d2a167108f72f79d1c814631212e15663b3c32e9c68e55149608645b62c0cdd5","impliedFormat":1},{"version":"8f62905f50830a638fd1a5ff68d9c8f2c1347ff046908eeb9119d257e8e8ae4a","impliedFormat":1},{"version":"8818380a4b2d788313a7fc4aedb9c12c10a9f42f089a0c549735e88556a5697c","impliedFormat":1},{"version":"02376ade86f370c27a3c2cc20f44d135cb2289660ddb83f80227bd4da5f4079f","impliedFormat":1},{"version":"71725ba9235f9d2aa02839162b1df2df59fd9dd91c110a54ea02112243d7a4d9","impliedFormat":1},{"version":"1ab86e02e3aa2a02e178927a5a2804b5d45448b2e9c0d4e79899f204cfea5715","impliedFormat":1},{"version":"5da8b746f1ab44970cf5fb0eafe81c1e862a804e46699af5d1f8a19791943bb2","impliedFormat":1},{"version":"5e098f7d1ad823de488ed1d2c917a2a2a2ecf0b8539f0ce21bd00dc680d56aad","impliedFormat":1},{"version":"e60ac93c87b0aaede5ddcff97f01847f9bbaf7bf0f7ab71fc0b9e4f939360dc7","impliedFormat":1},{"version":"ea377421970b0ee4b5e235d329023d698dcd773a5e839632982ec1dd19550f2e","impliedFormat":1},{"version":"42bc8b066037373fd013aaa8d434cb89f3f3c66bff38bccfa9a1b95d0f53da7b","impliedFormat":1},{"version":"551c7467d6aa203ea70f6d2b47698328b7476711a7e0b32d1278b993d5c54726","impliedFormat":1},{"version":"8af6f737ca50d09a0d2ea6d72ff00e8ab1fc92678a156172669b02b5351f76f0","impliedFormat":1},{"version":"ba477f04b5e2b35f6be4839578302aefdcdeaa5b14156234698d5ba9defb7136","impliedFormat":1},{"version":"ad11d2024c8270f2bedd235f9d445066c5e41f00d795a51dcd3ca26e36bfcab7","impliedFormat":1},{"version":"450747d3afba2311520c45000c9d3675a8637e0feeb049587ec46bbfbe150084","impliedFormat":1},{"version":"6367899812ae700d8b6e675828c501e56a2d6ea9e19b7f6a19699c2bf3f5410d","impliedFormat":1},{"version":"dac09eae16e9619e26df91fac46269f48e3c4e86954de92ff69f8cee1c3619c4","impliedFormat":1},{"version":"30dc519377f45f89f39b2f4fd6f1126f5f6b544c1be82f2a9c23aec5c928a411","impliedFormat":1},{"version":"79955ab71307769784e882504588dc805c477fb54c3c8dc4475125ba688a305b","impliedFormat":1},{"version":"9bf1c020b8c216a88813c304f2909ea00c59811aec5b4994e1ce0aaf4ab1fed2","impliedFormat":1},{"version":"5143d767f2e6186abcd78c483e5a8a7489d1835b11cc38e4113cda172f63a232","impliedFormat":1},{"version":"e8cd779c63ef88de9171cfffa9435225b6c9eb43cf4f75aba036e029c097a395","impliedFormat":1},{"version":"63a011adb94b04d996f4fce952e1943f39637d1414182e2c38ef36ed95439479","impliedFormat":1},{"version":"f77ed3108cda1ed7a60dc3612883c81901287d809f4c913427fc2dbfa6061e41","impliedFormat":1},{"version":"ca82c06c5bc9654d982ace04f521e25c94a766c44c519b2c2528537bc037c786","impliedFormat":1},{"version":"3f54ef9049f402e573e771725b7c6a8111f6b46256ccd321d820c4574c636667","impliedFormat":1},{"version":"f5d54e5dc208efb089f0d0c2b600704af193ca82590b0c0b7d0edc51280291c9","impliedFormat":1},{"version":"68b8f557c36bd5dc83dc77671ab6b684ec6dc27004611d5ce90bf9776bd4cc28","impliedFormat":1},{"version":"83977b1bd00afc32f212da12d092dae79c2216a92059d368453dbcfa16c52960","impliedFormat":1},{"version":"71c6e74b801ebf0cd6c9b8b4dfd65d37237a7b0d5c67713947d3608f706984c8","impliedFormat":1},{"version":"f90fc63c4d4656afa26fe23f548835fbb23ef6632194f17adbe8759436f10eb1","impliedFormat":1},{"version":"9c50481a40b67c2835cb9369d28d622fbc1fd1063608143a48f9a86911053fca","impliedFormat":1},{"version":"fb1f43dbbc6c799fbce95103aae44c817e1742615575105f606aa88a5a54d48f","impliedFormat":1},{"version":"e0d08044d17c64a46496159c8552349d283116355a953aaf417c4adce9d13c9f","impliedFormat":1},{"version":"ce6bf632f42cc9ec6080688dcd952f48be38c9b5f451ca11b16ef8894b2d905b","impliedFormat":1},{"version":"e96d2a62e5f7994a81440853e7893f438973890ee5d8f1c6fec87fd27e4b3f61","impliedFormat":1},{"version":"9885a906b2795bb7733579424ffcac0913f9d9ab26308b909d9efced43730dc4","impliedFormat":1},{"version":"a1c56970dd5fa8973ad5295d4ba1cca3b40eed4d75d1955928a6c6ad53813dd4","impliedFormat":1},{"version":"b17658437b46a4156d408c2161e7886dce1d100e4ee6149bc46204a04ad290de","impliedFormat":1},{"version":"32fb8b5f7d65b16b5004bc1f907f0ba3c87a5629e62aabfdd15ffd6360369786","impliedFormat":1},{"version":"907525ce05ab47032ff065a800ae4d23757ca4fda3bb29e73ffe61c59d43a7da","impliedFormat":1},{"version":"b520b906a2a8d986eee35833a960a283ad7ce1b5e3f5e5aa472b54927d0fe21b","impliedFormat":1},{"version":"29597b2d8362e26b9b553e70328a9d825b43987ee5bfcdabe5310ffc4239d4a2","impliedFormat":1},{"version":"8a83a3eb179ddfff04a074881b0f8c5540a3ecce85ac5680ef33c4a021b74c2a","impliedFormat":1},{"version":"c79954664cc457fc3e5c0774c36e395d16aab76e68213597a98bce874c453f8b","impliedFormat":1},{"version":"572654f53b0246d56db3bc8816dc0f4f7585f0387bcec3d77b880a305d2ffd63","impliedFormat":1},{"version":"60f7709c404c18899cc5255929e68d4b7411b2393e94ed6a0c5ff584b801a16a","impliedFormat":1},{"version":"5d7dae72d66917fb7089a37259fa2fc797bf37bc7c22fe481e4fe6aac3c52e26","impliedFormat":1},{"version":"81f8046f2d0d14a49516f69b099bdad37e6ba80a6ca701ce9c580feaf1c78c8b","impliedFormat":1},{"version":"864ffeec212a6e25f4e1e6e648f0b5e3672c8b5c1f30f0e139a4549d88ff9c03","impliedFormat":1},{"version":"59bc6218245b328aac64027e9a60fa3fe83d30d77d5a1c2bb6ab679e4d299c16","impliedFormat":1},{"version":"ac3a7ab596612cfbee831ee83ce3f5c0f5192d28ba3f311dd8794c5872e8c2cc","impliedFormat":1},{"version":"575de234fb1198366224b0f1132e8e62e4873e4fa73f3596ead1dd6ce84190c9","impliedFormat":1},{"version":"5e67d0a28aaec898adc48fbd559bdbfc5f03b776e1856d76533166850a9c7c28","impliedFormat":1},{"version":"c40214f9c1b3c74f5f18cca3be0fe5a998c8a96ed28a096080f45e62467a7e6f","impliedFormat":1},{"version":"31938335bd4ea9c9d6749ce9fe66c0362b59b39f36e3fbbb9ac2d546a22bbdc0","impliedFormat":1},{"version":"846fc84d9fe566dfc4e492fb79db2e295a9b6e1c2441dffd41ad31c180fec2e0","impliedFormat":1},{"version":"a0ce29b9a2b41acf6eeb2f200b9d00a78d79fa8cac12e0a0f5bb76576ba70bd3","impliedFormat":1},{"version":"99faa36301333a2c0fd8f842079591cceef45995961ca6fb9cbb2d8026b97747","impliedFormat":1},{"version":"53900700ba4e2fe1e4136a9b420be459668e4d2f9b2bf78a4cd27591c5bce390","impliedFormat":1},{"version":"d6e534f4829278dd33b5899783d139d2eda049154ad80c05a08d3c292bf6e5a9","impliedFormat":1},{"version":"dc7bab1b4a5f4b28409c651c77a8b14ce4e20135f1732d4baf78e3f7a91de18d","impliedFormat":1},{"version":"06b1efb0ba9ba7552544ac2e0be3c165573f2398d90de1ef9b4cabe60f55135a","impliedFormat":1},{"version":"aff6c64a3909d602e0e447223ea19f7a782074a9d2f33d689ae17b6cdd793e18","impliedFormat":1},{"version":"6187773fa060bbb9f48cd5c0683a4ab25835b3e5bab8d2439a43ca6ba11b1451","impliedFormat":1},{"version":"5fd6c350b1189af5b5f20e224879409559b39704738034f60265bdb702b29275","impliedFormat":1},{"version":"c8749ca4dde46f2176ac0731b864a7862551494216606fc85ea8ae6d4d663fcd","impliedFormat":1},{"version":"3a5ae27c5558dffdfb93e4bc19f4306dd2441cf89a79999c269a6db582797623","impliedFormat":1},{"version":"3b1f6f5cc699e622ee1626ecdd2b23dcd259fa3f79eec90416b62cc7c602c00c","impliedFormat":1},{"version":"6b45317a680249d517a9f59fbfc245f1b247c1bc3cec23cc41ccdee3cb2217f7","impliedFormat":1},{"version":"1955df31e50a3e4cede128aa8bc44ed01754bd581886cabec9e28adf0a50cec5","impliedFormat":1},{"version":"fd85badaf54d71e1e113b49ea16c4ac1bb7cceda104236b035b03cf5c8228b0c","impliedFormat":1},{"version":"079caf93e57f08464ba8a0d2be474ce878d87527e3ccfaa76854887bc9aa0ae6","impliedFormat":1},{"version":"9f923b81cba218247f22a7f7f68c40592860867a23e3c8584496144391a581ba","impliedFormat":1},{"version":"8f9b0bb17aeeec771817550bb08432327a2597a78ea133821004c1a9c1d45388","impliedFormat":1},{"version":"e0d275962c61cd8665204b12173f889f1be17b10f26ea38f724d6441695001c6","impliedFormat":1},{"version":"27ff41098c369fcd3406ddf141637393f79ba4436f310167a8750ecbe5612657","impliedFormat":1},{"version":"6862124dc19e19f10576c15628b129a969c4411869d53c1d47ac67913c712113","impliedFormat":1},{"version":"74ea7cdb0137dede61a1a9005a976fc719966c74855775404c535f9147677aa3","impliedFormat":1},{"version":"40ae5b0b8f73b7541c4824fcde53f3595ed77680665d6aa8879f3109d982b6f2","impliedFormat":1},{"version":"b1b5be14ca8eab8961ffb84f0c5255adb27a2122325b6c1fd006388792ab1d9b","impliedFormat":1},{"version":"80adea6eddb92c1d7d025aa4bbca687953db5c5a8fbb3c724afcc73352f16962","impliedFormat":1},{"version":"3138274819b9c3530820360c74154662a6a89c19978ca49a9d4e32008c6887c9","impliedFormat":1},{"version":"aeb323f9afe3c82b54349f9dcd1542d2a60dd76c45397eb438d2a81538fbc158","impliedFormat":1},{"version":"dd302f077353f32862aa55177169ebfc7250d3e61cf52a6f7396666bcf4b73f8","impliedFormat":1},{"version":"eec0a8be2ce7e033d97752f8548a6227845e63393bfc7eaabb1b2b4191d40943","impliedFormat":1},{"version":"eb603dfe1228c473d2493e371a624bb35cf694cde94f51adf42418548dd513d2","impliedFormat":1},{"version":"de8cc28f1e846065aa058761abc16412ccffbb869f79482649983013e6732bfc","impliedFormat":1},{"version":"4d820c75d431d6ab0a19406c78003b1ffb8be9db1b233ea413ccc9d855022cbd","impliedFormat":1},{"version":"38580f8df8a2a44737ea034a86bdbf80f257753c971d61c12a1098dbdb9b2a39","impliedFormat":1},{"version":"52e92c5f8220d2b3158d851a6a11633ee1faf12dfac5c5187f472479810ce672","impliedFormat":1},{"version":"7a4ec02de2c38f1e663dc7bf2a8d25c9bacb44d1c729b2168a6a1b4c0eb149f7","impliedFormat":1},{"version":"4921f1aa08efee2a0eacef0b6e0478e25b07fbc4358fcb8ca7fdfe63e39987f8","impliedFormat":1},{"version":"c3e297f0ab53b25b64c28dd1da2b99d5ba32db86374c60ace4da1446ec6b67aa","impliedFormat":1},{"version":"b18008871111bdb99f577bf23984636016829c1ffd0b3b57dd247c548cc84396","impliedFormat":1},{"version":"883b44c4bd9159217366c572e1d6e6b267db808e79a8946f4f6e755119f36ca0","impliedFormat":1},{"version":"8151c80afbc28bd38584fc656291232aab62e6982791d4955739453ffc6226a6","impliedFormat":1},{"version":"6a2d23af09fe2540f748a922374030783ac22941ff999d0891ccffef8be00cff","impliedFormat":1},{"version":"a0bcd00fa37ad0e775264df863700374d096c270387ecdf1ceceae72ea68568a","impliedFormat":1},{"version":"a15b50b45ac004c6e1d3381108996954058a37b65569ceaff6d7023a662f4cc6","impliedFormat":1},{"version":"808460e09155a279561ecccfd5a21e5b2a36c4708f4b077141eab758e4b8af2d","impliedFormat":1},{"version":"fc4d2ccad5ec1d2b1edffb7762f869116f0df0607b0312ffe0538990c09db064","impliedFormat":1},{"version":"b34c65bd4b816e77343fcf9cf2faf751fce2c4e285077a91dd10463480bacd4c","impliedFormat":1},{"version":"0d9b442c2e9ce68ddc9e0bccb0bfae0c9fcdeac1db97866132835958ce62f946","impliedFormat":1},{"version":"7c4ff515dc2676012472eaf861a49aff18063b4e030cf9ff2075834b33121eb1","impliedFormat":1},{"version":"78f26c647b004b1765cc07cc63104dc96c57699ac6f057c3ba249cc3843a8b08","impliedFormat":1},{"version":"ff54d3983a28652a73d0e28d9994ed34598ba0cde0a95b6b2adb377d79589358","impliedFormat":1},{"version":"784ffad41904d54f8eb78de7ede7ec97e300a079f60a9f9d5c279c0c57eeddf7","impliedFormat":1},{"version":"bf0763486a6001eea0a46dc54a5416657fa286d4864b7fe767e8c5f36a7c0028","impliedFormat":1},{"version":"7a744e57c1f35528c1b687e883f94dd634f1f71fa2b55c5082ba7ba6c570e7e5","impliedFormat":1},{"version":"748262cf215860dac329a379f544c3d9869331bb102676e835bcb926f2a62e34","impliedFormat":1},{"version":"d35b2ad20687fd076378d130c7ae435bf0d2fd88bcf220cec2e3a359d998b176","impliedFormat":1},{"version":"180ac21a1ce25420b2a2c62388d593cff2194f06b0f37f0b5aba9a74a8c93be2","impliedFormat":1},{"version":"9c6ec6fff7090f0b64b53445f62a44b6e1251d797af58c3d8790e0dbee4f6233","impliedFormat":1},{"version":"5bf2546f822397e4ddfbeb7e80213125ca20e43610ec5be4f50a0a3391398fee","impliedFormat":1},{"version":"b5e99f9dcd52d7d29f4edd75a7cb1a9666674c9fde3dba4434214d65eb2e63f5","impliedFormat":1},{"version":"3fa5ccbc3d8d4ee705e8e1785b6b3bc78958d973345962cf10750e0977125f6c","impliedFormat":1},{"version":"e1a59a2b8d508d3751b88998760d0ed4e9975ed3b00b15cfd2e607223b124b83","impliedFormat":1},{"version":"e757938cd1d3046fb77efc5cd6a23f907e2f906f009f79e9ea04b605c87ee61c","impliedFormat":1},{"version":"fbac9eb5c8822b553d0662dab56cb113a7fb5c8f837dda4fed6c6812e6f6bc2d","impliedFormat":1},{"version":"fa32b753955fdbb2eed035c29bf614895dae86391f7c5a9ea8c2f9901dc7e28b","impliedFormat":1},{"version":"e32dcfbc730d3279764d6b4f7a563931a1269a6f6a5e0546322601a204c02b27","impliedFormat":1},{"version":"5ebbb8c24718fde817447247a1e5288a380924ea049c2f2984fbce83c803b21a","impliedFormat":1},{"version":"edaa0beefc0763764fb087131fd2269def90b8c9ef7e23192c4cc4ba3120530f","impliedFormat":1},{"version":"bc901b71f4d3486f5d59e01cdb164819aa05ab73040da16140e40b0f4bfa1fc7","impliedFormat":1},{"version":"db43c2528945a27b84bebd72fa66bc50ef3c417a50f07004d9ccc10e0fb24dbc","impliedFormat":1},{"version":"e27add1d21e131bea23a5fe97deb6e1529da348c0f977c80bee89555e8dacb11","impliedFormat":1},{"version":"197404b85a2defffba6b2cb3d2b5045f784e1ddc9b6bfc8e4b83b9290707f79f","impliedFormat":1},{"version":"1833a94c963a31dbe3db9621bf9f10e4340ce9751961d56a07d5b8ad58e26c47","impliedFormat":1},{"version":"ec07add1ae0ac8aede86d5a808450605a8975370eb07cdbdb657edb78eea5b0f","impliedFormat":1},{"version":"4492d9ce3dee0890e158b31987d266a00ed215024fe51487bd9c5300bd04a145","impliedFormat":1},{"version":"333aa738f774b3bf1673d11e4df9a8d8d029f2eb5977a3bb93b1f97b4d9c3879","impliedFormat":1},{"version":"62999fa1debd04eb76d77d0ed150b56ba61be67e1ba0784d944912da9e7f9774","impliedFormat":1},{"version":"3b0ddd49846170a09326001be7777be187524ea57871f5036da9474ad7dcf32c","impliedFormat":1},{"version":"008e55a7b58a261a00df89503402ffac1939f3312d53287204fcbdcfa1321b9a","impliedFormat":1},{"version":"162cd1dadaf4aeb4328035b6984227fdfd6ac56da0f1e7d5d154d39cb8985868","impliedFormat":1},{"version":"05e0aec703f4484ed25f9bdde230b2c2370279ebb6eea8904d86f61dc7adbe29","impliedFormat":1},{"version":"cba706d277a0ded1dcfa002b304a63e5d8ac7e7538ca35e1238566d2932616f4","impliedFormat":1},{"version":"a1a949820e6c75bf7fc8e4c397ff3eb7c02ff4497d3bdc8b7a35d4fdd7f006ef","impliedFormat":1},{"version":"b983ba7d51c510db35a4e094e658ae5affb797470087b5642c5ef7702f2e32e0","impliedFormat":1},{"version":"a2632b885eddd644f88b47e43b7cb0b86874330f20ccc9fbf10fb054ac956ed5","impliedFormat":1},{"version":"fa34d2f158565741d200cf5beafc31c5a529df31e22c13a96d6584e2a5ae28a6","impliedFormat":1},{"version":"1a1a1038f2451df4e77f3147ea8260c03f62deca4c2e27edf3c4dc9f2e36a398","impliedFormat":1},{"version":"8dfba6c553dc8fc5cad7d80659f1e49dda9ce96fa493a7fd4f074c20fbb8a4ba","impliedFormat":1},{"version":"71e015a54bb162e0eff884f6a3a8d25054be786ef18e50b9f4be7ec7f62584ff","impliedFormat":1},{"version":"8fc1242e26660db129aacf67bcb1d55d304f7b6d41101287e2e25cf3f0e27f17","impliedFormat":1},{"version":"7b0289c61512528f4880e01e69297b91dadf79ac05d64d48f2661c5df40adc6c","impliedFormat":1},{"version":"21a1a5ea79f0635f5be35d8b74b013573a06b3cdf412faa1f8b42d16239edcb6","impliedFormat":1},{"version":"9ebafc364a194262a6e507a02803f586330a4e02590c69d88d0d849878275630","impliedFormat":1},{"version":"9e3d57a996c141b32847cfd1d4e8ce413a42761824c1702b4ad5815a1f8389dd","impliedFormat":1},{"version":"a3888b33fe6dea54fc6410e48fdfd64742bc7f31391dbbe904b4269a0d53caad","impliedFormat":1},{"version":"7844c99f45a6eea443c0870144fad35de0315141902526b96b82f322dad6a370","impliedFormat":1},{"version":"ae0816d67c108248f57ee2cbcdea68d7e21e318a977ddf13126faa66a5c73b1a","impliedFormat":1},{"version":"187846a5bcdcf674cc71ab2db1713ea32daf59555916c8b2325ba7d053e0b961","impliedFormat":1},{"version":"bbe6875aa31edb995762c13bfbbe86c84c96be79116e50347cad2949431550d6","impliedFormat":1},{"version":"dca1e13d2471b495e54520c738a2f16a2cb83e99103019dacc50f1d586e58b6a","impliedFormat":1},{"version":"fbfb7eb438ae1ed9c69f55f2267c666ab980ea1df50bcb3ff1bae0b27a7d000b","impliedFormat":1},{"version":"b1d7078450217a84f7e9bbef422483638b6189ee5a62614b64decbacf7cd8d11","impliedFormat":1},{"version":"13ac774e38d522e1685e33ab8a193a877ac3ad995d6dd838a6563778a997d43e","impliedFormat":1},{"version":"67843c984888924b2db8fe8657083ec2bfbb9e26407e8485092eed0a0f74e76f","impliedFormat":1},{"version":"768463c5027a3e5359cc4de7e9da58b3a7371c802e68a865f1ff9a3b70efc548","impliedFormat":1},{"version":"97b8af8cb9edd6eccd4a6ccd13f061e05883f881c2960194933731dffbf392fd","impliedFormat":1},{"version":"5fd092a1c7cd5bdc122aab94de111df9acd2d7f53fa19601bec5bb7f5b56c8a2","impliedFormat":1},{"version":"6d89b4d7ce035ec9a3775fccc2c9e811c3d4939ab2dbd907db47912f3a2e6a9f","impliedFormat":1},{"version":"8a23e045b375755d91408ce266bf326dc217524736dedd7f331ac814f8a157df","impliedFormat":1},{"version":"cc498c43dc70d245bb82295527298515751b30f8b2543636dd2f4b8df7aad5d9","impliedFormat":1},{"version":"417ffb3ef339821257bfa728ec29bd2ebeaeb974a58b1713c87247ea51147eef","impliedFormat":1},{"version":"c77909156d4ff0524e368b826d35dc11466d2a95d704cbfc140fee3faee3bfcb","impliedFormat":1},{"version":"583240ffb8b350fe621cfc2ae9afc73169191d4ac00199fd12686f3a6fbe0180","impliedFormat":1},{"version":"ac9b2b6942d42f861ecc4961799d952aedc09f1992531d8d9bdaddc74872306b","impliedFormat":1},{"version":"937258be59bdaee9697c1e434e65a1674490d64651e7950f3e2d40eb84be16b5","impliedFormat":1},{"version":"679cd3726edb2852b67d761559ac278c8641395adf759018fd49886106204ef4","impliedFormat":1},{"version":"699999866b48ae5cd227ca4224276b0cc94a270e243195e679a810fc14b94605","impliedFormat":1},{"version":"5f2c85cd9b1b41be20e505dca59bda23781b381bfa20eb227dc69273e8a5dd40","impliedFormat":1},{"version":"317dcaf6e07bf05b3fd992e90d4ad0091eda793f27f110f6eae2da2c15f2d83a","impliedFormat":1},{"version":"df1a15a606c52f4076f81e4e4c99546e2f3915a3492cc612d556f0114833c495","impliedFormat":1},{"version":"62d9bbb9cf85d390c8427456a888b82390d7cf33182c688dd978e0a2ed6432ee","impliedFormat":1},{"version":"08c14fe002204f5219ff5573ac4b06c425da6d9b340e8fe59a59d52129219988","impliedFormat":1},{"version":"5b8ed0dbc35795d96cc73668165f39fcb2632c7b245bcfc62ab0ade922e69939","impliedFormat":1},{"version":"1b3c2d37a22b0eabfdb34b87068964ada92a808b2050442f3842eb23d3aeffb9","impliedFormat":1},{"version":"cb52f5c645037728696f95e8998c0f63a4d0de07405b6726b70ef08ca2c97e8c","impliedFormat":1},{"version":"1786f7f95eed118a2a0509ba4389e8ab981640ebe5732e6c8315daecb76eb10a","impliedFormat":1},{"version":"f0f8d7fbe9dddfac524cbf1889acd69103442972d9eb02d16f37c887dafc58a4","impliedFormat":1},{"version":"090029d1131128b702aac3306ad442e936c8215c0b9d792c6dfe7b25ea01b76e","impliedFormat":1},{"version":"4eee9e089075d4f8ca871d072d6db9c7eb59b328c0635eb9faeb0ecc42d48341","impliedFormat":1},{"version":"b29607cc1129d7d0e0241c28273f024505f28a0157d9df0edead4abf0f0f7419","impliedFormat":1},{"version":"130dbd97c3f2eeb7690adacf1a9d1acbd015bd5d1a7a020553bd71a40e861905","impliedFormat":1},{"version":"cd41ac8867d4676795d1abe3b60b1636d2f111ef53635cc0e32c88d805568a37","impliedFormat":1},{"version":"366245b9b596ffa8b5ab6f934c4dd789a704c7a689d26360e82c74461c52255b","impliedFormat":1},{"version":"de1862c4821ab097463b952d96a89875da5ed9f4c666e0cf13906e3507f3cda7","impliedFormat":1},{"version":"02be82bd53f89f8507b02b8d3bb146ea2ba399ee5b5cfffbf42b6587a08014f5","impliedFormat":1},{"version":"0dd9eaa75e4c30482e7e4903c9bd0a13412d24878388e0d02b7bf035c0ecc069","impliedFormat":1},{"version":"f0485f8bf0585bbe2497666132af68338003e35aebf29d50509dddea2fd6fb08","impliedFormat":1},{"version":"cd43d95ccd2ac443b9f7c75a422e40ef5bd6607b3b039b4a589ca8599ccb27b7","impliedFormat":1},{"version":"33ea45bc82d8de83d76bf42c239aca8d9a3d8651c9b0da92bfae94ae5768e25b","impliedFormat":1},{"version":"854c84d4199fa6c33dcfe5ee3a84c5ba8b0e87d104625983500ebe25fc41d370","impliedFormat":1},{"version":"e650651bddd05bcbea285fe881e3ccdf106f48f30e2cb49dd7bf1e3d6d8448dd","impliedFormat":1},{"version":"72240787bec4ea2be23d6f323a41f8b38932106ad4d61794630ec5a6780ae9b3","impliedFormat":1},{"version":"385f41c8ba2ceefacd9024e2017662e5583d9e9837283b82a4f034a15cc165df","impliedFormat":1},{"version":"f14f16b45168d968b58886a71c205cbecff336a9a2966dc13386157675863bc4","impliedFormat":1},{"version":"38725ce0b710fabd7f53b08ac0d18cf9a960819a530da71eb4736fa103a3fd41","impliedFormat":1},{"version":"15a013aee64eef3cf3926ae58974417caf81c2203efc4cf27aafb54d3830e9f0","impliedFormat":1},{"version":"2cc687385980a62f2a3ef8dddd9724d2c793041da80142a26829612e9513e623","impliedFormat":1},{"version":"f848f38dc0de065574a78bc01ee7aa6cefb25421580db7928d0f4544237b1dd4","impliedFormat":1},{"version":"f8dca94a3c80cd8722a889ba8c02cd413cdc0b446100ba889ccdfbd760482821","impliedFormat":1},{"version":"bb1c44d04b22151ab23ee6e07e0ce1768ce34f55618162bf813689185f8261cc","impliedFormat":1},{"version":"c25159b37a6447c285ad9a40019adc58c50e93ecab609274cb9e8e31683912e2","impliedFormat":1},{"version":"65d1e1d8ae6614fc1dc64aea7c76b618557cddd45b2dfa9311fd9656c10c10bb","impliedFormat":1},{"version":"6771028f48adfcdd1be3f8ad6df70b4594f5597eb652a4ba84bacf90920dd6a8","impliedFormat":1},{"version":"4d318579c98d776a0481f4fc737d79abdb37d9b4de4c1c364240561d2e1c9193","impliedFormat":1},{"version":"2467f0f48fe357419c212803131126458cdb32020b4c08bc085f55a8515a77c0","impliedFormat":1},{"version":"d71651c9ff68b97843acec9a4359404ddf3828fdb86a55e866205469a3a705e4","impliedFormat":1},{"version":"603a02298f00246a0789ae35fc62c09d5dc00d1a9fe14cbfd5f8815d2a057b0b","impliedFormat":1},{"version":"3f74ccc42784e5f4f96521d36954140b87d97c44ab342c2dcc39ea0193e2eb83","impliedFormat":1},{"version":"b4429554985fee880f79872b977ce98ae471e92f003c406a4797c31ea2d0c68a","impliedFormat":1},{"version":"c884d380ee3b0b218dfca36e305dafc18e52819b08ecd972ace5ad7ed21c2b55","impliedFormat":1},{"version":"ecf35683dbf6b8dbe0c9da0b8cd56b93761afd5c8c9e6b26df6a869aacf1155e","impliedFormat":1},{"version":"34a2662c44a3acc9918d15804117fb3553845460f8ae779850b34570fb229068","impliedFormat":1},{"version":"3fedec7a8f47682d4bed5ad9b4e75efcfcb912d2cfac74fc9f4123077e72cee7","impliedFormat":1},{"version":"bcf686309ef56e2dce5d7ece38f734a553cdcae3c889eb83292f89c2a57f361e","impliedFormat":1},{"version":"45a7fabb2f4a50f8bdf1e949738c3dd9ee6acd8894b85545432ef51deb91059b","impliedFormat":1},{"version":"07eba8edc14f436f4a5e100608f02b9a76b5695f474255deaf7aefedf1530bb5","impliedFormat":1},{"version":"d403e6f9fab12d519bb8df2de8e9cdac867acc51c95433ea9e655db2b52fa78b","impliedFormat":1},{"version":"c78ddd4b7c02073b7674fecdc9435643f8d227e6a360062348887004e8c23bad","impliedFormat":1},{"version":"43eee9e1e59b9b4d90aaaa1bb13cb9fe2aa72d5217b607f545a5ef1b8b2a881b","impliedFormat":1},{"version":"69c6bbb062f8e79a8737c1bf6b09278b2586b8cd79d6dc74aa36eebd0fb592cc","impliedFormat":1},{"version":"64ee026a486c0313d988591fa24db5d58301e165f77352242db59d3b8faf1d67","impliedFormat":1},{"version":"d0dd5322c42e00189a5dcfe8083a605149e9d99fe0c833400d41eb8d10fd9fbc","impliedFormat":1},{"version":"f86d6ad6946a1c3324a379bda02fc09c266fcfc068fbcefeabca4ade19118dbe","impliedFormat":1},{"version":"eea71cfc2b117d528ec8fd91c56526f9bc4e3519ae2259e249800d53294de8cb","impliedFormat":1},{"version":"50ca4580d9d987772ab8c8a9c4d26daf48d8a5e47825c79e614ae47e31787bc9","impliedFormat":1},{"version":"3711a64c982bb8e1e84b61fcd7943a8475f2b3d482abc897830d9b43d743b11f","impliedFormat":1},{"version":"16c784cd58b3920b95bff32f9bc466e6ecc28144da190280bb5cd81a30d8da08","impliedFormat":1},{"version":"e9f485d739984a4f942afe5560ac4d6fa70d237bb739166faaa03b96a489d241","impliedFormat":1},{"version":"e22940db792226d21162fe3bb512ea7693c8dbb7fbd799815e5fff76d41b12f7","impliedFormat":1},{"version":"da875e6c2feed32a1143c8f19bfed69dd8dc80a84c29c3d67cb98bc47065eb16","impliedFormat":1},{"version":"5b4a5e9aef4e3ab4b6136a36c166eefe684d68e1822865c84f173cb7870a8c36","impliedFormat":1},{"version":"75e28a8e613a41fa9d44bf247dd74ae74af79aa0d01ed646cc8871ce9b635747","impliedFormat":1},{"version":"b9e7fee6f1703ffd40f213a2e2e3018c21200cc1f7267f0035e40d00904a92bb","impliedFormat":1},{"version":"79f5d1147a5d52c7dd76c52c905ecbb29c9bfafcdbf02625df96ed360803ce5b","impliedFormat":1},{"version":"88e1ed764288be958d45cb9e8fc683c25e35ce7410712f48fdbab6979008d18b","impliedFormat":1},{"version":"8469c212631f021909f861b3f0371a694518c2381c532f3f6f2bf29a5209d028","impliedFormat":1},{"version":"b154fc3754fe81a580b518d6cf0c366ac51198becb14a2d83d5dfa524db12775","impliedFormat":1},{"version":"4bd12bdbb16122a6ddf8c05fb0faf7e47e8d301f3855659975b0199a43932807","impliedFormat":1},{"version":"1f8136f37db1d7d6143fd8bc062bb60393720b5b2fc993714f42dead1aea8d16","impliedFormat":1},{"version":"370bdc1decaedacf5fbc48acdf8e63922ec7b240ead1ca8741c53082267958ae","impliedFormat":1},{"version":"64205cc3f33da2480783a8071b0b4a72bcee3e69a6b02f56fac92c6a06337aed","impliedFormat":1},{"version":"a352da20a1bf5e47e5c5ada820e8f3524a8d82a7930d543277e34a403a130d37","impliedFormat":1},{"version":"f2cb8562905c53bd57a69499a3ce2bbc6c009c12533211032d871179f1d61957","impliedFormat":1},{"version":"4ac56be51545db7d9701ce3fe18276f4599f868d8625be83a48324d686ff551e","impliedFormat":1},{"version":"7a5efcd54506617d3551cae721037f7e1e139b68a09eda52cbede0ee533c0922","impliedFormat":1},{"version":"73b98504a7d8255b58eab7897cc53041438e1b8db6930cf4f4234bdeba694006","impliedFormat":1},{"version":"24d218dc7ebdb2a1b7c6d310f749b19cd8c9f64b89d7917f90524d356ad85332","impliedFormat":1},{"version":"0d53e4e55160815b8875d7290fd1933770e9d1fbee6d0c17dc9c299c3d1b24b8","impliedFormat":1},{"version":"0f5b2d16887a5f0e5e22201611ad3030fe73117bfe50ca746fe9c116778e52db","impliedFormat":1},{"version":"8bef3625be9672c0be78ef1934c124e6cdf041adf971967877cdcd46e077f987","impliedFormat":1},{"version":"353cdee15d92d597027ad675e88c7e277123eedd095b4a8f35eadfbad995cc45","impliedFormat":1},{"version":"1f52c72ac3ea631528be4bfc10ff77c551e2b66543e9d012d209a10c759ef307","impliedFormat":1},{"version":"888d64a11e98c9f60c4d9ec8b3a7de5767cd98f6bdc61677b49d7dec9908bbec","impliedFormat":1},{"version":"39b408dcb48d53a778001e91437406104e6e110147f212adb8af0ddf4f17937b","impliedFormat":1},{"version":"18f4cc6f13fe53817c2ff0cd07a3d0c763438f99bfdd8911de7032d72eca5d66","impliedFormat":1},{"version":"20a728a30620d2cd0066d1e438102a2f3eeda1899bf620ad893064ad68d42c2e","impliedFormat":1},{"version":"f10db82a3ff29fc79e161143725704d57d382d86bc3001a89c1466e94494282f","impliedFormat":1},{"version":"99ced42593d705b36c61e241aec10767f4e53434e8ea7db9fff4634f1e94a14a","impliedFormat":1},{"version":"25299906a6951ea26938c6bea677e8f2f8e887d1af45e4b639986c4704e845f5","impliedFormat":1},{"version":"22dfda697cc90ea2215cc1668ce30c49cbbe3a4a491d86a495fca9a15bc99af3","impliedFormat":1},{"version":"68be424488309ad308ca4ef042db9cab21f41c2000fc6038eb001eab36994ad2","impliedFormat":1},{"version":"26de353f17bfd92a4bf06f4236a7f6c0f82693eaffa18969e86dfd1ddac24ab9","impliedFormat":1},{"version":"acd809373cb980d52df36368ee526078b53e78d1a5af1df610ff959a91d55035","impliedFormat":1},{"version":"416b46f16843272c22518fc8a570235ba715d3c646a2be8e89b138419d4ba9ce","impliedFormat":1},{"version":"997ca9bf84eaaf5e778af81059034fe0929dc1f8c2b2f1d39b31e33c60a12b7e","impliedFormat":1},{"version":"d17c5b956d4a7e818f7cb845e916441fa72c4bda417b59a1da08765aca17c52f","impliedFormat":1},{"version":"eccb6748a4f754d90eb108cd5c65aa1251d35ce37066a6b72d4962be7a1a55f5","impliedFormat":1},{"version":"a3d234819d2437bd95ef5994266b17492a71bcc28cd8a471278417fdb2145910","impliedFormat":1},{"version":"2493c9eefef5c91d0d9ddedeaa91dcf8b2dc962d446db3c063d66e0418c86d52","impliedFormat":1},{"version":"b58f28aed4b762370142516d18e7680e42408d0d5c410a1f144150a79d22dca6","impliedFormat":1},{"version":"d5d1488a11603762736d255705bd75435dbbcd4469d99be88e75b4b44b33bd62","impliedFormat":1},{"version":"8278917248e1bd324e89083c86b1a81b55036392c74dbc828ef58450f92eb96d","impliedFormat":1},{"version":"c03dd20ea707a20fcfa890f1e6124b8fee4f9dc1d8886010c1ff7f969db76977","impliedFormat":1},{"version":"30e05b6c6037f0a111b5c3322bfa996a80e294e88c2ce807ce67f3d486db3341","impliedFormat":1},{"version":"199fd96ed9a55095b7dbc17cd1bbd88338e50668f77ba2e72e8a4a8798e8d6bd","impliedFormat":1},{"version":"ff5a7b8eca68cfd9d09ce0621151a1dbf21d93c9fcba10b26d6537cf2433c6f3","impliedFormat":1},{"version":"fede73800d229d428e55282897bfebdab79c063d460c09f512d3c8707e178dc0","impliedFormat":1},{"version":"ea16cea6bd60777f5347c36c5591ae9f386284b2c73af471f04d446367c10948","impliedFormat":1},{"version":"bb3153f0e31ca09c8a3cf977c20910085d43dd88a0a81d2bacdb077321654dcb","impliedFormat":1},{"version":"7488c3878db938b2e2442659a21e093cf95199fa5ceb67b7328ff30bf405993c","impliedFormat":1},{"version":"0eca5594c7cacce979cec9f2769454417f2e765070373fbeb8f91ea61f2b4658","impliedFormat":1},{"version":"ab1774701637ddcbac01191363481dde7707e44cac030b7075afebc24333e71e","impliedFormat":1},{"version":"279dbbc79e0fd323de5409268d93bef95efd4ac57d278816f58575911f3fb4ce","impliedFormat":1},{"version":"fd9746ae53cb0fe9643a6be07dfce3700f4468772d4ef2149ccd314103da1443","impliedFormat":1},{"version":"3ea4778e1d0b5af77a80b59394920f56edc348bef1e030c65d7706fa71bf221c","impliedFormat":1},{"version":"b0d85580e5d71b819de85171a061db583ef74674ae1243af6a7f470c0d636ca5","impliedFormat":1},{"version":"f2603b51bc7cb47a19814f431d414664c6f507aed8194fab33d1cf16c4a0a165","impliedFormat":1},{"version":"798e0ca1bdecd83574502ef2acfd715cf967651e68a00927ef034ee4fbb834ec","impliedFormat":1},{"version":"df95f0858814343be9425b23e33d5d54f440ddec68b0ffa8c3fb73073bb94524","impliedFormat":1},{"version":"7bf84b8239398fa5aed93d1e49a167d03b1c992f4ad96d2773bc16d4e6441d3d","impliedFormat":1},{"version":"679bb1a8107ef85ccbe1fd5da61307bf0b987d314fd9dc39a0a8d37ef28215d1","impliedFormat":1},{"version":"6f2aa68c0ebcdce716a4b45a7175579f36dd0a02d03185303eaf6b2ff0531507","impliedFormat":1},{"version":"5964cfe312fe5c40ae2c7dd92f66a172bf63af5062b3d28ed6160ab6be29c4b1","impliedFormat":1},{"version":"0d6fe2a7dd69130645cfebec6e511a6d01239fbd3e09585190b0c208f95219d0","impliedFormat":1},{"version":"3e5830ac4db3248b47ba5567d7f7bab49161eeeec497e64a1c3b2aa4a448da38","impliedFormat":1},{"version":"1d953f6732a197e5d284b4a1c9a1564bc073672a5a005644f03f2ce509150cdd","impliedFormat":1},{"version":"e73405d98bfd830e1578cbdff8acf396c3bf46ea6d05c8576a7ad955d46f09a1","impliedFormat":1},{"version":"d0de3f5bc535d1c0dea64ff127625678857baa40e55ddbb0c1cdd4bbbc2dc843","impliedFormat":1},{"version":"e86430dfbb32ed05b21919cb2337254aae4fe9a925d1b884e6a981dd42ed3e9b","impliedFormat":1},{"version":"36f77644adf228d1d67c74a2705256fa2c32c6014568db258add231fd421ae05","impliedFormat":1},{"version":"14d4d2270f154c3a44f50cc90f46b8468ad2e3eb8fae1a1def76a23f2672d078","impliedFormat":1},{"version":"19a6e43bc3ed4d45cb4bce9d43c092ac378c9e5ff5aa509c74766728265b18c5","impliedFormat":1},{"version":"5b448bbeee373b368df4895eccf9e5293a607e0a64518c566506cbd9720fd714","impliedFormat":1},{"version":"b4fe692c2f9dd13c7bb7afc7d39b920a82f3fe94cdc78447df99929097d82f68","impliedFormat":1},{"version":"c9ad6aff07a1027320b9b587eebc4cfd484938b3ea063c79741c2d853dfdc8c7","impliedFormat":1},{"version":"27c79bdc1d86b8fbe1ae056e13c685ae1c882c78c93671bd9184cdd6d17a8701","impliedFormat":1},{"version":"8cac4a22efeb7b07e322532b74245cb6807c2ec51905a0fdac27f89e4e59449b","impliedFormat":1},{"version":"71403bef94e9d0eed3667e5f21128c093a68c35f23b7c67f2e123db76616b0aa","impliedFormat":1},{"version":"eb375221c3493ea0fb63ae4f7f713417163eed0faee233b146cbb1251fd99ce4","impliedFormat":1},{"version":"6a0f4a45c57c0a61dca4e281809a9edabe07c3ed3380f6600b22dc3110fd4f30","impliedFormat":1},{"version":"37d58a733315326bf61f3f712d18f7f6c596aa4db2cc05744e7c1a4c868ab76e","impliedFormat":1},{"version":"675c9585e8693598dcd18f7ce6d0528252929c39594fba21eb69440711d5e0ac","impliedFormat":1},{"version":"e9c15b894c2a05dab7b20edbabf6028a2cc3aeeeb602a3af74e16a18c45f187f","impliedFormat":1},{"version":"6c113b87547d00298295273e422640a75205a87f47d3ae824daba05789b7b6eb","impliedFormat":1},{"version":"a74043ceac4318722687614a4d3a6202bc53ff76ce012c772c0f9d07fff8231f","impliedFormat":1},{"version":"c458af48e5f3896bcb9f52f8022a0bef24986fb38d01d05f4effaeeba3f0d56b","impliedFormat":1},{"version":"22fea42135296a4d4919a7e11c925555c98b42009a58792b1846cd3c1da92e24","impliedFormat":1},{"version":"a6350ce53a66737bb204c5ddd6a7de594604cc6518333b7e07874441efd6e924","impliedFormat":1},{"version":"3f124fb1053e14ddfab04f03ad97cef153d927ed35e4b3dac1a1449bbef10710","impliedFormat":1},{"version":"acb741dec0b2ef10872bbc1bde3eb7b83155e05aee1bc06b5b3ccb45c20ed5cb","impliedFormat":1},{"version":"7cb32c1316ba1d78ce9dc6c2b74c8ed8bd36b8b31b9cf0c46f38771b40ebe733","impliedFormat":1},{"version":"6ddb7b0cc14a3219d68c259d28d4c4c54618543dfefb364e1b6944d3c22d7cc5","impliedFormat":1},{"version":"805ad750715cd7a4fbc8a1bb6c3a5f5c2c33057d9eb05454c8129b6d0f602bb0","impliedFormat":1},{"version":"eee3f61691a1d35e953cab176a1b0d520748050c322dbb4f342d4092c912e682","impliedFormat":1},{"version":"af43927ae64055f8a3013c48fe1d248d45a663af90b3f5533f5f84149dee2de7","impliedFormat":1},{"version":"1caea56d82316140586982715e53fe6880283bb3ee714326b08635d6360ce35b","impliedFormat":1},{"version":"5f813d2aa616f095a97f9e14f2763f7f34355dc217b3db95c14ee5df57e9adc4","impliedFormat":1},{"version":"db2a1d9c04e28a5b31984620d3bf935eb20380b948ca2b42441d9603592d5e41","impliedFormat":1},{"version":"b1e5025517b4393cbf73152f105c86deccce9baf6fc4737b4718b604b51bc220","impliedFormat":1},{"version":"f77e21b48ee706e7c8ba457ad47172b0979dc3bddf55ecaecbcdde2a3e23f64f","impliedFormat":1},{"version":"78fb666edfe3834171c0257c51b497d027db88419446efddef5c91e932012b3d","impliedFormat":1},{"version":"c9100044a99bf6466effdc7a01b0aaad35965c5be87261506d35a2c7189c4922","impliedFormat":1},{"version":"f1d4b6e1b5c453154f5beddadd94ebd4222add643325cbe057d2cbc0c553bb9d","impliedFormat":1},{"version":"c38d727d56df5c4b1549395c1696c4c03f1f574427cafb0337a1a18278b2c986","impliedFormat":1},{"version":"e95081f15c2c54dd340899c3332a668c7758edafa3672b7109223152360d799c","impliedFormat":1},{"version":"4fb99dcae163cf4e21ad4ab19beff69f63fb4f5981e9c745f5b5c564874d99fc","impliedFormat":1},{"version":"038961cb54eb0be7f085a1e30dd20faf524d48fc23675dcb3db4ee3eac034f80","impliedFormat":1},{"version":"7dda631b83bc4989182f0908432c6df09b047cb86f32d6df6886b334f991ea25","impliedFormat":1},{"version":"d1b26aad120023b2957605d6a9fbc010d31e885edbebd38e47cfc444bce0acc7","impliedFormat":1},{"version":"7fc96e71b477668876d461fc7b18399a7e51d120be63a2dec7ed9beda32e48e2","impliedFormat":1},{"version":"c14703748257111cfd7c8c9616fe0a31dacb94614e077c1e09e671774dbfd4f5","impliedFormat":1},{"version":"42ee88f8397b5e19a05d4affb8b1932b89cbb1efa031d36bf6e4be7cc5ae0682","impliedFormat":1},{"version":"011927550ad19fd9f8f4e8730b9f13fa812370bb4c0a008d881e7f7851af01bb","impliedFormat":1},{"version":"b5f9300b3a436abb9c934bfca2954538cd899df7f8f5661882d7bd375684291d","impliedFormat":1},{"version":"d44507aa5c9d0eae9fc48f43647f80cc61f0957e98f5d12361937843e50b4206","impliedFormat":1},{"version":"d8c6090a1f15547cd7e552259e8bff92f944e47254c9fe12944708865c31dd49","impliedFormat":1},{"version":"82eec7dbbe12796f22ec7f2c657587b0c3f1bd33cf64f8acc153128270234c61","impliedFormat":1},{"version":"430432dd2d03e68d4a63a5c30798c620ed72f75aa6ad4e29c0142e1bb08f9d1c","impliedFormat":1},{"version":"da5c8ca4cb8d7a8a0ed6fcc0a3c8365bfe3a5615b9e2e467c8fba8913e146345","impliedFormat":1},{"version":"f4334f2f41c9794a3a788a5e729975ecb7f633e386b1f67b5069304ff89dfb21","impliedFormat":1},{"version":"5172443219cd184bac82229f0c642086804bf5b06630096a2b84c405252bb42a","impliedFormat":1},{"version":"bbd3d5722948595d28a833ccc53885ee52ac030c6edbdfd8d9c770e425fc81db","impliedFormat":1},{"version":"377e259a718e980f10404d44ae851bd013aa6be682c679c0c92179c1d9544c17","impliedFormat":1},{"version":"55a2fba2b19614b2098fd4965d82e3713478d3b8c01e6906e1a41126b7cae178","impliedFormat":1},{"version":"01e2fd627d77daae22caf23b7278b312068247b1eca2d5525811d897eab81114","impliedFormat":1},{"version":"49c16db64f843efa76ed2c8a016656f7c41e06aaec38c90520e456f9b1696363","impliedFormat":1},{"version":"89225b3cea574029a9633a676e3668aba8e39edac11657eded2f3c26593bbff7","impliedFormat":1},{"version":"3d4563413d892ed576ce356e67ba788f62c2071dc9db1059c756084fecaefd87","impliedFormat":1},{"version":"3348813c4bc4fb7ef254785fb0e367a8ea82aa846e16ccdd29078cda4439d234","impliedFormat":1},{"version":"b3903a8e80e8c075198e53d8d4d293a7c53895505c2d97f73cfbc027c3c34db1","impliedFormat":1},{"version":"c6506bec20c1863308817db6fc90c53ebe95882518d961814a9b94ec48075e13","impliedFormat":1},{"version":"c1d5b110c02acea78a30901d20c0683e4ce934cfe1b0572f59142c36e41f1031","impliedFormat":1},{"version":"7c5dbd7f842a5d3378cbe4599b248490598ed378f2c2a763a431fb32ad91c1d0","impliedFormat":1},{"version":"483e0cc66a93c1320ff3832b52dc3becbff33419e17f47222e17d835dbd591dd","impliedFormat":1},{"version":"836713159716df627e4d934e470ef5622e4f887c9d7df5cb376ba5110188ac38","impliedFormat":1},{"version":"83273282d883d119816469cad0f85ede27fb5e8ba6fee8d488bcae9d55fa41d0","impliedFormat":1},{"version":"d440f2505280697a5ea212be8664f89c303e288b69399952a46040f22cc5983a","impliedFormat":1},{"version":"3ea9995a5fbdca7144ce8a43f153fcf26bcd3b18cd2fd5d9a08812d7a0e8f196","impliedFormat":1},{"version":"b69814987550ba65bc9a52cd455fcf76e5c84ecdd5ba28810a1f52cd18667173","impliedFormat":1},{"version":"cd24f2fd347f099d476870c346c6947960e2127fc187fa51baef64832edf8442","impliedFormat":1},{"version":"14c468bcdcefbb1e658ac9b6e5c2260592b10803ebe431f8382c0fbe95b43d2d","impliedFormat":1},{"version":"fd3a9d79179d670b3987b2e02f757865736cc1c89647b2520ed2266b0485b7b6","impliedFormat":1},{"version":"97b62f26208281c3d4b54678fc341fbf4cbee48bf686ddaea8fbf930939951d5","impliedFormat":1},{"version":"6328bf4bf7508791ebb0861bbe6a0e119bf1f90db61f63d25d91f0a388b0d427","impliedFormat":1},{"version":"f59528bd35be2297f4e76c0c8346b5ccede25621545dbed3e72f2f8b688c7c2c","impliedFormat":1},{"version":"ba52619aa431adab1288daa56dc61d51a39693996b0ca42aa4723624200b86ff","impliedFormat":1},{"version":"c8e98f078ba3aad0c5218f52d0bdff2f0a92bd7974711d8ce985702489a081e6","impliedFormat":1},{"version":"57474a710e6e1244b9e5dea89dcae9849d565528165921642c16d50d56193b1b","impliedFormat":1},{"version":"c90500c933dfac6dfd695a731518aa1493a5d90d6bb3c07f6b7dac80a8551bed","impliedFormat":1},{"version":"c0b73a15d3c93f0ee637f98c78022f9fb4ee77f71c81c74fb4d261928fe38420","impliedFormat":1},{"version":"5138fa8b4801bd493f19543663bf1be0d2dd4be9f728c6686bf09904b7174073","impliedFormat":1},{"version":"d4d13a227f5c194195d4ab24c0d1838059e7cfb23ff8d268ac489904d096f07e","impliedFormat":1},{"version":"334edfc99c6cc4edd65dd576618f45bdc9ac5d3c88c4456d3a847e96b9da5f0b","impliedFormat":1},{"version":"320512301dabeeef182236f77f4775f59edc97d1803f4a1d9aa1e6377fcf9530","impliedFormat":1},{"version":"da484dbaacde583ce16d4d1cc91b3d193ffe956d0aff0fb8b97ea3ad51d96eae","impliedFormat":1},{"version":"94f24253e14ed575ee5d23f3f5a91d83ca3010ce4275e845a7bba83f8d88cafd","impliedFormat":1},{"version":"ca0d01e60b34f55acf6ae56830eb271e39b70d8460620f9a5adc79910c5a8bfb","impliedFormat":1},{"version":"e34c26269b754864f10838fb065a484871ac68017931b27f482f27b6baee32b9","impliedFormat":1},{"version":"d70ee53826a86c6aebd270f9fbbb2b5f09353ac1d020f7fc812f0b82e3f87776","impliedFormat":1},{"version":"2783a05d40feb804b7e9f225d8fccf3bceb5cb40283ddff7abcf5579947800bd","impliedFormat":1},{"version":"6154da6989ec5e97da27d66e2d24c386cfa031e90ef0816edbc2f7777db7c3fb","impliedFormat":1},{"version":"c52bb095ed19ff2c707ad4fe47d39ea18dfa609529622c5dcb4e108e03291bae","impliedFormat":1},{"version":"eccda8aa4ea83ca4c3fe9634bb01ef5630425fa0e745f0755909a1ac4114d545","impliedFormat":1},{"version":"3988902fc59a072955a15fdc116437665aed053c853f16215a4fdbf9f518f884","impliedFormat":1},{"version":"de7e4787127d2a5ccaa96915e1db607a9f0d35bdaca36d966761578e744b72eb","impliedFormat":1},{"version":"4f3d9ce7b87bda2e2d49d541f2c2af87244f4afcb2554ed0455df574e32bfc52","impliedFormat":1},{"version":"189fc65a1b2368a198406c58bcf910c048eca480c934d0bea5cc6dc798b15a24","impliedFormat":1},{"version":"7ed5cdcd8f006ddd21f3ffa9d1bda44b24ded882c7f371502ae79a2dd7bc11a5","impliedFormat":1},{"version":"473e50f13c262e90872e2f81f7789bdae817208c3cc119eb59a582a3b56955ed","impliedFormat":1},{"version":"482196b22404fefdfa8b1871b5e764d0d19111c3b63b6336d860515a29d7134e","impliedFormat":1},{"version":"fd7c17dc1e9baeb49cb51d8f231862926173d6377fe49983b67c87e4d5afe2d2","impliedFormat":1},{"version":"f2a736313e2e78e675f91c1dafbe354b47c125e0c773a8fbc66327462a099e94","impliedFormat":1},{"version":"c0a5489920f12f1f8f7ee67633930e2501d6abf08523feab70032cf85feba74b","impliedFormat":1},{"version":"ea26e32d12f87ad681de8dee0375949d404e25786ae9397b2cf82e96133deaa9","impliedFormat":1},{"version":"a408f96b38c221219d3248874c8f87ef5ad8d0075692f7e7ec47ebceb7b940d0","impliedFormat":1},{"version":"aa8cb5b13d595fb39388fc55958108520e24466262dc8ba95d380922a039895e","impliedFormat":1},{"version":"1515786ed59494cd5b6aebdd6c3ccffd03ba3aa4a8667b8209edb5682349723e","impliedFormat":1},{"version":"bfee734ab11bcf0fa631f98f294b9062a3ab3e13fff6698854f657e5352c764c","impliedFormat":1},{"version":"005c63232827da5492cf12a6723e201891df0059f87f4d26a6e709c638066bd8","impliedFormat":1},{"version":"ade588c17d5b137fd448beeab2dd5278f875f16b368c6161c50b2fb5bde14e77","impliedFormat":1},{"version":"2238988273c33f02bf018867db87e1d66c723b68406e7325a1b557c3b7bfdc4c","impliedFormat":1},{"version":"791cd1482bc833c128c773f3743a5f4bbdcb905f02a60cda72e11e28bf557e51","impliedFormat":1},{"version":"567137cf8b6cdd6f9a67b95107c87824549a6430be80ea2779f4b57fd6f0f2b6","impliedFormat":1},{"version":"3007b021497170be5b1e23b81a635fd4cf62402b1e173e5f1d35ed7642c99663","impliedFormat":1},{"version":"01cec02a5b47745a918b13a98a5d6922a7e272f1eee880d297508ae3b2ca1e9e","impliedFormat":1},{"version":"78cd2588d35c53f53eeb1f681450ebc29b070f75bbea7eba9ff53806053fd7c6","impliedFormat":1},{"version":"f98798e9e3328fe34d6c1b45b2a63565d7ff60e00deae69e033ef4f06eaa742d","impliedFormat":1},{"version":"dc52bd7fe763b22289b8a79ede7a895e9c37073598c53b91ee4985fcbc9eadbe","impliedFormat":1},{"version":"3f78fd3e1cb68f1cab6f13e9c35c7a0a0e0445678e9df980b125f72bde1360c8","impliedFormat":1},{"version":"e255471f1cf6e57e8acaeac06f97855b4101df27791793f8b134419266695e56","impliedFormat":1},{"version":"799cba2259f98e8a76d59f0e43cb2d7a5ffe91e577dbddcd2458073827d41be5","impliedFormat":1},{"version":"acc022f1b5ec22f8de46ec8db78e256faf58b433fb849c3c1cebe731e9279045","impliedFormat":1},{"version":"c915590796db3a662597d02bd8e31b32aebdc19a2cc471cfdacce11d06459eeb","impliedFormat":1},{"version":"2ccdfcb966d13353be69713de9b2822f2c24d6f9f8e54c4a4280c7e2cdef88ea","impliedFormat":1},{"version":"0e1abbbb1e85e05a7f03a13d3142e1e3132a947dd21266fbb9329826294dab01","impliedFormat":1},{"version":"7f0e99f7d3aa65e11b27550497bd88cd5accd1eba8f680d6a71cc50322e65821","impliedFormat":1},{"version":"b9b5c10b94a500a9a8693c1e796ce9ae29bce8b289970b34b12505c9fcca807d","impliedFormat":1},{"version":"6ace9c382c99c8533163f713466d4e64ba4a83a13bfdc80ff7b51af0bfa5ea31","impliedFormat":1},{"version":"63b95e38f05b067c6b8888b4007ef0ec7ee2044a2d310dd63a4f4869d4fa1075","impliedFormat":1},{"version":"a95205079b74d9b09f49f1441521b3628e9c0182995ccf2aa1704d7bf1e507f4","impliedFormat":1},{"version":"91dd52a6bf4352545e2af8226982764603131676afe7c88cb6b4123de39cecdd","impliedFormat":1},{"version":"484a79b0fb198b606d845d00ba65ee5edb2cdf3e7e52afdfbab205f8fba70b51","impliedFormat":1},{"version":"70fea24508bebb7aac17bd255e0832764c8213374089c68240d953927727e47f","impliedFormat":1},{"version":"a7a885eae7a960562336e56f1d410d68d09cee4b81c1f16e3783bdf87fe92c49","impliedFormat":1},{"version":"13271a9b44a2bc9e2215d8b3baba7e5fdfa57ebb5567ade286f05f3925d74aa6","impliedFormat":1},{"version":"2a49e071a2d8311f5a0389054d747cbfaa15ce5e8056da208db9fba730d01e76","impliedFormat":1},{"version":"d124d90882cd21314eda30ab6527f010d6db39c6d17b84764f635e40adb10e55","impliedFormat":1},{"version":"e7941eae080bc46755b0f5659717b9a79d4f572644417bc4c69be30df71e2a8f","impliedFormat":1},{"version":"1cf646978b38da92ac78c7f52b517733f8cd4a1e05ef6feabfc97ca68052d844","impliedFormat":1},{"version":"2697007341188e716e517b3c83bc2e5086c5c3db7917f0a62a9e95567fb9ae16","impliedFormat":1},{"version":"785ca1d5fbc189a0a329c23bb7684be4280fe29f0373b1bb4e0031248b72e688","impliedFormat":1},{"version":"8bb6a09c8dd7ce50dbbb86b38c930d433326ce0a912d110616d507cb20499e51","impliedFormat":1},{"version":"36bec2911fb394f30e342a47852f9a2148dc804953d60392335b8f1c7887741b","impliedFormat":1},{"version":"fd70db1a08be5b1273b4e89a0c17786fde726f3f6fb6f3ee02c118cb18493fa1","impliedFormat":1},{"version":"256e68f4723cfd8c7f81491335deb03aa5dd10df12281372ea6b4c21b4f5f950","impliedFormat":1},{"version":"bb820018a23c4be7413dec6c68eea18f9e99142cc86d750cd98573df91685f8f","impliedFormat":1},{"version":"c924519f4b38e2a25722e33f357c9f20c6864c95ba5b438526aeec9f8eecb3e4","impliedFormat":1},{"version":"cb792abd517b8b7f9720063e7faba2a9e254dab67ad667714cb8668e2b36323d","impliedFormat":1},{"version":"7bb4a5d3c8bacd87957ba34335b386111ea89610d4f9f97e38716121ad5654c9","impliedFormat":1},{"version":"5bbd0f968e38a523cd9aa28a94a6dec87c3968de309b8a3a75554f8896062c04","impliedFormat":1},{"version":"3f531db2bc0dec4fca34271b4ecc3238926915c549854a456a7da5c453218770","impliedFormat":1},{"version":"8d8f8f6c87c28294dab9f2cd736ac4c7afe7921ff247b795a0d962583dc9f848","impliedFormat":1},{"version":"438e9cea2aa1ec8412e0979bc63ed33469053c77eb8c340770685b24a99eb51a","impliedFormat":1},{"version":"7e99d63d0dd55f56123ecf8025f0735e1a19a0d8f204bfbcce2b03a920a3cb9e","impliedFormat":1},{"version":"53d75b90d4c58807f637f1c736805658c9dc951a878e1223fbcd92875fc4c832","impliedFormat":1},{"version":"7caa8c19d972dc3137d1f88efed565a47729a29f594e9976bcf91540e99ac653","impliedFormat":1},{"version":"14253f38e871999b5a947c28fca35062f41aeee900cfcc307ed43da77fb95ca4","impliedFormat":1},{"version":"3040a96528c7907eecf6a1a499eb8b2ab6b2d2b10d91b03f16a0c02f1ee6e4ce","impliedFormat":1},{"version":"81f5319d0086fff1e094f52c8314618d7a0cd3cc3552eb984e9f7f3408e718aa","impliedFormat":1},{"version":"197567f42c461bb0065bb20f9747100c5f2d8749bde3bb01a56adb6945182669","impliedFormat":1},{"version":"a765f148d2b8604bbd6f5508b7fb6ae88925755e9f90bca57a35599d72d68d63","impliedFormat":1},{"version":"9e9ed2ef5b97ec1f5773ac755d62d4ffcfe4708662972368eff633292c0e2a05","impliedFormat":1},{"version":"c057749dc14fd145b7d64962cf46d0d473dcc04785a17a0647f62356d9151d85","impliedFormat":1},{"version":"506d9003001907e8df89533ca909905afaadc64f8a892b00728c1eda11034abb","impliedFormat":1},{"version":"56108ff6deeed7e598a84837c93e683f1bad8f3476cba47cda972b398c0b7ee3","impliedFormat":1},{"version":"9a71cfa4957fd4457cec472634618fb1bf4d756760a51be5b9dfc1d091ec8c60","impliedFormat":1},{"version":"49401c6ce22e50526f755faf4415491dd1ecd11888081854d7eff332bc65236a","impliedFormat":1},{"version":"b6be50c7d9944056531bbdfef84eb881f02e1ec0df930177c249a78915aa5f0a","impliedFormat":1},{"version":"f116f6f4985528f69f1e21bb45f84a36e1f6c56888d1e2032bee01e476a88765","impliedFormat":1},{"version":"d9f0a22b1893cc258acc87317feb882341b81e9fefb80674e0a9434a921367e7","impliedFormat":1},{"version":"d90a41fd067924be258b5a10f211259ff6b9bab5f40cad0a2e0e35de17c92c61","impliedFormat":1},{"version":"dcff1a84309aa17f125098ad3169028e01d47a13f6384b6b3e3bc69f2f8c70ad","impliedFormat":1},{"version":"49a175fc0d84324eed060f004acf894e059b800a7ffd5ae4b662ec361b6b06b9","impliedFormat":1},{"version":"5dd3a07f06e6a572ea1de8c346f27a7c67d93e73238c7f4905d25f88016b186b","impliedFormat":1},{"version":"a5cb5d5eb3e3a18065b2d9399419c71162b6e1a2d26ed3e0a7908a227b7bb1a9","impliedFormat":1},{"version":"b184c7b32154b9b00ac84bc0f84ec886c022c723038e58fd12fcb5361c6315a4","impliedFormat":1},{"version":"b99984e3e1a2632563d7e413d5edeae4ce9ed04ba9aff778b7748b470ac51500","impliedFormat":1},{"version":"a17864b898a463c6cc13175896d257282ab86d54eb6349be0dd90e430ce8b84a","impliedFormat":1},{"version":"163711fa38f94901d9970552cab06cf7d6e671b840f70b1b923d83af5186e48f","impliedFormat":1},{"version":"2671c9b0d92bfb950acfa92bc9377d36776c72409cde35709b824a681d4a528f","impliedFormat":1},{"version":"0c67558fdd8b024ac86d230a288fb17b4071f760600b67b7397b656f53898355","impliedFormat":1},{"version":"fc1bd62cee8ab032c6d0afaea09e8767f65753704d437ce2fc8ca61caff1acf0","impliedFormat":1},{"version":"f0ef5ddec0dda7bb17fb0f82a594d29cbc53cd90b7a09dd537126f4f92abb594","impliedFormat":1},{"version":"c465a10867f9d9eafaf909ed899f5b3157ddaee20163c0d88dca0b8e001c5f15","impliedFormat":1},{"version":"05f24e4b53cee9d2cadf3ce139174bfecd46577c8feaa9ee8913567c4d30dd1e","impliedFormat":1},{"version":"7b9acbf8af6a1970733c208f27918e5fc1c7211fb4e96b315a102ee5881ce333","impliedFormat":1},{"version":"c109f2fc912969c6fe12b6fb922448dd2949a433c06dd98538e856fe1f4adf3d","impliedFormat":1},{"version":"3f150443cefa48597fe83f86cb27bf811b329ea663685dafb434b080d9bfa141","impliedFormat":1},{"version":"2f967d1ec939c711122c1b6518ab8e041c3966d6ca5e3c00b766576d328ea829","impliedFormat":1},{"version":"e6d9ec79591572f0e63ae1bb46e4760a3fafe25e0c6693c6366671cd194ba797","impliedFormat":1},{"version":"ba3b1c2ea15538510ec10c01745c92763942cf41cc9500b795cd02a757e3c334","impliedFormat":1},{"version":"44b1cdb06a2ef08fd4022c80eb37f9c050233908a870bac68af4cfa0c18fc551","impliedFormat":1},{"version":"a802f214ef5f3af95560a795cdb1848de0ff638d35df57e69bd5fad9b38182eb","impliedFormat":1},{"version":"fa2671617520bed6a9f0cc62c1e783ff99f9b96f1ffe9860ef04db226c690a76","impliedFormat":1},{"version":"da769d4f2c4c3e503da0f90c6c6c1cf96e66e134fd920a30603af3a0ab0c37af","impliedFormat":1},{"version":"b98ac9ed4990136c228536e647947d93fa022030a599bb78907a39a2c28124c3","impliedFormat":1},{"version":"96e536a94e746fa21b9810feb36f7131d2943b6459431f6a2ff14875061231a7","impliedFormat":1},{"version":"e5165e793aad2dbd0b103abf740c5e02fbc633fa297d34366c50dd61f27eb40d","impliedFormat":1},{"version":"5816c0b7e6d119bdce83986d4abdc2de4ed97cd006837b2433e247aabb85b7c2","impliedFormat":1},{"version":"f912237da271d36e18c24926e76f049169c15151d66248c76e07690c2311781c","impliedFormat":1},{"version":"ad89def46f358700f8bc63bbc649452faf1b3745c0f9171799c86119cab99324","impliedFormat":1},{"version":"e273198d11f77fadafb185263aaf7b65bdd55513649db096c6b5be36eeb2da8c","impliedFormat":1},{"version":"03e7528289a45b3e210cc4b91db298e35ad6a49759f14701a382f8eb17b5ae7a","impliedFormat":1},{"version":"ecb1f8ad77d99c161e890ac9bee64c2a0cbd554999554965a9ec970a01e0a0f5","impliedFormat":1},{"version":"b2063990c387517160b708cef272f3c7262b3d8ed41ea3f5d883c399dd612813","impliedFormat":1},{"version":"ca957f65dcfc7908ea56625fdd691aa6051d85a72169cb5ec59a1e9c73f0293b","impliedFormat":1},{"version":"0eec3618eddfe1cf32168a3700fca5f8b36aa4819f661f8faaf1bc625fcb4b3b","impliedFormat":1},{"version":"838a59e8afa6092870d5c619ba7cb972b526995e3886f61bcc8df1fc6314ce4c","impliedFormat":1},{"version":"24d13f461dd40ea9c96959c69306bad93bd347434536245118de76df353db19f","impliedFormat":1},{"version":"ed420587e6b347301823ef7b3fc834f8ec92d9db76d87abc4fce0368e9031707","impliedFormat":1},{"version":"98ed72745fc3dde6679dde0eb6c52973c8dcef6871b35bd9476c9974340d47cc","impliedFormat":1},{"version":"649d6c75be3902392783027595f97398b8e3554a194be3af73cb64266aa44cf2","impliedFormat":1},{"version":"12c9629a28dbec3cc9a7bfa683e26be0db6251e5546a47119ac7128590e04ea2","impliedFormat":1},{"version":"1d79b9a1c6c1f6340a1ec4347bd0a146e6a6e1a2ed5625632a33e28b8981424e","impliedFormat":1},{"version":"f24e76ed05d237cc099af89554bec19597511277f3204867814a0bd68e59f99a","impliedFormat":1},{"version":"d40724df2997a5cfaa63e62c0f287b05392e79bdb418fb463f7399188530898c","impliedFormat":1},{"version":"271ba6a0eabc3dc83919afacfbfdc9e6d0e68ddb1ce10d68eb21037c0b5d5d37","impliedFormat":1},{"version":"15fe59af51ef8c5103b2d5a49597477d8591ee8dd28dd269de03f4c3ea32b8aa","impliedFormat":1},{"version":"cca24159dca0c1d480512b48869ee26685621fb20bcf51f2914ef18ec612ca12","impliedFormat":1},{"version":"75357f336becd093dc37428e4a0bcaeb8b314a2c27c0bd1bbdff70df8b76f0d9","impliedFormat":1},{"version":"93f25bf133cedc28065ef2a13234625f43ca1dac25a97f883b1877ef9bb466f9","impliedFormat":1},{"version":"492cf1cd749e59c573e054887e3ada9c261fdc1f4b923c18c03b937327dcd149","impliedFormat":1},{"version":"e95b632821648b732d27026d3279de685766d3b09f706765a0c9e527c0642da4","impliedFormat":1},{"version":"314580b532bc8a9a7b8cd79bfb478e5971ab2a4c82f011e7da4f35f43e7103e2","impliedFormat":1},{"version":"fe34b0fdbdbf6abad5425e28c4add5321670f5d66bba3097a1b30db718233bcb","impliedFormat":1},{"version":"286c9abf7c5d7fbc8b8312955574a9d1af6f45fca1b6ce8c090d7c39bf17dc57","impliedFormat":1},{"version":"68543b5e13a05824bab54f8ed1e1f008f028944fe38793708b0936169569ed73","impliedFormat":1},{"version":"8c74bb7a27c4ca2f324a21c048953a4323d10e4794df2f244a2139fcb6465507","impliedFormat":1},{"version":"7c53b373c14c7baf9ae4ecb2cee6bcb9ff39bb1f38dbf8aae6bfb8ea6e237a16","impliedFormat":1},{"version":"40bcadbd3c52e7bff58fadb5908216a8df7f243988b54c27cca08ea9ca11ee54","impliedFormat":1},{"version":"bda0b6fb7ffdb4ed3e4ccfbabe7272c2e96b7668588790c2ea0061b3eb3d7720","impliedFormat":1},{"version":"3abcd3d76aa04201fddb57a4f1e676d849e068e5c11a3173dbe477bd97e84fc9","impliedFormat":1},{"version":"6bddb8dbd51e715835bfa63d9a163f555ceacecaf72f70a5f05469c0605f8d11","impliedFormat":1},{"version":"7b77a3b6fd646e6b7d410a0a15f3d7f7ca7e7e8f34dab5fa5b4e89710c47e54c","impliedFormat":1},{"version":"daa441d7c8511468c628834d2dfaa49906af1b010f2a8bc980d73eff139dcf31","impliedFormat":1},{"version":"031c3bd2799bc5253e445c1f7581534667f6c718ae09e605616be52e0ee33984","impliedFormat":1},{"version":"3bd2fbabd318a34e61078c3b43592465900731a1d7c7de622990ccb36128dc4c","impliedFormat":1},{"version":"b9bb5597e22acfef73e6ada6a167dbbd97781eba450480643de97b9115fe4314","impliedFormat":1},{"version":"db35c59dd6e4d0f8be73d8eb0b04bc070261424b86591a0e12409f14b5f6218d","impliedFormat":1},{"version":"f33765e174adff61c18cbbf7f65721b215e77a95f4a05a7844f99d64504910d8","impliedFormat":1},{"version":"771a9c9bec9ada101cd82381870c3129b7480128d072ee3fd49a042795a1d7e2","impliedFormat":1},{"version":"e55e0407e0b5e8919743c0f2c6dd5b55077b25856e9293e08a65862ab6090758","impliedFormat":1},{"version":"29ef51f72fee06cb0abced7666f4924ca0fd13aa9fa2774cd178ba1d9fb52ef1","impliedFormat":1},{"version":"8165be9d7be7cd2846e4295325e5bea4b388dc6ccee9d5cbbe907fe68ec65f4d","impliedFormat":1},{"version":"4811ca40cbfd629619fe6d2e9e81fa0ef2ed066e53e2fb2309469301edd25700","impliedFormat":1},{"version":"2429107ff070393cd80b307c7d0bff6b38a93819c0cc438c156947123ecf78c4","impliedFormat":1},{"version":"f3fe13eeddc2506e3d319ba243b6353b2cc0eed0f77b516107f23051213cdc75","impliedFormat":1},{"version":"f06b90845093d2b7f9de92557874b460161aad0248b2358b082cce98520f6b7b","impliedFormat":1},{"version":"27822e61dbb9a39aea9957bbd8022365ef1c0c98ce7986971e8dbb15b489cecd","impliedFormat":1},{"version":"ed413a65d73321b523befaf2da5e85ebe34f4a764681d71391a8c02fff4e3c8a","impliedFormat":1},{"version":"e6069187a0c4e8ec9e7ed1b326bb3ce9c99838f3eb5db753ace913a88d1df4b0","impliedFormat":1},{"version":"3bedfb5244227c66763b1bbe26eaba48c266037c4428b7247905ebe3fbdbd97a","impliedFormat":1},{"version":"a132683844a5d6205ecc73906daa9edc9d0ce2fdb4090d8036a844adb41a847d","impliedFormat":1},{"version":"270112d1870b39c54d7f780149878179aecccc247ad60432b2a1286dd9c17e05","impliedFormat":1},{"version":"85b94d9b21025678464198b3965a7e1d4a6331c01c32bfcbad799369cbe7a665","impliedFormat":1},{"version":"0ee8f4d779001d330c6be4ec354b600efaa58c8ea7cc4372e080a9f85c4f635d","impliedFormat":1},{"version":"5cbbb943f185b911109efc46849164b9ee8348516160d9c86a51361a583a3907","impliedFormat":1},{"version":"da63e9e82f16e6910188b6566a977e1c82fb699b934b8de7964a495fcce1a91c","impliedFormat":1},{"version":"f6befc491d4e28199d0a6121eba4d52155fe5af6190c0cfe35c08a4c4a205b1e","impliedFormat":1},{"version":"cee8587804aabeb23ebb395ab7179be8b8ca85a799cda3924499eb22b57ce17a","impliedFormat":1},{"version":"5b977120bdb3e3ed59fc98e0a6673e5d62a3b226221085ebe909816c14b3254d","impliedFormat":1},{"version":"e07879021217c2cb185d14c03bbd730a6d00d18318d8219484e28f533c566b5d","impliedFormat":1},{"version":"f4480198e875435fb0abc300176ef665bb815b45c84e44c2cc665b507f37c2d9","impliedFormat":1},{"version":"ea53946eeb71eb9e8b1538241eb48298806013a432cb88fd9a8a74e65631a947","impliedFormat":1},{"version":"58067c1ba4f0ef7c6446e0c083b657475c5c51b9cc16cc54db0b6849134c3cbc","impliedFormat":1},{"version":"0a852dfeb198cb7feec80385d30415449fa9951fd80b58a217c93c893edf3eb5","impliedFormat":1},{"version":"aa3eb50309df932af70576ef3b3f490ed924f87d9f9a1bc7e5c8c646de4aa670","impliedFormat":1},{"version":"fef831bbd23724e341198b4f81160a2985ffe4d6e95841e76bb94609f5c4e7c6","impliedFormat":1},{"version":"f0694aef815b78bc2510f419152efc2425db26e2f26d684f82788d8ff515bedc","impliedFormat":1},{"version":"cf8c6659caff7bc4a2f46139605b13103dc07b26a614bcbbfe86ab63e8fd0ce4","impliedFormat":1},{"version":"0ba438fa0cb890c89bc3ef34f2369b6519569da0f4f74dcc952dbe6a6f693a4f","impliedFormat":1},{"version":"15587886ce4a4cab0bd6987a762e0a1d61a916849e05f878e8ba5903f46d256a","impliedFormat":1},{"version":"f71c1d7017e36567c9d433b0a0e97ad1b2d4631cc723537fe2932af7a35586a0","impliedFormat":1},{"version":"feabc657757996796070aadf6040cd4fd734398a3f731291f0ff583264866a55","impliedFormat":1},{"version":"b059819541ea4cc12b6bf7e3eadf14797db3513497a1102c01c242dca9ccc558","impliedFormat":1},{"version":"2eab8577b6feac533c8e0941d018924fdcbbe5d928f316d86f600ce36ac4ca45","impliedFormat":1},{"version":"b870b979db2173274a0cae6a279ffef23fc04b62eac644c9ba99f2e97781d13a","impliedFormat":1},{"version":"c7d79cbf5910d358f531368d8f056ddff8a1fd6e26459f814b02a5bdba1a882f","impliedFormat":1},{"version":"33004ef127a71fcb2fa63c684fc3952b7e1d9e2e12b56047523b45de456a9d3e","impliedFormat":1},{"version":"8ab5ddb34c3408306900d8a03f42be00a6fb62e93a02410587d8be3d8f79ea61","impliedFormat":1},{"version":"214da4c5e0db2939b3b6f9455e191c9b791c2598195fea6517399121f30aba7d","impliedFormat":1},{"version":"c0c607779bdd448aca785a898e3c574797cc975da223591fefbed39310706e0f","impliedFormat":1},{"version":"5c0c2f3daf6fd9aaee0118ae12bf01464e15bee2bf9a2c37a894ac6467eeab25","impliedFormat":1},{"version":"162b09ba322bbc11f09bc9df24af250f9f33fc147b39457287aefb1ec96e5d73","impliedFormat":1},{"version":"9b29488a57b07e38113840cc9937a3e30431e4d2de697a121dbb5b83f7571059","impliedFormat":1},{"version":"adcdf80cea7e2c23744bc8f59e715c3b1f190b7c62324cca5535d95560934a3a","impliedFormat":1},{"version":"f006af5877d20eb5464144922e32ba1ed28ada5410cec8f60a97e2c531d886bd","impliedFormat":1},{"version":"d783d04ac5af1fe68990e46f82b1e5aa270e3caae043eceb2104a80bb3639da6","impliedFormat":1},{"version":"6a3f400f8b891fb120bc0822075271b088c487a8e75ecf12efe3e84271653574","impliedFormat":1},{"version":"4dedfd8487cb9c77c550daa1b5c1b1bf3db8aa79feac7547d5e5639c83f40928","impliedFormat":1},{"version":"4a6a102e9be70981d942a83bba305de54652c867101b4cc30780135df898118e","impliedFormat":1},{"version":"9094aea97f9218520b2437b3df795db89d485543d0f44450d2038130781524dc","impliedFormat":1},{"version":"13d516bc60f3426d32d1658da1c6af7a61622fc78c76948f968e075c57017e23","impliedFormat":1},{"version":"ee28cf41a4e77a62cbe7522286cc733bed6b1e53aa15751699f722cc37f3f60f","impliedFormat":1},{"version":"b6b06256083e40981301c1f84def31d8460dae073f399c8307506dafce89e231","impliedFormat":1},{"version":"8eca26cb0c8ec8b46a005c163c2d4b680e05ca259b7df6a87fe595545affa461","impliedFormat":1},{"version":"c6038390e389f55f8a4251eead3631a187099b43e41d18cd1c8242bcc07a9d42","impliedFormat":1},{"version":"2836fb5b9ebfc759dce9996fc85b53ca82033c85ea499486f74069e97d6ab2d1","impliedFormat":1},{"version":"175f7e22d5463faa96c897e38fa652ddb39469d008c402979940d7300f4bdc1c","impliedFormat":1},{"version":"e56ec1f58b705684154de225c813dbadeaa69e535f4e083d513c6b0c5af58cc4","impliedFormat":1},{"version":"a43ddb23a2940dcb9232c83456eaf1e03489b0e196a4d659567454157500545f","impliedFormat":1},{"version":"b39a52d6dff44d05eb6324bfa9caf93b8b1a132bceca2dbd63c90aa4f65fae28","impliedFormat":1},{"version":"edc66d17042f63efc4ecd081b845d680f682afd7562355baac535493962abf85","impliedFormat":1},{"version":"ef2c4558adbddd2c93ebc528c42f4addecd70a902fc7d4c78d34ba68851fc4b5","impliedFormat":1},{"version":"8a728c2da35b4e977fd8098587eae11d160525909e8aac877da67c4810724503","impliedFormat":1},{"version":"b0f3c445f7d386090e93fdcc85465e27f576c03fcae02e2bbdd7baa2381af9dc","impliedFormat":1},{"version":"6da5250e325b1cc9988f3e3d15363ee80dca8a747c704d1e196541eb226d5d22","impliedFormat":1},{"version":"f11dd402a28ff5f4a30712c2079e4204e19d01e1f08695912832d1e360db8fc3","impliedFormat":1},{"version":"f521354da49e3b29fa06d1c5190af40f30beb8862b1c99a76ee81350f9172bb3","impliedFormat":1},{"version":"d4470097125dcb45b1db31f793ddce7f732b9cc9043fe00df8ff7c43ad7280ac","impliedFormat":1},{"version":"3f3c1b38c7929094c29f6172f2510f9c98fb126afd49ba1680b1b96d1c715d22","impliedFormat":1},{"version":"0fcfc625bb0262bf09b503e2613206cab46d75d63d92e95f17d55bc8ff6227fa","impliedFormat":1},{"version":"06be3f0bea7ab10ad9d4e6a0c539fbf26adab16b3c1a4c913ea701121af939fb","impliedFormat":1},{"version":"dc202c0671b29f3df1e3998c2bf4b7a639fbc6db76fd570c1a9f911dc419fade","impliedFormat":1},{"version":"f79bd30ef9869670adff581cb5b7d4c59145193a5fa667054aa079b8d0a85b03","impliedFormat":1},{"version":"65ccaf614de8c6b4ba57a9851dbfe74f63129c11b587e78430a5d7c718c2898d","impliedFormat":1},{"version":"c3aade21902d52979ba5113a2dc080115812cc74f4b0a065f85cfd25912ccbcb","impliedFormat":1},{"version":"aac4e75a15487b73bdc4cec20e4dfbfcec19815458b7473147f526fa5402ee16","impliedFormat":1},{"version":"504694dc5703a6491e97f32741fa48f7a577dcefab40c1f0367d86f08885db10","impliedFormat":1},{"version":"86189beb4b72f401a67a98a879a4d7a910a73879782ff5c196b465e88c47f9e3","impliedFormat":1},{"version":"c0dff98923bac4592d0b1fbc5635c55396fd688b3f0b476145e62917799b2858","impliedFormat":1},{"version":"bb74c66b2ecfde13e2e7f6cd69137e21334698a520534efe20e793f7737088c3","impliedFormat":1},{"version":"1144569d374b4574c91419a06b08cf8aa9aae1c4f53bc2c1a1d6473481762378","impliedFormat":1},{"version":"a73751e27bda3c6160d97901cefda86c4724bdc3b5a4629ce5b971045f9415a2","impliedFormat":1},{"version":"7fe70e1f4f18974a260fce22c2356b4e340099f511b1831c01f93824093469ef","impliedFormat":1},{"version":"7ec1ef4fb53c0a0a5543edbd27e3df98afb3141daf5f757d8a7d95461a6ff892","impliedFormat":1},{"version":"6dbfcd405401eb8800da0d01fc3d7c0d898c27a44ad558efa768d4f0646fc0af","impliedFormat":1},{"version":"b853302adae7cd19b136cc9a4489f5d9a172df97301e9bcafc9cbb9442755f45","impliedFormat":1},{"version":"c53aae4e1ed725dd6051dd155b900d10bc25edc670c021e571553a3d007b574e","impliedFormat":1},{"version":"d10166436f26ba726b9dfb9f7c96858b77ca8755c892e3a23eaeadec9f2ece5c","impliedFormat":1},{"version":"bf84ceef8083db23fb011d3d23f97f61a781160e2f23f680a46fcf9911183d95","impliedFormat":1},{"version":"98f67f2521a5f48a21a0383cd900004a760f89261ee5bf19a8fccdafc04d600e","impliedFormat":1},{"version":"ce465ed4e2c9270d80f2ac29efb2cc2a7eb0aeed7c2f5ddb0249994f89a5ff3b","impliedFormat":1},{"version":"4e53fb88c4b03ddf71806d6955b6ac6a3883d39e50db0d422e12a1a565432aea","impliedFormat":1},{"version":"93f3da9c56e6e0232a34ce81451622ac2d6e74579281dc33f3829fa73b42a3d7","impliedFormat":1},{"version":"0b6a95904abb7e9701498f325d0f4b84c4aa2da42c82899f1eeafaf4b1c55e09","impliedFormat":1},{"version":"8fdf5ef0a71f098ddddb26bddfdae071a4d86c2f774e6f890e3054e9ee6b4112","impliedFormat":1},{"version":"99b204c2f62feb485e7e1a625be3b49c24a823a707ea483e0b6d0242284d92e1","impliedFormat":1},{"version":"2ab98155a1d1d402288e55f60e037da58f4c0671e154bb610e562c93c8df0680","impliedFormat":1},{"version":"80262bc800b2bbaf6878d2bc731c8a32d181033fae6b40927685116b128f551d","impliedFormat":1},{"version":"a09c6540cea2f059f60546e2927bc68e7f292e00ff89534c35e9cbf9cace7977","impliedFormat":1},{"version":"fb67facafeaa6a0b7e2f3abf7ed678f9342f868dc8751569e52ea79b2b5c8887","impliedFormat":1},{"version":"51c9fcd0ef27e83c449297013cfc6d847a56374a7039f2aa31f5026af767b1c3","impliedFormat":1},{"version":"463b64dbba852ac2962bdcc444b21c62683c9f9e622d4a4b391371ae7d271a56","impliedFormat":1},{"version":"b8482e0e037a0471ca13b47d46fecc56597bb79d12c3627a0560740f53c6f5be","impliedFormat":1},{"version":"314de640e87784caedc6f8409269e7659613fffc7f301dfcb2d3f6aef87143ab","impliedFormat":1},{"version":"06446109b4c111db01455f3fae13c0faca29eec32fbce68cc30842872ae84c3d","impliedFormat":1},{"version":"a14f0343ea4f6b74fb7f799d5ee0a19e884eaf4dab85641217b677d2dd40c989","impliedFormat":1},{"version":"43bbf263ba7a49ad368f555ad3db7db281cbebd728c0dbaa2172a8deb0a3e118","impliedFormat":1},{"version":"5e2c524b56b50856008d13f5d40bed45d366afbede928908618bb4df5a31ad59","impliedFormat":1},{"version":"0c3132de7e17a66d970b1388b666ddfa3e65e58152996de6102b4dec88bff0c9","impliedFormat":1},{"version":"71da01e2bcc32f78ac8a34cdf87e919a00d508ecc6d74ea587a687bb65080f08","impliedFormat":1},{"version":"a04afb0f4eca92460ab735342840c867557bcf978173bf22ae14b7a62d3c63d1","impliedFormat":1},{"version":"0d7ea5d07bba82c7e1faea10db937cb7d2aceb5f119c5be35f1bff8ac655d24e","impliedFormat":1},{"version":"6f47f7075f0a89280d8cb9b7f89a470c64fe97fe4137b8404cf2775487e5f221","impliedFormat":1},{"version":"e191e2f841dd6c1da6506373cbff0bf5a38259575796a8a5a9bc164cd7db8866","impliedFormat":1},{"version":"fdad07581c2b8901b0f160669bf7a16147dda5f5c2cb4db66e3b0bef670f066f","impliedFormat":1},{"version":"00b50242e22723a89a0948ee997dde3240a6dae05dc0320e01f5ca7c1e48f7c4","impliedFormat":1},{"version":"de408d3a890f04add8cd3401020cf8291ad273570b7bc8eeba66aae16b9fa638","impliedFormat":1},{"version":"a2f64d4e224eb40d6c79019ee0591d59d410280ce92599c31d72064db037c299","impliedFormat":1},{"version":"fcee558fd6628ada603e9fca9475f63587957938f20becf1852de3d67d125732","impliedFormat":1},{"version":"9fda79a8f8c542516052dc224e373902cd1f584b4e9608aa1ee657621da81c0b","impliedFormat":1},{"version":"3197de0657e934303eb4e00e9441422040ffa28f1c00ad9c31c971bbb34b6fb4","impliedFormat":1},{"version":"b58b762af99527839bf4e9f59973d322b1e087d6b6467febabc0e444cdce2c8c","impliedFormat":1},{"version":"7a8e6eacff3016c8651d6f3c1f3933a53240c381950a0610aff1cce7d9e38f8b","impliedFormat":1},{"version":"b4fe298479e94aed68fc1fa13a2b1ba3beb163eaa7932573171c9e88d7fc7017","impliedFormat":1},{"version":"b8b004423830d7db10924aeaf0bee5280146a106c755173a7496d52617094cc9","impliedFormat":1},{"version":"15d40eaec0122acbd93875a39deb2115e7c36f1320fc32395d39deee3b142692","impliedFormat":1},{"version":"50b8a54c20672709b96941f1ed5ebf6a9f0914e3b8a11030804cabaaa42f276a","impliedFormat":1},{"version":"3a7b61dd15d402034a11f27b1e5491fefca1150037994ce43fbb6725fd9ca4fc","impliedFormat":1},{"version":"2fb667ab1cd05555ac4f4ce6d0fb4a68decc09214abafb26c84079f4863b69fa","impliedFormat":1},{"version":"91e839d4332e389d5402bc3681fc32dc52eb57a8964d318f2ca5975dde1178b7","impliedFormat":1},{"version":"307c86e5dcbe1be743f125cd3fbe3d1685d68eee8941dae1235e82f1efc2e9aa","impliedFormat":1},{"version":"08c0066187ecb7486f66e051ed7b9cd45080b34cecbd9c1b2dad25382eb2ca77","impliedFormat":1},{"version":"c8f4e4dafd63adc6dbc933a1b67d36ef2af8b07851e86862e1970925a0155b2f","impliedFormat":1},{"version":"370721051645598ee2ed810ddb8378af05d4b11b546a60956e22d877daebae2b","impliedFormat":1},{"version":"156eb43391d90500825e85d52e1f1005db627d901247ea11c152f8572cbc8f91","impliedFormat":1},{"version":"adfac27a5684c4c09a6c9d49ee6ebd52d9682dd283deca82df8888085f359cdc","impliedFormat":1},{"version":"0654aa0761dc468a0898101cc166f29c8ff6997327dd3b661ac97287e73a137a","impliedFormat":1},{"version":"a34b1ded084247e97e94da1a0420886ed222ff4ebaff4504666876a8a12cdb7c","impliedFormat":1},{"version":"8a89dd2ffd3ad965171c2a81b5d925c6c8d6a216c28eb796e6d8a1f6de4e4e9c","impliedFormat":1},{"version":"663f5ba776627ad5bf8a90ee12c991b0a0a2fbf223adee196dc2c686f673846c","impliedFormat":1},{"version":"b13294530ffa3a677eafdc6ae28a2d846d11a5c9069a86f84e98f3dfc8979bd3","impliedFormat":1},{"version":"85d8f999ce39ce8c09a70327318a902e04fc2cdda7f56e04e22945ec2ce86d38","impliedFormat":1},{"version":"6c00037a6166b2ddd7c44ee453f2a890882064409c4c6d496ebaa44595c0cfd1","impliedFormat":1},{"version":"0d7dc7951a189ede2801f924e1a315ed3b283bb140f48a3f966845113822118d","impliedFormat":1},{"version":"8efba75013880a60e3f7b4452404c7697755a5fbff94f243dd6ee8942b786fb2","impliedFormat":1},{"version":"25bd187f28d514c8ec66e89c908432807db7e28d7713f6667faff46cb9ee89e7","impliedFormat":1},{"version":"cfd9e7eb0c96025e8ca55155c53e8f228a852a716d447f62dd83fd4ae2693c6f","impliedFormat":1},{"version":"7190433cf3c9e0555732885737339b06e672c654fab6997376c4903263aa3976","impliedFormat":1},{"version":"8c987e0dc32fe727e66c75328044ccc6fd228771e1b750b9c32aeba1ffa1dafd","impliedFormat":1},{"version":"c2f253677063659fa332083dabe623dcbeee5656cf49b4002e6765d3bae25462","impliedFormat":1},{"version":"74df29013ae56669cb52d9409d2d9b27aa57ee5722bc12008081462d5bde4cde","impliedFormat":1},{"version":"aa0ac51f775d1480ca202befc9b45aa52510ab579fec27a43475a319316adf24","impliedFormat":1},{"version":"05ef3c3702dc4d948d3d873fb5a4dfdc704aefdca8c68b0fd5c48e46f7f8b6aa","impliedFormat":1},{"version":"25f655a56e1d01c55604ff9fccfa058f59d37bd447ad8e60dcbf57405abeb772","impliedFormat":1},{"version":"1d44c112c206b78933c79e07e8a232e095a3debcce902d63b6fa76be6b15f160","impliedFormat":1},{"version":"1f3fec45a6d29de013efe6325675faaa48057bc1ccd857b2afdd32aa7e84fc50","impliedFormat":1},{"version":"e66b4987867e08def07f05290d81e9a7e08f0837ffead21189673e800a02682b","impliedFormat":1},{"version":"ada53043e38395255cd4723170e1e39af4d1498894d7d061045dfdc794d78e9a","impliedFormat":1},{"version":"0369b4772da24b833e033719d38ba44ddd2745f4a082c99db3c6aa240dfa634e","impliedFormat":1},{"version":"1cbaf7378d8fa3b625294033a996feabb8211888a3fc078f70a34a1d0626ffa2","impliedFormat":1},{"version":"0e5c1c2afa6c9014ed6b059bf961f4ca0b24d02d428ac677f92ba1c65f8b61b5","impliedFormat":1},{"version":"403679a5de09ae5d892c9fb7001efe9df31d28610041b0df16aa9559dc240759","impliedFormat":1},{"version":"8f6d32fe9c10851d576fe5f7710db38828e9f42805bbbe793a9ed73c8aa5343f","impliedFormat":1},{"version":"81825a92dcf10141d0f564ffcedc9887214f4314b22abe8017daaa2f0ceef170","impliedFormat":1},{"version":"f31f0cd893ebae635b1db42858e56ce6b9f81f431b1e60ce3c9a885faa6bb07a","impliedFormat":1},{"version":"75092ed0f5d4b06e5d33b5e0dbc5950296f305082a22af2e92227f5fd51870f6","impliedFormat":1},{"version":"c452dfc5dbb6d1dac4018134f98750c384749080913c070d4390e97e514981b6","impliedFormat":1},{"version":"534bb6eb92ad5fdb4803263b87cc9e472c35b30a7b439dd355ef9233cdd09383","impliedFormat":1},{"version":"bc7154744ceedc9809a354330d2823d8efa8509601326250c4979419e50d9531","impliedFormat":1},{"version":"9a010d51580bd13dcf633082c6470439af00c451c2d5c5b75d251b4b46162d36","impliedFormat":1},{"version":"99a5f72bdd1cf94689946035dcb0ce2c356e2399b602c768c13f44141fa39cba","impliedFormat":1},{"version":"c06d3c407b0118af9fe6c21885341f886f6e73a03f90dc8cf5a1b6e52dbe152b","impliedFormat":1},{"version":"33fdca69f72c748f5581cfc54e0b64ffa05e81431ac7b2153f4c7024d05091dc","impliedFormat":1},{"version":"ea17854546ee220fdf79355fa67e2957641ed5089072d6bf91222cef118f2704","impliedFormat":1},{"version":"326d6bbec1122b08daa67e16123529de54a038aae9159296ffb61472a1028a13","impliedFormat":1},{"version":"a1295994e93dd2189452c2f219db17236d9f32d4623f4dbbe9daedc3b145de70","impliedFormat":1},{"version":"83148eff8c1f9a3c6819c1229ccbc06de19b277533d53ea7a8139b07defaf21b","impliedFormat":1},{"version":"b19d0f7b9d231ebcc1f412f8da284ed34d043ac29c67db8b025343238a80f655","impliedFormat":1},{"version":"2029621d8195077f165b96ced16e822cc3bf9b9113ddf77c343b60d3f83d8220","impliedFormat":1},{"version":"40df57dec766ab699552b172f7e9131e6105c25beeab6f0eeb6498ecf2527c66","impliedFormat":1},{"version":"71e7310b7c9abacba3c0e34153351debc97008266a97183750a991a79c3765ef","impliedFormat":1},{"version":"6f9ccc458b249334edeb91f8eb12fd76ed5a4aa1c9ef8284b180f3b3b340acf1","impliedFormat":1},{"version":"443d54e8700a517e99c74c286904ec539555b7f4f2b01193529d21ef4df2e5e3","impliedFormat":1},{"version":"88083a8cf93f5db2376a56b646326713a2f87086838f159c161ba511f96c984a","impliedFormat":1},{"version":"93a4e23fe3e7694458177d85ba947943e2d4b9948e6780d37a7252c4a67817c9","impliedFormat":1},{"version":"1bc103672128abf1ec48fedceb428098e1e78ce268be7e5a471f5300ecb612fa","impliedFormat":1},{"version":"4357f02b352e1b2f813dc408094a5c51205574afd7ddfdc70cbba5ddf5c4a34c","impliedFormat":1},{"version":"5061b26dfe94fa72a419eae9a0ad07d04892b96c4aa393d4757235f31db1d00a","impliedFormat":1},{"version":"fcb06f278b388b5d874d3eff15e3847855498153269db6a99117a4cc4b9fae4b","impliedFormat":1},{"version":"2adab2383138f5a6c42d3181be7476ef358d9d3050160f234d02e7b7eda7294c","impliedFormat":1},{"version":"e0496dbb1dcb13667cf71536664b8bef6622659e56da7d9f97e234f455301058","impliedFormat":1},{"version":"2146cd7d3c79b946316cae64cd449b17c7284c782baf6cdc0e4b1eccc1b2ffe1","impliedFormat":1},{"version":"0fb5837024566ef87df6c3782d85146c1de4c012f8e76fa90a2752c31b0d01dc","impliedFormat":1},{"version":"d7a8b3ded04fafeb618a99e9d17293b8eedccb23324e30279511795514804e7b","impliedFormat":1},{"version":"1ae4c7531e5286fe5f60d03e73dea8f8441e440a38dbba64fb3be992f3c5e12d","impliedFormat":1},{"version":"eb81413b016a5f1751bd01a35ca73ad934aa9f4fbb5827176da25dff56d793fb","impliedFormat":1},{"version":"b6ad6c97a8e3556e1735fa3bd707063e85720a633833ed4e1aa18358783062e0","impliedFormat":1},{"version":"895c705b0b5d11432ed849be1c1759c91750b2273c45896d8b67ee3edc5a3b40","impliedFormat":1},{"version":"6e9d1d3466bb83a1753b0a65172284b7405b95bd78c2cbf9a9ca494d581c355e","impliedFormat":1},{"version":"c18b1ae239f51ccccea19a1f06866906a47ae2ab0d99c3cf6686abd3e6cf9bd7","impliedFormat":1},{"version":"f51f2f145005a2c3d5d2862f999d510bc49d227c5da14f4932324091b0df2d43","impliedFormat":1},{"version":"87fbc25a841d22689d88304059e3f3cb4bb0f77e779db9d6419d7326df136e62","impliedFormat":1},{"version":"2a15c8a09d9e6b387f781acb98c305d236f851c85794f42b4b5c48472c3c775c","impliedFormat":1},{"version":"7321a5b8d95d3c1126f6bd24cc8261bb89e8290fc61ef0ed482de6a8ea2516a4","impliedFormat":1},{"version":"ad3aff6b75da96cab1717cd8ff469e4f000aef11a1d747c57c1ee7a295cae5ad","impliedFormat":1},{"version":"677abfea7b547be100f3b13ed69cee53ed33a083ea4a05729f0560d1a4e0739c","impliedFormat":1},{"version":"f7b9b186966859230af759323b6393a52a305bc02da663d37c08ed5f3551a372","impliedFormat":1},{"version":"09e3786f7438380238392d83579e9cb15eda7d04b3bdcc2fab5d93d40878eda7","impliedFormat":1},{"version":"2d73f4404f1aaf0596b3c93dc6ed4c1185d5088742929288115fceb9ff9b7ef8","impliedFormat":1},{"version":"79c362405ceb1944cb518855aace26a6a042a8b8a12a5b20e481e12db84cd545","impliedFormat":1},{"version":"f96551ea42e80198bb7a2d4d3a09b532b8f3400af7ea6b8c876cec221de44669","impliedFormat":1},{"version":"4d81c5707f7b4dab218590dd685e1dff3fb187aa08611ed29c575a455aa96d01","impliedFormat":1},{"version":"3494552fad1793aabb4f147b0fac3a3906d34ed7e62a9fdd1790159ae952ecca","impliedFormat":1},{"version":"c516dfc78fe69c08fee8da01ea1ae50541236fdbe889e6d1f5823abc3e649982","impliedFormat":1},{"version":"dcd894fd3ba764449ebad9301b2061d9de3049815bf2e9dfe294c787a99f9c6a","impliedFormat":1},{"version":"e2f0db2068303a6145e279efb536510612d8947e2baa5e0504d288cc74a5606c","impliedFormat":1},{"version":"4e23bffaf579876055922bf6163d54352096c8ba7014e9eabb0502e6e887ec2d","impliedFormat":1},{"version":"5a6852b7cb2139fc755ff54bf09f43cc953c41abdb9b30180032d2c6c9ad16e6","impliedFormat":1},{"version":"5db20eca96b824b5f93fe005c6cf4756ac53f4dde5e8ddbcb971dd92a216fca7","impliedFormat":1},{"version":"e6639c658b8d6a0c14c6626e3337abe5c4d347cfbcb338117aec9b520ad2a0c3","impliedFormat":1},{"version":"353cadd18b1ec66b5330914586b0318343334df7c16493a546b7b3da4b3be934","impliedFormat":1},{"version":"614334c8daf642bb3426401e837db86ca4e483e2efabe053c9857b5fdc82f9c2","impliedFormat":1},{"version":"4989d7c504f9ca1e408a8576aa752d53f4ceecc4ae47e020fca0b8ff4b7154be","impliedFormat":1},{"version":"ffd4cee5e0695a8fbc328ba4e332f86f6be95dd36ee5ca1da57858e389fdd718","impliedFormat":1},{"version":"775aa9b368e7a1afcdbe7d5d249e7ee2d8a5b2994664580eabe34bea90003fe6","impliedFormat":1},{"version":"b770396ca58953e26d639e48c3d94bd623ff58cec699d7278d10f1b5ac927d62","impliedFormat":1},{"version":"bb943c09381dac9efba8a4901b7f99aae29bce842c20cb38009ca297663f6f4a","impliedFormat":1},{"version":"fe186744a93d78110ca280773c91dd952a9c28827dbe1f24eafcf5e1b35d139c","impliedFormat":1},{"version":"3be608cc51079056435897dc1f6b87c940b71f1cb6c73d5cc6a593aad03b3958","impliedFormat":1},{"version":"81beaaa34bfdd3632b411218d442ed3b8325962f4812adb32c7b410a2b95f907","impliedFormat":1},{"version":"c7479490f81362e9f4b8cdd8ad44fb350eacc93d894988b95f53a7c628dc198d","impliedFormat":1},{"version":"8a86ecb0203af04175ae6d0778c6ff5b177116f120678653d7efa49cf9cc9617","impliedFormat":1},{"version":"2cd70d9843dfd74580e46817e755acf95816d2ff67cb2e5e468faa387b164fbe","impliedFormat":1},{"version":"138ec543a37de6bf1a31167ddc16df6aab04688e2957ee4c2d78a27b9583b891","impliedFormat":1},{"version":"cb0b68044d7afcfa9cfa95027e5d0f504fe4d7710567fb0d0f46f52fbf844246","impliedFormat":1},{"version":"9750f97df6e0460cb191834b64f20ba91759afa4124d2b9b10918f3b5a1e1701","impliedFormat":1},{"version":"8bec9d8fa691961b0fcc53843eedf8267c01fe8c76e7ad1b1d80149b3fa62874","impliedFormat":1},{"version":"1039f672d5f0850635df4a6e31f75de37299b46b5c79e159fb6f2b0e5053c8d0","impliedFormat":1},{"version":"c1ee60475877add72557f9d16cb91e25422d5e5d6f2ae63dc84fec3ff109925f","impliedFormat":1},{"version":"25fa6aa7dbe8b41ff2c49461275a65700deabab5b722980b8ed532fc9dce246c","impliedFormat":1},{"version":"4a01da6690087ccd3c3214b85a6eb19f0a40f015da6d4f7de936decfec7d604f","impliedFormat":1},{"version":"fcbe5f8d3c6d0bd37c807165eb49d58118f6da97525bee8ac879707a8ab41fcd","impliedFormat":1},{"version":"275c32f51382f97435d72235064ccc6648f40c7d13185d37e443415e803f547e","impliedFormat":1},{"version":"d3ac89d62cc597b74232f12ef2feedd6cc4e76ee7f00a85dfaaeb0e15945d12a","impliedFormat":1},{"version":"ad7281702325dea8f8beadfaba27d274da2e7c1d1b7aac5c143e7e71c6b24ea9","impliedFormat":1},{"version":"ba4435447d6190e3f2bef2e8b111b2ab3ca525d00654898b4c87e95e4926fd50","impliedFormat":1},{"version":"83b0da5b5f81649bd7e4dece969f13e54d6612f676b5039479c3d0d44096050e","impliedFormat":1},{"version":"4567b54a33a8e8f4ee084d349b16c0517d368f6907b293fccdc9e5cafed89543","impliedFormat":1},{"version":"4bf7001631c75d5db45d2b67e0a98052bad10001f078d1daf4f868c22d7683e6","impliedFormat":1},{"version":"c05547405ef3def9d95fecbcdf8cc1c3dafe89775e25297e173f3337a3343ea6","impliedFormat":1},{"version":"82f734faab2c0f6a83c4d680688993454855b378a87990acaffc5ced896d253f","impliedFormat":1},{"version":"2c0514db19403ef7b501638f349881340a1df5bedae177032ad48e99ee556d5e","impliedFormat":1},{"version":"29f5b0294808b0ac5a4dae7e615d781fe06343abfc8a8bc35c184f52a489d65e","impliedFormat":1},{"version":"6bf18ec4e5c8047374ebd315dee5ade0c67c07566fad127fc779a4dff8e91c0d","impliedFormat":1},{"version":"0302dcf40234c3587b9ba54ec786911fe62f616380270ae361bccb1a1d174f46","impliedFormat":1},{"version":"503d16a4357ed9eaa418a4848d87642ed256f67ee5464384fadcfaa2795b33c8","impliedFormat":1},{"version":"da9f175a6a0782f49db958c591569dc3acffe6303ade90e1d607d2b48e0eb802","impliedFormat":1},{"version":"71be22985d4947ff60ea5ec05e85cc2528b3c94aecdb60b5591a1569f02b8a6b","impliedFormat":1},{"version":"701e7b13df24d405d67f3b299be91387f5051f68d363a212e9a377a2251d52f5","impliedFormat":1},{"version":"6b640936d3e78a5d3162cd573e17d6f501f953bdf81edb74de5e761ad7644864","impliedFormat":1},{"version":"5318acf2789250b8b08bbb92a5ac5b35f9801a9946b801181f2393e3a8d52ca4","impliedFormat":1},{"version":"4e816dd7680a7516ecd2b5c2c1c222ed236082ad63ef8895ed80aeb283d3b66f","impliedFormat":1},{"version":"2ee09f03991b8715951d238583897e2b332940a22a4d526b3998c7aff8c3d6aa","impliedFormat":1},{"version":"6ac9caf255c128c7d445c9ff6047e7345e5205bdb232f83e2c71863ae4215273","impliedFormat":1},{"version":"cef0e2ad34e7d2b511293c2472e0ad36188dbbcd8e9ba33741faa40a7c715aa9","impliedFormat":1},{"version":"d8635d62d48a0e1582b36fa1f80ca3131b7c399107d62c8cd793b0067c1f3f77","impliedFormat":1},{"version":"6a94b1303301c46044ad4f3284c419bca8c14f6e8b9bac5dd904873c5705baa2","impliedFormat":1},{"version":"0c4679eee9ddb76a2851ea76808b22951279029dea8ee160978fb2ab6b098b79","impliedFormat":1},{"version":"fe43adc70ee8b0a328af955dd88a90d3ca1ee9c245b19bb2d43dc69febd4450d","impliedFormat":1},{"version":"d149636c8316576b97427fbfb1da6e4a4971fd2b13c38b99772c857e7975fac9","impliedFormat":1},{"version":"9c9faed36f0ff3c056eff8692a4e7428271bbda2af0a78e1257197b4a58842c1","impliedFormat":1},{"version":"bd1025401f59eb70b6ea74a6ed209085e1e06007237a66965612b57a80659497","impliedFormat":1},{"version":"270068dab37295cffafbbb22805999ecf98ea71be931361e259b69b1678d2095","impliedFormat":1},{"version":"e0a6a1ee9388cec68b6ba69d35c2cf388a997254bc76df86602e9be3722ca6ce","impliedFormat":1},{"version":"710dfe4056a0f74cae6a25ee21d45a25578aca7ade095432f8c6ea0c326c5da8","impliedFormat":1},{"version":"d00d3a57c89a6837a7ef656844fd80d50cec5d144ca1872ff9abeb3dd19c9658","impliedFormat":1},{"version":"951c3db889f1b7d5a149e926407856d7dd6992f75f81d6f24b229e008a4c2d0f","impliedFormat":1},{"version":"33a8c34de0025b854200c2391d861885901b5230cbac54fdf02215c3ca57f2f8","impliedFormat":1},{"version":"37311e1162112de6dde732a22360bc6a3c91a31fb894275efb65108d081a2237","impliedFormat":1},{"version":"ef6ded37a16f8678c1dc96e35e051ec11778149de25dbfe9060cee4112cc2393","impliedFormat":1},{"version":"842b6a55f631211b114d43040ed284274a97d9f2b8cac7144d4df2649e3a4172","impliedFormat":1},{"version":"79f33d707e083740361cc2eb4083ceffa4183fa82d0b5b7aab6c789e13d5d483","impliedFormat":1},{"version":"abb39832e5f85c458bcf86983a1d3f7bdc731c56e6e5e877d78e5428346e15d3","impliedFormat":1},{"version":"e2f6aeceff3a30c83dcaf9a4ef3e62eb71d505c9d755b10913bd7880c7e6d18e","impliedFormat":1},{"version":"63e696e663d6b09b91b19a2ac2bd6a2fdd1a64bd3a9d1d2040ab5797f5033007","impliedFormat":1},{"version":"8aaf746b5a42d5830cd6888bcf245d4a611df86dce86d57c8e97d8938fdb07be","impliedFormat":1},{"version":"c1e6cd658bb8004704297e00b3f2e729d82ca1c0c4f417ee06a0b52a220b67ce","impliedFormat":1},{"version":"2b0ac6f8b0c9f5e90bcce2c6ae995eee6a6d70e656e72af948fd000aaceab6c7","impliedFormat":1},{"version":"7eb5f6e48a29a0b841050c9b2bcb610ba2e77da606b5ba4853896db6c1f92e6e","impliedFormat":1},{"version":"9236b1a6037f7bab6c89a547507b00c7b7a6754c8b7d351468e8d6f4458ae8b8","impliedFormat":1},{"version":"011a672fa00596dc7e81dc83ac43ea63dcd488c334ec1b568739c6337f594785","impliedFormat":1},{"version":"6e5c3c0a83adae845d11dfb3619a0958de77f2276dff654872f249e8dfc9fb44","impliedFormat":1},{"version":"7c21352a6508e5ba540cbe099410a337ea5f8cc9455878e02280f9da0b773525","impliedFormat":1},{"version":"8f01e5489154d239d0392c37d269b80c13dde1168313b860e5db4827c883e583","impliedFormat":1},{"version":"67e31a23230866602a9800be3d1ab41831fe335e846390324714d143bf242ce0","impliedFormat":1},{"version":"1039c7dd7a97940822c5f9b4989b646712f9dc150ffc1628c704f5b6dfbcbe76","impliedFormat":1},{"version":"f5f2837611344d4e715d66d12db861be52d83a702d989c709649998c4cbdba6b","impliedFormat":1},{"version":"56106bbf7ad6680aeb2f28639419c07e6b2579420d160263151a7d08581ef9d3","impliedFormat":1},{"version":"4d153f44873d27de0b93dba3917d53d1ab78d7bd4dc9aa631e4a4a5a2c9ff2a4","impliedFormat":1},{"version":"249ba7084f5be2e6c60597dcdf6e52460aed8151e1b8b6acb9010d3b405e610b","impliedFormat":1},{"version":"ce142201a7fca1bf90742afd272d2e57e71eceffc16ff460e7ec7544e792d47f","impliedFormat":1},{"version":"5ed1bf0a83522672f514be102ac46477009faf48d9857692e587e2b17553d4fd","impliedFormat":1},{"version":"f7df54fa0f267b7ccc8edefaa7f93ae0bed96e644e482fa3e320c18c5dbba142","impliedFormat":1},{"version":"ecd603cc6a94e8514bb53e907c7d274e023f8f0ef983a40002467c548921625e","impliedFormat":1},{"version":"1522f8b6d38f815a6251eecc6ef5c759a8f64cc34d5f2382a43fd777b00f81c5","impliedFormat":1},{"version":"c4362600ac2b06131e0d8890dcad3b3f2513f7c450fa924822b2eff5beca889a","impliedFormat":1},{"version":"447974f0bb13ac0a054a829f6905e6f4fc3b19bc5b643082c27759809d320a63","impliedFormat":1},{"version":"16b01c4188b34cd7c3984d7b5c2d64e955df184b49ceaabdc908f148f1f1c4c2","impliedFormat":1},{"version":"12c50e34c5439c167a1fa5c5380e6f7da266be78d95668875c4178e4ecf712a7","impliedFormat":1},{"version":"277fbe9863a52559f4b10094c90265d495b4f0af31beeb2d63015f1e892afa2a","impliedFormat":1},{"version":"3c45d13dc59bb2243f3458e312ef2612e8ae7f646596a4d62083a4a2d6ae802b","impliedFormat":1},{"version":"1aca3c3f8cb0d2535d1cb4190472adb90a3e2297ceca92dd8946525b65650869","impliedFormat":1},{"version":"1736c265f3f3a12e5bbb2ed3abeb93fa7d3bc888dd022e995a5215505cd84d92","impliedFormat":1},{"version":"632ba617bffb87063e6e4a3265dae9054449564fb9b0a9ed606f2c08e0bba165","impliedFormat":1},{"version":"dcb35e5245fa0aae3e357936bc874a67ba5c01281346e21af35ada9f738df6d1","impliedFormat":1},{"version":"ccfc6e985094129ec4ee7d29fe5b0b160138eb9153662f205f9de7dcde3e2846","impliedFormat":1},{"version":"4f676d8a2d80880d4fe88e358a57de55fba359b1147c68dc0684a388a9a828b5","impliedFormat":1},{"version":"ed5d88f7e0e6166a7e4e6b3386711008dd6384a4d47d13d39b5c2072caabc441","impliedFormat":1},{"version":"b025c037542ec847b41d72976ab8c618d960350267800eb2e9d38ac7d6cef563","impliedFormat":1},{"version":"648a323c26d3cf197d798214c52f28ef944a379c29e0280ecc39f4c2d883b293","impliedFormat":1},{"version":"b5fd2fa6b29b1bd39cc1c161142623ff8b7abd826284fa347e57ea0a4c60a44a","impliedFormat":1},{"version":"6af188e33823ab23fbfc7aef7845b80ee435bc7de8d5c2c6ae782b992106c00e","impliedFormat":1},{"version":"426ed28fb37ba6de91e972b4a7058b4dc5e3922e8c47b86a3b8b657ff1545ceb","impliedFormat":1},{"version":"2f988e7c0fd8bcd0eb0e1276f4a1fa09c1a77b84bd509b77106264b781b7f863","impliedFormat":1},{"version":"0b9cd16403a67ab2209f898884c169880e87cd02d54cda8044f59b0e9356b915","impliedFormat":1},{"version":"86b75411514e61d9e2a9dda39b739c13bd14a444ddae7e70bc73ea739cb59e9b","impliedFormat":1},{"version":"3be7df7b02b500bf08cf7967449f5969e41c56bdc3b86324395fb14dc0b38247","impliedFormat":1},{"version":"ec55675f79073fae959c4a7b011878bd4dca2aa34b7aa39693f37b0f1b6a1189","impliedFormat":1},{"version":"e75b4851c92ce79db78f588d1f5aed949b801865c15326b3c3a2982d8e143635","impliedFormat":1},{"version":"3766447d030cee6fdf7598eebd0d7af2160569aeced770608ee81d98ab322e0c","impliedFormat":1},{"version":"c39ea4174dccd8ce51e6a9b39cc5d7e1dc5e4127df2cbd544a6854535710230c","impliedFormat":1},{"version":"ffb45c5b7425e845827717da910e9652714a19dcb22319db270089aff02f8cf2","impliedFormat":1},{"version":"afe1608a1ab9192ee0345c096d73ec5524774d1c1091c6305d6dcf318013da62","impliedFormat":1},{"version":"a2234c237c0d3071ef2622d118ec69ec5602d15e8b469f3edaab9548725223f7","impliedFormat":1},{"version":"1f74aa822d452c041d808a12893c4d1fee794ea1719caee8d9788eaec8d3995a","impliedFormat":1},{"version":"3e7908d1b54e7ca3c7f6db760e99f83b213fa37c1505638c94ff2c3fceba5325","impliedFormat":1},{"version":"6d253ae31ecc215299565bbb00a7523cdd2ab5fa77bf61a01b1cb912e5ba5cc0","impliedFormat":1},{"version":"194ba3b10431ff063d8dbbdad309c1b0df101bd422de09bfb7d700ea0492a619","impliedFormat":1},{"version":"6c371e650317ca9d85a41dda3aa784474aa5ccaf98b3377148f2effcaa7b935a","impliedFormat":1},{"version":"4fe80f12b1d5189384a219095c2eabadbb389c2d3703aae7c5376dbaa56061df","impliedFormat":1},{"version":"9eb1d2dceae65d1c82fc6be7e9b6b19cf3ca93c364678611107362b6ad4d2d41","impliedFormat":1},{"version":"cf1dc1d2914dd0f9462bc04c394084304dff5196cce7b725029c792e4e622a5b","impliedFormat":1},{"version":"38dd37d1a1974f69309db479e5c5dde597bb382870372cfe719a1e18e24e08da","signature":"ab292929c4e1b87b76921093a8ba449f2051271b07a0ff8cafcd7f40cb080915"},{"version":"85d3aa95b0086752d2f7784d2bdaeb38f99c3cf6c35bee861702beb68556cb9e","impliedFormat":1},{"version":"0e10e5fc12c8956af5c26c63c7f0c238fe9bc5cd71c31813c466870a73d5c942","impliedFormat":1},{"version":"aac05819374582795991294159d6a3de02fa7913b36940aed8ee78e487baff32","signature":"6bf49ab152c48e2744b7ca4ad32537da3a5982d0d84ff02f3d9f3eb5baad3a78"},{"version":"409cf8770fbb9f099124e9ca744282ebfd85df2fd3650ae05c4ee3d03af66714","affectsGlobalScope":true,"impliedFormat":1},{"version":"848b257bdc73b54c167bed01b2db42fd44c1aab77350c9b1fc3a2ce3ff08f899","impliedFormat":1},{"version":"642b071c4d865ff593c1794e06fa1781a465338a37796a7d0e2501daa20172bb","impliedFormat":1},{"version":"ff87d4d02bfc715a3a038c825bb80d6a6cfd1750bec3a0fa6f0e407133b1cd2f","impliedFormat":1},{"version":"0da67df9ad0b921385c37c0eef3de0390b8ef7b0b36cf616fdf3590a67fed1e4","impliedFormat":1},{"version":"8b28fc7010a1cd9c54201b6015c7d6a04fc6a4981acc9eaa5d71d4523325c525","impliedFormat":1},{"version":"e72fd44d087aac63727f05fe82c0c4a984c6295f23fdb9a6290d4d9fda47cfc6","impliedFormat":1},{"version":"fa2cd67056be92f91c496c134c19c4e0a074103d79ffe5dd879c7ad0f3036b75","impliedFormat":1},{"version":"f2c96dbf26160a6410d15e4c9b96e3b5ee90460c7a8b929350c054c6b3361fde","impliedFormat":1},{"version":"cfe5116dce1c41003e1c1036e636a751881dbb70ef33cf07d1db08a4c98563d2","impliedFormat":1},{"version":"a492e689607448056bb5b7875a8f7f604e623cc92c19eb1358a04bf6612b06c8","impliedFormat":1},{"version":"4af8ba68f5b509c7a7d353e7a91a4014d194779c537acd3afd330980e9cb972e","impliedFormat":1},{"version":"c4a78ea6e862ed9913ecf9b95c8b4a8f77384f2cf583eee7fc4b27c52f4fbaf7","impliedFormat":1},{"version":"ee9c59f4fa245924e3328a2a6620fe107b0c41860367a47a90d07a932e3a084a","impliedFormat":1},{"version":"e2a62c1f16bfc7e305e78143c1eeedb71ad1f272761aa07ff2ad70bb97248b13","impliedFormat":1},{"version":"1c1ba22485be7577e2a73cc103bf6e7a692ae0a025216619a4de42186eb1687f","impliedFormat":1},{"version":"ebbaa82abb5a1a7179dff85377f99c666dfa3a68f8a2ea405bbcf4f5e50149be","impliedFormat":1},{"version":"37673287f8bc80af36be1c23275ed9416bec11ee361b320a57a0b3a2797260ef","impliedFormat":1},{"version":"39e217bc229493f7b355cb2ce07f8600f6266500a6feaad43c254cc0a0f140e6","impliedFormat":1},{"version":"a33d889bdb82f43cdcd8158107c0e25d295d1838d82ee8649390ca0b88e87a07","impliedFormat":1},{"version":"f289d98b575f84044465ab3b7ac81e9a11b4d97cf2a9e92a822e948bc2f0ba7c","impliedFormat":1},{"version":"787a6b0d92df1148c7da1e75d705652030078c19e79985a72e622dc5b54487bc","impliedFormat":1},{"version":"ad09a94413ba6d37b86beaf348b252b378608dec764b67efc9e65d1dc4dff808","impliedFormat":1},{"version":"534611552e459b47ea008079ec9d520fa87c7b229c8a3a08993e8be650a8df71","impliedFormat":1},{"version":"d4ddcacf48fe1a273c71f4b04818eb912fd62bd7c0da092742a7e37a30cbc726","impliedFormat":1},{"version":"83098570d4ae37e31d8c788901c5d094313176a23f26870e78a5e98e5edd7777","impliedFormat":1},{"version":"9a43bf14da8556f0484d20c93074fd98845c06c85587f6b580fedda82685dc04","impliedFormat":1},{"version":"6a36631027099eca036047ab3bf0f262e23239c950ec1c65de700300d223ec44","impliedFormat":1},{"version":"0e74a039cdb5b3259515e375920dbd7702aa06d743598ea7ed53ea97d00764e1","impliedFormat":1},{"version":"80a9eb1f4fd46c863aec7d9c8490702ec6aee2b63ada21bcf231d558f5f0863f","impliedFormat":1},{"version":"72932bf7599a75bdd02788593ec6f060422f0c6e316f19629c568e2473d37db3","impliedFormat":1},{"version":"473ce1bf2f0fa4f2742f7115078e0550ae096c0d3a5d89f1f91f1bcdd89e0a91","impliedFormat":1},{"version":"6e0ce9899346df5cf80e1b45172eb655855837cdcad4539acbfc9305d8fc8976","impliedFormat":1},{"version":"ec56ed06f0a89fa2e3a20d7f7521d017e92decaebfa4d53afa0fd3a7b7a2be3b","impliedFormat":1},{"version":"236b90e223fa7a458b8561e87327d3737c8c83cac9ce4cdfbf04b3098da851fc","impliedFormat":1},{"version":"d64b03d8342c4f4d51706659a835c45197b9940b8938b0656bdc4df15d06f630","impliedFormat":1},{"version":"8ff0f34466d5136ab068a15358b99a958095d1c6e7e11c67d607111f81933fc4","impliedFormat":1},{"version":"98a72afb1b77b1c3f15beaed5662feb608060ccc604fa1747fba9d9deb070f80","impliedFormat":1},{"version":"cd5189682a722b13ec340b2bd112bd48b899bfeecd69d629bfc78166c15b64fe","impliedFormat":1},{"version":"3df071340e9e8e8eccbd967400865df1de657ca3076468625ad6ef93187ed15b","impliedFormat":1},{"version":"19599db9634ba72f2663db5b76de48dfe250280ffb4bb158109c97eb4e5b5e0c","impliedFormat":1},{"version":"f5a0ae8b389c104a6655117a8e4ee1b563c4d7cb33e045e4ce433cd6c458adb4","impliedFormat":1},{"version":"566247adad3c04b6c5b7e496700f3f23d05b07f31d983ab47fae1aa684b048c9","impliedFormat":1},{"version":"b5bca9f26eeaafadbdd2c8191e0a640b499b54a56b832d102c683d350a61cafa","impliedFormat":1},{"version":"e74448dbda9fcba44933444aa4e9b795a141f05cdff5a51413cbbc1df7653fea","impliedFormat":1},{"version":"9b3492b8dc89b7020e98e26056a75fd6095b63bc29b6fce07b569ad902d9074d","impliedFormat":1},{"version":"83620e83834e69e4ea96869d255bdeeb99e72da69bedcc1e964f55bb3fc2b229","impliedFormat":1},{"version":"35c834f84dabbdc3b595dd35c2208876af77af86ec3e0f4b622ff7f901843e80","impliedFormat":1},{"version":"dd53662b91b5abfb33e2615090e915b404411554f8586beda2b20cf53ea92535","impliedFormat":1},{"version":"9ccb1f2fe4456019fef2fe0de5e3cba548175bb8ac969c0621d171c5264ff51c","impliedFormat":1},{"version":"ac0e664aa993f918ba1006ca2bc107bbe326ec96341a61195f9b3054a9571a84","impliedFormat":1},{"version":"b184444a122ee085c61df92f39b23414dbe7adece24558bfd1a0dcb22687119a","impliedFormat":1},{"version":"f5b7e6aabff4cea18a0dbf393cab2352f061fca939fbd1715d7bcde2784075bf","impliedFormat":1},{"version":"79d94411771150cf3cac1366ff1825a635c3680cb826c2b873be5237377aff64","impliedFormat":1},{"version":"7593fd5cb5ebff6d787689c7b20d0873b4a772bfaf79c5a7fd75baf23a2a7172","impliedFormat":1},{"version":"32c9abf3d5d5e14ed2ce95db51afb537dc85afaeaacd7c466c211c4898582757","impliedFormat":1},{"version":"6853837d5850cfd5322fa38f190d4afb7b1ad9d37b137a7fef26a1f489a48b61","impliedFormat":1},{"version":"8eb9571864daa2f43eb98b641415ed8adaefbbe2ab68352e1c60d626009f3a54","impliedFormat":1},{"version":"d90817a097f2792dc8ebaf9bc08298f1ab6cb18b4287c8cfc1cea297263df6d8","impliedFormat":1},{"version":"3cbfe6b48a9c4b5b6283f7fbce0c1f5ccf0796ac8b1a077893eeab13fc17ef73","impliedFormat":1},{"version":"bf838430ebed2286f7427cf0c9af7706446186f7f2a0a83d90d2ca37a4602ff3","impliedFormat":1},{"version":"fff0fc0ee248874a1f8d12dd439f1c26a8be008a18b7e36ee65c3e8cd634fe18","impliedFormat":1},{"version":"7e6a11a7c6f9070215e73bbf9620d274ef45979eadc8de39d50ffe6fb67f095f","impliedFormat":1},{"version":"c34715ff893e99af41dcf4f63b3eca2a45088ef0e4a025355204c440772278c8","impliedFormat":1},{"version":"ab75e6fd6cd2b86fcf1306e31410d6cef8aa37f4e9ed4e0dff7640d266d30603","impliedFormat":1},{"version":"9b680c3823f398bfa66c14e298ec2841eb34d72415772595f95f9682b4b7ebfb","impliedFormat":1},{"version":"5df7286c9582d62220e0b847c9672f57108f7863a2b0105cbcc641cb0b116970","impliedFormat":1},{"version":"646d361245ec8052afcc7b90acb3c7f6098bf1340b88f32455e63f0369ddf1c5","impliedFormat":1},{"version":"9156f467d689a13c3df60121158c39286a619eff04391412622c57151ce4ca97","impliedFormat":1},{"version":"921a2668977ae600f6de2a4c19f53b237ed196ae5ae3297043b38781c11d9af4","impliedFormat":1},{"version":"37072b862cae4c819e335ac9eb855cc398719a50ebc60376de9ddae801610a3f","impliedFormat":1},{"version":"6473fc970e5fb3f18fece3e8681e9ad4454adf295be54463ebd74688b8b5051c","impliedFormat":1},{"version":"bf8416e78cd8b80b69dfcb260baddb93c6093fa02217b9efb7fd5ab6b5d31511","impliedFormat":1},{"version":"d0837a5d151e8c902fdea172ce37b8fd07b4fa7d41e4cc8063f24ba4c55b8b09","impliedFormat":1},{"version":"613b0a98a745b9d9724d2de9bd7fa0990c2c591940660ca7e101ac212f7d2661","impliedFormat":1},{"version":"800509db7d0b61907f28dea506dea01b57d2aa3cfffff03c78ccad04e8ceb976","impliedFormat":1},{"version":"33b4c50bd87ea402094989eaedf773e2689df452846f21ddadc67316e0518dcb","impliedFormat":1},{"version":"bd96c9f72e9a439499bf19a4405d205fb8c2da019fdc9fea988c25005e76c200","impliedFormat":1},{"version":"9fe617a1d5e7c5c4290dd355f1bdbe1a80574d765a2c03bbf49181b664f11f0a","impliedFormat":1},{"version":"9afd17a7e1d2b474eb24bb37007d0f89ccbfb362ce904cd962a1eca5a2699efe","impliedFormat":1},{"version":"e1bc53a6ffeb5f18a86a9ab8e9f8275c9854b9f0290fa260224695a02ee9d949","impliedFormat":1},{"version":"1132807f0a56b00d253a76bc21aeb23e79c8ba8478c52ec75ba9fcbd81738b6c","impliedFormat":1},{"version":"effbcf17a843123b20a54ce8389b29a26d12c056872f0dfc76a27460b22f716c","impliedFormat":1},{"version":"d4e4a4af5f4573fbcc326b1f9dcc82139232a67f25b176626ec63a7b51195084","impliedFormat":1},{"version":"b7bce6b962d325bdd11ca9f3394b411f37354bffc995e798ddf66a7ee3b9de42","impliedFormat":1},{"version":"67a39289645c935b83bec8e8d9cb32618fb10451e5006e16f2697664a2659708","impliedFormat":1},{"version":"31e4839e4dc630cf7bc9f86c1afdf3dc2cdb4b8f6c3e11d12ba38ea18f4c421c","impliedFormat":1},{"version":"5b94968e8400015a4904bc1ba26ebcada2fd366c8fdeeb873904af54ccd4b423","impliedFormat":1},{"version":"affe821c43d560d921361a2cf101946c6f645d2612d982795e161119997921a2","impliedFormat":1},{"version":"27e7cd3932d38c5e3302bc2c581c49f8eb76366f9703672224b564c30c1f56cf","impliedFormat":1},{"version":"1140a35eddf2e3b9d706eeaf28ea74e969ecbe52e0d0f6a180d0753d2b8272b6","impliedFormat":1},{"version":"5e9cf2a12f0d82d2bb5989cbe663707bf1f3bdccf7cf0fdb84105712b9788e0d","impliedFormat":1},{"version":"98d65b5a0e418ce947f9787b99080faf0118ba4df2f831e78cccec329169a66b","impliedFormat":1},{"version":"cd07c2909e86190a3c2d086aadde8b1222e77561b4f3a47f15be2936eb485520","impliedFormat":1},{"version":"e29335a97dc6921b23bd24a5dea2dd4c65ef0c66257c365ee1a9758082483938","impliedFormat":1},{"version":"4ae29dc6d6023cf0c9ff998f517da286295f9579c4776b671f774058dffeacad","impliedFormat":1},{"version":"52f08748f996dcc8d1078502c847c6216b6367c78b6f129d231940361f7967cb","impliedFormat":1},{"version":"f0dd6bbfb1c00c27cfa6aeb15b122bbc0eee8d994030c7b4ade02a9dd269d4d0","impliedFormat":1},{"version":"bb46a3f1d44809ff696ba90548a5ad8c43b9ff478daff018f405c24e2521cf2e","impliedFormat":1},{"version":"74b2c1714ce726ea8ef08df57cd081e49a2c6af2a2758455369e5f24a8669077","impliedFormat":1},{"version":"ddd6fdfbb5efb191d3948c7628cbf3d5325b82cd4349a531d7735553573838c0","impliedFormat":1},{"version":"65f1d084fcd779b586f7211f43a58b865991139b23be9ed67b9a1e2c44b71cb2","impliedFormat":1},{"version":"c73e31e70c709189edc4680241e57234ccd2ad0f06d3f923c96bfe0f86b5a10e","impliedFormat":1},{"version":"f89709b022ad55b2d1e9439c78f6ca38088f3ce7a9f53f241714cee7e7c3a9be","impliedFormat":1},{"version":"444c7e5a66b5b2970e2bd0c7003a646ca10569c790969ffd70dafa477b89bd6c","impliedFormat":1},{"version":"4226d394ea9582dcc2379865b0e7820c3ca0541fc265da0be8fdf63eb4ae6a00","impliedFormat":1},{"version":"e71b47b5718fbe97f437473247d8f89e7e965fa0965dc16dc1c6ded8aa444e3d","impliedFormat":1},{"version":"5d51685685bb14e438626bff55a7efe4112520ebea2f014634983c83210f4aa9","impliedFormat":99},{"version":"036ae1047726230c970f2155d69a62dd5b236e495fe76c74941354f71c091005","impliedFormat":99},{"version":"01d9004ca52c4935dc087c6132ba2fbe39f76ad4dfb48425f952a4730b6077eb","impliedFormat":99},{"version":"2ce400534e53ea57f3e251e147eacc655b5fb9886c307602f0a556e67c8d11b1","impliedFormat":99},{"version":"b2e9f56f8ccce77c07f2b9f450b1c8e7a040f3e39be9f8d3f2f999a8d91eb84a","impliedFormat":99},{"version":"91960e2843d90a5ac1469fe52c86dfe202c5a0c5724274d22ad5a65b791023ec","impliedFormat":99},{"version":"d765ce1c28c19cdd35e7ce883d09a87073d6491ea6aea518a0a1f19be2a9a052","impliedFormat":99},{"version":"f619729aab2d37cf4f3c029f1c50d996edc63bb0a8f57e36f6ffec399846c7fa","impliedFormat":99},{"version":"3344bad324e5b464b7921b45b6bfde875806b60547fba17b88b0207c8bb21882","impliedFormat":99},{"version":"9a696f93e029daafb76fdb484082376152a0c8b0ebc2288df7aaef0d95e1a866","impliedFormat":99},{"version":"4ef37706816b51d87fabc9bb719b83687db95800d0bdf245a196da125aad062a","impliedFormat":99},{"version":"a42ec1f68e4f3c0c75f5660f934dbeaf8c2700f541ee8ffe927da34633dab150","impliedFormat":99},{"version":"6c4351fa94508541eac690a1f693ecaded9d77670b794450c0421d066f167e83","impliedFormat":99},{"version":"e644c2c9719e02b5172840b15096e1b3fa4c2945b76eacfcca61580f7ad04037","impliedFormat":99},{"version":"c7c007f9eee29a04189cc4da74316b9ce1510399275ff25066bff19e51e580d7","impliedFormat":99},{"version":"dac1aa695967ae152f1ab78d198205f83ac4a039b728aae41e884d7a7b6529f4","impliedFormat":99},{"version":"d47770dd43eb8cfaa0316d2c5aacec630b9ff71f22b12b76efcd05fe1c4fbe63","impliedFormat":99},{"version":"63f42af44fd40684b384c4ed07831e1639241d0cf15b398947ee6096356ae8f4","impliedFormat":99},{"version":"d3921e533df0e133d388d1d2c524170e98b98a567f67262a41ac5dd96338f2e2","impliedFormat":99},{"version":"0d320fdfb24ca75b5553a72b75a085524fbb6d6b9249b5ebe90efc0162f853fb","impliedFormat":99},{"version":"f71df1384825a9f57540e7d16c9c08d4f9b6155e921760b164966431dc69f050","impliedFormat":99},{"version":"b0fb69a62e6bf1ed599da15ad7098ffa3604650fc8c60f2523bdd63469b15f88","impliedFormat":99},{"version":"848b257bdc73b54c167bed01b2db42fd44c1aab77350c9b1fc3a2ce3ff08f899","impliedFormat":99},{"version":"642b071c4d865ff593c1794e06fa1781a465338a37796a7d0e2501daa20172bb","impliedFormat":99},{"version":"ff87d4d02bfc715a3a038c825bb80d6a6cfd1750bec3a0fa6f0e407133b1cd2f","impliedFormat":99},{"version":"0da67df9ad0b921385c37c0eef3de0390b8ef7b0b36cf616fdf3590a67fed1e4","impliedFormat":99},{"version":"8b28fc7010a1cd9c54201b6015c7d6a04fc6a4981acc9eaa5d71d4523325c525","impliedFormat":99},{"version":"e72fd44d087aac63727f05fe82c0c4a984c6295f23fdb9a6290d4d9fda47cfc6","impliedFormat":99},{"version":"fa2cd67056be92f91c496c134c19c4e0a074103d79ffe5dd879c7ad0f3036b75","impliedFormat":99},{"version":"f2c96dbf26160a6410d15e4c9b96e3b5ee90460c7a8b929350c054c6b3361fde","impliedFormat":99},{"version":"cfe5116dce1c41003e1c1036e636a751881dbb70ef33cf07d1db08a4c98563d2","impliedFormat":99},{"version":"a492e689607448056bb5b7875a8f7f604e623cc92c19eb1358a04bf6612b06c8","impliedFormat":99},{"version":"4af8ba68f5b509c7a7d353e7a91a4014d194779c537acd3afd330980e9cb972e","impliedFormat":99},{"version":"c4a78ea6e862ed9913ecf9b95c8b4a8f77384f2cf583eee7fc4b27c52f4fbaf7","impliedFormat":99},{"version":"ee9c59f4fa245924e3328a2a6620fe107b0c41860367a47a90d07a932e3a084a","impliedFormat":99},{"version":"e2a62c1f16bfc7e305e78143c1eeedb71ad1f272761aa07ff2ad70bb97248b13","impliedFormat":99},{"version":"1c1ba22485be7577e2a73cc103bf6e7a692ae0a025216619a4de42186eb1687f","impliedFormat":99},{"version":"ebbaa82abb5a1a7179dff85377f99c666dfa3a68f8a2ea405bbcf4f5e50149be","impliedFormat":99},{"version":"37673287f8bc80af36be1c23275ed9416bec11ee361b320a57a0b3a2797260ef","impliedFormat":99},{"version":"39e217bc229493f7b355cb2ce07f8600f6266500a6feaad43c254cc0a0f140e6","impliedFormat":99},{"version":"a33d889bdb82f43cdcd8158107c0e25d295d1838d82ee8649390ca0b88e87a07","impliedFormat":99},{"version":"f289d98b575f84044465ab3b7ac81e9a11b4d97cf2a9e92a822e948bc2f0ba7c","impliedFormat":99},{"version":"787a6b0d92df1148c7da1e75d705652030078c19e79985a72e622dc5b54487bc","impliedFormat":99},{"version":"ad09a94413ba6d37b86beaf348b252b378608dec764b67efc9e65d1dc4dff808","impliedFormat":99},{"version":"534611552e459b47ea008079ec9d520fa87c7b229c8a3a08993e8be650a8df71","impliedFormat":99},{"version":"d4ddcacf48fe1a273c71f4b04818eb912fd62bd7c0da092742a7e37a30cbc726","impliedFormat":99},{"version":"83098570d4ae37e31d8c788901c5d094313176a23f26870e78a5e98e5edd7777","impliedFormat":99},{"version":"9a43bf14da8556f0484d20c93074fd98845c06c85587f6b580fedda82685dc04","impliedFormat":99},{"version":"6a36631027099eca036047ab3bf0f262e23239c950ec1c65de700300d223ec44","impliedFormat":99},{"version":"0e74a039cdb5b3259515e375920dbd7702aa06d743598ea7ed53ea97d00764e1","impliedFormat":99},{"version":"80a9eb1f4fd46c863aec7d9c8490702ec6aee2b63ada21bcf231d558f5f0863f","impliedFormat":99},{"version":"72932bf7599a75bdd02788593ec6f060422f0c6e316f19629c568e2473d37db3","impliedFormat":99},{"version":"473ce1bf2f0fa4f2742f7115078e0550ae096c0d3a5d89f1f91f1bcdd89e0a91","impliedFormat":99},{"version":"6e0ce9899346df5cf80e1b45172eb655855837cdcad4539acbfc9305d8fc8976","impliedFormat":99},{"version":"ec56ed06f0a89fa2e3a20d7f7521d017e92decaebfa4d53afa0fd3a7b7a2be3b","impliedFormat":99},{"version":"236b90e223fa7a458b8561e87327d3737c8c83cac9ce4cdfbf04b3098da851fc","impliedFormat":99},{"version":"d64b03d8342c4f4d51706659a835c45197b9940b8938b0656bdc4df15d06f630","impliedFormat":99},{"version":"8ff0f34466d5136ab068a15358b99a958095d1c6e7e11c67d607111f81933fc4","impliedFormat":99},{"version":"98a72afb1b77b1c3f15beaed5662feb608060ccc604fa1747fba9d9deb070f80","impliedFormat":99},{"version":"cd5189682a722b13ec340b2bd112bd48b899bfeecd69d629bfc78166c15b64fe","impliedFormat":99},{"version":"3df071340e9e8e8eccbd967400865df1de657ca3076468625ad6ef93187ed15b","impliedFormat":99},{"version":"19599db9634ba72f2663db5b76de48dfe250280ffb4bb158109c97eb4e5b5e0c","impliedFormat":99},{"version":"f5a0ae8b389c104a6655117a8e4ee1b563c4d7cb33e045e4ce433cd6c458adb4","impliedFormat":99},{"version":"566247adad3c04b6c5b7e496700f3f23d05b07f31d983ab47fae1aa684b048c9","impliedFormat":99},{"version":"b5bca9f26eeaafadbdd2c8191e0a640b499b54a56b832d102c683d350a61cafa","impliedFormat":99},{"version":"e74448dbda9fcba44933444aa4e9b795a141f05cdff5a51413cbbc1df7653fea","impliedFormat":99},{"version":"9b3492b8dc89b7020e98e26056a75fd6095b63bc29b6fce07b569ad902d9074d","impliedFormat":99},{"version":"83620e83834e69e4ea96869d255bdeeb99e72da69bedcc1e964f55bb3fc2b229","impliedFormat":99},{"version":"35c834f84dabbdc3b595dd35c2208876af77af86ec3e0f4b622ff7f901843e80","impliedFormat":99},{"version":"dd53662b91b5abfb33e2615090e915b404411554f8586beda2b20cf53ea92535","impliedFormat":99},{"version":"9ccb1f2fe4456019fef2fe0de5e3cba548175bb8ac969c0621d171c5264ff51c","impliedFormat":99},{"version":"ac0e664aa993f918ba1006ca2bc107bbe326ec96341a61195f9b3054a9571a84","impliedFormat":99},{"version":"b184444a122ee085c61df92f39b23414dbe7adece24558bfd1a0dcb22687119a","impliedFormat":99},{"version":"f5b7e6aabff4cea18a0dbf393cab2352f061fca939fbd1715d7bcde2784075bf","impliedFormat":99},{"version":"79d94411771150cf3cac1366ff1825a635c3680cb826c2b873be5237377aff64","impliedFormat":99},{"version":"7593fd5cb5ebff6d787689c7b20d0873b4a772bfaf79c5a7fd75baf23a2a7172","impliedFormat":99},{"version":"32c9abf3d5d5e14ed2ce95db51afb537dc85afaeaacd7c466c211c4898582757","impliedFormat":99},{"version":"6853837d5850cfd5322fa38f190d4afb7b1ad9d37b137a7fef26a1f489a48b61","impliedFormat":99},{"version":"8eb9571864daa2f43eb98b641415ed8adaefbbe2ab68352e1c60d626009f3a54","impliedFormat":99},{"version":"d90817a097f2792dc8ebaf9bc08298f1ab6cb18b4287c8cfc1cea297263df6d8","impliedFormat":99},{"version":"3cbfe6b48a9c4b5b6283f7fbce0c1f5ccf0796ac8b1a077893eeab13fc17ef73","impliedFormat":99},{"version":"bf838430ebed2286f7427cf0c9af7706446186f7f2a0a83d90d2ca37a4602ff3","impliedFormat":99},{"version":"fff0fc0ee248874a1f8d12dd439f1c26a8be008a18b7e36ee65c3e8cd634fe18","impliedFormat":99},{"version":"7e6a11a7c6f9070215e73bbf9620d274ef45979eadc8de39d50ffe6fb67f095f","impliedFormat":99},{"version":"c34715ff893e99af41dcf4f63b3eca2a45088ef0e4a025355204c440772278c8","impliedFormat":99},{"version":"ab75e6fd6cd2b86fcf1306e31410d6cef8aa37f4e9ed4e0dff7640d266d30603","impliedFormat":99},{"version":"9b680c3823f398bfa66c14e298ec2841eb34d72415772595f95f9682b4b7ebfb","impliedFormat":99},{"version":"5df7286c9582d62220e0b847c9672f57108f7863a2b0105cbcc641cb0b116970","impliedFormat":99},{"version":"646d361245ec8052afcc7b90acb3c7f6098bf1340b88f32455e63f0369ddf1c5","impliedFormat":99},{"version":"9156f467d689a13c3df60121158c39286a619eff04391412622c57151ce4ca97","impliedFormat":99},{"version":"921a2668977ae600f6de2a4c19f53b237ed196ae5ae3297043b38781c11d9af4","impliedFormat":99},{"version":"37072b862cae4c819e335ac9eb855cc398719a50ebc60376de9ddae801610a3f","impliedFormat":99},{"version":"6473fc970e5fb3f18fece3e8681e9ad4454adf295be54463ebd74688b8b5051c","impliedFormat":99},{"version":"bf8416e78cd8b80b69dfcb260baddb93c6093fa02217b9efb7fd5ab6b5d31511","impliedFormat":99},{"version":"d0837a5d151e8c902fdea172ce37b8fd07b4fa7d41e4cc8063f24ba4c55b8b09","impliedFormat":99},{"version":"613b0a98a745b9d9724d2de9bd7fa0990c2c591940660ca7e101ac212f7d2661","impliedFormat":99},{"version":"800509db7d0b61907f28dea506dea01b57d2aa3cfffff03c78ccad04e8ceb976","impliedFormat":99},{"version":"33b4c50bd87ea402094989eaedf773e2689df452846f21ddadc67316e0518dcb","impliedFormat":99},{"version":"bd96c9f72e9a439499bf19a4405d205fb8c2da019fdc9fea988c25005e76c200","impliedFormat":99},{"version":"9fe617a1d5e7c5c4290dd355f1bdbe1a80574d765a2c03bbf49181b664f11f0a","impliedFormat":99},{"version":"9afd17a7e1d2b474eb24bb37007d0f89ccbfb362ce904cd962a1eca5a2699efe","impliedFormat":99},{"version":"e1bc53a6ffeb5f18a86a9ab8e9f8275c9854b9f0290fa260224695a02ee9d949","impliedFormat":99},{"version":"1132807f0a56b00d253a76bc21aeb23e79c8ba8478c52ec75ba9fcbd81738b6c","impliedFormat":99},{"version":"effbcf17a843123b20a54ce8389b29a26d12c056872f0dfc76a27460b22f716c","impliedFormat":99},{"version":"d4e4a4af5f4573fbcc326b1f9dcc82139232a67f25b176626ec63a7b51195084","impliedFormat":99},{"version":"b7bce6b962d325bdd11ca9f3394b411f37354bffc995e798ddf66a7ee3b9de42","impliedFormat":99},{"version":"67a39289645c935b83bec8e8d9cb32618fb10451e5006e16f2697664a2659708","impliedFormat":99},{"version":"31e4839e4dc630cf7bc9f86c1afdf3dc2cdb4b8f6c3e11d12ba38ea18f4c421c","impliedFormat":99},{"version":"5b94968e8400015a4904bc1ba26ebcada2fd366c8fdeeb873904af54ccd4b423","impliedFormat":99},{"version":"affe821c43d560d921361a2cf101946c6f645d2612d982795e161119997921a2","impliedFormat":99},{"version":"27e7cd3932d38c5e3302bc2c581c49f8eb76366f9703672224b564c30c1f56cf","impliedFormat":99},{"version":"1140a35eddf2e3b9d706eeaf28ea74e969ecbe52e0d0f6a180d0753d2b8272b6","impliedFormat":99},{"version":"5e9cf2a12f0d82d2bb5989cbe663707bf1f3bdccf7cf0fdb84105712b9788e0d","impliedFormat":99},{"version":"98d65b5a0e418ce947f9787b99080faf0118ba4df2f831e78cccec329169a66b","impliedFormat":99},{"version":"cd07c2909e86190a3c2d086aadde8b1222e77561b4f3a47f15be2936eb485520","impliedFormat":99},{"version":"2e8932517228de42f8b3db669c4d04d177367283d2da199b1a59cd94d009e65b","impliedFormat":99},{"version":"5fada2edbc2264cc0d7ab6080e8e4d4e3d5dfb9ef494b4eac9c8e49b90f30bdd","impliedFormat":99},{"version":"615d06216e7aaba7e4011cee475b9ef6d1d873886118f178bca21bc38ecc10a8","impliedFormat":99},{"version":"7ddf86abeff5aa521f606f9ea9ba2dfa19df8ee1c76ea838d9081afad9b28f68","impliedFormat":99},{"version":"ebd25c9c141e447ee6ba794c80c6878ebb39c42ad135a0c363d275af9fa6799f","impliedFormat":99},{"version":"e29335a97dc6921b23bd24a5dea2dd4c65ef0c66257c365ee1a9758082483938","impliedFormat":99},{"version":"4ae29dc6d6023cf0c9ff998f517da286295f9579c4776b671f774058dffeacad","impliedFormat":99},{"version":"52f08748f996dcc8d1078502c847c6216b6367c78b6f129d231940361f7967cb","impliedFormat":99},{"version":"f0dd6bbfb1c00c27cfa6aeb15b122bbc0eee8d994030c7b4ade02a9dd269d4d0","impliedFormat":99},{"version":"bb46a3f1d44809ff696ba90548a5ad8c43b9ff478daff018f405c24e2521cf2e","impliedFormat":99},{"version":"74b2c1714ce726ea8ef08df57cd081e49a2c6af2a2758455369e5f24a8669077","impliedFormat":99},{"version":"ddd6fdfbb5efb191d3948c7628cbf3d5325b82cd4349a531d7735553573838c0","impliedFormat":99},{"version":"65f1d084fcd779b586f7211f43a58b865991139b23be9ed67b9a1e2c44b71cb2","impliedFormat":99},{"version":"c73e31e70c709189edc4680241e57234ccd2ad0f06d3f923c96bfe0f86b5a10e","impliedFormat":99},{"version":"f89709b022ad55b2d1e9439c78f6ca38088f3ce7a9f53f241714cee7e7c3a9be","impliedFormat":99},{"version":"444c7e5a66b5b2970e2bd0c7003a646ca10569c790969ffd70dafa477b89bd6c","impliedFormat":99},{"version":"4226d394ea9582dcc2379865b0e7820c3ca0541fc265da0be8fdf63eb4ae6a00","impliedFormat":99},{"version":"f9a31d8cd73720ce56d28363ccc816f7938c23232b4ba776e689bc9ce0bc4a9c","impliedFormat":99},{"version":"b5ecf2de5b81fe9f6977ba65a90748516ddc5ad83df7fc06dd9c1ced1b457e22","impliedFormat":99},{"version":"ec78f00051e3a1d645624b74a76b03d5477169ec2a8350ab346079b4c5866638","impliedFormat":99},{"version":"d9e8c350356fc5ba3448c766665f0b431d8ed9dfdb6c5292dc7b77bf36972a35","impliedFormat":99},{"version":"03bd8982c28ee0f85943827f431377100208d57f7cbf033e509f7dab69423eab","impliedFormat":99},{"version":"8d2c9a45e3d19a0ec700568e51360f00703b46402a57f0553fa4aacbf08f9ac4","impliedFormat":99},{"version":"786e211240ba4cfb4cb97b3ae534da76b94e5047cbd2b5491d8280981b1732cb","impliedFormat":99},{"version":"87abb4c69135e18f87f4e9062583356cc2489277c2a7f32260bd74b94e51ae2f","impliedFormat":99},{"version":"655c268c4913182d1496ec95b12a227cbc8ccf56b4d018c89d8c6efad0f09e6f","impliedFormat":99},{"version":"f54c7cd09e6f85c160c219f63be06229f77f19303b3c6c68212064ec47d74683","impliedFormat":99},{"version":"7a862fc3fa46375b46550e8d2ae91e4f0b212583b9372a6b27fac47532e49d86","impliedFormat":99},{"version":"7ac0aba77649f2c25de485bd6bf5ec9fa9cfbf7e1450201df3604c1237a1e4e0","impliedFormat":99},{"version":"bbdd4c4e115f3ee51975f383926c79dcbf609ce23a2725469b9636d0031e8ce4","impliedFormat":99},{"version":"fd0c88c18526ed3d99778191acec8a460dd8510bd23b91ab426a17ffcbeb2eba","impliedFormat":99},{"version":"d6c8773d5f7b0d3ab0ac24d6ed458e60ec1974fe009425a6513c67b7ffe000d9","impliedFormat":99},{"version":"5ed0a5deb9bca1e037bdb4a86cf56fdf8bb77a26c4bc81f46bc9a4b52c1616c9","impliedFormat":99},{"version":"526ac79647b074288fe2fded4cd4cf879fea52f550d1061de115ab55201867dd","impliedFormat":99},{"version":"0385c42787f49d23bc8bf3f863a45e56ec35516bd7755a3bb57968d05459262a","impliedFormat":99},{"version":"383e8f8a99edf7fddb94f5e1e9c6a43fb5044dc8be2aa118fbf87306d672938d","impliedFormat":99},{"version":"7180bb55cdca8c51ee2c849b7f5e638b27a470a9738c3409c51024a5a2162940","impliedFormat":99},{"version":"fd9c55568216743d977b55e794ce4d43f19b741a9d0e2ff771cf32da382194cc","impliedFormat":99},{"version":"64e9fc14cfa927e7e1d985e1e9719d3453aaf4480aa7f3cbc6fade904a1d9a32","affectsGlobalScope":true,"impliedFormat":1},{"version":"7aa77b12b11e53eafd7a8c667e6a987c08082a6d2bd2c937926344b259c19cc8","impliedFormat":1},{"version":"3507b83ff642d85c336a1a36db811fbc9c5ec47e3454c46218103e384bb1ffba","impliedFormat":1},{"version":"cde0dce8d50af21523fdb14ebde3f859e0c1a7327be5ec3bb92971ac5a635616","impliedFormat":1},{"version":"e6a690273dce44417aff650803617f17618b29d9fa937c25b2121737527ad51e","impliedFormat":1},{"version":"80931ec7ec3aa2ef951acffe23ba5ff5d64468783549dbae1032081a12f06d0d","impliedFormat":1},{"version":"705e17ada3e5feb063bca280964bb77dff78646225ee77ee7799ed8285510bf9","impliedFormat":1},{"version":"c7e81255f5c4daf964eb00aac7f571089e1b785f32b63376d06935ee843f4a8a","impliedFormat":1},{"version":"c97e68743b06e328ce6cd86c4d9501fe0db13092cbebf7f5912b4498bf5f11b3","impliedFormat":1},{"version":"9609fa88b4a6c70dcf6c9c94cade29001a4ddf53cacc6dac05dedfea678f9cc6","impliedFormat":1},{"version":"8454513d9fe6de7e8128d12b918722aa6f4cce967ae3c06d2db7ee8705476340","impliedFormat":1},{"version":"bfc430d84296bd417af5daf1880f1226d534c28f6069573c0f55390e927a456e","impliedFormat":1},{"version":"1ad1647ab93f1664871d5faf511d2c8c17afe6bb8ce9a31ec475c40e9fe33e49","impliedFormat":1},{"version":"f6b664ecf6b5bfb13cd356185dce1cb16c5202626c51febc2431c2150db9f763","impliedFormat":1},{"version":"b08aa45902a583b9ae2c6fe445699f8d0de6da9c9d302e81a2601b8b89138914","impliedFormat":1},{"version":"c5654900e4b89dcd0e200d745851a99c4302e3aac14c2469709d6c4e5ebfb50c","impliedFormat":1},{"version":"df426815487a30cd32818c8a444c5dd8f223da4223758ff7d6f5081598165b78","impliedFormat":1},{"version":"049c4e81198c56b41c036e2d20294b5f836ff618774c87c167dfe5a2646bb955","impliedFormat":1},{"version":"3425960f7de5b1d7cb67f9c594be76fca1c66057d978d57fcdef1b98759ec8a2","impliedFormat":1},{"version":"aec3fde91cf48502773dfef791c9a36319566c6176c5d1080cff2a172f9f600b","impliedFormat":1},{"version":"efd724d0d52ecdede9653b66ba36f06374f4a3dc4e02cbbcc339647eb2862373","impliedFormat":1},{"version":"7700f5f6f4c305e2ea76948a48a0396f17a08c5de2ecd937961d4a47e0f2e047","impliedFormat":1},{"version":"00cb29908aab66736cdb6b94686be366d46d5240ecf009b0b947c96148a8f55b","impliedFormat":1},{"version":"8329a903cfac43cfdd7f3681860115dc01df6e1a99bc64ca612fc6dfc6ce5cfa","impliedFormat":1},{"version":"a63b4c8bfef176e49a873d45d4c365b5da58b735524b7b339ccdfdafbf941632","impliedFormat":1},{"version":"bad8405c43c240d9e8d38e82bcbe2f09a9a2dc20794960fcd131557e381f9aaf","impliedFormat":1},{"version":"ba402da7b5c1d72c20acac74623bc97cde5f5aefeb1e863f11e136c27148c166","impliedFormat":1},{"version":"380e5ea84f332f9ec69ea4eeddc8e0c4a2c5e2ee46ae5af92df71d7aa565bfef","impliedFormat":1},{"version":"1e472b983f4edc04f2170fb5a3a077f463b95a680d432e7ce56e04b211eb19cd","impliedFormat":1},{"version":"fe03a53890ae6a499c3028e97261a842b620b586366e53602bbd2a2a7d3dcebc","impliedFormat":1},{"version":"46aaf67122ee775a6c634c78e9e5605442f8ff128026cf2ac4cc08bf5627cc30","impliedFormat":1},{"version":"52996abc43bccda1df90957b769d3664e6ad587e09b5b86f97d929da46619c51","impliedFormat":1},{"version":"e389fc41e3419610437c13c767ce8077418cb5e41af055d2a2a1ddcc692ffc25","impliedFormat":1},{"version":"6b109eeeae450266b80a349c58a86b0a84865b9b81fff97337662f89d5643297","impliedFormat":1},{"version":"f6fa975dfe3d2c66414fb1a0ff5b856f0498eaeebec958978ed2edb6d7c4a65e","impliedFormat":1},{"version":"b87815b57291c37689c534e521f73a077670bbe1e7df1d929b351c22676ed0b4","impliedFormat":1},{"version":"e034d73350083310f8de90f982f6c23b3cab3aba24d16c9e14dcef5dbeaa3041","impliedFormat":1},{"version":"aa3c53b8c1d3bd3a4aa061e8986ff0ce27cb9556ec7136542bb4773fe8d6c598","impliedFormat":1},{"version":"7cc86e5743ffcab5031e3ecf9aa7049bf846c1fd83a93a8484e1bf749747eee3","impliedFormat":1},{"version":"c5bcbe2b621f3f25ad4b8a4d9ef05c3519da8466950b7f4f5cadb33fd5c67537","impliedFormat":1},{"version":"1d4232ba0d35f3fcf289f12f982dcf7730df2a3f067a5fd9af78ec3dd7f86d01","impliedFormat":1},{"version":"9b4c71503ca308fc8845d877b5929fe4f228d288523c4b5a7ec602709bd77538","impliedFormat":1},{"version":"c909fa19de734668a2893d906c8ed4ce1af53678a92fa4e630e5e0557c7d2cf9","impliedFormat":1},{"version":"6eaff49798559ea3fd7af9252adf392f5293e02c879638608d18d850ab0717b2","impliedFormat":1},{"version":"fc57b1ef9e2896aef534217fdd4f8c40438b16c3406c6755c28edac71ad51f6c","impliedFormat":1},{"version":"984fea9069c23e827c15bee806d3a8e613daffc916204d5518fd03cf532324fc","impliedFormat":1},{"version":"8e12c14ab7e8e933c2c5b0410cea9d4be3ff2dce24ae1f54b66cc79be783b191","signature":"247a2ea3fd6c08877bc7ff92d294343cf17d072971a6bcff8cf57b443252d9c1"},{"version":"9200d5fec201adf65461a73ab904b7d8739aeb0cddce646669cf7f47969bf1f0","impliedFormat":1},{"version":"1c41124f7fd46cb5f0b78377710e43d6e613f06e7f3acb6f739dbcc1b35438c6","signature":"78a29f588275954a18392bd325caccc5c48dc73259486a6601ba7ced58fa8f26"},{"version":"cdfdbc6c5b73f2fd0138829504eb22be7fd75e6fc02a0a8d62aafa9f968d7a86","signature":"01aeb04270e4b8d1cd7648432c822ce6a912b51900b1b47a7e4f9d6b9dfbdca9"},{"version":"6e13e39db421493c2a88e1a92425e28bc3a8b75d8c27c7c796c4e6c62907b18e","impliedFormat":1},{"version":"560de45b2c567fc2d6f5895e8cdb04443e6863dc4175bbf8267d983fa2bcf4c1","impliedFormat":1},{"version":"c55a187ff05b090c90e3aee15bc7aacfd81e04a40634c7bc6fa42a19070f548b","impliedFormat":1},{"version":"d4a13186191b6e3967379e8075b98026fc7a33a1a1dfc671557c3f67e9cb3e81","impliedFormat":1},{"version":"ca63c018d9786cd5b010b2b048932a2990a1c671093632402417e6bac5b7ce09","impliedFormat":1},{"version":"471486ab7c5c95c3df63c0fbebe6871b9535eedff8b582557dfd66fcbf946d5b","impliedFormat":1},{"version":"d370ed9bdc80204bb3ee538f4174de05ee1e18c2e694a630bcaf7546dbfb2807","impliedFormat":1},{"version":"b88645280562793af76ab59052d87e4846ac5ef19af054c729fbb87c73481a59","impliedFormat":1},{"version":"d63e28484269b68abc14b19e3ce4f73ff2345a0a941ebfd217642b9b24e4004b","impliedFormat":1},{"version":"332680a9475bd631519399f9796c59502aa499aa6f6771734eec82fa40c6d654","impliedFormat":1},{"version":"911484710eb1feaf615cb68eb5875cbfb8edab2a032f0e4fe5a7f8b17e3a997c","impliedFormat":1},{"version":"d83f3c0362467589b3a65d3a83088c068099c665a39061bf9b477f16708fa0f9","impliedFormat":1},{"version":"4fc05cd35f313ea6bc2cd52bfd0d3d1a79c894aeaeffd7c285153cb7d243f19b","impliedFormat":1},{"version":"29994a97447d10d003957bcc0c9355c272d8cf0f97143eb1ade331676e860945","impliedFormat":1},{"version":"6865b4ef724cb739f8f1511295f7ce77c52c67ff4af27e07b61471d81de8ecfc","impliedFormat":1},{"version":"9cddf06f2bc6753a8628670a737754b5c7e93e2cfe982a300a0b43cf98a7d032","impliedFormat":1},{"version":"3f8e68bd94e82fe4362553aa03030fcf94c381716ce3599d242535b0d9953e49","impliedFormat":1},{"version":"63e628515ec7017458620e1624c594c9bd76382f606890c8eebf2532bcab3b7c","impliedFormat":1},{"version":"355d5e2ba58012bc059e347a70aa8b72d18d82f0c3491e9660adaf852648f032","impliedFormat":1},{"version":"0c543e751bbd130170ed4efdeca5ff681d06a99f70b5d6fe7defad449d08023d","impliedFormat":1},{"version":"c301dded041994ed4899a7cf08d1d6261a94788da88a4318c1c2338512431a03","impliedFormat":1},{"version":"192be331d8be6eed03af9b0ee83c21e043c7ca122f111282b1b1bdb98f2a7535","impliedFormat":1},{"version":"ded3d0fb8ac3980ae7edcc723cc2ad35da1798d52cceff51c92abe320432ceeb","impliedFormat":1},{"version":"ed7f0e3731c834809151344a4c79d1c4935bf9bc1bd0a9cc95c2f110b1079983","impliedFormat":1},{"version":"d4886d79f777442ac1085c7a4fe421f2f417aa70e82f586ca6979473856d0b09","impliedFormat":1},{"version":"ed849d616865076f44a41c87f27698f7cdf230290c44bafc71d7c2bc6919b202","impliedFormat":1},{"version":"9a0a0af04065ddfecc29d2b090659fce57f46f64c7a04a9ba63835ef2b2d0efa","impliedFormat":1},{"version":"10297d22a9209a718b9883a384db19249b206a0897e95f2b9afeed3144601cb0","impliedFormat":1},{"version":"8e335bc47365e92f689795a283c77b4b8d4d9c42c5d607d1327f88c876e4e85d","impliedFormat":1},{"version":"34d206f6ba993e601dade2791944bdf742ab0f7a8caccc661106c87438f4f904","impliedFormat":1},{"version":"05ca49cc7ba9111f6c816ecfadb9305fffeb579840961ee8286cc89749f06ebd","impliedFormat":1},{"version":"977023cb586cce3459c630ef77af1386a4780678534bb7db8bd5d040a88dbc62","impliedFormat":1},{"version":"b84e93b8eb20618c66475d20ecfec0b2770200c55baee8989d842e77bf150b3c","impliedFormat":1},{"version":"c906002036a2ef6731b9702eb4bad3882742c6f69f47d83b1a01d377888a7aae","impliedFormat":1},{"version":"6c24f6dcbb3bf8235bf8da995a7290ffbd9d557a760cf2deb380ce91a989b765","impliedFormat":1},{"version":"4042f6e6d552db86080e0d4ef0736673f70224e57ab6a41cf796b12386b538c4","impliedFormat":1},{"version":"6b588b6367bffdf25155a00b3dc217d18b32d5d83ba7833409940287563832a7","impliedFormat":1},{"version":"cc000db8ef6b7d044a4f28ee00320dff9a8e808b4ad2cf9459ef59eec498cca9","impliedFormat":1},{"version":"d0f62192ec787f1592a5b86760a44350d1c925883a573eadc12d60862890dffe","impliedFormat":1},{"version":"b753f26c05b3c1ae6a3e26c0f8f3459b164e4b56bf5d5f86e85acbac3284d65e","impliedFormat":1},{"version":"a66ad696f2785dd00374b8dee6fab5c58c049c0efe24b3c214fbe6aec3f53d6e","impliedFormat":1},{"version":"4d025ffaaa938a8879c8e5a1d8c4f9ad41361347670fd729dc125c2dfe3bf6d1","impliedFormat":1},{"version":"65412a5e227a70707ccde2548400024ad130c5538d27ec60d5e88512f9c17544","impliedFormat":1},{"version":"682dbe95ec15117b96b297998e93e552aaf6aaa2c61d5c80a3967e1342365dcf","impliedFormat":1},{"version":"f08bb4a002af94019661975f2df531d36dea8157460b05aa3f7c34517f461408","impliedFormat":1},{"version":"a1f43b06dd37b1f6c5c7821881960dfe55038b468eafb324ad90ce5e9b448d2a","impliedFormat":1},{"version":"15b142d522e96e1962bd54c75560f6994cc8fe9a1640a36de2268fdb95e58fb5","impliedFormat":1},{"version":"827eb54656695635a6e25543f711f0fe86d1083e5e1c0e84f394ffc122bd3ad7","impliedFormat":1},{"version":"2309cee540edc190aa607149b673b437cb8807f4e8d921bf7f5a50e6aa8d609c","impliedFormat":1},{"version":"899417348aed557d990c12c5c574004616ce897d538fed2ff06afed108cbe73a","impliedFormat":1},{"version":"48f7cd72c6f8ec5b2f70f50a8d4e6f47494e0d228015efb50c36fc6eab33c7ff","impliedFormat":1},{"version":"c5d73bf762b7b0e75fcdf691e21e31c9db9913931b200b9990f07f49ab2edff3","impliedFormat":1},{"version":"ccaaea725336559743eeaf7c2ff5c4b959bc0ccffd5a4c0d42ad2c597757be50","impliedFormat":1},{"version":"beddeda04703ae86be9150c7d8b39c5dfd222e69bf78fe183ef76b37ddf4d8f3","impliedFormat":1},{"version":"9cbc2b03d47d6e06f42cbad35e256d2e91ed86eec5fcd6bc1acb762953d0767b","impliedFormat":1},{"version":"5aa42b32993e161aaf93d992300494377d38c8883e15fde44d5c7949313058af","impliedFormat":1},{"version":"bca49ca4673e7865583f42dc504f8608248582de9840a236613896b5a56c8b4b","impliedFormat":1},{"version":"baf69edf0dac0c04f811c41545892ff304dcea1455bc1de5d8f2a48a024041d8","impliedFormat":1},{"version":"9b92a4d989efc3eeefdca5f95f10267504abc7748ecff400b533cdf54dcdbd68","impliedFormat":1},{"version":"2cca2c2c97f0b38de79eb7bbd81bf0cfe957639b0b674e2154b0cda2a896ce65","impliedFormat":1},{"version":"355739d282928494e5564cb919b6db7d920a08956ef536d870c2f9e7596c8ac4","impliedFormat":1},{"version":"fc173efd74ed1299d4ae67fd664c3eb6eb8061b2044e5f8aa20ba6399c8b695b","impliedFormat":1},{"version":"63f859a315e9711f383d06b7a2b940804e51078d85e896980816f46f1b6021a8","impliedFormat":1},{"version":"01fc8936d43f51c4c1e3c531805accd389edb0d873a822000c4b2a411d9ba6e7","impliedFormat":1},{"version":"397b46c6a95826d26714b5481addc606de72d8229b092e236f0d78a9e7226d29","impliedFormat":1},{"version":"67c99516beef2e0bff899ca25dc122c7db428382c8a491ff119d4f8e1d1319d2","impliedFormat":1},{"version":"617891438559a97ae02a795d529a25acf128744cf1e150ab6b70a2db38600abb","impliedFormat":1},{"version":"225deff02f4d1c91e2d6c71dec9f18feae510aa729a9774024f30278f4c6b8fe","impliedFormat":1},{"version":"9b74326515d17f03809cfbea6de789772ff7d0c759a08a59bfa5242bda98d35b","impliedFormat":1},{"version":"0ea47413eaffe144782a44058205c31130b382dee0e2f66b62b5188eac57039e","impliedFormat":1},{"version":"c0591738dbfe11a36959f16ab40bc98b2a430c4565770ef6257574546079d791","impliedFormat":1},{"version":"3cf3dc0f53d71795cd7c461346e9aa3c713f8a5138015776aa6d4b8ff9e0cb26","impliedFormat":1},{"version":"bde3f2ff6df7df1beb9939ff0ece11da82a758ff845eccb2429f0a53386d4e84","impliedFormat":1},{"version":"51797f34e5010abc85c8bbcff462cee9a12091fdd66b1d4027b095138348afb8","impliedFormat":1},{"version":"fced7c59acecb0ac631505fcbc5a1ce0c6420e2494a256321e9359093efb7a1f","impliedFormat":1},{"version":"ccdccca79ad031a924e69ad32dd7a7df7f58a8379fc540caaabba844ec287c97","impliedFormat":1},{"version":"2f912d54f9757feae9e9b6b4e0fbf8c321ca31ed85cee06e053990ef6b830c96","impliedFormat":1},{"version":"cf841c4bfb05b4b1d3826773ff77a47bb0dc17c665a4dbff7d6c4a6d9042d50c","impliedFormat":1},{"version":"655918529e03cf65492dc8393c7abe2291ec9f02e5833a5fa0e4e5d4baf9407a","impliedFormat":1},{"version":"0a5f4ac2660a3f7ba8cc978fe85da6860e7948a09b6ab05bc945523396bc2a6c","impliedFormat":1},{"version":"cc72ebdcc37c9978d58441cfd822d02b5e3265538170ed7c4cf1ed14e0ebf8bc","impliedFormat":1},{"version":"4f5f11b73282262904f4c1bc5ffb76631b40ac8b54ae01bde274cb9242d6cb2f","impliedFormat":1},{"version":"550abac7aebed55aa02db3646b1f1a5c3840cd31bc3b4cf7f39271fd23372068","impliedFormat":1},{"version":"4e4559e8e4ea7d87f914014074559e515de78308bacc733a7ea76f795de178a3","impliedFormat":1},{"version":"13ecb31795209aa56b1837b9d46cc5494da392f594132bc5b3a56c067e12ea1c","impliedFormat":1},{"version":"e34a28e978cf430e062c91d03987f2b42360b33e6207738b40494acd4a97004b","impliedFormat":1},{"version":"5cc10d0295e594c961bd020cc76845097928f550fa3d58468114e5225054f76c","impliedFormat":1},{"version":"99c4cd704c85c3b9a215977d1d10ad34f1c6bbc5784e0ddaaf6fe8090030eaf3","impliedFormat":1},{"version":"4e874f611f31bfab5803e7a7f32fafbed44b93eb260726420355a2b6331c312e","impliedFormat":1},{"version":"aa6a08a5d0fcd78c26e2077296bc20223237543c704e9c1bae7cf7363567fe9f","impliedFormat":1},{"version":"121695e29f8a46c562eec36f3e5324b21047c9f08293b7f74532c27861e2dbd1","impliedFormat":1},{"version":"ef5aa9871f3b8dac96d4ef93e22eec539527d739c6a7e0c7fa7101fa343bfd77","impliedFormat":1},{"version":"c580515d61246a4d634143a59a2eb6d5667aab627edf624035ee4333f6afbc11","impliedFormat":1},{"version":"4a1a0f21b3c4fc0d217392d82445a34fcc8c9ed6f79fdc4d14b8353e3c74eaf3","impliedFormat":1},{"version":"6dac3847f1d035d2fc5255ca006b99328ee0abf279d34baab619e648ad01ba97","impliedFormat":1},{"version":"18c8894331eaeea43870cab6dde83e47eac1575c6c9af8f08332057f47369f7d","impliedFormat":1},{"version":"0e6387b87925a10ba52cd0de685a4f7e2d9dd402dbac560dce8934e8e34007d0","impliedFormat":1},{"version":"91033ce499580ffdd6d10406b58137572644b9b46cd1c58e2c04413b08b48eb2","impliedFormat":1},{"version":"3c2659603b45925ed364bc06dda7fd340fa93cb7b0ccc79c84a047d2676eae16","impliedFormat":1},{"version":"3b512dd05022986095808a34dbf59f0a54159bcaa7de27ab81e3f89f28bde9b9","impliedFormat":1},{"version":"9f073cf87f02114739fadc5616c1e02e0fd60305f28421626ff52dbee00b5ff5","impliedFormat":1},{"version":"b2f8a25b10f6516fcf97eb51935532b3d960e73990011ea0f50f4fd273c1b78c","signature":"e42f02cf9dd0243add27f3de7dba28b9061bc552847f171ea0105324b99e91a3"},{"version":"0b48264f7fbe42619f5c77ffa6cc9edc083866b16160d8ff769b837a10dd053c","signature":"85d2cbdaf799d8ecc7c3208cc7822e19cfcc85cb8d9a85b154d9bf6f73fa22a5"},{"version":"b40885a4e39fb67eb251fb009bf990f3571ccf7279dccad26c2261b4e5c8ebcd","impliedFormat":1},{"version":"2d0e63718a9ab15554cca1ef458a269ff938aea2ad379990a018a49e27aadf40","impliedFormat":1},{"version":"530e5c7e4f74267b7800f1702cf0c576282296a960acbdb2960389b2b1d0875b","impliedFormat":1},{"version":"1c483cc60a58a0d4c9a068bdaa8d95933263e6017fbea33c9f99790cf870f0a8","impliedFormat":1},{"version":"07863eea4f350458f803714350e43947f7f73d1d67a9ddf747017065d36b073a","impliedFormat":1},{"version":"396c2c14fa408707235d761a965bd84ce3d4fc3117c3b9f1404d6987d98a30d6","impliedFormat":1},{"version":"4c264e26675ecf0b370d88d8013f0eb7ade6466c6445df1254b08cd441c014a3","impliedFormat":1},{"version":"5d3e656baf210f702e4006949a640730d6aef8d6afc3de264877e0ff76335f39","impliedFormat":1},{"version":"a42db31dacd0fa00d7b13608396ca4c9a5494ae794ad142e9fb4aa6597e5ca54","impliedFormat":1},{"version":"4d2b263907b8c03c5b2df90e6c1f166e9da85bd87bf439683f150afc91fce7e7","impliedFormat":1},{"version":"c70e38e0f30b7c0542af9aa7e0324a23dd2b0c1a64e078296653d1d3b36fa248","impliedFormat":1},{"version":"b7521b70b7fbcf0c3d83d6b48404b78b29a1baead19eb6650219e80fd8dcb6e1","impliedFormat":1},{"version":"b7b881ced4ed4dee13d6e0ccdb2296f66663ba6b1419767271090b3ff3478bb9","impliedFormat":1},{"version":"b70bd59e0e52447f0c0afe7935145ef53de813368f9dd02832fa01bb872c1846","impliedFormat":1},{"version":"63c36aa73242aa745fae813c40585111ead225394b0a0ba985c2683baa6b0ef9","impliedFormat":1},{"version":"3e7ffc7dd797e5d44d387d0892bc288480493e73dcab9832812907d1389e4a98","impliedFormat":1},{"version":"db011ec9589fd51995cbd0765673838e38e6485a6559163cc53dcf508b480909","impliedFormat":1},{"version":"e1a4253f0cca15c14516f52a2ad36c3520b140b5dfb3b3880a368cd75d45d6d9","impliedFormat":1},{"version":"159af954f2633a12fdee68605009e7e5b150dbeb6d70c46672fd41059c154d53","impliedFormat":1},{"version":"a1b36a1f91a54daf2e89e12b834fa41fb7338bc044d1f08a80817efc93c99ee5","impliedFormat":1},{"version":"8bb4a5b632dd5a868f3271750895cb61b0e20cff82032d87e89288faee8dd6e2","impliedFormat":1},{"version":"039ab44466a5ea4d2629f0d728f80dda8593f26b34357096c1ab06f2fb84c956","impliedFormat":1},{"version":"017de6fdabea79015d493bf71e56cbbff092525253c1d76003b3d58280cd82a0","impliedFormat":1},{"version":"ab9ea2596cb7800bd79d1526930c785606ec4f439c275adbca5adc1ddf87747d","impliedFormat":1},{"version":"6b7fcccc9beebd2efadc51e969bf390629edce4d0a7504ee5f71c7655c0127b7","impliedFormat":1},{"version":"6745b52ab638aaf33756400375208300271d69a4db9d811007016e60a084830f","impliedFormat":1},{"version":"90ee466f5028251945ee737787ee5e920ee447122792ad3c68243f15efa08414","impliedFormat":1},{"version":"02ea681702194cfc62558d647243dbd209f19ee1775fb56f704fe30e2db58e08","impliedFormat":1},{"version":"1d567a058fe33c75604d2f973f5f10010131ab2b46cf5dddd2f7f5ee64928f07","impliedFormat":1},{"version":"5af5ebe8c9b84f667cd047cfcf1942d53e3b369dbd63fbea2a189bbf381146c6","impliedFormat":1},{"version":"a64e1daa4fc263dff88023c9e78bf725d7aba7def44a89a341c74c647afe80cc","impliedFormat":1},{"version":"f444cfd9eb5bcbc86fba3d7ca76d517e7d494458b4f04486090c6ccd40978ce7","impliedFormat":1},{"version":"5099990c9e11635f284bde098176e2e27e5afc562d98f9e4258b57b2930c5ea6","impliedFormat":1},{"version":"cf7dc8abfb13444c1756bbac06b2dd9f03b5bc90c0ebc1118796dae1981c12e6","impliedFormat":1},{"version":"3cc594d4e993618dc6a84d210b96ac1bd589a5a4b772fd2309e963132cb73cca","impliedFormat":1},{"version":"f189f28612dfeac956380eccea5be2f44dcac3d9a06cf55d41d23b7e99959387","impliedFormat":1},{"version":"b3f82681e61a3e1f4592c1554361a858087cd04ee3112ce73186fc79deeeabde","impliedFormat":1},{"version":"e647d13de80e1b6b4e1d94363ea6f5f8f77dfb95d562748b488a7248af25aabf","impliedFormat":1},{"version":"1567dbd347b2917ba5a386f713e45c346a15b0e1e408d4a83f496d6a3481768b","impliedFormat":1},{"version":"219a25474e58a8161b242776856ec5f6960839b63e74809445e51cadbfc18096","impliedFormat":1},{"version":"2f77672836c646d02dd1fb6c8d24e9cd8c63131c5e9c37e72f30856b1d740e62","impliedFormat":1},{"version":"6309a45fc3c03d3c4d56228e995d51974f53009a842374695b34f3607877e5a3","impliedFormat":1},{"version":"bef94eba81ae2c09059c0d9abdb1ae1b7090314f70550f3c8cd5d7ead4a4f212","impliedFormat":1},{"version":"48b787ad458be9b524fa5fdfef34f68798074132d4b8cfe6a6fe9c2bf334c532","impliedFormat":1},{"version":"37280465f8f9b2ea21d490979952b18b7f4d1f0d8fab2d627618fb2cfa1828e3","impliedFormat":1},{"version":"77d2e5fe68865c678ec562561aad45cfd86ef2f62281ce9bafd471b4f76b8d86","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f3f85dc43cb93c5a797f1ff0fa948d0e17843a443ae11a20cc032ccdf1b9997","impliedFormat":1},{"version":"581843e855d92557cbe9dfe242de4e53badae5e9096ca593b50788f7c89c37f2","impliedFormat":1},{"version":"869010bc679df668137cb3b78a3cb8196e97acf285208a57f6156ceac894a2f7","impliedFormat":1},{"version":"bcae62618c23047e36d373f0feac5b13f09689e4cd08e788af13271dbe73a139","impliedFormat":1},{"version":"2c49c6d7da43f6d21e2ca035721c31b642ebf12a1e5e64cbf25f9e2d54723c36","impliedFormat":1},{"version":"5ae003688265a1547bbcb344bf0e26cb994149ac2c032756718e9039302dfac8","impliedFormat":1},{"version":"ff1d5585a223a2ff2586567e2b3f372421b363739d4812ae6555eb38e2d0f293","impliedFormat":1},{"version":"ba8a615335e3dfdf0773558357f15edfff0461db9aa0aef99c6b60ebd7c40344","impliedFormat":1},{"version":"dd21167f276d648aa8a6d0aacd796e205d822406a51420b7d7f5aa18a6d9d6d9","impliedFormat":1},{"version":"3a00da80b5e7a6864fb8113721d8f7df70e09f878d214fb90bb46833709f07b9","impliedFormat":1},{"version":"a86053981218db1594bd4839bde0fb998e342ecf04967622495434a8f52a4041","impliedFormat":1},{"version":"5c317403752871838140f70879b09509e37422e92e7364b4363c7b179310ee44","impliedFormat":1},{"version":"8b15e8af2fc862870418d0a082a9da2c2511b962844874cf3c2bad6b2763ca10","impliedFormat":1},{"version":"3d399835c3b3626e8e00fefc37868efe23dbb660cce8742486347ad29d334edd","impliedFormat":1},{"version":"b262699ba3cc0cae81dae0d9ff1262accf9832b2b7ee6548c626d74076bff8fe","impliedFormat":1},{"version":"057cac07c7bc5abdcfba44325fcea4906dff7919a3d7d82d4ec40f8b4c90cf2f","impliedFormat":1},{"version":"d94034601782f828aa556791279c86c37f09f7034a2ab873eefe136f77a6046b","impliedFormat":1},{"version":"fd25b101370ee175be080544387c4f29c137d4e23cad4de6c40c044bed6ecf99","impliedFormat":1},{"version":"8175f51ec284200f7bd403cb353d578e49a719e80416c18e9a12ebf2c4021b2b","impliedFormat":1},{"version":"e3acb4eb63b7fc659d7c2ac476140f7c85842a516b98d0e8698ba81650a1abd4","impliedFormat":1},{"version":"4ee905052d0879e667444234d1462540107789cb1c80bd26e328574e4f3e4724","impliedFormat":1},{"version":"a7088b8d6472f674000b9185deab1e2c2a77df6537e126f226591044ae2d128a","impliedFormat":1},{"version":"445fe49dc52d5d654a97d142b143fa2fb1dc16a86906545619b521b1561df501","impliedFormat":1},{"version":"c0c0b22cefd1896b92d805556fcabda18720d24981b8cb74e08ffea1f73f96c2","impliedFormat":1},{"version":"ceec94a0cd2b3a121166b6bfe968a069f33974b48d9c3b45f6158e342396e6b2","impliedFormat":1},{"version":"49e35a90f8bd2aa4533286d7013d9c9ff4f1d9f2547188752c4a88c040e42885","impliedFormat":1},{"version":"09043c4926b04870c1fdfdea3f5fcf40a1c9912304a757326e505bebe04a6d5c","impliedFormat":1},{"version":"cc5dfb7ddc9ab17cf793506f342fffdcb2b6d1d7a9c0e7c8339772fee42b7f91","impliedFormat":1},{"version":"88c34f554b5926f4988d9ff26f84c4f18a4d010f261dac2ed52055eefb9e3c65","impliedFormat":1},{"version":"a7aec47aa991ef5080126c3e2732a8488c13fd846099f89b0d24dc35c0f790d3","impliedFormat":1},{"version":"35085777eb17b745911d00a75be17096fe28a8766081cbd644ef15b4ba756aa2","impliedFormat":1},{"version":"cb498c53a9d35ac1cf9a3515f3835d48b4626a612cf7540c5bfb99542c9ab1a5","impliedFormat":1},{"version":"0ace3010fe4a0e820155e3ccb0172375a01162e528ffc22eec2fa33d697bff24","impliedFormat":1},{"version":"a1b64f86e1279835a2edc6125121dff74b04ef116d0230c20995b013ba37150e","impliedFormat":1},{"version":"39121347a4fa76cf47e67e1259fb0136325528a22bd54b1af6dbec353edf4b01","impliedFormat":1},{"version":"f3c3f17825c6a78681186da04c2f3a0f1c60cfa95f3d4b82bbbd6ebd57214a6a","impliedFormat":1},{"version":"eb45a1782ef50423c1ffac4d2a89c60004f4e2d25ed8e7dcb9e24e6cf984ccdb","impliedFormat":1},{"version":"07c333db8a26594bf2b80cf7b0ef0a83c42c28cb31cc727040f20061558df819","impliedFormat":1},{"version":"e5151e18c3e8d5d2f83ac60a4f4117f9bee54f643b64335858ceaa818e35d364","impliedFormat":1},{"version":"b52b0da52d2fee96d855936e9f3de93ea57e893677e776a46fc6eca96373d3be","impliedFormat":1},{"version":"03b7428a52323f9d455380f00da4f4b0798acb4f5f1c77525b48cb97ad9bc83c","impliedFormat":1},{"version":"6c3cf6de27512969bf59a541bd8e845ba1233e101e14c844e87d81e921fffa53","impliedFormat":1},{"version":"19207ec935fb6b0c022cdfd038ceffef1c948510394f249bde982170d4e57067","impliedFormat":1},{"version":"5276cc934ad4e253f53cf2331268451a66ebf711a027e71f4535af8642055bf8","impliedFormat":1},{"version":"185c55e63eec9da8263b4b1cf447d2ebe2fd7b892e5a0a5571e7e97b3c767bbb","impliedFormat":1},{"version":"f842cd4c63a3b077cf04f7d37ca163ab716f70f60ca5c5eed5c16b09a4c50c3a","impliedFormat":1},{"version":"00abe3d3cd26fcaf76ffeb6fde4ff7d6c8ad8154ac6c5ba41e05b4572fcd152b","impliedFormat":1},{"version":"49b3c93485a6c4cbc837b1959b07725541da298ef24d0e9e261f634a3fd34935","impliedFormat":1},{"version":"abf39cc833e3f8dfa67b4c8b906ac8d8305cf1050caed6c68b69b4b88f3f6321","impliedFormat":1},{"version":"dbbe2af77238c9c899b5369eca17bc950e4b010fa00bc2d340b21fa1714b8d54","impliedFormat":1},{"version":"c73d2f60d717b051a01b24cb97736e717d76863e7891eca4951e9f7f3bf6a0e6","impliedFormat":1},{"version":"2b79620ef917502a3035062a2fd0e247d21a22fef2b2677a2398b1546c93fb64","impliedFormat":1},{"version":"a54f60678f44415d01a810ca27244e04b4dde3d9b6d9492874262f1a95e56c7d","impliedFormat":1},{"version":"84058607d19ac1fdef225a04832d7480478808c094cbaedbceda150fa87c7e25","impliedFormat":1},{"version":"415d60633cf542e700dc0d6d5d320b31052efbdc519fcd8b6b30a1f992ef6d5c","impliedFormat":1},{"version":"901c640dced9243875645e850705362cb0a9a7f2eea1a82bb95ed53d162f38dd","impliedFormat":1},{"version":"ebb0d92294fe20f62a07925ce590a93012d6323a6c77ddce92b7743fa1e9dd20","impliedFormat":1},{"version":"b499f398b4405b9f073b99ad853e47a6394ae6e1b7397c5d2f19c23a4081f213","impliedFormat":1},{"version":"ef2cbb05dee40c0167de4e459b9da523844707ab4b3b32e40090c649ad5616e9","impliedFormat":1},{"version":"068a22b89ecc0bed7182e79724a3d4d3d05daacfe3b6e6d3fd2fa3d063d94f44","impliedFormat":1},{"version":"3f2009badf85a479d3659a735e40607d9f00f23606a0626ae28db3da90b8bf52","impliedFormat":1},{"version":"cd01201e3ec90fe19cc983fb6efaec5eab2e32508b599c38f9bf673d30994f0a","impliedFormat":1},{"version":"8ed892f4b45c587ed34be88d4fc24cb9c72d1ed8675e4b710f7291fcba35d22a","impliedFormat":1},{"version":"d32b5a3d39b581f0330bd05a5ef577173bd1d51166a7fff43b633f0cc8020071","impliedFormat":1},{"version":"f10759ece76e17645f840c7136b99cf9a2159b3eabf58e3eac9904cadc22eee5","impliedFormat":1},{"version":"363dd28f6a218239fbd45bbcc37202ad6a9a40b533b3e208e030137fa8037b03","impliedFormat":1},{"version":"c6986e90cf95cf639f7f55d8ca49c7aaf0d561d47e6d70ab6879e40f73518c8d","impliedFormat":1},{"version":"bb9918dbd22a2aa56203ed38b7e48d171262b09ce690ff39bae8123711b8e84a","impliedFormat":1},{"version":"1518707348d7bd6154e30d49487ba92d47b6bd9a32d320cd8e602b59700b5317","impliedFormat":1},{"version":"ede55f9bac348427d5b32a45ad7a24cc6297354289076d50c68f1692add61bce","impliedFormat":1},{"version":"d53a7e00791305f0bd04ea6e4d7ea9850ccc3538877f070f55308b3222f0a793","impliedFormat":1},{"version":"4ea5b45c6693288bb66b2007041a950a9d2fe765e376738377ba445950e927f6","impliedFormat":1},{"version":"7f25e826bfabe77a159a5fec52af069c13378d0a09d2712c6373ff904ba55d4b","impliedFormat":1},{"version":"ea2de1a0ec4c9b8828154a971bfe38c47df2f5e9ec511f1a66adce665b9f04b0","impliedFormat":1},{"version":"63c0926fcd1c3d6d9456f73ab17a6affcdfc41f7a0fa5971428a57e9ea5cf9e0","impliedFormat":1},{"version":"c30b346ad7f4df2f7659f5b3aff4c5c490a1f4654e31c44c839292c930199649","impliedFormat":1},{"version":"4ef0a17c5bcae3d68227136b562a4d54a4db18cfa058354e52a9ac167d275bbb","impliedFormat":1},{"version":"042b80988f014a04dd5808a4545b8a13ca226c9650cb470dc2bf6041fc20aca2","impliedFormat":1},{"version":"64269ed536e2647e12239481e8287509f9ee029cbb11169793796519cc37ecd4","impliedFormat":1},{"version":"c06fd8688dd064796b41170733bba3dcacfaf7e711045859364f4f778263fc7b","impliedFormat":1},{"version":"b0a8bf71fea54a788588c181c0bffbdd2c49904075a7c9cb8c98a3106ad6aa6d","impliedFormat":1},{"version":"434c5a40f2d5defeede46ae03fb07ed8b8c1d65e10412abd700291b24953c578","impliedFormat":1},{"version":"c5a6184688526f9cf53e3c9f216beb2123165bfa1ffcbfc7b1c3a925d031abf7","impliedFormat":1},{"version":"cd548f9fcd3cebe99b5ba91ae0ec61c3eae50bed9bc3cfd29d42dcfc201b68b5","affectsGlobalScope":true,"impliedFormat":1},{"version":"14a8ec10f9faf6e0baff58391578250a51e19d2e14abcc6fc239edb0fb4df7c5","impliedFormat":1},{"version":"81b0cf8cd66ae6736fd5496c5bbb9e19759713e29c9ed414b00350bd13d89d70","impliedFormat":1},{"version":"4992afbc8b2cb81e0053d989514a87d1e6c68cc7dedfe71f4b6e1ba35e29b77a","impliedFormat":1},{"version":"f15480150f26caaccf7680a61c410a07bd4c765eedc6cbdca71f7bca1c241c32","impliedFormat":1},{"version":"1c390420d6e444195fd814cb9dc2d9ca65e86eb2df9c1e14ff328098e1dc48ae","impliedFormat":1},{"version":"ec8b45e83323be47c740f3b573760a6f444964d19bbe20d34e3bca4b0304b3ad","impliedFormat":1},{"version":"ab8b86168ceb965a16e6fc39989b601c0857e1fd3fd63ff8289230163b114171","impliedFormat":1},{"version":"62d2f0134c9b53d00823c0731128d446defe4f2434fb84557f4697de70a62789","impliedFormat":1},{"version":"02c7b5e50ac8fb827c9cdcd22e3e57e8ebd513f0670d065349bef3b417f706f8","impliedFormat":1},{"version":"9a197c04325f5ffb91b81d0dca917a656d29542b7c54c6a8092362bad4181397","impliedFormat":1},{"version":"e6c3141ae9d177716b7dd4eee5571eb76d926144b4a7349d74808f7ff7a3dee0","impliedFormat":1},{"version":"d8d48515af22cb861a2ac9474879b9302b618f2ed0f90645f0e007328f2dbb90","impliedFormat":1},{"version":"e9ad7a5fecd647e72338a98b348540ea20639dee4ea27846cbe57c744f78ec2d","impliedFormat":1},{"version":"2c531043b1d58842c58e0a185c7bd5ce31e9a708667398373d6b113938629f90","impliedFormat":1},{"version":"5304a80e169ba8fe8d9c77806e393db1f708333afc1f95dede329fdbd84e29c7","impliedFormat":1},{"version":"7f0f90d0ffdd54875c464b940afaa0f711396f65392f20e9ffafc0af12ccbf14","impliedFormat":1},{"version":"2e93bb867fefffaecf9a54a91dbf271787e007ec2fe301d3dce080944c5518e5","impliedFormat":1},{"version":"3ab58250eb2968101cb0f3698aab0faa603660bc2d41d30ae13eaa22d75900d1","impliedFormat":1},{"version":"1f18ceea8d29b75099cc85f357622e87d6a2e0793486f89ab6da32cf9e434feb","impliedFormat":1},{"version":"c280ec77789efcf60ea1f6fd7159774422f588104dae9dfa438c9c921f5ab168","impliedFormat":1},{"version":"2826b3526af4f0e2c8f303e7a9a9a6bb8632e4a96fece2c787f2df286a696cea","impliedFormat":1},{"version":"3ec6d90ec9586e6e96120ff558429cac6ca656d81eb644ce703f736a316a0cd6","impliedFormat":1},{"version":"453b07099526a6d20fd30f357059d413677f919df8abf7346fab7c9abfec43fa","impliedFormat":1},{"version":"485f7d76af9e2b5af78aac874b0ac5563c2ae8c0a7833f62b24d837df8561fb9","impliedFormat":1},{"version":"8bdf41d41ff195838a5f9e92e5cb3dfcdc4665bcca9882b8d2f82a370a52384e","impliedFormat":1},{"version":"0a3351a5b3c74e9b822ade0e87a866bc7c010c1618bcde4243641817883fb8df","impliedFormat":1},{"version":"fe8a3e5492c807cc5cfc8dda4e6464aff0f991dc54db09be5d620fb4968ba101","impliedFormat":1},{"version":"03742d13572a69af40e24e742f3c40e58dc817aa51776477cf2757ee106c6c89","impliedFormat":1},{"version":"414f9c021dde847ee2382c4086f7bd3a49a354be865f8db898ee89214b2d2ced","impliedFormat":1},{"version":"bbbc43627abe35080c1ab89865ec63645977025d0161bc5cc2121dfd8bc8bc2e","impliedFormat":1},{"version":"0be66c79867b62eabb489870ba9661c60c32a5b7295cce269e07e88e7bee5bf3","impliedFormat":1},{"version":"f245714370dd2fdb586b6f216e39dc73fb81d9a49fcb76542a8ad16873b92044","impliedFormat":1},{"version":"3a19286bcc9303c9352c03d68bb4b63cecbf5c9b7848465847bb6c9ceafa1484","impliedFormat":1},{"version":"c573fef34c2e5cc5269fd9c95fe73a1eb9db17142f5d8f36ffe4a686378b8660","impliedFormat":1},{"version":"d97e30dd93590392fed422f2b27325d10ab007d034faaaf61e28e9ddc9d3825b","impliedFormat":1},{"version":"d1f8a829c5e90734bb47a1d1941b8819aeee6e81a2a772c3c0f70b30e3693fa9","impliedFormat":1},{"version":"be1dfacee25a14d79724ba21f1fde67f966b46e2128c68fed2e48c6e1e9822c5","impliedFormat":1},{"version":"19b3d0c212d241c237f79009b4cd0051e54971747fd89dc70a74f874d1192534","impliedFormat":1},{"version":"d6a0db08bed9312f7c4245ee3db068a96c4893ea7df69863eb9dd9c0af5b28f7","impliedFormat":1},{"version":"f17963b9935dd2142c08b006da53afeeaca2c9a600485f6eb9c018b96687275b","impliedFormat":1},{"version":"6671e036f299eda709114347015eb9cf2da8f9ea158871da9c21e9056f7e26ac","impliedFormat":1},{"version":"8375cf1206fa01c23097e5293405d442c83fd03109e938d1bf3d9784f84c2dbc","impliedFormat":1},{"version":"585516c0e8cfe3f12497eb1fd57c56c79f22bb7d729a2c0a32c458c93af68b03","impliedFormat":1},{"version":"a797a41988e5ba36b6707939953b0c0395ed92b91c1189359d384ca66e8fa0ab","impliedFormat":1},{"version":"2b1945f9ee3ccab0ecfed15c3d03ef5a196d62d0760cffab9ec69e5147f4b5aa","impliedFormat":1},{"version":"96f215cefc7628ac012e55c7c3e4e5ce342d66e83826777a28e7ed75f7935e10","impliedFormat":1},{"version":"82b4045609dc0918319f835de4f6cb6a931fd729602292921c443a732a6bb811","impliedFormat":1},{"version":"0fd70ca1eaef1e2dd6f48f16886df4838664821d992fd8076d07fc15e83c8498","impliedFormat":1},{"version":"ba30e6d2f1d20c707566cf485167331a10c539802a79040ced055b62a7aae53e","impliedFormat":1},{"version":"a07a62ef26968e6f49f8a3b438bd9eb6f4eddce472f1f86a2eb38d303b6916f6","impliedFormat":1},{"version":"414726e007c03d228dcb309a9182a773109c7190a8701b10f579632adb2b5003","impliedFormat":1},{"version":"537a2b61594512c5e75fad7e29d25c23922e27e5a1506eb4fce74fe858472a6e","impliedFormat":1},{"version":"311ca94091f3db783c0874128808d0f93ab5d7be82abc20ceb74afe275315d4a","impliedFormat":1},{"version":"7c07838da165fd43759a54d2d490461315e977f9f37c046e0e357623c657fc42","impliedFormat":1},{"version":"b311d973a0028d6bc19dfbaae891ad3f7c5057684eb105cfbeec992ab71fbc13","impliedFormat":1},{"version":"8a49e533b98d5c18a8d515cd3ae3bab9d02b6d4a9ac916e1dba9092ca0ebff15","impliedFormat":1},{"version":"a4c6a9f2ffe4ddcd6a7f25b913f7bc0238c41e4807e9c5b939a53f2e223cdea1","impliedFormat":1},{"version":"ce6c6b9cb612f81cc9c96831a4359124f75a9a343b6601ace601e615a37633fc","impliedFormat":1},{"version":"6d136510215aa809f7b2d0629d15065d1ffb6e0a76f25b34556f334156831730","impliedFormat":1},{"version":"a36185e1a88f282ea24652c90f8fd6e6738a9b01aca90929664152966df4574f","impliedFormat":1},{"version":"6621af294bd4af8f3f9dd9bd99bd83ed8d2facd16faa6690a5b02d305abd98ab","impliedFormat":1},{"version":"5eada4495ab95470990b51f467c78d47aecfccc42365df4b1e7e88a2952af1a3","impliedFormat":1},{"version":"ba87016094bafb7adef4665c2ae4bea1d93da4c02e439b26ea147f5e16c56107","impliedFormat":1},{"version":"40e9c2028b34c6c1e3281818d062f7008705254ee992d9857d051c603391e0f4","impliedFormat":1},{"version":"739a3562ca7403a7e91c22bee9e395127bc634de745ffc9db10b49a012f7d49c","impliedFormat":1},{"version":"4a34de405e3017bf9e153850386aacdf6d26bbcd623073d13ab3c42c2ae7314c","impliedFormat":1},{"version":"fe2d1251f167d801a27f0dfb4e2c14f4f08bf2214d9784a1b8c310fdfdcdaaea","impliedFormat":1},{"version":"2a1182578228dc1faad14627859042d59ea5ab7e3ac69cb2a3453329aaaa3b83","impliedFormat":1},{"version":"dfa99386b9a1c1803eb20df3f6d3adc9e44effc84fa7c2ab6537ed1cb5cc8cfb","impliedFormat":1},{"version":"79b0d5635af72fb87a2a4b62334b0ab996ff7a1a14cfdb895702e74051917718","impliedFormat":1},{"version":"5f00b052713bfe8e9405df03a1bbe406006b30ec6b0c2ce57d207e70b48cf4e9","impliedFormat":1},{"version":"c67ebd22f41275d97669de5bc7e81b347ba8b8f283d3e1a6ebcfc0caf75b754a","impliedFormat":1},{"version":"1b581d7fcfacd6bbdabb2ceae32af31e59bf7ef61a2c78de1a69ca879b104168","impliedFormat":1},{"version":"4720efe0341867600b139bca9a8fa7858b56b3a13a4a665bd98c77052ca64ea4","impliedFormat":1},{"version":"566fc645642572ec1ae3981e3c0a7dc976636976bd7a1d09740c23e8521496e5","impliedFormat":1},{"version":"66182e2432a30468eb5e2225063c391262b6a6732928bbc8ee794642b041dd87","impliedFormat":1},{"version":"11792ab82e35e82f93690040fd634689cad71e98ab56e0e31c3758662fc85736","impliedFormat":1},{"version":"0b2095c299151bc492b6c202432cb456fda8d70741b4fd58e86220b2b86e0c30","impliedFormat":1},{"version":"6c53c05df974ece61aca769df915345dc6d5b7649a01dc715b7da1809ce00a77","impliedFormat":1},{"version":"18c505381728b8cc6ea6986728403c1969f0d81216ed04163a867780af89f839","impliedFormat":1},{"version":"d121a48de03095d7dd5cd09d39e1a1c4892b520dad4c1d9c339c5d5008cfb536","impliedFormat":1},{"version":"3592c16d8a782be215356cb78cc3f6fad6132e802d157a874c1942d163151dcc","impliedFormat":1},{"version":"480ea50ea1ee14d243ea72e09d947488300ac6d82e98d6948219f47219511b8b","impliedFormat":1},{"version":"d575bcf7ebd470d7accf5787a0cf0f3c88c33ca7c111f277c03ebbe6d0e8b0b5","impliedFormat":1},{"version":"72141538e52e99ca6e7a02d80186ba8c877ff47a606fea613be1b7a3439c2b90","impliedFormat":1},{"version":"b43a0693d7162abf3a5b3b9e78acfafd0d4713af4d54d1778900e30c11bc4f83","impliedFormat":1},{"version":"115b155584649eaf75d50bdc8aaa9a0f528b60fade90f0cf78137c875ff7de7c","impliedFormat":1},{"version":"98d88eefab45da6b844d2bee8f6efa8d20c879f6dc870c17b90608a4ac0ad527","impliedFormat":1},{"version":"4eb2ca099a3febd21e98c36e29b3a9472458a1e76e888bf6499614c895ba6be7","impliedFormat":1},{"version":"f4dc28fbbba727722cb1fd82f51a7b9540fbe410ed04ddf35cab191d6aa2ba10","impliedFormat":1},{"version":"b8101e982968b04cfaabfc9613dc8f8244e0a8607007bba3537c1f7cbb2a9242","impliedFormat":1},{"version":"ed3e176bc769725ebc1d93f1d6890fc3d977b9155ae5d03be96ec2d49b303370","impliedFormat":1},{"version":"df032c6c1bad723c3f030dd36289fa04cd5375a999aa6a327d7319b2b29368a5","impliedFormat":1},{"version":"fc5221aedb3b5c52b4fbdf7b940c2115bde632f6cba52e05599363d5cd31019e","impliedFormat":1},{"version":"0289a27db91cb5a004dcf1e6192a09a1f9e8ff8ce606ff8fd691d42de5752123","impliedFormat":1},{"version":"dbb3a46b5070ee274b2cebef3562610d0be4ac5d4e2661695cc9bbe427a631f0","impliedFormat":1},{"version":"20252c8ca030a50addd53074531d3928c474081ac61c174b861c3ab4af366982","impliedFormat":1},{"version":"493534cea0a672ef2cfe5ecee1404e9e9729a88e07f892c045ff27e685ef8854","impliedFormat":1},{"version":"4a48a731413b6fae34620c2e458d0adf2f74083073544a72b1b3a96c32775b2f","impliedFormat":1},{"version":"d405963c5f69955e95c30ef121c7a3309f214f21ef09dceb5d7ac69557cbe0fa","impliedFormat":1},{"version":"b403746aa9e44b5b10a6c1d2ebcf35be1a714e570c7d801cefbf4a066f47ab30","impliedFormat":1},{"version":"c3dc147af5ef951e14797da29b2dcaf1fdddabb0175d538e1bedf64a34690b9e","impliedFormat":1},{"version":"77e6933a0f1e4e5d355175c6d5c517398002a3eb74f2218b7670a29814259e3a","impliedFormat":1},{"version":"90051a939d662322dbc062f856f82ccc13fbb6b3f3bbb5d863b4c5031d4e9a85","impliedFormat":1},{"version":"68969a0efd9030866f60c027aedbd600f66ea09e1c9290853cc24c2dcc92000f","impliedFormat":1},{"version":"4dbfad496657abd078dc75749cd7853cdc0d58f5be6dfb39f3e28be4fe7e7af5","impliedFormat":1},{"version":"348d2fe7d7b187f09ea6488ead5eae9bfbdb86742a2bad53b03dff593a7d40d1","impliedFormat":1},{"version":"169eab9240f03e85bffc6e67f8b0921671122f7200da6a6a5175859cdd4f48d8","impliedFormat":1},{"version":"04399fe6ea95f1973a82281981af80b49db8b876df63b3d55a1e1b42e9c121a9","impliedFormat":1},{"version":"5348b83c7c112f5ed380e4fb25520c5228d87bf9a362999ea2d097f11ffe839f","impliedFormat":1},{"version":"fd96a22ea53055740495377e18f3ddcba3cd3a6b14ee3f2d413ca4fb4decbf92","impliedFormat":1},{"version":"06842d406f05eadefc747f4a908d0bf03fcf9dd8733017fa8e94768e3562167e","impliedFormat":1},{"version":"ab81f0808d40b6c66650519f0328a422427ed78c3ea6ce43a259d3f27170c270","impliedFormat":1},{"version":"53f883e905a2b28ff75fab6ea92b8ff7b9c7dce1692ea2044aa64140a17e4102","impliedFormat":1},{"version":"f9b9357c944b38afe6a60e0c0a48c053c1146a2b22f5b5771e7593fa74c498a3","impliedFormat":1},{"version":"44864a0d6a9c9a10533b3f874ede727ed1ec793f75317dde1c5f502788d4378b","impliedFormat":1},{"version":"6156d924b38105dfdfde6d8a0945d910b9506d27e25e551c72cc616496952a5a","impliedFormat":1},{"version":"db06627a8bc9ff9c94a3dfbba031dd19893f0ecf09bc83735d088d1e9b8c0a10","impliedFormat":1},{"version":"9b94d6b8c6ebfec5f8507900f04af6aa3a1f673b76334f02ef8bf0da6b23e255","impliedFormat":1},{"version":"05a618d1e5019598f7d2256ce7a51d4bf70b682cbb8604d847c186e1df619a65","impliedFormat":1},{"version":"119eb483b72e7f9b1b58c07bf7195470194060f6c51fdc5b5922961734b696be","impliedFormat":1},{"version":"d7f6f806584c935a4791ee8fafc39d42ad033699f5db0d2933d6dd4db6be30d1","impliedFormat":1},{"version":"c8b3b55d5a2dff0cbc47bb0d4e38fc73f9f68f1b9e1f62c34edb09a43b95c2dd","impliedFormat":1},{"version":"757f7967151a9b1f043aba090f09c1bdb0abe54f229efd3b7a656eb6da616bf4","impliedFormat":1},{"version":"786691c952fe3feac79aca8f0e7e580d95c19afc8a4c6f8765e99fb756d8d9d7","impliedFormat":1},{"version":"3dfd48c19c6c245e74df4b2c04b6d0f1db0cfdac3536e64998d60c26aaf71294","impliedFormat":1},{"version":"ca9c62b4a4ef031e540fdb29202df397778053cc3d1d69a247cfb48740696f1d","impliedFormat":1},{"version":"40ab53ad78a76cb291d1fa82d8e9280aaaece3ae8510e59429c43e720b719e60","impliedFormat":1},{"version":"42534f3ebe5fb14f5face2c556631cfebf0ad77e3d351529848e84c4cb1091f8","impliedFormat":1},{"version":"179c27348124b09f18ef768012f87b2b7f1cdc57f15395af881a762b0d4ba270","impliedFormat":1},{"version":"651fe75dc9169834ef495a27540cff1969b63ccdac1356c9de888aaca991bfbf","impliedFormat":1},{"version":"7abc0a41bf6ba89ea19345f74e1b02795e8fda80ddcfe058d0a043b8870e1e23","impliedFormat":1},{"version":"ab0926fedbd1f97ec02ed906cf4b1cf74093ab7458a835c3617dba60f1950ba3","impliedFormat":1},{"version":"ce9abc5ff833d7c27a30e28b046e8d96b79d4236be87910e1ef278230e1a0d58","impliedFormat":1},{"version":"7f5a6eac3d3d334e2f2eba41f659e9618c06361958762869055e22219f341554","impliedFormat":1},{"version":"e6773ee69d14a45b44efa16a473a6366d07f61cd4f131b9fea7cd2e5b36a265c","impliedFormat":1},{"version":"4093c47f69ea7acf0931095d5e01bfe1a0fa78586dbf13f4ae1142f190d82cc4","impliedFormat":1},{"version":"4fc9939c86a7d80ab6a361264e5666336d37e080a00d831d9358ad83575267da","impliedFormat":1},{"version":"f4ba385eedea4d7be1feeeac05aaa05d6741d931251a85ab48e0610271d001ce","impliedFormat":1},{"version":"52ae1d7a4eb815c20512a1662ca83931919ac3bb96da04c94253064291b9d583","impliedFormat":1},{"version":"6fa6ceb04be38c932343d6435eb6a4054c3170829993934b013b110273fe40af","impliedFormat":1},{"version":"0e8536310d6ed981aa0d07c5e2ca0060355f1394b19e98654fdd5c4672431b70","impliedFormat":1},{"version":"e71d84f5c649e283b31835f174df2afe6a01f4ef2cb1aafca5726b7d2b73a2e4","impliedFormat":1},{"version":"6d26bc11d906309e5c3b12285f94d9ef8edd8529ddee60042aba8470280b8b55","impliedFormat":1},{"version":"8f2644578a3273f43fd700803b89b842d2cd09c1fba2421db45737357e50f5b1","impliedFormat":1},{"version":"639f94fe145a72ce520d3d7b9b3b6c9049624d90cbf85cff46fb47fb28d1d8fe","impliedFormat":1},{"version":"8327a51d574987a2b0f61ea40df4adddf959f67bc48c303d4b33d47ba3be114a","impliedFormat":1},{"version":"00e1da5fce4ae9975f7b3ca994dcb188cf4c21aee48643e1d6d4b44e72df21ee","impliedFormat":1},{"version":"4d250e905299144850c6f8e74dad1ee892d847643bacf637e89adcce013f0700","impliedFormat":1},{"version":"51b4ab145645785c8ced29238192f870dbb98f1968a7c7ef2580cd40663b2940","impliedFormat":1},{"version":"100802c3378b835a3ce31f5d108de149bd152b45b555f22f50c2cafb3a962ead","impliedFormat":1},{"version":"fd4fef81d1930b60c464872e311f4f2da3586a2a398a1bdf346ffc7b8863150f","impliedFormat":1},{"version":"354f47aa8d895d523ebc47aea561b5fedb44590ac2f0eae94b56839a0f08056a","impliedFormat":1},{"version":"dfa1362047315432a0f8bf3ba835ff278a8e72d42e9c89f62d18258a06b20663","impliedFormat":1},{"version":"67f2cd6e208e68fdfa366967d1949575df6ccf90c104fc9747b3f1bdb69ad55a","impliedFormat":1},{"version":"976d20bb5533077a2135f456a2b48b7adb7149e78832b182066930bad94f053a","impliedFormat":1},{"version":"589713fefe7282fd008a2672c5fbacc4a94f31138bae6a03db2c7b5453dc8788","impliedFormat":1},{"version":"26f7f55345682291a8280c99bb672e386722961063c890c77120aaca462ac2f9","impliedFormat":1},{"version":"62b753ed351fba7e0f6b57103529ce90f2e11b949b8fc69c39464fe958535c25","impliedFormat":1},{"version":"514321f6616d04f0c879ac9f06374ed9cb8eac63e57147ac954e8c0e7440ce00","impliedFormat":1},{"version":"3bccd9cade3a2a6422b43edfe7437f460024f5d9bdb4d9d94f32910c0e93c933","impliedFormat":1},{"version":"50db7acb8fb7723242ec13c33bb5223537d22e732ea48105de0e2797bdeb7706","impliedFormat":1},{"version":"ff4aeeeaf4f7f3dc3e099c2e2b2bb4ec80edda30b88466c4ddf1dd169c73bf26","impliedFormat":1},{"version":"151aa7caace0a8e58772bff6e3505d06191508692d8638cd93e7ca5ecfa8cd1b","impliedFormat":1},{"version":"3d59b606bca764ce06d7dd69130c48322d4a93a3acb26bb2968d4e79e1461c3c","impliedFormat":1},{"version":"0231f8c8413370642c1c061e66b5a03f075084edebf22af88e30f5ce8dbf69f4","impliedFormat":1},{"version":"474d9ca594140dffc0585ce4d4acdcfba9d691f30ae2cafacc86c97981101f5c","impliedFormat":1},{"version":"8e1884a47d3cfddccf98bc921d13042988da5ebfd94664127fa02384d5267fc3","impliedFormat":1},{"version":"ea7d883df1c6b48eb839eb9b17c39d9cecf2e967a5214a410920a328e0edd14e","impliedFormat":1},{"version":"0e2a6b2eeadafbc7a27909527af46705d47e93c652d656f09cc3ef460774291b","impliedFormat":1},{"version":"ed56810efb2b1e988af16923b08b056508755245a2f8947e6ad491c5133664ed","impliedFormat":1},{"version":"ed012a19811c4010cb7d8920378f6dd50f22e1cf2842ecb44a157030667b165e","impliedFormat":1},{"version":"26a19453ef691cc08d257fbcbcc16edb1a2e78c9b116d5ee48ed69e473c8ff76","impliedFormat":1},{"version":"90f08678b00c7b7aaaad0c84fb6525a11b5c35dad624b59dcadd3d279a4366c4","impliedFormat":1},{"version":"97ba9ccb439e5269a46562c6201063fbf6310922012fd58172304670958c21f6","impliedFormat":1},{"version":"50edac457bdc21b0c2f56e539b62b768f81b36c6199a87fbb63a89865b2348f0","impliedFormat":1},{"version":"d090654a3a57a76b5988f15b7bb7edc2cdc9c056a00985c7edd1c47a13881680","impliedFormat":1},{"version":"25091d25f74760301f1e094456e2e6af52ceb6ef1ece48910463528e499992d8","impliedFormat":1},{"version":"37c8a5c668434709a1107bcc0deb4eaee2bc2aaa4921ac3bd4324b7c2a14d7fb","impliedFormat":1},{"version":"e4d6f03a31978e95ee753ec8fec65a50dc4fa91bf5630109b5f8676100ec1c7a","impliedFormat":1},{"version":"fb9b98cf20eafb7ec5d507cf0f144a695056b96598c8f6078c9b36058055a47c","impliedFormat":1},{"version":"b69f00ee38cbb51c6b11205368400e10b6e761973125c6e5e4288ba1499a6750","impliedFormat":1},{"version":"f0f698a6dd919322ef2dbf356a35cacebebf915f69a5fda430026c3d900eb8c0","impliedFormat":1},{"version":"cc38246d0ac48b8f77e86a8b25ec479b7894f3b0bc396a240d531a05ad56a28a","impliedFormat":1},{"version":"047eada664e4ad967f12c577e85c3054751338b34fc62baedfd48d590f2480de","impliedFormat":1},{"version":"1a273232fbaa1389aa1e06b6799df397bbc4012a51ce4c6ea496ddc96c9f763e","impliedFormat":1},{"version":"853d02f4f46ca9700fefd0d45062f5b82c9335ba2224ca4d7bd34d6ae4fc4a7f","impliedFormat":1},{"version":"5f9ab7ba179f92fa3c5dddafec778a621fe9f64e2ba8c264ddf76fe5cf9eaf93","impliedFormat":1},{"version":"f3a5d6af934c0368c411773ae2797e35de76f1442f7ba7f70dc34e7b6414d44f","impliedFormat":1},{"version":"cfdb6424be9f96784958b8db382966517ea8d942f88820c217ac381650c83248","impliedFormat":1},{"version":"ad650dc0b183dca971e1f39ceebc7f8c69670e8ef608de62e9412fc45591c937","impliedFormat":1},{"version":"887b69ee7a553db2adcdf2ce326de30bc58d8167b5f7e0b032f967f8662afb36","impliedFormat":1},{"version":"0d91e0aac110b6a18bbabcb319da477d88812f2098fd628bf66184f04fd4a732","impliedFormat":1},{"version":"9e6b4a7b4510e81b39f3650a171a51ed9238e6cd040119ac989c9be8c4c80dbd","impliedFormat":1},{"version":"b2415721ef2ce2d99d0edb92eb520b30fe1eb302be075a47f115d2e70f3ad2d8","impliedFormat":1},{"version":"fa3b257e37ce8b9f5575dd10c673770df88be410b74ffa8d575603cf261ad2e0","impliedFormat":1},{"version":"b3cc1bb7311f35569b531e781d4a42d2b91f8dfd8bc194cc310c8b61011d6e43","impliedFormat":1},{"version":"54c171f00a5219a2019296b92550daa0a6cf420fc7a4f72787be40eac1112c67","impliedFormat":1},{"version":"8ca2d01f5f3d4d4067aadea230570afa4c91e24e485fbe2e9d53ead3b33f80d0","impliedFormat":1},{"version":"119e2a82b2910c7a2dabb32c2ab3e08c937974b900677839e5a907b4cff70343","impliedFormat":1},{"version":"c7ddf2aa89f4541979c8337682b6bc278e5535be0f1fac98c778e222ef357703","impliedFormat":1},{"version":"dcf067993ca6e8af8050ebb538f3db1d9ab49fc1d8392ab2a9e2db50919e7337","impliedFormat":1},{"version":"0f63b5a5b7b2432c862c0e3220672bf21559a8e75a84b8e428f39f5faff4ecf5","impliedFormat":1},{"version":"401b83ed6f8a1a084c92f79feadeb76540a8a1945d7d000ffea91610430fd3e4","impliedFormat":1},{"version":"6b3ddfe199c192fb8d98dac38ed8ee556ddc93983dbe4e17c3162f48a366ac26","impliedFormat":1},{"version":"77c44ea4ff9e9317abf4f98b017c169daf532f58bcc9e063ae55ad04b34c4343","impliedFormat":1},{"version":"1f5904140e71e8903605b7933483c32fa097e990e837c087300de00dadf448d1","impliedFormat":1},{"version":"8fca3d2b2a6da9bb079ec8802926f72ce5ba8f12b10e7918590b4f2b877e960e","impliedFormat":1},{"version":"aa75e0aa41cbe13639a05a59325bf8c620b684139a970992a437304b99167dc3","impliedFormat":1},{"version":"711453a7b47b5ed61613433a89b5643d26584de9c9aed8fb981208d71872767e","impliedFormat":1},{"version":"a53a62ef9b7ffeafee6861dc047b967c6e0bf42a2a67033fada7b6e52e1bc615","impliedFormat":1},{"version":"35bc256273c304ef5bf203e0706ed0ed6fa9de40fad8a30eebbeee0b853dcc92","impliedFormat":1},{"version":"774adcddeb41ed22be4d1ab586c762ddb2948a84a7a3f9867d2cd4af1d837ffd","impliedFormat":1},{"version":"cfaee3e42970c0fb51fbcd015db5f9ae663b8969d5e54f7d88e3c96246517f69","impliedFormat":1},{"version":"c402c80b5ae39dd6122f9663d887ff9022e013bcbb7b54fbc0615cc8a2dde3ca","impliedFormat":1},{"version":"82af9a77dfc85173fa56109f08d66f6fe5485d7011c5c1d174fb1d5f39b0ffef","impliedFormat":1},{"version":"065e7ba3dc90e6adb698c206897c875c208e86d765480ae5e4c190b5fb4c7a39","impliedFormat":1},{"version":"940494b72aa9bbd6b99249cb12713c719c7df220c3290fb355dae5f54d2ea5d9","impliedFormat":1},{"version":"025eb899a885dd305be2fb16f38a1564a95ddd25d9e5e8017829304265999025","impliedFormat":1},{"version":"f44708ba63ee4af745ce9a3307d4f20e686ec2d075c2bc9188f9101b7fe97288","impliedFormat":1},{"version":"1dd37c37187e7f71a82262aaa9e2db4ea4ab5a504326324c08724ab7f51e1b63","impliedFormat":1},{"version":"c822a1e1245f4aebe787b381ec31e7573c859579a93023c8b00be3d9a49b66d6","impliedFormat":1},{"version":"a25494aaa1b278f80f73ff79bdf00107c051727162e01aa931c90331bb8ebd8f","impliedFormat":1},{"version":"567cfab6fb2c86ba22b6738188b33f104f23e2a7407c098a3b3970e362b83075","impliedFormat":1},{"version":"1e73ecd4da907926b4feee7474f7999ba70cd586d0efa981e113eb68ffa0d22d","impliedFormat":1},{"version":"e937fe62b1339e08caa7e22acec57be49ae83010947443512005c710cb59ec84","impliedFormat":1},{"version":"848eaa9d6fc56f31a6abaedb61f0825121b0cda122b58262fec156e7c4184fa5","impliedFormat":1},{"version":"eb2c2ecde33a819fd65ae4d123b02920f52bcc4d48752fbeb9b645334b8905c7","impliedFormat":1},{"version":"0b9382de2576798f08286e25704785a244279fc86ecec0b900608be9a508e9fd","impliedFormat":1},{"version":"672b24b32690e7cf9bcf9c1d6622f1e55b318905ec6091cbdb5ba235047075b9","impliedFormat":1},{"version":"b61c1ceb88b79b0cfa7e8de1595e236b87ce4c6bb8ab0808d721e8fb70004759","impliedFormat":1},{"version":"d93370427cc358d66a7e014d9a03d36965c73b30a0c6ad52848adf65178243c3","impliedFormat":1},{"version":"0512fb25a9e94863308c5c11d56831e8c02b7d8ce92081788c56a2943cb38375","impliedFormat":1},{"version":"fb489f2065438683ba5b42fb5d910b5cb714d87781c618ae7a6bd8eac7cdb9cc","impliedFormat":1},{"version":"2703b5b6d024695ef877be342c8f28dd09e15881df56cb44daa042b381285e96","impliedFormat":1},{"version":"75cfa7274d43596af9a3adc2c284a3a7c5459c0d911b65ec6fd8d5a63beaff6b","impliedFormat":1},{"version":"54d7240da9eda456c661e89ca15703a8471d37c355b6eee2f50dd25f86649d8c","impliedFormat":1},{"version":"11ca2af592299c6eaa4c22f6b1df9a04b200aaffb9ea54b7eefc120fd677c8bb","impliedFormat":1},{"version":"4c827b71b26b6167b7f002be5367c59234b92e61e195c72389d3f20ef1e681f7","impliedFormat":1},{"version":"359d1d4984ff40b89626799c824a8e61d473551b910286ed07a60d2f13b66c18","impliedFormat":1},{"version":"23908bd6e9ea709ab7f44bd7ad40907d819d0ee04c09a94019231156e96d9a67","impliedFormat":1},{"version":"ef406784c5c335c46179b1917718ce278a1172f8e1e80276be8147136079d988","impliedFormat":1},{"version":"16db34e3e82865e6b4bef71bbfe7e671cc8345ba5ae67c8ca20e50bcb18d0a6c","impliedFormat":1},{"version":"80b230becfd8a35955f13f6022e8fd59af9612a3ef83e14159cc918b3be0faea","impliedFormat":1},{"version":"13047b53c08e875952c73e0098cacbc0c93bbeadc5f59be352f0781e796e620a","impliedFormat":1},{"version":"3dcab336869307408255710db852dd809b99bdce8bd95856e5f97ebd8d7bfee2","impliedFormat":1},{"version":"437cb230543cdc5e9df94a25ca6b863c7f5549a10d017f4bf9691e9577a184db","impliedFormat":1},{"version":"68c13f0ab6f831d13681c3d483b43cfa4437ed5302e296205117d30a06f3598c","impliedFormat":1},{"version":"85d5fdfaaa0bf8825bdd6c77814b4f2d8b388e6c9b2ad385f609d3fa5e0c134c","impliedFormat":1},{"version":"3843e45df93d241bd5741524a814d16912fe47732401002904e6306d7c8f5683","impliedFormat":1},{"version":"230a4ee955583dd2ab0fda0b6442383da7ee374220c6ee9cb28e2be85cf19ea3","impliedFormat":1},{"version":"1ad662354aa1041a930f733830982d3e90c16dbbfc9f8a8c6291ca99b2aa67f3","impliedFormat":1},{"version":"a40b3b560a57ff2597377c8bd977fe34e7e825994962367127e685f2f4911cd8","impliedFormat":1},{"version":"46cdcbef9616adf45cf9303b6ee16297a7ee0437d39fa6821f33a70cd500c5c9","impliedFormat":1},{"version":"60434c3d79638cea7bbb79e0edd4baca1e18d2cd828c7d4af7711e4dedee9cb8","impliedFormat":1},{"version":"24ecf0e691a8cb8b2f352d85fa9e42a067408ecc35d7fa1dc6dec3424870c64c","impliedFormat":1},{"version":"c5053ebc1c7a583a088706d64d5ba31bad79af910d9850585213a55926362d30","impliedFormat":1},{"version":"2e2655be5c5db990f66408139609199d1ffdea1434b8296276c3dfee6bfbebcc","impliedFormat":1},{"version":"b635a95362b7cffe4ce7bbdddac5a66ade1c79a9dad80696d33672c3f5f72a92","impliedFormat":1},{"version":"9d8b155d9905e35cba1323b606c2da0669f9626f622b80dfb72cf5ea09d1ed0c","impliedFormat":1},{"version":"d62dd90cb65049f765bc40783a32eb84b1ffb45348a7dcc8c15fbda3a1dc0ffb","impliedFormat":1},{"version":"8cf63a573c0a87084f6eff0cd8d7710b7805aba361f0c79c0278bb8624287482","impliedFormat":1},{"version":"b383818f7fcacf139ae443ce7642226f70a0b709b9c0b504f206b11588bffeed","impliedFormat":1},{"version":"8bb7d512629dbe653737c3ac8a337e7f609cc0adc9a4a88c45af29073b1cbeb0","impliedFormat":1},{"version":"806ac3f719f0025409579bf0ecb212eb2020fb11f0d70f2530b757b0052fcdb8","impliedFormat":1},{"version":"6ee9b7c86d1a9512f219dca191dca06bd3a8bfaa1d3324e5a95c95ca83ebf7cd","impliedFormat":1},{"version":"62eb5c2cfd53aea0d5fe60efde48800bd004399802bd433a5d559ae2a8c2678d","impliedFormat":1},{"version":"534f37a1f690a436c1087bcc70ae92a8952d0cb87bba998c948dcbee57b70220","impliedFormat":1},{"version":"6ed79bfd938106e0345b6d36665442fbca5d5a21ad7d4e20215405138c90af84","impliedFormat":1},{"version":"15cb87058e468d58b29b5734fe1e08d025fefbe91f55e90d673e3937eb167a25","impliedFormat":1},{"version":"0985a8ea0f64a06cd50052c7d002ddb8232f8e879db7cac2366230734d16efc4","impliedFormat":1},{"version":"1605b9b88099e0f3f4a823406753e8560f21e87801f5405514c0eee550621376","impliedFormat":1},{"version":"54210083643e803ace014ed3a90e954366330d7a616b890307781e0c67f47ff7","impliedFormat":1},{"version":"5d41ebf1f7941e35fc43fbf125872c898660bdab951b191429c47753c8efbeed","impliedFormat":1},{"version":"189bcaf649388711e0a9b2d9c987aca3b08d59e1635b8cce656c9c806f02aed9","impliedFormat":1},{"version":"7c2342b0b4c053b2d8bc7496d2f9e5f95c1b87331208d48123763fc167bef797","impliedFormat":1},{"version":"73b8992397b5d09e4c4a5480864ce58d2cb849b6899bfc0f94f602f1a72e5ead","impliedFormat":1},{"version":"b3ca3895fe249990537d47f501b596b853aea53b6bd55327aaa07ea056a0eaaf","impliedFormat":1},{"version":"cc73c691dd51a49ef04f26df601784517a27072738a967a9ab4539f29bf41f5f","impliedFormat":1},{"version":"06d3411fd086a7728ecca93ecd576d98b2bc6cb5201bb7e696d78c393efa6f24","impliedFormat":1},{"version":"a2d74bc6ef511a469d21aa5c8244dff63fb048d9cd8f4fea8661e1294db3fddc","impliedFormat":1},{"version":"01b0a0ca88ac71ee4f00915929f7ff1313edc0f10f4ac73c7717d0eef0aca2e0","impliedFormat":1},{"version":"42f22bb3d66d119f3c640f102d56f6ee6ea934e2a957d9d3fa9947358d544d3b","impliedFormat":1},{"version":"5cac27c7645b28561466eedb6e5b4c104e528c5fc4ae98d1f10ccbd9f33a81e4","impliedFormat":1},{"version":"3f814edf8366775fdb84158146316cd673ecfdc9a59856a125266177192f31c8","impliedFormat":1},{"version":"69c7facfd101b50833920e7e92365e3bd09c5151d4f29d0c0c00ee742a3a969a","impliedFormat":1},{"version":"fbdca9b41a452b8969a698ba0d21991d7e4b127a6a70058f256ff8f718348747","impliedFormat":1},{"version":"b625fbbf0d991a7b41c078f984899dcddf842cfb663c4e404448c8541b241d0b","impliedFormat":1},{"version":"7854a975d47bf9025f945a6ea685761dedf9e9cd1dad8c40176b74583c5e3d71","impliedFormat":1},{"version":"28bbf6b287a5d264377fdf8692e1650039ae8085cb360908ae5351809a8c0f6e","impliedFormat":1},{"version":"cf5fa2998a0a76182729e806e8205d8f68e90808cdd809c620975d00272a060c","impliedFormat":1},{"version":"9e35d161c5c02dfa63a956c985b775c05aeeb6b780a4529a56b43783d243aad7","impliedFormat":1},{"version":"a471d6a0eafcdff19e50b0d4597b5cef87a542a6213194ae929cdeffbc0e02c0","impliedFormat":1},{"version":"5abf64e067319de07b5e25ffcc75fba5d00bcb579cdc69325a1ad3f3b3664284","impliedFormat":1},{"version":"56536d7f1073fa03399662e97d012bc70d62c31b763d0bea0e0040e6f1609ad6","impliedFormat":1},{"version":"7b9e8561139aa30959113ef793e059e0933b50335aecaef8cdcf81e03a9984ae","impliedFormat":1},{"version":"5b1e11bcea7e4e25725574b10a00ad65222d5db7ae354012b3f2df0291e482ca","impliedFormat":1},{"version":"f82f1cea8bc6838721600c6da5ad5e75add0120ecf923f6dae5ef458e74f9738","impliedFormat":1},{"version":"f1242f57c39da784930e65296059988b30e557e22dbccac0b462f017ceb582dc","impliedFormat":1},{"version":"955819a952aed955630ac562fca9c65f651c4ba7adab784a3b52e111c2888cf4","impliedFormat":1},{"version":"5c38f2b2928efee908918b9dad4cfc6ff9bbc67261047c5cf8de7d0ed45d37ae","impliedFormat":1},{"version":"3e95371ee476c736da21ff23815be5a72e56e70a2dc80749c895102448cb1f02","impliedFormat":1},{"version":"da620761233f2b0b722e0371821e29fd8bc5a0909c2e81efcd89d044cc9e46ee","impliedFormat":1},{"version":"d2ef66c3f5d3401bd95d48492fb7861f3f8e8992a17543c75f5bfb904e07d932","impliedFormat":1},{"version":"af4ad02f3a1457af2e2331399229a7d70e1cb1198b1aecc0bc18aa3b3b695bbc","impliedFormat":1},{"version":"52b6c07b8f8b1b46bf85c2129e0c4cf233203c199837d4a17e914459d09e986a","impliedFormat":1},{"version":"b06c9df7ff5e6f0af9b8efa9c235cfb5d53fd241c3993442fe9b5fed02f6f362","impliedFormat":1},{"version":"ced3c7f1dad5edeaa027ffb20b1b12bb816b6dc6b36eddf5f6fe681a90205882","impliedFormat":1},{"version":"0fd8933626dab246a420f9d533161c0ce81618e94c1f262e80dd6564dc3b2531","impliedFormat":1},{"version":"615ad07ab7542be91ec72aa0656fd8daed4feac15a2459aaa7c36dfc32f4e37d","impliedFormat":1},{"version":"df12cb709574b860f8e33c022e9561f339ba71794cd5d4b0d22b8be3ea509f52","impliedFormat":1},{"version":"31ff5aebab2436465c61de78fcf94b7d6d03915951310e0cfb6dc61b1e3ed751","impliedFormat":1},{"version":"d2745be767c32464627abc322a88f5076df5802a16a260d7ccf13600ad0a615e","impliedFormat":1},{"version":"aa73259de07ff85e39d2b49fbd233847690ff8ad4875d0023805d2a015f4ea43","impliedFormat":1},{"version":"74a907fa14655328575b29e4dbdf58440dd07c081d9d245f785c4143d10510c8","impliedFormat":1},{"version":"fbcdb2ccec93060304b878e7f65246b6b2c992e896774e9eaf7744f58a9cd8a6","impliedFormat":1},{"version":"935094dc19b20214f20677d5b871aa34e0e3280e6c852dd57b6a118134a15764","impliedFormat":1},{"version":"ea99aa2e537966df22f8192e99929ee81719c1cf0b9d9d83d0c6fed53325ccc6","impliedFormat":1},{"version":"c624b65789f71d3fe13d03b599adbaaf8b17644382f519510097537736df461b","impliedFormat":1},{"version":"3fbeaff576ce5b8035224fbcb98ec13b7cdd16cdbbf8ee7b4052d3d6330683fb","impliedFormat":1},{"version":"cc8eac1829ee2ec61323b3af1967790ceb9d0815ef8c40c340bc8090c17a9064","impliedFormat":1},{"version":"5947f213795a08df7324841661f27341937a5603edcd63fa2d2d66fb11864ec9","impliedFormat":1},{"version":"2d9f4d58554a246616eeaa090a2fb0dddccf412e88617975138389fb15770ca9","impliedFormat":1},{"version":"9d5e2347ea0d666f938644fdd4ea2bd48abd70b69e68db435b0e9d82c21debe3","impliedFormat":1},{"version":"74eeab10497f9b660c5faa35a4c798985d501f4c6ac59ec0a4f5bf1e9e22f8d5","impliedFormat":1},{"version":"d446fdfec829e31d378519e8f620c420c4e840e2a7d19a656f5a6344c11407a4","impliedFormat":1},{"version":"f1ec2d9212dc5cd83f1038f3a741f97067076d025200e09e79408f580aa2f136","impliedFormat":1},{"version":"f490808f95d865d54db083d788e506f84c9d02f0ecba87997fd7cef70ee08784","impliedFormat":1},{"version":"638e8b27e94621111990350172ee1fc44be69bb6033970fc409bd4ba7968afe2","signature":"d8cc675be16ff9d178cc963a71cf6b539d5b65cf0111fba950f2751199e71a57"},{"version":"9de7b015a813d1a050f7905d36cfe57297fda0dc5d325a2957ebf2f90e526345","signature":"96cef5a2baa806eec5cdd3cca6c441dca0828b70ef6d7624152600e326b04f71"},{"version":"fa101522b6fbf425edc6292eb14190a7f27ec3c364d1b19639c459859ed60284","impliedFormat":99},{"version":"139523f3f6d44c869e71b0f56f741c30a53b99756deec9b774718851722aa6c9","impliedFormat":99},{"version":"9a5640995a96d0b6b845717e93e142dee444ed6f79e7b8d802741fb7aa5c3708","impliedFormat":99},{"version":"86b8aae4d61af7be60a1c11569d911abf4f774bcfaa4437a972e63c638ee6918","impliedFormat":99},{"version":"fcf3b428f597fd2acf75232aaf4408ac3f2a50255f0c3022911246e30b5ff75c","impliedFormat":99},{"version":"39f7578e1302b500eca2606f170358a1297d7ebc48ebdcb100522252f70584b0","impliedFormat":99},{"version":"de6c897112689d7abe8f741ad66895b473ff5ead7dff8f00d16b5d13d9d522a2","impliedFormat":99},{"version":"77279bdb5714d9350a80561b909f8ae73fe8a5d84e3d9236f7f37d14a5f84c88","impliedFormat":99},{"version":"c397089e36b0efadec5dc18937a3559bb73912ec8fbbedce6cda0424fcf87b4b","impliedFormat":99},{"version":"98448d8425dd2ae4244a14428a3da71ea4a2984ff67969bed6a2dc949618148e","impliedFormat":99},{"version":"4c4328cfb1aed24b7931282039554f435ca3adc5f89312e6f80c49dbd87a0ea7","impliedFormat":99},{"version":"488146d990ff3442e1431406b6d25d85b8c0914adecb45649057b0f8fc3abc33","impliedFormat":99},{"version":"d405e85684e39be9b80f81b8c887a43d1ac36b6e283af0ea16a87db1390814a1","impliedFormat":99},{"version":"7e2073925e7f936cc5be334708f852adf3e0bcbc1f844b42b2a3cacac6a089f2","impliedFormat":99},{"version":"594fb40ac2c67050d85f3cde7deaa7aefedb930366179c1b7948b019ff8565a4","impliedFormat":99},{"version":"622216a75753b4516751803cbb451a4fd68ef616685af63761efed31649e593b","impliedFormat":99},{"version":"6b46819c850eaed08d28c38fcebd318deb4320cdc4b39285f4680f2b4602cdf8","impliedFormat":99},{"version":"854ecd9a81d72be4d1fe1b6da164fc3fe9af7b7c10b5b8fda8d6e6067413ff04","impliedFormat":99},{"version":"ed93adcc5c80ee8a2491b4ba0067ae8ed6067673210cf9addc232b18c155e3b4","signature":"359570399f567f015ff8f9793678d7ed6a2f6aa2141a03e02d7ffa81f7ba4e6e"},{"version":"b51cf0b380d815f8ab3de5f7d3a2e492c1a0a65164be7c915b3100e95fd072d1","impliedFormat":99},{"version":"86fbffcecd36078df1aba97634b5e05b670c2d3fdf88cda28af363235341c498","impliedFormat":1},{"version":"593654eebe902db28ca173f021f74ea9f77e8b344aebb0a80fa4d10f29bb3a9d","impliedFormat":1},{"version":"1f9c17dd0e70255a43698d2791228eddec1944af3b805a0e2add961b8084eeb7","signature":"9f64be648cf7bba6a6691de1a905115ed9f2dadd1424465775b6e64bbe93f00c"},{"version":"a4bdc298ed09df0dc8e17688fea53d056c665f6cb1731bc38950dfda506a717a","signature":"8cb1545966073dc053c9775f360f90fccfea58e51ef3247dc40ab6f15b1a5851"},{"version":"f96f00b69e06c2f3b79fb33cc82fcdb47f46e4b3061e0b15191bce6b41289c07","signature":"06e7ea1aecad64f3be4539cafbe94ca49835323512c53bf89fd210698407cef6"},{"version":"5a3e5065759723a1bed5b55a6b01e1caf999ac0998df7c162ff9c70a29c7e904","signature":"b53142fcebee3a354c990e992816f0d11b92fad0fce7d300d3492efe1829c0f6"},{"version":"1fb3d983fd0cd53a22886b55302be4fdcd7b9e1ada8719d36fe7047494e194a4","signature":"98eb2725d8fe1119fe66cb41cb77df4b1865f23ca1c52c4bcf6ba3c067dbccb9"},{"version":"f620d4762dd785e1450b1173b48893cc892f47d0c60683ade54a096015845861","signature":"4ea301df2345699f3900b03a5e0f961b5ae8b5618dc7ddd692128a768f8a4cd3"},{"version":"6d8302cc227559177710cd44412e4ff9b7469ba60f38e439558c8c698af0540d","signature":"83bd5781db9c9e98b83dcb6bea20d41dbda86f947b1b797e4b991caba3972fa3"},{"version":"2ef2eb8a724cbf1e7491732390b7c9f2b80cb1be4a71f3471ce4ee89d4e57ef4","signature":"fff7f0bbf569a6362b353b9b006b32fca81eee910d6643777b7bac17d8ec1ed9"},{"version":"34ec40e2a8cc02857bfd0607ddf337aa74c66a0e2d8759db359ad670fb7b4b9a","signature":"e069b114cd00286fa71022df84b22b46f4ec56fa5e5a463f44cb00cac3f5ddfc"},{"version":"2a0032fd060cb4abe56661d8b6c9ae0494b64470ef12cfa4102f3eebe87101e0","signature":"bfd33900bc9df3805e7ee48796376e2b6d30cf0454b90afb63a8b0a7516b9d0e"},{"version":"2620ed9aa392049794429ac7a26e60f3b25afdc0bf7e969d20ca9ddceda8171a","signature":"0d652eaeb563c9e078a8386c10153c8893c3a0000c3c6d996ecaef8788e524a9","affectsGlobalScope":true},{"version":"3ec953da6f44e6426748d3e2fd4a50dab253f94c62b881ac623c935fc8b89654","signature":"af1e1847ba43084a05652d112996a1bcc6faf247dc7353e5d788d22a2edaf0ae"},{"version":"914a87f5b9e37b7617c80678a63fbb976245b470fc9fe4b9252db302612432b2","signature":"968537d17edfa7501a5382b9fbfa3a4546d2a0b756833c53c9094a0204c85a9d"},{"version":"11cbf7145f8c5eef3722b01ffb1c4680158dbcc4d87a41a07e1d6b4626a69cf0","signature":"8f86261b7dce860eb2e2b3c60790bb650db27318b31044dfb8e9e47065b78644"},{"version":"94e888f5292649f92137bb95b82de76943798f106e2d61c6c9601e3257a54985","signature":"835ee8e0ff1e3ed7756bf05d0acba976b234e444aac7624f2ba6c01ba319415c"},{"version":"8aa5b043c84c2ba6c0969b016e8293dd76ff4267ab3b7775da9eca7cc2a901f4","signature":"a864db2b09aa06d90af04231812c27265de3caf14c07acc90868f3fc6d9f1ab4"},{"version":"c0dd82283814acbbfb7b4a0e4f470ce97c6bd766047ebd42f5677bf2ff335d30","signature":"59d8b71db1653416dea6f8f10c5ccc1f24d5132748d680e020b4009bfe7aac73"},{"version":"6e6dd24668ad265ef1177b44a99035339ed02cfb54fc84ea727c77fdc4e13891","signature":"7e9f3be2090720b5d4c581ac2d950ee1d1c46c01525128ebd91bb8f5f14009cc"},{"version":"dc1f2fc3fef644270956f6680749887dca128ef92be59deeb8446122eec6178d","signature":"40cf0b68805ff9ec79f70e4ddb94355c3fda570064e196b6c7cc878fe83ec1f4"},{"version":"d878a847d3bf3ad16899e40ac1eafe6df0ceaaae6d8d8ec80c15422f14c28166","signature":"ca82927e98946cea82eaa3cec3020222db41063dd068f6b26c36afaa65fac81a"},{"version":"eb2b31cd9ce63e2359210888d1574c1fe2253697ac1d8225cffbc32bd1521dcf","signature":"6e874ae607aa8222536e6ebb33a0b3a3dd504fb5d9f891ad6dc88612dce9c271"},{"version":"79ade37533748bd963b4d9a0f67b5776a43560b76b828dc952282c2d17398756","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"a03b097607908fed59d8c33333707b2a5303d685fcb68a4f3a818c0cf7b178bc","impliedFormat":99},{"version":"4f49161b74663e0a17468d0c453d3af9675612c316ceeab1d6684e7908ddb9d9","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"912d5fadb5b28a8d23606ab23352e5a91910edd3c15b2647af361845f7cfc256","signature":"7f6d61c7e08ffe63934a8eeb927808f4d839727b2ee9fc46fa314855749843f9"},{"version":"95e518ccf6b4836391aa7eb748b7a93a66caed60ea31a32a7262bfa8b5a192fe","signature":"e606e14c2d7672da7671899f144df1f2f26724dd35041d7f189a2a8f4e8c3e0b"},{"version":"d1f03ba0eaedf30d533199d2695b537444107219f62800b18bbea53751007b77","signature":"b4782fb0b65343372b94af03ba6b83c240416cda792aed854c76f235c8d87098"},{"version":"3a111f9cedd3ec969642750a9ec4404277a991321812a4bc00287ed0a66dede2","signature":"47f988119e323c1f58fb299515d9ed12fd1c0f6d6e9470736aa34625a7d6ce00"},{"version":"a4ca868b1e1ec12e7057dd8c85e5a488effb7f745da0600c4fe8abe7c82e4483","signature":"c3fdbca2088ce19870fe5dff4d5b39c64f3d1c89d9ea4a8d63306045414a383f"},{"version":"863aca883d2a71617964f5663c8b415fa2efe3471b683326e520d3361d17b826","impliedFormat":1},{"version":"6092e9eddb32b8dab084bfd924eca69f01d3e9aa98de86036db81bcd67d1900a","signature":"2da888446c9fac69d317635e14cad7eacf3bf70d9df3ea79059388cb0ceb9518"},{"version":"3f4b8f187de8466c45625372a0219b6b0636df261fcb2b9a7df25f4e9ed16c72","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"1b14ce0fcf0821e5b8f0e87c2404d716d2ae1df0028458da9add74c76bea9162","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"c00d3f197c56c17fa06be42b5f39620bf4c806de1863bd2f289eb219a3037d2a","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"}],"root":[236,237,[540,553],1473,1476,1783,1785,1786,1888,1889,2348,2349,2368,[2372,2393],[2395,2400],[2402,2405]],"options":{"composite":true,"emitDecoratorMetadata":true,"esModuleInterop":true,"experimentalDecorators":true,"module":1,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"strict":true,"target":99},"referencedMap":[[2323,1],[2220,2],[2223,3],[2224,3],[2225,3],[2226,3],[2227,3],[2228,3],[2229,3],[2230,3],[2231,3],[2232,3],[2233,3],[2234,3],[2235,3],[2236,3],[2237,3],[2238,3],[2239,3],[2240,3],[2241,3],[2242,3],[2243,3],[2244,3],[2245,3],[2246,3],[2247,3],[2248,3],[2249,3],[2250,3],[2251,3],[2252,3],[2253,3],[2254,3],[2255,3],[2256,3],[2257,3],[2258,3],[2259,3],[2260,3],[2261,3],[2262,3],[2263,3],[2264,3],[2265,3],[2266,3],[2267,3],[2268,3],[2269,3],[2270,3],[2271,3],[2272,3],[2273,3],[2274,3],[2275,3],[2276,3],[2277,3],[2278,3],[2279,3],[2328,4],[2280,3],[2281,3],[2282,3],[2283,3],[2284,3],[2285,3],[2286,3],[2287,3],[2288,3],[2289,3],[2290,3],[2291,3],[2292,3],[2293,3],[2295,5],[2296,5],[2297,5],[2298,5],[2299,5],[2300,5],[2301,5],[2302,5],[2303,5],[2304,5],[2305,5],[2306,5],[2307,5],[2308,5],[2309,5],[2310,5],[2311,5],[2312,5],[2313,5],[2314,5],[2315,5],[2316,5],[2317,5],[2318,5],[2319,5],[2320,5],[2321,5],[2322,5],[2219,6],[2324,7],[2344,8],[2343,9],[2222,10],[2294,11],[2221,12],[2334,13],[2329,14],[2330,15],[2331,16],[2332,17],[2333,18],[2325,19],[2327,20],[2326,21],[2342,22],[2338,23],[2339,23],[2340,24],[2341,24],[2218,25],[2184,26],[2188,27],[2185,28],[2186,28],[2187,28],[2191,29],[2190,30],[2194,31],[2192,32],[2189,33],[2193,34],[2196,35],[2195,26],[2197,26],[2198,6],[2217,36],[2206,26],[2203,37],[2204,37],[2202,38],[2205,38],[2201,39],[2199,40],[2200,40],[2207,6],[2214,41],[2213,42],[2211,6],[2212,43],[2215,44],[2216,6],[2209,45],[2210,46],[2208,46],[2347,47],[2345,48],[2346,49],[1976,50],[1972,26],[1975,6],[1978,51],[1977,51],[1979,51],[1980,52],[1982,53],[1973,54],[1974,54],[1981,50],[1983,6],[1984,6],[2063,55],[1986,56],[1985,6],[1987,6],[2030,57],[2029,58],[2032,59],[2045,34],[2046,32],[2058,60],[2047,61],[2059,62],[2028,28],[2031,63],[2060,64],[2061,6],[2062,65],[2064,6],[2066,66],[2065,67],[1988,6],[1989,6],[1990,6],[1991,6],[1992,6],[1993,6],[1994,6],[2003,68],[2004,6],[2005,26],[2006,6],[2007,6],[2008,6],[2009,6],[1997,26],[2010,26],[2011,6],[1996,69],[1998,70],[1995,6],[2001,71],[1999,69],[2000,70],[2027,72],[2012,6],[2013,70],[2014,6],[2015,6],[2016,26],[2017,6],[2018,6],[2019,6],[2020,6],[2021,6],[2022,6],[2023,73],[2024,6],[2025,6],[2002,6],[2026,6],[1628,74],[1607,74],[1663,26],[1643,26],[1674,26],[1606,26],[1654,75],[1655,76],[1621,77],[1608,26],[1617,26],[1618,78],[1619,26],[1620,79],[1616,80],[1609,26],[1613,26],[1638,80],[1708,81],[1636,82],[1624,83],[1650,84],[1626,26],[1631,26],[1627,85],[1622,80],[1623,86],[1625,86],[1629,26],[1630,26],[1653,87],[1642,88],[1640,26],[1641,89],[1656,90],[1652,91],[1669,92],[1664,93],[1672,94],[1673,95],[1705,26],[1644,96],[1660,26],[1649,97],[1714,26],[1646,80],[1702,98],[1647,99],[1684,100],[1683,26],[1690,101],[1689,26],[1692,102],[1691,26],[1694,103],[1693,26],[1686,104],[1685,26],[1688,105],[1687,105],[1703,106],[1698,107],[1715,108],[1716,109],[1615,110],[1612,111],[1611,26],[1662,112],[1675,113],[1697,26],[1678,114],[1682,26],[1648,115],[1665,116],[1677,117],[1709,118],[1712,119],[1667,120],[1710,121],[1670,116],[1671,122],[1713,121],[1706,123],[1707,26],[1679,124],[1651,26],[1632,26],[1666,125],[1668,26],[1658,26],[1711,26],[1699,126],[1681,127],[1661,80],[1635,128],[1634,26],[1700,129],[1633,26],[1701,130],[1639,131],[1637,26],[1610,26],[1676,132],[1704,133],[1614,26],[1696,134],[1645,26],[1680,135],[1695,26],[1657,26],[1659,136],[1500,137],[1479,137],[1535,26],[1515,26],[1546,26],[1478,26],[1526,138],[1527,139],[1493,140],[1480,26],[1489,26],[1490,141],[1491,26],[1492,142],[1488,143],[1481,26],[1485,26],[1510,143],[1575,144],[1508,145],[1496,146],[1522,147],[1498,26],[1503,26],[1499,148],[1494,143],[1495,149],[1497,149],[1501,26],[1502,26],[1525,150],[1514,151],[1512,26],[1513,152],[1528,153],[1524,154],[1541,155],[1536,156],[1544,157],[1545,158],[1572,26],[1516,159],[1532,26],[1521,160],[1581,26],[1518,143],[1519,161],[1556,162],[1555,26],[1562,163],[1561,26],[1564,164],[1563,26],[1566,165],[1565,26],[1558,166],[1557,26],[1560,167],[1559,167],[1570,168],[1582,169],[1583,170],[1487,171],[1484,172],[1483,26],[1534,173],[1547,174],[1569,26],[1550,175],[1554,26],[1520,176],[1537,177],[1549,178],[1576,179],[1579,180],[1539,181],[1577,182],[1542,177],[1543,183],[1580,182],[1573,184],[1574,26],[1551,185],[1523,26],[1504,26],[1538,186],[1540,26],[1530,26],[1578,26],[1553,187],[1533,143],[1507,188],[1506,26],[1505,26],[1511,189],[1509,26],[1482,26],[1548,190],[1571,191],[1486,26],[1568,192],[1517,26],[1552,193],[1567,26],[1529,26],[1531,194],[1734,195],[1604,26],[1605,196],[1595,196],[1594,197],[1586,197],[1585,197],[1584,196],[1596,198],[1725,199],[1724,200],[1728,201],[1727,202],[1729,196],[1603,203],[1600,204],[1732,205],[1730,196],[1726,206],[1733,196],[1722,207],[1721,208],[1723,196],[1736,209],[1587,210],[1597,196],[1735,26],[1588,196],[1589,196],[1601,196],[1590,196],[1598,211],[1731,26],[1602,196],[1591,196],[1599,196],[1592,196],[1593,196],[1718,212],[1717,213],[1719,214],[1720,215],[1778,216],[1738,26],[1739,26],[1779,217],[1780,26],[1771,26],[1774,218],[1769,219],[1741,220],[1740,26],[1776,221],[1775,26],[1770,222],[1745,223],[1742,26],[1772,224],[1781,225],[1777,226],[1747,227],[1759,228],[1748,219],[1746,229],[1744,230],[1754,231],[1755,232],[1758,233],[1757,26],[1743,26],[1751,230],[1749,234],[1756,235],[1752,236],[1750,237],[1753,219],[1773,26],[1767,238],[1766,238],[1761,239],[1760,26],[1762,26],[1763,240],[1764,241],[1765,26],[1768,242],[1737,26],[2071,243],[2067,32],[2068,32],[2070,244],[2069,6],[2081,245],[2072,32],[2074,246],[2073,6],[2076,247],[2075,26],[2079,248],[2080,249],[2077,250],[2078,250],[2123,251],[2124,26],[2141,252],[2140,6],[2150,253],[2143,60],[2144,26],[2142,254],[2149,255],[2145,6],[2146,6],[2148,256],[2147,6],[2125,6],[2138,257],[2127,258],[2126,6],[2133,259],[2129,260],[2130,260],[2134,6],[2131,260],[2128,6],[2136,6],[2135,260],[2132,260],[2137,261],[2173,6],[2174,26],[2181,262],[2175,26],[2176,26],[2177,26],[2178,26],[2179,26],[2180,26],[2151,263],[2139,264],[2182,265],[2082,6],[2083,266],[2086,267],[2088,268],[2087,6],[2089,267],[2090,267],[2092,269],[2084,6],[2091,6],[2085,26],[2103,270],[2104,33],[2105,26],[2109,271],[2106,6],[2107,6],[2108,272],[2102,273],[2101,6],[1970,274],[1958,6],[1968,275],[1969,6],[1971,276],[2051,277],[2052,278],[2053,6],[2054,279],[2050,280],[2048,6],[2049,6],[2057,281],[2055,26],[2056,6],[1959,26],[1960,26],[1961,26],[1962,26],[1967,282],[1963,6],[1964,6],[1965,283],[1966,6],[2035,26],[2041,6],[2036,6],[2037,6],[2038,6],[2042,6],[2044,284],[2039,6],[2040,6],[2043,6],[2034,285],[2033,6],[2110,6],[2152,286],[2153,287],[2154,26],[2155,288],[2156,26],[2157,26],[2158,26],[2159,6],[2160,286],[2161,6],[2163,289],[2164,290],[2162,6],[2165,26],[2166,26],[2183,291],[2167,26],[2168,6],[2169,26],[2170,286],[2171,26],[2172,26],[1890,292],[1891,293],[1892,26],[1893,26],[1906,294],[1907,295],[1904,296],[1905,297],[1908,298],[1911,299],[1913,300],[1914,301],[1896,302],[1915,26],[1919,303],[1917,304],[1918,26],[1912,26],[1921,305],[1897,306],[1923,307],[1924,308],[1927,309],[1926,310],[1922,311],[1925,312],[1920,313],[1928,314],[1929,315],[1933,316],[1934,317],[1932,318],[1910,319],[1898,26],[1901,320],[1935,321],[1936,322],[1937,322],[1894,26],[1939,323],[1938,322],[1957,324],[1899,26],[1903,325],[1940,326],[1941,26],[1895,26],[1931,327],[1945,328],[1943,26],[1944,26],[1942,329],[1930,330],[1946,331],[1947,332],[1948,299],[1949,299],[1950,333],[1916,26],[1952,334],[1953,335],[1909,26],[1954,26],[1955,336],[1951,26],[1900,337],[1902,313],[1956,292],[2094,338],[2098,26],[2096,339],[2099,26],[2097,340],[2100,341],[2095,6],[2093,26],[2111,26],[2113,6],[2112,342],[2114,343],[2115,344],[2116,342],[2117,342],[2118,345],[2122,346],[2119,342],[2120,345],[2121,26],[2336,347],[2337,348],[2335,6],[191,349],[190,350],[187,351],[192,352],[188,26],[1475,353],[1782,26],[183,26],[129,354],[130,354],[131,355],[87,356],[132,357],[133,358],[134,359],[85,26],[135,360],[136,361],[137,362],[138,363],[139,364],[140,365],[141,365],[143,26],[142,366],[144,367],[145,368],[146,369],[128,370],[86,26],[147,371],[148,372],[149,373],[182,374],[150,375],[151,376],[152,377],[153,378],[154,379],[155,380],[156,381],[157,382],[158,383],[159,384],[160,384],[161,385],[162,26],[163,26],[164,386],[166,387],[165,388],[167,389],[168,390],[169,391],[170,392],[171,393],[172,394],[173,395],[174,396],[175,397],[176,398],[177,399],[178,400],[179,401],[180,402],[181,403],[185,26],[186,26],[184,404],[189,405],[195,406],[194,26],[88,26],[1787,26],[1866,407],[1868,408],[1869,407],[1867,409],[1870,26],[1875,410],[1871,26],[1872,26],[1873,26],[1874,26],[1876,411],[1885,412],[1877,413],[1820,414],[1828,415],[1878,416],[1819,417],[1879,418],[1821,26],[1881,419],[1795,420],[1880,413],[1882,421],[1818,422],[1884,423],[1822,26],[1823,26],[1827,424],[1825,26],[1824,26],[1826,26],[1887,425],[1841,426],[1842,26],[1844,427],[1845,428],[1846,429],[1850,430],[1865,431],[1851,26],[1789,432],[1852,426],[1843,26],[1853,26],[1854,26],[1791,433],[1855,434],[1790,26],[1788,426],[1849,435],[1856,26],[1864,26],[1847,436],[1857,26],[1836,437],[1858,26],[1859,26],[1861,438],[1860,426],[1862,439],[1848,440],[1863,441],[1792,442],[1793,26],[1794,26],[1840,443],[1830,444],[1831,407],[1838,26],[1832,445],[1833,446],[1829,447],[1837,448],[1839,447],[1886,449],[1834,26],[1835,450],[1477,26],[2401,26],[1812,26],[539,26],[193,451],[527,452],[531,453],[476,454],[291,26],[241,455],[525,456],[526,457],[239,26],[528,458],[313,459],[256,460],[279,461],[288,462],[259,462],[260,463],[261,463],[287,464],[262,465],[263,463],[269,466],[264,467],[265,463],[266,463],[289,468],[258,469],[267,462],[268,467],[270,470],[271,470],[272,467],[273,463],[274,462],[275,463],[276,471],[277,471],[278,463],[300,472],[308,473],[286,474],[316,475],[280,476],[282,477],[283,474],[294,478],[302,479],[307,480],[304,481],[309,482],[297,483],[298,484],[305,485],[306,486],[312,487],[303,488],[281,458],[314,489],[257,458],[301,490],[299,491],[285,492],[284,474],[315,493],[290,494],[310,26],[311,495],[530,496],[240,458],[351,26],[368,497],[317,498],[342,499],[349,500],[318,500],[319,500],[320,501],[348,502],[321,503],[336,500],[322,504],[323,504],[324,501],[325,500],[326,501],[327,500],[350,505],[328,500],[329,500],[330,506],[331,500],[332,500],[333,506],[334,501],[335,500],[337,507],[338,506],[339,500],[340,501],[341,500],[363,508],[359,509],[347,510],[371,511],[343,512],[344,510],[360,513],[352,514],[361,515],[358,516],[356,517],[362,518],[355,519],[367,520],[357,521],[369,522],[364,523],[353,524],[346,525],[345,510],[370,526],[354,494],[365,26],[366,527],[243,528],[433,529],[372,530],[407,531],[416,532],[373,533],[374,533],[375,534],[376,533],[415,535],[377,536],[378,537],[379,538],[380,533],[417,539],[418,540],[381,533],[383,541],[384,532],[386,542],[387,543],[388,543],[389,534],[390,533],[391,533],[392,539],[393,534],[394,534],[395,543],[396,533],[397,532],[398,533],[399,534],[400,544],[385,545],[401,533],[402,534],[403,533],[404,533],[405,533],[406,533],[535,546],[428,547],[414,548],[438,549],[408,550],[410,551],[411,548],[532,552],[421,553],[427,554],[423,555],[429,556],[533,557],[534,484],[424,558],[426,559],[432,560],[422,561],[409,458],[434,562],[382,458],[420,563],[425,564],[413,565],[412,548],[435,566],[436,26],[437,567],[419,494],[430,26],[431,568],[537,569],[538,570],[2394,571],[536,572],[252,573],[245,574],[295,458],[292,575],[296,576],[293,577],[487,578],[464,579],[470,580],[439,580],[440,580],[441,581],[469,582],[442,583],[457,580],[443,584],[444,584],[445,581],[446,580],[447,585],[448,580],[471,586],[449,580],[450,580],[451,587],[452,580],[453,580],[454,587],[455,581],[456,580],[458,588],[459,587],[460,580],[461,581],[462,580],[463,580],[484,589],[475,590],[490,591],[465,592],[466,593],[479,594],[472,595],[483,596],[474,597],[482,598],[481,599],[486,600],[473,601],[488,602],[485,603],[480,604],[468,605],[467,593],[489,606],[478,607],[477,608],[248,609],[250,610],[249,609],[251,609],[254,611],[253,612],[255,613],[246,614],[523,615],[491,616],[516,617],[520,618],[519,619],[492,620],[521,621],[512,622],[513,618],[514,623],[515,624],[500,625],[508,626],[518,627],[524,628],[493,629],[494,627],[497,630],[503,631],[507,632],[505,633],[509,634],[498,635],[501,636],[506,637],[522,638],[504,639],[502,640],[499,641],[517,642],[495,643],[511,644],[496,494],[510,645],[244,494],[242,646],[247,647],[529,26],[554,648],[556,649],[557,650],[555,651],[583,26],[584,652],[564,653],[576,654],[575,655],[573,656],[585,657],[558,26],[588,658],[568,26],[577,26],[581,659],[580,660],[582,661],[586,26],[574,662],[567,663],[572,664],[587,665],[570,666],[565,26],[566,667],[589,668],[579,669],[578,670],[571,671],[560,672],[559,26],[590,673],[561,26],[563,674],[562,675],[594,676],[595,677],[596,678],[597,679],[598,680],[592,681],[593,682],[600,683],[591,26],[599,684],[602,685],[601,686],[604,687],[603,686],[607,688],[605,686],[606,686],[610,689],[608,686],[609,686],[612,690],[611,686],[614,691],[613,686],[618,692],[615,686],[616,686],[617,686],[620,693],[619,686],[622,694],[621,686],[623,686],[624,686],[626,695],[625,686],[629,696],[627,686],[628,686],[632,697],[630,686],[631,686],[634,698],[633,686],[637,699],[635,686],[636,686],[639,700],[638,686],[642,701],[640,686],[641,686],[644,702],[643,686],[646,703],[645,686],[650,704],[647,686],[648,686],[649,686],[652,705],[651,686],[655,706],[653,686],[654,686],[658,707],[656,686],[657,686],[661,708],[659,686],[660,686],[663,709],[662,686],[665,710],[664,686],[667,711],[666,686],[669,712],[668,686],[674,713],[670,686],[671,677],[672,686],[673,686],[677,714],[675,686],[676,686],[679,715],[678,686],[681,716],[680,686],[683,717],[682,686],[685,718],[684,686],[689,719],[686,686],[687,686],[688,686],[692,720],[690,686],[691,686],[694,721],[693,686],[696,722],[695,686],[698,723],[697,686],[702,724],[699,686],[700,686],[701,686],[705,725],[703,686],[704,686],[709,726],[706,686],[707,686],[708,686],[711,727],[710,686],[715,728],[712,686],[713,686],[714,686],[717,729],[716,686],[720,730],[718,686],[719,686],[722,731],[721,686],[724,732],[723,686],[727,733],[725,686],[726,686],[729,734],[728,686],[731,735],[730,686],[735,736],[732,686],[733,686],[734,686],[738,737],[736,677],[737,686],[741,738],[739,686],[740,686],[744,739],[742,686],[743,686],[746,740],[745,686],[749,741],[747,686],[748,686],[751,742],[750,686],[753,743],[752,686],[755,744],[754,686],[757,745],[756,686],[759,746],[758,686],[761,747],[760,686],[763,748],[762,686],[765,749],[764,686],[767,750],[766,686],[769,751],[768,686],[771,752],[770,686],[778,753],[772,686],[773,686],[774,686],[775,686],[776,686],[777,686],[781,754],[779,686],[780,686],[787,755],[782,686],[783,686],[784,686],[785,686],[786,686],[789,756],[788,686],[792,757],[790,686],[791,686],[794,758],[793,686],[796,759],[795,686],[798,760],[797,686],[804,761],[799,686],[800,686],[801,686],[802,686],[803,686],[807,762],[805,686],[806,686],[809,763],[808,686],[811,764],[810,686],[813,765],[812,686],[815,766],[814,686],[821,767],[816,686],[817,686],[818,686],[819,686],[820,686],[824,768],[822,686],[823,686],[826,769],[825,686],[829,770],[827,686],[828,686],[832,771],[830,686],[831,686],[836,772],[833,686],[834,686],[835,686],[840,773],[837,686],[838,686],[839,686],[843,774],[841,686],[842,686],[844,686],[845,686],[847,775],[846,686],[849,776],[848,686],[852,777],[850,686],[851,686],[854,778],[853,686],[856,779],[855,686],[859,780],[857,686],[858,686],[863,781],[860,686],[861,686],[862,686],[866,782],[864,686],[865,686],[868,783],[867,686],[870,784],[869,686],[872,785],[871,686],[875,786],[873,686],[874,686],[877,787],[876,686],[879,788],[878,686],[882,789],[880,686],[881,686],[884,790],[883,686],[886,791],[885,686],[889,792],[887,686],[888,686],[891,793],[890,686],[893,794],[892,686],[896,795],[894,686],[895,686],[899,796],[897,686],[898,686],[903,797],[900,686],[901,686],[902,686],[906,798],[904,686],[905,686],[907,686],[910,799],[908,686],[909,686],[912,800],[911,686],[917,801],[913,686],[914,686],[915,686],[916,686],[922,802],[918,686],[919,686],[920,686],[921,686],[924,803],[923,686],[926,804],[925,686],[930,805],[927,686],[928,686],[929,686],[938,806],[931,686],[932,686],[933,686],[934,686],[935,686],[936,686],[937,686],[940,807],[939,686],[945,808],[941,686],[942,686],[943,686],[944,686],[947,809],[946,686],[951,810],[948,686],[949,686],[950,686],[955,811],[952,686],[953,686],[954,686],[957,812],[956,686],[961,813],[958,686],[959,677],[960,686],[963,814],[962,686],[966,815],[964,686],[965,686],[968,816],[967,686],[971,817],[969,686],[970,686],[973,818],[972,686],[976,819],[974,686],[975,686],[978,820],[977,686],[980,821],[979,686],[982,822],[981,686],[985,823],[983,686],[984,686],[987,824],[986,686],[990,825],[988,686],[989,686],[993,826],[991,686],[992,686],[996,827],[994,686],[995,686],[998,828],[997,686],[1001,829],[999,686],[1000,686],[1003,830],[1002,686],[1006,831],[1004,686],[1005,686],[1010,832],[1007,686],[1008,686],[1009,686],[1012,833],[1011,686],[1014,834],[1013,686],[1018,835],[1015,686],[1016,686],[1017,686],[1020,836],[1019,686],[1022,837],[1021,686],[1024,838],[1023,686],[1026,839],[1025,686],[1031,840],[1029,686],[1030,686],[1028,841],[1027,686],[1035,842],[1032,677],[1033,686],[1034,686],[1037,843],[1036,686],[1046,844],[1038,686],[1039,686],[1040,686],[1041,686],[1042,686],[1043,686],[1044,686],[1045,686],[1048,845],[1047,686],[1050,846],[1049,686],[1053,847],[1051,686],[1052,686],[1055,848],[1054,686],[1057,849],[1056,686],[1060,850],[1058,686],[1059,686],[1062,851],[1061,686],[1066,852],[1063,686],[1064,686],[1065,686],[1068,853],[1067,686],[1071,854],[1069,686],[1070,686],[1074,855],[1072,686],[1073,686],[1077,856],[1075,686],[1076,686],[1079,857],[1078,686],[1467,858],[1081,859],[1080,686],[1083,860],[1082,686],[1088,861],[1084,686],[1085,686],[1086,686],[1087,686],[1090,862],[1089,686],[1092,863],[1091,686],[1094,864],[1093,686],[1099,865],[1095,686],[1096,686],[1097,686],[1098,686],[1101,866],[1100,686],[1103,867],[1102,686],[1105,868],[1104,686],[1107,869],[1106,686],[1109,870],[1108,686],[1111,871],[1110,686],[1115,872],[1112,686],[1113,686],[1114,686],[1117,873],[1116,686],[1119,874],[1118,686],[1121,875],[1120,686],[1123,876],[1122,686],[1126,877],[1124,686],[1125,686],[1127,686],[1128,686],[1129,686],[1140,878],[1130,686],[1131,686],[1132,686],[1133,686],[1134,686],[1135,686],[1136,686],[1137,686],[1138,686],[1139,686],[1147,879],[1141,686],[1142,686],[1143,686],[1144,686],[1145,686],[1146,686],[1150,880],[1148,686],[1149,686],[1152,881],[1151,686],[1155,882],[1153,686],[1154,686],[1157,883],[1156,686],[1159,884],[1158,686],[1161,885],[1160,686],[1163,886],[1162,686],[1165,887],[1164,686],[1167,888],[1166,686],[1169,889],[1168,686],[1171,890],[1170,686],[1174,891],[1172,686],[1173,686],[1177,892],[1175,686],[1176,686],[1180,893],[1178,686],[1179,686],[1183,894],[1181,686],[1182,686],[1186,895],[1184,686],[1185,686],[1189,896],[1187,686],[1188,686],[1191,897],[1190,686],[1193,898],[1192,686],[1196,899],[1194,686],[1195,686],[1198,900],[1197,686],[1200,901],[1199,686],[1206,902],[1201,686],[1202,686],[1203,686],[1204,686],[1205,686],[1210,903],[1207,686],[1208,686],[1209,686],[1212,904],[1211,686],[1215,905],[1213,686],[1214,686],[1217,906],[1216,686],[1219,907],[1218,686],[1221,908],[1220,686],[1223,909],[1222,686],[1225,910],[1224,686],[1228,911],[1226,686],[1227,686],[1230,912],[1229,686],[1232,913],[1231,686],[1234,914],[1233,686],[1237,915],[1235,686],[1236,686],[1242,916],[1238,686],[1239,686],[1240,686],[1241,686],[1245,917],[1243,686],[1244,686],[1247,918],[1246,686],[1249,919],[1248,686],[1252,920],[1250,686],[1251,686],[1254,921],[1253,686],[1258,922],[1255,686],[1256,686],[1257,686],[1262,923],[1259,686],[1260,686],[1261,686],[1264,924],[1263,686],[1266,925],[1265,686],[1268,926],[1267,686],[1271,927],[1269,686],[1270,686],[1273,928],[1272,686],[1275,929],[1274,686],[1278,930],[1276,686],[1277,686],[1281,931],[1279,686],[1280,686],[1285,932],[1282,686],[1283,686],[1284,686],[1287,933],[1286,686],[1289,934],[1288,686],[1293,935],[1290,686],[1291,686],[1292,686],[1298,936],[1294,686],[1295,686],[1296,686],[1297,686],[1301,937],[1299,686],[1300,686],[1303,938],[1302,686],[1306,939],[1304,686],[1305,686],[1308,940],[1307,686],[1310,941],[1309,686],[1312,942],[1311,686],[1314,943],[1313,686],[1318,944],[1315,686],[1316,686],[1317,686],[1324,945],[1319,686],[1320,686],[1321,686],[1322,686],[1323,686],[1326,946],[1325,686],[1329,947],[1327,686],[1328,686],[1332,948],[1330,686],[1331,686],[1335,949],[1333,686],[1334,686],[1337,950],[1336,686],[1340,951],[1338,686],[1339,686],[1343,952],[1341,686],[1342,686],[1345,953],[1344,686],[1347,954],[1346,686],[1349,955],[1348,686],[1351,956],[1350,686],[1353,957],[1352,686],[1355,958],[1354,686],[1357,959],[1356,686],[1361,960],[1358,686],[1359,686],[1360,686],[1363,961],[1362,686],[1366,962],[1364,686],[1365,686],[1369,963],[1367,686],[1368,686],[1371,964],[1370,686],[1373,965],[1372,686],[1375,966],[1374,686],[1378,967],[1376,686],[1377,686],[1381,968],[1379,686],[1380,686],[1383,969],[1382,686],[1385,970],[1384,686],[1388,971],[1386,686],[1387,686],[1390,972],[1389,686],[1395,973],[1391,686],[1392,686],[1393,686],[1394,686],[1398,974],[1396,686],[1397,686],[1401,975],[1399,686],[1400,686],[1405,976],[1402,686],[1403,686],[1404,686],[1407,977],[1406,686],[1409,978],[1408,686],[1411,979],[1410,686],[1414,980],[1412,686],[1413,686],[1416,981],[1415,686],[1422,982],[1417,686],[1418,686],[1419,686],[1420,686],[1421,686],[1426,983],[1423,686],[1424,686],[1425,686],[1429,984],[1427,686],[1428,686],[1431,985],[1430,686],[1434,986],[1432,686],[1433,686],[1436,987],[1435,686],[1438,988],[1437,686],[1440,989],[1439,686],[1442,990],[1441,686],[1446,991],[1443,686],[1444,686],[1445,686],[1449,992],[1447,686],[1448,686],[1452,993],[1450,686],[1451,686],[1454,994],[1453,686],[1456,995],[1455,686],[1459,996],[1457,686],[1458,686],[1461,997],[1460,686],[1464,998],[1462,677],[1463,686],[1466,999],[1465,686],[1468,1000],[1469,1001],[569,655],[1474,26],[1784,1002],[1810,1003],[1811,1004],[1809,1005],[1797,1006],[1802,1007],[1803,1008],[1806,1009],[1805,1010],[1804,1011],[1807,1012],[1814,1013],[1817,1014],[1816,1015],[1815,1016],[1808,1017],[1798,1018],[1813,1019],[1800,1020],[1796,1021],[1801,1022],[1799,1006],[226,1023],[197,1024],[206,1024],[198,1024],[207,1024],[199,1024],[200,1024],[214,1024],[213,1024],[215,1024],[216,1024],[208,1024],[201,1024],[209,1024],[202,1024],[210,1024],[203,1024],[205,1024],[212,1024],[211,1024],[217,1024],[204,1024],[218,1024],[223,1024],[224,1024],[219,1024],[196,26],[225,26],[221,1024],[220,1024],[222,1024],[2370,26],[2365,1025],[2361,1026],[2357,1027],[2356,26],[2358,1028],[2359,1028],[2360,1028],[2362,1029],[2367,1030],[2364,1031],[2366,1032],[2363,1025],[2350,26],[2355,1033],[2352,1034],[2353,1035],[2354,1034],[2351,1036],[1883,26],[2369,1037],[1470,350],[1472,1038],[238,345],[1471,1039],[82,26],[83,26],[15,26],[13,26],[14,26],[19,26],[18,26],[2,26],[20,26],[21,26],[22,26],[23,26],[24,26],[25,26],[26,26],[27,26],[3,26],[28,26],[29,26],[4,26],[30,26],[34,26],[31,26],[32,26],[33,26],[35,26],[36,26],[37,26],[5,26],[38,26],[39,26],[40,26],[41,26],[6,26],[45,26],[42,26],[43,26],[44,26],[46,26],[7,26],[47,26],[52,26],[53,26],[48,26],[49,26],[50,26],[51,26],[8,26],[57,26],[54,26],[55,26],[56,26],[58,26],[9,26],[59,26],[60,26],[61,26],[63,26],[62,26],[64,26],[65,26],[10,26],[66,26],[67,26],[68,26],[11,26],[69,26],[70,26],[71,26],[72,26],[73,26],[1,26],[74,26],[75,26],[12,26],[79,26],[77,26],[81,26],[84,26],[76,26],[80,26],[78,26],[17,26],[16,26],[105,1040],[116,1041],[103,1040],[117,345],[126,1042],[95,1043],[94,1044],[125,1045],[120,1046],[124,1047],[97,1048],[113,1049],[96,1050],[123,1051],[92,1052],[93,1046],[98,1053],[99,26],[104,1043],[102,1053],[90,1054],[127,1055],[118,1056],[108,1057],[107,1053],[109,1058],[111,1059],[106,1060],[110,1061],[121,1045],[100,1062],[101,1063],[112,1064],[91,345],[115,1065],[114,1053],[119,26],[89,26],[122,1066],[2371,26],[2379,1067],[237,1068],[2389,1069],[2377,1070],[2381,1071],[2380,1072],[2382,1073],[2385,1074],[2383,1075],[2390,1076],[2384,1077],[2387,1078],[2386,1079],[2391,1080],[549,1081],[552,1082],[1473,1083],[551,1081],[550,1081],[548,1084],[547,1085],[2395,1086],[546,1087],[541,1088],[542,1089],[543,1090],[545,1091],[544,1092],[540,1090],[2374,26],[2372,1093],[2393,1094],[2396,1095],[2397,1096],[2398,1095],[2399,1097],[2400,1098],[2402,1099],[1888,1100],[2403,1101],[2378,1102],[236,1103],[553,1104],[2388,1105],[2373,1106],[1786,1107],[2375,1108],[1476,1109],[1785,1110],[1783,1111],[2376,1112],[2368,1113],[1889,1114],[2348,1115],[2349,1116],[2392,1117],[2404,1118],[2405,1119],[232,26],[228,1120],[234,26],[231,26],[235,1121],[229,26],[233,1122],[230,26],[227,26]],"latestChangedDtsFile":"./dist/jobs/schedulers/sync-scheduler.d.ts","version":"5.8.3"} \ No newline at end of file diff --git a/packages/frontend/package.json b/packages/frontend/package.json index bdeb6bf..787556d 100644 --- a/packages/frontend/package.json +++ b/packages/frontend/package.json @@ -1,6 +1,7 @@ { "name": "@open-archiver/frontend", "private": true, + "license": "SEE LICENSE IN LICENSE file", "version": "0.0.1", "type": "module", "scripts": { @@ -16,9 +17,9 @@ "@iconify/svelte": "^5.0.1", "@open-archiver/types": "workspace:*", "@sveltejs/kit": "^2.38.1", - "bits-ui": "^2.8.10", "clsx": "^2.1.1", "d3-shape": "^3.2.0", + "date-fns": "^4.1.0", "html-entities": "^2.6.0", "jose": "^6.0.1", "lucide-svelte": "^0.525.0", @@ -31,13 +32,14 @@ }, "devDependencies": { "@internationalized/date": "^3.8.2", - "@lucide/svelte": "^0.515.0", + "@lucide/svelte": "^0.544.0", "@sveltejs/adapter-auto": "^6.0.0", "@sveltejs/adapter-node": "^5.2.13", "@sveltejs/vite-plugin-svelte": "^5.0.0", "@tailwindcss/vite": "^4.0.0", "@types/d3-shape": "^3.1.7", "@types/semver": "^7.7.1", + "bits-ui": "^2.12.0", "dotenv": "^17.2.0", "layerchart": "2.0.0-next.27", "mode-watcher": "^1.1.0", diff --git a/packages/frontend/src/app.d.ts b/packages/frontend/src/app.d.ts index 2190b46..f391d06 100644 --- a/packages/frontend/src/app.d.ts +++ b/packages/frontend/src/app.d.ts @@ -8,6 +8,7 @@ declare global { interface Locals { user: Omit | null; accessToken: string | null; + enterpriseMode: boolean | null; } // interface PageData {} // interface PageState {} diff --git a/packages/frontend/src/hooks.server.ts b/packages/frontend/src/hooks.server.ts index 0322141..b68199b 100644 --- a/packages/frontend/src/hooks.server.ts +++ b/packages/frontend/src/hooks.server.ts @@ -22,6 +22,11 @@ export const handle: Handle = async ({ event, resolve }) => { event.locals.user = null; event.locals.accessToken = null; } + if (import.meta.env.VITE_ENTERPRISE_MODE === true) { + event.locals.enterpriseMode = true; + } else { + event.locals.enterpriseMode = false; + } return resolve(event); }; diff --git a/packages/frontend/src/lib/components/custom/IngestionSourceForm.svelte b/packages/frontend/src/lib/components/custom/IngestionSourceForm.svelte index 32e0f22..a8242f8 100644 --- a/packages/frontend/src/lib/components/custom/IngestionSourceForm.svelte +++ b/packages/frontend/src/lib/components/custom/IngestionSourceForm.svelte @@ -99,7 +99,7 @@ }); const result = await response.json(); if (!response.ok) { - throw new Error(`File upload failed + ${result}`); + throw new Error(result.message || 'File upload failed'); } formData.providerConfig.uploadedFilePath = result.filePath; @@ -107,10 +107,11 @@ fileUploading = false; } catch (error) { fileUploading = false; + const message = error instanceof Error ? error.message : String(error); setAlert({ type: 'error', title: $t('app.components.ingestion_source_form.upload_failed'), - message: JSON.stringify(error), + message, duration: 5000, show: true, }); diff --git a/packages/frontend/src/lib/components/ui/pagination/index.ts b/packages/frontend/src/lib/components/ui/pagination/index.ts new file mode 100644 index 0000000..d83c7a9 --- /dev/null +++ b/packages/frontend/src/lib/components/ui/pagination/index.ts @@ -0,0 +1,25 @@ +import Root from "./pagination.svelte"; +import Content from "./pagination-content.svelte"; +import Item from "./pagination-item.svelte"; +import Link from "./pagination-link.svelte"; +import PrevButton from "./pagination-prev-button.svelte"; +import NextButton from "./pagination-next-button.svelte"; +import Ellipsis from "./pagination-ellipsis.svelte"; + +export { + Root, + Content, + Item, + Link, + PrevButton, + NextButton, + Ellipsis, + // + Root as Pagination, + Content as PaginationContent, + Item as PaginationItem, + Link as PaginationLink, + PrevButton as PaginationPrevButton, + NextButton as PaginationNextButton, + Ellipsis as PaginationEllipsis, +}; diff --git a/packages/frontend/src/lib/components/ui/pagination/pagination-content.svelte b/packages/frontend/src/lib/components/ui/pagination/pagination-content.svelte new file mode 100644 index 0000000..e1124fc --- /dev/null +++ b/packages/frontend/src/lib/components/ui/pagination/pagination-content.svelte @@ -0,0 +1,20 @@ + + +

diff --git a/packages/frontend/src/lib/components/ui/pagination/pagination-ellipsis.svelte b/packages/frontend/src/lib/components/ui/pagination/pagination-ellipsis.svelte new file mode 100644 index 0000000..3be94c9 --- /dev/null +++ b/packages/frontend/src/lib/components/ui/pagination/pagination-ellipsis.svelte @@ -0,0 +1,22 @@ + + + diff --git a/packages/frontend/src/lib/components/ui/pagination/pagination-item.svelte b/packages/frontend/src/lib/components/ui/pagination/pagination-item.svelte new file mode 100644 index 0000000..fd7ffc3 --- /dev/null +++ b/packages/frontend/src/lib/components/ui/pagination/pagination-item.svelte @@ -0,0 +1,14 @@ + + +
  • + {@render children?.()} +
  • diff --git a/packages/frontend/src/lib/components/ui/pagination/pagination-link.svelte b/packages/frontend/src/lib/components/ui/pagination/pagination-link.svelte new file mode 100644 index 0000000..58b1a5c --- /dev/null +++ b/packages/frontend/src/lib/components/ui/pagination/pagination-link.svelte @@ -0,0 +1,39 @@ + + +{#snippet Fallback()} + {page.value} +{/snippet} + + diff --git a/packages/frontend/src/lib/components/ui/pagination/pagination-next-button.svelte b/packages/frontend/src/lib/components/ui/pagination/pagination-next-button.svelte new file mode 100644 index 0000000..d4b9553 --- /dev/null +++ b/packages/frontend/src/lib/components/ui/pagination/pagination-next-button.svelte @@ -0,0 +1,33 @@ + + +{#snippet Fallback()} + Next + +{/snippet} + + diff --git a/packages/frontend/src/lib/components/ui/pagination/pagination-prev-button.svelte b/packages/frontend/src/lib/components/ui/pagination/pagination-prev-button.svelte new file mode 100644 index 0000000..2d3dc70 --- /dev/null +++ b/packages/frontend/src/lib/components/ui/pagination/pagination-prev-button.svelte @@ -0,0 +1,33 @@ + + +{#snippet Fallback()} + + Previous +{/snippet} + + diff --git a/packages/frontend/src/lib/components/ui/pagination/pagination.svelte b/packages/frontend/src/lib/components/ui/pagination/pagination.svelte new file mode 100644 index 0000000..60e3471 --- /dev/null +++ b/packages/frontend/src/lib/components/ui/pagination/pagination.svelte @@ -0,0 +1,28 @@ + + + diff --git a/packages/frontend/src/lib/components/ui/progress/index.ts b/packages/frontend/src/lib/components/ui/progress/index.ts new file mode 100644 index 0000000..25eee61 --- /dev/null +++ b/packages/frontend/src/lib/components/ui/progress/index.ts @@ -0,0 +1,7 @@ +import Root from "./progress.svelte"; + +export { + Root, + // + Root as Progress, +}; diff --git a/packages/frontend/src/lib/components/ui/progress/progress.svelte b/packages/frontend/src/lib/components/ui/progress/progress.svelte new file mode 100644 index 0000000..6833013 --- /dev/null +++ b/packages/frontend/src/lib/components/ui/progress/progress.svelte @@ -0,0 +1,27 @@ + + + +
    +
    diff --git a/packages/frontend/src/lib/translations/de.json b/packages/frontend/src/lib/translations/de.json index 3e56a1c..768da27 100644 --- a/packages/frontend/src/lib/translations/de.json +++ b/packages/frontend/src/lib/translations/de.json @@ -7,7 +7,8 @@ "password": "Passwort" }, "common": { - "working": "Arbeiten" + "working": "Arbeiten", + "read_docs": "Dokumentation lesen" }, "archive": { "title": "Archiv", @@ -32,7 +33,14 @@ "deleting": "Löschen", "confirm": "Bestätigen", "cancel": "Abbrechen", - "not_found": "E-Mail nicht gefunden." + "not_found": "E-Mail nicht gefunden.", + "integrity_report": "Integritätsbericht", + "email_eml": "E-Mail (.eml)", + "valid": "Gültig", + "invalid": "Ungültig", + "integrity_check_failed_title": "Integritätsprüfung fehlgeschlagen", + "integrity_check_failed_message": "Die Integrität der E-Mail und ihrer Anhänge konnte nicht überprüft werden.", + "integrity_report_description": "Dieser Bericht überprüft, ob der Inhalt Ihrer archivierten E-Mails nicht verändert wurde." }, "ingestions": { "title": "Erfassungsquellen", @@ -255,6 +263,80 @@ "no_emails_found": "Keine archivierten E-Mails gefunden.", "prev": "Zurück", "next": "Weiter" + }, + "audit_log": { + "title": "Audit-Protokoll", + "header": "Audit-Protokoll", + "verify_integrity": "Integrität überprüfen", + "log_entries": "Protokolleinträge", + "timestamp": "Zeitstempel", + "actor": "Akteur", + "action": "Aktion", + "target": "Ziel", + "details": "Details", + "ip_address": "IP Adresse", + "target_type": "Zieltyp", + "target_id": "Ziel-ID", + "no_logs_found": "Keine Audit-Protokolle gefunden.", + "prev": "Zurück", + "next": "Weiter", + "verification_successful_title": "Überprüfung erfolgreich", + "verification_successful_message": "Integrität des Audit-Protokolls erfolgreich überprüft.", + "verification_failed_title": "Überprüfung fehlgeschlagen", + "verification_failed_message": "Die Integritätsprüfung des Audit-Protokolls ist fehlgeschlagen. Bitte überprüfen Sie die Systemprotokolle für weitere Details.", + "verification_error_message": "Während der Überprüfung ist ein unerwarteter Fehler aufgetreten. Bitte versuchen Sie es erneut." + }, + "jobs": { + "title": "Job-Warteschlangen", + "queues": "Job-Warteschlangen", + "active": "Aktiv", + "completed": "Abgeschlossen", + "failed": "Fehlgeschlagen", + "delayed": "Verzögert", + "waiting": "Wartend", + "paused": "Pausiert", + "back_to_queues": "Zurück zu den Warteschlangen", + "queue_overview": "Warteschlangenübersicht", + "jobs": "Jobs", + "id": "ID", + "name": "Name", + "state": "Status", + "created_at": "Erstellt am", + "processed_at": "Verarbeitet am", + "finished_at": "Beendet am", + "showing": "Anzeige", + "of": "von", + "previous": "Zurück", + "next": "Weiter", + "ingestion_source": "Ingestion-Quelle" + }, + "license_page": { + "title": "Enterprise-Lizenzstatus", + "meta_description": "Zeigen Sie den aktuellen Status Ihrer Open Archiver Enterprise-Lizenz an.", + "revoked_title": "Lizenz widerrufen", + "revoked_message": "Ihre Lizenz wurde vom Lizenzadministrator widerrufen. Enterprise-Funktionen werden deaktiviert {{grace_period}}. Bitte kontaktieren Sie Ihren Account Manager für Unterstützung.", + "revoked_grace_period": "am {{date}}", + "revoked_immediately": "sofort", + "seat_limit_exceeded_title": "Sitzplatzlimit überschritten", + "seat_limit_exceeded_message": "Ihre Lizenz gilt für {{planSeats}} Benutzer, aber Sie verwenden derzeit {{activeSeats}}. Bitte kontaktieren Sie den Vertrieb, um Ihr Abonnement anzupassen.", + "customer": "Kunde", + "license_details": "Lizenzdetails", + "license_status": "Lizenzstatus", + "active": "Aktiv", + "expired": "Abgelaufen", + "revoked": "Widerrufen", + "unknown": "Unbekannt", + "expires": "Läuft ab", + "seat_usage": "Sitzplatznutzung", + "seats_used": "{{activeSeats}} von {{planSeats}} Plätzen belegt", + "enabled_features": "Aktivierte Funktionen", + "enabled_features_description": "Die folgenden Enterprise-Funktionen sind derzeit aktiviert.", + "feature": "Funktion", + "status": "Status", + "enabled": "Aktiviert", + "disabled": "Deaktiviert", + "could_not_load_title": "Lizenz konnte nicht geladen werden", + "could_not_load_message": "Ein unerwarteter Fehler ist aufgetreten." } } } diff --git a/packages/frontend/src/lib/translations/en.json b/packages/frontend/src/lib/translations/en.json index 5602ffe..c040369 100644 --- a/packages/frontend/src/lib/translations/en.json +++ b/packages/frontend/src/lib/translations/en.json @@ -7,7 +7,8 @@ "password": "Password" }, "common": { - "working": "Working" + "working": "Working", + "read_docs": "Read docs" }, "archive": { "title": "Archive", @@ -32,7 +33,14 @@ "deleting": "Deleting", "confirm": "Confirm", "cancel": "Cancel", - "not_found": "Email not found." + "not_found": "Email not found.", + "integrity_report": "Integrity Report", + "email_eml": "Email (.eml)", + "valid": "Valid", + "invalid": "Invalid", + "integrity_check_failed_title": "Integrity Check Failed", + "integrity_check_failed_message": "Could not verify the integrity of the email and its attachments.", + "integrity_report_description": "This report verifies that the content of your archived emails has not been altered." }, "ingestions": { "title": "Ingestion Sources", @@ -226,7 +234,8 @@ "users": "Users", "roles": "Roles", "api_keys": "API Keys", - "logout": "Logout" + "logout": "Logout", + "admin": "Admin" }, "api_keys_page": { "title": "API Keys", @@ -287,6 +296,87 @@ "indexed_insights": "Indexed insights", "top_10_senders": "Top 10 Senders", "no_indexed_insights": "No indexed insights available." + }, + "audit_log": { + "title": "Audit Log", + "header": "Audit Log", + "verify_integrity": "Verify Log Integrity", + "log_entries": "Log Entries", + "timestamp": "Timestamp", + "actor": "Actor", + "action": "Action", + "target": "Target", + "details": "Details", + "ip_address": "IP Address", + "target_type": "Target Type", + "target_id": "Target ID", + "no_logs_found": "No audit logs found.", + "prev": "Prev", + "next": "Next", + "log_entry_details": "Log Entry Details", + "viewing_details_for": "Viewing the complete details for log entry #", + "actor_id": "Actor ID", + "previous_hash": "Previous Hash", + "current_hash": "Current Hash", + "close": "Close", + "verification_successful_title": "Verification Successful", + "verification_successful_message": "Audit log integrity verified successfully.", + "verification_failed_title": "Verification Failed", + "verification_failed_message": "The audit log integrity check failed. Please review the system logs for more details.", + "verification_error_message": "An unexpected error occurred during verification. Please try again." + }, + "jobs": { + "title": "Job Queues", + "queues": "Job Queues", + "active": "Active", + "completed": "Completed", + "failed": "Failed", + "delayed": "Delayed", + "waiting": "Waiting", + "paused": "Paused", + "back_to_queues": "Back to Queues", + "queue_overview": "Queue Overview", + "jobs": "Jobs", + "id": "ID", + "name": "Name", + "state": "State", + + "created_at": "Created At", + "processed_at": "Processed At", + "finished_at": "Finished At", + "showing": "Showing", + "of": "of", + "previous": "Previous", + "next": "Next", + "ingestion_source": "Ingestion Source" + }, + "license_page": { + "title": "Enterprise License Status", + "meta_description": "View the current status of your Open Archiver Enterprise license.", + "revoked_title": "License Revoked", + "revoked_message": "Your license has been revoked by the license administrator. Enterprise features will be disabled {{grace_period}}. Please contact your account manager for assistance.", + "revoked_grace_period": "on {{date}}", + "revoked_immediately": "immediately", + "seat_limit_exceeded_title": "Seat Limit Exceeded", + "seat_limit_exceeded_message": "Your license is for {{planSeats}} users, but you are currently using {{activeSeats}}. Please contact sales to adjust your subscription.", + "customer": "Customer", + "license_details": "License Details", + "license_status": "License Status", + "active": "Active", + "expired": "Expired", + "revoked": "Revoked", + "unknown": "Unknown", + "expires": "Expires", + "seat_usage": "Seat Usage", + "seats_used": "{{activeSeats}} of {{planSeats}} seats used", + "enabled_features": "Enabled Features", + "enabled_features_description": "The following enterprise features are currently enabled.", + "feature": "Feature", + "status": "Status", + "enabled": "Enabled", + "disabled": "Disabled", + "could_not_load_title": "Could Not Load License", + "could_not_load_message": "An unexpected error occurred." } } } diff --git a/packages/frontend/src/routes/+layout.server.ts b/packages/frontend/src/routes/+layout.server.ts index 36084e4..4ed4db6 100644 --- a/packages/frontend/src/routes/+layout.server.ts +++ b/packages/frontend/src/routes/+layout.server.ts @@ -63,7 +63,7 @@ export const load: LayoutServerLoad = async (event) => { return { user: locals.user, accessToken: locals.accessToken, - isDemo: process.env.IS_DEMO === 'true', + enterpriseMode: locals.enterpriseMode, systemSettings, currentVersion: version, newVersionInfo: newVersionInfo, diff --git a/packages/frontend/src/routes/+layout.ts b/packages/frontend/src/routes/+layout.ts index 7b58cb7..2618086 100644 --- a/packages/frontend/src/routes/+layout.ts +++ b/packages/frontend/src/routes/+layout.ts @@ -8,7 +8,7 @@ export const load: LayoutLoad = async ({ url, data }) => { let initLocale: SupportedLanguage = 'en'; // Default fallback - if (data.systemSettings?.language) { + if (data && data.systemSettings?.language) { initLocale = data.systemSettings.language; } diff --git a/packages/frontend/src/routes/api/[...slug]/+server.ts b/packages/frontend/src/routes/api/[...slug]/+server.ts index 118f90c..297ff85 100644 --- a/packages/frontend/src/routes/api/[...slug]/+server.ts +++ b/packages/frontend/src/routes/api/[...slug]/+server.ts @@ -1,26 +1,32 @@ import { env } from '$env/dynamic/private'; import type { RequestHandler } from '@sveltejs/kit'; +import { json } from '@sveltejs/kit'; const BACKEND_URL = `http://localhost:${env.PORT_BACKEND || 4000}`; -const handleRequest: RequestHandler = async ({ request, params }) => { +const handleRequest: RequestHandler = async ({ request, params, fetch }) => { const url = new URL(request.url); const slug = params.slug || ''; const targetUrl = `${BACKEND_URL}/${slug}${url.search}`; - // Create a new request with the same method, headers, and body - const proxyRequest = new Request(targetUrl, { - method: request.method, - headers: request.headers, - body: request.body, - duplex: 'half', // Required for streaming request bodies - } as RequestInit); + try { + const proxyRequest = new Request(targetUrl, { + method: request.method, + headers: request.headers, + body: request.body, + duplex: 'half', + } as RequestInit); - // Forward the request to the backend - const response = await fetch(proxyRequest); + const response = await fetch(proxyRequest); - // Return the response from the backend - return response; + return response; + } catch (error) { + console.error('Proxy request failed:', error); + return json( + { message: `Failed to connect to the backend service. ${JSON.stringify(error)}` }, + { status: 500 } + ); + } }; export const GET = handleRequest; diff --git a/packages/frontend/src/routes/dashboard/+error.svelte b/packages/frontend/src/routes/dashboard/+error.svelte index 34fa2b3..c5c15ff 100644 --- a/packages/frontend/src/routes/dashboard/+error.svelte +++ b/packages/frontend/src/routes/dashboard/+error.svelte @@ -1,6 +1,5 @@ diff --git a/packages/frontend/src/routes/dashboard/+layout.svelte b/packages/frontend/src/routes/dashboard/+layout.svelte index 70f55a0..4326ee1 100644 --- a/packages/frontend/src/routes/dashboard/+layout.svelte +++ b/packages/frontend/src/routes/dashboard/+layout.svelte @@ -1,29 +1,46 @@ -
    +
    OpenArchiver Logo - Open Archiver + - - - {#each navItems as item} - {#if item.subMenu && item.subMenu.length > 0} - - page.url.pathname.startsWith( - sub.href.substring(0, sub.href.lastIndexOf('/')) + + + +
    + +
    + + + {#snippet child({ props })} + + {/snippet} + + + {#each navItems as item} + {#if item.subMenu && item.subMenu.length > 0} + + {item.label} + + {#each item.subMenu as subItem} + + {subItem.label} + + {/each} + + + {:else if item.href} + + {item.label} + + {/if} + {/each} + + +
    -
    +
    {@render children()}
    diff --git a/packages/frontend/src/routes/dashboard/admin/jobs/+page.server.ts b/packages/frontend/src/routes/dashboard/admin/jobs/+page.server.ts new file mode 100644 index 0000000..4254646 --- /dev/null +++ b/packages/frontend/src/routes/dashboard/admin/jobs/+page.server.ts @@ -0,0 +1,27 @@ +import { api } from '$lib/server/api'; +import { error, type NumericRange } from '@sveltejs/kit'; +import type { PageServerLoad } from './$types'; +import type { IGetQueuesResponse } from '@open-archiver/types'; + +export const load: PageServerLoad = async (event) => { + try { + const response = await api('/jobs/queues', event); + + if (!response.ok) { + const responseText = await response.json(); + throw error( + response.status as NumericRange<400, 599>, + responseText.message || 'Failed to fetch job queues.' + ); + } + + const data: IGetQueuesResponse = await response.json(); + + return { + queues: data.queues, + }; + } catch (e: any) { + console.error('Failed to load job queues:', e); + throw error(e.status || 500, e.body?.message || 'Failed to load job queues'); + } +}; diff --git a/packages/frontend/src/routes/dashboard/admin/jobs/+page.svelte b/packages/frontend/src/routes/dashboard/admin/jobs/+page.svelte new file mode 100644 index 0000000..916c96a --- /dev/null +++ b/packages/frontend/src/routes/dashboard/admin/jobs/+page.svelte @@ -0,0 +1,58 @@ + + + + {$t('app.jobs.title')} - Open Archiver + + + diff --git a/packages/frontend/src/routes/dashboard/admin/jobs/[queueName]/+page.server.ts b/packages/frontend/src/routes/dashboard/admin/jobs/[queueName]/+page.server.ts new file mode 100644 index 0000000..64ed08f --- /dev/null +++ b/packages/frontend/src/routes/dashboard/admin/jobs/[queueName]/+page.server.ts @@ -0,0 +1,35 @@ +import { api } from '$lib/server/api'; +import { error, type NumericRange } from '@sveltejs/kit'; +import type { PageServerLoad } from './$types'; +import type { IGetQueueJobsResponse, JobStatus } from '@open-archiver/types'; + +export const load: PageServerLoad = async (event) => { + const { queueName } = event.params; + const status = (event.url.searchParams.get('status') || 'failed') as JobStatus; + const page = event.url.searchParams.get('page') || '1'; + const limit = event.url.searchParams.get('limit') || '10'; + + try { + const response = await api( + `/jobs/queues/${queueName}?status=${status}&page=${page}&limit=${limit}`, + event + ); + + if (!response.ok) { + const responseText = await response.json(); + throw error( + response.status as NumericRange<400, 599>, + responseText.message || 'Failed to fetch job queue details.' + ); + } + + const data: IGetQueueJobsResponse = await response.json(); + + return { + queue: data, + }; + } catch (e: any) { + console.error('Failed to load job queue details:', e); + throw error(e.status || 500, e.body?.message || 'Failed to load job queue details'); + } +}; diff --git a/packages/frontend/src/routes/dashboard/admin/jobs/[queueName]/+page.svelte b/packages/frontend/src/routes/dashboard/admin/jobs/[queueName]/+page.svelte new file mode 100644 index 0000000..4896272 --- /dev/null +++ b/packages/frontend/src/routes/dashboard/admin/jobs/[queueName]/+page.svelte @@ -0,0 +1,212 @@ + + + + {queue.name} - {$t('app.jobs.title')} - Open Archiver + + +
    + + ← {$t('app.jobs.back_to_queues')} + +

    {queue.name.split('_').join(' ')}

    + + + + {$t('app.jobs.jobs')} +
    + {#each jobStatuses as status} + + {/each} +
    +
    + + + + + {$t('app.jobs.id')} + {$t('app.jobs.name')} + {$t('app.jobs.state')} + {$t('app.jobs.created_at')} + {$t('app.jobs.processed_at')} + {$t('app.jobs.finished_at')} + {$t('app.jobs.ingestion_source')} + + + + {#each queue.jobs as job} + + {job.id} + {job.name} + + {#if job.error} + + {:else} + {job.state} + {/if} + + {new Date(job.timestamp).toLocaleString()} + {job.processedOn + ? new Date(job.processedOn).toLocaleString() + : 'N/A'} + {job.finishedOn + ? new Date(job.finishedOn).toLocaleString() + : 'N/A'} + + {job.ingestionSourceId || 'N/A'} + + + {#if job.error} + + {/if} + {/each} + + + + +
    + {$t('app.jobs.showing')} + {queue.jobs.length} + {$t('app.jobs.of')} + {queue.pagination.totalJobs} + {$t('app.jobs.jobs')} +
    + {#if queue.pagination.totalJobs > queue.pagination.limit} + + {#snippet children({ pages, currentPage })} + + + + + + + + + + {#each pages as page (page.key)} + {#if page.type === 'ellipsis'} + + + + {:else} + + + + {page.value} + + + + {/if} + {/each} + + + + + + + + + + {/snippet} + + {/if} +
    +
    +
    diff --git a/packages/frontend/src/routes/dashboard/admin/license/+page.server.ts b/packages/frontend/src/routes/dashboard/admin/license/+page.server.ts new file mode 100644 index 0000000..79442d8 --- /dev/null +++ b/packages/frontend/src/routes/dashboard/admin/license/+page.server.ts @@ -0,0 +1,39 @@ +import { api } from '$lib/server/api'; +import type { PageServerLoad } from './$types'; +import type { ConsolidatedLicenseStatus } from '@open-archiver/types'; +import { error } from '@sveltejs/kit'; + +export const load: PageServerLoad = async (event) => { + if (!event.locals.enterpriseMode) { + throw error( + 403, + 'This feature is only available in the Enterprise Edition. Please contact Open Archiver to upgrade.' + ); + } + try { + const response = await api('/enterprise/status/license-status', event); + const responseText = await response.json(); + if (!response.ok) { + if (response.status === 404) { + throw error(404, responseText.error || JSON.stringify(responseText)); + } + // Handle other potential server errors + throw error(response.status, 'Failed to fetch license status'); + } + + const licenseStatus: ConsolidatedLicenseStatus = responseText; + + return { + licenseStatus, + }; + } catch (e) { + // Catch fetch errors or re-throw kit errors + if (e instanceof Error) { + throw error( + 500, + 'An unexpected error occurred while trying to fetch the license status.' + ); + } + throw e; + } +}; diff --git a/packages/frontend/src/routes/dashboard/admin/license/+page.svelte b/packages/frontend/src/routes/dashboard/admin/license/+page.svelte new file mode 100644 index 0000000..aa36053 --- /dev/null +++ b/packages/frontend/src/routes/dashboard/admin/license/+page.svelte @@ -0,0 +1,177 @@ + + + + {$t('app.license_page.title')} - Open Archiver + + + +
    +

    {$t('app.license_page.title')}

    + + {#if data.licenseStatus.remoteStatus === 'REVOKED'} + + +
    + + {$t('app.license_page.revoked_title')} +
    +
    + +

    + {$t('app.license_page.revoked_message', { + grace_period: data.licenseStatus.gracePeriodEnds + ? $t('app.license_page.revoked_grace_period', { + date: format( + new Date(data.licenseStatus.gracePeriodEnds), + 'PPP' + ), + } as any) + : $t('app.license_page.revoked_immediately'), + } as any)} +

    +
    +
    + {/if} + + {#if data.licenseStatus.activeSeats > data.licenseStatus.planSeats} + + +
    + + {$t('app.license_page.seat_limit_exceeded_title')} +
    +
    + +

    + {$t('app.license_page.seat_limit_exceeded_message', { + planSeats: data.licenseStatus.planSeats, + activeSeats: data.licenseStatus.activeSeats, + } as any)} +

    +
    +
    + {/if} + +
    + + + {$t('app.license_page.license_details')} + + +
    + {$t('app.license_page.customer')} + {data.licenseStatus.customerName} +
    +
    + {$t('app.license_page.expires')} + + {format(new Date(data.licenseStatus.expiresAt), 'PPP')} + ({formatDistanceToNow(new Date(data.licenseStatus.expiresAt), { + addSuffix: true, + })}) + +
    +
    + {$t('app.license_page.status')} + {#if data.licenseStatus.remoteStatus === 'VALID' && !data.licenseStatus.isExpired} + {$t('app.license_page.active')} + {:else if data.licenseStatus.isExpired} + {$t('app.license_page.expired')} + {:else if data.licenseStatus.remoteStatus === 'REVOKED'} + {$t('app.license_page.revoked')} + {:else} + {$t('app.license_page.unknown')} + {/if} +
    +
    +
    + + + {$t('app.license_page.seat_usage')} + + {$t('app.license_page.seats_used', { + activeSeats: data.licenseStatus.activeSeats, + planSeats: data.licenseStatus.planSeats, + } as any)} + + + + + + +
    + + + + {$t('app.license_page.enabled_features')} + + {$t('app.license_page.enabled_features_description')} + + + + + + + {$t('app.license_page.feature')} + {$t('app.license_page.status')} + + + + {#each Object.entries(data.licenseStatus.features) as [feature, enabled]} + + {feature.replace('-', ' ')} + + {#if enabled || data.licenseStatus.features.all === true} + {$t('app.license_page.enabled')} + {:else} + {$t('app.license_page.disabled')} + {/if} + + + {/each} + +
    +
    +
    +
    diff --git a/packages/frontend/src/routes/dashboard/archived-emails/+page.svelte b/packages/frontend/src/routes/dashboard/archived-emails/+page.svelte index 80cee6f..7d9e2df 100644 --- a/packages/frontend/src/routes/dashboard/archived-emails/+page.svelte +++ b/packages/frontend/src/routes/dashboard/archived-emails/+page.svelte @@ -5,6 +5,9 @@ import * as Select from '$lib/components/ui/select'; import { goto } from '$app/navigation'; import { t } from '$lib/translations'; + import * as Pagination from '$lib/components/ui/pagination/index.js'; + import ChevronLeft from 'lucide-svelte/icons/chevron-left'; + import ChevronRight from 'lucide-svelte/icons/chevron-right'; let { data }: { data: PageData } = $props(); @@ -17,55 +20,6 @@ goto(`/dashboard/archived-emails?ingestionSourceId=${value}`); } }; - - const getPaginationItems = (currentPage: number, totalPages: number, siblingCount = 1) => { - const totalPageNumbers = siblingCount + 5; - - if (totalPages <= totalPageNumbers) { - return Array.from({ length: totalPages }, (_, i) => i + 1); - } - - const leftSiblingIndex = Math.max(currentPage - siblingCount, 1); - const rightSiblingIndex = Math.min(currentPage + siblingCount, totalPages); - - const shouldShowLeftDots = leftSiblingIndex > 2; - const shouldShowRightDots = rightSiblingIndex < totalPages - 2; - - const firstPageIndex = 1; - const lastPageIndex = totalPages; - - if (!shouldShowLeftDots && shouldShowRightDots) { - let leftItemCount = 3 + 2 * siblingCount; - let leftRange = Array.from({ length: leftItemCount }, (_, i) => i + 1); - return [...leftRange, '...', totalPages]; - } - - if (shouldShowLeftDots && !shouldShowRightDots) { - let rightItemCount = 3 + 2 * siblingCount; - let rightRange = Array.from( - { length: rightItemCount }, - (_, i) => totalPages - rightItemCount + i + 1 - ); - return [firstPageIndex, '...', ...rightRange]; - } - - if (shouldShowLeftDots && shouldShowRightDots) { - let middleRange = Array.from( - { length: rightSiblingIndex - leftSiblingIndex + 1 }, - (_, i) => leftSiblingIndex + i - ); - return [firstPageIndex, '...', ...middleRange, '...', lastPageIndex]; - } - - return []; - }; - - let paginationItems = $derived( - getPaginationItems( - archivedEmails.page, - Math.ceil(archivedEmails.total / archivedEmails.limit) - ) - ); @@ -155,46 +109,61 @@ {#if archivedEmails.total > archivedEmails.limit} -
    - + - - - - {#each paginationItems as item} - {#if typeof item === 'number'} - - - - {:else} - ... - {/if} - {/each} - - - - + {#snippet children({ pages, currentPage })} + + + + + + + + + + {#each pages as page (page.key)} + {#if page.type === 'ellipsis'} + + + + {:else} + + + + {page.value} + + + + {/if} + {/each} + + + + + + + + + + {/snippet} +
    {/if} diff --git a/packages/frontend/src/routes/dashboard/archived-emails/[id]/+page.server.ts b/packages/frontend/src/routes/dashboard/archived-emails/[id]/+page.server.ts index 93bd0c2..0781ff0 100644 --- a/packages/frontend/src/routes/dashboard/archived-emails/[id]/+page.server.ts +++ b/packages/frontend/src/routes/dashboard/archived-emails/[id]/+page.server.ts @@ -1,27 +1,45 @@ import { api } from '$lib/server/api'; import { error } from '@sveltejs/kit'; import type { PageServerLoad } from './$types'; -import type { ArchivedEmail } from '@open-archiver/types'; +import type { ArchivedEmail, IntegrityCheckResult } from '@open-archiver/types'; export const load: PageServerLoad = async (event) => { try { const { id } = event.params; - const response = await api(`/archived-emails/${id}`, event); - const responseText = await response.json(); - if (!response.ok) { + + const [emailResponse, integrityResponse] = await Promise.all([ + api(`/archived-emails/${id}`, event), + api(`/integrity/${id}`, event), + ]); + + if (!emailResponse.ok) { + const responseText = await emailResponse.json(); return error( - response.status, + emailResponse.status, responseText.message || 'You do not have permission to read this email.' ); } - const email: ArchivedEmail = responseText; + + if (!integrityResponse.ok) { + const responseText = await integrityResponse.json(); + return error( + integrityResponse.status, + responseText.message || 'Failed to perform integrity check.' + ); + } + + const email: ArchivedEmail = await emailResponse.json(); + const integrityReport: IntegrityCheckResult[] = await integrityResponse.json(); + return { email, + integrityReport, }; - } catch (error) { - console.error('Failed to load archived email:', error); + } catch (e) { + console.error('Failed to load archived email:', e); return { email: null, + integrityReport: [], error: 'Failed to load email', }; } diff --git a/packages/frontend/src/routes/dashboard/archived-emails/[id]/+page.svelte b/packages/frontend/src/routes/dashboard/archived-emails/[id]/+page.svelte index 707389c..92a0c56 100644 --- a/packages/frontend/src/routes/dashboard/archived-emails/[id]/+page.svelte +++ b/packages/frontend/src/routes/dashboard/archived-emails/[id]/+page.svelte @@ -11,9 +11,14 @@ import * as Dialog from '$lib/components/ui/dialog'; import { setAlert } from '$lib/components/custom/alert/alert-state.svelte'; import { t } from '$lib/translations'; + import { ShieldCheck, ShieldAlert, AlertTriangle } from 'lucide-svelte'; + import * as Alert from '$lib/components/ui/alert'; + import { Badge } from '$lib/components/ui/badge'; + import * as HoverCard from '$lib/components/ui/hover-card'; let { data }: { data: PageData } = $props(); let email = $derived(data.email); + let integrityReport = $derived(data.integrityReport); let isDeleteDialogOpen = $state(false); let isDeleting = $state(false); @@ -185,6 +190,77 @@ + {#if integrityReport && integrityReport.length > 0} + + + {$t('app.archive.integrity_report')} + + + {$t('app.archive.integrity_report_description')} + {$t('app.common.read_docs')}. + + + + +
      + {#each integrityReport as item} +
    • +
      + {#if item.isValid} + + {:else} + + {/if} +
      +

      + {#if item.type === 'email'} + {$t('app.archive.email_eml')} + {:else} + {item.filename} + {/if} +

      +
      +
      + {#if item.isValid} + {$t('app.archive.valid')} + {:else} + + + {$t('app.archive.invalid')} + + +

      {item.reason}

      +
      +
      + {/if} +
    • + {/each} +
    +
    +
    + {:else} + + + {$t('app.archive.integrity_check_failed_title')} + + {$t('app.archive.integrity_check_failed_message')} + + + {/if} + {#if email.thread && email.thread.length > 1} diff --git a/packages/frontend/src/routes/dashboard/compliance/audit-log/+page.server.ts b/packages/frontend/src/routes/dashboard/compliance/audit-log/+page.server.ts new file mode 100644 index 0000000..a16644f --- /dev/null +++ b/packages/frontend/src/routes/dashboard/compliance/audit-log/+page.server.ts @@ -0,0 +1,29 @@ +import { api } from '$lib/server/api'; +import { redirect } from '@sveltejs/kit'; +import type { PageServerLoad } from './$types'; +import type { GetAuditLogsResponse } from '@open-archiver/types'; +import { error } from '@sveltejs/kit'; + +export const load: PageServerLoad = async (event) => { + if (!event.locals.enterpriseMode) { + throw error( + 403, + 'This feature is only available in the Enterprise Edition. Please contact Open Archiver to upgrade.' + ); + } + // Forward search params from the page URL to the API request + const response = await api( + `/enterprise/audit-logs?${event.url.searchParams.toString()}`, + event + ); + const res = await response.json(); + if (!response.ok) { + throw error(response.status, res.message || JSON.stringify(res)); + } + + const result: GetAuditLogsResponse = res; + return { + logs: result.data, + meta: result.meta, + }; +}; diff --git a/packages/frontend/src/routes/dashboard/compliance/audit-log/+page.svelte b/packages/frontend/src/routes/dashboard/compliance/audit-log/+page.svelte new file mode 100644 index 0000000..2f797b0 --- /dev/null +++ b/packages/frontend/src/routes/dashboard/compliance/audit-log/+page.svelte @@ -0,0 +1,313 @@ + + + + {$t('app.audit_log.title')} - OpenArchiver + + +
    +

    {$t('app.audit_log.header')}

    + +
    + +
    + + + + + + + {$t('app.audit_log.timestamp')} + + + + + {$t('app.audit_log.actor')} + {$t('app.audit_log.ip_address')} + {$t('app.audit_log.action')} + {$t('app.audit_log.target_type')} + {$t('app.audit_log.target_id')} + {$t('app.audit_log.details')} + + + + {#if logs && logs.length > 0} + {#each logs as log (log.id)} + viewLogDetails(log)}> + {new Date(log.timestamp).toLocaleString()} + + {log.actorIdentifier} + + + {log.actorIp} + + + {log.actionType} + + + {#if log.targetType} + {log.targetType} + {/if} + + + {#if log.targetId} + {log.targetId} + {/if} + + + {#if log.details} + + + + {JSON.stringify(log.details).length > 10 + ? `${JSON.stringify(log.details).substring(0, 10)}...` + : JSON.stringify(log.details)} + + + +
    {JSON.stringify(
    +												log.details,
    +												null,
    +												2
    +											)}
    +
    +
    + {/if} +
    +
    + {/each} + {:else} + + + {$t('app.audit_log.no_logs_found')} + + + {/if} +
    +
    +
    + +{#if meta.total > meta.limit} +
    + + {#snippet children({ pages, currentPage })} + + + + + + + + + + {#each pages as page (page.key)} + {#if page.type === 'ellipsis'} + + + + {:else} + + + + {page.value} + + + + {/if} + {/each} + + + + + + + + + + {/snippet} + +
    +{/if} + + + + + {$t('app.audit_log.log_entry_details')} + + {$t('app.audit_log.viewing_details_for')}{selectedLog?.id}. + + + {#if selectedLog} +
    +
    + + {new Date(selectedLog.timestamp).toLocaleString()} +
    +
    + + {selectedLog.actorIdentifier} +
    +
    + + {selectedLog.actorIp} +
    +
    + +
    + {selectedLog.actionType} +
    +
    +
    + +
    + {#if selectedLog.targetType} + {selectedLog.targetType} + {/if} +
    +
    +
    + + {selectedLog.targetId} +
    +
    + +
    +
    {JSON.stringify(
    +								selectedLog.details,
    +								null,
    +								2
    +							)}
    +
    +
    +
    + + {selectedLog.previousHash} +
    +
    + + {selectedLog.currentHash} +
    +
    + {/if} + + + +
    +
    diff --git a/packages/frontend/src/routes/dashboard/ingestions/+page.svelte b/packages/frontend/src/routes/dashboard/ingestions/+page.svelte index 13a5295..746fbfb 100644 --- a/packages/frontend/src/routes/dashboard/ingestions/+page.svelte +++ b/packages/frontend/src/routes/dashboard/ingestions/+page.svelte @@ -31,16 +31,6 @@ }; const openEditDialog = (source: IngestionSource) => { - if (data.isDemo) { - setAlert({ - type: 'warning', - title: 'Demo mode', - message: 'Editing is not allowed in demo mode.', - duration: 5000, - show: true, - }); - return; - } selectedSource = source; isDialogOpen = true; }; @@ -100,9 +90,6 @@ try { const isPaused = source.status === 'paused'; const newStatus = isPaused ? 'active' : 'paused'; - if (data.isDemo) { - throw Error('This operation is not allowed in demo mode.'); - } if (newStatus === 'paused') { const response = await api(`/ingestion-sources/${source.id}/pause`, { method: 'POST', @@ -153,6 +140,7 @@ duration: 5000, show: true, }); + return; } } ingestionSources = ingestionSources.filter((s) => !selectedIds.includes(s.id)); @@ -298,9 +286,7 @@ {/if} - +
    diff --git a/packages/frontend/src/routes/dashboard/search/+page.svelte b/packages/frontend/src/routes/dashboard/search/+page.svelte index 966e4d4..0483aa1 100644 --- a/packages/frontend/src/routes/dashboard/search/+page.svelte +++ b/packages/frontend/src/routes/dashboard/search/+page.svelte @@ -17,6 +17,9 @@ import CircleAlertIcon from '@lucide/svelte/icons/circle-alert'; import * as Alert from '$lib/components/ui/alert/index.js'; import { t } from '$lib/translations'; + import * as Pagination from '$lib/components/ui/pagination/index.js'; + import ChevronLeft from 'lucide-svelte/icons/chevron-left'; + import ChevronRight from 'lucide-svelte/icons/chevron-right'; let { data }: { data: PageData } = $props(); let searchResult = $derived(data.searchResult); @@ -62,7 +65,8 @@ }; } - function handleSearch() { + function handleSearch(e: SubmitEvent) { + e.preventDefault(); const params = new URLSearchParams(); params.set('keywords', keywords); params.set('page', '1'); @@ -120,55 +124,6 @@ return snippets; } - - const getPaginationItems = (currentPage: number, totalPages: number, siblingCount = 1) => { - const totalPageNumbers = siblingCount + 5; - - if (totalPages <= totalPageNumbers) { - return Array.from({ length: totalPages }, (_, i) => i + 1); - } - - const leftSiblingIndex = Math.max(currentPage - siblingCount, 1); - const rightSiblingIndex = Math.min(currentPage + siblingCount, totalPages); - - const shouldShowLeftDots = leftSiblingIndex > 2; - const shouldShowRightDots = rightSiblingIndex < totalPages - 2; - - const firstPageIndex = 1; - const lastPageIndex = totalPages; - - if (!shouldShowLeftDots && shouldShowRightDots) { - let leftItemCount = 3 + 2 * siblingCount; - let leftRange = Array.from({ length: leftItemCount }, (_, i) => i + 1); - return [...leftRange, '...', totalPages]; - } - - if (shouldShowLeftDots && !shouldShowRightDots) { - let rightItemCount = 3 + 2 * siblingCount; - let rightRange = Array.from( - { length: rightItemCount }, - (_, i) => totalPages - rightItemCount + i + 1 - ); - return [firstPageIndex, '...', ...rightRange]; - } - - if (shouldShowLeftDots && shouldShowRightDots) { - let middleRange = Array.from( - { length: rightSiblingIndex - leftSiblingIndex + 1 }, - (_, i) => leftSiblingIndex + i - ); - return [firstPageIndex, '...', ...middleRange, '...', lastPageIndex]; - } - - return []; - }; - - let paginationItems = $derived( - getPaginationItems( - page, - Math.ceil((searchResult?.total || 0) / (searchResult?.limit || 10)) - ) - ); @@ -179,7 +134,7 @@

    {$t('app.search.email_search')}

    -
    + handleSearch(e)} class="mb-8 flex flex-col space-y-2">
    {/if} - - {$t('app.search.from')}: - {#if !isMounted} - - {:else} - - {/if} - | - {$t('app.search.to')}: - {#if !isMounted} - - {:else} - - {/if} - | - {#if !isMounted} - - {:else} - - {new Date(hit.timestamp).toLocaleString()} - - {/if} + + + {$t('app.search.from')}: + {#if !isMounted} + + {:else} + + {/if} + + + {$t('app.search.to')}: + {#if !isMounted} + + {:else} + + {/if} + + + {#if !isMounted} + + {:else} + + {new Date(hit.timestamp).toLocaleString()} + + {/if} + @@ -335,42 +296,57 @@
    {#if searchResult.total > searchResult.limit} -
    - - - - - {#each paginationItems as item} - {#if typeof item === 'number'} - - - - {:else} - ... - {/if} - {/each} - - - - +
    + + {#snippet children({ pages, currentPage })} + + + + + + + + + + {#each pages as page (page.key)} + {#if page.type === 'ellipsis'} + + + + {:else} + + + + {page.value} + + + + {/if} + {/each} + + + + + + + + + + {/snippet} +
    {/if} {/if} diff --git a/packages/frontend/vite.config.ts b/packages/frontend/vite.config.ts index 53d4b67..49d12ba 100644 --- a/packages/frontend/vite.config.ts +++ b/packages/frontend/vite.config.ts @@ -7,6 +7,10 @@ dotenv.config(); export default defineConfig({ plugins: [tailwindcss(), sveltekit()], + define: { + // This will be 'true' only during the enterprise build process + 'import.meta.env.VITE_ENTERPRISE_MODE': process.env.VITE_ENTERPRISE_MODE === 'true', + }, server: { port: Number(process.env.PORT_FRONTEND) || 3000, proxy: { diff --git a/packages/types/package.json b/packages/types/package.json index 824cdfa..86334b6 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -2,6 +2,7 @@ "name": "@open-archiver/types", "version": "0.1.0", "private": true, + "license": "SEE LICENSE IN LICENSE file", "main": "dist/index.js", "types": "dist/index.d.ts", "scripts": { diff --git a/packages/types/src/audit-log.enums.ts b/packages/types/src/audit-log.enums.ts new file mode 100644 index 0000000..bb3e134 --- /dev/null +++ b/packages/types/src/audit-log.enums.ts @@ -0,0 +1,37 @@ +export const AuditLogActions = [ + // General CRUD + 'CREATE', + 'READ', + 'UPDATE', + 'DELETE', + + // User & Session Management + 'LOGIN', + 'LOGOUT', + 'SETUP', // Initial user setup + + // Ingestion Actions + 'IMPORT', + 'PAUSE', + 'SYNC', + 'UPLOAD', + + // Other Actions + 'SEARCH', + 'DOWNLOAD', + 'GENERATE', // For API keys +] as const; + +export const AuditLogTargetTypes = [ + 'ApiKey', + 'ArchivedEmail', + 'Dashboard', + 'IngestionSource', + 'Role', + 'SystemSettings', + 'User', + 'File', // For uploads and downloads +] as const; + +export type AuditLogAction = (typeof AuditLogActions)[number]; +export type AuditLogTargetType = (typeof AuditLogTargetTypes)[number]; diff --git a/packages/types/src/audit-log.types.ts b/packages/types/src/audit-log.types.ts new file mode 100644 index 0000000..0788d38 --- /dev/null +++ b/packages/types/src/audit-log.types.ts @@ -0,0 +1,39 @@ +import type { AuditLogAction, AuditLogTargetType } from './audit-log.enums'; + +export interface AuditLogEntry { + id: number; + previousHash: string | null; + timestamp: Date; + actorIdentifier: string; + actorIp: string | null; + actionType: AuditLogAction; + targetType: AuditLogTargetType | null; + targetId: string | null; + details: Record | null; + currentHash: string; +} + +export type CreateAuditLogEntry = Omit< + AuditLogEntry, + 'id' | 'previousHash' | 'timestamp' | 'currentHash' +>; + +export interface GetAuditLogsOptions { + page?: number; + limit?: number; + startDate?: Date; + endDate?: Date; + actor?: string; + actionType?: AuditLogAction; + targetType?: AuditLogTargetType | null; + sort?: 'asc' | 'desc'; +} + +export interface GetAuditLogsResponse { + data: AuditLogEntry[]; + meta: { + total: number; + page: number; + limit: number; + }; +} diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts index c22cb39..f1eda70 100644 --- a/packages/types/src/index.ts +++ b/packages/types/src/index.ts @@ -8,3 +8,8 @@ export * from './search.types'; export * from './dashboard.types'; export * from './iam.types'; export * from './system.types'; +export * from './audit-log.types'; +export * from './audit-log.enums'; +export * from './integrity.types'; +export * from './jobs.types'; +export * from './license.types'; diff --git a/packages/types/src/integrity.types.ts b/packages/types/src/integrity.types.ts new file mode 100644 index 0000000..cb08b3d --- /dev/null +++ b/packages/types/src/integrity.types.ts @@ -0,0 +1,7 @@ +export interface IntegrityCheckResult { + type: 'email' | 'attachment'; + id: string; + filename?: string; + isValid: boolean; + reason?: string; +} diff --git a/packages/types/src/jobs.types.ts b/packages/types/src/jobs.types.ts new file mode 100644 index 0000000..efec722 --- /dev/null +++ b/packages/types/src/jobs.types.ts @@ -0,0 +1,93 @@ +/** + * Represents the possible statuses of a job in the queue. + */ +export type JobStatus = 'active' | 'completed' | 'failed' | 'delayed' | 'waiting' | 'paused'; + +/** + * A detailed representation of a job, providing essential information for monitoring and debugging. + */ +export interface IJob { + id: string | undefined; + name: string; + data: any; + state: string; + failedReason: string | undefined; + timestamp: number; + processedOn: number | undefined; + finishedOn: number | undefined; + attemptsMade: number; + stacktrace: string[]; + returnValue: any; + ingestionSourceId?: string; + error?: any; +} + +/** + * Holds the count of jobs in various states for a single queue. + */ +export interface IQueueCounts { + active: number; + completed: number; + failed: number; + delayed: number; + waiting: number; + paused: number; +} + +/** + * Provides a high-level overview of a queue, including its name and job counts. + */ +export interface IQueueOverview { + name: string; + counts: IQueueCounts; +} + +/** + * Represents the pagination details for a list of jobs. + */ +export interface IPagination { + currentPage: number; + totalPages: number; + totalJobs: number; + limit: number; +} + +/** + * Provides a detailed view of a specific queue, including a paginated list of its jobs. + */ +export interface IQueueDetails { + name: string; + counts: IQueueCounts; + jobs: IJob[]; + pagination: IPagination; +} + +// --- API Request & Response Types --- + +/** + * Response body for the endpoint that lists all queues. + */ +export interface IGetQueuesResponse { + queues: IQueueOverview[]; +} + +/** + * URL parameters for the endpoint that retrieves jobs from a specific queue. + */ +export interface IGetQueueJobsRequestParams { + queueName: string; +} + +/** + * Query parameters for filtering and paginating jobs within a queue. + */ +export interface IGetQueueJobsRequestQuery { + status: JobStatus; + page: string; // Received as a string from query params + limit: string; // Received as a string from query params +} + +/** + * Response body for the endpoint that retrieves jobs from a specific queue. + */ +export type IGetQueueJobsResponse = IQueueDetails; diff --git a/packages/types/src/license.types.ts b/packages/types/src/license.types.ts new file mode 100644 index 0000000..7949484 --- /dev/null +++ b/packages/types/src/license.types.ts @@ -0,0 +1,49 @@ +/** + * Features of Open Archiver Enterprise + */ +export enum OpenArchiverFeature { + AUDIT_LOG = 'audit-log', + RETENTION_POLICY = 'retention-policy', + SSO = 'sso', + STATUS = 'status', + ALL = 'all', +} + +/** + * The payload of the offline license.jwt file. + */ +export interface LicenseFilePayload { + licenseId: string; // UUID linking to the License Server + customerName: string; + planSeats: number; + features: OpenArchiverFeature[]; + expiresAt: string; // ISO 8601 + issuedAt: string; // ISO 8601 +} + +/** + * The structure of the cached response from the License Server. + */ +export interface LicenseStatusPayload { + status: 'VALID' | 'REVOKED'; + gracePeriodEnds?: string; // ISO 8601, only present if REVOKED +} + +/** + * The consolidated license status object returned by the API. + */ +export interface ConsolidatedLicenseStatus { + // From the license.jwt file + customerName: string; + planSeats: number; + expiresAt: string; + // From the cached license-status.json + remoteStatus: 'VALID' | 'REVOKED' | 'UNKNOWN'; + gracePeriodEnds?: string; + // Calculated values + activeSeats: number; + isExpired: boolean; + features: { + [key in OpenArchiverFeature]?: boolean; + }; +} diff --git a/packages/types/src/storage.types.ts b/packages/types/src/storage.types.ts index 7121f68..bb0966a 100644 --- a/packages/types/src/storage.types.ts +++ b/packages/types/src/storage.types.ts @@ -45,6 +45,7 @@ export interface LocalStorageConfig { // The absolute root path on the server where the archive will be stored. rootPath: string; openArchiverFolderName: string; + encryptionKey?: string; } /** @@ -66,6 +67,7 @@ export interface S3StorageConfig { // Force path-style addressing, required for MinIO. forcePathStyle?: boolean; openArchiverFolderName: string; + encryptionKey?: string; } export type StorageConfig = LocalStorageConfig | S3StorageConfig; diff --git a/packages/types/tsconfig.json b/packages/types/tsconfig.json index 319f4bc..7359508 100644 --- a/packages/types/tsconfig.json +++ b/packages/types/tsconfig.json @@ -3,7 +3,8 @@ "compilerOptions": { "outDir": "./dist", "rootDir": "./src", - "declaration": true + "declaration": true, + "composite": true }, "include": ["src/**/*.ts"], "exclude": ["node_modules", "dist"] diff --git a/packages/types/tsconfig.tsbuildinfo b/packages/types/tsconfig.tsbuildinfo deleted file mode 100644 index 06d8789..0000000 --- a/packages/types/tsconfig.tsbuildinfo +++ /dev/null @@ -1 +0,0 @@ -{"fileNames":["../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2023.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2024.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.dom.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.dom.asynciterable.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.scripthost.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2023.array.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2023.collection.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2023.intl.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2024.collection.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2024.object.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2024.promise.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2024.regexp.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2024.string.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.array.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.collection.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.intl.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.promise.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.decorators.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.iterator.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.float16.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.full.d.ts","./src/archived-emails.types.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/types.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/jwe/compact/decrypt.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/jwe/flattened/decrypt.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/jwe/general/decrypt.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/jwe/general/encrypt.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/jws/compact/verify.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/jws/flattened/verify.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/jws/general/verify.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/jwt/verify.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/jwt/decrypt.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/jwe/compact/encrypt.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/jwe/flattened/encrypt.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/jws/compact/sign.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/jws/flattened/sign.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/jws/general/sign.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/jwt/sign.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/jwt/encrypt.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/jwk/thumbprint.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/jwk/embedded.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/jwks/local.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/jwks/remote.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/jwt/unsecured.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/key/export.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/key/import.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/util/decode_protected_header.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/util/decode_jwt.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/util/errors.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/key/generate_key_pair.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/key/generate_secret.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/util/base64url.d.ts","../../node_modules/.pnpm/jose@6.0.11/node_modules/jose/dist/types/index.d.ts","./src/user.types.ts","./src/auth.types.ts","./src/dashboard.types.ts","./src/email.types.ts","./src/ingestion.types.ts","./src/storage.types.ts","./src/search.types.ts","./src/index.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/globals.typedarray.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/buffer.buffer.d.ts","../../node_modules/.pnpm/buffer@5.6.0/node_modules/buffer/index.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/utility.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/header.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/readable.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/fetch.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/formdata.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/connector.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/client.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/errors.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/dispatcher.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/global-origin.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/pool-stats.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/pool.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/handlers.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/balanced-pool.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/h2c-client.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/agent.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/mock-call-history.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/mock-agent.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/mock-client.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/mock-pool.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/mock-errors.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/retry-handler.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/retry-agent.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/api.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/cache-interceptor.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/interceptors.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/util.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/cookies.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/patch.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/websocket.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/eventsource.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/content-type.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/cache.d.ts","../../node_modules/.pnpm/undici-types@7.8.0/node_modules/undici-types/index.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/globals.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/assert.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/assert/strict.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/async_hooks.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/buffer.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/child_process.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/cluster.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/console.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/constants.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/crypto.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/dgram.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/dns.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/dns/promises.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/domain.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/dom-events.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/events.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/fs.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/fs/promises.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/http.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/http2.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/https.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/inspector.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/module.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/net.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/os.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/path.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/perf_hooks.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/process.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/punycode.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/querystring.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/readline.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/readline/promises.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/repl.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/sea.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/sqlite.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/stream.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/stream/promises.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/stream/consumers.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/stream/web.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/string_decoder.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/test.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/timers.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/timers/promises.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/tls.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/trace_events.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/tty.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/url.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/util.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/v8.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/vm.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/wasi.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/worker_threads.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/zlib.d.ts","../../node_modules/.pnpm/@types+node@24.0.13/node_modules/@types/node/index.d.ts"],"fileIdsList":[[127,169,172],[127,171,172],[172],[127,172,177,207],[127,172,173,178,184,185,192,204,215],[127,172,173,174,184,192],[127,172],[127,172,175,216],[127,172,176,177,185,193],[127,172,177,204,212],[127,172,178,180,184,192],[127,171,172,179],[127,172,180,181],[127,172,182,184],[127,171,172,184],[127,172,184,185,186,204,215],[127,172,184,185,186,199,204,207],[127,167,172],[127,167,172,180,184,187,192,204,215],[127,172,184,185,187,188,192,204,212,215],[127,172,187,189,204,212,215],[125,126,127,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221],[127,172,184,190],[127,172,191,215],[127,172,180,184,192,204],[127,172,193],[127,172,194],[127,171,172,195],[127,169,170,171,172,173,174,175,176,177,178,179,180,181,182,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221],[127,172,197],[127,172,198],[127,172,184,199,200],[127,172,199,201,216,218],[127,172,184,204,205,207],[127,172,206,207],[127,172,204,205],[127,172,207],[127,172,208],[127,169,172,204,209],[127,172,184,210,211],[127,172,210,211],[127,172,177,192,204,212],[127,172,213],[127,172,192,214],[127,172,187,198,215],[127,172,177,216],[127,172,204,217],[127,172,191,218],[127,172,219],[127,172,184,186,195,204,207,215,217,218,220],[127,172,204,221],[86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,127,172],[86,127,172],[127,137,141,172,215],[127,137,172,204,215],[127,172,204],[127,132,172],[127,134,137,172,215],[127,172,192,212],[127,172,222],[127,132,172,222],[127,134,137,172,192,215],[127,129,130,131,133,136,172,184,204,215],[127,137,145,172],[127,130,135,172],[127,137,161,162,172],[127,130,133,137,172,207,215,222],[127,137,172],[127,129,172],[127,132,133,134,135,136,137,138,139,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,162,163,164,165,166,172],[127,137,154,157,172,180],[127,137,145,146,147,172],[127,135,137,146,148,172],[127,136,172],[127,130,132,137,172],[127,137,141,146,148,172],[127,141,172],[127,135,137,140,172,215],[127,130,134,137,145,172],[127,137,154,172],[127,132,137,161,172,207,220,222],[116,117,127,172],[85,117,118,119,120,121,122,123,127,172],[120,127,172]],"fileInfos":[{"version":"69684132aeb9b5642cbcd9e22dff7818ff0ee1aa831728af0ecf97d3364d5546","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"8fd575e12870e9944c7e1d62e1f5a73fcf23dd8d3a321f2a2c74c20d022283fe","impliedFormat":1},{"version":"8bf8b5e44e3c9c36f98e1007e8b7018c0f38d8adc07aecef42f5200114547c70","impliedFormat":1},{"version":"092c2bfe125ce69dbb1223c85d68d4d2397d7d8411867b5cc03cec902c233763","affectsGlobalScope":true,"impliedFormat":1},{"version":"07f073f19d67f74d732b1adea08e1dc66b1b58d77cb5b43931dee3d798a2fd53","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7a3c8b952931daebdfc7a2897c53c0a1c73624593fa070e46bd537e64dcd20a","affectsGlobalScope":true,"impliedFormat":1},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"936e80ad36a2ee83fc3caf008e7c4c5afe45b3cf3d5c24408f039c1d47bdc1df","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"fef8cfad2e2dc5f5b3d97a6f4f2e92848eb1b88e897bb7318cef0e2820bceaab","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"b5ce7a470bc3628408429040c4e3a53a27755022a32fd05e2cb694e7015386c7","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"87dc0f382502f5bbce5129bdc0aea21e19a3abbc19259e0b43ae038a9fc4e326","affectsGlobalScope":true,"impliedFormat":1},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ece9f17b3866cc077099c73f4983bddbcb1dc7ddb943227f1ec070f529dedd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c9319a09485199c1f7b0498f2988d6d2249793ef67edda49d1e584746be9032","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3a2a0cee0f03ffdde24d89660eba2685bfbdeae955a6c67e8c4c9fd28928eeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"60037901da1a425516449b9a20073aa03386cce92f7a1fd902d7602be3a7c2e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true,"impliedFormat":1},{"version":"22adec94ef7047a6c9d1af3cb96be87a335908bf9ef386ae9fd50eeb37f44c47","affectsGlobalScope":true,"impliedFormat":1},{"version":"4245fee526a7d1754529d19227ecbf3be066ff79ebb6a380d78e41648f2f224d","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"bde31fd423cd93b0eff97197a3f66df7c93e8c0c335cbeb113b7ff1ac35c23f4","impliedFormat":1},{"version":"7d8638ea0a2fefcabc81b2f08b8d8df4bb6946832deea3cb81a3018f5ad92509","signature":"0b4916ea558a245dc7e6b688d967f275f87d2d000e56132d5f303adae183fe76"},{"version":"dc9e7909f3edca55a7da578ab1f2b473490cf1cea844fd05af2daee94e17e518","impliedFormat":99},{"version":"a380cd0a371b5b344c2f679a932593f02445571f9de0014bdf013dddf2a77376","impliedFormat":99},{"version":"dbbcd13911daafc1554acc17dad18ab92f91b5b8f084c6c4370cb8c60520c3b6","impliedFormat":99},{"version":"ab17464cd8391785c29509c629aa8477c8e86d4d3013f4c200b71ac574774ec2","impliedFormat":99},{"version":"d7f1043cbc447d09c8962c973d9f60e466c18e6bbaa470777901d9c2d357cfbe","impliedFormat":99},{"version":"e130a73d7e1e34953b1964c17c218fd14fccd1df6f15f111352b0d53291311bb","impliedFormat":99},{"version":"4ddecad872558e2b3df434ef0b01114d245e7a18a86afa6e7b5c68e75f9b8f76","impliedFormat":99},{"version":"a0ab7a82c3f844d4d4798f68f7bd6dc304e9ad6130631c90a09fb2636cb62756","impliedFormat":99},{"version":"270ceb915b1304c042b6799de28ff212cfa4baf06900d3a8bc4b79f62f00c8a7","impliedFormat":99},{"version":"1b3174ea6e3b4ae157c88eb28bf8e6d67f044edc9c552daf5488628fd8e5be97","impliedFormat":99},{"version":"1d1c0e6bda55b6fdcc247c4abd1ba2a36b50aac71bbf78770cbd172713c4e05f","impliedFormat":99},{"version":"d7d8a5f6a306b755dfa5a9b101cb800fd912b256222fb7d4629b5de416b4b8d5","impliedFormat":99},{"version":"5585ed538922e2e58655218652dcb262f08afa902f26f490cdec4967887ac31a","impliedFormat":99},{"version":"b46de7238d9d2243b27a21797e4772ba91465caae9c31f21dc43748dc9de9cd0","impliedFormat":99},{"version":"625fdbce788630c62f793cb6c80e0072ce0b8bf1d4d0a9922430671164371e0b","impliedFormat":99},{"version":"b6790300d245377671c085e76e9ef359b3cbba6821b913d6ce6b2739d00b9fb1","impliedFormat":99},{"version":"6beaff23ae0b12aa3b7672c7fd4e924f5088efa899b58fe83c7cc5675234ff14","impliedFormat":99},{"version":"a36c717362d06d76e7332d9c1d2744c2c5e4b4a5da6218ef7b4a299a62d23a6d","impliedFormat":99},{"version":"a61f8455fd21cec75a8288cd761f5bcc72441848841eb64aa09569e9d8929ff0","impliedFormat":99},{"version":"7539c82be2eb9b83ec335b11bb06dc35497f0b7dab8830b2c08b650d62707160","impliedFormat":99},{"version":"0eaa77f9ed4c3eb8fac011066c987b6faa7c70db95cfe9e3fb434573e095c4c8","impliedFormat":99},{"version":"466e7296272b827c55b53a7858502de733733558966e2e3a7cc78274e930210a","impliedFormat":99},{"version":"364a5c527037fdd7d494ab0a97f510d3ceda30b8a4bc598b490c135f959ff3c6","impliedFormat":99},{"version":"d26c255888cc20d5ab7397cc267ad81c8d7e97624c442a218afec00949e7316e","impliedFormat":99},{"version":"83d2dab980f2d1a2fe333f0001de8f42c831a438159d47b77c686ae405891b7f","impliedFormat":99},{"version":"ca369bcbdafc423d1a9dccd69de98044534900ff8236d2dd970b52438afb5355","impliedFormat":99},{"version":"5b90280e84e8eba347caaefc18210de3ce6ac176f5e82705a28e7f497dcc8689","impliedFormat":99},{"version":"6fc2d85e6d20a566b97001ee9a74dacc18d801bc9e9b735988119036db992932","impliedFormat":99},{"version":"d57bf30bf951ca5ce0119fcce3810bd03205377d78f08dfe6fca9d350ce73edc","impliedFormat":99},{"version":"e7878d8cd1fd0d0f1c55dcd8f5539f4c22e44993852f588dd194bd666b230727","impliedFormat":99},{"version":"638575c7a309a595c5ac3a65f03a643438fd81bf378aac93eadb84461cdd247c","impliedFormat":99},{"version":"70eebdf8cb991b4b5a1bfd9540698012cf9b2f11d265f7349e2fb7b7cb82d07b","signature":"4c60eadea5f3da0a00a59d1d46e3c9e106da50e89df04f75bd88e81c2d3cb42d"},{"version":"7f729540963914f308742abcebd1c93cf6634ca85e4024177705d811301a09ab","signature":"9033c48366f3826f3e362190c39da048e43e4fe22b27eb7b3f5550d47c41dfec"},{"version":"79381f077f52ab44bb183416cf900fc22da8947d496651d964b195ab1041483e","signature":"1a3402d44e8d98436c0ba27ce108efbfb7a84dcccc83dbbf4a33391ae2d6ccd1"},{"version":"a12227098e22d6c50531bb2b8791be622e871bb72b4c2ef6e241d9604769fc3c","signature":"98eef1779241b68f7258a31099dedb0e335ef9ae010f4a2f8747138227db72ed"},{"version":"45d193c1c63827e3bb0bd5ff03daebc56316d8dcae7e4458a522cd123952dd64","signature":"d6f054214bb489019d494a188a95d936253d720155ee8ae171a7c728ec452190"},{"version":"c06978661e13b2f691344a26d9769d89738f0901095f1e40b9d836328c39137b","signature":"f4dab491108e5772996f2e4fb909f964a3745bfb77fca4759cf2dfd5c7edac52"},{"version":"6fc8999fba7b5d35437b00886dcd9928f264d1caff408915e1e03b4ba0be9a48","signature":"2f6cbd9bfa908dfd07bbb0c7592a65992c49c6f4b7bd3a6abe0a33da0c6c55fb"},"5284d608aa39a0c7bad17b914d22d4cd3b254ec1a1c4cbf56a17b50996e5e52f",{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0671b50bb99cc7ad46e9c68fa0e7f15ba4bc898b59c31a17ea4611fab5095da","affectsGlobalScope":true,"impliedFormat":1},{"version":"d802f0e6b5188646d307f070d83512e8eb94651858de8a82d1e47f60fb6da4e2","affectsGlobalScope":true,"impliedFormat":1},{"version":"ef18cbf1d8374576e3db03ff33c2c7499845972eb0c4adf87392949709c5e160","impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"487b694c3de27ddf4ad107d4007ad304d29effccf9800c8ae23c2093638d906a","impliedFormat":1},{"version":"e525f9e67f5ddba7b5548430211cae2479070b70ef1fd93550c96c10529457bd","impliedFormat":1},{"version":"ccf4552357ce3c159ef75f0f0114e80401702228f1898bdc9402214c9499e8c0","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"17fe9131bec653b07b0a1a8b99a830216e3e43fe0ea2605be318dc31777c8bbf","impliedFormat":1},{"version":"3c8e93af4d6ce21eb4c8d005ad6dc02e7b5e6781f429d52a35290210f495a674","impliedFormat":1},{"version":"2c9875466123715464539bfd69bcaccb8ff6f3e217809428e0d7bd6323416d01","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"2472ef4c28971272a897fdb85d4155df022e1f5d9a474a526b8fc2ef598af94e","impliedFormat":1},{"version":"6c8e442ba33b07892169a14f7757321e49ab0f1032d676d321a1fdab8a67d40c","impliedFormat":1},{"version":"b41767d372275c154c7ea6c9d5449d9a741b8ce080f640155cc88ba1763e35b3","impliedFormat":1},{"version":"1cd673d367293fc5cb31cd7bf03d598eb368e4f31f39cf2b908abbaf120ab85a","impliedFormat":1},{"version":"19851a6596401ca52d42117108d35e87230fc21593df5c4d3da7108526b6111c","impliedFormat":1},{"version":"3825bf209f1662dfd039010a27747b73d0ef379f79970b1d05601ec8e8a4249f","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"40bfc70953be2617dc71979c14e9e99c5e65c940a4f1c9759ddb90b0f8ff6b1a","impliedFormat":1},{"version":"da52342062e70c77213e45107921100ba9f9b3a30dd019444cf349e5fb3470c4","impliedFormat":1},{"version":"e9ace91946385d29192766bf783b8460c7dbcbfc63284aa3c9cae6de5155c8bc","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"561c60d8bfe0fec2c08827d09ff039eca0c1f9b50ef231025e5a549655ed0298","impliedFormat":1},{"version":"1e30c045732e7db8f7a82cf90b516ebe693d2f499ce2250a977ec0d12e44a529","impliedFormat":1},{"version":"84b736594d8760f43400202859cda55607663090a43445a078963031d47e25e7","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"54c3e2371e3d016469ad959697fd257e5621e16296fa67082c2575d0bf8eced0","impliedFormat":1},{"version":"beb8233b2c220cfa0feea31fbe9218d89fa02faa81ef744be8dce5acb89bb1fd","impliedFormat":1},{"version":"78b29846349d4dfdd88bd6650cc5d2baaa67f2e89dc8a80c8e26ef7995386583","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"e38d4fdf79e1eadd92ed7844c331dbaa40f29f21541cfee4e1acff4db09cda33","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"7c10a32ae6f3962672e6869ee2c794e8055d8225ef35c91c0228e354b4e5d2d3","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"99f569b42ea7e7c5fe404b2848c0893f3e1a56e0547c1cd0f74d5dbb9a9de27e","impliedFormat":1},{"version":"f4b4faedc57701ae727d78ba4a83e466a6e3bdcbe40efbf913b17e860642897c","affectsGlobalScope":true,"impliedFormat":1},{"version":"bbcfd9cd76d92c3ee70475270156755346c9086391e1b9cb643d072e0cf576b8","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"72c1f5e0a28e473026074817561d1bc9647909cf253c8d56c41d1df8d95b85f7","impliedFormat":1},{"version":"003ec918ec442c3a4db2c36dc0c9c766977ea1c8bcc1ca7c2085868727c3d3f6","affectsGlobalScope":true,"impliedFormat":1},{"version":"938f94db8400d0b479626b9006245a833d50ce8337f391085fad4af540279567","impliedFormat":1},{"version":"c4e8e8031808b158cfb5ac5c4b38d4a26659aec4b57b6a7e2ba0a141439c208c","impliedFormat":1},{"version":"2c91d8366ff2506296191c26fd97cc1990bab3ee22576275d28b654a21261a44","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"12fb9c13f24845000d7bd9660d11587e27ef967cbd64bd9df19ae3e6aa9b52d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"289e9894a4668c61b5ffed09e196c1f0c2f87ca81efcaebdf6357cfb198dac14","impliedFormat":1},{"version":"25a1105595236f09f5bce42398be9f9ededc8d538c258579ab662d509aa3b98e","impliedFormat":1},{"version":"5078cd62dbdf91ae8b1dc90b1384dec71a9c0932d62bdafb1a811d2a8e26bef2","impliedFormat":1},{"version":"a2e2bbde231b65c53c764c12313897ffdfb6c49183dd31823ee2405f2f7b5378","impliedFormat":1},{"version":"ad1cc0ed328f3f708771272021be61ab146b32ecf2b78f3224959ff1e2cd2a5c","impliedFormat":1},{"version":"71450bbc2d82821d24ca05699a533e72758964e9852062c53b30f31c36978ab8","affectsGlobalScope":true,"impliedFormat":1},{"version":"62f572306e0b173cc5dfc4c583471151f16ef3779cf27ab96922c92ec82a3bc8","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f32444438ecb1fa4519f6ec3977d69ce0e3acfa18b803e5cd725c204501f350","impliedFormat":1},{"version":"0ab3c844f1eb5a1d94c90edc346a25eb9d3943af7a7812f061bf2d627d8afac0","impliedFormat":1},{"version":"b0a84d9348601dbc217017c0721d6064c3b1af9b392663348ba146fdae0c7afd","impliedFormat":1},{"version":"161f09445a8b4ba07f62ae54b27054e4234e7957062e34c6362300726dabd315","impliedFormat":1},{"version":"77fced47f495f4ff29bb49c52c605c5e73cd9b47d50080133783032769a9d8a6","impliedFormat":1},{"version":"e6057f9e7b0c64d4527afeeada89f313f96a53291705f069a9193c18880578cb","impliedFormat":1},{"version":"34ecb9596317c44dab586118fb62c1565d3dad98d201cd77f3e6b0dde453339c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0f5cda0282e1d18198e2887387eb2f026372ebc4e11c4e4516fef8a19ee4d514","impliedFormat":1},{"version":"e99b0e71f07128fc32583e88ccd509a1aaa9524c290efb2f48c22f9bf8ba83b1","impliedFormat":1},{"version":"76957a6d92b94b9e2852cf527fea32ad2dc0ef50f67fe2b14bd027c9ceef2d86","impliedFormat":1},{"version":"237581f5ec4620a17e791d3bb79bad3af01e27a274dbee875ac9b0721a4fe97d","affectsGlobalScope":true,"impliedFormat":1},{"version":"a8a99a5e6ed33c4a951b67cc1fd5b64fd6ad719f5747845c165ca12f6c21ba16","affectsGlobalScope":true,"impliedFormat":1},{"version":"a58a15da4c5ba3df60c910a043281256fa52d36a0fcdef9b9100c646282e88dd","impliedFormat":1},{"version":"b36beffbf8acdc3ebc58c8bb4b75574b31a2169869c70fc03f82895b93950a12","impliedFormat":1},{"version":"de263f0089aefbfd73c89562fb7254a7468b1f33b61839aafc3f035d60766cb4","impliedFormat":1},{"version":"70b57b5529051497e9f6482b76d91c0dcbb103d9ead8a0549f5bab8f65e5d031","impliedFormat":1},{"version":"e6d81b1f7ab11dc1b1ad7ad29fcfad6904419b36baf55ed5e80df48d56ac3aff","impliedFormat":1},{"version":"1013eb2e2547ad8c100aca52ef9df8c3f209edee32bb387121bb3227f7c00088","impliedFormat":1},{"version":"b6b8e3736383a1d27e2592c484a940eeb37ec4808ba9e74dd57679b2453b5865","impliedFormat":1},{"version":"d6f36b683c59ac0d68a1d5ee906e578e2f5e9a285bca80ff95ce61cdc9ddcdeb","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"125d792ec6c0c0f657d758055c494301cc5fdb327d9d9d5960b3f129aff76093","impliedFormat":1},{"version":"12aad38de6f0594dc21efa78a2c1f67bf6a7ef5a389e05417fe9945284450908","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea713aa14a670b1ea0fbaaca4fd204e645f71ca7653a834a8ec07ee889c45de6","impliedFormat":1},{"version":"b338a6e6c1d456e65a6ea78da283e3077fe8edf7202ae10490abbba5b952b05e","impliedFormat":1},{"version":"2918b7c516051c30186a1055ebcdb3580522be7190f8a2fff4100ea714c7c366","affectsGlobalScope":true,"impliedFormat":1},{"version":"ae86f30d5d10e4f75ce8dcb6e1bd3a12ecec3d071a21e8f462c5c85c678efb41","impliedFormat":1},{"version":"982efeb2573605d4e6d5df4dc7e40846bda8b9e678e058fc99522ab6165c479e","impliedFormat":1},{"version":"e03460fe72b259f6d25ad029f085e4bedc3f90477da4401d8fbc1efa9793230e","impliedFormat":1},{"version":"4286a3a6619514fca656089aee160bb6f2e77f4dd53dc5a96b26a0b4fc778055","impliedFormat":1},{"version":"d67fc92a91171632fc74f413ce42ff1aa7fbcc5a85b127101f7ec446d2039a1f","affectsGlobalScope":true,"impliedFormat":1},{"version":"d40e4631100dbc067268bce96b07d7aff7f28a541b1bfb7ef791c64a696b3d33","affectsGlobalScope":true,"impliedFormat":1},{"version":"784490137935e1e38c49b9289110e74a1622baf8a8907888dcbe9e476d7c5e44","impliedFormat":1},{"version":"42180b657831d1b8fead051698618b31da623fb71ff37f002cb9d932cfa775f1","impliedFormat":1},{"version":"4f98d6fb4fe7cbeaa04635c6eaa119d966285d4d39f0eb55b2654187b0b27446","impliedFormat":1},{"version":"e4c653466d0497d87fa9ffd00e59a95f33bc1c1722c3f5c84dab2e950c18da70","affectsGlobalScope":true,"impliedFormat":1},{"version":"e6dcc3b933e864e91d4bea94274ad69854d5d2a1311a4b0e20408a57af19e95d","impliedFormat":1},{"version":"a51f786b9f3c297668f8f322a6c58f85d84948ef69ade32069d5d63ec917221c","impliedFormat":1}],"root":[85,[117,124]],"options":{"composite":true,"declaration":true,"esModuleInterop":true,"module":1,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"strict":true,"target":99},"referencedMap":[[169,1],[170,1],[171,2],[127,3],[172,4],[173,5],[174,6],[125,7],[175,8],[176,9],[177,10],[178,11],[179,12],[180,13],[181,13],[183,7],[182,14],[184,15],[185,16],[186,17],[168,18],[126,7],[187,19],[188,20],[189,21],[222,22],[190,23],[191,24],[192,25],[193,26],[194,27],[195,28],[196,29],[197,30],[198,31],[199,32],[200,32],[201,33],[202,7],[203,7],[204,34],[206,35],[205,36],[207,37],[208,38],[209,39],[210,40],[211,41],[212,42],[213,43],[214,44],[215,45],[216,46],[217,47],[218,48],[219,49],[220,50],[221,51],[128,7],[116,52],[87,53],[96,53],[88,53],[97,53],[89,53],[90,53],[104,53],[103,53],[105,53],[106,53],[98,53],[91,53],[99,53],[92,53],[100,53],[93,53],[95,53],[102,53],[101,53],[107,53],[94,53],[108,53],[113,53],[114,53],[109,53],[86,7],[115,7],[111,53],[110,53],[112,53],[82,7],[83,7],[15,7],[13,7],[14,7],[19,7],[18,7],[2,7],[20,7],[21,7],[22,7],[23,7],[24,7],[25,7],[26,7],[27,7],[3,7],[28,7],[29,7],[4,7],[30,7],[34,7],[31,7],[32,7],[33,7],[35,7],[36,7],[37,7],[5,7],[38,7],[39,7],[40,7],[41,7],[6,7],[45,7],[42,7],[43,7],[44,7],[46,7],[7,7],[47,7],[52,7],[53,7],[48,7],[49,7],[50,7],[51,7],[8,7],[57,7],[54,7],[55,7],[56,7],[58,7],[9,7],[59,7],[60,7],[61,7],[63,7],[62,7],[64,7],[65,7],[10,7],[66,7],[67,7],[68,7],[11,7],[69,7],[70,7],[71,7],[72,7],[73,7],[1,7],[74,7],[75,7],[12,7],[79,7],[77,7],[81,7],[84,7],[76,7],[80,7],[78,7],[17,7],[16,7],[145,54],[156,55],[143,54],[157,56],[166,57],[135,58],[134,59],[165,60],[160,61],[164,62],[137,63],[153,64],[136,65],[163,66],[132,67],[133,61],[138,68],[139,7],[144,58],[142,68],[130,69],[167,70],[158,71],[148,72],[147,68],[149,73],[151,74],[146,75],[150,76],[161,60],[140,77],[141,78],[152,79],[131,56],[155,80],[154,68],[159,7],[129,7],[162,81],[85,7],[118,82],[119,7],[120,7],[124,83],[121,7],[123,84],[122,7],[117,7]],"latestChangedDtsFile":"./dist/email.types.d.ts","version":"5.8.3"} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c916b63..c793899 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,6 +15,9 @@ importers: specifier: 8.0.0 version: 8.0.0 devDependencies: + cross-env: + specifier: ^10.0.0 + version: 10.0.0 prettier: specifier: ^3.6.2 version: 3.6.2 @@ -31,6 +34,44 @@ importers: specifier: ^1.6.4 version: 1.6.4(@algolia/client-search@5.34.1)(@types/node@24.0.13)(axios@1.10.0)(lightningcss@1.30.1)(postcss@8.5.6)(search-insights@2.17.3)(typescript@5.8.3) + apps/open-archiver: + dependencies: + '@open-archiver/backend': + specifier: workspace:* + version: link:../../packages/backend + dotenv: + specifier: ^17.2.0 + version: 17.2.0 + devDependencies: + '@types/dotenv': + specifier: ^8.2.3 + version: 8.2.3 + ts-node-dev: + specifier: ^2.0.0 + version: 2.0.0(@types/node@24.0.13)(typescript@5.8.3) + + apps/open-archiver-enterprise: + dependencies: + '@open-archiver/backend': + specifier: workspace:* + version: link:../../packages/backend + '@open-archiver/enterprise': + specifier: workspace:* + version: link:../../packages/enterprise + dotenv: + specifier: ^17.2.0 + version: 17.2.0 + devDependencies: + '@types/dotenv': + specifier: ^8.2.3 + version: 8.2.3 + ts-node-dev: + specifier: ^2.0.0 + version: 2.0.0(@types/node@24.0.13)(typescript@5.8.3) + tsconfig-paths: + specifier: ^4.2.0 + version: 4.2.0 + packages/backend: dependencies: '@aws-sdk/client-s3': @@ -66,6 +107,9 @@ importers: busboy: specifier: ^1.6.0 version: 1.6.0 + cors: + specifier: ^2.8.5 + version: 2.8.5 cross-fetch: specifier: ^4.1.0 version: 4.1.0(encoding@0.1.13) @@ -147,9 +191,6 @@ importers: sqlite3: specifier: ^5.1.7 version: 5.1.7 - tsconfig-paths: - specifier: ^4.2.0 - version: 4.2.0 xlsx: specifier: https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz version: https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz @@ -160,18 +201,15 @@ importers: specifier: ^4.1.5 version: 4.1.5 devDependencies: - '@bull-board/api': - specifier: ^6.11.0 - version: 6.11.0(@bull-board/ui@6.11.0) - '@bull-board/express': - specifier: ^6.11.0 - version: 6.11.0 '@types/archiver': specifier: ^6.0.3 version: 6.0.3 '@types/busboy': specifier: ^1.5.4 version: 1.5.4 + '@types/cors': + specifier: ^2.8.19 + version: 2.8.19 '@types/express': specifier: ^5.0.3 version: 5.0.3 @@ -193,10 +231,47 @@ importers: ts-node-dev: specifier: ^2.0.0 version: 2.0.0(@types/node@24.0.13)(typescript@5.8.3) + tsconfig-paths: + specifier: ^4.2.0 + version: 4.2.0 typescript: specifier: ^5.8.3 version: 5.8.3 + packages/enterprise: + dependencies: + '@open-archiver/backend': + specifier: workspace:* + version: link:../backend + '@types/node-cron': + specifier: ^3.0.11 + version: 3.0.11 + express: + specifier: ^5.1.0 + version: 5.1.0 + jsonwebtoken: + specifier: ^9.0.2 + version: 9.0.2 + node-cron: + specifier: ^4.2.1 + version: 4.2.1 + zod: + specifier: ^4.1.5 + version: 4.1.5 + devDependencies: + '@types/express': + specifier: ^5.0.3 + version: 5.0.3 + '@types/jsonwebtoken': + specifier: ^9.0.10 + version: 9.0.10 + ts-node-dev: + specifier: ^2.0.0 + version: 2.0.0(@types/node@24.0.13)(typescript@5.8.3) + tsconfig-paths: + specifier: ^4.2.0 + version: 4.2.0 + packages/frontend: dependencies: '@iconify/svelte': @@ -208,15 +283,15 @@ importers: '@sveltejs/kit': specifier: ^2.38.1 version: 2.38.1(@sveltejs/vite-plugin-svelte@5.1.0(svelte@5.35.5)(vite@6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)))(svelte@5.35.5)(vite@6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)) - bits-ui: - specifier: ^2.8.10 - version: 2.8.10(@internationalized/date@3.8.2)(svelte@5.35.5) clsx: specifier: ^2.1.1 version: 2.1.1 d3-shape: specifier: ^3.2.0 version: 3.2.0 + date-fns: + specifier: ^4.1.0 + version: 4.1.0 html-entities: specifier: ^2.6.0 version: 2.6.0 @@ -249,8 +324,8 @@ importers: specifier: ^3.8.2 version: 3.8.2 '@lucide/svelte': - specifier: ^0.515.0 - version: 0.515.0(svelte@5.35.5) + specifier: ^0.544.0 + version: 0.544.0(svelte@5.35.5) '@sveltejs/adapter-auto': specifier: ^6.0.0 version: 6.0.1(@sveltejs/kit@2.38.1(@sveltejs/vite-plugin-svelte@5.1.0(svelte@5.35.5)(vite@6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)))(svelte@5.35.5)(vite@6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1))) @@ -269,6 +344,9 @@ importers: '@types/semver': specifier: ^7.7.1 version: 7.7.1 + bits-ui: + specifier: ^2.12.0 + version: 2.12.0(@internationalized/date@3.8.2)(@sveltejs/kit@2.38.1(@sveltejs/vite-plugin-svelte@5.1.0(svelte@5.35.5)(vite@6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)))(svelte@5.35.5)(vite@6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)))(svelte@5.35.5) dotenv: specifier: ^17.2.0 version: 17.2.0 @@ -577,17 +655,6 @@ packages: resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} engines: {node: '>=6.9.0'} - '@bull-board/api@6.11.0': - resolution: {integrity: sha512-HLbIuXIthrgeVRmN7Vec9/7ZKWx8i1xTC6Nzi//l7ua+Xu5wn6f/aZllUNVzty5ilLTHqWFkfVOwpuN91o7yxA==} - peerDependencies: - '@bull-board/ui': 6.11.0 - - '@bull-board/express@6.11.0': - resolution: {integrity: sha512-dYejXl867e3tQElKwUstxzKpkTEJYWy9Cgbw0scYx+MyTvQS7A+gCBVdhdEMGqk3LdUDAzDtvA9cQnCHLC+2Sw==} - - '@bull-board/ui@6.11.0': - resolution: {integrity: sha512-NB2mYr8l850BOLzytUyeYl8T3M9ZgPDDfT9WTOCVCDPr77kFF7iEM5jSE9AZg86bmZyWAgO/ogOUJaPSCNHY7g==} - '@casl/ability@6.7.3': resolution: {integrity: sha512-A4L28Ko+phJAsTDhRjzCOZWECQWN2jzZnJPnROWWHjJpyMq1h7h9ZqjwS2WbIUa3Z474X1ZPSgW0f1PboZGC0A==} @@ -628,6 +695,9 @@ packages: '@drizzle-team/brocli@0.10.2': resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==} + '@epic-web/invariant@1.0.0': + resolution: {integrity: sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==} + '@esbuild-kit/core-utils@3.3.2': resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} deprecated: 'Merged into tsx: https://tsx.is' @@ -1127,8 +1197,8 @@ packages: '@layerstack/utils@2.0.0-next.12': resolution: {integrity: sha512-fhGZUlSr3N+D44BYm37WKMGSEFyZBW+dwIqtGU8Cl54mR4TLQ/UwyGhdpgIHyH/x/8q1abE0fP0Dn6ZsrDE3BA==} - '@lucide/svelte@0.515.0': - resolution: {integrity: sha512-CEAyqcZmNBfYzVgaRmK2RFJP5tnbXxekRyDk0XX/eZQRfsJmkDvmQwXNX8C869BgNeryzmrRyjHhUL6g9ZOHNA==} + '@lucide/svelte@0.544.0': + resolution: {integrity: sha512-9f9O6uxng2pLB01sxNySHduJN3HTl5p0HDu4H26VR51vhZfiMzyOMe9Mhof3XAk4l813eTtl+/DYRvGyoRR+yw==} peerDependencies: svelte: ^5 @@ -1749,12 +1819,19 @@ packages: '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} + '@types/cors@2.8.19': + resolution: {integrity: sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==} + '@types/d3-path@3.1.1': resolution: {integrity: sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==} '@types/d3-shape@3.1.7': resolution: {integrity: sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==} + '@types/dotenv@8.2.3': + resolution: {integrity: sha512-g2FXjlDX/cYuc5CiQvyU/6kkbP1JtmGzh0obW50zD7OKeILVL0NSpPWLXVfqoAGQjom2/SLLx9zHq0KXvD6mbw==} + deprecated: This is a stub types definition. dotenv provides its own type definitions, so you do not need this installed. + '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} @@ -1770,6 +1847,9 @@ packages: '@types/http-errors@2.0.5': resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==} + '@types/jsonwebtoken@9.0.10': + resolution: {integrity: sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA==} + '@types/linkify-it@5.0.0': resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} @@ -1791,9 +1871,15 @@ packages: '@types/mime@1.3.5': resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + '@types/multer@2.0.0': resolution: {integrity: sha512-C3Z9v9Evij2yST3RSBktxP9STm6OdMc5uR1xF1SGr98uv8dUlAL2hqwrZ3GVB3uyMyiegnscEK6PGtYvNrjTjw==} + '@types/node-cron@3.0.11': + resolution: {integrity: sha512-0ikrnug3/IyneSHqCBeslAhlK2aBfYek1fGo4bP4QnZPmiqSGRK+Oy7ZMisLWkesffJvQ1cqAcBnJC+8+nxIAg==} + '@types/node@24.0.13': resolution: {integrity: sha512-Qm9OYVOFHFYg3wJoTSrz80hoec5Lia/dPp84do3X7dZvLikQvM1YpmvTBEdIr/e+U8HTkFjLHLnl78K/qjf+jQ==} @@ -2085,8 +2171,8 @@ packages: birpc@2.5.0: resolution: {integrity: sha512-VSWO/W6nNQdyP520F1mhf+Lc2f8pjGQOtoHHm7Ze8Go1kX7akpVIrtTa0fn+HB0QJEDVacl6aO08YE0PgXfdnQ==} - bits-ui@2.8.10: - resolution: {integrity: sha512-MOobkqapDZNrpcNmeL2g664xFmH4tZBOKBTxFmsQYMZQuybSZHQnPXy+AjM5XZEXRmCFx5+XRmo6+fC3vHh1hQ==} + bits-ui@2.12.0: + resolution: {integrity: sha512-8NF4ILNyAJlIxDXpl/akGXGBV5QmZAe+8gTfPttM5P6/+LrijumcSfFXY5cr4QkXwTmLA7H5stYpbgJf2XFJvg==} engines: {node: '>=20'} peerDependencies: '@internationalized/date': ^3.8.1 @@ -2282,6 +2368,10 @@ packages: core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + cors@2.8.5: + resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + engines: {node: '>= 0.10'} + crc-32@1.2.2: resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} engines: {node: '>=0.8'} @@ -2298,6 +2388,11 @@ packages: resolution: {integrity: sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==} engines: {node: '>=12.0.0'} + cross-env@10.0.0: + resolution: {integrity: sha512-aU8qlEK/nHYtVuN4p7UQgAwVljzMg8hB4YK5ThRqD2l/ziSnryncPNn7bMLt5cFYsKVKBh8HqLqyCoTupEUu7Q==} + engines: {node: '>=20'} + hasBin: true + cross-fetch@4.1.0: resolution: {integrity: sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==} @@ -2415,6 +2510,9 @@ packages: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} + date-fns@4.1.0: + resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} + dateformat@4.6.3: resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} @@ -2626,11 +2724,6 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - ejs@3.1.10: - resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} - engines: {node: '>=0.10.0'} - hasBin: true - emoji-regex-xs@1.0.0: resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} @@ -2786,9 +2879,6 @@ packages: file-uri-to-path@1.0.0: resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} - filelist@1.0.4: - resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} - fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -3117,11 +3207,6 @@ packages: jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - jake@10.9.2: - resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} - engines: {node: '>=10'} - hasBin: true - jiti@2.4.2: resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} hasBin: true @@ -3316,6 +3401,10 @@ packages: resolution: {integrity: sha512-RkRWjA926cTvz5rAb1BqyWkKbbjzCGchDUIKMCUvNi17j6f6j8uHGDV82Aqcqtzd+icoYpELmG3ksgGiFNNcNg==} engines: {node: '>=12'} + lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + hasBin: true + magic-string@0.30.17: resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} @@ -3535,6 +3624,10 @@ packages: node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + node-cron@4.2.1: + resolution: {integrity: sha512-lgimEHPE/QDgFlywTd8yTR61ptugX3Qer29efeyWw2rv259HtGBNn1vZVmp8lB9uo9wC0t/AT4iGqXxia+CJFg==} + engines: {node: '>=6.0.0'} + node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} @@ -3917,9 +4010,6 @@ packages: resolution: {integrity: sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==} engines: {node: '>=4'} - redis-info@3.1.0: - resolution: {integrity: sha512-ER4L9Sh/vm63DkIE0bkSjxluQlioBiBgf5w1UuldaW/3vPcecdljVDisZhmnCMvsxHNiARTTDDHGg9cGwTfrKg==} - redis-parser@3.0.0: resolution: {integrity: sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==} engines: {node: '>=4'} @@ -3992,10 +4082,14 @@ packages: peerDependencies: svelte: ^5.7.0 - runed@0.29.2: - resolution: {integrity: sha512-0cq6cA6sYGZwl/FvVqjx9YN+1xEBu9sDDyuWdDW1yWX7JF2wmvmVKfH+hVCZs+csW+P3ARH92MjI3H9QTagOQA==} + runed@0.35.1: + resolution: {integrity: sha512-2F4Q/FZzbeJTFdIS/PuOoPRSm92sA2LhzTnv6FXhCoENb3huf5+fDuNOg1LNvGOouy3u/225qxmuJvcV3IZK5Q==} peerDependencies: + '@sveltejs/kit': ^2.21.0 svelte: ^5.7.0 + peerDependenciesMeta: + '@sveltejs/kit': + optional: true rw@1.3.3: resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} @@ -4251,18 +4345,18 @@ packages: peerDependencies: svelte: ^5.0.0 + svelte-toolbelt@0.10.6: + resolution: {integrity: sha512-YWuX+RE+CnWYx09yseAe4ZVMM7e7GRFZM6OYWpBKOb++s+SQ8RBIMMe+Bs/CznBMc0QPLjr+vDBxTAkozXsFXQ==} + engines: {node: '>=18', pnpm: '>=8.7.0'} + peerDependencies: + svelte: ^5.30.2 + svelte-toolbelt@0.7.1: resolution: {integrity: sha512-HcBOcR17Vx9bjaOceUvxkY3nGmbBmCBBbuWLLEWO6jtmWH8f/QoWmbyUfQZrpDINH39en1b8mptfPQT9VKQ1xQ==} engines: {node: '>=18', pnpm: '>=8.7.0'} peerDependencies: svelte: ^5.0.0 - svelte-toolbelt@0.9.3: - resolution: {integrity: sha512-HCSWxCtVmv+c6g1ACb8LTwHVbDqLKJvHpo6J8TaqwUme2hj9ATJCpjCPNISR1OCq2Q4U1KT41if9ON0isINQZw==} - engines: {node: '>=18', pnpm: '>=8.7.0'} - peerDependencies: - svelte: ^5.30.2 - svelte@5.35.5: resolution: {integrity: sha512-KuRvI82rhh0RMz1EKsUJD96gZyHJ+h2+8zrwO8iqE/p/CmcNKvIItDUAeUePhuCDgtegDJmF8IKThbHIfmTgTA==} engines: {node: '>=18'} @@ -5267,24 +5361,6 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@bull-board/api@6.11.0(@bull-board/ui@6.11.0)': - dependencies: - '@bull-board/ui': 6.11.0 - redis-info: 3.1.0 - - '@bull-board/express@6.11.0': - dependencies: - '@bull-board/api': 6.11.0(@bull-board/ui@6.11.0) - '@bull-board/ui': 6.11.0 - ejs: 3.1.10 - express: 5.1.0 - transitivePeerDependencies: - - supports-color - - '@bull-board/ui@6.11.0': - dependencies: - '@bull-board/api': 6.11.0(@bull-board/ui@6.11.0) - '@casl/ability@6.7.3': dependencies: '@ucast/mongo2js': 1.4.0 @@ -5325,6 +5401,8 @@ snapshots: '@drizzle-team/brocli@0.10.2': {} + '@epic-web/invariant@1.0.0': {} + '@esbuild-kit/core-utils@3.3.2': dependencies: esbuild: 0.18.20 @@ -5636,7 +5714,7 @@ snapshots: d3-time-format: 4.1.0 lodash-es: 4.17.21 - '@lucide/svelte@0.515.0(svelte@5.35.5)': + '@lucide/svelte@0.544.0(svelte@5.35.5)': dependencies: svelte: 5.35.5 @@ -6324,12 +6402,20 @@ snapshots: '@types/cookie@0.6.0': {} + '@types/cors@2.8.19': + dependencies: + '@types/node': 24.0.13 + '@types/d3-path@3.1.1': {} '@types/d3-shape@3.1.7': dependencies: '@types/d3-path': 3.1.1 + '@types/dotenv@8.2.3': + dependencies: + dotenv: 17.2.0 + '@types/estree@1.0.8': {} '@types/express-serve-static-core@5.0.7': @@ -6351,6 +6437,11 @@ snapshots: '@types/http-errors@2.0.5': {} + '@types/jsonwebtoken@9.0.10': + dependencies: + '@types/ms': 2.1.0 + '@types/node': 24.0.13 + '@types/linkify-it@5.0.0': {} '@types/mailparser@3.4.6': @@ -6373,10 +6464,14 @@ snapshots: '@types/mime@1.3.5': {} + '@types/ms@2.1.0': {} + '@types/multer@2.0.0': dependencies: '@types/express': 5.0.3 + '@types/node-cron@3.0.11': {} + '@types/node@24.0.13': dependencies: undici-types: 7.8.0 @@ -6688,16 +6783,18 @@ snapshots: birpc@2.5.0: {} - bits-ui@2.8.10(@internationalized/date@3.8.2)(svelte@5.35.5): + bits-ui@2.12.0(@internationalized/date@3.8.2)(@sveltejs/kit@2.38.1(@sveltejs/vite-plugin-svelte@5.1.0(svelte@5.35.5)(vite@6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)))(svelte@5.35.5)(vite@6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)))(svelte@5.35.5): dependencies: '@floating-ui/core': 1.7.2 '@floating-ui/dom': 1.7.2 '@internationalized/date': 3.8.2 esm-env: 1.2.2 - runed: 0.29.2(svelte@5.35.5) + runed: 0.35.1(@sveltejs/kit@2.38.1(@sveltejs/vite-plugin-svelte@5.1.0(svelte@5.35.5)(vite@6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)))(svelte@5.35.5)(vite@6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)))(svelte@5.35.5) svelte: 5.35.5 - svelte-toolbelt: 0.9.3(svelte@5.35.5) + svelte-toolbelt: 0.10.6(@sveltejs/kit@2.38.1(@sveltejs/vite-plugin-svelte@5.1.0(svelte@5.35.5)(vite@6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)))(svelte@5.35.5)(vite@6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)))(svelte@5.35.5) tabbable: 6.2.0 + transitivePeerDependencies: + - '@sveltejs/kit' bl@4.1.0: dependencies: @@ -6926,6 +7023,11 @@ snapshots: core-util-is@1.0.3: {} + cors@2.8.5: + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + crc-32@1.2.2: {} crc32-stream@6.0.0: @@ -6939,6 +7041,11 @@ snapshots: dependencies: luxon: 3.7.1 + cross-env@10.0.0: + dependencies: + '@epic-web/invariant': 1.0.0 + cross-spawn: 7.0.6 + cross-fetch@4.1.0(encoding@0.1.13): dependencies: node-fetch: 2.7.0(encoding@0.1.13) @@ -7055,6 +7162,8 @@ snapshots: data-uri-to-buffer@4.0.1: {} + date-fns@4.1.0: {} + dateformat@4.6.3: {} debug@4.4.1: @@ -7166,10 +7275,6 @@ snapshots: ee-first@1.1.1: {} - ejs@3.1.10: - dependencies: - jake: 10.9.2 - emoji-regex-xs@1.0.0: {} emoji-regex@8.0.0: {} @@ -7391,10 +7496,6 @@ snapshots: file-uri-to-path@1.0.0: {} - filelist@1.0.4: - dependencies: - minimatch: 5.1.6 - fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -7790,13 +7891,6 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 - jake@10.9.2: - dependencies: - async: 3.2.6 - chalk: 4.1.2 - filelist: 1.0.4 - minimatch: 3.1.2 - jiti@2.4.2: {} jose@6.0.11: {} @@ -8001,6 +8095,8 @@ snapshots: luxon@3.7.1: {} + lz-string@1.5.0: {} + magic-string@0.30.17: dependencies: '@jridgewell/sourcemap-codec': 1.5.4 @@ -8252,6 +8348,8 @@ snapshots: node-addon-api@7.1.1: {} + node-cron@4.2.1: {} + node-domexception@1.0.0: {} node-fetch@2.7.0(encoding@0.1.13): @@ -8590,10 +8688,6 @@ snapshots: redis-errors@1.2.0: {} - redis-info@3.1.0: - dependencies: - lodash: 4.17.21 - redis-parser@3.0.0: dependencies: redis-errors: 1.2.0 @@ -8687,10 +8781,14 @@ snapshots: esm-env: 1.2.2 svelte: 5.35.5 - runed@0.29.2(svelte@5.35.5): + runed@0.35.1(@sveltejs/kit@2.38.1(@sveltejs/vite-plugin-svelte@5.1.0(svelte@5.35.5)(vite@6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)))(svelte@5.35.5)(vite@6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)))(svelte@5.35.5): dependencies: + dequal: 2.0.3 esm-env: 1.2.2 + lz-string: 1.5.0 svelte: 5.35.5 + optionalDependencies: + '@sveltejs/kit': 2.38.1(@sveltejs/vite-plugin-svelte@5.1.0(svelte@5.35.5)(vite@6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)))(svelte@5.35.5)(vite@6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)) rw@1.3.3: {} @@ -8976,6 +9074,15 @@ snapshots: runed: 0.28.0(svelte@5.35.5) svelte: 5.35.5 + svelte-toolbelt@0.10.6(@sveltejs/kit@2.38.1(@sveltejs/vite-plugin-svelte@5.1.0(svelte@5.35.5)(vite@6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)))(svelte@5.35.5)(vite@6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)))(svelte@5.35.5): + dependencies: + clsx: 2.1.1 + runed: 0.35.1(@sveltejs/kit@2.38.1(@sveltejs/vite-plugin-svelte@5.1.0(svelte@5.35.5)(vite@6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)))(svelte@5.35.5)(vite@6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)))(svelte@5.35.5) + style-to-object: 1.0.9 + svelte: 5.35.5 + transitivePeerDependencies: + - '@sveltejs/kit' + svelte-toolbelt@0.7.1(svelte@5.35.5): dependencies: clsx: 2.1.1 @@ -8983,13 +9090,6 @@ snapshots: style-to-object: 1.0.9 svelte: 5.35.5 - svelte-toolbelt@0.9.3(svelte@5.35.5): - dependencies: - clsx: 2.1.1 - runed: 0.29.2(svelte@5.35.5) - style-to-object: 1.0.9 - svelte: 5.35.5 - svelte@5.35.5: dependencies: '@ampproject/remapping': 2.3.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 2b3476a..34f4aaa 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,3 +1,4 @@ # Defines the pnpm workspace for the monorepo packages: - 'packages/*' + - 'apps/*' diff --git a/tsconfig.base.json b/tsconfig.base.json index 4a2dffd..51ad19b 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -8,6 +8,11 @@ "skipLibCheck": true, "forceConsistentCasingInFileNames": true, "resolveJsonModule": true, - "isolatedModules": true + "baseUrl": ".", + "paths": { + "@open-archiver/backend/*": ["packages/backend/src/*"], + "@open-archiver/types": ["packages/types/src/index.ts"], + "@open-archiver/enterprise/*": ["packages/enterprise/src/*"] + } } }