From fec365bb57f091b3a5bda0b4bb6da9213fb834cf Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 7 Jun 2026 17:51:53 -0400 Subject: [PATCH] Configuracion de agente de whastapp paratrabajar con la estructura propuesta --- docs/arquitectura-integracion.md | 572 +++ docs/flujo-usuario/flujo_reformix.webp | Bin 0 -> 74474 bytes docs/flujo-usuario/flujo_reformix.xml | 334 ++ mvp/Whatsapp-bot/.env.example | 3 +- mvp/Whatsapp-bot/package-lock.json | 3542 ++++++++++++++--- mvp/Whatsapp-bot/package.json | 24 +- .../src/api/api-client.service.ts | 137 + mvp/Whatsapp-bot/src/api/api.module.ts | 9 + mvp/Whatsapp-bot/src/app.module.ts | 22 +- mvp/Whatsapp-bot/src/claude/claude.service.ts | 463 +-- .../src/conversacion/conversacion.entity.ts | 33 - .../src/conversacion/conversacion.module.ts | 3 - .../src/conversacion/conversacion.service.ts | 47 +- mvp/Whatsapp-bot/src/leads/lead.entity.ts | 68 - mvp/Whatsapp-bot/src/leads/leads.module.ts | 3 - mvp/Whatsapp-bot/src/leads/leads.service.ts | 181 +- mvp/Whatsapp-bot/src/media/media.service.ts | 275 +- .../src/scheduler/scheduler.module.ts | 12 - .../src/scheduler/scheduler.service.ts | 86 - .../src/webhook/webhook-listener.ts | 85 + .../src/webhook/webhook.module.ts | 10 + .../src/whatsapp/whatsapp.module.ts | 3 +- .../src/whatsapp/whatsapp.service.ts | 402 +- mvp/Whatsapp-bot/tsconfig.build.tsbuildinfo | 1 + mvp/Whatsapp-bot/tsconfig.json | 1 - mvp/Whatsapp-bot/tsconfig.tsbuildinfo | 1 + package-lock.json | 742 ++++ package.json | 5 + 28 files changed, 5316 insertions(+), 1748 deletions(-) create mode 100644 docs/arquitectura-integracion.md create mode 100644 docs/flujo-usuario/flujo_reformix.webp create mode 100644 docs/flujo-usuario/flujo_reformix.xml create mode 100644 mvp/Whatsapp-bot/src/api/api-client.service.ts create mode 100644 mvp/Whatsapp-bot/src/api/api.module.ts delete mode 100644 mvp/Whatsapp-bot/src/conversacion/conversacion.entity.ts delete mode 100644 mvp/Whatsapp-bot/src/leads/lead.entity.ts delete mode 100644 mvp/Whatsapp-bot/src/scheduler/scheduler.module.ts delete mode 100644 mvp/Whatsapp-bot/src/scheduler/scheduler.service.ts create mode 100644 mvp/Whatsapp-bot/src/webhook/webhook-listener.ts create mode 100644 mvp/Whatsapp-bot/src/webhook/webhook.module.ts create mode 100644 mvp/Whatsapp-bot/tsconfig.build.tsbuildinfo create mode 100644 mvp/Whatsapp-bot/tsconfig.tsbuildinfo create mode 100644 package-lock.json create mode 100644 package.json diff --git a/docs/arquitectura-integracion.md b/docs/arquitectura-integracion.md new file mode 100644 index 0000000..118775d --- /dev/null +++ b/docs/arquitectura-integracion.md @@ -0,0 +1,572 @@ +# Arquitectura de Integración — Reformix + +## Índice + +1. [Visión general del sistema](#1-visión-general-del-sistema) +2. [Landing pública y captura del lead (sitio web)](#2-landing-pública-y-captura-del-lead-sitio-web) +3. [El funnel B2C — pipeline de 7 pasos](#3-el-funnel-b2c--pipeline-de-7-pasos) +4. [Elección de canal: formulario, llamada o WhatsApp](#4-elección-de-canal-formulario-llamada-o-whatsapp) +5. [Sistema de webhooks salientes (app → bot/worker)](#5-sistema-de-webhooks-salientes-app--botworker) +6. [Sistema de endpoints de bot (app ← bot/worker)](#6-sistema-de-endpoints-de-bot-app--botworker) +7. [El agente de WhatsApp (Luisa)](#7-el-agente-de-whatsapp-luisa) +8. [Workers: render de imágenes y presupuesto](#8-workers-render-de-imágenes-y-presupuesto) +9. [El presupuesto como entregable final](#9-el-presupuesto-como-entregable-final) +10. [Diagrama de flujo completo](#10-diagrama-de-flujo-completo) +11. [Estado actual vs lo que falta](#11-estado-actual-vs-lo-que-falta) +12. [Guía de conexión: cómo integrar Luisa + Workers con la app](#12-guía-de-conexión-cómo-integrar-luisa--workers-con-la-app) + +--- + +## 1. Visión general del sistema + +Reformix es un SaaS multi-tenant para empresas de reformas. Tiene **dos caras**: + +- **B2B (reformista):** el reformista se registra, configura su perfil, catálogo de materiales, precios, y pone un widget en su web. +- **B2C (cliente final):** el cliente llega a la landing del reformista, pide presupuesto, sube fotos, y recibe un presupuesto con render "antes/después" en < 7 minutos. + +### Componentes del sistema + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ SITIO WEB (Next.js) │ +│ Landing → Formulario → Elección canal → Pipeline → Entrega │ +│ ┌─────────────────────────────────────────────────────────┐ │ +│ │ App Reformix (mvp/b2c/) │ │ +│ │ - Landing pública /[slug] │ │ +│ │ - Funnel B2C /solicitud/[id]/* │ │ +│ │ - Panel reformista /panel/* │ │ +│ │ - API endpoints para bot (mvp/b2c/src/app/api/leads/) │ │ +│ │ - Motor de presupuesto (mvp/b2c/src/budget/) │ │ +│ │ - Generación de PDF (mvp/b2c/src/lib/pdf/) │ │ +│ │ - Envío de email (mvp/b2c/src/lib/email/) │ │ +│ │ - Webhooks salientes (mvp/b2c/src/lib/webhooks.ts) │ │ +│ └─────────────────────────────────────────────────────────┘ │ +└─────────────────────────────────────────────────────────────────┘ + +┌─────────────────────────────────────────────────────────────────┐ +│ AGENTE WHATSAPP (Luisa) — EXTERNO │ +│ (mvp/Whatsapp-bot/) │ +│ - Conexión WhatsApp via Baileys │ +│ - Pipeline Claude 4-capas para cualificar leads │ +│ - DEBE usar API HTTP de la app (hoy escribe directo a BD) │ +└─────────────────────────────────────────────────────────────────┘ + +┌─────────────────────────────────────────────────────────────────┐ +│ WORKERS (Render + Análisis) — NO IMPLEMENTADO AÚN │ +│ - Generación de renders "después" (Nano Banana 2 / Image 2) │ +│ - Análisis de fotos con IA │ +│ - DEBE recibir webhook PERFIL_WEBHOOK_URL y devolver vía API │ +└─────────────────────────────────────────────────────────────────┘ +``` + +--- + +## 2. Landing pública y captura del lead (sitio web) + +### Flujo de captura + +``` +Usuario llega a /[slug] (landing del reformista) + │ + ▼ + Rellena formulario Hero: + - nombre + email + teléfono + - consentimiento privacidad + contratación (RGPD obligatorio) + │ + ▼ + crearLead(slug, data) → Server Action + │ + ├── Valida con Zod schema + ├── Busca tenant por slug + ├── INSERT en leads (pipelineStage: 'form_completado', estado: 'nuevo') + └── INSERT en leadPipelineEventos (stage: 'form_completado') +``` + +### Lo que crea la base de datos + +El lead se crea con: + +- `id` (UUID) — **este es el leadId que usará todo el sistema** +- `tenantId` (UUID) — referencia al reformista +- `nombre`, `email`, `telefono` — datos del cliente +- `pipelineStage: 'form_completado'` — dónde está en el pipeline +- `estado: 'nuevo'` — estado comercial + +**Importante:** El lead NO tiene aún `tipoReforma`, `m2Suelo`, `calidadGlobal`, etc. Esos se rellenan después, cuando el cliente pasa por el canal elegido. + +--- + +## 3. El funnel B2C — pipeline de 7 pasos + +Definido por el enum `pipelineStage` en `src/db/schema.ts`: + +| # | Stage | Qué ocurre | Quién lo dispara | +| --- | ---------------------- | ---------------------------------------------- | ------------------------------------------------------- | +| 1 | `form_completado` | Lead creado con datos básicos | Server Action `crearLead()` | +| 2 | `fotos_subidas` | Cliente describe reforma + sube fotos por zona | Server Action `guardarDetallesYFotos()` o API `ingesta` | +| 3 | `prellamada_enviada` | Notificación SMS/WhatsApp previa a llamada | Orchestrator `procesarLead()` o bot | +| 4 | `llamada_completada` | Agente IA (Retell) cualifica al lead | Orchestrator (simulado) o webhook Retell (real) | +| 5 | `render_generado` | Render "después" generado por IA | Orchestrator (simulado con imagen demo) | +| 6 | `presupuesto_generado` | Presupuesto calculado con motor real | Orchestrator `procesarLead()` | +| 7 | `whatsapp_entregado` | PDF entregado al cliente | `finalizarYEntregar()` | + +### Pipeline automático (`procesarLead`) + +Cuando el cliente completa el formulario detallado (con zonas, fotos, etc.), la app ejecuta: + +```typescript +guardarDetallesYFotos(leadId, formData) + ├── Guarda fotos (momento: 'antes') en leadFotos + ├── Guarda notas en leadNotas + ├── Calcula tipoReforma, m2Suelo, calidadGlobal desde las zonas + ├── UPDATE lead (pipelineStage: 'fotos_subidas') + │ + └── procesarLead(leadId) ← ORQUESTRADOR + ├── Paso 4: Evento prellamada_enviada + ├── Paso 5: Llamada Retell (real si configurado, sino simulada con transcript ficticio) + ├── Paso 6a: Render demo (imagen estática, NO IA real) + ├── Paso 6b: Presupuesto REAL con motor (computeBudget) + ├── UPDATE lead (pipelineStage: 'presupuesto_generado') + └── Paso 7: Si envio=automatico → lead pasa a 'whatsapp_entregado' +``` + +--- + +## 4. Elección de canal: formulario, llamada o WhatsApp + +Después de crear el lead, el cliente llega a `/solicitud/[id]/` donde elige cómo continuar: + +### Canal formulario (`/solicitud/[id]/formulario`) + +El cliente rellena un formulario multi-zona: tipo de reforma, m², calidad, notas, sube fotos. Esto dispara `guardarDetallesYFotos()` que ejecuta el pipeline completo (incluyendo llamada simulada, render demo, presupuesto real). + +### Canal llamada (`/solicitud/[id]/llamada`) + +El cliente pide que le llamen (ahora o programado). Se le envía un email con enlace para subir fotos después. Dispara `pedirLlamada()` que inicia llamada Retell saliente (si configurado). El cliente recibe la llamada del agente IA, y después puede subir fotos via el enlace del email. + +### Canal WhatsApp (`/solicitud/[id]/whatsapp`) + +El cliente elige continuar por WhatsApp. La app dispara `iniciarWhatsapp()` que: + +```typescript +iniciarWhatsapp(leadId) + └── POST a WHATSAPP_START_WEBHOOK_URL + Payload: { leadId, telefono, nombre, empresa } + → El bot de WhatsApp (Luisa) recibe esto y empieza la conversación +``` + +**Este es el punto de entrada del bot de WhatsApp.** El bot recibe el `leadId` y a partir de ahí debe escribir los datos extraídos de la conversación usando los endpoints de la app. + +--- + +## 5. Sistema de webhooks salientes (app → bot/worker) + +La app envía 3 señales HTTP a sistemas externos. Todas son **best-effort** (nunca lanzan error, devuelven boolean). + +### 5.1 WHATSAPP_START_WEBHOOK_URL — Arranque de conversación WhatsApp + +**Disparado por:** `iniciarWhatsapp()` (cuando el lead elige canal WhatsApp) + +```json +POST {url} +{ + "leadId": "uuid", + "telefono": "+34...", + "nombre": "...", + "empresa": "Reformas Ejemplo" +} +``` + +**La app espera que:** el bot de WhatsApp reciba esto y comience la conversación con el lead. El bot debe usar el `leadId` para escribir los datos vía los endpoints de la app. + +### 5.2 PERFIL_WEBHOOK_URL — Perfil completo para generar renders + +**Disparado por:** + +- `señalarPerfilCompleto()` en `guardarDetallesYFotos()` (formulario) +- `señalarPerfilCompleto()` en `subirFotos()` (fotos por email) +- API `ingesta` con flag `perfilCompleto: true` (bot/worker) + +```json +POST {url} +{ + "leadId": "uuid", + "cliente": { "nombre": "...", "telefono": "...", "email": "...", "provincia": "..." }, + "reforma": { "tipo": "cocina", "m2Suelo": 12, "calidad": "media", + "estructural": false, "urgencia": "media", "presupuestoTarget": 800000 }, + "empresa": { "tenantId": "uuid", "nombre": "Reformas Ejemplo" }, + "zonas": [ + { "zona": "cocina", + "notas": ["encimera de cuarzo"], + "fotos": { "antes": ["data:image/..."], "despues": [] } } + ] +} +``` + +**La app espera que:** el worker externo genere renders "después" a partir de las fotos "antes", y los devuelva haciendo POST al endpoint `/api/leads/:id/ingesta` con `momento: "despues"` y opcionalmente `finalizar: true`. + +### 5.3 WHATSAPP_WEBHOOK_URL — Entrega del PDF + +**Disparado por:** `finalizarYEntregar()` (cuando el PDF está listo) + +```json +POST {url} +{ + "leadId": "uuid", + "telefono": "+34...", + "nombre": "...", + "empresa": "Reformas Ejemplo", + "pdfBase64": "JVBERi0xLj...", + "filename": "presupuesto-nombre.pdf" +} +``` + +**La app espera que:** el bot de WhatsApp reciba esto y envíe el PDF al cliente por WhatsApp. + +--- + +## 6. Sistema de endpoints de bot (app ← bot/worker) + +La app expone 5 endpoints bajo `/api/leads/:id/`. Todos requieren `Authorization: Bearer `. + +| Endpoint | Qué hace | Tabla que escribe | +| ---------------------------------- | ---------------------------------------------------- | ---------------------------------------------------------------------- | +| `POST /api/leads/:id/conversacion` | Guarda un turno del chat | `conversacion_whatsapp` | +| `POST /api/leads/:id/perfil` | Actualiza datos extraídos del lead | `leads` (campos: espacio, rangoM2, estilo, tipoReforma, m2Suelo, etc.) | +| `POST /api/leads/:id/calificacion` | Upsert de calificación | `lead_calificacion` | +| `POST /api/leads/:id/intento` | Registra intento de contacto | `intentos_contacto` | +| `POST /api/leads/:id/ingesta` | Sube fotos/notas + flags de perfilCompleto/finalizar | `lead_fotos`, `lead_notas` | + +### Flujo de uso típico del bot + +``` +1. Bot recibe WHATSAPP_START_WEBHOOK → leadId, telefono, nombre +2. Bot inicia conversación por WhatsApp +3. Por cada interacción: + a. Bot llama POST /conversacion (guarda el turno) + b. Bot llama POST /perfil (actualiza datos extraídos: espacio, m2, estilo, etc.) + c. Cuando tiene datos suficientes, llama POST /calificacion + d. Cuando pide fotos, el cliente las envía, bot las guarda vía POST /ingesta +4. Cuando el perfil está completo: + - Bot marca perfilCompleto: true en POST /ingesta + - Esto dispara PERFIL_WEBHOOK_URL → worker genera renders + - Worker devuelve renders vía POST /ingesta con momento: "despues" + finalizar: true + - finalizar:true dispara WHATSAPP_WEBHOOK_URL → bot recibe PDF y lo envía al cliente +``` + +--- + +## 7. El agente de WhatsApp (Luisa) + +### Estado actual (código en `mvp/Whatsapp-bot/`) + +El bot de Luisa es un servicio NestJS independiente que: + +1. **Se conecta a WhatsApp** usando la librería Baileys (WebSocket no oficial) +2. **Orquesta un pipeline Claude de 4 capas:** + - Capa 1 — Clasificador (Haiku): extrae intención y valor del mensaje + - Capa 2 — Validador: valida contra valores permitidos + - Capa 3 — Generador (Sonnet): produce el borrador de respuesta + - Capa 4 — Reglas (Haiku): corrige tono e identidad +3. **Mantiene una máquina de estados** de 7 pasos para cualificar al lead: + `nuevo → apertura → espacio → tamano → estilo → urgencia → presupuesto → fin` +4. **Tiene un scheduler** que cada 5 minutos busca leads "nuevos" en BD y les envía el mensaje de apertura +5. **Soporta multimedia:** transcripción de audio (Gemini), análisis de imágenes (Claude Vision) + +### Problema actual + +El bot **escribe directamente a Postgres** usando TypeORM con sus propias entidades (`Lead` y `Conversacion`), en lugar de usar los endpoints HTTP de la app. Esto causa: + +- Incompatibilidad de IDs: el bot usa `id` numérico autoincremental, la app usa UUID +- Tablas duplicadas: el bot tiene su propia tabla `conversacion`, la app tiene `conversacion_whatsapp` +- Enums desalineados: el bot usa `urgente/medio_plazo/frio`, la app usa `alta/media/baja` +- `synchronize: true` en TypeORM puede alterar el schema de la BD real +- El scheduler crea leads desde cero, pero según la arquitectura los leads ya existen (creados desde el form web) + +### Lo que DEBE hacer el bot + +1. **No crear leads.** Recibirlos vía `WHATSAPP_START_WEBHOOK_URL` con el `leadId` UUID. +2. **No escribir a BD directamente.** Usar los 5 endpoints HTTP (`conversacion`, `perfil`, `calificacion`, `intento`, `ingesta`). +3. **No tener scheduler propio.** El arranque lo hace la app vía webhook. +4. **Usar los enums correctos** según la app (`alta/media/baja`, `cocina/bano/salon/comedor/integral/otro`, etc.). +5. **No mantener estado propio.** El estado de la conversación (`botStep`) se persiste vía `/perfil`. + +### Dónde está el código + +| Elemento | Ruta | +| ----------------------- | ---------------------------- | +| Código del bot (NestJS) | `mvp/Whatsapp-bot/src/` | +| Prompts de Luisa | `mvp/Whatsapp-bot/prompts/` | +| Configuración (.env) | `mvp/Whatsapp-bot/.env` | +| Documentación del bot | `mvp/Whatsapp-bot/README.md` | + +--- + +## 8. Workers: render de imágenes y presupuesto + +### Estado actual + +Los workers **no están implementados**. Existe: + +- La **tabla `worker_jobs`** en la BD (`mvp/b2c/src/db/schema.ts:515-537`) con tipos: `analisis_fotos`, `render`, `presupuesto_ia` +- El **webhook `PERFIL_WEBHOOK_URL`** listo para enviar el perfil completo al worker +- El **endpoint `ingesta`** listo para recibir los renders de vuelta +- **Renders simulados** con imágenes estáticas en `procesarLead()` (usa `/despues.webp`, `/despues-bano.webp`, etc.) + +### Lo que DEBE hacer el worker de renders + +``` +1. Recibe POST a PERFIL_WEBHOOK_URL con: + { leadId, cliente, reforma, empresa, zonas: [{ zona, notas, fotos: { antes: [...], despues: [] } }] } + +2. Para cada zona: + a. Toma las fotos "antes" del cliente + b. Genera render "después" usando modelo de IA (Nano Banana 2, Image 2, Stable Diffusion, etc.) + c. Convierte el render a data URI base64 + +3. Devuelve los renders haciendo POST a /api/leads/:id/ingesta: + { items: [{ tipo: "foto", zona: "cocina", momento: "despues", imagen: "data:image/..." }], + finalizar: true } + (finalizar:true dispara la construcción del PDF + email + señal WhatsApp) +``` + +### Stack planeado para renders + +Según la documentación: + +- **Nano Banana 2** o **Image 2** (Google Gemini) — modelos image-to-image +- Alternativa: **Replicate SDXL + ControlNet** (~0,02€/imagen) +- Alternativa: **DALL-E 3 HD** (~0,08€/imagen) + +### Dónde implementar los workers + +Los workers son servicios externos independientes. Pueden ser: + +- **n8n workflows** (orquestación visual) +- **Un worker Node.js/Python** que escucha webhooks y se comunica con APIs de IA +- **Cloud Functions** (Vercel, Cloudflare Workers, AWS Lambda) + +No hay código de workers en este repositorio. El repositorio solo define el contrato (webhooks + API). + +--- + +## 9. El presupuesto como entregable final + +El entregable final es un **PDF de presupuesto** que incluye: + +1. **Cabecera** con datos del reformista (logo, nombre, CIF, dirección) +2. **Datos del cliente** y tipo de reforma +3. **Tabla de presupuesto** con partidas calculadas por el motor: + - Demolición, impermeabilización, alicatado, fontanería, electricidad, carpintería, mano de obra, extras, licencia +4. **Render "después"** generado por IA +5. **Galería por zona** con fotos "antes" y "después" +6. **Footer legal** + +### El motor de presupuesto (`mvp/b2c/src/budget/`) + +**Es real, no simulado.** Calcula presupuestos basado en: + +- Catálogo de materiales del reformista (precios por calidad: básica/media/premium) +- Configuración de precios (factores por zona, mano de obra, extras fijos) +- Inputs del lead: tipo de reforma, m², calidad, urgencia, estructural, provincia + +### Flujo de entrega + +``` +finalizarYEntregar(leadId) + ├── construirPresupuestoPdf(leadId) + │ ├── Carga lead completo + fotos + notas + catálogo + config + │ ├── Renderiza PDF con @react-pdf + │ └── Devuelve buffer PDF + filename + │ + ├── UPDATE lead (pdfUrl) + │ + ├── enviarPresupuestoEmail() → SMTP (opcional) + │ + ├── notificarFlujoWhatsapp() → WHATSAPP_WEBHOOK_URL + │ └── Bot recibe pdfBase64 y lo envía por WhatsApp + │ + └── UPDATE lead (pipelineStage: 'whatsapp_entregado', estado: 'presupuesto_enviado') +``` + +--- + +## 10. Diagrama de flujo completo + +``` + LANDING PÚBLICA /[slug] + │ + crearLead() + │ + ▼ + ┌───────────────────────┐ + │ Lead CREADO │ + │ pipelineStage: │ + │ form_completado │ + │ estado: nuevo │ + └───────────┬───────────┘ + │ + ▼ + ┌────────────────────────┐ + │ ELECCIÓN DE CANAL │ + │ /solicitud/[id]/ │ + └──────┬────────┬───────┘ + │ │ + ┌────────┘ └────────┐ + ▼ ▼ + ┌──────────────┐ ┌──────────────┐ + │ FORMULARIO │ │ WHATSAPP │ + │ + fotos │ │ │ + └──────┬───────┘ │ iniciar │ + │ │ Whatsapp() │ + │ └──────┬───────┘ + │ guardarDetalles │ + │ YFotos() │ POST WHATSAPP + │ │ START WEBHOOK + ├── Guarda fotos │ + ├── Guarda notas ▼ + │ ┌──────────────┐ + └── procesarLead() │ BOT WHATSAPP │ + │ │ (Luisa) │ + │ │ │ + ├── Simula │ Inicia │ + │ llamada │ conversación │ + │ │ │ + ├── Render │ Por cada msg: │ + │ demo │ POST /perfil │ + │ (img fija)│ POST /conv. │ + │ │ │ + ├── Presup. │ Cuando listo: │ + │ REAL │ POST /ingesta │ + │ │ perfilCompleto│ + │ │ │ + └── Estado └──────┬────────┘ + intermedio │ + │ │ + ▼ │ + ┌────────────────────┘ + │ PERFIL_WEBHOOK_URL + ▼ + ┌──────────────────┐ + │ WORKER RENDER │ + │ Genera imágenes │ + │ "después" │ + └────────┬─────────┘ + │ POST /api/leads/:id/ingesta + │ { items: [{tipo:"foto", momento:"despues",...}], + │ finalizar: true } + ▼ + ┌──────────────────────────────┐ + │ finalizarYEntregar() │ + │ - Construye PDF │ + │ - Envía email │ + │ - WHATSAPP_WEBHOOK_URL │ + └────────┬─────────────────────┘ + │ + ▼ + ┌──────────────────┐ + │ BOT WHATSAPP │ + │ Recibe pdfBase64│ + │ y lo envía al │ + │ cliente │ + └──────────────────┘ +``` + +--- + +## 11. Estado actual vs lo que falta + +| Componente | Estado | Notas | +| ---------------------------- | ------------------------------- | -------------------------------------------------- | +| Landing pública / formulario | ✅ Implementado | Multi-zona, fotos, notas | +| Motor de presupuesto | ✅ Implementado | Real, con catálogo y config | +| PDF | ✅ Implementado | Con @react-pdf | +| Email | ✅ Implementado | SMTP, best-effort | +| Endpoints API del bot | ✅ Implementado y en producción | 5 endpoints en `dv3.com.es` | +| Webhooks salientes | ✅ Implementado | 3 webhooks listos | +| Autenticación bot | ✅ Implementado | Bearer token con FUNNEL_API_KEY | +| Bot WhatsApp (Luisa) | ❌ Por reconectar | Hoy escribe directo a BD, debe usar APIs HTTP | +| Workers render | ❌ No implementado | Existe solo tabla y webhook, sin worker real | +| Renders IA | ❌ Simulado | Usa imágenes estáticas `/despues.webp` | +| Llamada Retell real | ⚠️ Parcial | Código listo, depende de config de vars de entorno | +| n8n workflows | ❌ No existe | Mencionado en docs pero sin implementar | + +--- + +## 12. Guía de conexión: cómo integrar Luisa + Workers con la app + +### 12.1 Lo que necesita el bot de WhatsApp (Luisa) + +El bot DEBE: + +1. **Recibir leads por webhook** (`WHATSAPP_START_WEBHOOK_URL`), no buscarlos en BD. +2. **Usar los endpoints HTTP de la app** en lugar de TypeORM: + - `POST /api/leads/:id/conversacion` — para cada turno del chat + - `POST /api/leads/:id/perfil` — para actualizar datos extraídos + - `POST /api/leads/:id/calificacion` — para calificar al lead + - `POST /api/leads/:id/intento` — para registrar intentos + - `POST /api/leads/:id/ingesta` — para subir fotos y marcar perfil completo +3. **Usar los enums correctos** de la app: + - `urgencia`: `alta`, `media`, `baja` + - `tipoReforma`: `cocina`, `bano`, `salon`, `comedor`, `integral`, `otro` + - `calidadGlobal`: `basica`, `media`, `premium` + - `estadoWa`: `sin_enviar`, `enviado`, `entregado`, `leido`, `fallido` + - `canalOrigen`: `formulario_web`, `whatsapp`, `llamada`, `referido`, `anuncio` +4. **Trabajar con UUIDs** (el `leadId` que recibe del webhook). +5. **No tener scheduler interno** — la app controla cuándo arrancar. + +### 12.2 Lo que necesita el worker de renders + +El worker DEBE: + +1. **Escuchar en la URL que configures como `PERFIL_WEBHOOK_URL`**. +2. **Recibir el payload** con `leadId`, `cliente`, `reforma`, `zonas` (con fotos "antes"). +3. **Generar renders** para cada zona usando un modelo image-to-image. +4. **Devolver los renders** llamando a `POST /api/leads/:id/ingesta` con: + ```json + { + "items": [ + { + "tipo": "foto", + "zona": "cocina", + "momento": "despues", + "imagen": "data:image/..." + } + ], + "finalizar": true + } + ``` +5. **Autenticarse** con `Authorization: Bearer `. + +### 12.3 Variables de entorno necesarias en la app + +``` +# Para que el bot pueda escribir en la BD: +FUNNEL_API_KEY= + +# URLs donde escuchan el bot y el worker: +WHATSAPP_START_WEBHOOK_URL=https://url-del-bot/whatsapp-start +PERFIL_WEBHOOK_URL=https://url-del-worker/perfil-completo +WHATSAPP_WEBHOOK_URL=https://url-del-bot/whatsapp-pdf +``` + +### 12.4 Secuencia de integración recomendada + +**Paso 1 — Reconectar Luisa a los endpoints HTTP (prioridad alta)** + +- Eliminar TypeORM y las entidades propias del bot +- Implementar llamadas HTTP a los 5 endpoints de la app +- Ajustar enums y tipos para que coincidan con la app +- Eliminar el scheduler interno +- Configurar las 3 URLs de webhook en la app + +**Paso 2 — Implementar worker de renders (prioridad media)** + +- Crear servicio que escuche `PERFIL_WEBHOOK_URL` +- Elegir modelo de IA para image-to-image +- Integrar con el endpoint `ingesta` para devolver resultados + +**Paso 3 — Conectar llamada Retell real (prioridad baja)** + +- Configurar variables de entorno de Retell +- El bot de WhatsApp o el formulario pueden complementar la llamada diff --git a/docs/flujo-usuario/flujo_reformix.webp b/docs/flujo-usuario/flujo_reformix.webp new file mode 100644 index 0000000000000000000000000000000000000000..8c04267a99eefc1b7ee8d177bf82d0f6498a265f GIT binary patch literal 74474 zcmaI71AJUvyFNUz)!0sB+qSJn4H~PB?KF0p#*N)rjqS#1Y}=e~s`q`)InV!_`OVIn znKgSa+_!T1|TCQraS-!dJ6y>_<4k6 z1^{gB-aDyEiIQmR=#s#!0l+}dUk~HA&JMp@|9S-Vx|#jmcZ%U(d;I@@2xn^M{1(*Z z4D_OK0$m(5CJay;!{T?F`e)nZcborb+x5M}dr%+cpKT{~RWVT86x61+_($91AMLje zPCxrcg8J~=+I;wVt)GvdvqLnq(@+Ebg$2C`0L}nafD}OV=lntMK@a;}0D$`%0Dy@7 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 k91`cBE$+`HaBi}kubiagzyP% + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mvp/Whatsapp-bot/.env.example b/mvp/Whatsapp-bot/.env.example index 871ceb1..a1e2715 100644 --- a/mvp/Whatsapp-bot/.env.example +++ b/mvp/Whatsapp-bot/.env.example @@ -4,5 +4,6 @@ MODEL_CLASIFICADOR=anthropic/claude-haiku-4-5 MODEL_REGLAS=anthropic/claude-haiku-4-5 MODEL_TRANSCRIPCION=google/gemini-2.5-flash MODEL= -DATABASE_URL= ALLOWED_NUMBER= +API_BASE_URL=http://localhost:3000 +FUNNEL_API_KEY= diff --git a/mvp/Whatsapp-bot/package-lock.json b/mvp/Whatsapp-bot/package-lock.json index 6cf43e7..3caa451 100644 --- a/mvp/Whatsapp-bot/package-lock.json +++ b/mvp/Whatsapp-bot/package-lock.json @@ -12,19 +12,14 @@ "@nestjs/common": "^10.0.0", "@nestjs/core": "^10.0.0", "@nestjs/platform-express": "^10.0.0", - "@nestjs/schedule": "^4.0.0", - "@nestjs/typeorm": "^10.0.0", "@whiskeysockets/baileys": "^7.0.0-rc10", "axios": "^1.7.0", "baileys-antiban": "^3.9.0", "dotenv": "^16.4.0", - "form-data": "^4.0.1", - "pg": "^8.12.0", "pino": "^9.3.2", "qrcode-terminal": "^0.12.0", "reflect-metadata": "^0.2.0", - "rxjs": "^7.8.1", - "typeorm": "^0.3.20" + "rxjs": "^7.8.1" }, "devDependencies": { "@nestjs/cli": "^10.0.0", @@ -219,6 +214,174 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/compat-data": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz", + "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-validator-identifier": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", @@ -229,6 +392,364 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-validator-option": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/types": "^7.29.7" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.29.7.tgz", + "integrity": "sha512-zGYcYfq/WmZ4V+kBIXQon9dSSc8ircGZqw9ZaNhhGj9nZkeBu1jHLBDQqYYi5WA9uawvA2sIMbry2nCFhf5Djg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.29.7.tgz", + "integrity": "sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.29.7.tgz", + "integrity": "sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz", + "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/@borewit/text-codec": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/@borewit/text-codec/-/text-codec-0.2.2.tgz", @@ -498,10 +1019,21 @@ "dev": true, "license": "BSD-3-Clause" }, + "node_modules/@img/colour": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", + "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + } + }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, "license": "ISC", "dependencies": { "string-width": "^5.1.2", @@ -519,6 +1051,7 @@ "version": "6.2.2", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -531,6 +1064,7 @@ "version": "6.2.3", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -543,12 +1077,14 @@ "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, "license": "MIT" }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", @@ -566,6 +1102,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^6.2.2" @@ -581,6 +1118,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", @@ -594,6 +1132,514 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz", + "integrity": "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.4.1.tgz", + "integrity": "sha512-v3bhyxUh9Hgmo5p6hAOXe14/R3ZxZDOsvHleh4B07z3m/x4/ngPUXEm9XwK4sF4u+f+P2ORb0Ge+MgpaqRMVDA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/types": "30.4.1", + "@types/node": "*", + "chalk": "^4.1.2", + "jest-message-util": "30.4.1", + "jest-util": "30.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/core": { + "version": "30.4.2", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.4.2.tgz", + "integrity": "sha512-TZJA6cPJUFxoWhxaLo8t0VX/MZX2wPWr0uIDvLSHIvN4gu9h02vSzqI2kBADG1ExqQlC+cY09xKMSreivvrChQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/console": "30.4.1", + "@jest/pattern": "30.4.0", + "@jest/reporters": "30.4.1", + "@jest/test-result": "30.4.1", + "@jest/transform": "30.4.1", + "@jest/types": "30.4.1", + "@types/node": "*", + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "exit-x": "^0.2.2", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.11", + "jest-changed-files": "30.4.1", + "jest-config": "30.4.2", + "jest-haste-map": "30.4.1", + "jest-message-util": "30.4.1", + "jest-regex-util": "30.4.0", + "jest-resolve": "30.4.1", + "jest-resolve-dependencies": "30.4.2", + "jest-runner": "30.4.2", + "jest-runtime": "30.4.2", + "jest-snapshot": "30.4.1", + "jest-util": "30.4.1", + "jest-validate": "30.4.1", + "jest-watcher": "30.4.1", + "pretty-format": "30.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/diff-sequences": { + "version": "30.4.0", + "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.4.0.tgz", + "integrity": "sha512-zOpzlfUs45l6u7jm39qr87JCHUDsaeCtvL+kQe/Vn9jSnRB4/5IPXISm0h9I1vZW/o00Kn4UTJ2MOlhnUGwv3g==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/environment": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.4.1.tgz", + "integrity": "sha512-AK9yNRqgKxiabqMoe4oW+3/TSSeV8vkdC7BGaxZdU0AFXfOpofTLqdru2GXKZghP3sdgwE9XXpnVwfZ8JnFV4w==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/fake-timers": "30.4.1", + "@jest/types": "30.4.1", + "@types/node": "*", + "jest-mock": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.4.1.tgz", + "integrity": "sha512-ginrj6TMgh2GshLUGCjO94Ptx9HhdZA/I6A9iUfyeLKFtdAjnKzHDgzgP9HYQgbxM1lbXScQ2eUBz2lGeVDPWA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "expect": "30.4.1", + "jest-snapshot": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.4.1.tgz", + "integrity": "sha512-ZBn5CglH8fBsQsvs4VWNzD4aWfUYks+IdOOQU3MEK71ol/BcVm+P+rtb1KpiFBpSWSCE27uOahyyf1vfqOVbcQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/get-type": "30.1.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.4.1.tgz", + "integrity": "sha512-iW5umdmfPeWzehrVhugFQZqCchSCud5S1l2YT0O9ZhjRR0ExclANDZkiSBwzqtnlOn0J1JXvO+HZ6rkuyOVOgQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/types": "30.4.1", + "@sinonjs/fake-timers": "^15.4.0", + "@types/node": "*", + "jest-message-util": "30.4.1", + "jest-mock": "30.4.1", + "jest-util": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/get-type": { + "version": "30.1.0", + "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz", + "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.4.1.tgz", + "integrity": "sha512-ZbuY4cmXC8DkxYjfvT2DbcHWL2T6vmsMhXCDcmTB2T0y0gaezBI77ufq5ZAIdcRkYZ7NEQEDg1xFeKbxUJ5v5Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/environment": "30.4.1", + "@jest/expect": "30.4.1", + "@jest/types": "30.4.1", + "jest-mock": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/pattern": { + "version": "30.4.0", + "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.4.0.tgz", + "integrity": "sha512-RAWn3+f9u8BsHijKJ71uHcFp6vmyEt6VvoWXkl6hKF3qVIuWNmudVjg12DlBPGup/frIl5UcUlH5HfEuvHpEXg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "*", + "jest-regex-util": "30.4.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.4.1.tgz", + "integrity": "sha512-/SnkPCzEQpUaBH81kjdEdDdo2WZl5hxw+BmLDGWjRkm8o7XlhjwsU36cqwe5PGBE5WYpBvDzRSdXx9rbGuJtNA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "30.4.1", + "@jest/test-result": "30.4.1", + "@jest/transform": "30.4.1", + "@jest/types": "30.4.1", + "@jridgewell/trace-mapping": "^0.3.25", + "@types/node": "*", + "chalk": "^4.1.2", + "collect-v8-coverage": "^1.0.2", + "exit-x": "^0.2.2", + "glob": "^10.5.0", + "graceful-fs": "^4.2.11", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^5.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "30.4.1", + "jest-util": "30.4.1", + "jest-worker": "30.4.1", + "slash": "^3.0.0", + "string-length": "^4.0.2", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@jest/schemas": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.4.1.tgz", + "integrity": "sha512-i6b4qw5qnP8c5FEeBJg/uZQ4ddrkN6Ca8qISJh0pr7a5hfn3h3v5x60BEbOC7OYAGZNMs1LfFLwnW2CuK8F57Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/snapshot-utils": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.4.1.tgz", + "integrity": "sha512-ObY4ljvQ95mt6iwKtVLetR/4yXiAgl3H4nJxhztr0MTjrN97TwDYrnCp/kF60Ec9HdhkWTHSu+Hg05aXfngpOA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/types": "30.4.1", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "natural-compare": "^1.4.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-30.0.1.tgz", + "integrity": "sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "callsites": "^3.1.0", + "graceful-fs": "^4.2.11" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.4.1.tgz", + "integrity": "sha512-/ZG7pgEiOmmWkN9TplKbOu4id2N5lh7FHwRwlkgBVAzGdRH+OkkQ8wX/kIxg4zmd3ZQvAL1RwL2yWsvNYYECTw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/console": "30.4.1", + "@jest/types": "30.4.1", + "@types/istanbul-lib-coverage": "^2.0.6", + "collect-v8-coverage": "^1.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.4.1.tgz", + "integrity": "sha512-PeYE+4td5rKjoRPxztObrXU+H8hsjZfxKMXOcmrr34JerSyB/ROOxbbicz8B7A5j9R9VayDnVPvBmedqCsFCdw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/test-result": "30.4.1", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.4.1.tgz", + "integrity": "sha512-Wz0LyktlTvRefoymh+n64hQ84KNXsRGcwdoZ8CSa0Ea+fgYcHZlnk+hDP7v2MS7il2bQ5uTEIxf4/NNfhMN4KQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/core": "^7.27.4", + "@jest/types": "30.4.1", + "@jridgewell/trace-mapping": "^0.3.25", + "babel-plugin-istanbul": "^7.0.1", + "chalk": "^4.1.2", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.4.1", + "jest-regex-util": "30.4.0", + "jest-util": "30.4.1", + "pirates": "^4.0.7", + "slash": "^3.0.0", + "write-file-atomic": "^5.0.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/types": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.4.1.tgz", + "integrity": "sha512-f1x/vJXIfjOlEmejYpbkbgw1gOqpPECwMvMEtBqe47j7H2Hg8h8w3o3ikhSXq3MI15kg+oQ0exWO0uCtTNJLoQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/pattern": "30.4.0", + "@jest/schemas": "30.4.1", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", @@ -605,6 +1651,18 @@ "@jridgewell/trace-mapping": "^0.3.24" } }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", @@ -837,20 +1895,6 @@ "@nestjs/core": "^10.0.0" } }, - "node_modules/@nestjs/schedule": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@nestjs/schedule/-/schedule-4.1.2.tgz", - "integrity": "sha512-hCTQ1lNjIA5EHxeu8VvQu2Ed2DBLS1GSC6uKPYlBiQe6LL9a7zfE9iVSK+zuK8E2odsApteEBmfAQchc8Hx0Gg==", - "license": "MIT", - "dependencies": { - "cron": "3.2.1", - "uuid": "11.0.3" - }, - "peerDependencies": { - "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", - "@nestjs/core": "^8.0.0 || ^9.0.0 || ^10.0.0" - } - }, "node_modules/@nestjs/schematics": { "version": "10.2.3", "resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-10.2.3.tgz", @@ -903,36 +1947,6 @@ } } }, - "node_modules/@nestjs/typeorm": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/@nestjs/typeorm/-/typeorm-10.0.2.tgz", - "integrity": "sha512-H738bJyydK4SQkRCTeh1aFBxoO1E9xdL/HaLGThwrqN95os5mEyAtK7BLADOS+vldP4jDZ2VQPLj4epWwRqCeQ==", - "license": "MIT", - "dependencies": { - "uuid": "9.0.1" - }, - "peerDependencies": { - "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", - "@nestjs/core": "^8.0.0 || ^9.0.0 || ^10.0.0", - "reflect-metadata": "^0.1.13 || ^0.2.0", - "rxjs": "^7.2.0", - "typeorm": "^0.3.0" - } - }, - "node_modules/@nestjs/typeorm/node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -999,6 +2013,7 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, "license": "MIT", "optional": true, "engines": { @@ -1081,11 +2096,35 @@ "integrity": "sha512-oOAWABowe8EAbMyWKM0tYDKi8Yaox52D+HWZhAIJqQXbqe0xI/GV7FhLWqlEKreMkfDjshR5FKgi3mnle0h6Eg==", "license": "BSD-3-Clause" }, - "node_modules/@sqltools/formatter": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@sqltools/formatter/-/formatter-1.2.5.tgz", - "integrity": "sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==", - "license": "MIT" + "node_modules/@sinclair/typebox": { + "version": "0.34.49", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.49.tgz", + "integrity": "sha512-brySQQs7Jtn0joV8Xh9ZV/hZb9Ozb0pmazDIASBkYKCjXrXU3mpcFahmK/z4YDhGkQvP9mWJbVyahdtU5wQA+A==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "15.4.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-15.4.0.tgz", + "integrity": "sha512-DsG+8/LscQIQg68J6Ef3dv10u6nVyetYn923s3/sus5eaGfTo1of5WMZSLf0UJc9KDuKPilPH0UDJCjvNbDNCA==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "@sinonjs/commons": "^3.0.1" + } }, "node_modules/@tokenizer/inflate": { "version": "0.2.7", @@ -1139,6 +2178,55 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/types": "^7.28.2" + } + }, "node_modules/@types/body-parser": { "version": "1.19.6", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", @@ -1222,6 +2310,36 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -1229,12 +2347,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/luxon": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.4.2.tgz", - "integrity": "sha512-TifLZlFudklWlMBfhubvgqTXRzLDI5pCbGa4P8a3wPyUQSW+1xQ5eDsreP9DWHX3tjq1ke96uYG/nwundroWcA==", - "license": "MIT" - }, "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", @@ -1298,6 +2410,33 @@ "@types/node": "*" } }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@types/yargs": { + "version": "17.0.35", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", + "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "7.18.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", @@ -1875,6 +3014,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -1895,15 +3035,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/ansis": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansis/-/ansis-4.3.1.tgz", - "integrity": "sha512-BJ8/l4R5LRE7hW9WdSuGYrLSHi2ynxeFpDFbH0K/CgNeY/tyhk+vO6TYxXC5r5CpUhNVX310xzPsN/H9lCdfOA==", - "license": "ISC", - "engines": { - "node": ">=14" - } - }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -1931,15 +3062,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/app-root-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz", - "integrity": "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==", - "license": "MIT", - "engines": { - "node": ">= 6.0.0" - } - }, "node_modules/append-field": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", @@ -2007,21 +3129,6 @@ "node": ">=8.0.0" } }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "license": "MIT", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/axios": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/axios/-/axios-1.16.1.tgz", @@ -2034,6 +3141,110 @@ "proxy-from-env": "^2.1.0" } }, + "node_modules/babel-jest": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.4.1.tgz", + "integrity": "sha512-fATAbM8piYxkiXQp3RBXmZHxZVNJZAVXXfyeyCN2Tida3+qJ8ea9UxhiJ2y4fLO90ZImKt6k9FlcH2+rLkJGhw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/transform": "30.4.1", + "@types/babel__core": "^7.20.5", + "babel-plugin-istanbul": "^7.0.1", + "babel-preset-jest": "30.4.0", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "slash": "^3.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.11.0 || ^8.0.0-0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.1.tgz", + "integrity": "sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "workspaces": [ + "test/babel-8" + ], + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-instrument": "^6.0.2", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "30.4.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.4.0.tgz", + "integrity": "sha512-9EdtWM/sSfXLOGLwSn+GS6pIXyBnL07/8gyJlwFXjWy4DxMOyItqyUT29d4lQiS380EZwYlX7/At4PgBS+m2aA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/babel__core": "^7.20.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", + "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" + }, + "peerDependencies": { + "@babel/core": "^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/babel-preset-jest": { + "version": "30.4.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-30.4.0.tgz", + "integrity": "sha512-lBY4jxsNmCnSiu7kquw8ZC9F4+XLMOKypT3RnNHPvU2Kpd4W0xaPuLr5ZkRyOsvLYAY4yaW1ZwTW4xB7NIiZzg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-plugin-jest-hoist": "30.4.0", + "babel-preset-current-node-syntax": "^1.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.11.0 || ^8.0.0-beta.1" + } + }, "node_modules/baileys-antiban": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/baileys-antiban/-/baileys-antiban-3.9.0.tgz", @@ -2098,12 +3309,14 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, "license": "MIT" }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, "funding": [ { "type": "github", @@ -2201,6 +3414,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.1.tgz", "integrity": "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==", + "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -2266,6 +3480,17 @@ "node": ">= 6" } }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, "node_modules/buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", @@ -2334,6 +3559,7 @@ "version": "1.0.9", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", + "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -2387,6 +3613,17 @@ "node": ">=6" } }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, "node_modules/caniuse-lite": { "version": "1.0.30001793", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001793.tgz", @@ -2424,6 +3661,17 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + } + }, "node_modules/chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", @@ -2466,6 +3714,31 @@ "node": ">=6.0" } }, + "node_modules/ci-info": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.2.0.tgz", + "integrity": "sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -2522,7 +3795,9 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, "license": "ISC", + "peer": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -2536,7 +3811,9 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -2559,6 +3836,26 @@ "node": ">=0.8" } }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz", + "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -2665,6 +3962,14 @@ "node": ">= 0.6" } }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/cookie": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", @@ -2734,20 +4039,11 @@ "dev": true, "license": "MIT" }, - "node_modules/cron": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/cron/-/cron-3.2.1.tgz", - "integrity": "sha512-w2n5l49GMmmkBFEsH9FIDhjZ1n1QgTMOCMGuQtOXs5veNiosZmso6bQGuqOJSYAXXrG84WQFVneNk+Yt0Ua9iw==", - "license": "MIT", - "dependencies": { - "@types/luxon": "~3.4.0", - "luxon": "~3.5.0" - } - }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -2764,12 +4060,6 @@ "integrity": "sha512-axn2UMEnkhyDUPWOwVKBMVIzSQy2ejH2xRGy1wq81dqRwApXfIzfbE3hIX0ZRFBIihf/KDqK158DLwESu4AK1w==", "license": "MIT" }, - "node_modules/dayjs": { - "version": "1.11.21", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.21.tgz", - "integrity": "sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==", - "license": "MIT" - }, "node_modules/debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", @@ -2791,7 +4081,9 @@ "version": "1.7.2", "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.2.tgz", "integrity": "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==", + "dev": true, "license": "MIT", + "peer": true, "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, @@ -2835,6 +4127,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", @@ -2876,6 +4169,27 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, "node_modules/diff": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", @@ -2942,6 +4256,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, "license": "MIT" }, "node_modules/ee-first": { @@ -2957,10 +4272,25 @@ "dev": true, "license": "ISC" }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, "license": "MIT" }, "node_modules/encodeurl": { @@ -3052,6 +4382,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -3371,6 +4702,69 @@ "node": ">=0.8.x" } }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/exit-x": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/exit-x/-/exit-x-0.2.2.tgz", + "integrity": "sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-30.4.1.tgz", + "integrity": "sha512-PMARsyh/JtqC20HoGqlFcIlQAyqUtW4PlI1rup1uhYJtKuwAjbvWi3GQMAn+STdHum/dk8xrKfUM1+5SAwpolA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/expect-utils": "30.4.1", + "@jest/get-type": "30.1.0", + "jest-matcher-utils": "30.4.1", + "jest-message-util": "30.4.1", + "jest-mock": "30.4.1", + "jest-util": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, "node_modules/express": { "version": "4.22.1", "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", @@ -3514,6 +4908,17 @@ "reusify": "^1.0.4" } }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "bser": "2.1.1" + } + }, "node_modules/fflate": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.3.tgz", @@ -3692,25 +5097,11 @@ } } }, - "node_modules/for-each": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", - "license": "MIT", - "dependencies": { - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/foreground-child": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, "license": "ISC", "dependencies": { "cross-spawn": "^7.0.6", @@ -3863,11 +5254,24 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, "license": "ISC", + "peer": true, "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -3896,6 +5300,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/get-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", @@ -3909,6 +5324,20 @@ "node": ">= 0.4" } }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/glob": { "version": "10.4.5", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", @@ -4069,6 +5498,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" @@ -4134,6 +5564,14 @@ "integrity": "sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg==", "license": "MIT" }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/http-errors": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", @@ -4189,6 +5627,17 @@ "node": ">= 6" } }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": ">=10.17.0" + } + }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -4248,6 +5697,27 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -4341,18 +5811,6 @@ "node": ">=8" } }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -4367,11 +5825,23 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -4415,19 +5885,18 @@ "node": ">=8" } }, - "node_modules/is-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, "license": "MIT", - "dependencies": { - "which-typed-array": "^1.1.16" - }, + "peer": true, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-unicode-supported": { @@ -4443,18 +5912,89 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "license": "MIT" - }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, "license": "ISC" }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.23", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/iterare": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/iterare/-/iterare-1.2.1.tgz", @@ -4468,6 +6008,7 @@ "version": "3.4.3", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" @@ -4479,6 +6020,701 @@ "@pkgjs/parseargs": "^0.11.0" } }, + "node_modules/jest": { + "version": "30.4.2", + "resolved": "https://registry.npmjs.org/jest/-/jest-30.4.2.tgz", + "integrity": "sha512-Yi1jqNC/Oq0N4hBgNH/YvBpP1P57QqundgytzYqy3yqAa7NZPNjSoi4SGbRAXDMdBzNE6xBCi5U7RgfrvMEUVQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/core": "30.4.2", + "@jest/types": "30.4.1", + "import-local": "^3.2.0", + "jest-cli": "30.4.2" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-30.4.1.tgz", + "integrity": "sha512-IuctmYrxi21iOSOaIXpJWalHyPAsVv0GeBHKDn8C1CA4W5htHn7INL+wdnL4Bo0+olEndvAFkmb++tIQJG+vvg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "execa": "^5.1.1", + "jest-util": "30.4.1", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-circus": { + "version": "30.4.2", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.4.2.tgz", + "integrity": "sha512-rvHH7VlY6LgbJXJTQ87GW62g1FntOtbhh0zT+v04kC+pgL6aBKyYINXxWukCpj3dcIBMw5/XUbtDS9dU9JTXeQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/environment": "30.4.1", + "@jest/expect": "30.4.1", + "@jest/test-result": "30.4.1", + "@jest/types": "30.4.1", + "@types/node": "*", + "chalk": "^4.1.2", + "co": "^4.6.0", + "dedent": "^1.6.0", + "is-generator-fn": "^2.1.0", + "jest-each": "30.4.1", + "jest-matcher-utils": "30.4.1", + "jest-message-util": "30.4.1", + "jest-runtime": "30.4.2", + "jest-snapshot": "30.4.1", + "jest-util": "30.4.1", + "p-limit": "^3.1.0", + "pretty-format": "30.4.1", + "pure-rand": "^7.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.6" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-cli": { + "version": "30.4.2", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.4.2.tgz", + "integrity": "sha512-jfA2ocvVHMXS2QijrJ0d31ektP+d/W0T5RpcTX2Pq+3sVqHlsXVCM2+FmwpL+bdY8OfHpIg9xMxLF17Zg0U49Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/core": "30.4.2", + "@jest/test-result": "30.4.1", + "@jest/types": "30.4.1", + "chalk": "^4.1.2", + "exit-x": "^0.2.2", + "import-local": "^3.2.0", + "jest-config": "30.4.2", + "jest-util": "30.4.1", + "jest-validate": "30.4.1", + "yargs": "^17.7.2" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "30.4.2", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.4.2.tgz", + "integrity": "sha512-rNHAShJQqQwFNoL0hbf3BphSBOWnpOUAKvidLS/AjNVLPfoj5mSf4jQMfW3cYOs6hXeZC7nF7mDHaBnbxELOzg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/core": "^7.27.4", + "@jest/get-type": "30.1.0", + "@jest/pattern": "30.4.0", + "@jest/test-sequencer": "30.4.1", + "@jest/types": "30.4.1", + "babel-jest": "30.4.1", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "deepmerge": "^4.3.1", + "glob": "^10.5.0", + "graceful-fs": "^4.2.11", + "jest-circus": "30.4.2", + "jest-docblock": "30.4.0", + "jest-environment-node": "30.4.1", + "jest-regex-util": "30.4.0", + "jest-resolve": "30.4.1", + "jest-runner": "30.4.2", + "jest-util": "30.4.1", + "jest-validate": "30.4.1", + "parse-json": "^5.2.0", + "pretty-format": "30.4.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "esbuild-register": ">=3.4.0", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "esbuild-register": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jest-diff": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.4.1.tgz", + "integrity": "sha512-CRpFK0RtLriVDGcPPAnR6HMVI8bSR2jnUIgralhauzYQZIb4RH9AtEInTuQr65LmmGggGcRT6HIASxwqsVsmlA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/diff-sequences": "30.4.0", + "@jest/get-type": "30.1.0", + "chalk": "^4.1.2", + "pretty-format": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "30.4.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-30.4.0.tgz", + "integrity": "sha512-ZPMabUZCx5MpbZ2eBYSvZ0J8fvo3dR9oM+eeUpb3aKNQFuS2tu3Duw1TNlMoP8k3WQgKGJuhcMFvwcVuq6T7oA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "detect-newline": "^3.1.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-each": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.4.1.tgz", + "integrity": "sha512-/8MJbH6fuj48TstjrMf+u/pd06Qezz5xOXvZA6442heNOWr8bdeoGZX2d9fCn028CoMgYmroH9//zky5GfyYmA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/get-type": "30.1.0", + "@jest/types": "30.4.1", + "chalk": "^4.1.2", + "jest-util": "30.4.1", + "pretty-format": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.4.1.tgz", + "integrity": "sha512-4FZYVOk85hz2AyT6BbarKy9u37g6DbrDyCdFhsnDdXqyrueYQvB+0zO4f/kqLCRD0BsPRXPMNJeQwihKZV8naw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/environment": "30.4.1", + "@jest/fake-timers": "30.4.1", + "@jest/types": "30.4.1", + "@types/node": "*", + "jest-mock": "30.4.1", + "jest-util": "30.4.1", + "jest-validate": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.4.1.tgz", + "integrity": "sha512-rFrcONd8jeFsyw+Z9CrScJgglRf2+NFmNam8dKu7n+SoHqNYT47mn0DdEcVUZJpvh7Iz6/si7f7yUH7GJHVgnw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/types": "30.4.1", + "@types/node": "*", + "anymatch": "^3.1.3", + "fb-watchman": "^2.0.2", + "graceful-fs": "^4.2.11", + "jest-regex-util": "30.4.0", + "jest-util": "30.4.1", + "jest-worker": "30.4.1", + "picomatch": "^4.0.3", + "walker": "^1.0.8" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.3" + } + }, + "node_modules/jest-haste-map/node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/jest-leak-detector": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.4.1.tgz", + "integrity": "sha512-IpmyiioeHxiWDhesHnUFmOxcTzwCwKpgACgWajtAP+nYQXiY7DakTxB6Bx9JFiRMljr0AX1PvnQdaU1KFoz6NQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/get-type": "30.1.0", + "pretty-format": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.4.1.tgz", + "integrity": "sha512-zvYfX5CaeEkFrrLS9suWe9rvJrm9J1Iv3ua8kIBv9GEPzcnsfBf0bob37la7s67fs0nlBC3EuvkOLnXQKxtx4A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/get-type": "30.1.0", + "chalk": "^4.1.2", + "jest-diff": "30.4.1", + "pretty-format": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.4.1.tgz", + "integrity": "sha512-kwCKIvq0MCW1HzLoGola9Te6JUdzgV0loyKJ3Qghrkz9i5/RRIHsL95BMQc2HBBhlBKC4j22K9p11TGHH8RBpQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@jest/types": "30.4.1", + "@types/stack-utils": "^2.0.3", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "jest-util": "30.4.1", + "picomatch": "^4.0.3", + "pretty-format": "30.4.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.6" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-message-util/node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/jest-mock": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.4.1.tgz", + "integrity": "sha512-/i8SVb8/NSB7RfNi8gfqu8gxLV23KaL5EpAttyb9iz8qWRIqXRLflycz/32wXsYkOnaUlx8NAKnJYtpsmXUmfw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/types": "30.4.1", + "@types/node": "*", + "jest-util": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "30.4.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.4.0.tgz", + "integrity": "sha512-mWlvLviKIgIQ8VCuM1xRdD0TWp3zlzionlmDBjuXVBs+VkmXq6FgW9T4Emr7oGz/Rk6feDCGyiugolcQEyp3mg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.4.1.tgz", + "integrity": "sha512-Zry8Yq/yJcNAZ7dJ5F2heic8AheXvbFZ7XI5V+h28nrYZ7Qoyy4dItq8OodjnYD270mvX+ZudmrNV9cysqhW5Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.4.1", + "jest-pnp-resolver": "^1.2.3", + "jest-util": "30.4.1", + "jest-validate": "30.4.1", + "slash": "^3.0.0", + "unrs-resolver": "^1.7.11" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "30.4.2", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.4.2.tgz", + "integrity": "sha512-gDiVh1I+GxYzz9oXlyw+1wv6VOYX1WYxMOfjsA3iGKePV2oxmbHhwxfkALxNxYy1ciw6APWwkW2zZONwP97aEQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "jest-regex-util": "30.4.0", + "jest-snapshot": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-runner": { + "version": "30.4.2", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.4.2.tgz", + "integrity": "sha512-2dw0PslVYXxffXGpLo+Ejad+KcI1Qkjn7f4X4619gf21oCUmL+SPfjqIa/losUem3yEOvfNZe/F1HWUcNpODcg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/console": "30.4.1", + "@jest/environment": "30.4.1", + "@jest/test-result": "30.4.1", + "@jest/transform": "30.4.1", + "@jest/types": "30.4.1", + "@types/node": "*", + "chalk": "^4.1.2", + "emittery": "^0.13.1", + "exit-x": "^0.2.2", + "graceful-fs": "^4.2.11", + "jest-docblock": "30.4.0", + "jest-environment-node": "30.4.1", + "jest-haste-map": "30.4.1", + "jest-leak-detector": "30.4.1", + "jest-message-util": "30.4.1", + "jest-resolve": "30.4.1", + "jest-runtime": "30.4.2", + "jest-util": "30.4.1", + "jest-watcher": "30.4.1", + "jest-worker": "30.4.1", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "30.4.2", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.4.2.tgz", + "integrity": "sha512-3/5e8iPz2k/VLqlr8DgTftYyLUv8Su3FkCAO2/Od81UsUTpSxOrS6O5x5KkoQwyUjmpYyDJKeyAvg2T2nvpNkQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/environment": "30.4.1", + "@jest/fake-timers": "30.4.1", + "@jest/globals": "30.4.1", + "@jest/source-map": "30.0.1", + "@jest/test-result": "30.4.1", + "@jest/transform": "30.4.1", + "@jest/types": "30.4.1", + "@types/node": "*", + "chalk": "^4.1.2", + "cjs-module-lexer": "^2.1.0", + "collect-v8-coverage": "^1.0.2", + "glob": "^10.5.0", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.4.1", + "jest-message-util": "30.4.1", + "jest-mock": "30.4.1", + "jest-regex-util": "30.4.0", + "jest-resolve": "30.4.1", + "jest-snapshot": "30.4.1", + "jest-util": "30.4.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-runtime/node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jest-snapshot": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.4.1.tgz", + "integrity": "sha512-tEOkkfOMppUyeiHwjZswOQ3lcnoTnws/q5FnGIaeIh/jmoU0ZlgMYRR8sTlTj+nNGCoJ0RDq6SfxGxCsyMTPmw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/core": "^7.27.4", + "@babel/generator": "^7.27.5", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.27.1", + "@babel/types": "^7.27.3", + "@jest/expect-utils": "30.4.1", + "@jest/get-type": "30.1.0", + "@jest/snapshot-utils": "30.4.1", + "@jest/transform": "30.4.1", + "@jest/types": "30.4.1", + "babel-preset-current-node-syntax": "^1.2.0", + "chalk": "^4.1.2", + "expect": "30.4.1", + "graceful-fs": "^4.2.11", + "jest-diff": "30.4.1", + "jest-matcher-utils": "30.4.1", + "jest-message-util": "30.4.1", + "jest-util": "30.4.1", + "pretty-format": "30.4.1", + "semver": "^7.7.2", + "synckit": "^0.11.8" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-util": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.4.1.tgz", + "integrity": "sha512-vjQb1sACEiv13DKJMDToJpzVW0joCsIQrmbg0fi7CyOOt+g9jTuQl2A216pWRBYhOVt53XbL/2LbMKg1BECWOw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/types": "30.4.1", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.3" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-util/node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/jest-validate": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.4.1.tgz", + "integrity": "sha512-PDWi4SOwLnwqNDfHZjOcsEFyZ4fc/2W2gVL3DEoyqnB6jCQMLRtfBong8s6omIw3lI0HWOus12xfnFmQtjW3fw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/get-type": "30.1.0", + "@jest/types": "30.4.1", + "camelcase": "^6.3.0", + "chalk": "^4.1.2", + "leven": "^3.1.0", + "pretty-format": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.4.1.tgz", + "integrity": "sha512-/l9UonmvCwjHH7d2h3iAwIloLc1H0S8mJZ/LNK3i86hqwPAz8otUJjP9MfYtz9Tt77Su5FD2xGjZn8d31IZHlw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/test-result": "30.4.1", + "@jest/types": "30.4.1", + "@types/node": "*", + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2", + "emittery": "^0.13.1", + "jest-util": "30.4.1", + "string-length": "^4.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-worker": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.4.1.tgz", + "integrity": "sha512-SHynN/q/QD++iNyvMdy+WMmbCGk8jIsNcRxycXbWubSOhvo6T+j2afcfUSl+3hYsiBebOTo0cT7c2H7CXugu1g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "*", + "@ungap/structured-clone": "^1.3.0", + "jest-util": "30.4.1", + "merge-stream": "^2.0.0", + "supports-color": "^8.1.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -4509,6 +6745,20 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -4579,6 +6829,17 @@ "@keyv/serialize": "^1.1.1" } }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -4683,13 +6944,15 @@ "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", "license": "Apache-2.0" }, - "node_modules/luxon": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.5.0.tgz", - "integrity": "sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==", - "license": "MIT", - "engines": { - "node": ">=12" + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "yallist": "^3.0.2" } }, "node_modules/magic-string": { @@ -4705,6 +6968,23 @@ "node": ">=12" } }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -4712,6 +6992,17 @@ "dev": true, "license": "ISC" }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -4852,6 +7143,7 @@ "version": "9.0.9", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^2.0.2" @@ -4876,6 +7168,7 @@ "version": "7.1.3", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "dev": true, "license": "BlueOak-1.0.0", "engines": { "node": ">=16 || 14 >=14.17" @@ -4990,6 +7283,23 @@ "dev": true, "license": "ISC" }, + "node_modules/napi-postinstall": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", + "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "napi-postinstall": "lib/cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/napi-postinstall" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -5050,6 +7360,14 @@ } } }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/node-releases": { "version": "2.0.46", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.46.tgz", @@ -5070,6 +7388,20 @@ "node": ">=0.10.0" } }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -5250,10 +7582,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, "node_modules/package-json-from-dist": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, "license": "BlueOak-1.0.0" }, "node_modules/parent-module": { @@ -5321,6 +7665,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -5330,6 +7675,7 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^10.2.0", @@ -5346,6 +7692,7 @@ "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, "license": "ISC" }, "node_modules/path-to-regexp": { @@ -5364,95 +7711,6 @@ "node": ">=8" } }, - "node_modules/pg": { - "version": "8.21.0", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.21.0.tgz", - "integrity": "sha512-AUP1EYJuHraQGsVoCQVIcM7TEJVGtDzxWtGFZd8rds9d+CCXlU5Js1rYgfLNvxy9iJrpHjGrRjoi/3BT9fRyiA==", - "license": "MIT", - "dependencies": { - "pg-connection-string": "^2.13.0", - "pg-pool": "^3.14.0", - "pg-protocol": "^1.14.0", - "pg-types": "2.2.0", - "pgpass": "1.0.5" - }, - "engines": { - "node": ">= 16.0.0" - }, - "optionalDependencies": { - "pg-cloudflare": "^1.4.0" - }, - "peerDependencies": { - "pg-native": ">=3.0.1" - }, - "peerDependenciesMeta": { - "pg-native": { - "optional": true - } - } - }, - "node_modules/pg-cloudflare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.4.0.tgz", - "integrity": "sha512-Vo7z/6rrQYxpNRylp4Tlob2elzbh+N/MOQbxFVWCxS7oEx6jF53GTJFxK2WWpKuBRkmiin4Mt+xofFDjx09R0A==", - "license": "MIT", - "optional": true - }, - "node_modules/pg-connection-string": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.13.0.tgz", - "integrity": "sha512-EMnU9E2fSULdsbErBbMaXJvFeD9B4+nPcM3f+4lsiCR0BHLPrLVjv3DbyM2hgQQviKJaTWIRRTjKjWlHg3p2ig==", - "license": "MIT" - }, - "node_modules/pg-int8": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", - "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", - "license": "ISC", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/pg-pool": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.14.0.tgz", - "integrity": "sha512-gKtPkFdQPU3DksooVLi9LsjZxrsBUZIpa+7aVx+LV5pNh0KzP4Zleud2po+ConrxbuXGBJ6Hfer6hdgpIBpBaw==", - "license": "MIT", - "peerDependencies": { - "pg": ">=8.0" - } - }, - "node_modules/pg-protocol": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.14.0.tgz", - "integrity": "sha512-n5taZ1kO3s9ngDTVxsEznOqCyToTgz0FLuPq0B33COy5pPpuWJpY3/2oRBVETuOgzdqRXfWpM9HIhp2LBBT1BA==", - "license": "MIT" - }, - "node_modules/pg-types": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", - "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", - "license": "MIT", - "dependencies": { - "pg-int8": "1.0.1", - "postgres-array": "~2.0.0", - "postgres-bytea": "~1.0.0", - "postgres-date": "~1.0.4", - "postgres-interval": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pgpass": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", - "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", - "license": "MIT", - "dependencies": { - "split2": "^4.1.0" - } - }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -5510,6 +7768,91 @@ "integrity": "sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==", "license": "MIT" }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/pluralize": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", @@ -5520,54 +7863,6 @@ "node": ">=4" } }, - "node_modules/possible-typed-array-names": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/postgres-array": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", - "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/postgres-bytea": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.1.tgz", - "integrity": "sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postgres-date": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", - "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postgres-interval": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", - "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", - "license": "MIT", - "dependencies": { - "xtend": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -5607,6 +7902,37 @@ "node": ">=6.0.0" } }, + "node_modules/pretty-format": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.4.1.tgz", + "integrity": "sha512-K6KiKMHTL4jjX4u3Kir2EW07nRfcqVTXIImx50wbjHQTcZPgg+gjVeNTIT3l3L1Rd4UefxfogquC9J37SoFyyw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/schemas": "30.4.1", + "ansi-styles": "^5.2.0", + "react-is-18": "npm:react-is@^18.3.1", + "react-is-19": "npm:react-is@^19.2.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/process-warning": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.0.0.tgz", @@ -5679,6 +8005,24 @@ "node": ">=6" } }, + "node_modules/pure-rand": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-7.0.1.tgz", + "integrity": "sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT", + "peer": true + }, "node_modules/qified": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/qified/-/qified-0.10.1.tgz", @@ -5771,6 +8115,24 @@ "node": ">= 0.8" } }, + "node_modules/react-is-18": { + "name": "react-is", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/react-is-19": { + "name": "react-is", + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.7.tgz", + "integrity": "sha512-kZFnouyVv7eP/Phmrlo9FK+zcAdriZJvzxXHF1Sl1P377WSGe2G/JxVolhTrB/jeV47lKImhNUsijjHAAbcl/A==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -5840,7 +8202,9 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -5855,6 +8219,31 @@ "node": ">=0.10.0" } }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -6095,7 +8484,6 @@ "version": "7.8.1", "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.1.tgz", "integrity": "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==", - "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -6162,6 +8550,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", @@ -6181,30 +8570,56 @@ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "license": "ISC" }, - "node_modules/sha.js": { - "version": "2.4.12", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", - "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", - "license": "(MIT AND BSD-3-Clause)", + "node_modules/sharp": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", + "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "peer": true, "dependencies": { - "inherits": "^2.0.4", - "safe-buffer": "^5.2.1", - "to-buffer": "^1.2.0" - }, - "bin": { - "sha.js": "bin.js" + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.2", + "semver": "^7.7.3" }, "engines": { - "node": ">= 0.10" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.5", + "@img/sharp-darwin-x64": "0.34.5", + "@img/sharp-libvips-darwin-arm64": "1.2.4", + "@img/sharp-libvips-darwin-x64": "1.2.4", + "@img/sharp-libvips-linux-arm": "1.2.4", + "@img/sharp-libvips-linux-arm64": "1.2.4", + "@img/sharp-libvips-linux-ppc64": "1.2.4", + "@img/sharp-libvips-linux-riscv64": "1.2.4", + "@img/sharp-libvips-linux-s390x": "1.2.4", + "@img/sharp-libvips-linux-x64": "1.2.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", + "@img/sharp-libvips-linuxmusl-x64": "1.2.4", + "@img/sharp-linux-arm": "0.34.5", + "@img/sharp-linux-arm64": "0.34.5", + "@img/sharp-linux-ppc64": "0.34.5", + "@img/sharp-linux-riscv64": "0.34.5", + "@img/sharp-linux-s390x": "0.34.5", + "@img/sharp-linux-x64": "0.34.5", + "@img/sharp-linuxmusl-arm64": "0.34.5", + "@img/sharp-linuxmusl-x64": "0.34.5", + "@img/sharp-wasm32": "0.34.5", + "@img/sharp-win32-arm64": "0.34.5", + "@img/sharp-win32-ia32": "0.34.5", + "@img/sharp-win32-x64": "0.34.5" } }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -6217,6 +8632,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -6298,6 +8714,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, "license": "ISC", "engines": { "node": ">=14" @@ -6382,6 +8799,29 @@ "node": ">= 8" } }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/split2": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", @@ -6391,20 +8831,37 @@ "node": ">= 10.x" } }, - "node_modules/sql-highlight": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/sql-highlight/-/sql-highlight-6.1.0.tgz", - "integrity": "sha512-ed7OK4e9ywpE7pgRMkMQmZDPKSVdm0oX5IEtZiKnFucSF0zu6c80GZBe38UqHuVhTWJ9xsKgSMjCG2bml86KvA==", - "funding": [ - "https://github.com/scriptcoded/sql-highlight?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/scriptcoded" - } - ], + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, "license": "MIT", + "peer": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, "engines": { - "node": ">=14" + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" } }, "node_modules/statuses": { @@ -6433,10 +8890,26 @@ "safe-buffer": "~5.2.0" } }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -6452,6 +8925,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -6466,6 +8940,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -6479,6 +8954,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -6487,6 +8963,28 @@ "node": ">=8" } }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -6727,6 +9225,71 @@ "source-map": "^0.6.0" } }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", + "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/test-exclude/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/test-exclude/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -6763,19 +9326,13 @@ "node": ">=0.6.0" } }, - "node_modules/to-buffer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.2.tgz", - "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==", - "license": "MIT", - "dependencies": { - "isarray": "^2.0.5", - "safe-buffer": "^5.2.1", - "typed-array-buffer": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - } + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true }, "node_modules/to-regex-range": { "version": "5.0.1", @@ -7016,6 +9573,17 @@ "node": ">= 0.8.0" } }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, "node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -7051,186 +9619,12 @@ "node": ">= 0.6" } }, - "node_modules/typed-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", "license": "MIT" }, - "node_modules/typeorm": { - "version": "0.3.30", - "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.3.30.tgz", - "integrity": "sha512-8T35PzjefOdqc2ZR9mwLQj0pUGp6lQhMbK2EvVMwJVJWlaoHm0v/Q6dThNOZkFchD+0yMg8gwjKM28ePiLSXSQ==", - "license": "MIT", - "dependencies": { - "@sqltools/formatter": "^1.2.5", - "ansis": "^4.2.0", - "app-root-path": "^3.1.0", - "buffer": "^6.0.3", - "dayjs": "^1.11.20", - "debug": "^4.4.3", - "dedent": "^1.7.2", - "dotenv": "^16.6.1", - "glob": "^10.5.0", - "reflect-metadata": "^0.2.2", - "sha.js": "^2.4.12", - "sql-highlight": "^6.1.0", - "tslib": "^2.8.1", - "uuid": "^11.1.1", - "yargs": "^17.7.2" - }, - "bin": { - "typeorm": "cli.js", - "typeorm-ts-node-commonjs": "cli-ts-node-commonjs.js", - "typeorm-ts-node-esm": "cli-ts-node-esm.js" - }, - "engines": { - "node": ">=16.13.0" - }, - "funding": { - "url": "https://opencollective.com/typeorm" - }, - "peerDependencies": { - "@google-cloud/spanner": "^5.18.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", - "@sap/hana-client": "^2.14.22", - "better-sqlite3": "^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0 || ^12.0.0", - "ioredis": "^5.0.4", - "mongodb": "^5.8.0 || ^6.0.0", - "mssql": "^9.1.1 || ^10.0.0 || ^11.0.0 || ^12.0.0", - "mysql2": "^2.2.5 || ^3.0.1", - "oracledb": "^6.3.0", - "pg": "^8.5.1", - "pg-native": "^3.0.0", - "pg-query-stream": "^4.0.0", - "redis": "^3.1.1 || ^4.0.0 || ^5.0.14", - "sql.js": "^1.4.0", - "sqlite3": "^5.0.3", - "ts-node": "^10.7.0", - "typeorm-aurora-data-api-driver": "^2.0.0 || ^3.0.0" - }, - "peerDependenciesMeta": { - "@google-cloud/spanner": { - "optional": true - }, - "@sap/hana-client": { - "optional": true - }, - "better-sqlite3": { - "optional": true - }, - "ioredis": { - "optional": true - }, - "mongodb": { - "optional": true - }, - "mssql": { - "optional": true - }, - "mysql2": { - "optional": true - }, - "oracledb": { - "optional": true - }, - "pg": { - "optional": true - }, - "pg-native": { - "optional": true - }, - "pg-query-stream": { - "optional": true - }, - "redis": { - "optional": true - }, - "sql.js": { - "optional": true - }, - "sqlite3": { - "optional": true - }, - "ts-node": { - "optional": true - }, - "typeorm-aurora-data-api-driver": { - "optional": true - } - } - }, - "node_modules/typeorm/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/typeorm/node_modules/glob": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", - "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/typeorm/node_modules/uuid": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.1.tgz", - "integrity": "sha512-vIYxrBCC/N/K+Js3qSN88go7kIfNPssr/hHCesKCQNAjmgvYS2oqr69kIufEG+O4+PfezOH4EbIeHCfFov8ZgQ==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/esm/bin/uuid" - } - }, "node_modules/typescript": { "version": "5.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", @@ -7308,6 +9702,45 @@ "node": ">= 0.8" } }, + "node_modules/unrs-resolver": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.12.2.tgz", + "integrity": "sha512-dmlRxBJJayXjqTwC+JtF1HhJmgf3ftQ3YejFcZrf4+KKtJv0qDsK1pjqaaVjG7wJ5NJ6UVP1OqRMQ71Z4C3rxQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "peer": true, + "dependencies": { + "napi-postinstall": "^0.3.4" + }, + "funding": { + "url": "https://opencollective.com/unrs-resolver" + }, + "optionalDependencies": { + "@unrs/resolver-binding-android-arm-eabi": "1.12.2", + "@unrs/resolver-binding-android-arm64": "1.12.2", + "@unrs/resolver-binding-darwin-arm64": "1.12.2", + "@unrs/resolver-binding-darwin-x64": "1.12.2", + "@unrs/resolver-binding-freebsd-x64": "1.12.2", + "@unrs/resolver-binding-linux-arm-gnueabihf": "1.12.2", + "@unrs/resolver-binding-linux-arm-musleabihf": "1.12.2", + "@unrs/resolver-binding-linux-arm64-gnu": "1.12.2", + "@unrs/resolver-binding-linux-arm64-musl": "1.12.2", + "@unrs/resolver-binding-linux-loong64-gnu": "1.12.2", + "@unrs/resolver-binding-linux-loong64-musl": "1.12.2", + "@unrs/resolver-binding-linux-ppc64-gnu": "1.12.2", + "@unrs/resolver-binding-linux-riscv64-gnu": "1.12.2", + "@unrs/resolver-binding-linux-riscv64-musl": "1.12.2", + "@unrs/resolver-binding-linux-s390x-gnu": "1.12.2", + "@unrs/resolver-binding-linux-x64-gnu": "1.12.2", + "@unrs/resolver-binding-linux-x64-musl": "1.12.2", + "@unrs/resolver-binding-openharmony-arm64": "1.12.2", + "@unrs/resolver-binding-wasm32-wasi": "1.12.2", + "@unrs/resolver-binding-win32-arm64-msvc": "1.12.2", + "@unrs/resolver-binding-win32-ia32-msvc": "1.12.2", + "@unrs/resolver-binding-win32-x64-msvc": "1.12.2" + } + }, "node_modules/update-browserslist-db": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", @@ -7364,19 +9797,6 @@ "node": ">= 0.4.0" } }, - "node_modules/uuid": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.0.3.tgz", - "integrity": "sha512-d0z310fCWv5dJwnX1Y/MncBAqGMKEzlBb1AOf7z9K8ALnd0utBX/msg/fA0+sbyN1ihbMsLhrBlnl1ak7Wa0rg==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/esm/bin/uuid" - } - }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", @@ -7384,6 +9804,22 @@ "dev": true, "license": "MIT" }, + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -7393,6 +9829,17 @@ "node": ">= 0.8" } }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, "node_modules/watchpack": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz", @@ -7534,6 +9981,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -7545,27 +9993,6 @@ "node": ">= 8" } }, - "node_modules/which-typed-array": { - "version": "1.1.21", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.21.tgz", - "integrity": "sha512-zbRA8cVm6io/d5W8uIe2hblzN76/Wm3v/yiythQvr+dpBWeqhPSWIDNj4zOyHi4zKbMK6DN34Xsr9jPHJERAEw==", - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.9", - "call-bound": "^1.0.4", - "for-each": "^0.3.5", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/win-guid": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/win-guid/-/win-guid-0.2.1.tgz", @@ -7609,6 +10036,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -7629,6 +10057,21 @@ "dev": true, "license": "ISC" }, + "node_modules/write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/ws": { "version": "8.21.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz", @@ -7663,16 +10106,28 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, "license": "ISC", + "peer": true, "engines": { "node": ">=10" } }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC", + "peer": true + }, "node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -7690,6 +10145,7 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, "license": "ISC", "engines": { "node": ">=12" diff --git a/mvp/Whatsapp-bot/package.json b/mvp/Whatsapp-bot/package.json index 827cf49..92ecfab 100644 --- a/mvp/Whatsapp-bot/package.json +++ b/mvp/Whatsapp-bot/package.json @@ -1,7 +1,7 @@ { "name": "reformix-luisa-bot", "version": "1.0.0", - "description": "Agente WhatsApp Luisa para Reformix – cualificacion de leads de reforma", + "description": "Agente WhatsApp Luisa para Reformix – cualificacion de leads de reforma via API HTTP", "author": "Reformix", "private": true, "license": "MIT", @@ -15,28 +15,20 @@ "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", "test": "jest", "test:watch": "jest --watch", - "test:cov": "jest --coverage", - "typeorm": "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js", - "migration:generate": "npm run typeorm -- migration:generate -d src/data-source.ts", - "migration:run": "npm run typeorm -- migration:run -d src/data-source.ts" + "test:cov": "jest --coverage" }, "dependencies": { "@nestjs/common": "^10.0.0", "@nestjs/core": "^10.0.0", "@nestjs/platform-express": "^10.0.0", - "@nestjs/schedule": "^4.0.0", - "@nestjs/typeorm": "^10.0.0", "@whiskeysockets/baileys": "^7.0.0-rc10", "axios": "^1.7.0", "baileys-antiban": "^3.9.0", "dotenv": "^16.4.0", - "form-data": "^4.0.1", - "pg": "^8.12.0", "pino": "^9.3.2", "qrcode-terminal": "^0.12.0", "reflect-metadata": "^0.2.0", - "rxjs": "^7.8.1", - "typeorm": "^0.3.20" + "rxjs": "^7.8.1" }, "devDependencies": { "@nestjs/cli": "^10.0.0", @@ -56,16 +48,10 @@ "typescript": "^5.5.0" }, "jest": { - "moduleFileExtensions": [ - "js", - "json", - "ts" - ], + "moduleFileExtensions": ["js", "json", "ts"], "rootDir": "src", "testRegex": ".*\\.spec\\.ts$", - "transform": { - "^.+\\.(t|j)s$": "ts-jest" - }, + "transform": { "^.+\\.(t|j)s$": "ts-jest" }, "coverageDirectory": "../coverage", "testEnvironment": "node" } diff --git a/mvp/Whatsapp-bot/src/api/api-client.service.ts b/mvp/Whatsapp-bot/src/api/api-client.service.ts new file mode 100644 index 0000000..127e081 --- /dev/null +++ b/mvp/Whatsapp-bot/src/api/api-client.service.ts @@ -0,0 +1,137 @@ +import { Injectable, Logger } from '@nestjs/common'; +import axios from 'axios'; + +export interface LeadState { + id: string; + nombre: string; + telefono: string; + botStep: string; + estadoWa: string; + espacio: string; + rangoM2: string; + estilo: string; + presupuestoDeclarado: string; + viable: boolean | null; +} + +@Injectable() +export class ApiClient { + private readonly logger = new Logger(ApiClient.name); + private readonly baseUrl: string; + private readonly apiKey: string; + + constructor() { + this.baseUrl = process.env.API_BASE_URL || 'http://localhost:3000'; + this.apiKey = process.env.FUNNEL_API_KEY || ''; + } + + private get headers() { + return { + Authorization: `Bearer ${this.apiKey}`, + 'Content-Type': 'application/json', + }; + } + + async getLead(leadId: string): Promise { + try { + const { data } = await axios.get(`${this.baseUrl}/api/leads/${leadId}`, { + headers: this.headers, + }); + return data; + } catch (err: any) { + if (err.response?.status === 404) return null; + this.logger.error(`Error fetching lead ${leadId}: ${err.message}`); + return null; + } + } + + async guardarConversacion( + leadId: string, + rol: 'user' | 'assistant' | 'system', + mensaje: string, + options?: { estadoWa?: string; botStep?: string; mediaType?: string; mediaUrl?: string; transcripcionAudio?: string }, + ): Promise { + return this.post(`/api/leads/${leadId}/conversacion`, { + rol, + mensaje, + ...options, + }); + } + + async actualizarPerfil( + leadId: string, + datos: Record, + ): Promise { + return this.post(`/api/leads/${leadId}/perfil`, datos); + } + + async obtenerHistorial(leadId: string): Promise> { + try { + const { data } = await axios.get( + `${this.baseUrl}/api/leads/${leadId}/conversacion`, + { headers: this.headers }, + ); + if (Array.isArray(data)) { + return data.map((m: any) => ({ role: m.rol || m.role, content: m.mensaje || m.content })); + } + return []; + } catch (err: any) { + if (err.response?.status === 404) return []; + this.logger.error(`Error fetching historial for ${leadId}: ${err.message}`); + return []; + } + } + + async calificarLead( + leadId: string, + score: number, + nivel: 'A' | 'B' | 'C' | 'D', + criterios?: Record, + notasAgente?: string, + ): Promise { + return this.post(`/api/leads/${leadId}/calificacion`, { + score, + nivel, + criterios, + notasAgente, + }); + } + + async registrarIntento( + leadId: string, + canal: string, + numeroIntento: number, + resultado?: string, + completado?: boolean, + ): Promise { + return this.post(`/api/leads/${leadId}/intento`, { + canal, + numeroIntento, + resultado, + completado, + }); + } + + async enviarIngesta( + leadId: string, + items: Array>, + flags?: { perfilCompleto?: boolean; finalizar?: boolean }, + ): Promise { + return this.post(`/api/leads/${leadId}/ingesta`, { + items, + ...flags, + }); + } + + private async post(path: string, body: unknown): Promise { + try { + const { status } = await axios.post(`${this.baseUrl}${path}`, body, { + headers: this.headers, + }); + return status === 200; + } catch (err: any) { + this.logger.error(`POST ${path} error: ${err.response?.status} ${err.message}`); + return false; + } + } +} diff --git a/mvp/Whatsapp-bot/src/api/api.module.ts b/mvp/Whatsapp-bot/src/api/api.module.ts new file mode 100644 index 0000000..b9bbb4d --- /dev/null +++ b/mvp/Whatsapp-bot/src/api/api.module.ts @@ -0,0 +1,9 @@ +import { Module, Global } from '@nestjs/common'; +import { ApiClient } from './api-client.service'; + +@Global() +@Module({ + providers: [ApiClient], + exports: [ApiClient], +}) +export class ApiModule {} diff --git a/mvp/Whatsapp-bot/src/app.module.ts b/mvp/Whatsapp-bot/src/app.module.ts index f373757..1bdb810 100644 --- a/mvp/Whatsapp-bot/src/app.module.ts +++ b/mvp/Whatsapp-bot/src/app.module.ts @@ -1,34 +1,22 @@ import 'dotenv/config'; import { Module } from '@nestjs/common'; -import { TypeOrmModule } from '@nestjs/typeorm'; -import { ScheduleModule } from '@nestjs/schedule'; +import { ApiModule } from './api/api.module'; import { LeadsModule } from './leads/leads.module'; import { ConversacionModule } from './conversacion/conversacion.module'; import { WhatsappModule } from './whatsapp/whatsapp.module'; import { ClaudeModule } from './claude/claude.module'; import { MediaModule } from './media/media.module'; -import { SchedulerModule } from './scheduler/scheduler.module'; -import { Lead } from './leads/lead.entity'; -import { Conversacion } from './conversacion/conversacion.entity'; +import { WebhookModule } from './webhook/webhook.module'; @Module({ imports: [ - ScheduleModule.forRoot(), - TypeOrmModule.forRoot({ - type: 'postgres', - url: process.env.DATABASE_URL, - entities: [Lead, Conversacion], - synchronize: true, // En produccion usar migrations en lugar de synchronize - ssl: process.env.DATABASE_URL?.includes('sslmode=require') - ? { rejectUnauthorized: false } - : false, - }), + ApiModule, LeadsModule, ConversacionModule, WhatsappModule, ClaudeModule, MediaModule, - SchedulerModule, + WebhookModule, ], }) -export class AppModule { } +export class AppModule {} diff --git a/mvp/Whatsapp-bot/src/claude/claude.service.ts b/mvp/Whatsapp-bot/src/claude/claude.service.ts index 6b03e07..fe75375 100644 --- a/mvp/Whatsapp-bot/src/claude/claude.service.ts +++ b/mvp/Whatsapp-bot/src/claude/claude.service.ts @@ -2,7 +2,6 @@ import { Injectable, Logger, OnModuleInit } from '@nestjs/common'; import * as fs from 'fs'; import * as path from 'path'; import axios from 'axios'; -import { Lead } from '../leads/lead.entity'; import { LeadsService } from '../leads/leads.service'; const DEFAULT_SYSTEM_PROMPT = @@ -34,9 +33,23 @@ export interface ValidacionResultado { viable?: boolean; } +export interface LeadBasico { + id: string; + telefono: string; + nombre: string; + estado_actual: string; + espacio: string | null; + rango_m2: string | null; + estilo: string | null; + urgencia: string | null; + presupuesto_declarado: string | null; + viable: boolean | null; + email: string | null; +} + export interface ClaudeResponse { respuesta: string; - entidad?: Partial; + entidad?: Partial; viable?: boolean; nuevoEstado?: string; } @@ -47,73 +60,39 @@ export class ClaudeService implements OnModuleInit { private readonly promptsDir = path.join(process.cwd(), 'prompts'); private systemPromptCache = ''; private reglasPromptCache = ''; - private readonly reintentosPorLead = new Map< - string, - { estado: string; count: number } - >(); + private readonly reintentosPorLead = new Map(); constructor(private readonly leadsService: LeadsService) {} onModuleInit() { - this.systemPromptCache = this.cargarPrompts([ - 'luisa_core.md', - 'luisa_flujo.md', - 'luisa_casos.md', - ]); + this.systemPromptCache = this.cargarPrompts(['luisa_core.md', 'luisa_flujo.md', 'luisa_casos.md']); this.reglasPromptCache = this.cargarPrompts(['luisa_core.md', 'luisa_casos.md']); - this.logger.log( - `Prompts cargados: system=${this.systemPromptCache.length} chars, reglas=${this.reglasPromptCache.length} chars`, - ); + this.logger.log(`Prompts cargados: system=${this.systemPromptCache.length} chars, reglas=${this.reglasPromptCache.length} chars`); } private cargarPrompts(archivos: string[]): string { const partes: string[] = []; - for (const archivo of archivos) { const rutaCompleta = path.join(this.promptsDir, archivo); try { - if (!fs.existsSync(rutaCompleta)) { - this.logger.warn(`Prompt no encontrado: ${archivo}`); - continue; - } + if (!fs.existsSync(rutaCompleta)) { this.logger.warn(`Prompt no encontrado: ${archivo}`); continue; } const contenido = fs.readFileSync(rutaCompleta, 'utf-8'); - if (contenido.trim()) { - partes.push(`\n\n## ${archivo}\n${contenido}`); - } - } catch { - this.logger.warn(`No se pudo leer el prompt: ${archivo}`); - } + if (contenido.trim()) partes.push(`\n\n## ${archivo}\n${contenido}`); + } catch { this.logger.warn(`No se pudo leer el prompt: ${archivo}`); } } - - const concatenado = partes.join('\n').trim(); - return concatenado || DEFAULT_SYSTEM_PROMPT; - } - - private leerPromptsSistema(): string { - return this.systemPromptCache || DEFAULT_SYSTEM_PROMPT; - } - - private leerPromptsReglas(): string { - return this.reglasPromptCache || DEFAULT_SYSTEM_PROMPT; + return partes.join('\n').trim() || DEFAULT_SYSTEM_PROMPT; } private getModelo(clave: 'clasificador' | 'generador' | 'reglas'): string { - const defaults = { - clasificador: 'anthropic/claude-haiku-4-5', - generador: 'anthropic/claude-sonnet-4-5', - reglas: 'anthropic/claude-haiku-4-5', - }; - - const envMap = { + const envMap: Record = { clasificador: process.env.MODEL_CLASIFICADOR, generador: process.env.MODEL_GENERADOR || process.env.MODEL, reglas: process.env.MODEL_REGLAS || process.env.MODEL_CLASIFICADOR, }; - - return envMap[clave] || defaults[clave]; + return envMap[clave] || (clave === 'generador' ? 'anthropic/claude-sonnet-4-5' : 'anthropic/claude-haiku-4-5'); } - private serializarLead(lead: Lead): string { + private serializarLead(lead: LeadBasico): string { return [ `- ID: ${lead.id}`, `- Telefono: ${lead.telefono}`, @@ -129,10 +108,6 @@ export class ClaudeService implements OnModuleInit { ].join('\n'); } - /** - * OpenRouter requiere system dentro de messages[] para modelos OpenAI. - * El campo system en la raiz del payload no siempre se aplica. - */ private async llamarOpenRouter( model: string, system: string, @@ -140,95 +115,47 @@ export class ClaudeService implements OnModuleInit { options: { temperature?: number; jsonMode?: boolean } = {}, ): Promise { const { temperature = 0.7, jsonMode = false } = options; - const payload: Record = { model, messages: [{ role: 'system', content: system }, ...messages], max_tokens: 1024, temperature, }; + if (jsonMode) payload.response_format = { type: 'json_object' }; - if (jsonMode) { - payload.response_format = { type: 'json_object' }; - } - - const response = await axios.post( - 'https://openrouter.ai/api/v1/chat/completions', - payload, - { - headers: { - Authorization: `Bearer ${process.env.OPENROUTER_API_KEY}`, - 'Content-Type': 'application/json', - 'HTTP-Referer': 'https://reformix.es', - 'X-Title': 'Reformix Luisa Bot', - }, + const response = await axios.post('https://openrouter.ai/api/v1/chat/completions', payload, { + headers: { + Authorization: `Bearer ${process.env.OPENROUTER_API_KEY}`, + 'Content-Type': 'application/json', + 'HTTP-Referer': 'https://reformix.es', + 'X-Title': 'Reformix Luisa Bot', }, - ); - - const contenido = response.data.choices?.[0]?.message?.content || ''; - const modeloUsado = response.data.model || model; - - if (!contenido.trim()) { - this.logger.warn( - `OpenRouter devolvio contenido vacio (modelo=${modeloUsado})`, - ); - } - - return contenido; + }); + return response.data.choices?.[0]?.message?.content || ''; } private parsearJson(texto: string): T | null { - const limpio = texto - .replace(/```json\s*/gi, '') - .replace(/```\s*/g, '') - .trim(); - + const limpio = texto.replace(/```json\s*/gi, '').replace(/```\s*/g, '').trim(); const inicio = limpio.indexOf('{'); const fin = limpio.lastIndexOf('}'); if (inicio === -1 || fin === -1) return null; - - try { - return JSON.parse(limpio.slice(inicio, fin + 1)) as T; - } catch { - return null; - } + try { return JSON.parse(limpio.slice(inicio, fin + 1)) as T; } catch { return null; } } - private normalizarClasificacion( - raw: Partial, - ): ClasificacionResultado | null { - const intenciones = [ - 'respuesta', - 'desvio', - 'despedida', - 'insulto', - 'pregunta', - ] as const; - + private normalizarClasificacion(raw: Partial): ClasificacionResultado | null { + const intenciones = ['respuesta', 'desvio', 'despedida', 'insulto', 'pregunta'] as const; if (!raw || typeof raw.responde_pregunta !== 'boolean') return null; - const intencion = intenciones.includes(raw.intencion as typeof intenciones[number]) - ? (raw.intencion as ClasificacionResultado['intencion']) - : 'respuesta'; - + ? (raw.intencion as ClasificacionResultado['intencion']) : 'respuesta'; return { responde_pregunta: raw.responde_pregunta, - valor_extraido: - raw.valor_extraido === null || raw.valor_extraido === undefined - ? null - : String(raw.valor_extraido), + valor_extraido: raw.valor_extraido === null || raw.valor_extraido === undefined ? null : String(raw.valor_extraido), es_desvio: Boolean(raw.es_desvio), intencion, }; } - /** - * Capa 1 — Clasificador (Haiku): extrae intencion y valor del mensaje. - */ - private async clasificar( - mensaje: string, - estadoActual: string, - ): Promise { + private async clasificar(mensaje: string, estadoActual: string): Promise { const valoresPermitidos = this.leadsService.getValoresPermitidos(estadoActual); const system = `Eres un clasificador de mensajes para un bot de cualificacion de leads de reformas. Responde UNICAMENTE con un objeto JSON valido. Sin markdown, sin texto antes ni despues. @@ -247,132 +174,63 @@ Formato exacto: Valores validos de intencion: respuesta, desvio, despedida, insulto, pregunta Reglas para valor_extraido: -- espacio: cocina, bano, salon, integral, otro +- espacio: cocina, bano, salon, comedor, integral, otro - tamano: menos10, 10a20, 20a40, mas40 - estilo: funcional, cuidado, exclusivo -- urgencia: urgente, medio_plazo, frio +- urgencia: alta, media, baja - presupuesto: numero o rango en euros tal como lo dijo el usuario - apertura: null si solo confirma disponibilidad; extrae nombre si lo menciona - Si el usuario pregunta algo (nombre, precios, etc.) usa intencion "pregunta" y responde_pregunta false - Saludos casuales sin confirmar disponibilidad: intencion "desvio", es_desvio true - Usuarios de Madrid/Espana: interpreta coloquialismos, jerga y dialecto peninsular (vale, tio, mola, guay, etc.) como respuesta valida si aportan el dato del estado -- Extrae el valor semantico aunque venga en lenguaje coloquial ("pa la cocina" -> espacio cocina, "unos 15 mil" -> presupuesto)`; - - const intentos = [ - { jsonMode: true, temperature: 0.1 }, - { jsonMode: true, temperature: 0 }, - ]; +- Extrae el valor semantico aunque venga en lenguaje coloquial`; + const intentos = [{ jsonMode: true, temperature: 0.1 }, { jsonMode: true, temperature: 0 }]; for (const opts of intentos) { - const contenido = await this.llamarOpenRouter( - this.getModelo('clasificador'), - system, - [{ role: 'user', content: mensaje }], - opts, - ); - - const parsed = this.normalizarClasificacion( - this.parsearJson>(contenido) ?? {}, - ); - + const contenido = await this.llamarOpenRouter(this.getModelo('clasificador'), system, [{ role: 'user', content: mensaje }], opts); + const parsed = this.normalizarClasificacion(this.parsearJson>(contenido) ?? {}); if (parsed) return parsed; - - this.logger.warn( - `Clasificador JSON invalido (intento, modelo=${this.getModelo('clasificador')}): ${contenido.slice(0, 200)}`, - ); + this.logger.warn(`Clasificador JSON invalido (intento): ${contenido.slice(0, 200)}`); } - - this.logger.warn('Clasificador agotado reintentos, usando fallback conservador'); - return { - responde_pregunta: false, - valor_extraido: null, - es_desvio: true, - intencion: 'desvio', - }; + return { responde_pregunta: false, valor_extraido: null, es_desvio: true, intencion: 'desvio' }; } - /** - * Capa 2 — Validador en codigo: valida valor_extraido contra valores permitidos. - */ - private validar( - clasificacion: ClasificacionResultado, - estadoActual: string, - ): ValidacionResultado { + private validar(clasificacion: ClasificacionResultado, estadoActual: string): ValidacionResultado { const estado = this.leadsService.normalizarEstadoFlujo(estadoActual); - - if ( - clasificacion.es_desvio || - clasificacion.intencion === 'desvio' || - clasificacion.intencion === 'pregunta' || - clasificacion.intencion === 'insulto' || - clasificacion.intencion === 'despedida' - ) { + if (clasificacion.es_desvio || clasificacion.intencion === 'desvio' || clasificacion.intencion === 'pregunta' || + clasificacion.intencion === 'insulto' || clasificacion.intencion === 'despedida') { return { valido: false, valorNormalizado: null }; } - - if (estado === 'nuevo') { - return { valido: false, valorNormalizado: null }; - } - + if (estado === 'nuevo') return { valido: false, valorNormalizado: null }; if (estado === 'apertura') { - const valido = - clasificacion.responde_pregunta && - clasificacion.intencion === 'respuesta' && - !clasificacion.es_desvio; - return { valido, valorNormalizado: clasificacion.valor_extraido }; + return { valido: clasificacion.responde_pregunta && clasificacion.intencion === 'respuesta' && !clasificacion.es_desvio, valorNormalizado: clasificacion.valor_extraido }; } - if (estado === 'presupuesto') { const valor = clasificacion.valor_extraido?.trim(); - if (!valor || !this.leadsService.esPresupuestoValido(valor)) { - return { valido: false, valorNormalizado: null }; - } - const viable = this.leadsService.evaluarViabilidad(valor); - return { valido: true, valorNormalizado: valor, viable }; + if (!valor || !this.leadsService.esPresupuestoValido(valor)) return { valido: false, valorNormalizado: null }; + return { valido: true, valorNormalizado: valor, viable: this.leadsService.evaluarViabilidad(valor) }; } - const valoresPermitidos = this.leadsService.getValoresPermitidos(estado); const valor = this.normalizarTexto(clasificacion.valor_extraido ?? ''); - - if (!valor) { - return { valido: false, valorNormalizado: null }; - } - - const coincide = valoresPermitidos.some( - (v) => v === valor || valor.includes(v) || v.includes(valor), - ); - - if (!coincide) { - return { valido: false, valorNormalizado: null }; - } - - const valorNormalizado = - valoresPermitidos.find( - (v) => v === valor || valor.includes(v) || v.includes(valor), - ) ?? valor; - + if (!valor) return { valido: false, valorNormalizado: null }; + const coincide = valoresPermitidos.some((v) => v === valor || valor.includes(v) || v.includes(valor)); + if (!coincide) return { valido: false, valorNormalizado: null }; + const valorNormalizado = valoresPermitidos.find((v) => v === valor || valor.includes(v) || v.includes(valor)) ?? valor; return { valido: true, valorNormalizado }; } private normalizarTexto(valor: string): string { - return valor - .trim() - .toLowerCase() - .normalize('NFD') - .replace(/\p{Diacritic}/gu, ''); + return valor.trim().toLowerCase().normalize('NFD').replace(/\p{Diacritic}/gu, ''); } - private claveReintento(leadId: number, estado: string): string { - return `${leadId}:${estado}`; - } + private claveReintento(leadId: string, estado: string): string { return `${leadId}:${estado}`; } - private obtenerReintentos(leadId: number, estado: string): number { - const clave = this.claveReintento(leadId, estado); - const entry = this.reintentosPorLead.get(clave); + private obtenerReintentos(leadId: string, estado: string): number { + const entry = this.reintentosPorLead.get(this.claveReintento(leadId, estado)); return entry?.estado === estado ? entry.count : 0; } - private incrementarReintentos(leadId: number, estado: string): number { + private incrementarReintentos(leadId: string, estado: string): number { const clave = this.claveReintento(leadId, estado); const actual = this.obtenerReintentos(leadId, estado); const count = actual + 1; @@ -380,15 +238,12 @@ Reglas para valor_extraido: return count; } - private resetearReintentos(leadId: number, estado: string): void { + private resetearReintentos(leadId: string, estado: string): void { this.reintentosPorLead.delete(this.claveReintento(leadId, estado)); } - /** - * Capa 3 — Generador (Sonnet): produce el borrador del mensaje de Luisa. - */ private async generar( - lead: Lead, + lead: LeadBasico, historial: Array<{ role: string; content: string }>, mensajeActual: string, clasificacion: ClasificacionResultado, @@ -398,11 +253,7 @@ Reglas para valor_extraido: siguienteEstado: string | null, forzarApertura = false, ): Promise { - const systemPrompt = this.leerPromptsSistema(); - const estadoFlujo = this.leadsService.normalizarEstadoFlujo( - lead.estado_actual, - ); - + const estadoFlujo = this.leadsService.normalizarEstadoFlujo(lead.estado_actual); const contextoGeneracion = ` ## Contexto del lead ${this.serializarLead(lead)} @@ -419,11 +270,10 @@ ${this.serializarLead(lead)} ## Instrucciones de respuesta Eres Luisa de Reformix en Madrid. Sigue el system prompt al pie de la letra. -Habla espanol de Espana; suena natural y cercana. Adapta el registro al usuario (coloquial si el, formal si el). +Habla espanol de Espana; suena natural y cercana. Devuelve SOLO el texto del mensaje a enviar por WhatsApp. NO incluyas JSON, etiquetas XML ni bloques de datos extraidos. NUNCA digas que eres IA, OpenAI, ChatGPT ni un asistente virtual. -Si preguntan tu nombre, di que eres Luisa de Reformix. Si forzar mensaje de apertura es true, envia el mensaje de APERTURA del flujo. Si validacion valida es false y reintentos < 2, pide amablemente que aclare su respuesta. @@ -432,32 +282,16 @@ Si es_desvio es true o intencion es pregunta, responde brevemente como Luisa y r Si avanzar estado es true, haz la pregunta correspondiente al siguiente estado. Si el siguiente estado es fin_viable o fin_no_viable, usa el mensaje de cierre correspondiente.`; - const messages = [ - ...historial, - { role: 'user', content: mensajeActual }, - ]; - - const contenido = await this.llamarOpenRouter( - this.getModelo('generador'), - `${systemPrompt}\n${contextoGeneracion}`, - messages, + const contenido = await this.llamarOpenRouter(this.getModelo('generador'), + `${this.systemPromptCache || DEFAULT_SYSTEM_PROMPT}\n${contextoGeneracion}`, + [...historial, { role: 'user', content: mensajeActual }], { temperature: 0.7 }, ); - return contenido.trim(); } - /** - * Capa 4 — Reglas (Haiku): corrige el borrador para cumplir identidad y tono de Luisa. - */ - private async aplicarReglas( - borrador: string, - lead: Lead, - estadoFlujo: string, - clasificacion: ClasificacionResultado, - ): Promise { - const reglas = this.leerPromptsReglas(); - + private async aplicarReglas(borrador: string, lead: LeadBasico, estadoFlujo: string, clasificacion: ClasificacionResultado): Promise { + const reglas = this.reglasPromptCache || DEFAULT_SYSTEM_PROMPT; const system = `${reglas} ## Tu tarea @@ -471,19 +305,16 @@ Devuelve SOLO el mensaje final listo para enviar, sin explicaciones ni JSON. ## Reglas de correccion obligatorias - Debe sonar como Luisa de Reformix (Madrid), nunca como un asistente generico -- Espanol de Espana, natural; puede usar coloquialismos suaves (vale, mira, oye) si encaja con el tono del usuario +- Espanol de Espana, natural; puede usar coloquialismos suaves (vale, mira, oye) si encaja - Maximo 2 lineas, un mensaje por turno, sin emojis, sin guiones largos - NUNCA mencionar IA, OpenAI, ChatGPT, modelos de lenguaje ni asistentes virtuales - Si preguntan el nombre: "Soy Luisa de Reformix" - Si el borrador viola alguna regla, reescribelo completamente manteniendo la intencion`; - const contenido = await this.llamarOpenRouter( - this.getModelo('reglas'), - system, + const contenido = await this.llamarOpenRouter(this.getModelo('reglas'), system, [{ role: 'user', content: `Borrador a corregir:\n${borrador}` }], { temperature: 0.3 }, ); - return contenido.trim() || borrador; } @@ -491,7 +322,7 @@ Devuelve SOLO el mensaje final listo para enviar, sin explicaciones ni JSON. return FRASES_IA_PROHIBIDAS.some((regex) => regex.test(texto)); } - private mensajeFallback(estadoFlujo: string, lead: Lead): string { + private mensajeFallback(estadoFlujo: string, lead: LeadBasico): string { const nombre = lead.nombre ? lead.nombre : ''; const fallbacks: Record = { nuevo: `Hola${nombre ? ' ' + nombre : ''}, soy Luisa de Reformix; vi que dejaste tus datos en nuestra web y queria ayudarte a preparar tu presupuesto. Tienes unos minutos ahora?`, @@ -502,91 +333,23 @@ Devuelve SOLO el mensaje final listo para enviar, sin explicaciones ni JSON. urgencia: 'Y cuando tienes pensado arrancar, es algo proximo o todavia estas explorando?', presupuesto: 'Ultima pregunta; tienes en mente un presupuesto aproximado para la reforma?', }; - - return ( - fallbacks[estadoFlujo] ?? - 'Soy Luisa de Reformix; sigamos con tu presupuesto de reforma.' - ); + return fallbacks[estadoFlujo] ?? 'Soy Luisa de Reformix; sigamos con tu presupuesto de reforma.'; } - /** - * Orquesta las 4 capas: clasificar, validar, generar y aplicar reglas. - */ async llamarClaude( - lead: Lead, + lead: LeadBasico, historial: Array<{ role: string; content: string }>, mensajeActual: string, ): Promise { - const esAperturaScheduler = - historial.length === 0 && mensajeActual.startsWith('APERTURA:'); - - if (esAperturaScheduler) { - const borrador = await this.generar( - lead, - historial, - mensajeActual, - { - responde_pregunta: true, - valor_extraido: null, - es_desvio: false, - intencion: 'respuesta', - }, - { valido: true, valorNormalizado: null }, - 0, - false, - 'apertura', - true, - ); - const respuesta = await this.aplicarReglas( - borrador, - lead, - 'apertura', - { - responde_pregunta: true, - valor_extraido: null, - es_desvio: false, - intencion: 'respuesta', - }, - ); - return { - respuesta: this.contieneFraseProhibida(respuesta) - ? this.mensajeFallback('apertura', lead) - : respuesta, - }; - } - - const estadoFlujo = this.leadsService.normalizarEstadoFlujo( - lead.estado_actual, - ); + const estadoFlujo = this.leadsService.normalizarEstadoFlujo(lead.estado_actual); if (estadoFlujo === 'nuevo') { - const clasificacion: ClasificacionResultado = { - responde_pregunta: false, - valor_extraido: null, - es_desvio: false, - intencion: 'respuesta', - }; - const borrador = await this.generar( - lead, - historial, - mensajeActual, - clasificacion, - { valido: false, valorNormalizado: null }, - 0, - false, - null, - true, - ); - const respuesta = await this.aplicarReglas( - borrador, - lead, - 'nuevo', - clasificacion, - ); + const clasificacion: ClasificacionResultado = { responde_pregunta: false, valor_extraido: null, es_desvio: false, intencion: 'respuesta' }; + const borrador = await this.generar(lead, historial, mensajeActual, clasificacion, + { valido: false, valorNormalizado: null }, 0, false, null, true); + const respuesta = await this.aplicarReglas(borrador, lead, 'nuevo', clasificacion); return { - respuesta: this.contieneFraseProhibida(respuesta) - ? this.mensajeFallback('nuevo', lead) - : respuesta, + respuesta: this.contieneFraseProhibida(respuesta) ? this.mensajeFallback('nuevo', lead) : respuesta, nuevoEstado: 'apertura', }; } @@ -597,72 +360,38 @@ Devuelve SOLO el mensaje final listo para enviar, sin explicaciones ni JSON. let reintentos = this.obtenerReintentos(lead.id, estadoFlujo); let avanzarEstado = false; let siguienteEstado: string | null = null; - let entidad: Partial = {}; + let entidad: Partial = {}; let viable: boolean | undefined; - const puedeAvanzar = - validacion.valido && - !clasificacion.es_desvio && - clasificacion.intencion === 'respuesta'; + const puedeAvanzar = validacion.valido && !clasificacion.es_desvio && clasificacion.intencion === 'respuesta'; if (puedeAvanzar) { avanzarEstado = true; this.resetearReintentos(lead.id, estadoFlujo); - if (validacion.valorNormalizado) { const campo = this.leadsService.getCampoParaEstado(estadoFlujo); if (campo) { - entidad = { [campo]: validacion.valorNormalizado }; - } else if ( - estadoFlujo === 'apertura' && - clasificacion.valor_extraido?.trim() - ) { - entidad = { nombre: clasificacion.valor_extraido.trim() }; + (entidad as any)[campo] = validacion.valorNormalizado; + } else if (estadoFlujo === 'apertura' && clasificacion.valor_extraido?.trim()) { + entidad.nombre = clasificacion.valor_extraido.trim(); } } - if (estadoFlujo === 'presupuesto') { viable = validacion.viable; - siguienteEstado = this.leadsService.getSiguienteEstado( - estadoFlujo, - viable, - ); + siguienteEstado = this.leadsService.getSiguienteEstado(estadoFlujo, viable); } else { siguienteEstado = this.leadsService.getSiguienteEstado(estadoFlujo); } - } else if ( - !validacion.valido && - clasificacion.responde_pregunta && - !clasificacion.es_desvio - ) { + } else if (!validacion.valido && clasificacion.responde_pregunta && !clasificacion.es_desvio) { reintentos = this.incrementarReintentos(lead.id, estadoFlujo); - if (reintentos > 2) { - reintentos = 2; - } + if (reintentos > 2) reintentos = 2; } - const borrador = await this.generar( - lead, - historial, - mensajeActual, - clasificacion, - validacion, - reintentos, - avanzarEstado, - siguienteEstado, - ); - - let respuesta = await this.aplicarReglas( - borrador, - lead, - estadoFlujo, - clasificacion, - ); + const borrador = await this.generar(lead, historial, mensajeActual, clasificacion, validacion, reintentos, avanzarEstado, siguienteEstado); + let respuesta = await this.aplicarReglas(borrador, lead, estadoFlujo, clasificacion); if (this.contieneFraseProhibida(respuesta)) { - this.logger.warn( - `Respuesta final viola reglas de identidad, usando fallback para estado=${estadoFlujo}`, - ); + this.logger.warn(`Respuesta final viola reglas, usando fallback para estado=${estadoFlujo}`); respuesta = this.mensajeFallback(estadoFlujo, lead); } diff --git a/mvp/Whatsapp-bot/src/conversacion/conversacion.entity.ts b/mvp/Whatsapp-bot/src/conversacion/conversacion.entity.ts deleted file mode 100644 index 0023fd2..0000000 --- a/mvp/Whatsapp-bot/src/conversacion/conversacion.entity.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { - Entity, - PrimaryGeneratedColumn, - Column, - CreateDateColumn, - ManyToOne, - JoinColumn, -} from 'typeorm'; -import { Lead } from '../leads/lead.entity'; - -export type RolMensaje = 'user' | 'assistant' | 'system'; - -@Entity('conversacion') -export class Conversacion { - @PrimaryGeneratedColumn() - id: number; - - @Column({ type: 'integer' }) - lead_id: number; - - @ManyToOne(() => Lead, { onDelete: 'CASCADE' }) - @JoinColumn({ name: 'lead_id' }) - lead: Lead; - - @Column({ type: 'text' }) - rol: RolMensaje; - - @Column({ type: 'text' }) - mensaje: string; - - @CreateDateColumn() - created_at: Date; -} diff --git a/mvp/Whatsapp-bot/src/conversacion/conversacion.module.ts b/mvp/Whatsapp-bot/src/conversacion/conversacion.module.ts index 98bcc2e..b16c6e9 100644 --- a/mvp/Whatsapp-bot/src/conversacion/conversacion.module.ts +++ b/mvp/Whatsapp-bot/src/conversacion/conversacion.module.ts @@ -1,10 +1,7 @@ import { Module } from '@nestjs/common'; -import { TypeOrmModule } from '@nestjs/typeorm'; -import { Conversacion } from './conversacion.entity'; import { ConversacionService } from './conversacion.service'; @Module({ - imports: [TypeOrmModule.forFeature([Conversacion])], providers: [ConversacionService], exports: [ConversacionService], }) diff --git a/mvp/Whatsapp-bot/src/conversacion/conversacion.service.ts b/mvp/Whatsapp-bot/src/conversacion/conversacion.service.ts index 9c9208d..d120a83 100644 --- a/mvp/Whatsapp-bot/src/conversacion/conversacion.service.ts +++ b/mvp/Whatsapp-bot/src/conversacion/conversacion.service.ts @@ -1,41 +1,26 @@ -import { Injectable } from '@nestjs/common'; -import { InjectRepository } from '@nestjs/typeorm'; -import { Repository } from 'typeorm'; -import { Conversacion, RolMensaje } from './conversacion.entity'; +import { Injectable, Logger } from '@nestjs/common'; +import { ApiClient } from '../api/api-client.service'; @Injectable() export class ConversacionService { - constructor( - @InjectRepository(Conversacion) - private readonly convRepo: Repository, - ) {} + private readonly logger = new Logger(ConversacionService.name); + + constructor(private readonly api: ApiClient) {} async guardarMensaje( - leadId: number, - rol: RolMensaje, + leadId: string, + rol: 'user' | 'assistant' | 'system', mensaje: string, - ): Promise { - const entry = this.convRepo.create({ lead_id: leadId, rol, mensaje }); - return this.convRepo.save(entry); + options?: { estadoWa?: string; botStep?: string }, + ): Promise { + const ok = await this.api.guardarConversacion(leadId, rol, mensaje, options); + if (!ok) { + this.logger.warn(`No se pudo guardar mensaje ${rol} para lead ${leadId}`); + } + return ok; } - async obtenerHistorial(leadId: number): Promise { - return this.convRepo.find({ - where: { lead_id: leadId }, - order: { created_at: 'ASC' }, - }); - } - - /** - * Devuelve el historial en formato OpenAI/Claude messages array. - */ - async obtenerHistorialComoMessages( - leadId: number, - ): Promise> { - const historial = await this.obtenerHistorial(leadId); - return historial.map((h) => ({ - role: h.rol, - content: h.mensaje, - })); + async obtenerHistorialComoMessages(leadId: string): Promise> { + return this.api.obtenerHistorial(leadId); } } diff --git a/mvp/Whatsapp-bot/src/leads/lead.entity.ts b/mvp/Whatsapp-bot/src/leads/lead.entity.ts deleted file mode 100644 index 479c58b..0000000 --- a/mvp/Whatsapp-bot/src/leads/lead.entity.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { - Entity, - PrimaryGeneratedColumn, - Column, - CreateDateColumn, - UpdateDateColumn, -} from 'typeorm'; - -export type EstadoLead = - | 'nuevo' - | 'en_proceso' - | 'apertura' - | 'espacio' - | 'tamano' - | 'estilo' - | 'urgencia' - | 'presupuesto' - | 'fin_viable' - | 'fin_no_viable' - | 'recopilando_datos' - | 'completado' - | 'no_viable' - | 'perdido'; - -@Entity('leads') -export class Lead { - @PrimaryGeneratedColumn() - id: number; - - @Column({ type: 'text', nullable: true }) - nombre: string; - - @Column({ type: 'text', nullable: true }) - telefono: string; - - @Column({ type: 'text', nullable: true }) - email: string; - - @Column({ type: 'text', nullable: true }) - espacio: string; - - @Column({ type: 'text', nullable: true }) - rango_m2: string; - - @Column({ type: 'text', nullable: true }) - estilo: string; - - @Column({ type: 'text', nullable: true }) - urgencia: string; - - @Column({ type: 'text', nullable: true }) - presupuesto_declarado: string; - - @Column({ type: 'boolean', nullable: true }) - viable: boolean; - - @Column({ type: 'text', default: 'nuevo' }) - estado_actual: EstadoLead; - - @Column({ type: 'text', nullable: true }) - url_presupuesto: string; - - @CreateDateColumn() - created_at: Date; - - @UpdateDateColumn() - updated_at: Date; -} diff --git a/mvp/Whatsapp-bot/src/leads/leads.module.ts b/mvp/Whatsapp-bot/src/leads/leads.module.ts index c199286..dd07513 100644 --- a/mvp/Whatsapp-bot/src/leads/leads.module.ts +++ b/mvp/Whatsapp-bot/src/leads/leads.module.ts @@ -1,10 +1,7 @@ import { Module } from '@nestjs/common'; -import { TypeOrmModule } from '@nestjs/typeorm'; -import { Lead } from './lead.entity'; import { LeadsService } from './leads.service'; @Module({ - imports: [TypeOrmModule.forFeature([Lead])], providers: [LeadsService], exports: [LeadsService], }) diff --git a/mvp/Whatsapp-bot/src/leads/leads.service.ts b/mvp/Whatsapp-bot/src/leads/leads.service.ts index 66b37df..8cab7e6 100644 --- a/mvp/Whatsapp-bot/src/leads/leads.service.ts +++ b/mvp/Whatsapp-bot/src/leads/leads.service.ts @@ -1,7 +1,5 @@ import { Injectable, Logger } from '@nestjs/common'; -import { InjectRepository } from '@nestjs/typeorm'; -import { Repository, LessThan } from 'typeorm'; -import { Lead, EstadoLead } from './lead.entity'; +import { ApiClient } from '../api/api-client.service'; const SECUENCIA_ESTADOS = [ 'nuevo', @@ -14,200 +12,83 @@ const SECUENCIA_ESTADOS = [ ] as const; const VALORES_POR_ESTADO: Record = { - espacio: ['cocina', 'bano', 'salon', 'integral', 'otro'], + espacio: ['cocina', 'bano', 'salon', 'comedor', 'integral', 'otro'], tamano: ['menos10', '10a20', '20a40', 'mas40'], estilo: ['funcional', 'cuidado', 'exclusivo'], - urgencia: ['urgente', 'medio_plazo', 'frio'], + urgencia: ['alta', 'media', 'baja'], }; -const CAMPO_POR_ESTADO: Record = { +const CAMPO_POR_ESTADO_NOMBRE: Record = { espacio: 'espacio', - tamano: 'rango_m2', + tamano: 'rangoM2', estilo: 'estilo', urgencia: 'urgencia', - presupuesto: 'presupuesto_declarado', + presupuesto: 'presupuestoDeclarado', }; @Injectable() export class LeadsService { private readonly logger = new Logger(LeadsService.name); - constructor( - @InjectRepository(Lead) - private readonly leadRepo: Repository, - ) {} + constructor(private readonly api: ApiClient) {} - /** - * Normaliza estados legacy del scheduler/DB al flujo de cualificacion. - */ normalizarEstadoFlujo(estado: string): string { - if (estado === 'en_proceso' || estado === 'recopilando_datos') { - return 'apertura'; - } + if (estado === 'en_proceso' || estado === 'recopilando_datos') return 'apertura'; return estado; } getSiguienteEstado(estadoActual: string, viable?: boolean): string { const estado = this.normalizarEstadoFlujo(estadoActual); - - if (estado === 'presupuesto') { - return viable === false ? 'fin_no_viable' : 'fin_viable'; - } - - const idx = SECUENCIA_ESTADOS.indexOf( - estado as (typeof SECUENCIA_ESTADOS)[number], - ); - if (idx === -1 || idx >= SECUENCIA_ESTADOS.length - 1) { - return estado; - } + if (estado === 'presupuesto') return viable === false ? 'fin_no_viable' : 'fin_viable'; + const idx = SECUENCIA_ESTADOS.indexOf(estado as typeof SECUENCIA_ESTADOS[number]); + if (idx === -1 || idx >= SECUENCIA_ESTADOS.length - 1) return estado; return SECUENCIA_ESTADOS[idx + 1]; } getValoresPermitidos(estado: string): string[] { - const estadoNorm = this.normalizarEstadoFlujo(estado); - return VALORES_POR_ESTADO[estadoNorm] ?? []; + return VALORES_POR_ESTADO[this.normalizarEstadoFlujo(estado)] ?? []; } - getCampoParaEstado(estado: string): keyof Lead | null { - const estadoNorm = this.normalizarEstadoFlujo(estado); - return CAMPO_POR_ESTADO[estadoNorm] ?? null; + getCampoParaEstado(estado: string): string | null { + return CAMPO_POR_ESTADO_NOMBRE[this.normalizarEstadoFlujo(estado)] ?? null; } esPresupuestoValido(valor: string): boolean { - const normalizado = valor.trim().toLowerCase(); - if (!normalizado) return false; - return /\d/.test(normalizado); + return /\d/.test(valor.trim().toLowerCase()); } evaluarViabilidad(presupuesto: string): boolean { const numeros = presupuesto.match(/\d[\d.]*/g); if (!numeros?.length) return true; - const valor = parseInt(numeros[0].replace(/\./g, ''), 10); if (Number.isNaN(valor)) return true; - return valor >= 5000; } - /** - * Busca un lead por número de teléfono. - * Si no existe, lo crea con estado 'nuevo'. - */ - async findOrCreate(telefono: string): Promise { - let lead = await this.leadRepo.findOne({ where: { telefono } }); - if (!lead) { - lead = this.leadRepo.create({ telefono, estado_actual: 'nuevo' }); - lead = await this.leadRepo.save(lead); - this.logger.log(`Lead nuevo creado: telefono=${telefono}, id=${lead.id}`); - } - return lead; - } - - async findByTelefono(telefono: string): Promise { - return this.leadRepo.findOne({ where: { telefono } }); - } - - async findById(id: number): Promise { - return this.leadRepo.findOne({ where: { id } }); - } - - async findByEstado(estado: EstadoLead): Promise { - return this.leadRepo.find({ where: { estado_actual: estado } }); - } - - async updateEstado(lead: Lead, estado: EstadoLead | string): Promise { - await this.leadRepo.update(lead.id, { - estado_actual: estado as EstadoLead, - }); - this.logger.log(`Lead id=${lead.id} estado_actual=${estado}`); - return this.leadRepo.findOne({ where: { id: lead.id } }); - } - - /** - * Actualiza campos del lead según el estado actual del flujo. - * Solo actualiza los campos que se pasan en el partial. - */ - async updateDatos(leadId: number, datos: Partial): Promise { - const campos = Object.keys(datos).filter( - (k) => datos[k as keyof Lead] !== undefined, - ); - if (campos.length === 0) { - return this.leadRepo.findOne({ where: { id: leadId } }); - } - - await this.leadRepo.update(leadId, datos); - this.logger.log( - `Lead id=${leadId} datos guardados: ${JSON.stringify(datos)}`, - ); - return this.leadRepo.findOne({ where: { id: leadId } }); - } - - async marcarViable(lead: Lead, viable: boolean): Promise { - const estado = viable ? 'completado' : 'no_viable'; - await this.leadRepo.update(lead.id, { viable, estado_actual: estado }); - this.logger.log(`Lead id=${lead.id} viable=${viable}, estado=${estado}`); - return this.leadRepo.findOne({ where: { id: lead.id } }); - } - - /** - * Persiste datos del lead y cambio de estado en una sola operacion. - */ async persistirTurno( - leadId: number, - datos: Partial, + leadId: string, + datos: Record, options?: { nuevoEstado?: string; viable?: boolean }, - ): Promise { - const patch: Partial = { ...datos }; + ): Promise { + const perfil: Record = { ...datos }; if (options?.nuevoEstado === 'fin_viable') { - patch.viable = true; - patch.estado_actual = 'completado'; + perfil.viable = true; + perfil.botStep = 'presupuesto'; } else if (options?.nuevoEstado === 'fin_no_viable') { - patch.viable = false; - patch.estado_actual = 'no_viable'; + perfil.viable = false; + perfil.botStep = 'presupuesto'; } else if (options?.nuevoEstado) { - patch.estado_actual = options.nuevoEstado as EstadoLead; - } else if (options?.viable !== undefined && options?.viable !== null) { - patch.viable = options.viable; - patch.estado_actual = options.viable ? 'completado' : 'no_viable'; + perfil.botStep = options.nuevoEstado; + } else if (options?.viable !== undefined) { + perfil.viable = options.viable; } - const campos = Object.keys(patch).filter( - (k) => patch[k as keyof Lead] !== undefined, - ); - if (campos.length === 0) { - return this.leadRepo.findOne({ where: { id: leadId } }); - } + const campos = Object.keys(perfil).filter((k) => perfil[k] !== undefined); + if (campos.length === 0) return true; - await this.leadRepo.update(leadId, patch); - this.logger.log( - `Lead id=${leadId} persistido: ${JSON.stringify(patch)}`, - ); - return this.leadRepo.findOne({ where: { id: leadId } }); - } - - /** - * Marca como perdido cualquier lead en_proceso sin actividad en más de 48h. - */ - async marcarLeadsPerdidos(): Promise { - const hace48h = new Date(Date.now() - 48 * 60 * 60 * 1000); - const leadsSinActividad = await this.leadRepo.find({ - where: { - estado_actual: 'en_proceso', - updated_at: LessThan(hace48h), - }, - }); - - for (const lead of leadsSinActividad) { - lead.estado_actual = 'perdido'; - await this.leadRepo.save(lead); - this.logger.warn( - `Lead id=${lead.id} marcado como perdido por inactividad > 48h`, - ); - } - } - - async save(lead: Lead): Promise { - return this.leadRepo.save(lead); + const ok = await this.api.actualizarPerfil(leadId, perfil); + this.logger.log(`Lead ${leadId} persistido via API: ${JSON.stringify(perfil)} → ${ok ? 'ok' : 'fallo'}`); + return ok; } } diff --git a/mvp/Whatsapp-bot/src/media/media.service.ts b/mvp/Whatsapp-bot/src/media/media.service.ts index 55a599c..4bfac32 100644 --- a/mvp/Whatsapp-bot/src/media/media.service.ts +++ b/mvp/Whatsapp-bot/src/media/media.service.ts @@ -1,268 +1,99 @@ -import { Injectable, Logger } from "@nestjs/common"; -import axios from "axios"; -import { EstadoLead } from "../leads/lead.entity"; +import { Injectable, Logger } from '@nestjs/common'; +import axios from 'axios'; @Injectable() export class MediaService { private readonly logger = new Logger(MediaService.name); - - private readonly OPENROUTER_URL = - "https://openrouter.ai/api/v1/chat/completions"; + private readonly OPENROUTER_URL = 'https://openrouter.ai/api/v1/chat/completions'; private get headers() { return { Authorization: `Bearer ${process.env.OPENROUTER_API_KEY}`, - "Content-Type": "application/json", - "HTTP-Referer": "https://reformix.es", - "X-Title": "Reformix Luisa Bot", + 'Content-Type': 'application/json', + 'HTTP-Referer': 'https://reformix.es', + 'X-Title': 'Reformix Luisa Bot', }; } private getModeloTranscripcion(): string { - return ( - process.env.MODEL_TRANSCRIPCION || "google/gemini-2.5-flash" - ); + return process.env.MODEL_TRANSCRIPCION || 'google/gemini-2.5-flash'; } - /** - * Convierte mimetype de WhatsApp al formato que espera OpenRouter input_audio. - */ mimeToAudioFormat(mimeType: string): string { - const base = mimeType.toLowerCase().split(";")[0].trim(); - const map: Record = { - "audio/ogg": "ogg", - "audio/opus": "ogg", - "audio/mpeg": "mp3", - "audio/mp3": "mp3", - "audio/mp4": "m4a", - "audio/aac": "aac", - "audio/wav": "wav", - "audio/webm": "webm", - "audio/flac": "flac", - }; - return map[base] ?? "ogg"; + const base = mimeType.toLowerCase().split(';')[0].trim(); + const map: Record = { 'audio/ogg': 'ogg', 'audio/opus': 'ogg', 'audio/mpeg': 'mp3', 'audio/mp3': 'mp3', 'audio/mp4': 'm4a', 'audio/aac': 'aac', 'audio/wav': 'wav', 'audio/webm': 'webm', 'audio/flac': 'flac' }; + return map[base] ?? 'ogg'; } - /** - * Elimina encabezados y formato que el modelo pueda añadir a la transcripcion. - */ limpiarTranscripcion(texto: string): string { - return texto - .replace(/^#+\s*transcripci[oó]n\s*:?\s*\n?/gim, "") - .replace(/^\*\*transcripci[oó]n\*\*\s*:?\s*\n?/gim, "") - .replace(/^transcripci[oó]n\s*:?\s*\n?/gim, "") - .replace(/^```[\s\S]*?\n/g, "") - .replace(/\n```$/g, "") - .replace(/^["']|["']$/g, "") - .trim(); + return texto.replace(/^#+\s*transcripci[oó]n\s*:?\s*\n?/gim, '') + .replace(/^\*\*transcripci[oó]n\*\*\s*:?\s*\n?/gim, '') + .replace(/^transcripci[oó]n\s*:?\s*\n?/gim, '') + .replace(/^```[\s\S]*?\n/g, '').replace(/\n```$/g, '') + .replace(/^["']|["']$/g, '').trim(); } private detectarFormatoPorMagicBytes(buffer: Buffer): string | null { - if ( - buffer.length >= 4 && - buffer.subarray(0, 4).toString("ascii") === "OggS" - ) { - return "ogg"; - } - if ( - buffer.length >= 3 && - buffer[0] === 0xff && - (buffer[1] & 0xe0) === 0xe0 - ) { - return "mp3"; - } - if ( - buffer.length >= 12 && - buffer.subarray(0, 4).toString("ascii") === "RIFF" && - buffer.subarray(8, 12).toString("ascii") === "WAVE" - ) { - return "wav"; - } + if (buffer.length >= 4 && buffer.subarray(0, 4).toString('ascii') === 'OggS') return 'ogg'; + if (buffer.length >= 3 && buffer[0] === 0xff && (buffer[1] & 0xe0) === 0xe0) return 'mp3'; + if (buffer.length >= 12 && buffer.subarray(0, 4).toString('ascii') === 'RIFF' && buffer.subarray(8, 12).toString('ascii') === 'WAVE') return 'wav'; return null; } - /** - * Transcribe un audio via OpenRouter input_audio (Gemini por defecto). - * Claude no soporta audio en OpenRouter; Luisa sigue usando Claude en el resto del pipeline. - */ - async transcribirAudio( - audioBuffer: Buffer, - mimeType = "audio/ogg; codecs=opus", - ): Promise { - const FALLBACK = - "No te he oido bien, me lo repites?"; - + async transcribirAudio(audioBuffer: Buffer, mimeType = 'audio/ogg; codecs=opus'): Promise { + const FALLBACK = 'No te he oido bien, me lo repites?'; const formatFromMime = this.mimeToAudioFormat(mimeType); const formatFromMagic = this.detectarFormatoPorMagicBytes(audioBuffer); const format = formatFromMagic ?? formatFromMime; - const base64Audio = audioBuffer.toString("base64"); + const base64Audio = audioBuffer.toString('base64'); const model = this.getModeloTranscripcion(); - this.logger.log( - `[AUDIO 2/4] MediaService.transcribirAudio — buffer=${audioBuffer.length} bytes, mime=${mimeType}, format=${format}, magic=${formatFromMagic ?? "no detectado"}, base64=${base64Audio.length} chars, modelo=${model}`, - ); + if (audioBuffer.length < 100) return FALLBACK; - if (audioBuffer.length < 100) { - this.logger.warn( - `[AUDIO 2/4] Buffer demasiado pequeno (${audioBuffer.length} bytes), abortando transcripcion`, - ); - return FALLBACK; - } - - const systemPrompt = - "Eres un transcriptor de voz para usuarios de Madrid y Espana. " + - "Transcribe en espanol peninsular tal como se habla, conservando coloquialismos, " + - "muletillas y jerga (vale, tio, guay, mola, etc.) sin corregir ni formalizar. " + - "Responde unicamente con las palabras dichas, sin titulos, markdown, comillas ni explicaciones."; - - const userPrompt = - "Transcribe exactamente lo que dice la persona en este audio. " + - "Es espanol de Espana, posiblemente con tono coloquial madrileño. " + - "Devuelve solo las palabras habladas, tal cual, nada mas."; + const systemPrompt = 'Eres un transcriptor de voz para usuarios de Madrid y Espana. Transcribe en espanol peninsular tal como se habla, conservando coloquialismos, muletillas y jerga (vale, tio, guay, mola, etc.) sin corregir ni formalizar. Responde unicamente con las palabras dichas, sin titulos, markdown, comillas ni explicaciones.'; + const userPrompt = 'Transcribe exactamente lo que dice la persona en este audio. Es espanol de Espana, posiblemente con tono coloquial madrileño. Devuelve solo las palabras habladas, tal cual, nada mas.'; try { - const payload = { + const response = await axios.post(this.OPENROUTER_URL, { model, messages: [ - { role: "system", content: systemPrompt }, - { - role: "user", - content: [ - { type: "text", text: userPrompt }, - { - type: "input_audio", - input_audio: { - data: base64Audio, - format, - }, - }, - ], - }, + { role: 'system', content: systemPrompt }, + { role: 'user', content: [{ type: 'text', text: userPrompt }, { type: 'input_audio', input_audio: { data: base64Audio, format } }] }, ], - max_tokens: 512, - temperature: 0, - }; - - this.logger.debug( - `[AUDIO 3/4] Enviando a OpenRouter — endpoint=${this.OPENROUTER_URL}, content_type=input_audio, format=${format}`, - ); - - const response = await axios.post(this.OPENROUTER_URL, payload, { - headers: this.headers, - }); - - const raw: string = - response.data.choices?.[0]?.message?.content?.trim() ?? ""; - const modeloUsado = response.data.model ?? model; - - this.logger.log( - `[AUDIO 3/4] Respuesta OpenRouter — modelo=${modeloUsado}, raw_length=${raw.length}, raw_preview="${raw.slice(0, 120).replace(/\n/g, "\\n")}"`, - ); - - if (!raw) { - this.logger.warn( - "[AUDIO 4/4] Modelo devolvio respuesta vacia para el audio", - ); - return FALLBACK; - } - - const transcripcion = this.limpiarTranscripcion(raw); - - this.logger.log( - `[AUDIO 4/4] Transcripcion final — length=${transcripcion.length}, texto="${transcripcion.slice(0, 200).replace(/\n/g, "\\n")}"`, - ); - - if (!transcripcion) { - this.logger.warn( - "[AUDIO 4/4] Transcripcion vacia tras limpieza, usando fallback", - ); - return FALLBACK; - } - - return transcripcion; - } catch (error) { - this.logger.error( - `[AUDIO 3/4] Error transcribiendo audio: ${error.message}`, - error.response?.data, - ); + max_tokens: 512, temperature: 0, + }, { headers: this.headers }); + const raw: string = response.data.choices?.[0]?.message?.content?.trim() ?? ''; + if (!raw) return FALLBACK; + return this.limpiarTranscripcion(raw) || FALLBACK; + } catch (error: any) { + this.logger.error(`Error transcribiendo audio: ${error.message}`); return FALLBACK; } } - /** - * Infiere informacion de una imagen segun el estado actual del lead. - */ - async inferirImagen( - imagenBuffer: Buffer, - mimeType = "image/jpeg", - estadoActual: EstadoLead = "en_proceso", - ): Promise { - const FALLBACK = - "Recibi tu imagen pero no pude analizarla bien. Puedes describirme lo que muestra?"; - + async inferirImagen(imagenBuffer: Buffer, mimeType = 'image/jpeg', estadoActual = 'en_proceso'): Promise { + const FALLBACK = 'Recibi tu imagen pero no pude analizarla bien. Puedes describirme lo que muestra?'; const promptPorEstado: Record = { - nuevo: - "Describe brevemente que tipo de espacio se ve en esta imagen y sus caracteristicas principales.", - en_proceso: - "Describe el espacio que aparece en la imagen: tipo de habitacion, materiales, estado actual, tamano aproximado.", - recopilando_datos: - "Analiza esta imagen de un espacio para reformar. Indica: tipo de espacio, metros cuadrados aproximados, materiales visibles, estilo actual, estado de conservacion.", - completado: - "Describe lo que ves en esta imagen relacionado con reformas o diseno de interiores.", - no_viable: "Describe brevemente que muestra esta imagen.", - perdido: "Describe brevemente que muestra esta imagen.", + nuevo: 'Describe brevemente que tipo de espacio se ve en esta imagen y sus caracteristicas principales.', + en_proceso: 'Describe el espacio que aparece en la imagen: tipo de habitacion, materiales, estado actual, tamano aproximado.', + recopilando_datos: 'Analiza esta imagen de un espacio para reformar. Indica: tipo de espacio, metros cuadrados aproximados, materiales visibles, estilo actual, estado de conservacion.', + completado: 'Describe lo que ves en esta imagen relacionado con reformas o diseno de interiores.', + no_viable: 'Describe brevemente que muestra esta imagen.', + perdido: 'Describe brevemente que muestra esta imagen.', }; - - const promptDeVision = - promptPorEstado[estadoActual] || - "Describe que ves en esta imagen en el contexto de una reforma de hogar."; + const promptDeVision = promptPorEstado[estadoActual] || 'Describe que ves en esta imagen en el contexto de una reforma de hogar.'; try { - const base64Imagen = imagenBuffer.toString("base64"); - - const response = await axios.post( - this.OPENROUTER_URL, - { - model: - process.env.MODEL_GENERADOR || - process.env.MODEL || - "anthropic/claude-sonnet-4-5", - messages: [ - { - role: "user", - content: [ - { type: "text", text: promptDeVision }, - { - type: "image_url", - image_url: { - url: `data:${mimeType};base64,${base64Imagen}`, - }, - }, - ], - }, - ], - max_tokens: 512, - }, - { headers: this.headers }, - ); - - const inferencia: string = - response.data.choices?.[0]?.message?.content?.trim(); - - if (!inferencia) { - this.logger.warn("Claude devolvio respuesta vacia para la imagen"); - return FALLBACK; - } - - this.logger.log( - `Imagen inferida correctamente (${inferencia.length} chars)`, - ); - return inferencia; - } catch (error) { - this.logger.error( - `Error analizando imagen: ${error.message}`, - error.response?.data, - ); + const base64Imagen = imagenBuffer.toString('base64'); + const response = await axios.post(this.OPENROUTER_URL, { + model: process.env.MODEL_GENERADOR || process.env.MODEL || 'anthropic/claude-sonnet-4-5', + messages: [{ role: 'user', content: [{ type: 'text', text: promptDeVision }, { type: 'image_url', image_url: { url: `data:${mimeType};base64,${base64Imagen}` } }] }], + max_tokens: 512, + }, { headers: this.headers }); + const inferencia: string = response.data.choices?.[0]?.message?.content?.trim(); + return inferencia || FALLBACK; + } catch (error: any) { + this.logger.error(`Error analizando imagen: ${error.message}`); return FALLBACK; } } diff --git a/mvp/Whatsapp-bot/src/scheduler/scheduler.module.ts b/mvp/Whatsapp-bot/src/scheduler/scheduler.module.ts deleted file mode 100644 index 4920bb8..0000000 --- a/mvp/Whatsapp-bot/src/scheduler/scheduler.module.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Module } from '@nestjs/common'; -import { SchedulerService } from './scheduler.service'; -import { LeadsModule } from '../leads/leads.module'; -import { ConversacionModule } from '../conversacion/conversacion.module'; -import { WhatsappModule } from '../whatsapp/whatsapp.module'; -import { ClaudeModule } from '../claude/claude.module'; - -@Module({ - imports: [LeadsModule, ConversacionModule, WhatsappModule, ClaudeModule], - providers: [SchedulerService], -}) -export class SchedulerModule {} diff --git a/mvp/Whatsapp-bot/src/scheduler/scheduler.service.ts b/mvp/Whatsapp-bot/src/scheduler/scheduler.service.ts deleted file mode 100644 index 8c8d711..0000000 --- a/mvp/Whatsapp-bot/src/scheduler/scheduler.service.ts +++ /dev/null @@ -1,86 +0,0 @@ -import { Injectable, Logger } from '@nestjs/common'; -import { Cron, CronExpression } from '@nestjs/schedule'; -import { LeadsService } from '../leads/leads.service'; -import { ConversacionService } from '../conversacion/conversacion.service'; -import { WhatsappService } from '../whatsapp/whatsapp.service'; -import { ClaudeService } from '../claude/claude.service'; - -@Injectable() -export class SchedulerService { - private readonly logger = new Logger(SchedulerService.name); - - constructor( - private readonly leadsService: LeadsService, - private readonly conversacionService: ConversacionService, - private readonly whatsappService: WhatsappService, - private readonly claudeService: ClaudeService, - ) {} - - /** - * Cada 5 minutos: - * 1. Busca leads con estado_actual = 'nuevo' - * 2. Los marca como 'en_proceso' - * 3. Les envía el mensaje de APERTURA de Luisa - * - * También marca como perdidos los leads en_proceso sin actividad > 48h. - */ - @Cron(CronExpression.EVERY_5_MINUTES) - async procesarLeadsNuevos(): Promise { - this.logger.log('[Scheduler] Buscando leads nuevos...'); - - // Primero limpiar leads inactivos - await this.leadsService.marcarLeadsPerdidos(); - - // Obtener leads nuevos - const leadsNuevos = await this.leadsService.findByEstado('nuevo'); - - if (leadsNuevos.length === 0) { - this.logger.log('[Scheduler] No hay leads nuevos.'); - return; - } - - this.logger.log( - `[Scheduler] Procesando ${leadsNuevos.length} lead(s) nuevo(s).`, - ); - - for (const lead of leadsNuevos) { - try { - // Marcar como en_proceso antes de hacer nada - await this.leadsService.updateEstado(lead, 'en_proceso'); - this.logger.log( - `[Scheduler] Lead id=${lead.id} marcado como en_proceso.`, - ); - - // Generar mensaje de apertura con Claude usando contexto mínimo - const historialVacio: Array<{ role: string; content: string }> = []; - const mensajeDeApertura = - 'APERTURA: Este es el primer mensaje. Preséntate y comienza el flujo de cualificación.'; - - const { respuesta } = await this.claudeService.llamarClaude( - lead, - historialVacio, - mensajeDeApertura, - ); - - // Guardar el mensaje de apertura en historial (como assistant) - await this.conversacionService.guardarMensaje( - lead.id, - 'assistant', - respuesta, - ); - - // Enviar por WhatsApp - await this.whatsappService.enviarApertura(lead.telefono, respuesta); - - this.logger.log( - `[Scheduler] Apertura enviada a lead id=${lead.id} (${lead.telefono}).`, - ); - } catch (error) { - this.logger.error( - `[Scheduler] Error procesando lead id=${lead.id}: ${error.message}`, - error.stack, - ); - } - } - } -} diff --git a/mvp/Whatsapp-bot/src/webhook/webhook-listener.ts b/mvp/Whatsapp-bot/src/webhook/webhook-listener.ts new file mode 100644 index 0000000..3953593 --- /dev/null +++ b/mvp/Whatsapp-bot/src/webhook/webhook-listener.ts @@ -0,0 +1,85 @@ +import { Injectable, Logger, OnApplicationBootstrap } from '@nestjs/common'; +import * as http from 'http'; +import { ApiClient } from '../api/api-client.service'; + +@Injectable() +export class WebhookListener implements OnApplicationBootstrap { + private readonly logger = new Logger(WebhookListener.name); + private server: http.Server | null = null; + + constructor(private readonly api: ApiClient) {} + + onApplicationBootstrap() { + const port = parseInt(process.env.WEBHOOK_PORT || '3001', 10); + this.server = http.createServer((req, res) => this.handleRequest(req, res)); + this.server.listen(port, () => { + this.logger.log(`Webhook listener en puerto ${port}`); + this.logger.log(`WHATSAPP_START → POST /whatsapp-start`); + this.logger.log(`WHATSAPP_PDF → POST /whatsapp-pdf`); + }); + } + + private async handleRequest(req: http.IncomingMessage, res: http.ServerResponse) { + if (req.method !== 'POST') { + res.writeHead(405).end('Method Not Allowed'); + return; + } + + let body = ''; + req.on('data', (chunk) => (body += chunk)); + req.on('end', async () => { + let payload: any; + try { + payload = JSON.parse(body); + } catch { + res.writeHead(400, { 'Content-Type': 'application/json' }).end(JSON.stringify({ ok: false, error: 'JSON invalido' })); + return; + } + + const url = req.url || ''; + try { + if (url === '/whatsapp-start') { + await this.handleWhatsappStart(payload); + res.writeHead(200, { 'Content-Type': 'application/json' }).end(JSON.stringify({ ok: true })); + } else if (url === '/whatsapp-pdf') { + await this.handleWhatsappPdf(payload); + res.writeHead(200, { 'Content-Type': 'application/json' }).end(JSON.stringify({ ok: true })); + } else { + res.writeHead(404).end('Not Found'); + } + } catch (err: any) { + this.logger.error(`Error handling ${url}: ${err.message}`); + res.writeHead(500, { 'Content-Type': 'application/json' }).end(JSON.stringify({ ok: false, error: err.message })); + } + }); + } + + // eslint-disable-next-line @typescript-eslint/no-unused-vars + private leadSessions = new Map(); + + private async handleWhatsappStart(payload: { leadId: string; telefono: string; nombre: string; empresa: string }) { + const { leadId, telefono, nombre } = payload; + this.logger.log(`[START] leadId=${leadId}, telefono=${telefono}, nombre=${nombre}`); + + this.leadSessions.set(telefono, { leadId, telefono, nombre, jid: null }); + this.logger.log(`Lead ${leadId} registrado en sesiones.`); + } + + getLeadIdByTelefono(telefono: string): string | null { + return this.leadSessions.get(telefono)?.leadId ?? null; + } + + registerJid(telefono: string, jid: string) { + const session = this.leadSessions.get(telefono); + if (session) { + session.jid = jid; + } + } + + private async handleWhatsappPdf(payload: { leadId: string; telefono: string; pdfBase64: string; filename: string }) { + this.logger.log(`[PDF] leadId=${payload.leadId}, filename=${payload.filename}`); + const { pdfEmitter } = await import('../whatsapp/whatsapp.service'); + const telefono = payload.telefono.startsWith('+') ? payload.telefono.slice(1) : payload.telefono; + pdfEmitter.emit('pdf', { ...payload, telefono }); + } +} diff --git a/mvp/Whatsapp-bot/src/webhook/webhook.module.ts b/mvp/Whatsapp-bot/src/webhook/webhook.module.ts new file mode 100644 index 0000000..fa25275 --- /dev/null +++ b/mvp/Whatsapp-bot/src/webhook/webhook.module.ts @@ -0,0 +1,10 @@ +import { Module } from '@nestjs/common'; +import { WebhookListener } from './webhook-listener'; +import { ApiModule } from '../api/api.module'; + +@Module({ + imports: [ApiModule], + providers: [WebhookListener], + exports: [WebhookListener], +}) +export class WebhookModule {} diff --git a/mvp/Whatsapp-bot/src/whatsapp/whatsapp.module.ts b/mvp/Whatsapp-bot/src/whatsapp/whatsapp.module.ts index 49ab747..5cd3729 100644 --- a/mvp/Whatsapp-bot/src/whatsapp/whatsapp.module.ts +++ b/mvp/Whatsapp-bot/src/whatsapp/whatsapp.module.ts @@ -5,9 +5,10 @@ import { LeadsModule } from '../leads/leads.module'; import { ConversacionModule } from '../conversacion/conversacion.module'; import { ClaudeModule } from '../claude/claude.module'; import { MediaModule } from '../media/media.module'; +import { WebhookModule } from '../webhook/webhook.module'; @Module({ - imports: [LeadsModule, ConversacionModule, ClaudeModule, MediaModule], + imports: [LeadsModule, ConversacionModule, ClaudeModule, MediaModule, WebhookModule], providers: [WhatsappService, WhatsappDebounceService], exports: [WhatsappService], }) diff --git a/mvp/Whatsapp-bot/src/whatsapp/whatsapp.service.ts b/mvp/Whatsapp-bot/src/whatsapp/whatsapp.service.ts index d833cbe..d230f86 100644 --- a/mvp/Whatsapp-bot/src/whatsapp/whatsapp.service.ts +++ b/mvp/Whatsapp-bot/src/whatsapp/whatsapp.service.ts @@ -1,9 +1,10 @@ +import { EventEmitter } from 'events'; import { Injectable, Logger, OnModuleInit, OnModuleDestroy, -} from "@nestjs/common"; +} from '@nestjs/common'; import makeWASocket, { DisconnectReason, useMultiFileAuthState, @@ -11,33 +12,42 @@ import makeWASocket, { WASocket, downloadMediaMessage, normalizeMessageContent, -} from "@whiskeysockets/baileys"; -import { Boom } from "@hapi/boom"; -import * as path from "path"; -const pino = require("pino"); -const QRCode = require("qrcode-terminal"); -import { LeadsService } from "../leads/leads.service"; -import { ConversacionService } from "../conversacion/conversacion.service"; -import { ClaudeService } from "../claude/claude.service"; -import { MediaService } from "../media/media.service"; -import { WhatsappDebounceService } from "./whatsapp-debounce.service"; -import { wrapSocket } from "baileys-antiban"; +} from '@whiskeysockets/baileys'; +import { Boom } from '@hapi/boom'; +import * as path from 'path'; +const pino = require('pino'); +const QRCode = require('qrcode-terminal'); +import { LeadsService } from '../leads/leads.service'; +import { ConversacionService } from '../conversacion/conversacion.service'; +import { ClaudeService } from '../claude/claude.service'; +import { MediaService } from '../media/media.service'; +import { WhatsappDebounceService } from './whatsapp-debounce.service'; +import { WebhookListener } from '../webhook/webhook-listener'; +import { ApiClient } from '../api/api-client.service'; +import { wrapSocket } from 'baileys-antiban'; -const ESTADOS_TERMINALES = [ - "completado", - "no_viable", - "perdido", - "fin_viable", - "fin_no_viable", -]; +export const pdfEmitter = new EventEmitter(); + +interface LeadContext { + leadId: string; + telefono: string; + nombre: string; + botStep: string; + viable: boolean | null; +} @Injectable() export class WhatsappService implements OnModuleInit, OnModuleDestroy { private readonly logger = new Logger(WhatsappService.name); private sock: WASocket | null = null; - private authDir = path.join(process.cwd(), "auth_info_baileys"); + private authDir = path.join(process.cwd(), 'auth_info_baileys'); private readonly ultimoMsgPorJid = new Map(); - private baileysLogger = pino({ level: "info" }); + private baileysLogger = pino({ level: 'info' }); + + // leadId por JID + private readonly jidToLeadId = new Map(); + // contexto de lead por leadId + private readonly leadCache = new Map(); constructor( private readonly leadsService: LeadsService, @@ -45,20 +55,51 @@ export class WhatsappService implements OnModuleInit, OnModuleDestroy { private readonly claudeService: ClaudeService, private readonly mediaService: MediaService, private readonly debounceService: WhatsappDebounceService, + private readonly webhookListener: WebhookListener, + private readonly api: ApiClient, ) {} async onModuleInit() { await this.conectar(); + this.escucharPdf(); } async onModuleDestroy() { - if (this.sock) { - this.sock.end(undefined); - } + if (this.sock) this.sock.end(undefined); + } + + private escucharPdf() { + pdfEmitter.on('pdf', async (payload: { leadId: string; telefono: string; pdfBase64: string; filename: string }) => { + this.logger.log(`[PDF] Recibido para leadId=${payload.leadId}`); + // Buscar JID por teléfono + let jid: string | null = null; + for (const [j, lid] of this.jidToLeadId) { + if (lid === payload.leadId) { + jid = j; + break; + } + } + if (!jid) { + jid = `${payload.telefono}@s.whatsapp.net`; + } + if (!this.sock) return; + try { + const safeSock = wrapSocket(this.sock); + await safeSock.sendMessage(jid, { + document: Buffer.from(payload.pdfBase64, 'base64'), + mimetype: 'application/pdf', + fileName: payload.filename, + caption: 'Aquí tienes tu presupuesto. Si tienes cualquier duda, estamos aquí.', + }); + this.logger.log(`PDF enviado a ${jid}`); + } catch (err: any) { + this.logger.error(`Error enviando PDF a ${jid}: ${err.message}`); + } + }); } private normalizarTelefono(jid: string): string { - return jid.split("@")[0].replace(/\D/g, ""); + return jid.split('@')[0].replace(/\D/g, ''); } private calcularDelayEscritura(longitudTexto: number): number { @@ -76,7 +117,7 @@ export class WhatsappService implements OnModuleInit, OnModuleDestroy { const { state, saveCreds } = await useMultiFileAuthState(this.authDir); const { version } = await fetchLatestBaileysVersion(); - this.baileysLogger = pino({ level: "info" }) as any; + this.baileysLogger = pino({ level: 'info' }) as any; this.sock = makeWASocket({ version, @@ -88,56 +129,37 @@ export class WhatsappService implements OnModuleInit, OnModuleDestroy { syncFullHistory: false, }); - this.sock.ev.on("creds.update", saveCreds); + this.sock.ev.on('creds.update', saveCreds); - this.sock.ev.on("connection.update", (update) => { + this.sock.ev.on('connection.update', (update) => { const { connection, lastDisconnect, qr } = update; if (qr) { QRCode.generate(qr, { small: true }); - console.log("\n📲 Escanea este QR con WhatsApp\n"); + console.log('\n📲 Escanea este QR con WhatsApp\n'); } - if (connection === "close") { + if (connection === 'close') { const shouldReconnect = - (lastDisconnect?.error as Boom)?.output?.statusCode !== - DisconnectReason.loggedOut; - - this.logger.warn( - `Conexion cerrada. Reconectar: ${shouldReconnect}. Razon: ${lastDisconnect?.error?.message}`, - ); - - if (shouldReconnect) { - setTimeout(() => this.conectar(), 5000); - } else { - this.logger.error( - "Sesion cerrada (logged out). Elimina auth_info_baileys y reinicia.", - ); - } - } else if (connection === "open") { - this.logger.log( - "✅ WhatsApp conectado. Luisa esta lista para recibir mensajes.", - ); + (lastDisconnect?.error as Boom)?.output?.statusCode !== DisconnectReason.loggedOut; + this.logger.warn(`Conexion cerrada. Reconectar: ${shouldReconnect}.`); + if (shouldReconnect) setTimeout(() => this.conectar(), 5000); + else this.logger.error('Sesion cerrada (logged out).'); + } else if (connection === 'open') { + this.logger.log('✅ WhatsApp conectado. Luisa esta lista.'); } }); - this.sock.ev.on("messages.upsert", async ({ messages, type }) => { - if (type !== "notify") return; - + this.sock.ev.on('messages.upsert', async ({ messages, type }) => { + if (type !== 'notify') return; for (const msg of messages) { if (msg.key.fromMe) continue; if (!msg.key.remoteJid) continue; - if (msg.key.remoteJid.includes("@g.us")) continue; + if (msg.key.remoteJid.includes('@g.us')) continue; const telefonoNormalizado = this.normalizarTelefono(msg.key.remoteJid); - const allowedNumber = process.env.ALLOWED_NUMBER?.replace(/\D/g, ""); - - if (allowedNumber && telefonoNormalizado !== allowedNumber) { - this.logger.debug( - `Mensaje ignorado: ${telefonoNormalizado} no coincide con ALLOWED_NUMBER`, - ); - continue; - } + const allowedNumber = process.env.ALLOWED_NUMBER?.replace(/\D/g, ''); + if (allowedNumber && telefonoNormalizado !== allowedNumber) continue; await this.encolarMensaje(msg); } @@ -147,21 +169,15 @@ export class WhatsappService implements OnModuleInit, OnModuleDestroy { private extraerTextoPlano(msg: any): string | null { const msgContent = msg.message; if (!msgContent) return null; - if (msgContent.conversation || msgContent.extendedTextMessage) { - const texto = - msgContent.conversation || msgContent.extendedTextMessage?.text || ""; + const texto = msgContent.conversation || msgContent.extendedTextMessage?.text || ''; return texto.trim() ? texto : null; } - return null; } private crearMsgConTexto(msg: any, texto: string): any { - return { - ...msg, - message: { conversation: texto }, - }; + return { ...msg, message: { conversation: texto } }; } private async encolarMensaje(msg: any): Promise { @@ -174,7 +190,6 @@ export class WhatsappService implements OnModuleInit, OnModuleDestroy { } this.ultimoMsgPorJid.set(jid, msg); - await this.debounceService.add(jid, textoPlano, async (combinedMessage) => { const baseMsg = this.ultimoMsgPorJid.get(jid) ?? msg; this.ultimoMsgPorJid.delete(jid); @@ -182,179 +197,184 @@ export class WhatsappService implements OnModuleInit, OnModuleDestroy { }); } + private async getOrCreateContext(telefono: string, jid: string): Promise { + const leadId = this.webhookListener.getLeadIdByTelefono(telefono); + + if (!leadId) { + this.logger.log(`Mensaje ignorado de ${telefono}: lead no registrado. Debe iniciarse desde la web.`); + return null; + } + + this.webhookListener.registerJid(telefono, jid); + this.jidToLeadId.set(jid, leadId); + + let ctx = this.leadCache.get(leadId); + if (!ctx) { + const lead = await this.api.getLead(leadId); + ctx = { + leadId, + telefono, + nombre: lead?.nombre || '', + botStep: lead?.botStep || 'nuevo', + viable: lead?.viable ?? null, + }; + this.leadCache.set(leadId, ctx); + } + return ctx; + } + private async procesarMensaje(msg: any): Promise { const jid = msg.key.remoteJid!; + if (jid.includes('@g.us')) return; - if (jid.includes("@g.us")) return; - - const telefono = jid.split("@")[0]; + const telefono = jid.split('@')[0]; try { - let lead = await this.leadsService.findOrCreate(telefono); + const ctx = await this.getOrCreateContext(telefono, jid); + if (!ctx) return; - if (ESTADOS_TERMINALES.includes(lead.estado_actual)) { - this.logger.log( - `Lead id=${lead.id} en estado=${lead.estado_actual}. Ignorando.`, - ); - return; - } + const primerMensajeDeUsuario = !this.jidToLeadId.has(jid); - let textoNormalizado = ""; + let textoNormalizado = ''; const msgContent = normalizeMessageContent(msg.message); - if (!msgContent) return; if (msgContent.conversation || msgContent.extendedTextMessage) { - textoNormalizado = - msgContent.conversation || msgContent.extendedTextMessage?.text || ""; + textoNormalizado = msgContent.conversation || msgContent.extendedTextMessage?.text || ''; } else if (msgContent.audioMessage) { const audioMeta = msgContent.audioMessage; - const mimeType = audioMeta.mimetype || "audio/ogg; codecs=opus"; - - this.logger.log( - `[AUDIO 1/4] Recibido — lead=${lead.id}, ptt=${audioMeta.ptt ?? false}, seconds=${audioMeta.seconds ?? "?"}, mimetype=${mimeType}, fileLength=${audioMeta.fileLength ?? "?"}, url=${audioMeta.url ? "si" : "no"}`, - ); - - if (!this.sock) { - this.logger.error("[AUDIO 1/4] Socket no disponible para descargar audio"); - return; - } - - const buffer = await downloadMediaMessage( - msg as any, - "buffer", - {}, - { - logger: this.baileysLogger, - reuploadRequest: this.sock.updateMediaMessage, - }, - ); - - const audioBuffer = Buffer.isBuffer(buffer) ? buffer : Buffer.from(buffer); - const magicHex = audioBuffer.subarray(0, 4).toString("hex"); - - this.logger.log( - `[AUDIO 1/4] Buffer descargado — size=${audioBuffer.length} bytes, magic_hex=${magicHex}, esperado_ogg=4f676753`, - ); - - textoNormalizado = await this.mediaService.transcribirAudio( - audioBuffer, - mimeType, - ); - - this.logger.log( - `[AUDIO 1/4] Transcripcion recibida en procesarMensaje — "${textoNormalizado.slice(0, 200).replace(/\n/g, "\\n")}"`, - ); - } else if (msgContent.imageMessage) { - this.logger.log( - `Imagen recibida de lead id=${lead.id}. Analizando con Vision...`, - ); - + const mimeType = audioMeta.mimetype || 'audio/ogg; codecs=opus'; + this.logger.log(`[AUDIO] Recibido — lead=${ctx.leadId}`); if (!this.sock) return; - - const buffer = await downloadMediaMessage( - msg as any, - "buffer", - {}, - { - logger: this.baileysLogger, - reuploadRequest: this.sock.updateMediaMessage, - }, - ); - const mimeType = msgContent.imageMessage.mimetype || "image/jpeg"; + const buffer = await downloadMediaMessage(msg as any, 'buffer', {}, { + logger: this.baileysLogger, + reuploadRequest: this.sock.updateMediaMessage, + }); + const audioBuffer = Buffer.isBuffer(buffer) ? buffer : Buffer.from(buffer); + textoNormalizado = await this.mediaService.transcribirAudio(audioBuffer, mimeType); + } else if (msgContent.imageMessage) { + this.logger.log(`Imagen recibida de lead ${ctx.leadId}`); + if (!this.sock) return; + const buffer = await downloadMediaMessage(msg as any, 'buffer', {}, { + logger: this.baileysLogger, + reuploadRequest: this.sock.updateMediaMessage, + }); + const mimeType = msgContent.imageMessage.mimetype || 'image/jpeg'; textoNormalizado = await this.mediaService.inferirImagen( Buffer.isBuffer(buffer) ? buffer : Buffer.from(buffer), mimeType, - lead.estado_actual, + 'en_proceso', ); if (msgContent.imageMessage.caption) { textoNormalizado = `${msgContent.imageMessage.caption}\n\n[Contenido de la imagen: ${textoNormalizado}]`; } } else { - this.logger.log( - `Tipo de mensaje no soportado de lead id=${lead.id}. Ignorando.`, - ); + this.logger.log(`Tipo de mensaje no soportado de lead ${ctx.leadId}. Ignorando.`); return; } if (!textoNormalizado.trim()) return; - this.logger.log(`USUARIO [${telefono}]: ${textoNormalizado}`); - await this.conversacionService.guardarMensaje( - lead.id, - "user", + if (primerMensajeDeUsuario) { + await this.api.registrarIntento(ctx.leadId, 'whatsapp', 1, 'exitoso', true); + } + + if (msgContent.imageMessage) { + const buffer = await downloadMediaMessage(msg as any, 'buffer', {}, { + logger: this.baileysLogger, + reuploadRequest: this.sock.updateMediaMessage, + }); + const base64 = Buffer.isBuffer(buffer) ? buffer.toString('base64') : Buffer.from(buffer).toString('base64'); + const mimeType = msgContent.imageMessage.mimetype || 'image/jpeg'; + await this.api.enviarIngesta(ctx.leadId, [{ + tipo: 'foto', + imagen: `data:${mimeType};base64,${base64}`, + zona: 'otro', + momento: 'antes', + }]); + } + + await this.conversacionService.guardarMensaje(ctx.leadId, 'user', textoNormalizado, { + botStep: ctx.botStep, + }); + + const historial = await this.conversacionService.obtenerHistorialComoMessages(ctx.leadId); + + const leadParaClaude = { + id: ctx.leadId, + telefono: ctx.telefono, + nombre: ctx.nombre, + estado_actual: ctx.botStep || 'nuevo', + espacio: null as string | null, + rango_m2: null as string | null, + estilo: null as string | null, + urgencia: null as string | null, + presupuesto_declarado: null as string | null, + viable: ctx.viable as boolean | null, + email: null as string | null, + }; + + const { respuesta, entidad, viable, nuevoEstado } = await this.claudeService.llamarClaude( + leadParaClaude as any, + historial.slice(0, -1), textoNormalizado, ); - const historial = - await this.conversacionService.obtenerHistorialComoMessages(lead.id); - - const { respuesta, entidad, viable, nuevoEstado } = - await this.claudeService.llamarClaude( - lead, - historial.slice(0, -1), - textoNormalizado, - ); - this.logger.log(`LUISA [${telefono}]: ${respuesta}`); - if ( - (entidad && Object.keys(entidad).length > 0) || - nuevoEstado || - (viable !== undefined && viable !== null) - ) { - lead = await this.leadsService.persistirTurno(lead.id, entidad ?? {}, { - nuevoEstado, - viable, - }); - this.logger.log( - `Lead id=${lead.id} en DB — estado=${lead.estado_actual}, espacio=${lead.espacio ?? "-"}, rango_m2=${lead.rango_m2 ?? "-"}, estilo=${lead.estilo ?? "-"}, urgencia=${lead.urgencia ?? "-"}, presupuesto=${lead.presupuesto_declarado ?? "-"}`, - ); + if ((entidad && Object.keys(entidad).length > 0) || nuevoEstado || viable !== undefined) { + const entidadMap: Record = {}; + if (entidad) { + for (const [k, v] of Object.entries(entidad)) { + const mapped = this.mapearCampoALegacy(k); + entidadMap[mapped] = v; + } + } + await this.leadsService.persistirTurno(ctx.leadId, entidadMap, { nuevoEstado, viable }); + if (nuevoEstado) ctx.botStep = nuevoEstado; + if (viable !== undefined) ctx.viable = viable; + this.logger.log(`Lead ${ctx.leadId} persistido — estado=${nuevoEstado || ctx.botStep}`); } - await this.conversacionService.guardarMensaje( - lead.id, - "assistant", - respuesta, - ); + await this.conversacionService.guardarMensaje(ctx.leadId, 'assistant', respuesta, { + botStep: ctx.botStep, + }); await this.enviarMensaje(jid, respuesta); - } catch (error) { - this.logger.error( - `Error procesando mensaje de ${telefono}: ${error.message}`, - error.stack, - ); + } catch (error: any) { + this.logger.error(`Error procesando mensaje de ${telefono}: ${error.message}`, error.stack); } } + private mapearCampoALegacy(campo: string): string { + const map: Record = { + espacio: 'espacio', + rango_m2: 'rangoM2', + estilo: 'estilo', + urgencia: 'urgencia', + presupuesto_declarado: 'presupuestoDeclarado', + nombre: 'nombre', + }; + return map[campo] || campo; + } + async enviarMensaje(jid: string, texto: string): Promise { if (!this.sock) return; - try { - const jidPresencia = jid.includes("@lid") - ? `${jid.split("@")[0]}@s.whatsapp.net` + const jidPresencia = jid.includes('@lid') + ? `${jid.split('@')[0]}@s.whatsapp.net` : jid; - - await this.sock.sendPresenceUpdate("composing", jidPresencia); + await this.sock.sendPresenceUpdate('composing', jidPresencia); await this.delay(this.calcularDelayEscritura(texto.length)); - await this.sock.sendPresenceUpdate("paused", jidPresencia); - + await this.sock.sendPresenceUpdate('paused', jidPresencia); const safeSock = wrapSocket(this.sock); await safeSock.sendMessage(jid, { text: texto }); this.logger.log(`Mensaje enviado a ${jid}`); - } catch (error) { + } catch (error: any) { this.logger.error(`Error enviando mensaje a ${jid}: ${error.message}`); } } - async enviarApertura( - telefono: string, - mensajeApertura: string, - ): Promise { - const jid = `${telefono}@s.whatsapp.net`; - await this.enviarMensaje(jid, mensajeApertura); - } - isConectado(): boolean { return this.sock !== null; } diff --git a/mvp/Whatsapp-bot/tsconfig.build.tsbuildinfo b/mvp/Whatsapp-bot/tsconfig.build.tsbuildinfo new file mode 100644 index 0000000..5ebbe2e --- /dev/null +++ b/mvp/Whatsapp-bot/tsconfig.build.tsbuildinfo @@ -0,0 +1 @@ +{"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.es2021.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.dom.asynciterable.d.ts","./node_modules/typescript/lib/lib.webworker.importscripts.d.ts","./node_modules/typescript/lib/lib.scripthost.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.es2021.promise.d.ts","./node_modules/typescript/lib/lib.es2021.string.d.ts","./node_modules/typescript/lib/lib.es2021.weakref.d.ts","./node_modules/typescript/lib/lib.es2021.intl.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/typescript/lib/lib.es2021.full.d.ts","./node_modules/dotenv/config.d.ts","./node_modules/reflect-metadata/index.d.ts","./node_modules/@nestjs/common/decorators/core/bind.decorator.d.ts","./node_modules/@nestjs/common/interfaces/abstract.interface.d.ts","./node_modules/@nestjs/common/interfaces/controllers/controller-metadata.interface.d.ts","./node_modules/@nestjs/common/interfaces/controllers/controller.interface.d.ts","./node_modules/@nestjs/common/interfaces/features/arguments-host.interface.d.ts","./node_modules/@nestjs/common/interfaces/exceptions/exception-filter.interface.d.ts","./node_modules/rxjs/dist/types/internal/subscription.d.ts","./node_modules/rxjs/dist/types/internal/subscriber.d.ts","./node_modules/rxjs/dist/types/internal/operator.d.ts","./node_modules/rxjs/dist/types/internal/observable.d.ts","./node_modules/rxjs/dist/types/internal/types.d.ts","./node_modules/rxjs/dist/types/internal/operators/audit.d.ts","./node_modules/rxjs/dist/types/internal/operators/audittime.d.ts","./node_modules/rxjs/dist/types/internal/operators/buffer.d.ts","./node_modules/rxjs/dist/types/internal/operators/buffercount.d.ts","./node_modules/rxjs/dist/types/internal/operators/buffertime.d.ts","./node_modules/rxjs/dist/types/internal/operators/buffertoggle.d.ts","./node_modules/rxjs/dist/types/internal/operators/bufferwhen.d.ts","./node_modules/rxjs/dist/types/internal/operators/catcherror.d.ts","./node_modules/rxjs/dist/types/internal/operators/combinelatestall.d.ts","./node_modules/rxjs/dist/types/internal/operators/combineall.d.ts","./node_modules/rxjs/dist/types/internal/operators/combinelatest.d.ts","./node_modules/rxjs/dist/types/internal/operators/combinelatestwith.d.ts","./node_modules/rxjs/dist/types/internal/operators/concat.d.ts","./node_modules/rxjs/dist/types/internal/operators/concatall.d.ts","./node_modules/rxjs/dist/types/internal/operators/concatmap.d.ts","./node_modules/rxjs/dist/types/internal/operators/concatmapto.d.ts","./node_modules/rxjs/dist/types/internal/operators/concatwith.d.ts","./node_modules/rxjs/dist/types/internal/operators/connect.d.ts","./node_modules/rxjs/dist/types/internal/operators/count.d.ts","./node_modules/rxjs/dist/types/internal/operators/debounce.d.ts","./node_modules/rxjs/dist/types/internal/operators/debouncetime.d.ts","./node_modules/rxjs/dist/types/internal/operators/defaultifempty.d.ts","./node_modules/rxjs/dist/types/internal/operators/delay.d.ts","./node_modules/rxjs/dist/types/internal/operators/delaywhen.d.ts","./node_modules/rxjs/dist/types/internal/operators/dematerialize.d.ts","./node_modules/rxjs/dist/types/internal/operators/distinct.d.ts","./node_modules/rxjs/dist/types/internal/operators/distinctuntilchanged.d.ts","./node_modules/rxjs/dist/types/internal/operators/distinctuntilkeychanged.d.ts","./node_modules/rxjs/dist/types/internal/operators/elementat.d.ts","./node_modules/rxjs/dist/types/internal/operators/endwith.d.ts","./node_modules/rxjs/dist/types/internal/operators/every.d.ts","./node_modules/rxjs/dist/types/internal/operators/exhaustall.d.ts","./node_modules/rxjs/dist/types/internal/operators/exhaust.d.ts","./node_modules/rxjs/dist/types/internal/operators/exhaustmap.d.ts","./node_modules/rxjs/dist/types/internal/operators/expand.d.ts","./node_modules/rxjs/dist/types/internal/operators/filter.d.ts","./node_modules/rxjs/dist/types/internal/operators/finalize.d.ts","./node_modules/rxjs/dist/types/internal/operators/find.d.ts","./node_modules/rxjs/dist/types/internal/operators/findindex.d.ts","./node_modules/rxjs/dist/types/internal/operators/first.d.ts","./node_modules/rxjs/dist/types/internal/subject.d.ts","./node_modules/rxjs/dist/types/internal/operators/groupby.d.ts","./node_modules/rxjs/dist/types/internal/operators/ignoreelements.d.ts","./node_modules/rxjs/dist/types/internal/operators/isempty.d.ts","./node_modules/rxjs/dist/types/internal/operators/last.d.ts","./node_modules/rxjs/dist/types/internal/operators/map.d.ts","./node_modules/rxjs/dist/types/internal/operators/mapto.d.ts","./node_modules/rxjs/dist/types/internal/notification.d.ts","./node_modules/rxjs/dist/types/internal/operators/materialize.d.ts","./node_modules/rxjs/dist/types/internal/operators/max.d.ts","./node_modules/rxjs/dist/types/internal/operators/merge.d.ts","./node_modules/rxjs/dist/types/internal/operators/mergeall.d.ts","./node_modules/rxjs/dist/types/internal/operators/mergemap.d.ts","./node_modules/rxjs/dist/types/internal/operators/flatmap.d.ts","./node_modules/rxjs/dist/types/internal/operators/mergemapto.d.ts","./node_modules/rxjs/dist/types/internal/operators/mergescan.d.ts","./node_modules/rxjs/dist/types/internal/operators/mergewith.d.ts","./node_modules/rxjs/dist/types/internal/operators/min.d.ts","./node_modules/rxjs/dist/types/internal/observable/connectableobservable.d.ts","./node_modules/rxjs/dist/types/internal/operators/multicast.d.ts","./node_modules/rxjs/dist/types/internal/operators/observeon.d.ts","./node_modules/rxjs/dist/types/internal/operators/onerrorresumenextwith.d.ts","./node_modules/rxjs/dist/types/internal/operators/pairwise.d.ts","./node_modules/rxjs/dist/types/internal/operators/partition.d.ts","./node_modules/rxjs/dist/types/internal/operators/pluck.d.ts","./node_modules/rxjs/dist/types/internal/operators/publish.d.ts","./node_modules/rxjs/dist/types/internal/operators/publishbehavior.d.ts","./node_modules/rxjs/dist/types/internal/operators/publishlast.d.ts","./node_modules/rxjs/dist/types/internal/operators/publishreplay.d.ts","./node_modules/rxjs/dist/types/internal/operators/race.d.ts","./node_modules/rxjs/dist/types/internal/operators/racewith.d.ts","./node_modules/rxjs/dist/types/internal/operators/reduce.d.ts","./node_modules/rxjs/dist/types/internal/operators/repeat.d.ts","./node_modules/rxjs/dist/types/internal/operators/repeatwhen.d.ts","./node_modules/rxjs/dist/types/internal/operators/retry.d.ts","./node_modules/rxjs/dist/types/internal/operators/retrywhen.d.ts","./node_modules/rxjs/dist/types/internal/operators/refcount.d.ts","./node_modules/rxjs/dist/types/internal/operators/sample.d.ts","./node_modules/rxjs/dist/types/internal/operators/sampletime.d.ts","./node_modules/rxjs/dist/types/internal/operators/scan.d.ts","./node_modules/rxjs/dist/types/internal/operators/sequenceequal.d.ts","./node_modules/rxjs/dist/types/internal/operators/share.d.ts","./node_modules/rxjs/dist/types/internal/operators/sharereplay.d.ts","./node_modules/rxjs/dist/types/internal/operators/single.d.ts","./node_modules/rxjs/dist/types/internal/operators/skip.d.ts","./node_modules/rxjs/dist/types/internal/operators/skiplast.d.ts","./node_modules/rxjs/dist/types/internal/operators/skipuntil.d.ts","./node_modules/rxjs/dist/types/internal/operators/skipwhile.d.ts","./node_modules/rxjs/dist/types/internal/operators/startwith.d.ts","./node_modules/rxjs/dist/types/internal/operators/subscribeon.d.ts","./node_modules/rxjs/dist/types/internal/operators/switchall.d.ts","./node_modules/rxjs/dist/types/internal/operators/switchmap.d.ts","./node_modules/rxjs/dist/types/internal/operators/switchmapto.d.ts","./node_modules/rxjs/dist/types/internal/operators/switchscan.d.ts","./node_modules/rxjs/dist/types/internal/operators/take.d.ts","./node_modules/rxjs/dist/types/internal/operators/takelast.d.ts","./node_modules/rxjs/dist/types/internal/operators/takeuntil.d.ts","./node_modules/rxjs/dist/types/internal/operators/takewhile.d.ts","./node_modules/rxjs/dist/types/internal/operators/tap.d.ts","./node_modules/rxjs/dist/types/internal/operators/throttle.d.ts","./node_modules/rxjs/dist/types/internal/operators/throttletime.d.ts","./node_modules/rxjs/dist/types/internal/operators/throwifempty.d.ts","./node_modules/rxjs/dist/types/internal/operators/timeinterval.d.ts","./node_modules/rxjs/dist/types/internal/operators/timeout.d.ts","./node_modules/rxjs/dist/types/internal/operators/timeoutwith.d.ts","./node_modules/rxjs/dist/types/internal/operators/timestamp.d.ts","./node_modules/rxjs/dist/types/internal/operators/toarray.d.ts","./node_modules/rxjs/dist/types/internal/operators/window.d.ts","./node_modules/rxjs/dist/types/internal/operators/windowcount.d.ts","./node_modules/rxjs/dist/types/internal/operators/windowtime.d.ts","./node_modules/rxjs/dist/types/internal/operators/windowtoggle.d.ts","./node_modules/rxjs/dist/types/internal/operators/windowwhen.d.ts","./node_modules/rxjs/dist/types/internal/operators/withlatestfrom.d.ts","./node_modules/rxjs/dist/types/internal/operators/zip.d.ts","./node_modules/rxjs/dist/types/internal/operators/zipall.d.ts","./node_modules/rxjs/dist/types/internal/operators/zipwith.d.ts","./node_modules/rxjs/dist/types/operators/index.d.ts","./node_modules/rxjs/dist/types/internal/scheduler/action.d.ts","./node_modules/rxjs/dist/types/internal/scheduler.d.ts","./node_modules/rxjs/dist/types/internal/testing/testmessage.d.ts","./node_modules/rxjs/dist/types/internal/testing/subscriptionlog.d.ts","./node_modules/rxjs/dist/types/internal/testing/subscriptionloggable.d.ts","./node_modules/rxjs/dist/types/internal/testing/coldobservable.d.ts","./node_modules/rxjs/dist/types/internal/testing/hotobservable.d.ts","./node_modules/rxjs/dist/types/internal/scheduler/asyncscheduler.d.ts","./node_modules/rxjs/dist/types/internal/scheduler/timerhandle.d.ts","./node_modules/rxjs/dist/types/internal/scheduler/asyncaction.d.ts","./node_modules/rxjs/dist/types/internal/scheduler/virtualtimescheduler.d.ts","./node_modules/rxjs/dist/types/internal/testing/testscheduler.d.ts","./node_modules/rxjs/dist/types/testing/index.d.ts","./node_modules/rxjs/dist/types/internal/symbol/observable.d.ts","./node_modules/rxjs/dist/types/internal/observable/dom/animationframes.d.ts","./node_modules/rxjs/dist/types/internal/behaviorsubject.d.ts","./node_modules/rxjs/dist/types/internal/replaysubject.d.ts","./node_modules/rxjs/dist/types/internal/asyncsubject.d.ts","./node_modules/rxjs/dist/types/internal/scheduler/asapscheduler.d.ts","./node_modules/rxjs/dist/types/internal/scheduler/asap.d.ts","./node_modules/rxjs/dist/types/internal/scheduler/async.d.ts","./node_modules/rxjs/dist/types/internal/scheduler/queuescheduler.d.ts","./node_modules/rxjs/dist/types/internal/scheduler/queue.d.ts","./node_modules/rxjs/dist/types/internal/scheduler/animationframescheduler.d.ts","./node_modules/rxjs/dist/types/internal/scheduler/animationframe.d.ts","./node_modules/rxjs/dist/types/internal/util/identity.d.ts","./node_modules/rxjs/dist/types/internal/util/pipe.d.ts","./node_modules/rxjs/dist/types/internal/util/noop.d.ts","./node_modules/rxjs/dist/types/internal/util/isobservable.d.ts","./node_modules/rxjs/dist/types/internal/lastvaluefrom.d.ts","./node_modules/rxjs/dist/types/internal/firstvaluefrom.d.ts","./node_modules/rxjs/dist/types/internal/util/argumentoutofrangeerror.d.ts","./node_modules/rxjs/dist/types/internal/util/emptyerror.d.ts","./node_modules/rxjs/dist/types/internal/util/notfounderror.d.ts","./node_modules/rxjs/dist/types/internal/util/objectunsubscribederror.d.ts","./node_modules/rxjs/dist/types/internal/util/sequenceerror.d.ts","./node_modules/rxjs/dist/types/internal/util/unsubscriptionerror.d.ts","./node_modules/rxjs/dist/types/internal/observable/bindcallback.d.ts","./node_modules/rxjs/dist/types/internal/observable/bindnodecallback.d.ts","./node_modules/rxjs/dist/types/internal/anycatcher.d.ts","./node_modules/rxjs/dist/types/internal/observable/combinelatest.d.ts","./node_modules/rxjs/dist/types/internal/observable/concat.d.ts","./node_modules/rxjs/dist/types/internal/observable/connectable.d.ts","./node_modules/rxjs/dist/types/internal/observable/defer.d.ts","./node_modules/rxjs/dist/types/internal/observable/empty.d.ts","./node_modules/rxjs/dist/types/internal/observable/forkjoin.d.ts","./node_modules/rxjs/dist/types/internal/observable/from.d.ts","./node_modules/rxjs/dist/types/internal/observable/fromevent.d.ts","./node_modules/rxjs/dist/types/internal/observable/fromeventpattern.d.ts","./node_modules/rxjs/dist/types/internal/observable/generate.d.ts","./node_modules/rxjs/dist/types/internal/observable/iif.d.ts","./node_modules/rxjs/dist/types/internal/observable/interval.d.ts","./node_modules/rxjs/dist/types/internal/observable/merge.d.ts","./node_modules/rxjs/dist/types/internal/observable/never.d.ts","./node_modules/rxjs/dist/types/internal/observable/of.d.ts","./node_modules/rxjs/dist/types/internal/observable/onerrorresumenext.d.ts","./node_modules/rxjs/dist/types/internal/observable/pairs.d.ts","./node_modules/rxjs/dist/types/internal/observable/partition.d.ts","./node_modules/rxjs/dist/types/internal/observable/race.d.ts","./node_modules/rxjs/dist/types/internal/observable/range.d.ts","./node_modules/rxjs/dist/types/internal/observable/throwerror.d.ts","./node_modules/rxjs/dist/types/internal/observable/timer.d.ts","./node_modules/rxjs/dist/types/internal/observable/using.d.ts","./node_modules/rxjs/dist/types/internal/observable/zip.d.ts","./node_modules/rxjs/dist/types/internal/scheduled/scheduled.d.ts","./node_modules/rxjs/dist/types/internal/config.d.ts","./node_modules/rxjs/dist/types/index.d.ts","./node_modules/@nestjs/common/interfaces/exceptions/rpc-exception-filter.interface.d.ts","./node_modules/@nestjs/common/interfaces/exceptions/ws-exception-filter.interface.d.ts","./node_modules/@nestjs/common/interfaces/external/validation-error.interface.d.ts","./node_modules/@nestjs/common/interfaces/features/execution-context.interface.d.ts","./node_modules/@nestjs/common/interfaces/features/can-activate.interface.d.ts","./node_modules/@nestjs/common/interfaces/features/custom-route-param-factory.interface.d.ts","./node_modules/@nestjs/common/interfaces/features/nest-interceptor.interface.d.ts","./node_modules/@nestjs/common/interfaces/features/paramtype.interface.d.ts","./node_modules/@nestjs/common/interfaces/type.interface.d.ts","./node_modules/@nestjs/common/interfaces/features/pipe-transform.interface.d.ts","./node_modules/@nestjs/common/enums/request-method.enum.d.ts","./node_modules/@nestjs/common/enums/http-status.enum.d.ts","./node_modules/@nestjs/common/enums/shutdown-signal.enum.d.ts","./node_modules/@nestjs/common/enums/version-type.enum.d.ts","./node_modules/@nestjs/common/enums/index.d.ts","./node_modules/@nestjs/common/interfaces/version-options.interface.d.ts","./node_modules/@nestjs/common/interfaces/middleware/middleware-configuration.interface.d.ts","./node_modules/@nestjs/common/interfaces/middleware/middleware-consumer.interface.d.ts","./node_modules/@nestjs/common/interfaces/middleware/middleware-config-proxy.interface.d.ts","./node_modules/@nestjs/common/interfaces/middleware/nest-middleware.interface.d.ts","./node_modules/@nestjs/common/interfaces/middleware/index.d.ts","./node_modules/@nestjs/common/interfaces/global-prefix-options.interface.d.ts","./node_modules/@nestjs/common/interfaces/hooks/before-application-shutdown.interface.d.ts","./node_modules/@nestjs/common/interfaces/hooks/on-application-bootstrap.interface.d.ts","./node_modules/@nestjs/common/interfaces/hooks/on-application-shutdown.interface.d.ts","./node_modules/@nestjs/common/interfaces/hooks/on-destroy.interface.d.ts","./node_modules/@nestjs/common/interfaces/hooks/on-init.interface.d.ts","./node_modules/@nestjs/common/interfaces/hooks/index.d.ts","./node_modules/@nestjs/common/interfaces/http/http-exception-body.interface.d.ts","./node_modules/@nestjs/common/interfaces/http/http-redirect-response.interface.d.ts","./node_modules/@nestjs/common/interfaces/external/cors-options.interface.d.ts","./node_modules/@nestjs/common/interfaces/external/https-options.interface.d.ts","./node_modules/@nestjs/common/services/logger.service.d.ts","./node_modules/@nestjs/common/interfaces/nest-application-context-options.interface.d.ts","./node_modules/@nestjs/common/interfaces/nest-application-options.interface.d.ts","./node_modules/@nestjs/common/interfaces/http/http-server.interface.d.ts","./node_modules/@nestjs/common/interfaces/http/message-event.interface.d.ts","./node_modules/@nestjs/common/interfaces/http/raw-body-request.interface.d.ts","./node_modules/@nestjs/common/interfaces/http/index.d.ts","./node_modules/@nestjs/common/interfaces/injectable.interface.d.ts","./node_modules/@nestjs/common/interfaces/microservices/nest-hybrid-application-options.interface.d.ts","./node_modules/@nestjs/common/interfaces/modules/forward-reference.interface.d.ts","./node_modules/@nestjs/common/interfaces/scope-options.interface.d.ts","./node_modules/@nestjs/common/interfaces/modules/injection-token.interface.d.ts","./node_modules/@nestjs/common/interfaces/modules/optional-factory-dependency.interface.d.ts","./node_modules/@nestjs/common/interfaces/modules/provider.interface.d.ts","./node_modules/@nestjs/common/interfaces/modules/module-metadata.interface.d.ts","./node_modules/@nestjs/common/interfaces/modules/dynamic-module.interface.d.ts","./node_modules/@nestjs/common/interfaces/modules/introspection-result.interface.d.ts","./node_modules/@nestjs/common/interfaces/modules/nest-module.interface.d.ts","./node_modules/@nestjs/common/interfaces/modules/index.d.ts","./node_modules/@nestjs/common/interfaces/nest-application-context.interface.d.ts","./node_modules/@nestjs/common/interfaces/websockets/web-socket-adapter.interface.d.ts","./node_modules/@nestjs/common/interfaces/nest-application.interface.d.ts","./node_modules/@nestjs/common/interfaces/nest-microservice.interface.d.ts","./node_modules/@nestjs/common/interfaces/index.d.ts","./node_modules/@nestjs/common/decorators/core/catch.decorator.d.ts","./node_modules/@nestjs/common/decorators/core/controller.decorator.d.ts","./node_modules/@nestjs/common/decorators/core/dependencies.decorator.d.ts","./node_modules/@nestjs/common/decorators/core/exception-filters.decorator.d.ts","./node_modules/@nestjs/common/decorators/core/inject.decorator.d.ts","./node_modules/@nestjs/common/decorators/core/injectable.decorator.d.ts","./node_modules/@nestjs/common/decorators/core/optional.decorator.d.ts","./node_modules/@nestjs/common/decorators/core/set-metadata.decorator.d.ts","./node_modules/@nestjs/common/decorators/core/use-guards.decorator.d.ts","./node_modules/@nestjs/common/decorators/core/use-interceptors.decorator.d.ts","./node_modules/@nestjs/common/decorators/core/use-pipes.decorator.d.ts","./node_modules/@nestjs/common/decorators/core/apply-decorators.d.ts","./node_modules/@nestjs/common/decorators/core/version.decorator.d.ts","./node_modules/@nestjs/common/decorators/core/index.d.ts","./node_modules/@nestjs/common/decorators/modules/global.decorator.d.ts","./node_modules/@nestjs/common/decorators/modules/module.decorator.d.ts","./node_modules/@nestjs/common/decorators/modules/index.d.ts","./node_modules/@nestjs/common/decorators/http/request-mapping.decorator.d.ts","./node_modules/@nestjs/common/decorators/http/route-params.decorator.d.ts","./node_modules/@nestjs/common/decorators/http/http-code.decorator.d.ts","./node_modules/@nestjs/common/decorators/http/create-route-param-metadata.decorator.d.ts","./node_modules/@nestjs/common/decorators/http/render.decorator.d.ts","./node_modules/@nestjs/common/decorators/http/header.decorator.d.ts","./node_modules/@nestjs/common/decorators/http/redirect.decorator.d.ts","./node_modules/@nestjs/common/decorators/http/sse.decorator.d.ts","./node_modules/@nestjs/common/decorators/http/index.d.ts","./node_modules/@nestjs/common/decorators/index.d.ts","./node_modules/@nestjs/common/exceptions/http.exception.d.ts","./node_modules/@nestjs/common/exceptions/bad-request.exception.d.ts","./node_modules/@nestjs/common/exceptions/unauthorized.exception.d.ts","./node_modules/@nestjs/common/exceptions/method-not-allowed.exception.d.ts","./node_modules/@nestjs/common/exceptions/not-found.exception.d.ts","./node_modules/@nestjs/common/exceptions/forbidden.exception.d.ts","./node_modules/@nestjs/common/exceptions/not-acceptable.exception.d.ts","./node_modules/@nestjs/common/exceptions/request-timeout.exception.d.ts","./node_modules/@nestjs/common/exceptions/conflict.exception.d.ts","./node_modules/@nestjs/common/exceptions/gone.exception.d.ts","./node_modules/@nestjs/common/exceptions/payload-too-large.exception.d.ts","./node_modules/@nestjs/common/exceptions/unsupported-media-type.exception.d.ts","./node_modules/@nestjs/common/exceptions/unprocessable-entity.exception.d.ts","./node_modules/@nestjs/common/exceptions/internal-server-error.exception.d.ts","./node_modules/@nestjs/common/exceptions/not-implemented.exception.d.ts","./node_modules/@nestjs/common/exceptions/http-version-not-supported.exception.d.ts","./node_modules/@nestjs/common/exceptions/bad-gateway.exception.d.ts","./node_modules/@nestjs/common/exceptions/service-unavailable.exception.d.ts","./node_modules/@nestjs/common/exceptions/gateway-timeout.exception.d.ts","./node_modules/@nestjs/common/exceptions/im-a-teapot.exception.d.ts","./node_modules/@nestjs/common/exceptions/precondition-failed.exception.d.ts","./node_modules/@nestjs/common/exceptions/misdirected.exception.d.ts","./node_modules/@nestjs/common/exceptions/index.d.ts","./node_modules/@nestjs/common/file-stream/interfaces/streamable-options.interface.d.ts","./node_modules/@nestjs/common/file-stream/interfaces/streamable-handler-response.interface.d.ts","./node_modules/@nestjs/common/file-stream/interfaces/index.d.ts","./node_modules/@nestjs/common/services/console-logger.service.d.ts","./node_modules/@nestjs/common/services/index.d.ts","./node_modules/@nestjs/common/file-stream/streamable-file.d.ts","./node_modules/@nestjs/common/file-stream/index.d.ts","./node_modules/@nestjs/common/module-utils/constants.d.ts","./node_modules/@nestjs/common/module-utils/interfaces/configurable-module-async-options.interface.d.ts","./node_modules/@nestjs/common/module-utils/interfaces/configurable-module-cls.interface.d.ts","./node_modules/@nestjs/common/module-utils/interfaces/configurable-module-host.interface.d.ts","./node_modules/@nestjs/common/module-utils/interfaces/index.d.ts","./node_modules/@nestjs/common/module-utils/configurable-module.builder.d.ts","./node_modules/@nestjs/common/module-utils/index.d.ts","./node_modules/@nestjs/common/pipes/default-value.pipe.d.ts","./node_modules/@nestjs/common/interfaces/external/class-transform-options.interface.d.ts","./node_modules/@nestjs/common/interfaces/external/transformer-package.interface.d.ts","./node_modules/@nestjs/common/interfaces/external/validator-options.interface.d.ts","./node_modules/@nestjs/common/interfaces/external/validator-package.interface.d.ts","./node_modules/@nestjs/common/utils/http-error-by-code.util.d.ts","./node_modules/@nestjs/common/pipes/validation.pipe.d.ts","./node_modules/@nestjs/common/pipes/parse-array.pipe.d.ts","./node_modules/@nestjs/common/pipes/parse-bool.pipe.d.ts","./node_modules/@nestjs/common/pipes/parse-int.pipe.d.ts","./node_modules/@nestjs/common/pipes/parse-float.pipe.d.ts","./node_modules/@nestjs/common/pipes/parse-enum.pipe.d.ts","./node_modules/@nestjs/common/pipes/parse-uuid.pipe.d.ts","./node_modules/@nestjs/common/pipes/file/interfaces/file.interface.d.ts","./node_modules/@nestjs/common/pipes/file/interfaces/index.d.ts","./node_modules/@nestjs/common/pipes/file/file-validator.interface.d.ts","./node_modules/@nestjs/common/pipes/file/file-type.validator.d.ts","./node_modules/@nestjs/common/pipes/file/max-file-size.validator.d.ts","./node_modules/@nestjs/common/pipes/file/parse-file-options.interface.d.ts","./node_modules/@nestjs/common/pipes/file/parse-file.pipe.d.ts","./node_modules/@nestjs/common/pipes/file/parse-file-pipe.builder.d.ts","./node_modules/@nestjs/common/pipes/file/index.d.ts","./node_modules/@nestjs/common/pipes/index.d.ts","./node_modules/@nestjs/common/serializer/class-serializer.interfaces.d.ts","./node_modules/@nestjs/common/serializer/class-serializer.interceptor.d.ts","./node_modules/@nestjs/common/serializer/decorators/serialize-options.decorator.d.ts","./node_modules/@nestjs/common/serializer/decorators/index.d.ts","./node_modules/@nestjs/common/serializer/index.d.ts","./node_modules/@nestjs/common/utils/forward-ref.util.d.ts","./node_modules/@nestjs/common/utils/index.d.ts","./node_modules/@nestjs/common/index.d.ts","./node_modules/axios/index.d.ts","./src/api/api-client.service.ts","./src/api/api.module.ts","./src/leads/leads.service.ts","./src/leads/leads.module.ts","./src/conversacion/conversacion.service.ts","./src/conversacion/conversacion.module.ts","./node_modules/protobufjs/index.d.ts","./node_modules/long/umd/types.d.ts","./node_modules/long/umd/index.d.ts","./node_modules/@whiskeysockets/baileys/waproto/index.d.ts","./node_modules/@whiskeysockets/baileys/lib/types/contact.d.ts","./node_modules/@whiskeysockets/baileys/lib/defaults/index.d.ts","./node_modules/@whiskeysockets/baileys/lib/wabinary/constants.d.ts","./node_modules/@whiskeysockets/baileys/lib/wabinary/types.d.ts","./node_modules/@whiskeysockets/baileys/lib/wabinary/encode.d.ts","./node_modules/@whiskeysockets/baileys/lib/wabinary/decode.d.ts","./node_modules/@whiskeysockets/baileys/lib/wabinary/generic-utils.d.ts","./node_modules/@whiskeysockets/baileys/lib/wabinary/jid-utils.d.ts","./node_modules/@whiskeysockets/baileys/lib/wabinary/index.d.ts","./node_modules/@whiskeysockets/baileys/lib/types/groupmetadata.d.ts","./node_modules/@types/node/compatibility/disposable.d.ts","./node_modules/@types/node/compatibility/indexable.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/compatibility/index.d.ts","./node_modules/@types/node/globals.typedarray.d.ts","./node_modules/@types/node/buffer.buffer.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/web-globals/abortcontroller.d.ts","./node_modules/@types/node/web-globals/domexception.d.ts","./node_modules/@types/node/web-globals/events.d.ts","./node_modules/buffer/index.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/file.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/undici-types/retry-handler.d.ts","./node_modules/undici-types/retry-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/util.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/eventsource.d.ts","./node_modules/undici-types/filereader.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/web-globals/fetch.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.generated.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/index.d.ts","./node_modules/pino-std-serializers/index.d.ts","./node_modules/sonic-boom/types/index.d.ts","./node_modules/pino/pino.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/logger.d.ts","./node_modules/@whiskeysockets/baileys/lib/signal/lid-mapping.d.ts","./node_modules/@whiskeysockets/baileys/lib/types/signal.d.ts","./node_modules/@whiskeysockets/baileys/lib/types/socket.d.ts","./node_modules/@whiskeysockets/baileys/lib/types/message.d.ts","./node_modules/@whiskeysockets/baileys/lib/types/auth.d.ts","./node_modules/@whiskeysockets/baileys/lib/types/bussines.d.ts","./node_modules/@hapi/boom/lib/index.d.ts","./node_modules/@whiskeysockets/baileys/lib/types/call.d.ts","./node_modules/@whiskeysockets/baileys/lib/types/label.d.ts","./node_modules/@whiskeysockets/baileys/lib/types/labelassociation.d.ts","./node_modules/@whiskeysockets/baileys/lib/types/state.d.ts","./node_modules/@whiskeysockets/baileys/lib/types/events.d.ts","./node_modules/@whiskeysockets/baileys/lib/types/chat.d.ts","./node_modules/@whiskeysockets/baileys/lib/types/product.d.ts","./node_modules/@whiskeysockets/baileys/lib/types/mex.d.ts","./node_modules/@whiskeysockets/baileys/lib/types/index.d.ts","./node_modules/hookified/dist/node/index.d.ts","./node_modules/@cacheable/utils/dist/index.d.ts","./node_modules/keyv/dist/index.d.ts","./node_modules/qified/node_modules/hookified/dist/node/index.d.ts","./node_modules/qified/dist/index.d.mts","./node_modules/@cacheable/memory/dist/index.d.ts","./node_modules/cacheable/dist/index.d.ts","./node_modules/@cacheable/node-cache/dist/index.d.ts","./node_modules/@whiskeysockets/baileys/lib/socket/client/types.d.ts","./node_modules/@whiskeysockets/baileys/lib/socket/client/websocket.d.ts","./node_modules/@whiskeysockets/baileys/lib/socket/client/index.d.ts","./node_modules/@whiskeysockets/baileys/lib/socket/index.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/generics.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/decode-wa-message.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/messages-media.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/messages.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/validate-connection.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/crypto.d.ts","./node_modules/@whiskeysockets/baileys/lib/types/usync.d.ts","./node_modules/@whiskeysockets/baileys/lib/wausync/protocols/usyncdeviceprotocol.d.ts","./node_modules/@whiskeysockets/baileys/lib/wausync/usyncuser.d.ts","./node_modules/@whiskeysockets/baileys/lib/wausync/protocols/usynccontactprotocol.d.ts","./node_modules/@whiskeysockets/baileys/lib/wausync/protocols/usyncstatusprotocol.d.ts","./node_modules/@whiskeysockets/baileys/lib/wausync/protocols/usyncdisappearingmodeprotocol.d.ts","./node_modules/@whiskeysockets/baileys/lib/wausync/protocols/usyncusernameprotocol.d.ts","./node_modules/@whiskeysockets/baileys/lib/wausync/protocols/index.d.ts","./node_modules/@whiskeysockets/baileys/lib/wausync/usyncquery.d.ts","./node_modules/@whiskeysockets/baileys/lib/wausync/index.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/signal.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/noise-handler.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/history.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/chat-utils.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/lt-hash.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/auth-utils.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/use-multi-file-auth-state.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/link-preview.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/event-buffer.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/process-message.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/message-retry-manager.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/browser-utils.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/companion-reg-client-utils.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/identity-change-handler.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/stanza-ack.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/index.d.ts","./node_modules/@whiskeysockets/baileys/lib/wam/constants.d.ts","./node_modules/@whiskeysockets/baileys/lib/wam/binaryinfo.d.ts","./node_modules/@whiskeysockets/baileys/lib/wam/encode.d.ts","./node_modules/@whiskeysockets/baileys/lib/wam/index.d.ts","./node_modules/@whiskeysockets/baileys/lib/index.d.ts","./src/claude/claude.service.ts","./src/media/media.service.ts","./src/whatsapp/whatsapp-debounce.service.ts","./src/webhook/webhook-listener.ts","./node_modules/baileys-antiban/dist/ratelimiter.d.ts","./node_modules/baileys-antiban/dist/warmup.d.ts","./node_modules/baileys-antiban/dist/health.d.ts","./node_modules/baileys-antiban/dist/timelockguard.d.ts","./node_modules/baileys-antiban/dist/replyratio.d.ts","./node_modules/baileys-antiban/dist/contactgraph.d.ts","./node_modules/baileys-antiban/dist/presencechoreographer.d.ts","./node_modules/baileys-antiban/dist/retrytracker.d.ts","./node_modules/baileys-antiban/dist/reconnectthrottle.d.ts","./node_modules/baileys-antiban/dist/lidresolver.d.ts","./node_modules/baileys-antiban/dist/jidcanonicalizer.d.ts","./node_modules/baileys-antiban/dist/sessionstability.d.ts","./node_modules/baileys-antiban/dist/presets.d.ts","./node_modules/baileys-antiban/dist/antiban.d.ts","./node_modules/baileys-antiban/dist/lidfirstresolver.d.ts","./node_modules/baileys-antiban/dist/retryreason.d.ts","./node_modules/baileys-antiban/dist/wrapper.d.ts","./node_modules/baileys-antiban/dist/messagequeue.d.ts","./node_modules/baileys-antiban/dist/contentvariator.d.ts","./node_modules/baileys-antiban/dist/webhooks.d.ts","./node_modules/baileys-antiban/dist/scheduler.d.ts","./node_modules/baileys-antiban/dist/stateadapter.d.ts","./node_modules/baileys-antiban/dist/persist.d.ts","./node_modules/baileys-antiban/dist/profiles.d.ts","./node_modules/baileys-antiban/dist/messagerecovery.d.ts","./node_modules/baileys-antiban/dist/devicefingerprint.d.ts","./node_modules/baileys-antiban/dist/credssnapshot.d.ts","./node_modules/baileys-antiban/dist/readreceiptvariance.d.ts","./node_modules/baileys-antiban/dist/proxyrotator.d.ts","./node_modules/baileys-antiban/dist/sessionfingerprint.d.ts","./node_modules/baileys-antiban/dist/stealthconnect.d.ts","./node_modules/baileys-antiban/dist/observability.d.ts","./node_modules/baileys-antiban/dist/index.d.ts","./src/whatsapp/whatsapp.service.ts","./src/claude/claude.module.ts","./src/media/media.module.ts","./src/webhook/webhook.module.ts","./src/whatsapp/whatsapp.module.ts","./src/app.module.ts","./node_modules/@nestjs/core/adapters/http-adapter.d.ts","./node_modules/@nestjs/core/adapters/index.d.ts","./node_modules/@nestjs/common/constants.d.ts","./node_modules/@nestjs/core/inspector/interfaces/edge.interface.d.ts","./node_modules/@nestjs/core/inspector/interfaces/entrypoint.interface.d.ts","./node_modules/@nestjs/core/inspector/interfaces/extras.interface.d.ts","./node_modules/@nestjs/core/inspector/interfaces/node.interface.d.ts","./node_modules/@nestjs/core/injector/settlement-signal.d.ts","./node_modules/@nestjs/core/injector/injector.d.ts","./node_modules/@nestjs/core/inspector/interfaces/serialized-graph-metadata.interface.d.ts","./node_modules/@nestjs/core/inspector/interfaces/serialized-graph-json.interface.d.ts","./node_modules/@nestjs/core/inspector/serialized-graph.d.ts","./node_modules/@nestjs/core/injector/module-token-factory.d.ts","./node_modules/@nestjs/core/injector/compiler.d.ts","./node_modules/@nestjs/core/injector/modules-container.d.ts","./node_modules/@nestjs/core/injector/container.d.ts","./node_modules/@nestjs/core/injector/instance-links-host.d.ts","./node_modules/@nestjs/core/injector/abstract-instance-resolver.d.ts","./node_modules/@nestjs/core/injector/module-ref.d.ts","./node_modules/@nestjs/core/injector/module.d.ts","./node_modules/@nestjs/core/injector/instance-wrapper.d.ts","./node_modules/@nestjs/core/router/interfaces/exclude-route-metadata.interface.d.ts","./node_modules/@nestjs/core/application-config.d.ts","./node_modules/@nestjs/core/constants.d.ts","./node_modules/@nestjs/core/discovery/discovery-module.d.ts","./node_modules/@nestjs/core/discovery/discovery-service.d.ts","./node_modules/@nestjs/core/discovery/index.d.ts","./node_modules/@nestjs/core/helpers/http-adapter-host.d.ts","./node_modules/@nestjs/core/exceptions/base-exception-filter.d.ts","./node_modules/@nestjs/core/exceptions/index.d.ts","./node_modules/@nestjs/core/helpers/context-id-factory.d.ts","./node_modules/@nestjs/common/interfaces/exceptions/exception-filter-metadata.interface.d.ts","./node_modules/@nestjs/core/exceptions/exceptions-handler.d.ts","./node_modules/@nestjs/core/router/router-proxy.d.ts","./node_modules/@nestjs/core/helpers/context-creator.d.ts","./node_modules/@nestjs/core/exceptions/base-exception-filter-context.d.ts","./node_modules/@nestjs/common/interfaces/exceptions/rpc-exception-filter-metadata.interface.d.ts","./node_modules/@nestjs/common/interfaces/exceptions/index.d.ts","./node_modules/@nestjs/core/exceptions/external-exception-filter.d.ts","./node_modules/@nestjs/core/exceptions/external-exceptions-handler.d.ts","./node_modules/@nestjs/core/exceptions/external-exception-filter-context.d.ts","./node_modules/@nestjs/core/guards/constants.d.ts","./node_modules/@nestjs/core/helpers/execution-context-host.d.ts","./node_modules/@nestjs/core/guards/guards-consumer.d.ts","./node_modules/@nestjs/core/guards/guards-context-creator.d.ts","./node_modules/@nestjs/core/guards/index.d.ts","./node_modules/@nestjs/core/interceptors/interceptors-consumer.d.ts","./node_modules/@nestjs/core/interceptors/interceptors-context-creator.d.ts","./node_modules/@nestjs/core/interceptors/index.d.ts","./node_modules/@nestjs/common/enums/route-paramtypes.enum.d.ts","./node_modules/@nestjs/core/pipes/params-token-factory.d.ts","./node_modules/@nestjs/core/pipes/pipes-consumer.d.ts","./node_modules/@nestjs/core/pipes/pipes-context-creator.d.ts","./node_modules/@nestjs/core/pipes/index.d.ts","./node_modules/@nestjs/core/helpers/context-utils.d.ts","./node_modules/@nestjs/core/injector/inquirer/inquirer-constants.d.ts","./node_modules/@nestjs/core/injector/inquirer/index.d.ts","./node_modules/@nestjs/core/interfaces/module-definition.interface.d.ts","./node_modules/@nestjs/core/interfaces/module-override.interface.d.ts","./node_modules/@nestjs/core/inspector/interfaces/enhancer-metadata-cache-entry.interface.d.ts","./node_modules/@nestjs/core/inspector/graph-inspector.d.ts","./node_modules/@nestjs/core/metadata-scanner.d.ts","./node_modules/@nestjs/core/scanner.d.ts","./node_modules/@nestjs/core/injector/instance-loader.d.ts","./node_modules/@nestjs/core/injector/lazy-module-loader/lazy-module-loader-options.interface.d.ts","./node_modules/@nestjs/core/injector/lazy-module-loader/lazy-module-loader.d.ts","./node_modules/@nestjs/core/injector/index.d.ts","./node_modules/@nestjs/core/helpers/interfaces/external-handler-metadata.interface.d.ts","./node_modules/@nestjs/core/helpers/interfaces/params-metadata.interface.d.ts","./node_modules/@nestjs/core/helpers/external-context-creator.d.ts","./node_modules/@nestjs/core/helpers/index.d.ts","./node_modules/@nestjs/core/inspector/initialize-on-preview.allowlist.d.ts","./node_modules/@nestjs/core/inspector/partial-graph.host.d.ts","./node_modules/@nestjs/core/inspector/index.d.ts","./node_modules/@nestjs/core/middleware/route-info-path-extractor.d.ts","./node_modules/@nestjs/core/middleware/routes-mapper.d.ts","./node_modules/@nestjs/core/middleware/builder.d.ts","./node_modules/@nestjs/core/middleware/index.d.ts","./node_modules/@nestjs/core/nest-application-context.d.ts","./node_modules/@nestjs/core/nest-application.d.ts","./node_modules/@nestjs/common/interfaces/microservices/nest-microservice-options.interface.d.ts","./node_modules/@nestjs/core/nest-factory.d.ts","./node_modules/@nestjs/core/repl/repl.d.ts","./node_modules/@nestjs/core/repl/index.d.ts","./node_modules/@nestjs/core/router/interfaces/routes.interface.d.ts","./node_modules/@nestjs/core/router/interfaces/index.d.ts","./node_modules/@nestjs/core/router/request/request-constants.d.ts","./node_modules/@nestjs/core/router/request/index.d.ts","./node_modules/@nestjs/core/router/router-module.d.ts","./node_modules/@nestjs/core/router/index.d.ts","./node_modules/@nestjs/core/services/reflector.service.d.ts","./node_modules/@nestjs/core/services/index.d.ts","./node_modules/@nestjs/core/index.d.ts","./node_modules/dotenv/lib/main.d.ts","./src/main.ts","./node_modules/@babel/types/lib/index.d.ts","./node_modules/@types/babel__generator/index.d.ts","./node_modules/@babel/parser/typings/babel-parser.d.ts","./node_modules/@types/babel__template/index.d.ts","./node_modules/@types/babel__traverse/index.d.ts","./node_modules/@types/babel__core/index.d.ts","./node_modules/@types/connect/index.d.ts","./node_modules/@types/body-parser/index.d.ts","./node_modules/@types/estree/index.d.ts","./node_modules/@types/json-schema/index.d.ts","./node_modules/@types/eslint/use-at-your-own-risk.d.ts","./node_modules/@types/eslint/index.d.ts","./node_modules/@types/eslint-scope/index.d.ts","./node_modules/@types/send/index.d.ts","./node_modules/@types/qs/index.d.ts","./node_modules/@types/range-parser/index.d.ts","./node_modules/@types/express-serve-static-core/index.d.ts","./node_modules/@types/http-errors/index.d.ts","./node_modules/@types/mime/index.d.ts","./node_modules/@types/serve-static/node_modules/@types/send/index.d.ts","./node_modules/@types/serve-static/index.d.ts","./node_modules/@types/express/index.d.ts","./node_modules/@types/istanbul-lib-coverage/index.d.ts","./node_modules/@types/istanbul-lib-report/index.d.ts","./node_modules/@types/istanbul-reports/index.d.ts","./node_modules/@types/stack-utils/index.d.ts","./node_modules/@types/yargs-parser/index.d.ts","./node_modules/@types/yargs/index.d.ts"],"fileIdsList":[[431,478,734],[431,478],[431,478,547,548,549],[431,478,547,549,553],[309,431,478],[404,431,478],[59,310,311,312,313,314,315,316,317,318,319,320,321,322,431,478],[262,296,431,478],[269,431,478],[259,309,404,431,478],[327,328,329,330,331,332,333,334,431,478],[264,431,478],[309,404,431,478],[323,326,335,431,478],[324,325,431,478],[300,431,478],[264,265,266,267,431,478],[337,431,478],[282,431,478],[337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,431,478],[365,431,478],[360,361,431,478],[362,364,431,478,508],[58,268,309,336,359,364,366,373,396,401,403,431,478],[64,262,431,478],[63,431,478],[64,254,255,431,478,670,675],[254,262,431,478],[63,253,431,478],[262,375,431,478],[256,377,431,478],[253,257,431,478],[63,309,431,478],[261,262,431,478],[274,431,478],[276,277,278,279,280,431,478],[268,431,478],[268,269,284,288,431,478],[282,283,289,290,291,431,478],[60,61,62,63,64,254,255,256,257,258,259,260,261,262,263,269,274,275,281,288,292,293,294,296,304,305,306,307,308,431,478],[287,431,478],[270,271,272,273,431,478],[262,270,271,431,478],[262,268,269,431,478],[262,272,431,478],[262,300,431,478],[295,297,298,299,300,301,302,303,431,478],[60,262,431,478],[296,431,478],[60,262,295,299,301,431,478],[271,431,478],[297,431,478],[262,296,297,298,431,478],[286,431,478],[262,266,286,304,431,478],[284,285,287,431,478],[258,260,269,275,284,289,305,306,309,431,478],[64,258,260,263,305,306,431,478],[267,431,478],[253,431,478],[286,309,367,371,431,478],[371,372,431,478],[309,367,431,478],[309,367,368,431,478],[368,369,431,478],[368,369,370,431,478],[263,431,478],[388,389,431,478],[388,431,478],[389,390,391,392,393,394,431,478],[387,431,478],[379,389,431,478],[389,390,391,392,393,431,478],[263,388,389,392,431,478],[374,380,381,382,383,384,385,386,395,431,478],[263,309,380,431,478],[263,379,431,478],[263,379,404,431,478],[256,262,263,375,376,377,378,379,431,478],[253,309,375,376,397,431,478],[309,375,431,478],[399,431,478],[336,397,431,478],[397,398,400,431,478],[286,363,431,478],[295,431,478],[268,309,431,478],[402,431,478],[284,288,309,404,431,478],[431,478,639],[309,404,431,478,659,660],[431,478,641],[404,431,478,653,658,659],[431,478,663,664],[64,309,431,478,654,659,673],[404,431,478,640,666],[63,404,431,478,667,670],[309,431,478,654,659,661,672,674,678],[63,431,478,676,677],[431,478,667],[253,309,404,431,478,681],[309,404,431,478,654,659,661,673],[431,478,680,682,683],[309,431,478,659],[431,478,659],[309,404,431,478,681],[63,309,404,431,478],[309,404,431,478,653,654,659,679,681,684,687,692,693,706,707],[253,431,478,639],[431,478,666,669,708],[431,478,693,705],[58,431,478,640,661,662,665,668,700,705,709,712,716,717,718,720,722,728,730],[309,404,431,478,647,655,658,659],[309,431,478,651],[309,404,431,478,641,650,651,652,653,658,659,661,731],[431,478,653,654,657,659,695,704],[309,404,431,478,646,658,659],[431,478,694],[404,431,478,654,659],[404,431,478,647,654,658,699],[309,404,431,478,641,646,658],[404,431,478,652,653,657,697,701,702,703],[404,431,478,647,654,655,656,658,659],[262,404,431,478],[309,431,478,641,654,657,659],[431,478,658],[431,478,643,644,645,654,658,659,698],[431,478,650,699,710,711],[404,431,478,641,659],[404,431,478,641],[431,478,642,643,644,645,648,650],[431,478,647],[431,478,649,650],[404,431,478,642,643,644,645,648,649],[431,478,685,686],[309,431,478,654,659,661,673],[431,478,696],[293,431,478],[274,309,431,478,713,714],[431,478,715],[309,431,478,661],[309,431,478,654,661],[287,309,404,431,478,647,654,655,656,658,659],[284,286,309,404,431,478,640,654,661,699,717],[287,288,404,431,478,639,719],[431,478,689,690,691],[404,431,478,688],[431,478,721],[404,431,478,506],[431,478,724,726,727],[431,478,723],[431,478,725],[404,431,478,653,658,724],[431,478,671],[309,404,431,478,641,654,658,659,661,696,697,699,700],[431,478,729],[431,478,734,735,736,737,738],[431,478,734,736],[431,478,492,526,740],[431,478,492,526],[431,478,742,745],[431,478,742,743,744],[431,478,745],[431,478,489,492,526,747,748,749],[431,478,741,748,750,754],[431,478,756],[431,478,757],[431,475,478],[431,477,478],[478],[431,478,483,511],[431,478,479,484,489,497,508,519],[431,478,479,480,489,497],[426,427,428,431,478],[431,478,481,520],[431,478,482,483,490,498],[431,478,483,508,516],[431,478,484,486,489,497],[431,477,478,485],[431,478,486,487],[431,478,488,489],[431,477,478,489],[431,478,489,490,491,508,519],[431,478,489,490,491,504,508,511],[431,478,486,489,492,497,508,519],[431,478,489,490,492,493,497,508,516,519],[431,478,492,494,508,516,519],[429,430,431,432,433,434,435,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525],[431,478,489,495],[431,478,496,519,524],[431,478,486,489,497,508],[431,478,498],[431,478,499],[431,477,478,500],[431,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525],[431,478,502],[431,478,503],[431,478,489,504,505],[431,478,504,506,520,522],[431,478,489,508,509,511],[431,478,510,511],[431,478,508,509],[431,478,511],[431,478,512],[431,475,478,508,513],[431,478,489,514,515],[431,478,514,515],[431,478,483,497,508,516],[431,478,517],[431,478,497,518],[431,478,492,503,519],[431,478,483,520],[431,478,508,521],[431,478,496,522],[431,478,523],[431,473,478],[431,473,478,489,491,500,508,511,519,522,524],[431,478,508,525],[431,478,490,508,526],[431,478,492,526,751,753],[431,478,490,508,526,752],[431,478,760],[415,431,478,546],[415,417,424,431,478,546,558,574,590,594],[431,478,530,546],[431,478,555,556],[431,478,489,519,546],[431,478,555],[431,478,530,536,537,539,546,554,557,595],[415,416,431,478,534],[415,431,478],[415,431,478,534,535,536,539,540,542],[415,416,425,431,478,534,535,537,538,539,540,541,543],[416,431,478,534],[416,425,431,478,532,533,534,535,538,541,542,543,544,545],[415,417,424,425,431,478,508,519,530,533],[431,478,534],[415,431,478,531],[415,425,431,478,494,519,530,532,534,535],[416,431,478,537],[424,431,478,574],[431,478,546],[415,424,431,478,530,546],[424,431,478,530,532,546],[415,424,431,478,546],[415,431,478,530,546],[424,431,478,530,554],[431,478,559,560,561,562,563,564,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589],[431,478,529],[415,431,478,530],[415,417,424,431,478,490,494,508,519,530,537,546],[415,431,478,508,530,546,561],[424,431,478,535,546,574],[424,431,478],[419,431,478],[415,419,431,478],[419,420,421,422,423,431,478],[418,431,478],[431,478,591],[431,478,592],[431,478,591,592,593],[431,478,567,572,573],[431,478,566,568,569,570,571],[424,431,478,565,567],[424,431,478,565],[412,414,431,478],[431,478,600,601,602,603,604,605,606,607,608,609,610,611,612],[431,478,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631],[431,478,609],[431,478,489],[431,478,613],[431,478,601],[431,478,602,603],[431,478,492],[431,478,625],[431,478,601,611,613],[431,478,547,548,549,551,552],[431,478,519,526],[413,431,478],[431,478,489,524,527,528],[431,478,550],[65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,81,83,84,85,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,116,117,118,119,121,122,123,124,125,126,127,128,129,130,131,132,134,135,136,137,138,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,182,184,185,186,188,197,199,200,201,202,203,204,206,207,209,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,431,478],[110,431,478],[66,69,431,478],[68,431,478],[68,69,431,478],[65,66,67,69,431,478],[66,68,69,226,431,478],[69,431,478],[65,68,110,431,478],[68,69,226,431,478],[68,234,431,478],[66,68,69,431,478],[78,431,478],[101,431,478],[122,431,478],[68,69,110,431,478],[69,117,431,478],[68,69,110,128,431,478],[68,69,128,431,478],[69,169,431,478],[69,110,431,478],[65,69,187,431,478],[65,69,188,431,478],[210,431,478],[194,196,431,478],[205,431,478],[194,431,478],[65,69,187,194,195,431,478],[187,188,196,431,478],[208,431,478],[65,69,194,195,196,431,478],[67,68,69,431,478],[65,69,431,478],[66,68,188,189,190,191,431,478],[110,188,189,190,191,431,478],[188,190,431,478],[68,189,190,192,193,197,431,478],[65,68,431,478],[69,212,431,478],[70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,112,113,114,115,116,118,119,120,121,122,123,124,125,126,127,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,182,183,184,185,431,478],[198,431,478],[431,478,489,526],[431,445,449,478,519],[431,445,478,508,519],[431,440,478],[431,442,445,478,516,519],[431,478,497,516],[431,478,526],[431,440,478,526],[431,442,445,478,497,519],[431,437,438,441,444,478,489,508,519],[431,445,452,478],[431,437,443,478],[431,445,466,467,478],[431,441,445,478,511,519,526],[431,466,478,526],[431,439,440,478,526],[431,445,478],[431,439,440,441,442,443,444,445,446,447,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,467,468,469,470,471,472,478],[431,445,460,478],[431,445,452,453,478],[431,443,445,453,454,478],[431,444,478],[431,437,440,445,478],[431,445,449,453,454,478],[431,449,478],[431,443,445,448,478,519],[431,437,442,445,452,478],[431,478,508],[431,440,445,466,478,524,526],[404,405,431,478],[404,406,431,478],[57,404,407,409,411,431,478,634,635,636,637],[404,409,431,478,596],[404,405,408,431,478,490,499],[404,410,431,478],[404,408,431,478],[58,431,478,638,731,732],[404,431,478,597],[404,406,431,478,492,633],[404,407,431,478,599],[404,409,411,431,478,598,633,634,635,636],[404,406,408,410,431,478,489,499,537,595,596,597,598,599,632]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","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":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","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":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","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":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","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":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"4a66df3ab5de5cfcda11538cffddd67ff6a174e003788e270914c1e0248483cf","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"8d6d51a5118d000ed3bfe6e1dd1335bebfff3fef23cd2af2f84a24d30f90cc90","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d8dedbec739bc79642c1e96e9bfc0b83b25b104a0486aebf016fc7b85b39f48","impliedFormat":1},{"version":"e89535c3ec439608bcd0f68af555d0e5ddf121c54abe69343549718bd7506b9c","impliedFormat":1},{"version":"622a984b60c294ffb2f9152cf1d4d12e91d2b733d820eec949cf54d63a3c1025","impliedFormat":1},{"version":"81aae92abdeaccd9c1723cef39232c90c1aed9d9cf199e6e2a523b7d8e058a11","impliedFormat":1},{"version":"a63a6c6806a1e519688ef7bd8ca57be912fc0764485119dbd923021eb4e79665","impliedFormat":1},{"version":"75b57b109d774acca1e151df21cf5cb54c7a1df33a273f0457b9aee4ebd36fb9","impliedFormat":1},{"version":"073ca26c96184db9941b5ec0ddea6981c9b816156d9095747809e524fdd90e35","impliedFormat":1},{"version":"e41d17a2ec23306d953cda34e573ed62954ca6ea9b8c8b74e013d07a6886ce47","impliedFormat":1},{"version":"241bd4add06f06f0699dcd58f3b334718d85e3045d9e9d4fa556f11f4d1569c1","impliedFormat":1},{"version":"2ae3787e1498b20aad1b9c2ee9ea517ec30e89b70d242d8e3e52d1e091039695","impliedFormat":1},{"version":"c7c72c4cffb1bc83617eefed71ed68cc89df73cab9e19507ccdecb3e72b4967e","affectsGlobalScope":true,"impliedFormat":1},{"version":"b8bff8a60af0173430b18d9c3e5c443eaa3c515617210c0c7b3d2e1743c19ecb","impliedFormat":1},{"version":"38b38db08e7121828294dec10957a7a9ff263e33e2a904b346516d4a4acca482","impliedFormat":1},{"version":"a76ebdf2579e68e4cfe618269c47e5a12a4e045c2805ed7f7ab37af8daa6b091","impliedFormat":1},{"version":"8a2aaea564939c22be05d665cc955996721bad6d43148f8fa21ae8f64afecd37","impliedFormat":1},{"version":"e59d36b7b6e8ba2dd36d032a5f5c279d2460968c8b4e691ca384f118fb09b52a","impliedFormat":1},{"version":"e96885c0684c9042ec72a9a43ef977f6b4b4a2728f4b9e737edcbaa0c74e5bf6","impliedFormat":1},{"version":"95950a187596e206d32d5d9c7b932901088c65ed8f9040e614aa8e321e0225ef","impliedFormat":1},{"version":"89e061244da3fc21b7330f4bd32f47c1813dd4d7f1dc3d0883d88943f035b993","impliedFormat":1},{"version":"e46558c2e04d06207b080138678020448e7fc201f3d69c2601b0d1456105f29a","impliedFormat":1},{"version":"71549375db52b1163411dba383b5f4618bdf35dc57fa327a1c7d135cf9bf67d1","impliedFormat":1},{"version":"7e6b2d61d6215a4e82ea75bc31a80ebb8ad0c2b37a60c10c70dd671e8d9d6d5d","impliedFormat":1},{"version":"78bea05df2896083cca28ed75784dde46d4b194984e8fc559123b56873580a23","impliedFormat":1},{"version":"5dd04ced37b7ea09f29d277db11f160df7fd73ba8b9dba86cb25552e0653a637","impliedFormat":1},{"version":"f74b81712e06605677ae1f061600201c425430151f95b5ef4d04387ad7617e6a","impliedFormat":1},{"version":"9a72847fcf4ac937e352d40810f7b7aec7422d9178451148296cf1aa19467620","impliedFormat":1},{"version":"3ae18f60e0b96fa1e025059b7d25b3247ba4dcb5f4372f6d6e67ce2adac74eac","impliedFormat":1},{"version":"2b9260f44a2e071450ae82c110f5dc8f330c9e5c3e85567ed97248330f2bf639","impliedFormat":1},{"version":"4f196e13684186bda6f5115fc4677a87cf84a0c9c4fc17b8f51e0984f3697b6d","impliedFormat":1},{"version":"61419f2c5822b28c1ea483258437c1faab87d00c6f84481aa22afb3380d8e9a4","impliedFormat":1},{"version":"64479aee03812264e421c0bf5104a953ca7b02740ba80090aead1330d0effe91","impliedFormat":1},{"version":"0521108c9f8ddb17654a0a54dae6ba9667c99eddccfd6af5748113e022d1c37a","impliedFormat":1},{"version":"c5570e504be103e255d80c60b56c367bf45d502ca52ee35c55dec882f6563b5c","impliedFormat":1},{"version":"ee764e6e9a7f2b987cc1a2c0a9afd7a8f4d5ebc4fdb66ad557a7f14a8c2bd320","impliedFormat":1},{"version":"0520b5093712c10c6ef23b5fea2f833bf5481771977112500045e5ea7e8e2b69","impliedFormat":1},{"version":"5c3cf26654cf762ac4d7fd7b83f09acfe08eef88d2d6983b9a5a423cb4004ca3","impliedFormat":1},{"version":"e60fa19cf7911c1623b891155d7eb6b7e844e9afdf5738e3b46f3b687730a2bd","impliedFormat":1},{"version":"b1fd72ff2bb0ba91bb588f3e5329f8fc884eb859794f1c4657a2bfa122ae54d0","impliedFormat":1},{"version":"6cf42a4f3cfec648545925d43afaa8bb364ac10a839ffed88249da109361b275","impliedFormat":1},{"version":"d7058e75920120b142a9d57be25562a3cd9a936269fd52908505f530105f2ec4","impliedFormat":1},{"version":"6df52b70d7f7702202f672541a5f4a424d478ee5be51a9d37b8ccbe1dbf3c0f2","impliedFormat":1},{"version":"0ca7f997e9a4d8985e842b7c882e521b6f63233c4086e9fe79dd7a9dc4742b5e","impliedFormat":1},{"version":"91046b5c6b55d3b194c81fd4df52f687736fad3095e9d103ead92bb64dc160ee","impliedFormat":1},{"version":"db5704fdad56c74dfc5941283c1182ed471bd17598209d3ac4a49faa72e43cfc","impliedFormat":1},{"version":"758e8e89559b02b81bc0f8fd395b17ad5aff75490c862cbe369bb1a3d1577c40","impliedFormat":1},{"version":"2ee64342c077b1868f1834c063f575063051edd6e2964257d34aad032d6b657c","impliedFormat":1},{"version":"6f6b4b3d670b6a5f0e24ea001c1b3d36453c539195e875687950a178f1730fa7","impliedFormat":1},{"version":"a472a1d3f25ce13a1d44911cd3983956ac040ce2018e155435ea34afb25f864c","impliedFormat":1},{"version":"b48b83a86dd9cfe36f8776b3ff52fcd45b0e043c0538dc4a4b149ba45fe367b9","impliedFormat":1},{"version":"792de5c062444bd2ee0413fb766e57e03cce7cdaebbfc52fc0c7c8e95069c96b","impliedFormat":1},{"version":"a79e3e81094c7a04a885bad9b049c519aace53300fb8a0fe4f26727cb5a746ce","impliedFormat":1},{"version":"93181bac0d90db185bb730c95214f6118ae997fe836a98a49664147fbcaf1988","impliedFormat":1},{"version":"8a4e89564d8ea66ad87ee3762e07540f9f0656a62043c910d819b4746fc429c5","impliedFormat":1},{"version":"b9011d99942889a0f95e120d06b698c628b0b6fdc3e6b7ecb459b97ed7d5bcc6","impliedFormat":1},{"version":"4d639cbbcc2f8f9ce6d55d5d503830d6c2556251df332dc5255d75af53c8a0e7","impliedFormat":1},{"version":"cdb48277f600ab5f429ecf1c5ea046683bc6b9f73f3deab9a100adac4b34969c","impliedFormat":1},{"version":"75be84956a29040a1afbe864c0a7a369dfdb739380072484eff153905ef867ee","impliedFormat":1},{"version":"b06b4adc2ae03331a92abd1b19af8eb91ec2bf8541747ee355887a167d53145e","impliedFormat":1},{"version":"c54166a85bd60f86d1ebb90ce0117c0ecb850b8a33b366691629fdf26f1bbbd8","impliedFormat":1},{"version":"0d417c15c5c635384d5f1819cc253a540fe786cc3fda32f6a2ae266671506a21","impliedFormat":1},{"version":"80f23f1d60fbed356f726b3b26f9d348dddbb34027926d10d59fad961e70a730","impliedFormat":1},{"version":"cb59317243a11379a101eb2f27b9df1022674c3df1df0727360a0a3f963f523b","impliedFormat":1},{"version":"cc20bb2227dd5de0aab0c8d697d1572f8000550e62c7bf5c92f212f657dd88c5","impliedFormat":1},{"version":"06b8a7d46195b6b3980e523ef59746702fd210b71681a83a5cf73799623621f9","impliedFormat":1},{"version":"860e4405959f646c101b8005a191298b2381af8f33716dc5f42097e4620608f8","impliedFormat":1},{"version":"f7e32adf714b8f25d3c1783473abec3f2e82d5724538d8dcf6f51baaaff1ca7a","impliedFormat":1},{"version":"d0da80c845999a16c24d0783033fb5366ada98df17867c98ad433ede05cd87fd","impliedFormat":1},{"version":"bfbf80f9cd4558af2d7b2006065340aaaced15947d590045253ded50aabb9bc5","impliedFormat":1},{"version":"fd9a991b51870325e46ebb0e6e18722d313f60cd8e596e645ec5ac15b96dbf4e","impliedFormat":1},{"version":"c3bd2b94e4298f81743d92945b80e9b56c1cdfb2bef43c149b7106a2491b1fc9","impliedFormat":1},{"version":"a246cce57f558f9ebaffd55c1e5673da44ea603b4da3b2b47eb88915d30a9181","impliedFormat":1},{"version":"d993eacc103c5a065227153c9aae8acea3a4322fe1a169ee7c70b77015bf0bb2","impliedFormat":1},{"version":"fc2b03d0c042aa1627406e753a26a1eaad01b3c496510a78016822ef8d456bb6","impliedFormat":1},{"version":"063c7ebbe756f0155a8b453f410ca6b76ffa1bbc1048735bcaf9c7c81a1ce35f","impliedFormat":1},{"version":"314e402cd481370d08f63051ae8b8c8e6370db5ee3b8820eeeaaf8d722a6dac6","impliedFormat":1},{"version":"9669075ac38ce36b638b290ba468233980d9f38bdc62f0519213b2fd3e2552ec","impliedFormat":1},{"version":"4d123de012c24e2f373925100be73d50517ac490f9ed3578ac82d0168bfbd303","impliedFormat":1},{"version":"656c9af789629aa36b39092bee3757034009620439d9a39912f587538033ce28","impliedFormat":1},{"version":"3ac3f4bdb8c0905d4c3035d6f7fb20118c21e8a17bee46d3735195b0c2a9f39f","impliedFormat":1},{"version":"1f453e6798ed29c86f703e9b41662640d4f2e61337007f27ac1c616f20093f69","impliedFormat":1},{"version":"af43b7871ff21c62bf1a54ec5c488e31a8d3408d5b51ff2e9f8581b6c55f2fc7","impliedFormat":1},{"version":"70550511d25cbb0b6a64dcac7fffc3c1397fd4cbeb6b23ccc7f9b794ab8a6954","impliedFormat":1},{"version":"af0fbf08386603a62f2a78c42d998c90353b1f1d22e05a384545f7accf881e0a","impliedFormat":1},{"version":"cefc20054d20b85b534206dbcedd509bb74f87f3d8bc45c58c7be3a76caa45e1","impliedFormat":1},{"version":"ad6eee4877d0f7e5244d34bc5026fd6e9cf8e66c5c79416b73f9f6ebf132f924","impliedFormat":1},{"version":"4888fd2bcfee9a0ce89d0df860d233e0cee8ee9c479b6bd5a5d5f9aae98342fe","impliedFormat":1},{"version":"f4749c102ced952aa6f40f0b579865429c4869f6d83df91000e98005476bee87","impliedFormat":1},{"version":"56654d2c5923598384e71cb808fac2818ca3f07dd23bb018988a39d5e64f268b","impliedFormat":1},{"version":"8b6719d3b9e65863da5390cb26994602c10a315aa16e7d70778a63fee6c4c079","impliedFormat":1},{"version":"05f56cd4b929977d18df8f3d08a4c929a2592ef5af083e79974b20a063f30940","impliedFormat":1},{"version":"547d3c406a21b30e2b78629ecc0b2ddaf652d9e0bdb2d59ceebce5612906df33","impliedFormat":1},{"version":"b3a4f9385279443c3a5568ec914a9492b59a723386161fd5ef0619d9f8982f97","impliedFormat":1},{"version":"3fe66aba4fbe0c3ba196a4f9ed2a776fe99dc4d1567a558fb11693e9fcc4e6ed","impliedFormat":1},{"version":"140eef237c7db06fc5adcb5df434ee21e81ee3a6fd57e1a75b8b3750aa2df2d8","impliedFormat":1},{"version":"0944ec553e4744efae790c68807a461720cff9f3977d4911ac0d918a17c9dd99","impliedFormat":1},{"version":"cb46b38d5e791acaa243bf342b8b5f8491639847463ac965b93896d4fb0af0d9","impliedFormat":1},{"version":"7c7d9e116fe51100ff766703e6b5e4424f51ad8977fe474ddd8d0959aa6de257","impliedFormat":1},{"version":"af70a2567e586be0083df3938b6a6792e6821363d8ef559ad8d721a33a5bcdaf","impliedFormat":1},{"version":"006cff3a8bcb92d77953f49a94cd7d5272fef4ab488b9052ef82b6a1260d870b","impliedFormat":1},{"version":"7d44bfdc8ee5e9af70738ff652c622ae3ad81815e63ab49bdc593d34cb3a68e5","impliedFormat":1},{"version":"339814517abd4dbc7b5f013dfd3b5e37ef0ea914a8bbe65413ecffd668792bc6","impliedFormat":1},{"version":"34d5bc0a6958967ec237c99f980155b5145b76e6eb927c9ffc57d8680326b5d8","impliedFormat":1},{"version":"9eae79b70c9d8288032cbe1b21d0941f6bd4f315e14786b2c1d10bccc634e897","impliedFormat":1},{"version":"18ce015ed308ea469b13b17f99ce53bbb97975855b2a09b86c052eefa4aa013a","impliedFormat":1},{"version":"5a931bc4106194e474be141e0bc1046629510dc95b9a0e4b02a3783847222965","impliedFormat":1},{"version":"5e5f371bf23d5ced2212a5ff56675aefbd0c9b3f4d4fdda1b6123ac6e28f058c","impliedFormat":1},{"version":"907c17ad5a05eecb29b42b36cc8fec6437be27cc4986bb3a218e4f74f606911c","impliedFormat":1},{"version":"ce60a562cd2a92f37a88f2ddd99a3abfbc5848d7baf38c48fb8d3243701fcb75","impliedFormat":1},{"version":"a726ad2d0a98bfffbe8bc1cd2d90b6d831638c0adc750ce73103a471eb9a891c","impliedFormat":1},{"version":"f44c0c8ce58d3dacac016607a1a90e5342d830ea84c48d2e571408087ae55894","impliedFormat":1},{"version":"75a315a098e630e734d9bc932d9841b64b30f7a349a20cf4717bf93044eff113","impliedFormat":1},{"version":"9131d95e32b3d4611d4046a613e022637348f6cebfe68230d4e81b691e4761a1","impliedFormat":1},{"version":"b03aa292cfdcd4edc3af00a7dbd71136dd067ec70a7536b655b82f4dd444e857","impliedFormat":1},{"version":"b6e2b0448ced813b8c207810d96551a26e7d7bb73255eea4b9701698f78846d6","impliedFormat":1},{"version":"8ae10cd85c1bd94d2f2d17c4cbd25c068a4b2471c70c2d96434239f97040747a","impliedFormat":1},{"version":"9ed5b799c50467b0c9f81ddf544b6bcda3e34d92076d6cab183c84511e45c39f","impliedFormat":1},{"version":"b4fa87cc1833839e51c49f20de71230e259c15b2c9c3e89e4814acc1d1ef10de","impliedFormat":1},{"version":"e90ac9e4ac0326faa1bc39f37af38ace0f9d4a655cd6d147713c653139cf4928","impliedFormat":1},{"version":"ea27110249d12e072956473a86fd1965df8e1be985f3b686b4e277afefdde584","impliedFormat":1},{"version":"8776a368617ce51129b74db7d55c3373dadcce5d0701e61d106e99998922a239","impliedFormat":1},{"version":"5666075052877fe2fdddd5b16de03168076cf0f03fbca5c1d4a3b8f43cba570c","impliedFormat":1},{"version":"9108ab5af05418f599ab48186193b1b07034c79a4a212a7f73535903ba4ca249","impliedFormat":1},{"version":"bb4e2cdcadf9c9e6ee2820af23cee6582d47c9c9c13b0dca1baaffe01fbbcb5f","impliedFormat":1},{"version":"6e30d0b5a1441d831d19fe02300ab3d83726abd5141cbcc0e2993fa0efd33db4","impliedFormat":1},{"version":"423f28126b2fc8d8d6fa558035309000a1297ed24473c595b7dec52e5c7ebae5","impliedFormat":1},{"version":"fb30734f82083d4790775dae393cd004924ebcbfde49849d9430bf0f0229dd16","impliedFormat":1},{"version":"2c92b04a7a4a1cd9501e1be338bf435738964130fb2ad5bd6c339ee41224ac4c","impliedFormat":1},{"version":"c5c5f0157b41833180419dacfbd2bcce78fb1a51c136bd4bcba5249864d8b9b5","impliedFormat":1},{"version":"02ae43d5bae42efcd5a00d3923e764895ce056bca005a9f4e623aa6b4797c8af","impliedFormat":1},{"version":"db6e01f17012a9d7b610ae764f94a1af850f5d98c9c826ad61747dca0fb800bd","impliedFormat":1},{"version":"8a44b424edee7bb17dc35a558cc15f92555f14a0441205613e0e50452ab3a602","impliedFormat":1},{"version":"24a00d0f98b799e6f628373249ece352b328089c3383b5606214357e9107e7d5","impliedFormat":1},{"version":"33637e3bc64edd2075d4071c55d60b32bdb0d243652977c66c964021b6fc8066","impliedFormat":1},{"version":"0f0ad9f14dedfdca37260931fac1edf0f6b951c629e84027255512f06a6ebc4c","impliedFormat":1},{"version":"16ad86c48bf950f5a480dc812b64225ca4a071827d3d18ffc5ec1ae176399e36","impliedFormat":1},{"version":"8cbf55a11ff59fd2b8e39a4aa08e25c5ddce46e3af0ed71fb51610607a13c505","impliedFormat":1},{"version":"d5bc4544938741f5daf8f3a339bfbf0d880da9e89e79f44a6383aaf056fe0159","impliedFormat":1},{"version":"97f9169882d393e6f303f570168ca86b5fe9aab556e9a43672dae7e6bb8e6495","impliedFormat":1},{"version":"7c9adb3fcd7851497818120b7e151465406e711d6a596a71b807f3a17853cb58","impliedFormat":1},{"version":"6752d402f9282dd6f6317c8c048aaaac27295739a166eed27e00391b358fed9a","impliedFormat":1},{"version":"9fd7466b77020847dbc9d2165829796bf7ea00895b2520ff3752ffdcff53564b","impliedFormat":1},{"version":"fbfc12d54a4488c2eb166ed63bab0fb34413e97069af273210cf39da5280c8d6","impliedFormat":1},{"version":"85a84240002b7cf577cec637167f0383409d086e3c4443852ca248fc6e16711e","impliedFormat":1},{"version":"84794e3abd045880e0fadcf062b648faf982aa80cfc56d28d80120e298178626","impliedFormat":1},{"version":"053d8b827286a16a669a36ffc8ccc8acdf8cc154c096610aa12348b8c493c7b8","impliedFormat":1},{"version":"3cce4ce031710970fe12d4f7834375f5fd455aa129af4c11eb787935923ff551","impliedFormat":1},{"version":"8f62cbd3afbd6a07bb8c934294b6bfbe437021b89e53a4da7de2648ecfc7af25","impliedFormat":1},{"version":"62c3621d34fb2567c17a2c4b89914ebefbfbd1b1b875b070391a7d4f722e55dc","impliedFormat":1},{"version":"c05ac811542e0b59cb9c2e8f60e983461f0b0e39cea93e320fad447ff8e474f3","impliedFormat":1},{"version":"8e7a5b8f867b99cc8763c0b024068fb58e09f7da2c4810c12833e1ca6eb11c4f","impliedFormat":1},{"version":"132351cbd8437a463757d3510258d0fa98fd3ebef336f56d6f359cf3e177a3ce","impliedFormat":1},{"version":"df877050b04c29b9f8409aa10278d586825f511f0841d1ec41b6554f8362092b","impliedFormat":1},{"version":"33d1888c3c27d3180b7fd20bac84e97ecad94b49830d5dd306f9e770213027d1","impliedFormat":1},{"version":"ee942c58036a0de88505ffd7c129f86125b783888288c2389330168677d6347f","impliedFormat":1},{"version":"a3f317d500c30ea56d41501632cdcc376dae6d24770563a5e59c039e1c2a08ec","impliedFormat":1},{"version":"eb21ddc3a8136a12e69176531197def71dc28ffaf357b74d4bf83407bd845991","impliedFormat":1},{"version":"0c1651a159995dfa784c57b4ea9944f16bdf8d924ed2d8b3db5c25d25749a343","impliedFormat":1},{"version":"aaa13958e03409d72e179b5d7f6ec5c6cc666b7be14773ae7b6b5ee4921e52db","impliedFormat":1},{"version":"0a86e049843ad02977a94bb9cdfec287a6c5a0a4b6b5391a6648b1a122072c5a","impliedFormat":1},{"version":"40f06693e2e3e58526b713c937895c02e113552dc8ba81ecd49cdd9596567ddb","impliedFormat":1},{"version":"4ed5e1992aedb174fb8f5aa8796aa6d4dcb8bd819b4af1b162a222b680a37fa0","impliedFormat":1},{"version":"d7f4bd46a8b97232ea6f8c28012b8d2b995e55e729d11405f159d3e00c51420a","impliedFormat":1},{"version":"d604d413aff031f4bfbdae1560e54ebf503d374464d76d50a2c6ded4df525712","impliedFormat":1},{"version":"e4f4f9cf1e3ac9fd91ada072e4d428ecbf0aa6dc57138fb797b8a0ca3a1d521c","impliedFormat":1},{"version":"12bfd290936824373edda13f48a4094adee93239b9a73432db603127881a300d","impliedFormat":1},{"version":"340ceb3ea308f8e98264988a663640e567c553b8d6dc7d5e43a8f3b64f780374","impliedFormat":1},{"version":"c5a769564e530fba3ec696d0a5cff1709b9095a0bdf5b0826d940d2fc9786413","impliedFormat":1},{"version":"7124ef724c3fc833a17896f2d994c368230a8d4b235baed39aa8037db31de54f","impliedFormat":1},{"version":"5de1c0759a76e7710f76899dcae601386424eab11fb2efaf190f2b0f09c3d3d3","impliedFormat":1},{"version":"9c5ee8f7e581f045b6be979f062a61bf076d362bf89c7f966b993a23424e8b0d","impliedFormat":1},{"version":"1a11df987948a86aa1ec4867907c59bdf431f13ed2270444bf47f788a5c7f92d","impliedFormat":1},{"version":"8018dd2e95e7ce6e613ddd81672a54532614dc745520a2f9e3860ff7fb1be0ca","impliedFormat":1},{"version":"b756781cd40d465da57d1fc6a442c34ae61fe8c802d752aace24f6a43fedacee","impliedFormat":1},{"version":"0fe76167c87289ea094e01616dcbab795c11b56bad23e1ef8aba9aa37e93432a","impliedFormat":1},{"version":"3a45029dba46b1f091e8dc4d784e7be970e209cd7d4ff02bd15270a98a9ba24b","impliedFormat":1},{"version":"032c1581f921f8874cf42966f27fd04afcabbb7878fa708a8251cac5415a2a06","impliedFormat":1},{"version":"69c68ed9652842ce4b8e495d63d2cd425862104c9fb7661f72e7aa8a9ef836f8","impliedFormat":1},{"version":"0e704ee6e9fd8b6a5a7167886f4d8915f4bc22ed79f19cb7b32bd28458f50643","impliedFormat":1},{"version":"06f62a14599a68bcde148d1efd60c2e52e8fa540cc7dcfa4477af132bb3de271","impliedFormat":1},{"version":"904a96f84b1bcee9a7f0f258d17f8692e6652a0390566515fe6741a5c6db8c1c","impliedFormat":1},{"version":"11f19ce32d21222419cecab448fa335017ebebf4f9e5457c4fa9df42fa2dcca7","impliedFormat":1},{"version":"2e8ee2cbb5e9159764e2189cf5547aebd0e6b0d9a64d479397bb051cd1991744","impliedFormat":1},{"version":"1b0471d75f5adb7f545c1a97c02a0f825851b95fe6e069ac6ecaa461b8bb321d","impliedFormat":1},{"version":"1d157c31a02b1e5cca9bc495b3d8d39f4b42b409da79f863fb953fbe3c7d4884","impliedFormat":1},{"version":"07baaceaec03d88a4b78cb0651b25f1ae0322ac1aa0b555ae3749a79a41cba86","impliedFormat":1},{"version":"619a132f634b4ebe5b4b4179ea5870f62f2cb09916a25957bff17b408de8b56d","impliedFormat":1},{"version":"f60fa446a397eb1aead9c4e568faf2df8068b4d0306ebc075fb4be16ed26b741","impliedFormat":1},{"version":"f3cb784be4d9e91f966a0b5052a098d9b53b0af0d341f690585b0cc05c6ca412","impliedFormat":1},{"version":"350f63439f8fe2e06c97368ddc7fb6d6c676d54f59520966f7dbbe6a4586014e","impliedFormat":1},{"version":"eba613b9b357ac8c50a925fa31dc7e65ff3b95a07efbaa684b624f143d8d34ba","impliedFormat":1},{"version":"45b74185005ed45bec3f07cac6e4d68eaf02ead9ff5a66721679fb28020e5e7c","impliedFormat":1},{"version":"0f6199602df09bdb12b95b5434f5d7474b1490d2cd8cc036364ab3ba6fd24263","impliedFormat":1},{"version":"c8ca7fd9ec7a3ec82185bfc8213e4a7f63ae748fd6fced931741d23ef4ea3c0f","impliedFormat":1},{"version":"5c6a8a3c2a8d059f0592d4eab59b062210a1c871117968b10797dee36d991ef7","impliedFormat":1},{"version":"ad77fd25ece8e09247040826a777dc181f974d28257c9cd5acb4921b51967bd8","impliedFormat":1},{"version":"795a08ae4e193f345073b49f68826ab6a9b280400b440906e4ec5c237ae777e6","impliedFormat":1},{"version":"8153df63cf65122809db17128e5918f59d6bb43a371b5218f4430c4585f64085","impliedFormat":1},{"version":"a8150bc382dd12ce58e00764d2366e1d59a590288ee3123af8a4a2cb4ef7f9df","impliedFormat":1},{"version":"5adfaf2f9f33957264ad199a186456a4676b2724ed700fc313ff945d03372169","impliedFormat":1},{"version":"d5c41a741cd408c34cb91f84468f70e9bda3dfeabf33251a61039b3cdb8b22d8","impliedFormat":1},{"version":"c91d3f9753a311284e76cdcb348cbb50bca98733336ec726b54d77b7361b34de","impliedFormat":1},{"version":"cbaf4a4aa8a8c02aa681c5870d5c69127974de29b7e01df570edec391a417959","impliedFormat":1},{"version":"c7135e329a18b0e712378d5c7bc2faec6f5ab0e955ea0002250f9e232af8b3e4","impliedFormat":1},{"version":"340a45cd77b41d8a6deda248167fa23d3dc67ec798d411bd282f7b3d555b1695","impliedFormat":1},{"version":"fae330f86bc10db6841b310f32367aaa6f553036a3afc426e0389ddc5566cd74","impliedFormat":1},{"version":"cf25d45c02d5fd5d7adb16230a0e1d6715441eef5c0a79a21bfeaa9bbc058939","impliedFormat":1},{"version":"54c3822eaf6436f2eddc92dd6e410750465aba218adbf8ce5d488d773919ec01","impliedFormat":1},{"version":"99d99a765426accf8133737843fb024a154dc6545fc0ffbba968a7c0b848959d","impliedFormat":1},{"version":"c782c5fd5fa5491c827ecade05c3af3351201dd1c7e77e06711c8029b7a9ee4d","impliedFormat":1},{"version":"883d2104e448bb351c49dd9689a7e8117b480b614b2622732655cef03021bf6d","impliedFormat":1},{"version":"d9b00ee2eca9b149663fdba1c1956331841ae296ee03eaaff6c5becbc0ff1ea8","impliedFormat":1},{"version":"09a7e04beb0547c43270b327c067c85a4e2154372417390731dfe092c4350998","impliedFormat":1},{"version":"eee530aaa93e9ec362e3941ee8355e2d073c7b21d88c2af4713e3d701dab8fef","impliedFormat":1},{"version":"28d47319b97dbeee9130b78eae03b2061d46dedbf92b0d9de13ed7ab8399ccd0","impliedFormat":1},{"version":"8b8b92781a6bf150f9ee83f3d8ee278b6cdb98b8308c7ab3413684fc5d9078ef","impliedFormat":1},{"version":"7a0e4cd92545ad03910fd019ae9838718643bd4dde39881c745f236914901dfa","impliedFormat":1},{"version":"c99ebd20316217e349004ee1a0bc74d32d041fb6864093f10f31984c737b8cad","impliedFormat":1},{"version":"6f622e7f054f5ab86258362ac0a64a2d6a27f1e88732d6f5f052f422e08a70e7","impliedFormat":1},{"version":"d62d2ef93ceeb41cf9dfab25989a1e5f9ca5160741aac7f1453c69a6c14c69be","impliedFormat":1},{"version":"1491e80d72873fc586605283f2d9056ee59b166333a769e64378240df130d1c9","impliedFormat":1},{"version":"c32c073d389cfaa3b3e562423e16c2e6d26b8edebbb7d73ccffff4aa66f2171d","impliedFormat":1},{"version":"eca72bf229eecadb63e758613c62fab13815879053539a22477d83a48a21cd73","impliedFormat":1},{"version":"633db46fd1765736409a4767bfc670861468dde60dbb9a501fba4c1b72f8644d","impliedFormat":1},{"version":"689390db63cb282e6d0e5ce9b8f1ec2ec0912d0e2e6dac7235699a15ad17d339","impliedFormat":1},{"version":"f2ee748883723aa9325e5d7f30fce424f6a786706e1b91a5a55237c78ee89c4a","impliedFormat":1},{"version":"d928324d17146fce30b99a28d1d6b48648feac72bbd23641d3ce5ac34aefdfee","impliedFormat":1},{"version":"142f5190d730259339be1433931c0eb31ae7c7806f4e325f8a470bd9221b6533","impliedFormat":1},{"version":"c33a88f2578e8df2fdf36c6a0482bbee615eb3234c8f084ba31a9a96bd306b7f","impliedFormat":1},{"version":"22cca068109eb0e6b4f8acc3fe638d1e6ac277e2044246438763319792b546a1","impliedFormat":1},{"version":"8776e64e6165838ac152fa949456732755b0976d1867ae5534ce248f0ccd7f41","impliedFormat":1},{"version":"66cd33c4151ea27f6e17c6071652eadde9da1b3637dae65fd060212211c695ce","impliedFormat":1},{"version":"5c4c5b49bbb01828402bb04af1d71673b18852c11b7e95bfd5cf4c3d80d352c8","impliedFormat":1},{"version":"7030df3d920343df00324df59dc93a959a33e0f4940af3fefef8c07b7ee329bf","impliedFormat":1},{"version":"a96bc00e0c356e29e620eaec24a56d6dd7f4e304feefcc99066a1141c6fe05a7","impliedFormat":1},{"version":"d12cc0e5b09943c4cd0848f787eb9d07bf78b60798e4588c50582db9d4decc70","impliedFormat":1},{"version":"53b094f1afe442490555eeeb0384fc1ceb487560c83e31f9c64fb934c2dccd94","impliedFormat":1},{"version":"19c3760af3cbc9da99d5b7763b9e33aaf8d018bc2ed843287b7ff4343adf4634","impliedFormat":1},{"version":"9d1e38aeb76084848d2fcd39b458ec88246de028c0f3f448b304b15d764b23d2","impliedFormat":1},{"version":"d406da1eccf18cec56fd29730c24af69758fe3ff49c4f94335e797119cbc0554","impliedFormat":1},{"version":"4898c93890a136da9156c75acd1a80a941a961b3032a0cf14e1fa09a764448b7","impliedFormat":1},{"version":"f5d7a845e3e1c6c27351ea5f358073d0b0681537a2da6201fab254aa434121d3","impliedFormat":1},{"version":"9ddf8e9069327faa75d20135cab675779844f66590249769c3d35dd2a38c2ba9","impliedFormat":1},{"version":"d7c30f0abfe9e197e376b016086cf66b2ffb84015139963f37301ed0da9d3d0d","impliedFormat":1},{"version":"ff75bba0148f07775bcb54bf4823421ed4ebdb751b3bf79cc003bd22e49d7d73","impliedFormat":1},{"version":"d40d20ac633703a7333770bfd60360126fc3302d5392d237bbb76e8c529a4f95","impliedFormat":1},{"version":"35a9867207c488061fb4f6fe4715802fbc164b4400018d2fa0149ad02db9a61c","impliedFormat":1},{"version":"91bf47a209ad0eae090023c3ebc1165a491cf9758799368ffcbee8dbe7448f33","impliedFormat":1},{"version":"0abe2cd72812bbfc509975860277c7cd6f6e0be95d765a9da77fee98264a7e32","impliedFormat":1},{"version":"13286c0c8524606b17a8d68650970bab896fb505f348f71601abf0f2296e8913","impliedFormat":1},{"version":"fc2a131847515b3dff2f0e835633d9a00a9d03ed59e690e27eec85b7b0522f92","impliedFormat":1},{"version":"90433c678bc26751eb7a5d54a2bb0a14be6f5717f69abb5f7a04afc75dce15a4","impliedFormat":1},{"version":"cd0565ace87a2d7802bf4c20ea23a997c54e598b9eb89f9c75e69478c1f7a0b4","impliedFormat":1},{"version":"738020d2c8fc9df92d5dee4b682d35a776eaedfe2166d12bc8f186e1ea57cc52","impliedFormat":1},{"version":"86dd7c5657a0b0bc6bee8002edcfd544458d3d3c60974555746eb9b2583dc35e","impliedFormat":1},{"version":"d97b96b6ecd4ee03f9f1170722c825ef778430a6a0d7aab03b8929012bf773cd","impliedFormat":1},{"version":"f61963dc02ef27c48fb0e0016a413b1e00bcb8b97a3f5d4473cedc7b44c8dc77","impliedFormat":1},{"version":"272dbfe04cfa965d6fff63fdaba415c1b5a515b1881ae265148f8a84ddeb318f","impliedFormat":1},{"version":"2035fb009b5fafa9a4f4e3b3fdb06d9225b89f2cbbf17a5b62413bf72cea721a","impliedFormat":1},{"version":"eefafec7c059f07b885b79b327d381c9a560e82b439793de597441a4e68d774a","impliedFormat":1},{"version":"72636f59b635c378dc9ea5246b9b3517b1214e340e468e54cb80126353053b2e","impliedFormat":1},{"version":"ebb79f267a3bf2de5f8edc1995c5d31777b539935fab8b7d863e8efb06c8e9ea","impliedFormat":1},{"version":"ada033e6a4c7f4e147e6d76bb881069dc66750619f8cc2472d65beeec1100145","impliedFormat":1},{"version":"0c04cc14a807a5dc0e3752d18a3b2655a135fefbf76ddcdabd0c5df037530d41","impliedFormat":1},{"version":"605d29d619180fbec287d1701e8b1f51f2d16747ec308d20aba3e9a0dac43a0f","impliedFormat":1},{"version":"67c19848b442d77c767414084fc571ce118b08301c4ddff904889d318f3a3363","impliedFormat":1},{"version":"c704ff0e0cb86d1b791767a88af21dadfee259180720a14c12baee668d0eb8fb","impliedFormat":1},{"version":"195c50e15d5b3ea034e01fbdca6f8ad4b35ad47463805bb0360bdffd6fce3009","impliedFormat":1},{"version":"da665f00b6877ae4adb39cd548257f487a76e3d99e006a702a4f38b4b39431cb","impliedFormat":1},{"version":"2b82adc9eead34b824a3f4dad315203fbfa56bee0061ccf9b485820606564f70","impliedFormat":1},{"version":"eb47aaa5e1b0a69388bb48422a991b9364a9c206a97983e0227289a9e1fca178","impliedFormat":1},{"version":"d7a4309673b06223537bc9544b1a5fe9425628e1c8ab5605f3c5ebc27ecb8074","impliedFormat":1},{"version":"db2108aea36e7faa83c38f6fe8225b9ad40835c0cba7fa38e969768299b83173","impliedFormat":1},{"version":"3eadfd083d40777b403f4f4eecfa40f93876f2a01779157cc114b2565a7afb51","impliedFormat":1},{"version":"cb6789ce3eba018d5a7996ccbf50e27541d850e9b4ee97fdcb3cbd8c5093691f","impliedFormat":1},{"version":"a3684ea9719122f9477902acd08cd363a6f3cff6d493df89d4dc12fa58204e27","impliedFormat":1},{"version":"2828dabf17a6507d39ebcc58fef847e111dcf2d51b8e4ff0d32732c72be032b3","impliedFormat":1},{"version":"c0c46113b4cd5ec9e7cf56e6dbfb3930ef6cbba914c0883eeced396988ae8320","impliedFormat":1},{"version":"118ea3f4e7b9c12e92551be0766706f57a411b4f18a1b4762cfde3cd6d4f0a96","impliedFormat":1},{"version":"2ad163aaddfa29231a021de6838f59378a210501634f125ed04cfa7d066ffc53","impliedFormat":1},{"version":"6305acbe492b9882ec940f8f0c8e5d1e1395258852f99328efcb1cf1683ca817","impliedFormat":1},{"version":"7619b1f6087a4e9336b2c42bd784b05aa4a2204a364b60171e5a628f817a381e","impliedFormat":1},{"version":"15be9120572c9fbcd3c267bd93b4140354514c9e70734e6fcca65ff4a246f83a","impliedFormat":1},{"version":"412482ab85893cec1d6f26231359474d1f59f6339e2743c08da1b05fc1d12767","impliedFormat":1},{"version":"858e2315e58af0d28fcd7f141a2505aba6a76fd10378ba0ad169b0336fee33fc","impliedFormat":1},{"version":"02da6c1b34f4ae2120d70cf5f9268bf1aedf62e55529d34f5974f5a93655ce38","impliedFormat":1},{"version":"3ecf179ef1cc28f7f9b46c8d2e496d50b542c176e94ed0147bab147b4a961cd6","impliedFormat":1},{"version":"b145da03ce7e174af5ced2cbbd16e96d3d5c2212f9a90d3657b63a5650a73b7f","impliedFormat":1},{"version":"c7aadab66a2bc90eeb0ab145ca4daebcbc038e24359263de3b40e7b1c7affba6","impliedFormat":1},{"version":"99518dc06286877a7b716e0f22c1a72d3c62be42701324b49f27bcc03573efff","impliedFormat":1},{"version":"f4575fd196a7e33c7be9773a71bcc5fbe7182a2152be909f6b8e8e7ba2438f06","impliedFormat":1},{"version":"05cba5acd77a4384389b9c62739104b5a1693efd66e6abac6c5ffc53280ae777","impliedFormat":1},{"version":"acacda82ebd929fe2fe9e31a37f193fc8498a7393a1c31dc5ceb656e2b45b708","impliedFormat":1},{"version":"1b13e7c5c58ab894fe65b099b6d19bb8afae6d04252db1bf55fe6ba95a0af954","impliedFormat":1},{"version":"4355d326c3129e5853b56267903f294ad03e34cc28b75f96b80734882dedac80","impliedFormat":1},{"version":"37139a8d45342c05b6a5aa1698a2e8e882d6dca5fb9a77aa91f05ac04e92e70b","impliedFormat":1},{"version":"e37191297f1234d3ae54edbf174489f9a3091a05fe959724db36f8e58d21fb17","impliedFormat":1},{"version":"3fca8fb3aab1bc7abb9b1420f517e9012fdddcbe18803bea2dd48fad6c45e92e","impliedFormat":1},{"version":"d0b0779e0cac4809a9a3c764ba3bd68314de758765a8e3b9291fe1671bfeb8a1","impliedFormat":1},{"version":"d2116b5f989aa68e585ae261b9d6d836be6ed1be0b55b47336d9f3db34674e86","impliedFormat":1},{"version":"d79a227dd654be16d8006eac8b67212679d1df494dfe6da22ea0bd34a13e010c","impliedFormat":1},{"version":"b9c89b4a2435c171e0a9a56668f510a376cb7991eaecef08b619e6d484841735","impliedFormat":1},{"version":"44a298a6c52a7dab8e970e95a6dabe20972a7c31c340842e0dc57f2c822826eb","impliedFormat":1},{"version":"6a79b61f57699de0a381c8a13f4c4bcd120556bfab0b4576994b6917cb62948b","impliedFormat":1},{"version":"c5133d7bdec65f465df12f0b507fbc0d96c78bfa5a012b0eb322cf1ff654e733","impliedFormat":1},{"version":"00b9ff040025f6b00e0f4ac8305fea1809975b325af31541bd9d69fa3b5e57b1","impliedFormat":1},{"version":"9f96b9fd0362a7bfe6a3aa70baa883c47ae167469c904782c99ccc942f62f0dc","impliedFormat":1},{"version":"54d91053dc6a2936bfd01a130cc3b524e11aa0349da082e8ac03a8bf44250338","impliedFormat":1},{"version":"89049878a456b5e0870bb50289ea8ece28a2abd0255301a261fa8ab6a3e9a07d","impliedFormat":1},{"version":"55ae9554811525f24818e19bdc8779fa99df434be7c03e5fc47fa441315f0226","impliedFormat":1},{"version":"24abac81e9c60089a126704e936192b2309413b40a53d9da68dadd1dd107684e","impliedFormat":1},{"version":"f13310c360ecffddb3858dcb33a7619665369d465f55e7386c31d45dfc3847bf","impliedFormat":1},{"version":"e7bde95a05a0564ee1450bc9a53797b0ac7944bf24d87d6f645baca3aa60df48","impliedFormat":1},{"version":"62e68ce120914431a7d34232d3eca643a7ddd67584387936a5202ae1c4dd9a1b","impliedFormat":1},{"version":"91d695bba902cc2eda7edc076cd17c5c9340f7bb254597deb6679e343effadbb","impliedFormat":1},{"version":"e1cb8168c7e0bd4857a66558fe7fe6c66d08432a0a943c51bacdac83773d5745","impliedFormat":1},{"version":"a464510505f31a356e9833963d89ce39f37a098715fc2863e533255af4410525","impliedFormat":1},{"version":"ebbe6765a836bfa7f03181bc433c8984ca29626270ca1e240c009851222cb8a7","impliedFormat":1},{"version":"ac10457b51ee4a3173b7165c87c795eadd094e024f1d9f0b6f0c131126e3d903","impliedFormat":1},{"version":"468df9d24a6e2bc6b4351417e3b5b4c2ca08264d6d5045fe18eb42e7996e58b4","impliedFormat":1},{"version":"954523d1f4856180cbf79b35bd754e14d3b2aea06c7efd71b254c745976086e9","impliedFormat":1},{"version":"a8af4739274959d70f7da4bfdd64f71cfc08d825c2d5d3561bc7baed760b33ef","impliedFormat":1},{"version":"090fda1107e7d4f8f30a2b341834ed949f01737b5ec6021bb6981f8907330bdb","impliedFormat":1},{"version":"cc32874a27100c32e3706d347eb4f435d6dd5c0d83e547c157352f977bbc6385","impliedFormat":1},{"version":"e45b069d58c9ac341d371b8bc3db4fa7351b9eee1731bffd651cfc1eb622f844","impliedFormat":1},{"version":"7f3c74caad25bfb6dfbf78c6fe194efcf8f79d1703d785fc05cd606fe0270525","impliedFormat":1},{"version":"54f3f7ff36384ca5c9e1627118b43df3014b7e0f62c9722619d19cdb7e43d608","impliedFormat":1},{"version":"2f346f1233bae487f1f9a11025fc73a1bf9093ee47980a9f4a75b84ea0bb7021","impliedFormat":1},{"version":"013444d0b8c1f7b5115462c31573a699fee7458381b0611062a0069d3ef810e8","impliedFormat":1},{"version":"0612b149cabbc136cb25de9daf062659f306b67793edc5e39755c51c724e2949","impliedFormat":1},{"version":"2579b150b86b5f644d86a6d58f17e3b801772c78866c34d41f86f3fc9eb523fe","impliedFormat":1},{"version":"0353e05b0d8475c10ddd88056e0483b191aa5cdea00a25e0505b96e023f1a2d9","impliedFormat":1},{"version":"8c4df93dafcf06adc42a63477cc38b352565a3ed0a19dd8ef7dfacc253749327","impliedFormat":1},{"version":"22a35275abc67f8aba44efc52b2f4b1abc2c94e183d36647fdab5a5e7c1bdf23","impliedFormat":1},{"version":"99193bafaa9ce112889698de25c4b8c80b1209bb7402189aea1c7ada708a8a54","impliedFormat":1},{"version":"70473538c6eb9494d53bf1539fe69df68d87c348743d8f7244dcb02ca3619484","impliedFormat":1},{"version":"c48932ab06a4e7531bdca7b0f739ace5fa273f9a1b9009bcd26902f8c0b851f0","impliedFormat":1},{"version":"df6c83e574308f6540c19e3409370482a7d8f448d56c65790b4ac0ab6f6fedd8","impliedFormat":1},{"version":"32f19b665839b1382b21afc41917cda47a56e744cd3df9986b13a72746d1c522","impliedFormat":1},{"version":"8db1ed144dd2304b9bd6e41211e22bad5f4ab1d8006e6ac127b29599f4b36083","impliedFormat":1},{"version":"843a5e3737f2abbbbd43bf2014b70f1c69a80530814a27ae1f8be213ae9ec222","impliedFormat":1},{"version":"6fc1be224ad6b3f3ec11535820def2d21636a47205c2c9de32238ba1ac8d82e6","impliedFormat":1},{"version":"5a44788293f9165116c9c183be66cefef0dc5d718782a04847de53bf664f3cc1","impliedFormat":1},{"version":"afd653ae63ce07075b018ba5ce8f4e977b6055c81cc65998410b904b94003c0a","impliedFormat":1},{"version":"9172155acfeb17b9d75f65b84f36cb3eb0ff3cd763db3f0d1ad5f6d10d55662f","impliedFormat":1},{"version":"71807b208e5f15feffb3ff530bec5b46b1217af0d8cc96dde00d549353bcb864","impliedFormat":1},{"version":"1a6eca5c2bc446481046c01a54553c3ffb856f81607a074f9f0256c59dd0ab13","impliedFormat":1},{"version":"da451e3a2dfc734b3c5e1988c71ed1d69e4de602a98e68610c0355da7a46c5ab","impliedFormat":99},"ab24db763b26fdccb400ab071bda9f4fc3ab58f838f18f40a1232f6ed6d0a306","7d57f63237269dfd9fdeb2d59beba89b6321d21f5b7b4a53598a00f7d33de67e","a40489d7045513c1d8e259cadbd2aac89c2ff60d180e75b7411d763da4abd909","4932455607c97dbbd4658d041fb250c86624556226bdada20aca93ff929cd37a","88ac6aaca897cbc0c67d26c9d0b62ebf471a5eebdc55f8d612d0c44ad3b6c7db","b10f7db295663028c296ba89fe71c8ec82942281e2505a3bed5252b1a04c4c23",{"version":"4093b746549765a5788ec8c73456469158482d722ee8652e40b759dadcfa4134","impliedFormat":1},{"version":"84206a85be8e7e8f9307c1d5c087aedb4d389e05b755234aa8f37cc22f717aaf","impliedFormat":1},{"version":"45b1df23c0a6e5b45cb8fc998bd90fa9a6a79f2931f6bb1bd15cf8f7efd886d0","impliedFormat":1},{"version":"30c550766e030bb4c7a2e2eab03e91e23e6710e70a178ea31701ebcfe7d1bc30","impliedFormat":99},{"version":"009c9609f38e4f239e8ccbc6f8a9907566d69da9b6a900f5abfdbab754dc7c44","impliedFormat":99},{"version":"9b07391e576db95d68fbd4781170f1d47fedc2e6ddda385c7821526906506bdb","impliedFormat":99},{"version":"c7d6b7e77789cea6a98167bde8a8626dfb91344e4888f57786caa9463ff01d36","impliedFormat":99},{"version":"3b6633311cd6b44078c004733e219c6edf9ccd05805c26e609739560dcf4ab86","impliedFormat":99},{"version":"dbd5d81bcde7a0d614c68b58702f337802dbff3f4fa134d62089da24572bfc86","impliedFormat":99},{"version":"35d228d9fe40e5033ed9e9faf92d8cc8063d020912d31a36dd033747921a5da0","impliedFormat":99},{"version":"3c88dcd947d8f2804c0ffe0ad33403c09f6abbe76f2ad40c97f47fc58a87d114","impliedFormat":99},{"version":"29eec560d89f984380bf990a077658092ff6075a3e0716df3934bd244ff9aaff","impliedFormat":99},{"version":"629393ccf3759129bcfa06560067ccb354bc0cbe85b5037af5f034861702eb09","impliedFormat":99},{"version":"e4e33aff7f2a934b3b7bdc12000409aabf978412d5d5df6bea6dd2bf478a90d3","impliedFormat":99},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"ba481bca06f37d3f2c137ce343c7d5937029b2468f8e26111f3c9d9963d6568d","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d9ef24f9a22a88e3e9b3b3d8c40ab1ddb0853f1bfbd5c843c37800138437b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2677634fe27e87348825bb041651e22d50a613e2fdf6a4a3ade971d71bac37e","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"8c0bcd6c6b67b4b503c11e91a1fb91522ed585900eab2ab1f61bba7d7caa9d6f","impliedFormat":1},{"version":"8cd19276b6590b3ebbeeb030ac271871b9ed0afc3074ac88a94ed2449174b776","affectsGlobalScope":true,"impliedFormat":1},{"version":"696eb8d28f5949b87d894b26dc97318ef944c794a9a4e4f62360cd1d1958014b","impliedFormat":1},{"version":"3f8fa3061bd7402970b399300880d55257953ee6d3cd408722cb9ac20126460c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"68bd56c92c2bd7d2339457eb84d63e7de3bd56a69b25f3576e1568d21a162398","affectsGlobalScope":true,"impliedFormat":1},{"version":"3e93b123f7c2944969d291b35fed2af79a6e9e27fdd5faa99748a51c07c02d28","impliedFormat":1},{"version":"9d19808c8c291a9010a6c788e8532a2da70f811adb431c97520803e0ec649991","impliedFormat":1},{"version":"87aad3dd9752067dc875cfaa466fc44246451c0c560b820796bdd528e29bef40","impliedFormat":1},{"version":"4aacb0dd020eeaef65426153686cc639a78ec2885dc72ad220be1d25f1a439df","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"8db0ae9cb14d9955b14c214f34dae1b9ef2baee2fe4ce794a4cd3ac2531e3255","affectsGlobalScope":true,"impliedFormat":1},{"version":"15fc6f7512c86810273af28f224251a5a879e4261b4d4c7e532abfbfc3983134","impliedFormat":1},{"version":"58adba1a8ab2d10b54dc1dced4e41f4e7c9772cbbac40939c0dc8ce2cdb1d442","impliedFormat":1},{"version":"641942a78f9063caa5d6b777c99304b7d1dc7328076038c6d94d8a0b81fc95c1","impliedFormat":1},{"version":"2de7636e6fbb9e54a61a38bcb7505b94ec5be61197fe9e840cff629ca920c4bc","impliedFormat":1},{"version":"855cd5f7eb396f5f1ab1bc0f8580339bff77b68a770f84c6b254e319bbfd1ac7","impliedFormat":1},{"version":"5650cf3dace09e7c25d384e3e6b818b938f68f4e8de96f52d9c5a1b3db068e86","impliedFormat":1},{"version":"1354ca5c38bd3fd3836a68e0f7c9f91f172582ba30ab15bb8c075891b91502b7","affectsGlobalScope":true,"impliedFormat":1},{"version":"7e20d899c28ca26a2a7afc98beaa69e63ff7fba0a8bc47b4e3bf3ede5e09e424","impliedFormat":1},{"version":"2d2fcaab481b31a5882065c7951255703ddbe1c0e507af56ea42d79ac3911201","impliedFormat":1},{"version":"a192fe8ec33f75edbc8d8f3ed79f768dfae11ff5735e7fe52bfa69956e46d78d","impliedFormat":1},{"version":"ca867399f7db82df981d6915bcbb2d81131d7d1ef683bc782b59f71dda59bc85","affectsGlobalScope":true,"impliedFormat":1},{"version":"372413016d17d804e1d139418aca0c68e47a83fb6669490857f4b318de8cccb3","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"b4f70ec656a11d570e1a9edce07d118cd58d9760239e2ece99306ee9dfe61d02","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"6e70e9570e98aae2b825b533aa6292b6abd542e8d9f6e9475e88e1d7ba17c866","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"085f552d005479e2e6a7311cdbbe5d8c55c497b4d19274285df161ee9684cd9c","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"007faacc9268357caa21d24169f3f3f2497af3e9241308df2d89f6e6d9bb3f2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"74cf591a0f63db318651e0e04cb55f8791385f86e987a67fd4d2eaab8191f730","impliedFormat":1},{"version":"5eab9b3dc9b34f185417342436ec3f106898da5f4801992d8ff38ab3aff346b5","impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"809821b8a065e3234a55b3a9d7846231ed18d66dd749f2494c66288d890daf7f","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"c3b41e74b9a84b88b1dca61ec39eee25c0dbc8e7d519ba11bb070918cfacf656","affectsGlobalScope":true,"impliedFormat":1},{"version":"4737a9dc24d0e68b734e6cfbcea0c15a2cfafeb493485e27905f7856988c6b29","affectsGlobalScope":true,"impliedFormat":1},{"version":"36d8d3e7506b631c9582c251a2c0b8a28855af3f76719b12b534c6edf952748d","impliedFormat":1},{"version":"1ca69210cc42729e7ca97d3a9ad48f2e9cb0042bada4075b588ae5387debd318","impliedFormat":1},{"version":"f5ebe66baaf7c552cfa59d75f2bfba679f329204847db3cec385acda245e574e","impliedFormat":1},{"version":"ed59add13139f84da271cafd32e2171876b0a0af2f798d0c663e8eeb867732cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7c5e2ea4a9749097c347454805e933844ed207b6eefec6b7cfd418b5f5f7b28","impliedFormat":1},{"version":"b1810689b76fd473bd12cc9ee219f8e62f54a7d08019a235d07424afbf074d25","impliedFormat":1},{"version":"4fe80f12b1d5189384a219095c2eabadbb389c2d3703aae7c5376dbaa56061df","impliedFormat":1},{"version":"9eb1d2dceae65d1c82fc6be7e9b6b19cf3ca93c364678611107362b6ad4d2d41","impliedFormat":1},{"version":"8065e20ac0ad0536d4f1c8d4c2303272a4d25c450bea8d25deb25697d19300e5","impliedFormat":1},{"version":"c5f34de444a2e8ceb5b3f2b99e280b05f0b5e04e2180b24ffde7cbcb55157e0e","impliedFormat":99},{"version":"5cc5990d725f2e5588350cf5edc3bc637a6e1d8375102a9bcaaa20f1b1b534f0","impliedFormat":99},{"version":"a04645fa8bc15c19f337b621c948037fa3f819b34fbd5c9d159efd7867243526","impliedFormat":99},{"version":"8459a6a6e70c3787015020305c86a6eee011791672a8dbbe6f1dbd95c8606887","impliedFormat":99},{"version":"999f8e88d766b2a78378f0e09b832c3b5da46233dc4c913f7b00fb4e223ba7e4","impliedFormat":99},{"version":"92c5dc39cd721a38f6558adc8db3610d0d7a4276c2c1249858a76501d38b13c0","impliedFormat":99},{"version":"cdfd5b1595736cc4654ffdbe6a8dbb1df0dcd81bf9aa973f4f82973bb5821b49","impliedFormat":99},{"version":"ff281735449be3e11b6297b79b2806b054e8e8aabbd19464c5e7bd0c8646d7f7","impliedFormat":1},{"version":"3d365797bc13f0393dc3390ebb34313d97bd17bc2ea8934f0e7f14ea7d956258","impliedFormat":99},{"version":"03eb8cdaaf7e6e8654859dfb2876204f6f3c2c99942b81746fbb4cd91ee7e78b","impliedFormat":99},{"version":"faf766a0b271fdcafe4d57a0831b7c15539cfdd18b12d715fc4e8ef120a75bf6","impliedFormat":99},{"version":"ad529afbd9982ea7c565104a34e0556bd40e5ba0b9339286b5627ed77bf701c5","impliedFormat":99},{"version":"439bca1b52680da7c9e976a29e3f66c0585b8d1c66db15ece6bd54139480ae24","impliedFormat":99},{"version":"6d2c76b62e7b36d1c0057a5fd261f49c50f0b02b37584ebe4ab33f434f57f63f","impliedFormat":99},{"version":"af6cfbb1e9df5ecac148b2ca76b0aac4298abd4d276889c29c231918ba4859f9","impliedFormat":99},{"version":"36a159d8cc89059bc513bb5ed6514f83be0fd98d70c2fbda24a7e696485aa214","impliedFormat":99},{"version":"f128c331a0e4edb5c093c15041231b71b5d3da71642c071cdb9b33e50851fd5d","impliedFormat":99},{"version":"ac1e31a2c72e9e44ddf56a4267837e1f7fb41d0c61228c762dc9f4248cab6db5","impliedFormat":99},{"version":"3166f3fd8cda1c37ea1d3879c5c563573bce947535f048820349432444fad8dd","impliedFormat":99},{"version":"03464dcca517bcfb982cefdc316afe821aae8bbe02dcd4765dfa25bc2aecd097","impliedFormat":99},{"version":"d2fb14e50a72f24279996f7f77ec22cd9d22569072dff6b6996f1c16afdcdc2b","impliedFormat":99},{"version":"e8ccaec45b9083811b398bd939bdab163a37fff5513f7606ef70bba95e8bc18b","impliedFormat":99},{"version":"c10d384b93f7220a061501db0ff8576fbf599ff309b2c06346f5dc3ea7274397","impliedFormat":99},{"version":"6fa637e968c53a52c3dc213f24ddd2021ed841286244bbfc8cf520ec73740885","impliedFormat":99},{"version":"951fbf6ddcbb96e5be8e62f3e3510be84519973b7752b1fdfbb50fa2cd96b113","impliedFormat":99},{"version":"941fddd7f211b52e2f6763a4cdadfbd940818d1443e562b8f4793385f126c414","impliedFormat":99},{"version":"b22a339fa1aeb793058d0619f2b0a90bfee24c8e694b7ac6b4178abe71be385e","impliedFormat":99},{"version":"cf06ce745c1149c49d672bab93cfc94569bbf73e6e222245dced5a9fe37e51e6","impliedFormat":99},{"version":"edbfddc987df0aab0ccc941c8fd6ae545cf4fa3f8218d5ecc6ea8fd6c33970ac","impliedFormat":99},{"version":"99fcd963c44cb178e45e85e16a4ea93be354a3e7aa1063b3fa364487cc81af35","impliedFormat":99},{"version":"4efdc9a4a3d67eb1fa77d8ae2cd21c4c2c768a6cb630bea9602d34574dd449b2","impliedFormat":99},{"version":"0f1608ba30526d855b298de563474aa0cb54cd17855b9cd4a02cfcc2dbac0668","impliedFormat":99},{"version":"81d4ecb12b6ab914a756639089db8a09681c94c0d65b321c6123f1b1417aabce","impliedFormat":99},{"version":"22cdc8c2abd91fbe4c1a2b720c650d4c31a247cdda06d51a9f70df357f97408b","impliedFormat":99},{"version":"e23d144cfe3b8ae167c9e190894bb10fd2bfe074d6a666a7fbcb9caffb02fc32","impliedFormat":99},{"version":"748fc95884a06a03b24c5a621180b8bfc958ecd06b15e7bc56129e09e0a981eb","impliedFormat":99},{"version":"dc4cf3047b62a394d1ee95c31ef3ccda9d11c7ad3597df5839f4d9c0777f78b9","impliedFormat":99},{"version":"acd4d79e3b7e3a1b3576a89bcd1e50d34ec56b8806756a404a8f50a146a7685f","impliedFormat":99},{"version":"2c8f85858c7189d7dca11570a70d657e7d5c35e056662575647c5d9bf9d979e9","impliedFormat":99},{"version":"65760dd8e06c522d2a8347db8d45598738d958cc9303896b57f01ce56e312d8c","impliedFormat":99},{"version":"2b0e26e8378e48a8f69bc266208850b5f78b4df21041fbd2c99ca2c800a0b1b1","impliedFormat":99},{"version":"fbfaae2605ba3f5d514066fde3c7cc62c8f71ae53297bb30175c887d4ed1ab17","impliedFormat":99},{"version":"3b3008c46dd7b1fda5cef5c07c4be2b36e2f7a16e4bfd70b462fc0108024afb1","impliedFormat":99},{"version":"ea67ef138af8cf32772e24a6e3f253e7bafc00cf03ee2b905695f3c60ea4e9af","impliedFormat":99},{"version":"a7970b475e3ef02492c38f35e3583fa2e39e59482abc3b1b59714bf0223fa1e5","impliedFormat":99},{"version":"7eb4f97600d5a788e2ad40d666139682ee1a7445d321e2bd667633ada7bd724b","impliedFormat":99},{"version":"c51ef79c00d9fa4c13edc5a39606422a672f3fa378cb9008e32049f039e502c9","impliedFormat":99},{"version":"113562a653d87c9c8c5022d5e2bc6bb371ac5f8aa48e84513c080d5dd778808f","impliedFormat":99},{"version":"f9d5d98a9a524f1d692665c4ea8c6b06518738423e3c75f31dded80c10d1f16e","impliedFormat":99},{"version":"c6f877c12f8d88fb03e76b1e8e4cfd6ce022d348996daae4a872012aa060ec7f","impliedFormat":99},{"version":"9defcd40e3803eb1a335978e5f362d00a807a03d19c941aa0f150f17177783cb","impliedFormat":99},{"version":"d4cc33238caf1b6e3a7c7d0335a3274c7479ba2da58b0239e209e0214a3188df","impliedFormat":99},{"version":"3655f48aa06e4a6b0f5a01951a9a79e2445a7dcce442ee56e9925ff8ee4c10a3","impliedFormat":99},{"version":"bcc95274d707c6d65777178a699702e04a3f2f60f5393411981d673d9dbdd59e","impliedFormat":99},{"version":"14245bde94c9c1870499ff07a4700d917a5856ed3087e655a1a9f743e22fde5b","impliedFormat":99},{"version":"87a7c41d891ef60cbc7d13fa9856acd1fc196caf80727fe997cd2e80d00124e1","impliedFormat":99},{"version":"8e1b82931482369d75bd596a2a0c3e469abae37d591d2d6a439ae0ca7c11e27e","impliedFormat":99},{"version":"f8610d8b9d4b85c773b50bd140cf441589559c693f5bd8a1cd721b22defdf372","impliedFormat":99},{"version":"81111764c789f86de6f92dda593db9da9e1a12002066018ed4542ed20b2beac4","impliedFormat":99},{"version":"8ea1f2e6c1cbadd595a1c0564b7c89c5ad272dd1590c5031295b725e967363f3","impliedFormat":99},{"version":"982d2cb9abe3f7f4091250cd6326f7f4aaa7f9df3187b70afb1858aa792b6360","impliedFormat":99},{"version":"112fab670bdc9a5dcb6c37b46a61cf766ba7df1ffdef93b9741036b44aea4215","impliedFormat":99},{"version":"ec3988bbcf9f4aacb644b8af9deb0bf684bd644c8c8c9a64f28b2afd000f3cdb","impliedFormat":99},{"version":"9ead2880be8fea1693ed08e5f3958b2d729e3daa1498054b1bf226db0bdba285","impliedFormat":99},{"version":"5bda7861d14f27d7fe8f61a240de3f71e74fde9bc74ff768d6e9b001e5211e68","impliedFormat":99},{"version":"597a3cb740723067ede511a8a8b271119c53716296de9ad157567dabce312d6a","impliedFormat":99},"6f67cc560b6f532375be1a8ad703068731fa327ca04e3801234501e5254ba2e2","c377386b4e80c015d3cb05ec2caa0cc42c603631ceb9c4810735f6665cfe5832","6c41b86fc733b3e64df0724f2e6b81387db61f125bc8147b7536034852cc7aff","20401cca2bcc990649b28a586589ee4674b53c2ab5bd4e6e79f161d1a75d3d14",{"version":"727ac36be9b95bdd24516ec82ef7e007f598c87c93ce6b3d07f04c632cb1349a","impliedFormat":99},{"version":"1388882d1ef79c747831aa0dbd4444486ff907df373719c35ceb585626ddc5d8","impliedFormat":99},{"version":"53ff5c70c3d3b02ab5093913e78dcf7a0cfdca34adf54f3181800ff3fb3a7e74","impliedFormat":99},{"version":"621107f3b57b5d452875e7b53c500947844047c61cde127a5e2ab49a82d80c71","impliedFormat":99},{"version":"fbbc2191b67f0bd5d9f400bb3ec67c0b6c0375993e651696766f1a1f8125feb9","impliedFormat":99},{"version":"cb9a8171e54d517ea93e3d06b6c52acb082a0ea5343697a08ff50dd575b09e70","impliedFormat":99},{"version":"48ca1501b72ddcd8e40917177826b0c62a400dbec6601daf4d17fffba7ea2619","impliedFormat":99},{"version":"274d8148aaecc31040b494c282adc924240552f16fbf1484b490167bf68dcbc3","impliedFormat":99},{"version":"846b506b34c982b1380fe2e0cdcdd6ca566c4ccad7eba49a01e72760a0c14f34","impliedFormat":99},{"version":"2795186cd53b93d63c671b8c0598edac1e90278c534a93cd1824a7565d2ed1bc","impliedFormat":99},{"version":"144b8f7dfae415b55f764596b676ccca68928b900f6f2dffdd5e30a2a9f905bf","impliedFormat":99},{"version":"9d14bf7ab3b740282ec669e770128f26d6f7b562ecd77448702a129b9cab01cd","impliedFormat":99},{"version":"bb12b49e8d77e4b03e5e76698a984f6c2d46d7cdb1e5b98162d3f518217c2de7","impliedFormat":99},{"version":"2cb258ce2db84d1a628e144fc8cab3dbeaf181537ce2b222491fc9e433e3044d","impliedFormat":99},{"version":"b0947262c0f6cde2bbe8f074703c5d8e44300d3fdb0c9795a2f4f37349f6b0a8","impliedFormat":99},{"version":"5f8879cfb2d158e27a0452f2e17a292a92ce57a8211231d861adbb2fc3e04d7b","impliedFormat":99},{"version":"db1e5ad825e4444ab205119f6a7f4aefb14901bff70f14859a21bb4bb52c13d4","impliedFormat":99},{"version":"11f2dde616212a4cd66fdd32ee33cddd34e9994bb7be910ca6a9582d5c31e53b","impliedFormat":99},{"version":"32946d9b07387342fb9cf4008c154645b6b4dd7276926b38b597a0444cc09a6a","impliedFormat":99},{"version":"c90f6ec2fd4e0513e839b673e8c0a802d125ee645a64367a2c6b44f9e3fed39b","impliedFormat":99},{"version":"9ddefb83d413c8c78b9f9817222b9ef345321657316b8f53fde7a8348cb7988c","impliedFormat":99},{"version":"e33d9ab5450f3159152e74332c0f50d2d24cc7fda04d307e4847cce87899fbcd","impliedFormat":99},{"version":"38d16dd85f35c4f18bd56acc9f558f48e695c3f53978591b45e26eeb740c2e35","impliedFormat":99},{"version":"716ad2c753cbeccbf21e9475f4a93d1672d71cc00e59c6f52d2ff71fd36ee607","impliedFormat":99},{"version":"86ddc441b7f809a60689b4345e52933532771a50796e99df59af1a2a16c2b5c3","impliedFormat":99},{"version":"ae69aac1676f7cbf9292c207315ef8c708aca73c5d87303b7ea9e7b06ebf1d4e","impliedFormat":99},{"version":"f5ba387808a01d1cb70e542e08d4c5d0e5cb2c95c86c3230eb0a727a1740b92e","impliedFormat":99},{"version":"cc620982c46f541201e335d0a9dff94908b556dc0440a63b80e7d9966685868e","impliedFormat":99},{"version":"b222f24090306fe30216fd0ec54f06aa6eec40fe1da3fcfb3bb31d9a5b7aca9f","impliedFormat":99},{"version":"37a8b99238cb1fb4ee2f7f02848471c12d496db13d25fd8849c30156d71b2f2f","impliedFormat":99},{"version":"0899fa64030e2a32a9cdd6d592f949d8da5496863358d0a9d0fbec642f0c9ab7","impliedFormat":99},{"version":"8c2d23dcd233b40f1d7a9d06a2bb23cf76d1f2aad054905bb369e810ca8fadad","impliedFormat":99},{"version":"185246f95696227b51d74679649a8fe46e46afb1194e3cb5fc35eeec6b127c41","impliedFormat":99},"0d6d9cd865fe1792409554b578f5b51de803d34b9df4895ad09e88e3e7a75ca3","50879e47381f036eeae4e9e4bce443236bc834c943eaef26e8b538985b488d14","112a02bf559b5a1e0f7ad5b3cfee9dd54c21a36923c1c38af317b924fe7448a3","071e0761717dfae80243fccb7227b7e430c4339f88b20d502edf19045428b1a3","8501fe060d3b73b2702e231c3563a370ce370b9d8bcf681b9dd58511c8d1d389","fdb836c1a58acc30ece9a583b46586c7e7e74acfc91310232563924255d7ba43",{"version":"b8ad793dc17938bc462812e3522bbd3d62519d91d9b4a6422bed1383c2d3eb42","impliedFormat":1},{"version":"8b0b6a4c032a56d5651f7dd02ba3f05fbfe4131c4095093633cda3cae0991972","impliedFormat":1},{"version":"ff3c48a17bf10dfbb62448152042e4a48a56c9972059997ab9e7ed03b191809b","impliedFormat":1},{"version":"192a0c215bffe5e4ac7b9ff1e90e94bf4dfdad4f0f69a5ae07fccc36435ebb87","impliedFormat":1},{"version":"3ef8565e3d254583cced37534f161c31e3a8f341ff005c98b582c6d8c9274538","impliedFormat":1},{"version":"d7e42a3800e287d2a1af8479c7dd58c8663e80a01686cb89e0068be6c777d687","impliedFormat":1},{"version":"1098034333d3eb3c1d974435cacba9bd5a625711453412b3a514774fec7ca748","impliedFormat":1},{"version":"f2388b97b898a93d5a864e85627e3af8638695ebfa6d732ecd39d382824f0e63","impliedFormat":1},{"version":"6c6bd91368169cfa94b4f8cc64ebca2b050685ec76bc4082c44ce125b5530cca","impliedFormat":1},{"version":"f477375e6f0bf2a638a71d4e7a3da8885e3a03f3e5350688541d136b10b762a6","impliedFormat":1},{"version":"a44d6ea4dc70c3d789e9cef3cc42b79c78d17d3ce07f5fd278a7e1cbe824da56","impliedFormat":1},{"version":"272af80940fcc0c8325e4a04322c50d11f8b8842f96ac66cbd440835e958dd14","impliedFormat":1},{"version":"1803e48a3ec919ccafbcafeef5e410776ca0644ae8c6c87beca4c92d8a964434","impliedFormat":1},{"version":"875c43c5409e197e72ee517cb1f8fd358406b4adf058dbdc1e50c8db93d68f26","impliedFormat":1},{"version":"8854713984b9588eac1cab69c9e2a6e1a33760d9a2d182169059991914dd8577","impliedFormat":1},{"version":"e333d487ca89f26eafb95ea4b59bea8ba26b357e9f2fd3728be81d999f9e8cf6","impliedFormat":1},{"version":"2f554c6798b731fc39ff4e3d86aadc932fdeaa063e3cbab025623ff5653c0031","impliedFormat":1},{"version":"fe4613c6c0d23edc04cd8585bdd86bc7337dc6265fb52037d11ca19eeb5e5aaf","impliedFormat":1},{"version":"53b26fbee1a21a6403cf4625d0e501a966b9ccf735754b854366cee8984b711c","impliedFormat":1},{"version":"c503be3ddb3990ab27ca20c6559d29b547d9f9413e05d2987dd7c4bcf52f3736","impliedFormat":1},{"version":"598b15f0ae9a73082631d14cb8297a1285150ca325dbce98fc29c4f0b7079443","impliedFormat":1},{"version":"8c59d8256086ed17676139ee43c1155673e357ab956fb9d00711a7cac73e059d","impliedFormat":1},{"version":"cfe88132f67aa055a3f49d59b01585fa8d890f5a66a0a13bb71973d57573eee7","impliedFormat":1},{"version":"53ce488a97f0b50686ade64252f60a1e491591dd7324f017b86d78239bd232ca","impliedFormat":1},{"version":"50fd11b764194f06977c162c37e5a70bcf0d3579bf82dd4de4eee3ac68d0f82f","impliedFormat":1},{"version":"e0ceb647dcdf6b27fd37e8b0406c7eafb8adfc99414837f3c9bfd28ffed6150a","impliedFormat":1},{"version":"99579aa074ed298e7a3d6a47e68f0cd099e92411212d5081ce88344a5b1b528d","impliedFormat":1},{"version":"c94c1aa80687a277396307b80774ca540d0559c2f7ba340168c2637c82b1f766","impliedFormat":1},{"version":"ce7dbf31739cc7bca35ca50e4f0cbd75cd31fd6c05c66841f8748e225dc73aaf","impliedFormat":1},{"version":"942ab34f62ac3f3d20014615b6442b6dc51815e30a878ebc390dd70e0dec63bf","impliedFormat":1},{"version":"7a671bf8b4ad81b8b8aea76213ca31b8a5de4ba39490fbdee249fc5ba974a622","impliedFormat":1},{"version":"8e07f13fb0f67e12863b096734f004e14c5ebfd34a524ed4c863c80354c25a44","impliedFormat":1},{"version":"6f6bdb523e5162216efc36ebba4f1ef8e845f1a9e55f15387df8e85206448aee","impliedFormat":1},{"version":"aa2d6531a04d6379318d29891de396f61ccc171bfd2f8448cc1649c184becdf2","impliedFormat":1},{"version":"d422f0c340060a53cb56d0db24dd170e31e236a808130ab106f7ab2c846f1cdb","impliedFormat":1},{"version":"424403ef35c4c97a7f00ea85f4a5e2f088659c731e75dbe0c546137cb64ef8d8","impliedFormat":1},{"version":"16900e9a60518461d7889be8efeca3fe2cbcd3f6ce6dee70fea81dfbf8990a76","impliedFormat":1},{"version":"6daf17b3bd9499bd0cc1733ab227267d48cd0145ed9967c983ccb8f52eb72d6e","impliedFormat":1},{"version":"e4177e6220d0fef2500432c723dbd2eb9a27dcb491344e6b342be58cc1379ec0","impliedFormat":1},{"version":"ab710f1ee2866e473454a348cffd8d5486e3c07c255f214e19e59a4f17eece4d","impliedFormat":1},{"version":"db7ff3459e80382c61441ea9171f183252b6acc82957ecb6285fff4dca55c585","impliedFormat":1},{"version":"4a168e11fe0f46918721d2f6fcdb676333395736371db1c113ae30b6fde9ccd2","impliedFormat":1},{"version":"2a899aef0c6c94cc3537fe93ec8047647e77a3f52ee7cacda95a8c956d3623fb","impliedFormat":1},{"version":"ef2c1585cad462bdf65f2640e7bcd75cd0dbc45bae297e75072e11fe3db017fa","impliedFormat":1},{"version":"6a52170a5e4600bbb47a94a1dd9522dca7348ce591d8cdbb7d4fe3e23bbea461","impliedFormat":1},{"version":"6f6eadb32844b0ec7b322293b011316486894f110443197c4c9fbcba01b3b2fa","impliedFormat":1},{"version":"a51e08f41e3e948c287268a275bfe652856a10f68ddd2bf3e3aaf5b8cdb9ef85","impliedFormat":1},{"version":"16c144a21cd99926eeba1605aec9984439e91aa864d1c210e176ca668f5f586a","impliedFormat":1},{"version":"af48a76b75041e2b3e7bd8eed786c07f39ea896bb2ff165e27e18208d09b8bee","impliedFormat":1},{"version":"fd4107bd5c899165a21ab93768904d5cfb3e98b952f91fbf5a12789a4c0744e6","impliedFormat":1},{"version":"deb092bc337b2cb0a1b14f3d43f56bc663e1447694e6d479d6df8296bdd452d6","impliedFormat":1},{"version":"041bc1c3620322cb6152183857601707ef6626e9d99f736e8780533689fb1bf9","impliedFormat":1},{"version":"77165b117f552be305d3bc2ef83424ff1e67afb22bfabd14ebebb3468c21fcaa","impliedFormat":1},{"version":"128e7c2ffd37aa29e05367400d718b0e4770cefb1e658d8783ec80a16bc0643a","impliedFormat":1},{"version":"076ac4f2d642c473fa7f01c8c1b7b4ef58f921130174d9cf78430651f44c43ec","impliedFormat":1},{"version":"396c1e5a39706999ec8cc582916e05fcb4f901631d2c192c1292e95089a494d9","impliedFormat":1},{"version":"89df75d28f34fc698fe261f9489125b4e5828fbd62d863bbe93373d3ed995056","impliedFormat":1},{"version":"8ccf5843249a042f4553a308816fe8a03aa423e55544637757d0cfa338bb5186","impliedFormat":1},{"version":"93b44aa4a7b27ba57d9e2bad6fb7943956de85c5cc330d2c3e30cd25b4583d44","impliedFormat":1},{"version":"a0c6216075f54cafdfa90412596b165ff85e2cadd319c49557cc8410f487b77c","impliedFormat":1},{"version":"3c359d811ec0097cba00fb2afd844b125a2ddf4cad88afaf864e88c8d3d358bd","impliedFormat":1},{"version":"d8ec19be7d6d3950992c3418f3a4aa2bcad144252bd7c0891462b5879f436e4e","impliedFormat":1},{"version":"db37aa3208b48bdcbc27c0c1ae3d1b86c0d5159e65543e8ab79cbfb37b1f2f34","impliedFormat":1},{"version":"d62f09256941e92a95b78ae2267e4cf5ff2ca8915d62b9561b1bc85af1baf428","impliedFormat":1},{"version":"e6223b7263dd7a49f4691bf8df2b1e69f764fb46972937e6f9b28538d050b1ba","impliedFormat":1},{"version":"2daf06d8e15cbca27baa6c106253b92dad96afd87af9996cf49a47103b97dc95","impliedFormat":1},{"version":"1db014db736a09668e0c0576585174dbcfd6471bb5e2d79f151a241e0d18d66b","impliedFormat":1},{"version":"8a153d30edde9cefd102e5523b5a9673c298fc7cf7af5173ae946cbb8dd48f11","impliedFormat":1},{"version":"abaaf8d606990f505ee5f76d0b45a44df60886a7d470820fcfb2c06eafa99659","impliedFormat":1},{"version":"8109e0580fc71dbefd6091b8825acf83209b6c07d3f54c33afeafab5e1f88844","impliedFormat":1},{"version":"d92a80c2c05cf974704088f9da904fe5eadc0b3ad49ddd1ef70ca8028b5adda1","impliedFormat":1},{"version":"fbd7450f20b4486c54f8a90486c395b14f76da66ba30a7d83590e199848f0660","impliedFormat":1},{"version":"ece5b0e45c865645ab65880854899a5422a0b76ada7baa49300c76d38a530ee1","impliedFormat":1},{"version":"62d89ac385aeab821e2d55b4f9a23a277d44f33c67fefe4859c17b80fdb397ea","impliedFormat":1},{"version":"f4dee11887c5564886026263c6ee65c0babc971b2b8848d85c35927af25da827","impliedFormat":1},{"version":"fb8dd49a4cd6d802be4554fbab193bb06e2035905779777f32326cb57cf6a2c2","impliedFormat":1},{"version":"df29ade4994de2d9327a5f44a706bbe6103022a8f40316839afa38d3e078ee06","impliedFormat":1},{"version":"82d3e00d56a71fc169f3cf9ec5f5ffcc92f6c0e67d4dfc130dafe9f1886d5515","impliedFormat":1},{"version":"d38f45cb868a830d130ac8b87d3f7e8caff4961a3a1feae055de5e538e20879a","impliedFormat":1},{"version":"4c30a5cb3097befb9704d16aa4670e64e39ea69c5964a1433b9ffd32e1a5a3a1","impliedFormat":1},{"version":"1b33478647aa1b771314745807397002a410c746480e9447db959110999873ce","impliedFormat":1},{"version":"7b3a5e25bf3c51af55cb2986b89949317aa0f6cbfb5317edd7d4037fa52219a9","impliedFormat":1},{"version":"3cd50f6a83629c0ec330fc482e587bfa96532d4c9ce85e6c3ddf9f52f63eee11","impliedFormat":1},{"version":"9fac6ebf3c60ced53dd21def30a679ec225fc3ff4b8d66b86326c285a4eebb5a","impliedFormat":1},{"version":"8cb83cb98c460cd716d2a98b64eb1a07a3a65c7362436550e02f5c2d212871d1","impliedFormat":1},{"version":"07bc8a3551e39e70c38e7293b1a09916867d728043e352b119f951742cb91624","impliedFormat":1},{"version":"e47adc2176f43c617c0ab47f2d9b2bb1706d9e0669bf349a30c3fe09ddd63261","impliedFormat":1},{"version":"7fec79dfd7319fec7456b1b53134edb54c411ba493a0aef350eee75a4f223eeb","impliedFormat":1},{"version":"189c489705bb96a308dcde9b3336011d08bfbca568bcaf5d5d55c05468e9de7a","impliedFormat":1},{"version":"98f4b1074567341764b580bf14c5aabe82a4390d11553780814f7e932970a6f7","impliedFormat":1},{"version":"dadfa5fd3d5c511ca6bfe240243b5cf2e0f87e44ea63e23c4b2fce253c0d4601","impliedFormat":1},{"version":"2e252235037a2cd8feebfbf74aa460f783e5d423895d13f29a934d7655a1f8be","impliedFormat":1},{"version":"763f4ac187891a6d71ae8821f45eef7ff915b5d687233349e2c8a76c22b3bf2a","impliedFormat":1},{"version":"0c5f112b6d3377b9e8214d8920e1a69d8098b881d941f2ab3ca45234d13d68de","impliedFormat":1},"c7a8fda989564546024e52d1eb2b7e1f2cfb6ee0bb6d4ac8ecce18cac1dcd1c4",{"version":"556ccd493ec36c7d7cb130d51be66e147b91cc1415be383d71da0f1e49f742a9","impliedFormat":1},{"version":"b6d03c9cfe2cf0ba4c673c209fcd7c46c815b2619fd2aad59fc4229aaef2ed43","impliedFormat":1},{"version":"95aba78013d782537cc5e23868e736bec5d377b918990e28ed56110e3ae8b958","impliedFormat":1},{"version":"670a76db379b27c8ff42f1ba927828a22862e2ab0b0908e38b671f0e912cc5ed","impliedFormat":1},{"version":"13b77ab19ef7aadd86a1e54f2f08ea23a6d74e102909e3c00d31f231ed040f62","impliedFormat":1},{"version":"069bebfee29864e3955378107e243508b163e77ab10de6a5ee03ae06939f0bb9","impliedFormat":1},{"version":"104c67f0da1bdf0d94865419247e20eded83ce7f9911a1aa75fc675c077ca66e","impliedFormat":1},{"version":"cc0d0b339f31ce0ab3b7a5b714d8e578ce698f1e13d7f8c60bfb766baeb1d35c","impliedFormat":1},{"version":"751764bb94219b4ce8f5475dc35d3de2e432fea01a0c9610cd7f69ad05e398c6","impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"a4a39b5714adfcadd3bbea6698ca2e942606d833bde62ad5fb6ec55f5e438ff8","impliedFormat":1},{"version":"bbc1d029093135d7d9bfa4b38cbf8761db505026cc458b5e9c8b74f4000e5e75","impliedFormat":1},{"version":"1f68ab0e055994eb337b67aa87d2a15e0200951e9664959b3866ee6f6b11a0fe","impliedFormat":1},{"version":"d34aa8df2d0b18fb56b1d772ff9b3c7aea7256cf0d692f969be6e1d27b74d660","impliedFormat":1},{"version":"93a3b8e57c68e348fc4054b245bd7cf4893225f56c991028844b693c2fa8c03c","impliedFormat":1},{"version":"2f5747b1508ccf83fad0c251ba1e5da2f5a30b78b09ffa1cfaf633045160afed","impliedFormat":1},{"version":"90407bbaa24977b8a6a90861148ac98d8652afe69992a90d823f29e9807fe2d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b71c603a539078a5e3a039b20f2b0a0d1708967530cf97dec8850a9ca45baa2b","impliedFormat":1},{"version":"d3f2d715f57df3f04bf7b16dde01dec10366f64fce44503c92b8f78f614c1769","impliedFormat":1},{"version":"cb90077223cc1365fa21ef0911a1f9b8f2f878943523d97350dc557973ca3823","impliedFormat":1},{"version":"18f1541b81b80d806120a3489af683edfb811deb91aeca19735d9bb2613e6311","impliedFormat":1},{"version":"232f118ae64ab84dcd26ddb60eaed5a6e44302d36249abf05e9e3fc2cbb701a2","impliedFormat":1},{"version":"035a5df183489c2e22f3cf59fc1ed2b043d27f357eecc0eb8d8e840059d44245","impliedFormat":1},{"version":"a4809f4d92317535e6b22b01019437030077a76fec1d93b9881c9ed4738fcc54","impliedFormat":1},{"version":"5f53fa0bd22096d2a78533f94e02c899143b8f0f9891a46965294ee8b91a9434","impliedFormat":1},{"version":"ab82804a14454734010dcdcd43f564ff7b0389bee4c5692eec76ff5b30d4cf66","impliedFormat":1},{"version":"bae8d023ef6b23df7da26f51cea44321f95817c190342a36882e93b80d07a960","impliedFormat":1},{"version":"26a770cec4bd2e7dbba95c6e536390fffe83c6268b78974a93727903b515c4e7","impliedFormat":1}],"root":[[406,411],[596,599],[633,638],733],"options":{"allowSyntheticDefaultImports":true,"declaration":false,"emitDecoratorMetadata":true,"experimentalDecorators":true,"module":1,"noFallthroughCasesInSwitch":false,"noImplicitAny":false,"outDir":"./dist","removeComments":true,"rootDir":"./src","skipLibCheck":true,"sourceMap":true,"strictBindCallApply":false,"strictNullChecks":false,"target":8},"referencedMap":[[736,1],[734,2],[552,3],[554,4],[548,2],[537,2],[641,2],[321,2],[59,2],[310,5],[311,5],[312,2],[313,6],[323,7],[314,2],[315,8],[316,2],[317,2],[318,5],[319,5],[320,5],[322,9],[330,10],[332,2],[329,2],[335,11],[333,2],[331,2],[327,12],[328,13],[334,2],[336,14],[324,2],[326,15],[325,16],[265,2],[268,17],[264,2],[688,2],[266,2],[267,2],[353,18],[338,18],[345,18],[342,18],[355,18],[346,18],[352,18],[337,19],[356,18],[359,20],[350,18],[340,18],[358,18],[343,18],[341,18],[351,18],[347,18],[357,18],[344,18],[354,18],[339,18],[349,18],[348,18],[366,21],[362,22],[361,2],[360,2],[365,23],[404,24],[60,2],[61,2],[62,2],[670,25],[64,26],[676,27],[675,28],[254,29],[255,26],[375,2],[284,2],[285,2],[376,30],[256,2],[377,2],[378,31],[63,2],[258,32],[259,2],[257,33],[260,32],[261,2],[263,34],[275,35],[276,2],[281,36],[277,2],[278,2],[279,2],[280,2],[282,2],[283,37],[289,38],[292,39],[290,2],[291,2],[309,40],[293,2],[294,2],[719,41],[274,42],[272,43],[270,44],[271,45],[273,2],[301,46],[295,2],[304,47],[297,48],[302,49],[300,50],[303,51],[298,52],[299,53],[287,54],[305,55],[288,56],[307,57],[308,58],[296,2],[262,2],[269,59],[306,60],[372,61],[367,2],[373,62],[368,63],[369,64],[370,65],[371,66],[374,67],[390,68],[389,69],[395,70],[387,2],[388,71],[391,68],[392,72],[394,73],[393,74],[396,75],[381,76],[382,77],[385,78],[384,78],[383,77],[386,77],[380,79],[398,80],[397,81],[400,82],[399,83],[401,84],[363,54],[364,85],[286,2],[402,86],[379,87],[403,88],[639,89],[640,90],[661,91],[662,92],[663,2],[664,93],[665,94],[674,95],[667,96],[671,97],[679,98],[677,6],[678,99],[668,100],[680,2],[682,101],[683,102],[684,103],[673,104],[669,105],[693,106],[681,107],[708,108],[666,109],[709,110],[706,111],[707,6],[731,112],[656,113],[652,114],[654,115],[705,116],[647,117],[695,118],[694,2],[655,119],[702,120],[659,121],[703,2],[704,122],[657,123],[651,124],[658,125],[653,126],[646,2],[699,127],[712,128],[710,6],[642,6],[698,129],[643,13],[644,92],[645,130],[649,131],[648,132],[711,133],[650,134],[687,135],[685,101],[686,136],[696,13],[697,137],[700,138],[715,139],[716,140],[713,141],[714,142],[717,143],[718,144],[720,145],[692,146],[689,147],[690,5],[691,136],[722,148],[721,149],[728,150],[660,6],[724,151],[723,6],[726,152],[725,2],[727,153],[672,154],[701,155],[730,156],[729,6],[739,157],[735,1],[737,158],[738,1],[741,159],[740,160],[746,161],[745,162],[744,163],[742,2],[750,164],[755,165],[751,2],[756,2],[757,166],[758,167],[743,2],[752,2],[475,168],[476,168],[477,169],[431,170],[478,171],[479,172],[480,173],[426,2],[429,174],[427,2],[428,2],[481,175],[482,176],[483,177],[484,178],[485,179],[486,180],[487,180],[488,181],[489,182],[490,183],[491,184],[432,2],[430,2],[492,185],[493,186],[494,187],[526,188],[495,189],[496,190],[497,191],[498,192],[499,193],[500,194],[501,195],[502,196],[503,197],[504,198],[505,198],[506,199],[507,2],[508,200],[510,201],[509,202],[511,203],[512,204],[513,205],[514,206],[515,207],[516,208],[517,209],[518,210],[519,211],[520,212],[521,213],[522,214],[523,215],[433,2],[434,2],[435,2],[474,216],[524,217],[525,218],[748,2],[749,2],[747,219],[754,220],[753,221],[759,2],[760,2],[761,222],[417,223],[595,224],[531,225],[557,226],[555,227],[556,228],[558,229],[535,230],[536,231],[538,2],[543,232],[416,2],[542,233],[425,234],[546,235],[539,2],[540,2],[534,236],[545,2],[544,237],[532,238],[533,239],[541,240],[565,241],[580,225],[586,242],[578,243],[587,242],[564,242],[560,244],[583,225],[559,245],[577,246],[588,247],[590,248],[582,225],[530,249],[579,2],[585,250],[561,251],[562,252],[576,243],[584,246],[575,253],[589,254],[581,242],[563,245],[418,2],[421,255],[420,255],[422,256],[424,257],[423,2],[419,258],[592,259],[591,2],[593,260],[594,261],[574,262],[572,263],[568,264],[566,265],[570,265],[569,265],[571,264],[573,264],[567,2],[415,266],[405,2],[613,267],[605,2],[618,2],[626,2],[625,2],[602,2],[632,268],[610,269],[614,2],[609,2],[617,270],[624,2],[631,271],[622,272],[606,2],[612,273],[623,2],[628,274],[600,2],[627,2],[608,2],[604,2],[615,2],[607,2],[620,2],[629,275],[611,269],[621,2],[630,2],[603,2],[601,2],[619,2],[616,276],[436,2],[553,277],[57,2],[732,278],[547,2],[549,2],[414,279],[413,2],[527,160],[529,280],[412,2],[551,281],[550,2],[58,2],[253,282],[226,2],[204,283],[202,283],[252,284],[217,285],[216,285],[117,286],[68,287],[224,286],[225,286],[227,288],[228,286],[229,289],[128,290],[230,286],[201,286],[231,286],[232,291],[233,286],[234,285],[235,292],[236,286],[237,286],[238,286],[239,286],[240,285],[241,286],[242,286],[243,286],[244,286],[245,293],[246,286],[247,286],[248,286],[249,286],[250,286],[67,284],[70,289],[71,289],[72,289],[73,289],[74,289],[75,289],[76,289],[77,286],[79,294],[80,289],[78,289],[81,289],[82,289],[83,289],[84,289],[85,289],[86,289],[87,286],[88,289],[89,289],[90,289],[91,289],[92,289],[93,286],[94,289],[95,289],[96,289],[97,289],[98,289],[99,289],[100,286],[102,295],[101,289],[103,289],[104,289],[105,289],[106,289],[107,293],[108,286],[109,286],[123,296],[111,297],[112,289],[113,289],[114,286],[115,289],[116,289],[118,298],[119,289],[120,289],[121,289],[122,289],[124,289],[125,289],[126,289],[127,289],[129,299],[130,289],[131,289],[132,289],[133,286],[134,289],[135,300],[136,300],[137,300],[138,286],[139,289],[140,289],[141,289],[146,289],[142,289],[143,286],[144,289],[145,286],[147,289],[148,289],[149,289],[150,289],[151,289],[152,289],[153,286],[154,289],[155,289],[156,289],[157,289],[158,289],[159,289],[160,289],[161,289],[162,289],[163,289],[164,289],[165,289],[166,289],[167,289],[168,289],[169,289],[170,301],[171,289],[172,289],[173,289],[174,289],[175,289],[176,289],[177,286],[178,286],[179,286],[180,286],[181,286],[182,289],[183,289],[184,289],[185,289],[203,302],[251,286],[188,303],[187,304],[211,305],[210,306],[206,307],[205,306],[207,308],[196,309],[194,310],[209,311],[208,308],[195,2],[197,312],[110,313],[66,314],[65,289],[200,2],[192,315],[193,316],[190,2],[191,317],[189,289],[198,318],[69,319],[218,2],[219,2],[212,2],[215,285],[214,2],[220,2],[221,2],[213,320],[222,2],[223,2],[186,321],[199,322],[528,323],[54,2],[55,2],[11,2],[9,2],[10,2],[15,2],[14,2],[2,2],[16,2],[17,2],[18,2],[19,2],[20,2],[21,2],[22,2],[23,2],[3,2],[24,2],[25,2],[4,2],[26,2],[30,2],[27,2],[28,2],[29,2],[31,2],[32,2],[33,2],[5,2],[34,2],[35,2],[36,2],[37,2],[6,2],[41,2],[38,2],[39,2],[40,2],[42,2],[7,2],[43,2],[48,2],[49,2],[44,2],[45,2],[46,2],[47,2],[8,2],[56,2],[53,2],[50,2],[51,2],[52,2],[1,2],[13,2],[12,2],[452,324],[462,325],[451,324],[472,326],[443,327],[442,328],[471,329],[465,330],[470,331],[445,332],[459,333],[444,334],[468,335],[440,336],[439,329],[469,337],[441,338],[446,339],[447,2],[450,339],[437,2],[473,340],[463,341],[454,342],[455,343],[457,344],[453,345],[456,346],[466,329],[448,347],[449,348],[458,349],[438,350],[461,341],[460,339],[464,2],[467,351],[406,352],[407,353],[638,354],[634,355],[596,356],[411,357],[410,353],[409,358],[408,353],[733,359],[635,360],[597,352],[599,361],[636,362],[598,6],[637,363],[633,364]],"version":"5.9.3"} \ No newline at end of file diff --git a/mvp/Whatsapp-bot/tsconfig.json b/mvp/Whatsapp-bot/tsconfig.json index 7b906c8..f5ff1be 100644 --- a/mvp/Whatsapp-bot/tsconfig.json +++ b/mvp/Whatsapp-bot/tsconfig.json @@ -1,7 +1,6 @@ { "compilerOptions": { "module": "commonjs", - "ignoreDeprecations": "6.0", "declaration": true, "removeComments": true, "emitDecoratorMetadata": true, diff --git a/mvp/Whatsapp-bot/tsconfig.tsbuildinfo b/mvp/Whatsapp-bot/tsconfig.tsbuildinfo new file mode 100644 index 0000000..ba42f33 --- /dev/null +++ b/mvp/Whatsapp-bot/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.es2021.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.dom.asynciterable.d.ts","./node_modules/typescript/lib/lib.webworker.importscripts.d.ts","./node_modules/typescript/lib/lib.scripthost.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.es2021.promise.d.ts","./node_modules/typescript/lib/lib.es2021.string.d.ts","./node_modules/typescript/lib/lib.es2021.weakref.d.ts","./node_modules/typescript/lib/lib.es2021.intl.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/typescript/lib/lib.es2021.full.d.ts","./node_modules/dotenv/config.d.ts","./node_modules/reflect-metadata/index.d.ts","./node_modules/@nestjs/common/decorators/core/bind.decorator.d.ts","./node_modules/@nestjs/common/interfaces/abstract.interface.d.ts","./node_modules/@nestjs/common/interfaces/controllers/controller-metadata.interface.d.ts","./node_modules/@nestjs/common/interfaces/controllers/controller.interface.d.ts","./node_modules/@nestjs/common/interfaces/features/arguments-host.interface.d.ts","./node_modules/@nestjs/common/interfaces/exceptions/exception-filter.interface.d.ts","./node_modules/rxjs/dist/types/internal/subscription.d.ts","./node_modules/rxjs/dist/types/internal/subscriber.d.ts","./node_modules/rxjs/dist/types/internal/operator.d.ts","./node_modules/rxjs/dist/types/internal/observable.d.ts","./node_modules/rxjs/dist/types/internal/types.d.ts","./node_modules/rxjs/dist/types/internal/operators/audit.d.ts","./node_modules/rxjs/dist/types/internal/operators/audittime.d.ts","./node_modules/rxjs/dist/types/internal/operators/buffer.d.ts","./node_modules/rxjs/dist/types/internal/operators/buffercount.d.ts","./node_modules/rxjs/dist/types/internal/operators/buffertime.d.ts","./node_modules/rxjs/dist/types/internal/operators/buffertoggle.d.ts","./node_modules/rxjs/dist/types/internal/operators/bufferwhen.d.ts","./node_modules/rxjs/dist/types/internal/operators/catcherror.d.ts","./node_modules/rxjs/dist/types/internal/operators/combinelatestall.d.ts","./node_modules/rxjs/dist/types/internal/operators/combineall.d.ts","./node_modules/rxjs/dist/types/internal/operators/combinelatest.d.ts","./node_modules/rxjs/dist/types/internal/operators/combinelatestwith.d.ts","./node_modules/rxjs/dist/types/internal/operators/concat.d.ts","./node_modules/rxjs/dist/types/internal/operators/concatall.d.ts","./node_modules/rxjs/dist/types/internal/operators/concatmap.d.ts","./node_modules/rxjs/dist/types/internal/operators/concatmapto.d.ts","./node_modules/rxjs/dist/types/internal/operators/concatwith.d.ts","./node_modules/rxjs/dist/types/internal/operators/connect.d.ts","./node_modules/rxjs/dist/types/internal/operators/count.d.ts","./node_modules/rxjs/dist/types/internal/operators/debounce.d.ts","./node_modules/rxjs/dist/types/internal/operators/debouncetime.d.ts","./node_modules/rxjs/dist/types/internal/operators/defaultifempty.d.ts","./node_modules/rxjs/dist/types/internal/operators/delay.d.ts","./node_modules/rxjs/dist/types/internal/operators/delaywhen.d.ts","./node_modules/rxjs/dist/types/internal/operators/dematerialize.d.ts","./node_modules/rxjs/dist/types/internal/operators/distinct.d.ts","./node_modules/rxjs/dist/types/internal/operators/distinctuntilchanged.d.ts","./node_modules/rxjs/dist/types/internal/operators/distinctuntilkeychanged.d.ts","./node_modules/rxjs/dist/types/internal/operators/elementat.d.ts","./node_modules/rxjs/dist/types/internal/operators/endwith.d.ts","./node_modules/rxjs/dist/types/internal/operators/every.d.ts","./node_modules/rxjs/dist/types/internal/operators/exhaustall.d.ts","./node_modules/rxjs/dist/types/internal/operators/exhaust.d.ts","./node_modules/rxjs/dist/types/internal/operators/exhaustmap.d.ts","./node_modules/rxjs/dist/types/internal/operators/expand.d.ts","./node_modules/rxjs/dist/types/internal/operators/filter.d.ts","./node_modules/rxjs/dist/types/internal/operators/finalize.d.ts","./node_modules/rxjs/dist/types/internal/operators/find.d.ts","./node_modules/rxjs/dist/types/internal/operators/findindex.d.ts","./node_modules/rxjs/dist/types/internal/operators/first.d.ts","./node_modules/rxjs/dist/types/internal/subject.d.ts","./node_modules/rxjs/dist/types/internal/operators/groupby.d.ts","./node_modules/rxjs/dist/types/internal/operators/ignoreelements.d.ts","./node_modules/rxjs/dist/types/internal/operators/isempty.d.ts","./node_modules/rxjs/dist/types/internal/operators/last.d.ts","./node_modules/rxjs/dist/types/internal/operators/map.d.ts","./node_modules/rxjs/dist/types/internal/operators/mapto.d.ts","./node_modules/rxjs/dist/types/internal/notification.d.ts","./node_modules/rxjs/dist/types/internal/operators/materialize.d.ts","./node_modules/rxjs/dist/types/internal/operators/max.d.ts","./node_modules/rxjs/dist/types/internal/operators/merge.d.ts","./node_modules/rxjs/dist/types/internal/operators/mergeall.d.ts","./node_modules/rxjs/dist/types/internal/operators/mergemap.d.ts","./node_modules/rxjs/dist/types/internal/operators/flatmap.d.ts","./node_modules/rxjs/dist/types/internal/operators/mergemapto.d.ts","./node_modules/rxjs/dist/types/internal/operators/mergescan.d.ts","./node_modules/rxjs/dist/types/internal/operators/mergewith.d.ts","./node_modules/rxjs/dist/types/internal/operators/min.d.ts","./node_modules/rxjs/dist/types/internal/observable/connectableobservable.d.ts","./node_modules/rxjs/dist/types/internal/operators/multicast.d.ts","./node_modules/rxjs/dist/types/internal/operators/observeon.d.ts","./node_modules/rxjs/dist/types/internal/operators/onerrorresumenextwith.d.ts","./node_modules/rxjs/dist/types/internal/operators/pairwise.d.ts","./node_modules/rxjs/dist/types/internal/operators/partition.d.ts","./node_modules/rxjs/dist/types/internal/operators/pluck.d.ts","./node_modules/rxjs/dist/types/internal/operators/publish.d.ts","./node_modules/rxjs/dist/types/internal/operators/publishbehavior.d.ts","./node_modules/rxjs/dist/types/internal/operators/publishlast.d.ts","./node_modules/rxjs/dist/types/internal/operators/publishreplay.d.ts","./node_modules/rxjs/dist/types/internal/operators/race.d.ts","./node_modules/rxjs/dist/types/internal/operators/racewith.d.ts","./node_modules/rxjs/dist/types/internal/operators/reduce.d.ts","./node_modules/rxjs/dist/types/internal/operators/repeat.d.ts","./node_modules/rxjs/dist/types/internal/operators/repeatwhen.d.ts","./node_modules/rxjs/dist/types/internal/operators/retry.d.ts","./node_modules/rxjs/dist/types/internal/operators/retrywhen.d.ts","./node_modules/rxjs/dist/types/internal/operators/refcount.d.ts","./node_modules/rxjs/dist/types/internal/operators/sample.d.ts","./node_modules/rxjs/dist/types/internal/operators/sampletime.d.ts","./node_modules/rxjs/dist/types/internal/operators/scan.d.ts","./node_modules/rxjs/dist/types/internal/operators/sequenceequal.d.ts","./node_modules/rxjs/dist/types/internal/operators/share.d.ts","./node_modules/rxjs/dist/types/internal/operators/sharereplay.d.ts","./node_modules/rxjs/dist/types/internal/operators/single.d.ts","./node_modules/rxjs/dist/types/internal/operators/skip.d.ts","./node_modules/rxjs/dist/types/internal/operators/skiplast.d.ts","./node_modules/rxjs/dist/types/internal/operators/skipuntil.d.ts","./node_modules/rxjs/dist/types/internal/operators/skipwhile.d.ts","./node_modules/rxjs/dist/types/internal/operators/startwith.d.ts","./node_modules/rxjs/dist/types/internal/operators/subscribeon.d.ts","./node_modules/rxjs/dist/types/internal/operators/switchall.d.ts","./node_modules/rxjs/dist/types/internal/operators/switchmap.d.ts","./node_modules/rxjs/dist/types/internal/operators/switchmapto.d.ts","./node_modules/rxjs/dist/types/internal/operators/switchscan.d.ts","./node_modules/rxjs/dist/types/internal/operators/take.d.ts","./node_modules/rxjs/dist/types/internal/operators/takelast.d.ts","./node_modules/rxjs/dist/types/internal/operators/takeuntil.d.ts","./node_modules/rxjs/dist/types/internal/operators/takewhile.d.ts","./node_modules/rxjs/dist/types/internal/operators/tap.d.ts","./node_modules/rxjs/dist/types/internal/operators/throttle.d.ts","./node_modules/rxjs/dist/types/internal/operators/throttletime.d.ts","./node_modules/rxjs/dist/types/internal/operators/throwifempty.d.ts","./node_modules/rxjs/dist/types/internal/operators/timeinterval.d.ts","./node_modules/rxjs/dist/types/internal/operators/timeout.d.ts","./node_modules/rxjs/dist/types/internal/operators/timeoutwith.d.ts","./node_modules/rxjs/dist/types/internal/operators/timestamp.d.ts","./node_modules/rxjs/dist/types/internal/operators/toarray.d.ts","./node_modules/rxjs/dist/types/internal/operators/window.d.ts","./node_modules/rxjs/dist/types/internal/operators/windowcount.d.ts","./node_modules/rxjs/dist/types/internal/operators/windowtime.d.ts","./node_modules/rxjs/dist/types/internal/operators/windowtoggle.d.ts","./node_modules/rxjs/dist/types/internal/operators/windowwhen.d.ts","./node_modules/rxjs/dist/types/internal/operators/withlatestfrom.d.ts","./node_modules/rxjs/dist/types/internal/operators/zip.d.ts","./node_modules/rxjs/dist/types/internal/operators/zipall.d.ts","./node_modules/rxjs/dist/types/internal/operators/zipwith.d.ts","./node_modules/rxjs/dist/types/operators/index.d.ts","./node_modules/rxjs/dist/types/internal/scheduler/action.d.ts","./node_modules/rxjs/dist/types/internal/scheduler.d.ts","./node_modules/rxjs/dist/types/internal/testing/testmessage.d.ts","./node_modules/rxjs/dist/types/internal/testing/subscriptionlog.d.ts","./node_modules/rxjs/dist/types/internal/testing/subscriptionloggable.d.ts","./node_modules/rxjs/dist/types/internal/testing/coldobservable.d.ts","./node_modules/rxjs/dist/types/internal/testing/hotobservable.d.ts","./node_modules/rxjs/dist/types/internal/scheduler/asyncscheduler.d.ts","./node_modules/rxjs/dist/types/internal/scheduler/timerhandle.d.ts","./node_modules/rxjs/dist/types/internal/scheduler/asyncaction.d.ts","./node_modules/rxjs/dist/types/internal/scheduler/virtualtimescheduler.d.ts","./node_modules/rxjs/dist/types/internal/testing/testscheduler.d.ts","./node_modules/rxjs/dist/types/testing/index.d.ts","./node_modules/rxjs/dist/types/internal/symbol/observable.d.ts","./node_modules/rxjs/dist/types/internal/observable/dom/animationframes.d.ts","./node_modules/rxjs/dist/types/internal/behaviorsubject.d.ts","./node_modules/rxjs/dist/types/internal/replaysubject.d.ts","./node_modules/rxjs/dist/types/internal/asyncsubject.d.ts","./node_modules/rxjs/dist/types/internal/scheduler/asapscheduler.d.ts","./node_modules/rxjs/dist/types/internal/scheduler/asap.d.ts","./node_modules/rxjs/dist/types/internal/scheduler/async.d.ts","./node_modules/rxjs/dist/types/internal/scheduler/queuescheduler.d.ts","./node_modules/rxjs/dist/types/internal/scheduler/queue.d.ts","./node_modules/rxjs/dist/types/internal/scheduler/animationframescheduler.d.ts","./node_modules/rxjs/dist/types/internal/scheduler/animationframe.d.ts","./node_modules/rxjs/dist/types/internal/util/identity.d.ts","./node_modules/rxjs/dist/types/internal/util/pipe.d.ts","./node_modules/rxjs/dist/types/internal/util/noop.d.ts","./node_modules/rxjs/dist/types/internal/util/isobservable.d.ts","./node_modules/rxjs/dist/types/internal/lastvaluefrom.d.ts","./node_modules/rxjs/dist/types/internal/firstvaluefrom.d.ts","./node_modules/rxjs/dist/types/internal/util/argumentoutofrangeerror.d.ts","./node_modules/rxjs/dist/types/internal/util/emptyerror.d.ts","./node_modules/rxjs/dist/types/internal/util/notfounderror.d.ts","./node_modules/rxjs/dist/types/internal/util/objectunsubscribederror.d.ts","./node_modules/rxjs/dist/types/internal/util/sequenceerror.d.ts","./node_modules/rxjs/dist/types/internal/util/unsubscriptionerror.d.ts","./node_modules/rxjs/dist/types/internal/observable/bindcallback.d.ts","./node_modules/rxjs/dist/types/internal/observable/bindnodecallback.d.ts","./node_modules/rxjs/dist/types/internal/anycatcher.d.ts","./node_modules/rxjs/dist/types/internal/observable/combinelatest.d.ts","./node_modules/rxjs/dist/types/internal/observable/concat.d.ts","./node_modules/rxjs/dist/types/internal/observable/connectable.d.ts","./node_modules/rxjs/dist/types/internal/observable/defer.d.ts","./node_modules/rxjs/dist/types/internal/observable/empty.d.ts","./node_modules/rxjs/dist/types/internal/observable/forkjoin.d.ts","./node_modules/rxjs/dist/types/internal/observable/from.d.ts","./node_modules/rxjs/dist/types/internal/observable/fromevent.d.ts","./node_modules/rxjs/dist/types/internal/observable/fromeventpattern.d.ts","./node_modules/rxjs/dist/types/internal/observable/generate.d.ts","./node_modules/rxjs/dist/types/internal/observable/iif.d.ts","./node_modules/rxjs/dist/types/internal/observable/interval.d.ts","./node_modules/rxjs/dist/types/internal/observable/merge.d.ts","./node_modules/rxjs/dist/types/internal/observable/never.d.ts","./node_modules/rxjs/dist/types/internal/observable/of.d.ts","./node_modules/rxjs/dist/types/internal/observable/onerrorresumenext.d.ts","./node_modules/rxjs/dist/types/internal/observable/pairs.d.ts","./node_modules/rxjs/dist/types/internal/observable/partition.d.ts","./node_modules/rxjs/dist/types/internal/observable/race.d.ts","./node_modules/rxjs/dist/types/internal/observable/range.d.ts","./node_modules/rxjs/dist/types/internal/observable/throwerror.d.ts","./node_modules/rxjs/dist/types/internal/observable/timer.d.ts","./node_modules/rxjs/dist/types/internal/observable/using.d.ts","./node_modules/rxjs/dist/types/internal/observable/zip.d.ts","./node_modules/rxjs/dist/types/internal/scheduled/scheduled.d.ts","./node_modules/rxjs/dist/types/internal/config.d.ts","./node_modules/rxjs/dist/types/index.d.ts","./node_modules/@nestjs/common/interfaces/exceptions/rpc-exception-filter.interface.d.ts","./node_modules/@nestjs/common/interfaces/exceptions/ws-exception-filter.interface.d.ts","./node_modules/@nestjs/common/interfaces/external/validation-error.interface.d.ts","./node_modules/@nestjs/common/interfaces/features/execution-context.interface.d.ts","./node_modules/@nestjs/common/interfaces/features/can-activate.interface.d.ts","./node_modules/@nestjs/common/interfaces/features/custom-route-param-factory.interface.d.ts","./node_modules/@nestjs/common/interfaces/features/nest-interceptor.interface.d.ts","./node_modules/@nestjs/common/interfaces/features/paramtype.interface.d.ts","./node_modules/@nestjs/common/interfaces/type.interface.d.ts","./node_modules/@nestjs/common/interfaces/features/pipe-transform.interface.d.ts","./node_modules/@nestjs/common/enums/request-method.enum.d.ts","./node_modules/@nestjs/common/enums/http-status.enum.d.ts","./node_modules/@nestjs/common/enums/shutdown-signal.enum.d.ts","./node_modules/@nestjs/common/enums/version-type.enum.d.ts","./node_modules/@nestjs/common/enums/index.d.ts","./node_modules/@nestjs/common/interfaces/version-options.interface.d.ts","./node_modules/@nestjs/common/interfaces/middleware/middleware-configuration.interface.d.ts","./node_modules/@nestjs/common/interfaces/middleware/middleware-consumer.interface.d.ts","./node_modules/@nestjs/common/interfaces/middleware/middleware-config-proxy.interface.d.ts","./node_modules/@nestjs/common/interfaces/middleware/nest-middleware.interface.d.ts","./node_modules/@nestjs/common/interfaces/middleware/index.d.ts","./node_modules/@nestjs/common/interfaces/global-prefix-options.interface.d.ts","./node_modules/@nestjs/common/interfaces/hooks/before-application-shutdown.interface.d.ts","./node_modules/@nestjs/common/interfaces/hooks/on-application-bootstrap.interface.d.ts","./node_modules/@nestjs/common/interfaces/hooks/on-application-shutdown.interface.d.ts","./node_modules/@nestjs/common/interfaces/hooks/on-destroy.interface.d.ts","./node_modules/@nestjs/common/interfaces/hooks/on-init.interface.d.ts","./node_modules/@nestjs/common/interfaces/hooks/index.d.ts","./node_modules/@nestjs/common/interfaces/http/http-exception-body.interface.d.ts","./node_modules/@nestjs/common/interfaces/http/http-redirect-response.interface.d.ts","./node_modules/@nestjs/common/interfaces/external/cors-options.interface.d.ts","./node_modules/@nestjs/common/interfaces/external/https-options.interface.d.ts","./node_modules/@nestjs/common/services/logger.service.d.ts","./node_modules/@nestjs/common/interfaces/nest-application-context-options.interface.d.ts","./node_modules/@nestjs/common/interfaces/nest-application-options.interface.d.ts","./node_modules/@nestjs/common/interfaces/http/http-server.interface.d.ts","./node_modules/@nestjs/common/interfaces/http/message-event.interface.d.ts","./node_modules/@nestjs/common/interfaces/http/raw-body-request.interface.d.ts","./node_modules/@nestjs/common/interfaces/http/index.d.ts","./node_modules/@nestjs/common/interfaces/injectable.interface.d.ts","./node_modules/@nestjs/common/interfaces/microservices/nest-hybrid-application-options.interface.d.ts","./node_modules/@nestjs/common/interfaces/modules/forward-reference.interface.d.ts","./node_modules/@nestjs/common/interfaces/scope-options.interface.d.ts","./node_modules/@nestjs/common/interfaces/modules/injection-token.interface.d.ts","./node_modules/@nestjs/common/interfaces/modules/optional-factory-dependency.interface.d.ts","./node_modules/@nestjs/common/interfaces/modules/provider.interface.d.ts","./node_modules/@nestjs/common/interfaces/modules/module-metadata.interface.d.ts","./node_modules/@nestjs/common/interfaces/modules/dynamic-module.interface.d.ts","./node_modules/@nestjs/common/interfaces/modules/introspection-result.interface.d.ts","./node_modules/@nestjs/common/interfaces/modules/nest-module.interface.d.ts","./node_modules/@nestjs/common/interfaces/modules/index.d.ts","./node_modules/@nestjs/common/interfaces/nest-application-context.interface.d.ts","./node_modules/@nestjs/common/interfaces/websockets/web-socket-adapter.interface.d.ts","./node_modules/@nestjs/common/interfaces/nest-application.interface.d.ts","./node_modules/@nestjs/common/interfaces/nest-microservice.interface.d.ts","./node_modules/@nestjs/common/interfaces/index.d.ts","./node_modules/@nestjs/common/decorators/core/catch.decorator.d.ts","./node_modules/@nestjs/common/decorators/core/controller.decorator.d.ts","./node_modules/@nestjs/common/decorators/core/dependencies.decorator.d.ts","./node_modules/@nestjs/common/decorators/core/exception-filters.decorator.d.ts","./node_modules/@nestjs/common/decorators/core/inject.decorator.d.ts","./node_modules/@nestjs/common/decorators/core/injectable.decorator.d.ts","./node_modules/@nestjs/common/decorators/core/optional.decorator.d.ts","./node_modules/@nestjs/common/decorators/core/set-metadata.decorator.d.ts","./node_modules/@nestjs/common/decorators/core/use-guards.decorator.d.ts","./node_modules/@nestjs/common/decorators/core/use-interceptors.decorator.d.ts","./node_modules/@nestjs/common/decorators/core/use-pipes.decorator.d.ts","./node_modules/@nestjs/common/decorators/core/apply-decorators.d.ts","./node_modules/@nestjs/common/decorators/core/version.decorator.d.ts","./node_modules/@nestjs/common/decorators/core/index.d.ts","./node_modules/@nestjs/common/decorators/modules/global.decorator.d.ts","./node_modules/@nestjs/common/decorators/modules/module.decorator.d.ts","./node_modules/@nestjs/common/decorators/modules/index.d.ts","./node_modules/@nestjs/common/decorators/http/request-mapping.decorator.d.ts","./node_modules/@nestjs/common/decorators/http/route-params.decorator.d.ts","./node_modules/@nestjs/common/decorators/http/http-code.decorator.d.ts","./node_modules/@nestjs/common/decorators/http/create-route-param-metadata.decorator.d.ts","./node_modules/@nestjs/common/decorators/http/render.decorator.d.ts","./node_modules/@nestjs/common/decorators/http/header.decorator.d.ts","./node_modules/@nestjs/common/decorators/http/redirect.decorator.d.ts","./node_modules/@nestjs/common/decorators/http/sse.decorator.d.ts","./node_modules/@nestjs/common/decorators/http/index.d.ts","./node_modules/@nestjs/common/decorators/index.d.ts","./node_modules/@nestjs/common/exceptions/http.exception.d.ts","./node_modules/@nestjs/common/exceptions/bad-request.exception.d.ts","./node_modules/@nestjs/common/exceptions/unauthorized.exception.d.ts","./node_modules/@nestjs/common/exceptions/method-not-allowed.exception.d.ts","./node_modules/@nestjs/common/exceptions/not-found.exception.d.ts","./node_modules/@nestjs/common/exceptions/forbidden.exception.d.ts","./node_modules/@nestjs/common/exceptions/not-acceptable.exception.d.ts","./node_modules/@nestjs/common/exceptions/request-timeout.exception.d.ts","./node_modules/@nestjs/common/exceptions/conflict.exception.d.ts","./node_modules/@nestjs/common/exceptions/gone.exception.d.ts","./node_modules/@nestjs/common/exceptions/payload-too-large.exception.d.ts","./node_modules/@nestjs/common/exceptions/unsupported-media-type.exception.d.ts","./node_modules/@nestjs/common/exceptions/unprocessable-entity.exception.d.ts","./node_modules/@nestjs/common/exceptions/internal-server-error.exception.d.ts","./node_modules/@nestjs/common/exceptions/not-implemented.exception.d.ts","./node_modules/@nestjs/common/exceptions/http-version-not-supported.exception.d.ts","./node_modules/@nestjs/common/exceptions/bad-gateway.exception.d.ts","./node_modules/@nestjs/common/exceptions/service-unavailable.exception.d.ts","./node_modules/@nestjs/common/exceptions/gateway-timeout.exception.d.ts","./node_modules/@nestjs/common/exceptions/im-a-teapot.exception.d.ts","./node_modules/@nestjs/common/exceptions/precondition-failed.exception.d.ts","./node_modules/@nestjs/common/exceptions/misdirected.exception.d.ts","./node_modules/@nestjs/common/exceptions/index.d.ts","./node_modules/@nestjs/common/file-stream/interfaces/streamable-options.interface.d.ts","./node_modules/@nestjs/common/file-stream/interfaces/streamable-handler-response.interface.d.ts","./node_modules/@nestjs/common/file-stream/interfaces/index.d.ts","./node_modules/@nestjs/common/services/console-logger.service.d.ts","./node_modules/@nestjs/common/services/index.d.ts","./node_modules/@nestjs/common/file-stream/streamable-file.d.ts","./node_modules/@nestjs/common/file-stream/index.d.ts","./node_modules/@nestjs/common/module-utils/constants.d.ts","./node_modules/@nestjs/common/module-utils/interfaces/configurable-module-async-options.interface.d.ts","./node_modules/@nestjs/common/module-utils/interfaces/configurable-module-cls.interface.d.ts","./node_modules/@nestjs/common/module-utils/interfaces/configurable-module-host.interface.d.ts","./node_modules/@nestjs/common/module-utils/interfaces/index.d.ts","./node_modules/@nestjs/common/module-utils/configurable-module.builder.d.ts","./node_modules/@nestjs/common/module-utils/index.d.ts","./node_modules/@nestjs/common/pipes/default-value.pipe.d.ts","./node_modules/@nestjs/common/interfaces/external/class-transform-options.interface.d.ts","./node_modules/@nestjs/common/interfaces/external/transformer-package.interface.d.ts","./node_modules/@nestjs/common/interfaces/external/validator-options.interface.d.ts","./node_modules/@nestjs/common/interfaces/external/validator-package.interface.d.ts","./node_modules/@nestjs/common/utils/http-error-by-code.util.d.ts","./node_modules/@nestjs/common/pipes/validation.pipe.d.ts","./node_modules/@nestjs/common/pipes/parse-array.pipe.d.ts","./node_modules/@nestjs/common/pipes/parse-bool.pipe.d.ts","./node_modules/@nestjs/common/pipes/parse-int.pipe.d.ts","./node_modules/@nestjs/common/pipes/parse-float.pipe.d.ts","./node_modules/@nestjs/common/pipes/parse-enum.pipe.d.ts","./node_modules/@nestjs/common/pipes/parse-uuid.pipe.d.ts","./node_modules/@nestjs/common/pipes/file/interfaces/file.interface.d.ts","./node_modules/@nestjs/common/pipes/file/interfaces/index.d.ts","./node_modules/@nestjs/common/pipes/file/file-validator.interface.d.ts","./node_modules/@nestjs/common/pipes/file/file-type.validator.d.ts","./node_modules/@nestjs/common/pipes/file/max-file-size.validator.d.ts","./node_modules/@nestjs/common/pipes/file/parse-file-options.interface.d.ts","./node_modules/@nestjs/common/pipes/file/parse-file.pipe.d.ts","./node_modules/@nestjs/common/pipes/file/parse-file-pipe.builder.d.ts","./node_modules/@nestjs/common/pipes/file/index.d.ts","./node_modules/@nestjs/common/pipes/index.d.ts","./node_modules/@nestjs/common/serializer/class-serializer.interfaces.d.ts","./node_modules/@nestjs/common/serializer/class-serializer.interceptor.d.ts","./node_modules/@nestjs/common/serializer/decorators/serialize-options.decorator.d.ts","./node_modules/@nestjs/common/serializer/decorators/index.d.ts","./node_modules/@nestjs/common/serializer/index.d.ts","./node_modules/@nestjs/common/utils/forward-ref.util.d.ts","./node_modules/@nestjs/common/utils/index.d.ts","./node_modules/@nestjs/common/index.d.ts","./node_modules/axios/index.d.ts","./src/api/api-client.service.ts","./src/api/api.module.ts","./src/leads/leads.service.ts","./src/leads/leads.module.ts","./src/conversacion/conversacion.service.ts","./src/conversacion/conversacion.module.ts","./node_modules/protobufjs/index.d.ts","./node_modules/long/umd/types.d.ts","./node_modules/long/umd/index.d.ts","./node_modules/@whiskeysockets/baileys/waproto/index.d.ts","./node_modules/@whiskeysockets/baileys/lib/types/contact.d.ts","./node_modules/@whiskeysockets/baileys/lib/defaults/index.d.ts","./node_modules/@whiskeysockets/baileys/lib/wabinary/constants.d.ts","./node_modules/@whiskeysockets/baileys/lib/wabinary/types.d.ts","./node_modules/@whiskeysockets/baileys/lib/wabinary/encode.d.ts","./node_modules/@whiskeysockets/baileys/lib/wabinary/decode.d.ts","./node_modules/@whiskeysockets/baileys/lib/wabinary/generic-utils.d.ts","./node_modules/@whiskeysockets/baileys/lib/wabinary/jid-utils.d.ts","./node_modules/@whiskeysockets/baileys/lib/wabinary/index.d.ts","./node_modules/@whiskeysockets/baileys/lib/types/groupmetadata.d.ts","./node_modules/@types/node/compatibility/disposable.d.ts","./node_modules/@types/node/compatibility/indexable.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/compatibility/index.d.ts","./node_modules/@types/node/globals.typedarray.d.ts","./node_modules/@types/node/buffer.buffer.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/web-globals/abortcontroller.d.ts","./node_modules/@types/node/web-globals/domexception.d.ts","./node_modules/@types/node/web-globals/events.d.ts","./node_modules/buffer/index.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/file.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/undici-types/retry-handler.d.ts","./node_modules/undici-types/retry-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/util.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/eventsource.d.ts","./node_modules/undici-types/filereader.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/web-globals/fetch.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.generated.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/index.d.ts","./node_modules/pino-std-serializers/index.d.ts","./node_modules/sonic-boom/types/index.d.ts","./node_modules/pino/pino.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/logger.d.ts","./node_modules/@whiskeysockets/baileys/lib/signal/lid-mapping.d.ts","./node_modules/@whiskeysockets/baileys/lib/types/signal.d.ts","./node_modules/@whiskeysockets/baileys/lib/types/socket.d.ts","./node_modules/@whiskeysockets/baileys/lib/types/message.d.ts","./node_modules/@whiskeysockets/baileys/lib/types/auth.d.ts","./node_modules/@whiskeysockets/baileys/lib/types/bussines.d.ts","./node_modules/@hapi/boom/lib/index.d.ts","./node_modules/@whiskeysockets/baileys/lib/types/call.d.ts","./node_modules/@whiskeysockets/baileys/lib/types/label.d.ts","./node_modules/@whiskeysockets/baileys/lib/types/labelassociation.d.ts","./node_modules/@whiskeysockets/baileys/lib/types/state.d.ts","./node_modules/@whiskeysockets/baileys/lib/types/events.d.ts","./node_modules/@whiskeysockets/baileys/lib/types/chat.d.ts","./node_modules/@whiskeysockets/baileys/lib/types/product.d.ts","./node_modules/@whiskeysockets/baileys/lib/types/mex.d.ts","./node_modules/@whiskeysockets/baileys/lib/types/index.d.ts","./node_modules/hookified/dist/node/index.d.ts","./node_modules/@cacheable/utils/dist/index.d.ts","./node_modules/keyv/dist/index.d.ts","./node_modules/qified/node_modules/hookified/dist/node/index.d.ts","./node_modules/qified/dist/index.d.mts","./node_modules/@cacheable/memory/dist/index.d.ts","./node_modules/cacheable/dist/index.d.ts","./node_modules/@cacheable/node-cache/dist/index.d.ts","./node_modules/@whiskeysockets/baileys/lib/socket/client/types.d.ts","./node_modules/@whiskeysockets/baileys/lib/socket/client/websocket.d.ts","./node_modules/@whiskeysockets/baileys/lib/socket/client/index.d.ts","./node_modules/@whiskeysockets/baileys/lib/socket/index.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/generics.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/decode-wa-message.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/messages-media.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/messages.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/validate-connection.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/crypto.d.ts","./node_modules/@whiskeysockets/baileys/lib/types/usync.d.ts","./node_modules/@whiskeysockets/baileys/lib/wausync/protocols/usyncdeviceprotocol.d.ts","./node_modules/@whiskeysockets/baileys/lib/wausync/usyncuser.d.ts","./node_modules/@whiskeysockets/baileys/lib/wausync/protocols/usynccontactprotocol.d.ts","./node_modules/@whiskeysockets/baileys/lib/wausync/protocols/usyncstatusprotocol.d.ts","./node_modules/@whiskeysockets/baileys/lib/wausync/protocols/usyncdisappearingmodeprotocol.d.ts","./node_modules/@whiskeysockets/baileys/lib/wausync/protocols/usyncusernameprotocol.d.ts","./node_modules/@whiskeysockets/baileys/lib/wausync/protocols/index.d.ts","./node_modules/@whiskeysockets/baileys/lib/wausync/usyncquery.d.ts","./node_modules/@whiskeysockets/baileys/lib/wausync/index.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/signal.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/noise-handler.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/history.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/chat-utils.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/lt-hash.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/auth-utils.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/use-multi-file-auth-state.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/link-preview.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/event-buffer.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/process-message.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/message-retry-manager.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/browser-utils.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/companion-reg-client-utils.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/identity-change-handler.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/stanza-ack.d.ts","./node_modules/@whiskeysockets/baileys/lib/utils/index.d.ts","./node_modules/@whiskeysockets/baileys/lib/wam/constants.d.ts","./node_modules/@whiskeysockets/baileys/lib/wam/binaryinfo.d.ts","./node_modules/@whiskeysockets/baileys/lib/wam/encode.d.ts","./node_modules/@whiskeysockets/baileys/lib/wam/index.d.ts","./node_modules/@whiskeysockets/baileys/lib/index.d.ts","./src/claude/claude.service.ts","./src/media/media.service.ts","./src/whatsapp/whatsapp-debounce.service.ts","./src/webhook/webhook-listener.ts","./node_modules/baileys-antiban/dist/ratelimiter.d.ts","./node_modules/baileys-antiban/dist/warmup.d.ts","./node_modules/baileys-antiban/dist/health.d.ts","./node_modules/baileys-antiban/dist/timelockguard.d.ts","./node_modules/baileys-antiban/dist/replyratio.d.ts","./node_modules/baileys-antiban/dist/contactgraph.d.ts","./node_modules/baileys-antiban/dist/presencechoreographer.d.ts","./node_modules/baileys-antiban/dist/retrytracker.d.ts","./node_modules/baileys-antiban/dist/reconnectthrottle.d.ts","./node_modules/baileys-antiban/dist/lidresolver.d.ts","./node_modules/baileys-antiban/dist/jidcanonicalizer.d.ts","./node_modules/baileys-antiban/dist/sessionstability.d.ts","./node_modules/baileys-antiban/dist/presets.d.ts","./node_modules/baileys-antiban/dist/antiban.d.ts","./node_modules/baileys-antiban/dist/lidfirstresolver.d.ts","./node_modules/baileys-antiban/dist/retryreason.d.ts","./node_modules/baileys-antiban/dist/wrapper.d.ts","./node_modules/baileys-antiban/dist/messagequeue.d.ts","./node_modules/baileys-antiban/dist/contentvariator.d.ts","./node_modules/baileys-antiban/dist/webhooks.d.ts","./node_modules/baileys-antiban/dist/scheduler.d.ts","./node_modules/baileys-antiban/dist/stateadapter.d.ts","./node_modules/baileys-antiban/dist/persist.d.ts","./node_modules/baileys-antiban/dist/profiles.d.ts","./node_modules/baileys-antiban/dist/messagerecovery.d.ts","./node_modules/baileys-antiban/dist/devicefingerprint.d.ts","./node_modules/baileys-antiban/dist/credssnapshot.d.ts","./node_modules/baileys-antiban/dist/readreceiptvariance.d.ts","./node_modules/baileys-antiban/dist/proxyrotator.d.ts","./node_modules/baileys-antiban/dist/sessionfingerprint.d.ts","./node_modules/baileys-antiban/dist/stealthconnect.d.ts","./node_modules/baileys-antiban/dist/observability.d.ts","./node_modules/baileys-antiban/dist/index.d.ts","./src/whatsapp/whatsapp.service.ts","./src/claude/claude.module.ts","./src/media/media.module.ts","./src/webhook/webhook.module.ts","./src/whatsapp/whatsapp.module.ts","./src/app.module.ts","./node_modules/@nestjs/core/adapters/http-adapter.d.ts","./node_modules/@nestjs/core/adapters/index.d.ts","./node_modules/@nestjs/common/constants.d.ts","./node_modules/@nestjs/core/inspector/interfaces/edge.interface.d.ts","./node_modules/@nestjs/core/inspector/interfaces/entrypoint.interface.d.ts","./node_modules/@nestjs/core/inspector/interfaces/extras.interface.d.ts","./node_modules/@nestjs/core/inspector/interfaces/node.interface.d.ts","./node_modules/@nestjs/core/injector/settlement-signal.d.ts","./node_modules/@nestjs/core/injector/injector.d.ts","./node_modules/@nestjs/core/inspector/interfaces/serialized-graph-metadata.interface.d.ts","./node_modules/@nestjs/core/inspector/interfaces/serialized-graph-json.interface.d.ts","./node_modules/@nestjs/core/inspector/serialized-graph.d.ts","./node_modules/@nestjs/core/injector/module-token-factory.d.ts","./node_modules/@nestjs/core/injector/compiler.d.ts","./node_modules/@nestjs/core/injector/modules-container.d.ts","./node_modules/@nestjs/core/injector/container.d.ts","./node_modules/@nestjs/core/injector/instance-links-host.d.ts","./node_modules/@nestjs/core/injector/abstract-instance-resolver.d.ts","./node_modules/@nestjs/core/injector/module-ref.d.ts","./node_modules/@nestjs/core/injector/module.d.ts","./node_modules/@nestjs/core/injector/instance-wrapper.d.ts","./node_modules/@nestjs/core/router/interfaces/exclude-route-metadata.interface.d.ts","./node_modules/@nestjs/core/application-config.d.ts","./node_modules/@nestjs/core/constants.d.ts","./node_modules/@nestjs/core/discovery/discovery-module.d.ts","./node_modules/@nestjs/core/discovery/discovery-service.d.ts","./node_modules/@nestjs/core/discovery/index.d.ts","./node_modules/@nestjs/core/helpers/http-adapter-host.d.ts","./node_modules/@nestjs/core/exceptions/base-exception-filter.d.ts","./node_modules/@nestjs/core/exceptions/index.d.ts","./node_modules/@nestjs/core/helpers/context-id-factory.d.ts","./node_modules/@nestjs/common/interfaces/exceptions/exception-filter-metadata.interface.d.ts","./node_modules/@nestjs/core/exceptions/exceptions-handler.d.ts","./node_modules/@nestjs/core/router/router-proxy.d.ts","./node_modules/@nestjs/core/helpers/context-creator.d.ts","./node_modules/@nestjs/core/exceptions/base-exception-filter-context.d.ts","./node_modules/@nestjs/common/interfaces/exceptions/rpc-exception-filter-metadata.interface.d.ts","./node_modules/@nestjs/common/interfaces/exceptions/index.d.ts","./node_modules/@nestjs/core/exceptions/external-exception-filter.d.ts","./node_modules/@nestjs/core/exceptions/external-exceptions-handler.d.ts","./node_modules/@nestjs/core/exceptions/external-exception-filter-context.d.ts","./node_modules/@nestjs/core/guards/constants.d.ts","./node_modules/@nestjs/core/helpers/execution-context-host.d.ts","./node_modules/@nestjs/core/guards/guards-consumer.d.ts","./node_modules/@nestjs/core/guards/guards-context-creator.d.ts","./node_modules/@nestjs/core/guards/index.d.ts","./node_modules/@nestjs/core/interceptors/interceptors-consumer.d.ts","./node_modules/@nestjs/core/interceptors/interceptors-context-creator.d.ts","./node_modules/@nestjs/core/interceptors/index.d.ts","./node_modules/@nestjs/common/enums/route-paramtypes.enum.d.ts","./node_modules/@nestjs/core/pipes/params-token-factory.d.ts","./node_modules/@nestjs/core/pipes/pipes-consumer.d.ts","./node_modules/@nestjs/core/pipes/pipes-context-creator.d.ts","./node_modules/@nestjs/core/pipes/index.d.ts","./node_modules/@nestjs/core/helpers/context-utils.d.ts","./node_modules/@nestjs/core/injector/inquirer/inquirer-constants.d.ts","./node_modules/@nestjs/core/injector/inquirer/index.d.ts","./node_modules/@nestjs/core/interfaces/module-definition.interface.d.ts","./node_modules/@nestjs/core/interfaces/module-override.interface.d.ts","./node_modules/@nestjs/core/inspector/interfaces/enhancer-metadata-cache-entry.interface.d.ts","./node_modules/@nestjs/core/inspector/graph-inspector.d.ts","./node_modules/@nestjs/core/metadata-scanner.d.ts","./node_modules/@nestjs/core/scanner.d.ts","./node_modules/@nestjs/core/injector/instance-loader.d.ts","./node_modules/@nestjs/core/injector/lazy-module-loader/lazy-module-loader-options.interface.d.ts","./node_modules/@nestjs/core/injector/lazy-module-loader/lazy-module-loader.d.ts","./node_modules/@nestjs/core/injector/index.d.ts","./node_modules/@nestjs/core/helpers/interfaces/external-handler-metadata.interface.d.ts","./node_modules/@nestjs/core/helpers/interfaces/params-metadata.interface.d.ts","./node_modules/@nestjs/core/helpers/external-context-creator.d.ts","./node_modules/@nestjs/core/helpers/index.d.ts","./node_modules/@nestjs/core/inspector/initialize-on-preview.allowlist.d.ts","./node_modules/@nestjs/core/inspector/partial-graph.host.d.ts","./node_modules/@nestjs/core/inspector/index.d.ts","./node_modules/@nestjs/core/middleware/route-info-path-extractor.d.ts","./node_modules/@nestjs/core/middleware/routes-mapper.d.ts","./node_modules/@nestjs/core/middleware/builder.d.ts","./node_modules/@nestjs/core/middleware/index.d.ts","./node_modules/@nestjs/core/nest-application-context.d.ts","./node_modules/@nestjs/core/nest-application.d.ts","./node_modules/@nestjs/common/interfaces/microservices/nest-microservice-options.interface.d.ts","./node_modules/@nestjs/core/nest-factory.d.ts","./node_modules/@nestjs/core/repl/repl.d.ts","./node_modules/@nestjs/core/repl/index.d.ts","./node_modules/@nestjs/core/router/interfaces/routes.interface.d.ts","./node_modules/@nestjs/core/router/interfaces/index.d.ts","./node_modules/@nestjs/core/router/request/request-constants.d.ts","./node_modules/@nestjs/core/router/request/index.d.ts","./node_modules/@nestjs/core/router/router-module.d.ts","./node_modules/@nestjs/core/router/index.d.ts","./node_modules/@nestjs/core/services/reflector.service.d.ts","./node_modules/@nestjs/core/services/index.d.ts","./node_modules/@nestjs/core/index.d.ts","./node_modules/dotenv/lib/main.d.ts","./src/main.ts","./node_modules/@babel/types/lib/index.d.ts","./node_modules/@types/babel__generator/index.d.ts","./node_modules/@babel/parser/typings/babel-parser.d.ts","./node_modules/@types/babel__template/index.d.ts","./node_modules/@types/babel__traverse/index.d.ts","./node_modules/@types/babel__core/index.d.ts","./node_modules/@types/connect/index.d.ts","./node_modules/@types/body-parser/index.d.ts","./node_modules/@types/estree/index.d.ts","./node_modules/@types/json-schema/index.d.ts","./node_modules/@types/eslint/use-at-your-own-risk.d.ts","./node_modules/@types/eslint/index.d.ts","./node_modules/@types/eslint-scope/index.d.ts","./node_modules/@types/send/index.d.ts","./node_modules/@types/qs/index.d.ts","./node_modules/@types/range-parser/index.d.ts","./node_modules/@types/express-serve-static-core/index.d.ts","./node_modules/@types/http-errors/index.d.ts","./node_modules/@types/mime/index.d.ts","./node_modules/@types/serve-static/node_modules/@types/send/index.d.ts","./node_modules/@types/serve-static/index.d.ts","./node_modules/@types/express/index.d.ts","./node_modules/@types/istanbul-lib-coverage/index.d.ts","./node_modules/@types/istanbul-lib-report/index.d.ts","./node_modules/@types/istanbul-reports/index.d.ts","./node_modules/@types/stack-utils/index.d.ts","./node_modules/@types/yargs-parser/index.d.ts","./node_modules/@types/yargs/index.d.ts"],"fileIdsList":[[431,478,734],[431,478],[431,478,547,548,549],[431,478,547,549,553],[309,431,478],[404,431,478],[59,310,311,312,313,314,315,316,317,318,319,320,321,322,431,478],[262,296,431,478],[269,431,478],[259,309,404,431,478],[327,328,329,330,331,332,333,334,431,478],[264,431,478],[309,404,431,478],[323,326,335,431,478],[324,325,431,478],[300,431,478],[264,265,266,267,431,478],[337,431,478],[282,431,478],[337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,431,478],[365,431,478],[360,361,431,478],[362,364,431,478,508],[58,268,309,336,359,364,366,373,396,401,403,431,478],[64,262,431,478],[63,431,478],[64,254,255,431,478,670,675],[254,262,431,478],[63,253,431,478],[262,375,431,478],[256,377,431,478],[253,257,431,478],[63,309,431,478],[261,262,431,478],[274,431,478],[276,277,278,279,280,431,478],[268,431,478],[268,269,284,288,431,478],[282,283,289,290,291,431,478],[60,61,62,63,64,254,255,256,257,258,259,260,261,262,263,269,274,275,281,288,292,293,294,296,304,305,306,307,308,431,478],[287,431,478],[270,271,272,273,431,478],[262,270,271,431,478],[262,268,269,431,478],[262,272,431,478],[262,300,431,478],[295,297,298,299,300,301,302,303,431,478],[60,262,431,478],[296,431,478],[60,262,295,299,301,431,478],[271,431,478],[297,431,478],[262,296,297,298,431,478],[286,431,478],[262,266,286,304,431,478],[284,285,287,431,478],[258,260,269,275,284,289,305,306,309,431,478],[64,258,260,263,305,306,431,478],[267,431,478],[253,431,478],[286,309,367,371,431,478],[371,372,431,478],[309,367,431,478],[309,367,368,431,478],[368,369,431,478],[368,369,370,431,478],[263,431,478],[388,389,431,478],[388,431,478],[389,390,391,392,393,394,431,478],[387,431,478],[379,389,431,478],[389,390,391,392,393,431,478],[263,388,389,392,431,478],[374,380,381,382,383,384,385,386,395,431,478],[263,309,380,431,478],[263,379,431,478],[263,379,404,431,478],[256,262,263,375,376,377,378,379,431,478],[253,309,375,376,397,431,478],[309,375,431,478],[399,431,478],[336,397,431,478],[397,398,400,431,478],[286,363,431,478],[295,431,478],[268,309,431,478],[402,431,478],[284,288,309,404,431,478],[431,478,639],[309,404,431,478,659,660],[431,478,641],[404,431,478,653,658,659],[431,478,663,664],[64,309,431,478,654,659,673],[404,431,478,640,666],[63,404,431,478,667,670],[309,431,478,654,659,661,672,674,678],[63,431,478,676,677],[431,478,667],[253,309,404,431,478,681],[309,404,431,478,654,659,661,673],[431,478,680,682,683],[309,431,478,659],[431,478,659],[309,404,431,478,681],[63,309,404,431,478],[309,404,431,478,653,654,659,679,681,684,687,692,693,706,707],[253,431,478,639],[431,478,666,669,708],[431,478,693,705],[58,431,478,640,661,662,665,668,700,705,709,712,716,717,718,720,722,728,730],[309,404,431,478,647,655,658,659],[309,431,478,651],[309,404,431,478,641,650,651,652,653,658,659,661,731],[431,478,653,654,657,659,695,704],[309,404,431,478,646,658,659],[431,478,694],[404,431,478,654,659],[404,431,478,647,654,658,699],[309,404,431,478,641,646,658],[404,431,478,652,653,657,697,701,702,703],[404,431,478,647,654,655,656,658,659],[262,404,431,478],[309,431,478,641,654,657,659],[431,478,658],[431,478,643,644,645,654,658,659,698],[431,478,650,699,710,711],[404,431,478,641,659],[404,431,478,641],[431,478,642,643,644,645,648,650],[431,478,647],[431,478,649,650],[404,431,478,642,643,644,645,648,649],[431,478,685,686],[309,431,478,654,659,661,673],[431,478,696],[293,431,478],[274,309,431,478,713,714],[431,478,715],[309,431,478,661],[309,431,478,654,661],[287,309,404,431,478,647,654,655,656,658,659],[284,286,309,404,431,478,640,654,661,699,717],[287,288,404,431,478,639,719],[431,478,689,690,691],[404,431,478,688],[431,478,721],[404,431,478,506],[431,478,724,726,727],[431,478,723],[431,478,725],[404,431,478,653,658,724],[431,478,671],[309,404,431,478,641,654,658,659,661,696,697,699,700],[431,478,729],[431,478,734,735,736,737,738],[431,478,734,736],[431,478,492,526,740],[431,478,492,526],[431,478,742,745],[431,478,742,743,744],[431,478,745],[431,478,489,492,526,747,748,749],[431,478,741,748,750,754],[431,478,756],[431,478,757],[431,475,478],[431,477,478],[478],[431,478,483,511],[431,478,479,484,489,497,508,519],[431,478,479,480,489,497],[426,427,428,431,478],[431,478,481,520],[431,478,482,483,490,498],[431,478,483,508,516],[431,478,484,486,489,497],[431,477,478,485],[431,478,486,487],[431,478,488,489],[431,477,478,489],[431,478,489,490,491,508,519],[431,478,489,490,491,504,508,511],[431,478,486,489,492,497,508,519],[431,478,489,490,492,493,497,508,516,519],[431,478,492,494,508,516,519],[429,430,431,432,433,434,435,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525],[431,478,489,495],[431,478,496,519,524],[431,478,486,489,497,508],[431,478,498],[431,478,499],[431,477,478,500],[431,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525],[431,478,502],[431,478,503],[431,478,489,504,505],[431,478,504,506,520,522],[431,478,489,508,509,511],[431,478,510,511],[431,478,508,509],[431,478,511],[431,478,512],[431,475,478,508,513],[431,478,489,514,515],[431,478,514,515],[431,478,483,497,508,516],[431,478,517],[431,478,497,518],[431,478,492,503,519],[431,478,483,520],[431,478,508,521],[431,478,496,522],[431,478,523],[431,473,478],[431,473,478,489,491,500,508,511,519,522,524],[431,478,508,525],[431,478,490,508,526],[431,478,492,526,751,753],[431,478,490,508,526,752],[431,478,760],[415,431,478,546],[415,417,424,431,478,546,558,574,590,594],[431,478,530,546],[431,478,555,556],[431,478,489,519,546],[431,478,555],[431,478,530,536,537,539,546,554,557,595],[415,416,431,478,534],[415,431,478],[415,431,478,534,535,536,539,540,542],[415,416,425,431,478,534,535,537,538,539,540,541,543],[416,431,478,534],[416,425,431,478,532,533,534,535,538,541,542,543,544,545],[415,417,424,425,431,478,508,519,530,533],[431,478,534],[415,431,478,531],[415,425,431,478,494,519,530,532,534,535],[416,431,478,537],[424,431,478,574],[431,478,546],[415,424,431,478,530,546],[424,431,478,530,532,546],[415,424,431,478,546],[415,431,478,530,546],[424,431,478,530,554],[431,478,559,560,561,562,563,564,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589],[431,478,529],[415,431,478,530],[415,417,424,431,478,490,494,508,519,530,537,546],[415,431,478,508,530,546,561],[424,431,478,535,546,574],[424,431,478],[419,431,478],[415,419,431,478],[419,420,421,422,423,431,478],[418,431,478],[431,478,591],[431,478,592],[431,478,591,592,593],[431,478,567,572,573],[431,478,566,568,569,570,571],[424,431,478,565,567],[424,431,478,565],[412,414,431,478],[431,478,600,601,602,603,604,605,606,607,608,609,610,611,612],[431,478,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631],[431,478,609],[431,478,489],[431,478,613],[431,478,601],[431,478,602,603],[431,478,492],[431,478,625],[431,478,601,611,613],[431,478,547,548,549,551,552],[431,478,519,526],[413,431,478],[431,478,489,524,527,528],[431,478,550],[65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,81,83,84,85,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,116,117,118,119,121,122,123,124,125,126,127,128,129,130,131,132,134,135,136,137,138,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,182,184,185,186,188,197,199,200,201,202,203,204,206,207,209,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,431,478],[110,431,478],[66,69,431,478],[68,431,478],[68,69,431,478],[65,66,67,69,431,478],[66,68,69,226,431,478],[69,431,478],[65,68,110,431,478],[68,69,226,431,478],[68,234,431,478],[66,68,69,431,478],[78,431,478],[101,431,478],[122,431,478],[68,69,110,431,478],[69,117,431,478],[68,69,110,128,431,478],[68,69,128,431,478],[69,169,431,478],[69,110,431,478],[65,69,187,431,478],[65,69,188,431,478],[210,431,478],[194,196,431,478],[205,431,478],[194,431,478],[65,69,187,194,195,431,478],[187,188,196,431,478],[208,431,478],[65,69,194,195,196,431,478],[67,68,69,431,478],[65,69,431,478],[66,68,188,189,190,191,431,478],[110,188,189,190,191,431,478],[188,190,431,478],[68,189,190,192,193,197,431,478],[65,68,431,478],[69,212,431,478],[70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,112,113,114,115,116,118,119,120,121,122,123,124,125,126,127,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,182,183,184,185,431,478],[198,431,478],[431,478,489,526],[431,445,449,478,519],[431,445,478,508,519],[431,440,478],[431,442,445,478,516,519],[431,478,497,516],[431,478,526],[431,440,478,526],[431,442,445,478,497,519],[431,437,438,441,444,478,489,508,519],[431,445,452,478],[431,437,443,478],[431,445,466,467,478],[431,441,445,478,511,519,526],[431,466,478,526],[431,439,440,478,526],[431,445,478],[431,439,440,441,442,443,444,445,446,447,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,467,468,469,470,471,472,478],[431,445,460,478],[431,445,452,453,478],[431,443,445,453,454,478],[431,444,478],[431,437,440,445,478],[431,445,449,453,454,478],[431,449,478],[431,443,445,448,478,519],[431,437,442,445,452,478],[431,478,508],[431,440,445,466,478,524,526],[404,405,431,478],[404,406,431,478],[57,404,407,409,411,431,478,634,635,636,637],[404,409,431,478,596],[404,405,408,431,478,490,499],[404,410,431,478],[404,408,431,478],[58,431,478,638,731,732],[404,431,478,597],[404,406,431,478,492,633],[404,407,431,478,599],[404,409,411,431,478,598,633,634,635,636],[404,406,408,410,431,478,489,499,537,595,596,597,598,599,632]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","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":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","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":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","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":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","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":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"4a66df3ab5de5cfcda11538cffddd67ff6a174e003788e270914c1e0248483cf","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"8d6d51a5118d000ed3bfe6e1dd1335bebfff3fef23cd2af2f84a24d30f90cc90","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d8dedbec739bc79642c1e96e9bfc0b83b25b104a0486aebf016fc7b85b39f48","impliedFormat":1},{"version":"e89535c3ec439608bcd0f68af555d0e5ddf121c54abe69343549718bd7506b9c","impliedFormat":1},{"version":"622a984b60c294ffb2f9152cf1d4d12e91d2b733d820eec949cf54d63a3c1025","impliedFormat":1},{"version":"81aae92abdeaccd9c1723cef39232c90c1aed9d9cf199e6e2a523b7d8e058a11","impliedFormat":1},{"version":"a63a6c6806a1e519688ef7bd8ca57be912fc0764485119dbd923021eb4e79665","impliedFormat":1},{"version":"75b57b109d774acca1e151df21cf5cb54c7a1df33a273f0457b9aee4ebd36fb9","impliedFormat":1},{"version":"073ca26c96184db9941b5ec0ddea6981c9b816156d9095747809e524fdd90e35","impliedFormat":1},{"version":"e41d17a2ec23306d953cda34e573ed62954ca6ea9b8c8b74e013d07a6886ce47","impliedFormat":1},{"version":"241bd4add06f06f0699dcd58f3b334718d85e3045d9e9d4fa556f11f4d1569c1","impliedFormat":1},{"version":"2ae3787e1498b20aad1b9c2ee9ea517ec30e89b70d242d8e3e52d1e091039695","impliedFormat":1},{"version":"c7c72c4cffb1bc83617eefed71ed68cc89df73cab9e19507ccdecb3e72b4967e","affectsGlobalScope":true,"impliedFormat":1},{"version":"b8bff8a60af0173430b18d9c3e5c443eaa3c515617210c0c7b3d2e1743c19ecb","impliedFormat":1},{"version":"38b38db08e7121828294dec10957a7a9ff263e33e2a904b346516d4a4acca482","impliedFormat":1},{"version":"a76ebdf2579e68e4cfe618269c47e5a12a4e045c2805ed7f7ab37af8daa6b091","impliedFormat":1},{"version":"8a2aaea564939c22be05d665cc955996721bad6d43148f8fa21ae8f64afecd37","impliedFormat":1},{"version":"e59d36b7b6e8ba2dd36d032a5f5c279d2460968c8b4e691ca384f118fb09b52a","impliedFormat":1},{"version":"e96885c0684c9042ec72a9a43ef977f6b4b4a2728f4b9e737edcbaa0c74e5bf6","impliedFormat":1},{"version":"95950a187596e206d32d5d9c7b932901088c65ed8f9040e614aa8e321e0225ef","impliedFormat":1},{"version":"89e061244da3fc21b7330f4bd32f47c1813dd4d7f1dc3d0883d88943f035b993","impliedFormat":1},{"version":"e46558c2e04d06207b080138678020448e7fc201f3d69c2601b0d1456105f29a","impliedFormat":1},{"version":"71549375db52b1163411dba383b5f4618bdf35dc57fa327a1c7d135cf9bf67d1","impliedFormat":1},{"version":"7e6b2d61d6215a4e82ea75bc31a80ebb8ad0c2b37a60c10c70dd671e8d9d6d5d","impliedFormat":1},{"version":"78bea05df2896083cca28ed75784dde46d4b194984e8fc559123b56873580a23","impliedFormat":1},{"version":"5dd04ced37b7ea09f29d277db11f160df7fd73ba8b9dba86cb25552e0653a637","impliedFormat":1},{"version":"f74b81712e06605677ae1f061600201c425430151f95b5ef4d04387ad7617e6a","impliedFormat":1},{"version":"9a72847fcf4ac937e352d40810f7b7aec7422d9178451148296cf1aa19467620","impliedFormat":1},{"version":"3ae18f60e0b96fa1e025059b7d25b3247ba4dcb5f4372f6d6e67ce2adac74eac","impliedFormat":1},{"version":"2b9260f44a2e071450ae82c110f5dc8f330c9e5c3e85567ed97248330f2bf639","impliedFormat":1},{"version":"4f196e13684186bda6f5115fc4677a87cf84a0c9c4fc17b8f51e0984f3697b6d","impliedFormat":1},{"version":"61419f2c5822b28c1ea483258437c1faab87d00c6f84481aa22afb3380d8e9a4","impliedFormat":1},{"version":"64479aee03812264e421c0bf5104a953ca7b02740ba80090aead1330d0effe91","impliedFormat":1},{"version":"0521108c9f8ddb17654a0a54dae6ba9667c99eddccfd6af5748113e022d1c37a","impliedFormat":1},{"version":"c5570e504be103e255d80c60b56c367bf45d502ca52ee35c55dec882f6563b5c","impliedFormat":1},{"version":"ee764e6e9a7f2b987cc1a2c0a9afd7a8f4d5ebc4fdb66ad557a7f14a8c2bd320","impliedFormat":1},{"version":"0520b5093712c10c6ef23b5fea2f833bf5481771977112500045e5ea7e8e2b69","impliedFormat":1},{"version":"5c3cf26654cf762ac4d7fd7b83f09acfe08eef88d2d6983b9a5a423cb4004ca3","impliedFormat":1},{"version":"e60fa19cf7911c1623b891155d7eb6b7e844e9afdf5738e3b46f3b687730a2bd","impliedFormat":1},{"version":"b1fd72ff2bb0ba91bb588f3e5329f8fc884eb859794f1c4657a2bfa122ae54d0","impliedFormat":1},{"version":"6cf42a4f3cfec648545925d43afaa8bb364ac10a839ffed88249da109361b275","impliedFormat":1},{"version":"d7058e75920120b142a9d57be25562a3cd9a936269fd52908505f530105f2ec4","impliedFormat":1},{"version":"6df52b70d7f7702202f672541a5f4a424d478ee5be51a9d37b8ccbe1dbf3c0f2","impliedFormat":1},{"version":"0ca7f997e9a4d8985e842b7c882e521b6f63233c4086e9fe79dd7a9dc4742b5e","impliedFormat":1},{"version":"91046b5c6b55d3b194c81fd4df52f687736fad3095e9d103ead92bb64dc160ee","impliedFormat":1},{"version":"db5704fdad56c74dfc5941283c1182ed471bd17598209d3ac4a49faa72e43cfc","impliedFormat":1},{"version":"758e8e89559b02b81bc0f8fd395b17ad5aff75490c862cbe369bb1a3d1577c40","impliedFormat":1},{"version":"2ee64342c077b1868f1834c063f575063051edd6e2964257d34aad032d6b657c","impliedFormat":1},{"version":"6f6b4b3d670b6a5f0e24ea001c1b3d36453c539195e875687950a178f1730fa7","impliedFormat":1},{"version":"a472a1d3f25ce13a1d44911cd3983956ac040ce2018e155435ea34afb25f864c","impliedFormat":1},{"version":"b48b83a86dd9cfe36f8776b3ff52fcd45b0e043c0538dc4a4b149ba45fe367b9","impliedFormat":1},{"version":"792de5c062444bd2ee0413fb766e57e03cce7cdaebbfc52fc0c7c8e95069c96b","impliedFormat":1},{"version":"a79e3e81094c7a04a885bad9b049c519aace53300fb8a0fe4f26727cb5a746ce","impliedFormat":1},{"version":"93181bac0d90db185bb730c95214f6118ae997fe836a98a49664147fbcaf1988","impliedFormat":1},{"version":"8a4e89564d8ea66ad87ee3762e07540f9f0656a62043c910d819b4746fc429c5","impliedFormat":1},{"version":"b9011d99942889a0f95e120d06b698c628b0b6fdc3e6b7ecb459b97ed7d5bcc6","impliedFormat":1},{"version":"4d639cbbcc2f8f9ce6d55d5d503830d6c2556251df332dc5255d75af53c8a0e7","impliedFormat":1},{"version":"cdb48277f600ab5f429ecf1c5ea046683bc6b9f73f3deab9a100adac4b34969c","impliedFormat":1},{"version":"75be84956a29040a1afbe864c0a7a369dfdb739380072484eff153905ef867ee","impliedFormat":1},{"version":"b06b4adc2ae03331a92abd1b19af8eb91ec2bf8541747ee355887a167d53145e","impliedFormat":1},{"version":"c54166a85bd60f86d1ebb90ce0117c0ecb850b8a33b366691629fdf26f1bbbd8","impliedFormat":1},{"version":"0d417c15c5c635384d5f1819cc253a540fe786cc3fda32f6a2ae266671506a21","impliedFormat":1},{"version":"80f23f1d60fbed356f726b3b26f9d348dddbb34027926d10d59fad961e70a730","impliedFormat":1},{"version":"cb59317243a11379a101eb2f27b9df1022674c3df1df0727360a0a3f963f523b","impliedFormat":1},{"version":"cc20bb2227dd5de0aab0c8d697d1572f8000550e62c7bf5c92f212f657dd88c5","impliedFormat":1},{"version":"06b8a7d46195b6b3980e523ef59746702fd210b71681a83a5cf73799623621f9","impliedFormat":1},{"version":"860e4405959f646c101b8005a191298b2381af8f33716dc5f42097e4620608f8","impliedFormat":1},{"version":"f7e32adf714b8f25d3c1783473abec3f2e82d5724538d8dcf6f51baaaff1ca7a","impliedFormat":1},{"version":"d0da80c845999a16c24d0783033fb5366ada98df17867c98ad433ede05cd87fd","impliedFormat":1},{"version":"bfbf80f9cd4558af2d7b2006065340aaaced15947d590045253ded50aabb9bc5","impliedFormat":1},{"version":"fd9a991b51870325e46ebb0e6e18722d313f60cd8e596e645ec5ac15b96dbf4e","impliedFormat":1},{"version":"c3bd2b94e4298f81743d92945b80e9b56c1cdfb2bef43c149b7106a2491b1fc9","impliedFormat":1},{"version":"a246cce57f558f9ebaffd55c1e5673da44ea603b4da3b2b47eb88915d30a9181","impliedFormat":1},{"version":"d993eacc103c5a065227153c9aae8acea3a4322fe1a169ee7c70b77015bf0bb2","impliedFormat":1},{"version":"fc2b03d0c042aa1627406e753a26a1eaad01b3c496510a78016822ef8d456bb6","impliedFormat":1},{"version":"063c7ebbe756f0155a8b453f410ca6b76ffa1bbc1048735bcaf9c7c81a1ce35f","impliedFormat":1},{"version":"314e402cd481370d08f63051ae8b8c8e6370db5ee3b8820eeeaaf8d722a6dac6","impliedFormat":1},{"version":"9669075ac38ce36b638b290ba468233980d9f38bdc62f0519213b2fd3e2552ec","impliedFormat":1},{"version":"4d123de012c24e2f373925100be73d50517ac490f9ed3578ac82d0168bfbd303","impliedFormat":1},{"version":"656c9af789629aa36b39092bee3757034009620439d9a39912f587538033ce28","impliedFormat":1},{"version":"3ac3f4bdb8c0905d4c3035d6f7fb20118c21e8a17bee46d3735195b0c2a9f39f","impliedFormat":1},{"version":"1f453e6798ed29c86f703e9b41662640d4f2e61337007f27ac1c616f20093f69","impliedFormat":1},{"version":"af43b7871ff21c62bf1a54ec5c488e31a8d3408d5b51ff2e9f8581b6c55f2fc7","impliedFormat":1},{"version":"70550511d25cbb0b6a64dcac7fffc3c1397fd4cbeb6b23ccc7f9b794ab8a6954","impliedFormat":1},{"version":"af0fbf08386603a62f2a78c42d998c90353b1f1d22e05a384545f7accf881e0a","impliedFormat":1},{"version":"cefc20054d20b85b534206dbcedd509bb74f87f3d8bc45c58c7be3a76caa45e1","impliedFormat":1},{"version":"ad6eee4877d0f7e5244d34bc5026fd6e9cf8e66c5c79416b73f9f6ebf132f924","impliedFormat":1},{"version":"4888fd2bcfee9a0ce89d0df860d233e0cee8ee9c479b6bd5a5d5f9aae98342fe","impliedFormat":1},{"version":"f4749c102ced952aa6f40f0b579865429c4869f6d83df91000e98005476bee87","impliedFormat":1},{"version":"56654d2c5923598384e71cb808fac2818ca3f07dd23bb018988a39d5e64f268b","impliedFormat":1},{"version":"8b6719d3b9e65863da5390cb26994602c10a315aa16e7d70778a63fee6c4c079","impliedFormat":1},{"version":"05f56cd4b929977d18df8f3d08a4c929a2592ef5af083e79974b20a063f30940","impliedFormat":1},{"version":"547d3c406a21b30e2b78629ecc0b2ddaf652d9e0bdb2d59ceebce5612906df33","impliedFormat":1},{"version":"b3a4f9385279443c3a5568ec914a9492b59a723386161fd5ef0619d9f8982f97","impliedFormat":1},{"version":"3fe66aba4fbe0c3ba196a4f9ed2a776fe99dc4d1567a558fb11693e9fcc4e6ed","impliedFormat":1},{"version":"140eef237c7db06fc5adcb5df434ee21e81ee3a6fd57e1a75b8b3750aa2df2d8","impliedFormat":1},{"version":"0944ec553e4744efae790c68807a461720cff9f3977d4911ac0d918a17c9dd99","impliedFormat":1},{"version":"cb46b38d5e791acaa243bf342b8b5f8491639847463ac965b93896d4fb0af0d9","impliedFormat":1},{"version":"7c7d9e116fe51100ff766703e6b5e4424f51ad8977fe474ddd8d0959aa6de257","impliedFormat":1},{"version":"af70a2567e586be0083df3938b6a6792e6821363d8ef559ad8d721a33a5bcdaf","impliedFormat":1},{"version":"006cff3a8bcb92d77953f49a94cd7d5272fef4ab488b9052ef82b6a1260d870b","impliedFormat":1},{"version":"7d44bfdc8ee5e9af70738ff652c622ae3ad81815e63ab49bdc593d34cb3a68e5","impliedFormat":1},{"version":"339814517abd4dbc7b5f013dfd3b5e37ef0ea914a8bbe65413ecffd668792bc6","impliedFormat":1},{"version":"34d5bc0a6958967ec237c99f980155b5145b76e6eb927c9ffc57d8680326b5d8","impliedFormat":1},{"version":"9eae79b70c9d8288032cbe1b21d0941f6bd4f315e14786b2c1d10bccc634e897","impliedFormat":1},{"version":"18ce015ed308ea469b13b17f99ce53bbb97975855b2a09b86c052eefa4aa013a","impliedFormat":1},{"version":"5a931bc4106194e474be141e0bc1046629510dc95b9a0e4b02a3783847222965","impliedFormat":1},{"version":"5e5f371bf23d5ced2212a5ff56675aefbd0c9b3f4d4fdda1b6123ac6e28f058c","impliedFormat":1},{"version":"907c17ad5a05eecb29b42b36cc8fec6437be27cc4986bb3a218e4f74f606911c","impliedFormat":1},{"version":"ce60a562cd2a92f37a88f2ddd99a3abfbc5848d7baf38c48fb8d3243701fcb75","impliedFormat":1},{"version":"a726ad2d0a98bfffbe8bc1cd2d90b6d831638c0adc750ce73103a471eb9a891c","impliedFormat":1},{"version":"f44c0c8ce58d3dacac016607a1a90e5342d830ea84c48d2e571408087ae55894","impliedFormat":1},{"version":"75a315a098e630e734d9bc932d9841b64b30f7a349a20cf4717bf93044eff113","impliedFormat":1},{"version":"9131d95e32b3d4611d4046a613e022637348f6cebfe68230d4e81b691e4761a1","impliedFormat":1},{"version":"b03aa292cfdcd4edc3af00a7dbd71136dd067ec70a7536b655b82f4dd444e857","impliedFormat":1},{"version":"b6e2b0448ced813b8c207810d96551a26e7d7bb73255eea4b9701698f78846d6","impliedFormat":1},{"version":"8ae10cd85c1bd94d2f2d17c4cbd25c068a4b2471c70c2d96434239f97040747a","impliedFormat":1},{"version":"9ed5b799c50467b0c9f81ddf544b6bcda3e34d92076d6cab183c84511e45c39f","impliedFormat":1},{"version":"b4fa87cc1833839e51c49f20de71230e259c15b2c9c3e89e4814acc1d1ef10de","impliedFormat":1},{"version":"e90ac9e4ac0326faa1bc39f37af38ace0f9d4a655cd6d147713c653139cf4928","impliedFormat":1},{"version":"ea27110249d12e072956473a86fd1965df8e1be985f3b686b4e277afefdde584","impliedFormat":1},{"version":"8776a368617ce51129b74db7d55c3373dadcce5d0701e61d106e99998922a239","impliedFormat":1},{"version":"5666075052877fe2fdddd5b16de03168076cf0f03fbca5c1d4a3b8f43cba570c","impliedFormat":1},{"version":"9108ab5af05418f599ab48186193b1b07034c79a4a212a7f73535903ba4ca249","impliedFormat":1},{"version":"bb4e2cdcadf9c9e6ee2820af23cee6582d47c9c9c13b0dca1baaffe01fbbcb5f","impliedFormat":1},{"version":"6e30d0b5a1441d831d19fe02300ab3d83726abd5141cbcc0e2993fa0efd33db4","impliedFormat":1},{"version":"423f28126b2fc8d8d6fa558035309000a1297ed24473c595b7dec52e5c7ebae5","impliedFormat":1},{"version":"fb30734f82083d4790775dae393cd004924ebcbfde49849d9430bf0f0229dd16","impliedFormat":1},{"version":"2c92b04a7a4a1cd9501e1be338bf435738964130fb2ad5bd6c339ee41224ac4c","impliedFormat":1},{"version":"c5c5f0157b41833180419dacfbd2bcce78fb1a51c136bd4bcba5249864d8b9b5","impliedFormat":1},{"version":"02ae43d5bae42efcd5a00d3923e764895ce056bca005a9f4e623aa6b4797c8af","impliedFormat":1},{"version":"db6e01f17012a9d7b610ae764f94a1af850f5d98c9c826ad61747dca0fb800bd","impliedFormat":1},{"version":"8a44b424edee7bb17dc35a558cc15f92555f14a0441205613e0e50452ab3a602","impliedFormat":1},{"version":"24a00d0f98b799e6f628373249ece352b328089c3383b5606214357e9107e7d5","impliedFormat":1},{"version":"33637e3bc64edd2075d4071c55d60b32bdb0d243652977c66c964021b6fc8066","impliedFormat":1},{"version":"0f0ad9f14dedfdca37260931fac1edf0f6b951c629e84027255512f06a6ebc4c","impliedFormat":1},{"version":"16ad86c48bf950f5a480dc812b64225ca4a071827d3d18ffc5ec1ae176399e36","impliedFormat":1},{"version":"8cbf55a11ff59fd2b8e39a4aa08e25c5ddce46e3af0ed71fb51610607a13c505","impliedFormat":1},{"version":"d5bc4544938741f5daf8f3a339bfbf0d880da9e89e79f44a6383aaf056fe0159","impliedFormat":1},{"version":"97f9169882d393e6f303f570168ca86b5fe9aab556e9a43672dae7e6bb8e6495","impliedFormat":1},{"version":"7c9adb3fcd7851497818120b7e151465406e711d6a596a71b807f3a17853cb58","impliedFormat":1},{"version":"6752d402f9282dd6f6317c8c048aaaac27295739a166eed27e00391b358fed9a","impliedFormat":1},{"version":"9fd7466b77020847dbc9d2165829796bf7ea00895b2520ff3752ffdcff53564b","impliedFormat":1},{"version":"fbfc12d54a4488c2eb166ed63bab0fb34413e97069af273210cf39da5280c8d6","impliedFormat":1},{"version":"85a84240002b7cf577cec637167f0383409d086e3c4443852ca248fc6e16711e","impliedFormat":1},{"version":"84794e3abd045880e0fadcf062b648faf982aa80cfc56d28d80120e298178626","impliedFormat":1},{"version":"053d8b827286a16a669a36ffc8ccc8acdf8cc154c096610aa12348b8c493c7b8","impliedFormat":1},{"version":"3cce4ce031710970fe12d4f7834375f5fd455aa129af4c11eb787935923ff551","impliedFormat":1},{"version":"8f62cbd3afbd6a07bb8c934294b6bfbe437021b89e53a4da7de2648ecfc7af25","impliedFormat":1},{"version":"62c3621d34fb2567c17a2c4b89914ebefbfbd1b1b875b070391a7d4f722e55dc","impliedFormat":1},{"version":"c05ac811542e0b59cb9c2e8f60e983461f0b0e39cea93e320fad447ff8e474f3","impliedFormat":1},{"version":"8e7a5b8f867b99cc8763c0b024068fb58e09f7da2c4810c12833e1ca6eb11c4f","impliedFormat":1},{"version":"132351cbd8437a463757d3510258d0fa98fd3ebef336f56d6f359cf3e177a3ce","impliedFormat":1},{"version":"df877050b04c29b9f8409aa10278d586825f511f0841d1ec41b6554f8362092b","impliedFormat":1},{"version":"33d1888c3c27d3180b7fd20bac84e97ecad94b49830d5dd306f9e770213027d1","impliedFormat":1},{"version":"ee942c58036a0de88505ffd7c129f86125b783888288c2389330168677d6347f","impliedFormat":1},{"version":"a3f317d500c30ea56d41501632cdcc376dae6d24770563a5e59c039e1c2a08ec","impliedFormat":1},{"version":"eb21ddc3a8136a12e69176531197def71dc28ffaf357b74d4bf83407bd845991","impliedFormat":1},{"version":"0c1651a159995dfa784c57b4ea9944f16bdf8d924ed2d8b3db5c25d25749a343","impliedFormat":1},{"version":"aaa13958e03409d72e179b5d7f6ec5c6cc666b7be14773ae7b6b5ee4921e52db","impliedFormat":1},{"version":"0a86e049843ad02977a94bb9cdfec287a6c5a0a4b6b5391a6648b1a122072c5a","impliedFormat":1},{"version":"40f06693e2e3e58526b713c937895c02e113552dc8ba81ecd49cdd9596567ddb","impliedFormat":1},{"version":"4ed5e1992aedb174fb8f5aa8796aa6d4dcb8bd819b4af1b162a222b680a37fa0","impliedFormat":1},{"version":"d7f4bd46a8b97232ea6f8c28012b8d2b995e55e729d11405f159d3e00c51420a","impliedFormat":1},{"version":"d604d413aff031f4bfbdae1560e54ebf503d374464d76d50a2c6ded4df525712","impliedFormat":1},{"version":"e4f4f9cf1e3ac9fd91ada072e4d428ecbf0aa6dc57138fb797b8a0ca3a1d521c","impliedFormat":1},{"version":"12bfd290936824373edda13f48a4094adee93239b9a73432db603127881a300d","impliedFormat":1},{"version":"340ceb3ea308f8e98264988a663640e567c553b8d6dc7d5e43a8f3b64f780374","impliedFormat":1},{"version":"c5a769564e530fba3ec696d0a5cff1709b9095a0bdf5b0826d940d2fc9786413","impliedFormat":1},{"version":"7124ef724c3fc833a17896f2d994c368230a8d4b235baed39aa8037db31de54f","impliedFormat":1},{"version":"5de1c0759a76e7710f76899dcae601386424eab11fb2efaf190f2b0f09c3d3d3","impliedFormat":1},{"version":"9c5ee8f7e581f045b6be979f062a61bf076d362bf89c7f966b993a23424e8b0d","impliedFormat":1},{"version":"1a11df987948a86aa1ec4867907c59bdf431f13ed2270444bf47f788a5c7f92d","impliedFormat":1},{"version":"8018dd2e95e7ce6e613ddd81672a54532614dc745520a2f9e3860ff7fb1be0ca","impliedFormat":1},{"version":"b756781cd40d465da57d1fc6a442c34ae61fe8c802d752aace24f6a43fedacee","impliedFormat":1},{"version":"0fe76167c87289ea094e01616dcbab795c11b56bad23e1ef8aba9aa37e93432a","impliedFormat":1},{"version":"3a45029dba46b1f091e8dc4d784e7be970e209cd7d4ff02bd15270a98a9ba24b","impliedFormat":1},{"version":"032c1581f921f8874cf42966f27fd04afcabbb7878fa708a8251cac5415a2a06","impliedFormat":1},{"version":"69c68ed9652842ce4b8e495d63d2cd425862104c9fb7661f72e7aa8a9ef836f8","impliedFormat":1},{"version":"0e704ee6e9fd8b6a5a7167886f4d8915f4bc22ed79f19cb7b32bd28458f50643","impliedFormat":1},{"version":"06f62a14599a68bcde148d1efd60c2e52e8fa540cc7dcfa4477af132bb3de271","impliedFormat":1},{"version":"904a96f84b1bcee9a7f0f258d17f8692e6652a0390566515fe6741a5c6db8c1c","impliedFormat":1},{"version":"11f19ce32d21222419cecab448fa335017ebebf4f9e5457c4fa9df42fa2dcca7","impliedFormat":1},{"version":"2e8ee2cbb5e9159764e2189cf5547aebd0e6b0d9a64d479397bb051cd1991744","impliedFormat":1},{"version":"1b0471d75f5adb7f545c1a97c02a0f825851b95fe6e069ac6ecaa461b8bb321d","impliedFormat":1},{"version":"1d157c31a02b1e5cca9bc495b3d8d39f4b42b409da79f863fb953fbe3c7d4884","impliedFormat":1},{"version":"07baaceaec03d88a4b78cb0651b25f1ae0322ac1aa0b555ae3749a79a41cba86","impliedFormat":1},{"version":"619a132f634b4ebe5b4b4179ea5870f62f2cb09916a25957bff17b408de8b56d","impliedFormat":1},{"version":"f60fa446a397eb1aead9c4e568faf2df8068b4d0306ebc075fb4be16ed26b741","impliedFormat":1},{"version":"f3cb784be4d9e91f966a0b5052a098d9b53b0af0d341f690585b0cc05c6ca412","impliedFormat":1},{"version":"350f63439f8fe2e06c97368ddc7fb6d6c676d54f59520966f7dbbe6a4586014e","impliedFormat":1},{"version":"eba613b9b357ac8c50a925fa31dc7e65ff3b95a07efbaa684b624f143d8d34ba","impliedFormat":1},{"version":"45b74185005ed45bec3f07cac6e4d68eaf02ead9ff5a66721679fb28020e5e7c","impliedFormat":1},{"version":"0f6199602df09bdb12b95b5434f5d7474b1490d2cd8cc036364ab3ba6fd24263","impliedFormat":1},{"version":"c8ca7fd9ec7a3ec82185bfc8213e4a7f63ae748fd6fced931741d23ef4ea3c0f","impliedFormat":1},{"version":"5c6a8a3c2a8d059f0592d4eab59b062210a1c871117968b10797dee36d991ef7","impliedFormat":1},{"version":"ad77fd25ece8e09247040826a777dc181f974d28257c9cd5acb4921b51967bd8","impliedFormat":1},{"version":"795a08ae4e193f345073b49f68826ab6a9b280400b440906e4ec5c237ae777e6","impliedFormat":1},{"version":"8153df63cf65122809db17128e5918f59d6bb43a371b5218f4430c4585f64085","impliedFormat":1},{"version":"a8150bc382dd12ce58e00764d2366e1d59a590288ee3123af8a4a2cb4ef7f9df","impliedFormat":1},{"version":"5adfaf2f9f33957264ad199a186456a4676b2724ed700fc313ff945d03372169","impliedFormat":1},{"version":"d5c41a741cd408c34cb91f84468f70e9bda3dfeabf33251a61039b3cdb8b22d8","impliedFormat":1},{"version":"c91d3f9753a311284e76cdcb348cbb50bca98733336ec726b54d77b7361b34de","impliedFormat":1},{"version":"cbaf4a4aa8a8c02aa681c5870d5c69127974de29b7e01df570edec391a417959","impliedFormat":1},{"version":"c7135e329a18b0e712378d5c7bc2faec6f5ab0e955ea0002250f9e232af8b3e4","impliedFormat":1},{"version":"340a45cd77b41d8a6deda248167fa23d3dc67ec798d411bd282f7b3d555b1695","impliedFormat":1},{"version":"fae330f86bc10db6841b310f32367aaa6f553036a3afc426e0389ddc5566cd74","impliedFormat":1},{"version":"cf25d45c02d5fd5d7adb16230a0e1d6715441eef5c0a79a21bfeaa9bbc058939","impliedFormat":1},{"version":"54c3822eaf6436f2eddc92dd6e410750465aba218adbf8ce5d488d773919ec01","impliedFormat":1},{"version":"99d99a765426accf8133737843fb024a154dc6545fc0ffbba968a7c0b848959d","impliedFormat":1},{"version":"c782c5fd5fa5491c827ecade05c3af3351201dd1c7e77e06711c8029b7a9ee4d","impliedFormat":1},{"version":"883d2104e448bb351c49dd9689a7e8117b480b614b2622732655cef03021bf6d","impliedFormat":1},{"version":"d9b00ee2eca9b149663fdba1c1956331841ae296ee03eaaff6c5becbc0ff1ea8","impliedFormat":1},{"version":"09a7e04beb0547c43270b327c067c85a4e2154372417390731dfe092c4350998","impliedFormat":1},{"version":"eee530aaa93e9ec362e3941ee8355e2d073c7b21d88c2af4713e3d701dab8fef","impliedFormat":1},{"version":"28d47319b97dbeee9130b78eae03b2061d46dedbf92b0d9de13ed7ab8399ccd0","impliedFormat":1},{"version":"8b8b92781a6bf150f9ee83f3d8ee278b6cdb98b8308c7ab3413684fc5d9078ef","impliedFormat":1},{"version":"7a0e4cd92545ad03910fd019ae9838718643bd4dde39881c745f236914901dfa","impliedFormat":1},{"version":"c99ebd20316217e349004ee1a0bc74d32d041fb6864093f10f31984c737b8cad","impliedFormat":1},{"version":"6f622e7f054f5ab86258362ac0a64a2d6a27f1e88732d6f5f052f422e08a70e7","impliedFormat":1},{"version":"d62d2ef93ceeb41cf9dfab25989a1e5f9ca5160741aac7f1453c69a6c14c69be","impliedFormat":1},{"version":"1491e80d72873fc586605283f2d9056ee59b166333a769e64378240df130d1c9","impliedFormat":1},{"version":"c32c073d389cfaa3b3e562423e16c2e6d26b8edebbb7d73ccffff4aa66f2171d","impliedFormat":1},{"version":"eca72bf229eecadb63e758613c62fab13815879053539a22477d83a48a21cd73","impliedFormat":1},{"version":"633db46fd1765736409a4767bfc670861468dde60dbb9a501fba4c1b72f8644d","impliedFormat":1},{"version":"689390db63cb282e6d0e5ce9b8f1ec2ec0912d0e2e6dac7235699a15ad17d339","impliedFormat":1},{"version":"f2ee748883723aa9325e5d7f30fce424f6a786706e1b91a5a55237c78ee89c4a","impliedFormat":1},{"version":"d928324d17146fce30b99a28d1d6b48648feac72bbd23641d3ce5ac34aefdfee","impliedFormat":1},{"version":"142f5190d730259339be1433931c0eb31ae7c7806f4e325f8a470bd9221b6533","impliedFormat":1},{"version":"c33a88f2578e8df2fdf36c6a0482bbee615eb3234c8f084ba31a9a96bd306b7f","impliedFormat":1},{"version":"22cca068109eb0e6b4f8acc3fe638d1e6ac277e2044246438763319792b546a1","impliedFormat":1},{"version":"8776e64e6165838ac152fa949456732755b0976d1867ae5534ce248f0ccd7f41","impliedFormat":1},{"version":"66cd33c4151ea27f6e17c6071652eadde9da1b3637dae65fd060212211c695ce","impliedFormat":1},{"version":"5c4c5b49bbb01828402bb04af1d71673b18852c11b7e95bfd5cf4c3d80d352c8","impliedFormat":1},{"version":"7030df3d920343df00324df59dc93a959a33e0f4940af3fefef8c07b7ee329bf","impliedFormat":1},{"version":"a96bc00e0c356e29e620eaec24a56d6dd7f4e304feefcc99066a1141c6fe05a7","impliedFormat":1},{"version":"d12cc0e5b09943c4cd0848f787eb9d07bf78b60798e4588c50582db9d4decc70","impliedFormat":1},{"version":"53b094f1afe442490555eeeb0384fc1ceb487560c83e31f9c64fb934c2dccd94","impliedFormat":1},{"version":"19c3760af3cbc9da99d5b7763b9e33aaf8d018bc2ed843287b7ff4343adf4634","impliedFormat":1},{"version":"9d1e38aeb76084848d2fcd39b458ec88246de028c0f3f448b304b15d764b23d2","impliedFormat":1},{"version":"d406da1eccf18cec56fd29730c24af69758fe3ff49c4f94335e797119cbc0554","impliedFormat":1},{"version":"4898c93890a136da9156c75acd1a80a941a961b3032a0cf14e1fa09a764448b7","impliedFormat":1},{"version":"f5d7a845e3e1c6c27351ea5f358073d0b0681537a2da6201fab254aa434121d3","impliedFormat":1},{"version":"9ddf8e9069327faa75d20135cab675779844f66590249769c3d35dd2a38c2ba9","impliedFormat":1},{"version":"d7c30f0abfe9e197e376b016086cf66b2ffb84015139963f37301ed0da9d3d0d","impliedFormat":1},{"version":"ff75bba0148f07775bcb54bf4823421ed4ebdb751b3bf79cc003bd22e49d7d73","impliedFormat":1},{"version":"d40d20ac633703a7333770bfd60360126fc3302d5392d237bbb76e8c529a4f95","impliedFormat":1},{"version":"35a9867207c488061fb4f6fe4715802fbc164b4400018d2fa0149ad02db9a61c","impliedFormat":1},{"version":"91bf47a209ad0eae090023c3ebc1165a491cf9758799368ffcbee8dbe7448f33","impliedFormat":1},{"version":"0abe2cd72812bbfc509975860277c7cd6f6e0be95d765a9da77fee98264a7e32","impliedFormat":1},{"version":"13286c0c8524606b17a8d68650970bab896fb505f348f71601abf0f2296e8913","impliedFormat":1},{"version":"fc2a131847515b3dff2f0e835633d9a00a9d03ed59e690e27eec85b7b0522f92","impliedFormat":1},{"version":"90433c678bc26751eb7a5d54a2bb0a14be6f5717f69abb5f7a04afc75dce15a4","impliedFormat":1},{"version":"cd0565ace87a2d7802bf4c20ea23a997c54e598b9eb89f9c75e69478c1f7a0b4","impliedFormat":1},{"version":"738020d2c8fc9df92d5dee4b682d35a776eaedfe2166d12bc8f186e1ea57cc52","impliedFormat":1},{"version":"86dd7c5657a0b0bc6bee8002edcfd544458d3d3c60974555746eb9b2583dc35e","impliedFormat":1},{"version":"d97b96b6ecd4ee03f9f1170722c825ef778430a6a0d7aab03b8929012bf773cd","impliedFormat":1},{"version":"f61963dc02ef27c48fb0e0016a413b1e00bcb8b97a3f5d4473cedc7b44c8dc77","impliedFormat":1},{"version":"272dbfe04cfa965d6fff63fdaba415c1b5a515b1881ae265148f8a84ddeb318f","impliedFormat":1},{"version":"2035fb009b5fafa9a4f4e3b3fdb06d9225b89f2cbbf17a5b62413bf72cea721a","impliedFormat":1},{"version":"eefafec7c059f07b885b79b327d381c9a560e82b439793de597441a4e68d774a","impliedFormat":1},{"version":"72636f59b635c378dc9ea5246b9b3517b1214e340e468e54cb80126353053b2e","impliedFormat":1},{"version":"ebb79f267a3bf2de5f8edc1995c5d31777b539935fab8b7d863e8efb06c8e9ea","impliedFormat":1},{"version":"ada033e6a4c7f4e147e6d76bb881069dc66750619f8cc2472d65beeec1100145","impliedFormat":1},{"version":"0c04cc14a807a5dc0e3752d18a3b2655a135fefbf76ddcdabd0c5df037530d41","impliedFormat":1},{"version":"605d29d619180fbec287d1701e8b1f51f2d16747ec308d20aba3e9a0dac43a0f","impliedFormat":1},{"version":"67c19848b442d77c767414084fc571ce118b08301c4ddff904889d318f3a3363","impliedFormat":1},{"version":"c704ff0e0cb86d1b791767a88af21dadfee259180720a14c12baee668d0eb8fb","impliedFormat":1},{"version":"195c50e15d5b3ea034e01fbdca6f8ad4b35ad47463805bb0360bdffd6fce3009","impliedFormat":1},{"version":"da665f00b6877ae4adb39cd548257f487a76e3d99e006a702a4f38b4b39431cb","impliedFormat":1},{"version":"2b82adc9eead34b824a3f4dad315203fbfa56bee0061ccf9b485820606564f70","impliedFormat":1},{"version":"eb47aaa5e1b0a69388bb48422a991b9364a9c206a97983e0227289a9e1fca178","impliedFormat":1},{"version":"d7a4309673b06223537bc9544b1a5fe9425628e1c8ab5605f3c5ebc27ecb8074","impliedFormat":1},{"version":"db2108aea36e7faa83c38f6fe8225b9ad40835c0cba7fa38e969768299b83173","impliedFormat":1},{"version":"3eadfd083d40777b403f4f4eecfa40f93876f2a01779157cc114b2565a7afb51","impliedFormat":1},{"version":"cb6789ce3eba018d5a7996ccbf50e27541d850e9b4ee97fdcb3cbd8c5093691f","impliedFormat":1},{"version":"a3684ea9719122f9477902acd08cd363a6f3cff6d493df89d4dc12fa58204e27","impliedFormat":1},{"version":"2828dabf17a6507d39ebcc58fef847e111dcf2d51b8e4ff0d32732c72be032b3","impliedFormat":1},{"version":"c0c46113b4cd5ec9e7cf56e6dbfb3930ef6cbba914c0883eeced396988ae8320","impliedFormat":1},{"version":"118ea3f4e7b9c12e92551be0766706f57a411b4f18a1b4762cfde3cd6d4f0a96","impliedFormat":1},{"version":"2ad163aaddfa29231a021de6838f59378a210501634f125ed04cfa7d066ffc53","impliedFormat":1},{"version":"6305acbe492b9882ec940f8f0c8e5d1e1395258852f99328efcb1cf1683ca817","impliedFormat":1},{"version":"7619b1f6087a4e9336b2c42bd784b05aa4a2204a364b60171e5a628f817a381e","impliedFormat":1},{"version":"15be9120572c9fbcd3c267bd93b4140354514c9e70734e6fcca65ff4a246f83a","impliedFormat":1},{"version":"412482ab85893cec1d6f26231359474d1f59f6339e2743c08da1b05fc1d12767","impliedFormat":1},{"version":"858e2315e58af0d28fcd7f141a2505aba6a76fd10378ba0ad169b0336fee33fc","impliedFormat":1},{"version":"02da6c1b34f4ae2120d70cf5f9268bf1aedf62e55529d34f5974f5a93655ce38","impliedFormat":1},{"version":"3ecf179ef1cc28f7f9b46c8d2e496d50b542c176e94ed0147bab147b4a961cd6","impliedFormat":1},{"version":"b145da03ce7e174af5ced2cbbd16e96d3d5c2212f9a90d3657b63a5650a73b7f","impliedFormat":1},{"version":"c7aadab66a2bc90eeb0ab145ca4daebcbc038e24359263de3b40e7b1c7affba6","impliedFormat":1},{"version":"99518dc06286877a7b716e0f22c1a72d3c62be42701324b49f27bcc03573efff","impliedFormat":1},{"version":"f4575fd196a7e33c7be9773a71bcc5fbe7182a2152be909f6b8e8e7ba2438f06","impliedFormat":1},{"version":"05cba5acd77a4384389b9c62739104b5a1693efd66e6abac6c5ffc53280ae777","impliedFormat":1},{"version":"acacda82ebd929fe2fe9e31a37f193fc8498a7393a1c31dc5ceb656e2b45b708","impliedFormat":1},{"version":"1b13e7c5c58ab894fe65b099b6d19bb8afae6d04252db1bf55fe6ba95a0af954","impliedFormat":1},{"version":"4355d326c3129e5853b56267903f294ad03e34cc28b75f96b80734882dedac80","impliedFormat":1},{"version":"37139a8d45342c05b6a5aa1698a2e8e882d6dca5fb9a77aa91f05ac04e92e70b","impliedFormat":1},{"version":"e37191297f1234d3ae54edbf174489f9a3091a05fe959724db36f8e58d21fb17","impliedFormat":1},{"version":"3fca8fb3aab1bc7abb9b1420f517e9012fdddcbe18803bea2dd48fad6c45e92e","impliedFormat":1},{"version":"d0b0779e0cac4809a9a3c764ba3bd68314de758765a8e3b9291fe1671bfeb8a1","impliedFormat":1},{"version":"d2116b5f989aa68e585ae261b9d6d836be6ed1be0b55b47336d9f3db34674e86","impliedFormat":1},{"version":"d79a227dd654be16d8006eac8b67212679d1df494dfe6da22ea0bd34a13e010c","impliedFormat":1},{"version":"b9c89b4a2435c171e0a9a56668f510a376cb7991eaecef08b619e6d484841735","impliedFormat":1},{"version":"44a298a6c52a7dab8e970e95a6dabe20972a7c31c340842e0dc57f2c822826eb","impliedFormat":1},{"version":"6a79b61f57699de0a381c8a13f4c4bcd120556bfab0b4576994b6917cb62948b","impliedFormat":1},{"version":"c5133d7bdec65f465df12f0b507fbc0d96c78bfa5a012b0eb322cf1ff654e733","impliedFormat":1},{"version":"00b9ff040025f6b00e0f4ac8305fea1809975b325af31541bd9d69fa3b5e57b1","impliedFormat":1},{"version":"9f96b9fd0362a7bfe6a3aa70baa883c47ae167469c904782c99ccc942f62f0dc","impliedFormat":1},{"version":"54d91053dc6a2936bfd01a130cc3b524e11aa0349da082e8ac03a8bf44250338","impliedFormat":1},{"version":"89049878a456b5e0870bb50289ea8ece28a2abd0255301a261fa8ab6a3e9a07d","impliedFormat":1},{"version":"55ae9554811525f24818e19bdc8779fa99df434be7c03e5fc47fa441315f0226","impliedFormat":1},{"version":"24abac81e9c60089a126704e936192b2309413b40a53d9da68dadd1dd107684e","impliedFormat":1},{"version":"f13310c360ecffddb3858dcb33a7619665369d465f55e7386c31d45dfc3847bf","impliedFormat":1},{"version":"e7bde95a05a0564ee1450bc9a53797b0ac7944bf24d87d6f645baca3aa60df48","impliedFormat":1},{"version":"62e68ce120914431a7d34232d3eca643a7ddd67584387936a5202ae1c4dd9a1b","impliedFormat":1},{"version":"91d695bba902cc2eda7edc076cd17c5c9340f7bb254597deb6679e343effadbb","impliedFormat":1},{"version":"e1cb8168c7e0bd4857a66558fe7fe6c66d08432a0a943c51bacdac83773d5745","impliedFormat":1},{"version":"a464510505f31a356e9833963d89ce39f37a098715fc2863e533255af4410525","impliedFormat":1},{"version":"ebbe6765a836bfa7f03181bc433c8984ca29626270ca1e240c009851222cb8a7","impliedFormat":1},{"version":"ac10457b51ee4a3173b7165c87c795eadd094e024f1d9f0b6f0c131126e3d903","impliedFormat":1},{"version":"468df9d24a6e2bc6b4351417e3b5b4c2ca08264d6d5045fe18eb42e7996e58b4","impliedFormat":1},{"version":"954523d1f4856180cbf79b35bd754e14d3b2aea06c7efd71b254c745976086e9","impliedFormat":1},{"version":"a8af4739274959d70f7da4bfdd64f71cfc08d825c2d5d3561bc7baed760b33ef","impliedFormat":1},{"version":"090fda1107e7d4f8f30a2b341834ed949f01737b5ec6021bb6981f8907330bdb","impliedFormat":1},{"version":"cc32874a27100c32e3706d347eb4f435d6dd5c0d83e547c157352f977bbc6385","impliedFormat":1},{"version":"e45b069d58c9ac341d371b8bc3db4fa7351b9eee1731bffd651cfc1eb622f844","impliedFormat":1},{"version":"7f3c74caad25bfb6dfbf78c6fe194efcf8f79d1703d785fc05cd606fe0270525","impliedFormat":1},{"version":"54f3f7ff36384ca5c9e1627118b43df3014b7e0f62c9722619d19cdb7e43d608","impliedFormat":1},{"version":"2f346f1233bae487f1f9a11025fc73a1bf9093ee47980a9f4a75b84ea0bb7021","impliedFormat":1},{"version":"013444d0b8c1f7b5115462c31573a699fee7458381b0611062a0069d3ef810e8","impliedFormat":1},{"version":"0612b149cabbc136cb25de9daf062659f306b67793edc5e39755c51c724e2949","impliedFormat":1},{"version":"2579b150b86b5f644d86a6d58f17e3b801772c78866c34d41f86f3fc9eb523fe","impliedFormat":1},{"version":"0353e05b0d8475c10ddd88056e0483b191aa5cdea00a25e0505b96e023f1a2d9","impliedFormat":1},{"version":"8c4df93dafcf06adc42a63477cc38b352565a3ed0a19dd8ef7dfacc253749327","impliedFormat":1},{"version":"22a35275abc67f8aba44efc52b2f4b1abc2c94e183d36647fdab5a5e7c1bdf23","impliedFormat":1},{"version":"99193bafaa9ce112889698de25c4b8c80b1209bb7402189aea1c7ada708a8a54","impliedFormat":1},{"version":"70473538c6eb9494d53bf1539fe69df68d87c348743d8f7244dcb02ca3619484","impliedFormat":1},{"version":"c48932ab06a4e7531bdca7b0f739ace5fa273f9a1b9009bcd26902f8c0b851f0","impliedFormat":1},{"version":"df6c83e574308f6540c19e3409370482a7d8f448d56c65790b4ac0ab6f6fedd8","impliedFormat":1},{"version":"32f19b665839b1382b21afc41917cda47a56e744cd3df9986b13a72746d1c522","impliedFormat":1},{"version":"8db1ed144dd2304b9bd6e41211e22bad5f4ab1d8006e6ac127b29599f4b36083","impliedFormat":1},{"version":"843a5e3737f2abbbbd43bf2014b70f1c69a80530814a27ae1f8be213ae9ec222","impliedFormat":1},{"version":"6fc1be224ad6b3f3ec11535820def2d21636a47205c2c9de32238ba1ac8d82e6","impliedFormat":1},{"version":"5a44788293f9165116c9c183be66cefef0dc5d718782a04847de53bf664f3cc1","impliedFormat":1},{"version":"afd653ae63ce07075b018ba5ce8f4e977b6055c81cc65998410b904b94003c0a","impliedFormat":1},{"version":"9172155acfeb17b9d75f65b84f36cb3eb0ff3cd763db3f0d1ad5f6d10d55662f","impliedFormat":1},{"version":"71807b208e5f15feffb3ff530bec5b46b1217af0d8cc96dde00d549353bcb864","impliedFormat":1},{"version":"1a6eca5c2bc446481046c01a54553c3ffb856f81607a074f9f0256c59dd0ab13","impliedFormat":1},{"version":"da451e3a2dfc734b3c5e1988c71ed1d69e4de602a98e68610c0355da7a46c5ab","impliedFormat":99},{"version":"d8d99097ee8daedfba210d4193d9a24464c1f43caee9cf3b041ca4c722f775d2","signature":"2350f4bf9c71f25e0461ca907f58532b71ca3357080816843b7a523061de0db8"},{"version":"7d57f63237269dfd9fdeb2d59beba89b6321d21f5b7b4a53598a00f7d33de67e","signature":"f31e2438efeae62abb8b2b946f674b164b0b4c1804a5ff9209894b120de2911d"},{"version":"d06e187ddf35accbdb77851592261adfab21c9067366f1e3620d2ae983770333","signature":"1b0df704efa2630c9a049c2626e952c61802e5a7f4b6d15ad67a71eae5d795af"},{"version":"4932455607c97dbbd4658d041fb250c86624556226bdada20aca93ff929cd37a","signature":"cccf08aa45d365add22964df81378d6cd829b9329e50ce7c1e7f782b515b6bec"},{"version":"88ac6aaca897cbc0c67d26c9d0b62ebf471a5eebdc55f8d612d0c44ad3b6c7db","signature":"ca8b392678b5f31d14592b5e140a543f6e9675f71c5de1342ade6fe33bf08801"},{"version":"b10f7db295663028c296ba89fe71c8ec82942281e2505a3bed5252b1a04c4c23","signature":"0aad83791e440f35fe74960f44adf32bce751d24265574e34afd82584c3ac5b3"},{"version":"4093b746549765a5788ec8c73456469158482d722ee8652e40b759dadcfa4134","impliedFormat":1},{"version":"84206a85be8e7e8f9307c1d5c087aedb4d389e05b755234aa8f37cc22f717aaf","impliedFormat":1},{"version":"45b1df23c0a6e5b45cb8fc998bd90fa9a6a79f2931f6bb1bd15cf8f7efd886d0","impliedFormat":1},{"version":"30c550766e030bb4c7a2e2eab03e91e23e6710e70a178ea31701ebcfe7d1bc30","impliedFormat":99},{"version":"009c9609f38e4f239e8ccbc6f8a9907566d69da9b6a900f5abfdbab754dc7c44","impliedFormat":99},{"version":"9b07391e576db95d68fbd4781170f1d47fedc2e6ddda385c7821526906506bdb","impliedFormat":99},{"version":"c7d6b7e77789cea6a98167bde8a8626dfb91344e4888f57786caa9463ff01d36","impliedFormat":99},{"version":"3b6633311cd6b44078c004733e219c6edf9ccd05805c26e609739560dcf4ab86","impliedFormat":99},{"version":"dbd5d81bcde7a0d614c68b58702f337802dbff3f4fa134d62089da24572bfc86","impliedFormat":99},{"version":"35d228d9fe40e5033ed9e9faf92d8cc8063d020912d31a36dd033747921a5da0","impliedFormat":99},{"version":"3c88dcd947d8f2804c0ffe0ad33403c09f6abbe76f2ad40c97f47fc58a87d114","impliedFormat":99},{"version":"29eec560d89f984380bf990a077658092ff6075a3e0716df3934bd244ff9aaff","impliedFormat":99},{"version":"629393ccf3759129bcfa06560067ccb354bc0cbe85b5037af5f034861702eb09","impliedFormat":99},{"version":"e4e33aff7f2a934b3b7bdc12000409aabf978412d5d5df6bea6dd2bf478a90d3","impliedFormat":99},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"ba481bca06f37d3f2c137ce343c7d5937029b2468f8e26111f3c9d9963d6568d","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d9ef24f9a22a88e3e9b3b3d8c40ab1ddb0853f1bfbd5c843c37800138437b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2677634fe27e87348825bb041651e22d50a613e2fdf6a4a3ade971d71bac37e","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"8c0bcd6c6b67b4b503c11e91a1fb91522ed585900eab2ab1f61bba7d7caa9d6f","impliedFormat":1},{"version":"8cd19276b6590b3ebbeeb030ac271871b9ed0afc3074ac88a94ed2449174b776","affectsGlobalScope":true,"impliedFormat":1},{"version":"696eb8d28f5949b87d894b26dc97318ef944c794a9a4e4f62360cd1d1958014b","impliedFormat":1},{"version":"3f8fa3061bd7402970b399300880d55257953ee6d3cd408722cb9ac20126460c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"68bd56c92c2bd7d2339457eb84d63e7de3bd56a69b25f3576e1568d21a162398","affectsGlobalScope":true,"impliedFormat":1},{"version":"3e93b123f7c2944969d291b35fed2af79a6e9e27fdd5faa99748a51c07c02d28","impliedFormat":1},{"version":"9d19808c8c291a9010a6c788e8532a2da70f811adb431c97520803e0ec649991","impliedFormat":1},{"version":"87aad3dd9752067dc875cfaa466fc44246451c0c560b820796bdd528e29bef40","impliedFormat":1},{"version":"4aacb0dd020eeaef65426153686cc639a78ec2885dc72ad220be1d25f1a439df","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"8db0ae9cb14d9955b14c214f34dae1b9ef2baee2fe4ce794a4cd3ac2531e3255","affectsGlobalScope":true,"impliedFormat":1},{"version":"15fc6f7512c86810273af28f224251a5a879e4261b4d4c7e532abfbfc3983134","impliedFormat":1},{"version":"58adba1a8ab2d10b54dc1dced4e41f4e7c9772cbbac40939c0dc8ce2cdb1d442","impliedFormat":1},{"version":"641942a78f9063caa5d6b777c99304b7d1dc7328076038c6d94d8a0b81fc95c1","impliedFormat":1},{"version":"2de7636e6fbb9e54a61a38bcb7505b94ec5be61197fe9e840cff629ca920c4bc","impliedFormat":1},{"version":"855cd5f7eb396f5f1ab1bc0f8580339bff77b68a770f84c6b254e319bbfd1ac7","impliedFormat":1},{"version":"5650cf3dace09e7c25d384e3e6b818b938f68f4e8de96f52d9c5a1b3db068e86","impliedFormat":1},{"version":"1354ca5c38bd3fd3836a68e0f7c9f91f172582ba30ab15bb8c075891b91502b7","affectsGlobalScope":true,"impliedFormat":1},{"version":"7e20d899c28ca26a2a7afc98beaa69e63ff7fba0a8bc47b4e3bf3ede5e09e424","impliedFormat":1},{"version":"2d2fcaab481b31a5882065c7951255703ddbe1c0e507af56ea42d79ac3911201","impliedFormat":1},{"version":"a192fe8ec33f75edbc8d8f3ed79f768dfae11ff5735e7fe52bfa69956e46d78d","impliedFormat":1},{"version":"ca867399f7db82df981d6915bcbb2d81131d7d1ef683bc782b59f71dda59bc85","affectsGlobalScope":true,"impliedFormat":1},{"version":"372413016d17d804e1d139418aca0c68e47a83fb6669490857f4b318de8cccb3","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"b4f70ec656a11d570e1a9edce07d118cd58d9760239e2ece99306ee9dfe61d02","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"6e70e9570e98aae2b825b533aa6292b6abd542e8d9f6e9475e88e1d7ba17c866","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"085f552d005479e2e6a7311cdbbe5d8c55c497b4d19274285df161ee9684cd9c","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"007faacc9268357caa21d24169f3f3f2497af3e9241308df2d89f6e6d9bb3f2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"74cf591a0f63db318651e0e04cb55f8791385f86e987a67fd4d2eaab8191f730","impliedFormat":1},{"version":"5eab9b3dc9b34f185417342436ec3f106898da5f4801992d8ff38ab3aff346b5","impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"809821b8a065e3234a55b3a9d7846231ed18d66dd749f2494c66288d890daf7f","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"c3b41e74b9a84b88b1dca61ec39eee25c0dbc8e7d519ba11bb070918cfacf656","affectsGlobalScope":true,"impliedFormat":1},{"version":"4737a9dc24d0e68b734e6cfbcea0c15a2cfafeb493485e27905f7856988c6b29","affectsGlobalScope":true,"impliedFormat":1},{"version":"36d8d3e7506b631c9582c251a2c0b8a28855af3f76719b12b534c6edf952748d","impliedFormat":1},{"version":"1ca69210cc42729e7ca97d3a9ad48f2e9cb0042bada4075b588ae5387debd318","impliedFormat":1},{"version":"f5ebe66baaf7c552cfa59d75f2bfba679f329204847db3cec385acda245e574e","impliedFormat":1},{"version":"ed59add13139f84da271cafd32e2171876b0a0af2f798d0c663e8eeb867732cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7c5e2ea4a9749097c347454805e933844ed207b6eefec6b7cfd418b5f5f7b28","impliedFormat":1},{"version":"b1810689b76fd473bd12cc9ee219f8e62f54a7d08019a235d07424afbf074d25","impliedFormat":1},{"version":"4fe80f12b1d5189384a219095c2eabadbb389c2d3703aae7c5376dbaa56061df","impliedFormat":1},{"version":"9eb1d2dceae65d1c82fc6be7e9b6b19cf3ca93c364678611107362b6ad4d2d41","impliedFormat":1},{"version":"8065e20ac0ad0536d4f1c8d4c2303272a4d25c450bea8d25deb25697d19300e5","impliedFormat":1},{"version":"c5f34de444a2e8ceb5b3f2b99e280b05f0b5e04e2180b24ffde7cbcb55157e0e","impliedFormat":99},{"version":"5cc5990d725f2e5588350cf5edc3bc637a6e1d8375102a9bcaaa20f1b1b534f0","impliedFormat":99},{"version":"a04645fa8bc15c19f337b621c948037fa3f819b34fbd5c9d159efd7867243526","impliedFormat":99},{"version":"8459a6a6e70c3787015020305c86a6eee011791672a8dbbe6f1dbd95c8606887","impliedFormat":99},{"version":"999f8e88d766b2a78378f0e09b832c3b5da46233dc4c913f7b00fb4e223ba7e4","impliedFormat":99},{"version":"92c5dc39cd721a38f6558adc8db3610d0d7a4276c2c1249858a76501d38b13c0","impliedFormat":99},{"version":"cdfd5b1595736cc4654ffdbe6a8dbb1df0dcd81bf9aa973f4f82973bb5821b49","impliedFormat":99},{"version":"ff281735449be3e11b6297b79b2806b054e8e8aabbd19464c5e7bd0c8646d7f7","impliedFormat":1},{"version":"3d365797bc13f0393dc3390ebb34313d97bd17bc2ea8934f0e7f14ea7d956258","impliedFormat":99},{"version":"03eb8cdaaf7e6e8654859dfb2876204f6f3c2c99942b81746fbb4cd91ee7e78b","impliedFormat":99},{"version":"faf766a0b271fdcafe4d57a0831b7c15539cfdd18b12d715fc4e8ef120a75bf6","impliedFormat":99},{"version":"ad529afbd9982ea7c565104a34e0556bd40e5ba0b9339286b5627ed77bf701c5","impliedFormat":99},{"version":"439bca1b52680da7c9e976a29e3f66c0585b8d1c66db15ece6bd54139480ae24","impliedFormat":99},{"version":"6d2c76b62e7b36d1c0057a5fd261f49c50f0b02b37584ebe4ab33f434f57f63f","impliedFormat":99},{"version":"af6cfbb1e9df5ecac148b2ca76b0aac4298abd4d276889c29c231918ba4859f9","impliedFormat":99},{"version":"36a159d8cc89059bc513bb5ed6514f83be0fd98d70c2fbda24a7e696485aa214","impliedFormat":99},{"version":"f128c331a0e4edb5c093c15041231b71b5d3da71642c071cdb9b33e50851fd5d","impliedFormat":99},{"version":"ac1e31a2c72e9e44ddf56a4267837e1f7fb41d0c61228c762dc9f4248cab6db5","impliedFormat":99},{"version":"3166f3fd8cda1c37ea1d3879c5c563573bce947535f048820349432444fad8dd","impliedFormat":99},{"version":"03464dcca517bcfb982cefdc316afe821aae8bbe02dcd4765dfa25bc2aecd097","impliedFormat":99},{"version":"d2fb14e50a72f24279996f7f77ec22cd9d22569072dff6b6996f1c16afdcdc2b","impliedFormat":99},{"version":"e8ccaec45b9083811b398bd939bdab163a37fff5513f7606ef70bba95e8bc18b","impliedFormat":99},{"version":"c10d384b93f7220a061501db0ff8576fbf599ff309b2c06346f5dc3ea7274397","impliedFormat":99},{"version":"6fa637e968c53a52c3dc213f24ddd2021ed841286244bbfc8cf520ec73740885","impliedFormat":99},{"version":"951fbf6ddcbb96e5be8e62f3e3510be84519973b7752b1fdfbb50fa2cd96b113","impliedFormat":99},{"version":"941fddd7f211b52e2f6763a4cdadfbd940818d1443e562b8f4793385f126c414","impliedFormat":99},{"version":"b22a339fa1aeb793058d0619f2b0a90bfee24c8e694b7ac6b4178abe71be385e","impliedFormat":99},{"version":"cf06ce745c1149c49d672bab93cfc94569bbf73e6e222245dced5a9fe37e51e6","impliedFormat":99},{"version":"edbfddc987df0aab0ccc941c8fd6ae545cf4fa3f8218d5ecc6ea8fd6c33970ac","impliedFormat":99},{"version":"99fcd963c44cb178e45e85e16a4ea93be354a3e7aa1063b3fa364487cc81af35","impliedFormat":99},{"version":"4efdc9a4a3d67eb1fa77d8ae2cd21c4c2c768a6cb630bea9602d34574dd449b2","impliedFormat":99},{"version":"0f1608ba30526d855b298de563474aa0cb54cd17855b9cd4a02cfcc2dbac0668","impliedFormat":99},{"version":"81d4ecb12b6ab914a756639089db8a09681c94c0d65b321c6123f1b1417aabce","impliedFormat":99},{"version":"22cdc8c2abd91fbe4c1a2b720c650d4c31a247cdda06d51a9f70df357f97408b","impliedFormat":99},{"version":"e23d144cfe3b8ae167c9e190894bb10fd2bfe074d6a666a7fbcb9caffb02fc32","impliedFormat":99},{"version":"748fc95884a06a03b24c5a621180b8bfc958ecd06b15e7bc56129e09e0a981eb","impliedFormat":99},{"version":"dc4cf3047b62a394d1ee95c31ef3ccda9d11c7ad3597df5839f4d9c0777f78b9","impliedFormat":99},{"version":"acd4d79e3b7e3a1b3576a89bcd1e50d34ec56b8806756a404a8f50a146a7685f","impliedFormat":99},{"version":"2c8f85858c7189d7dca11570a70d657e7d5c35e056662575647c5d9bf9d979e9","impliedFormat":99},{"version":"65760dd8e06c522d2a8347db8d45598738d958cc9303896b57f01ce56e312d8c","impliedFormat":99},{"version":"2b0e26e8378e48a8f69bc266208850b5f78b4df21041fbd2c99ca2c800a0b1b1","impliedFormat":99},{"version":"fbfaae2605ba3f5d514066fde3c7cc62c8f71ae53297bb30175c887d4ed1ab17","impliedFormat":99},{"version":"3b3008c46dd7b1fda5cef5c07c4be2b36e2f7a16e4bfd70b462fc0108024afb1","impliedFormat":99},{"version":"ea67ef138af8cf32772e24a6e3f253e7bafc00cf03ee2b905695f3c60ea4e9af","impliedFormat":99},{"version":"a7970b475e3ef02492c38f35e3583fa2e39e59482abc3b1b59714bf0223fa1e5","impliedFormat":99},{"version":"7eb4f97600d5a788e2ad40d666139682ee1a7445d321e2bd667633ada7bd724b","impliedFormat":99},{"version":"c51ef79c00d9fa4c13edc5a39606422a672f3fa378cb9008e32049f039e502c9","impliedFormat":99},{"version":"113562a653d87c9c8c5022d5e2bc6bb371ac5f8aa48e84513c080d5dd778808f","impliedFormat":99},{"version":"f9d5d98a9a524f1d692665c4ea8c6b06518738423e3c75f31dded80c10d1f16e","impliedFormat":99},{"version":"c6f877c12f8d88fb03e76b1e8e4cfd6ce022d348996daae4a872012aa060ec7f","impliedFormat":99},{"version":"9defcd40e3803eb1a335978e5f362d00a807a03d19c941aa0f150f17177783cb","impliedFormat":99},{"version":"d4cc33238caf1b6e3a7c7d0335a3274c7479ba2da58b0239e209e0214a3188df","impliedFormat":99},{"version":"3655f48aa06e4a6b0f5a01951a9a79e2445a7dcce442ee56e9925ff8ee4c10a3","impliedFormat":99},{"version":"bcc95274d707c6d65777178a699702e04a3f2f60f5393411981d673d9dbdd59e","impliedFormat":99},{"version":"14245bde94c9c1870499ff07a4700d917a5856ed3087e655a1a9f743e22fde5b","impliedFormat":99},{"version":"87a7c41d891ef60cbc7d13fa9856acd1fc196caf80727fe997cd2e80d00124e1","impliedFormat":99},{"version":"8e1b82931482369d75bd596a2a0c3e469abae37d591d2d6a439ae0ca7c11e27e","impliedFormat":99},{"version":"f8610d8b9d4b85c773b50bd140cf441589559c693f5bd8a1cd721b22defdf372","impliedFormat":99},{"version":"81111764c789f86de6f92dda593db9da9e1a12002066018ed4542ed20b2beac4","impliedFormat":99},{"version":"8ea1f2e6c1cbadd595a1c0564b7c89c5ad272dd1590c5031295b725e967363f3","impliedFormat":99},{"version":"982d2cb9abe3f7f4091250cd6326f7f4aaa7f9df3187b70afb1858aa792b6360","impliedFormat":99},{"version":"112fab670bdc9a5dcb6c37b46a61cf766ba7df1ffdef93b9741036b44aea4215","impliedFormat":99},{"version":"ec3988bbcf9f4aacb644b8af9deb0bf684bd644c8c8c9a64f28b2afd000f3cdb","impliedFormat":99},{"version":"9ead2880be8fea1693ed08e5f3958b2d729e3daa1498054b1bf226db0bdba285","impliedFormat":99},{"version":"5bda7861d14f27d7fe8f61a240de3f71e74fde9bc74ff768d6e9b001e5211e68","impliedFormat":99},{"version":"597a3cb740723067ede511a8a8b271119c53716296de9ad157567dabce312d6a","impliedFormat":99},{"version":"8ec842bca3e5c6a446b1cc45aefdb2b5c8b44ae02fe61a5ee444c9477c836a7b","signature":"09e726c1597132638a2850c8b1cfd647956b8486f3eeb4b05278a9e8170b28a5"},{"version":"c377386b4e80c015d3cb05ec2caa0cc42c603631ceb9c4810735f6665cfe5832","signature":"b60254619c50cf345ea237dd1cd79bece77c2e29ee312522a585a0ac55554be7"},{"version":"6c41b86fc733b3e64df0724f2e6b81387db61f125bc8147b7536034852cc7aff","signature":"e6ad03859e5eea161c1ff656e517eb8fdf156f907d822e36fe37a49a173ec46c"},{"version":"20401cca2bcc990649b28a586589ee4674b53c2ab5bd4e6e79f161d1a75d3d14","signature":"9f1a25cee5697b19ae4cb87d9244395af7191c0e3180a401c26269e7198e0d4a"},{"version":"727ac36be9b95bdd24516ec82ef7e007f598c87c93ce6b3d07f04c632cb1349a","impliedFormat":99},{"version":"1388882d1ef79c747831aa0dbd4444486ff907df373719c35ceb585626ddc5d8","impliedFormat":99},{"version":"53ff5c70c3d3b02ab5093913e78dcf7a0cfdca34adf54f3181800ff3fb3a7e74","impliedFormat":99},{"version":"621107f3b57b5d452875e7b53c500947844047c61cde127a5e2ab49a82d80c71","impliedFormat":99},{"version":"fbbc2191b67f0bd5d9f400bb3ec67c0b6c0375993e651696766f1a1f8125feb9","impliedFormat":99},{"version":"cb9a8171e54d517ea93e3d06b6c52acb082a0ea5343697a08ff50dd575b09e70","impliedFormat":99},{"version":"48ca1501b72ddcd8e40917177826b0c62a400dbec6601daf4d17fffba7ea2619","impliedFormat":99},{"version":"274d8148aaecc31040b494c282adc924240552f16fbf1484b490167bf68dcbc3","impliedFormat":99},{"version":"846b506b34c982b1380fe2e0cdcdd6ca566c4ccad7eba49a01e72760a0c14f34","impliedFormat":99},{"version":"2795186cd53b93d63c671b8c0598edac1e90278c534a93cd1824a7565d2ed1bc","impliedFormat":99},{"version":"144b8f7dfae415b55f764596b676ccca68928b900f6f2dffdd5e30a2a9f905bf","impliedFormat":99},{"version":"9d14bf7ab3b740282ec669e770128f26d6f7b562ecd77448702a129b9cab01cd","impliedFormat":99},{"version":"bb12b49e8d77e4b03e5e76698a984f6c2d46d7cdb1e5b98162d3f518217c2de7","impliedFormat":99},{"version":"2cb258ce2db84d1a628e144fc8cab3dbeaf181537ce2b222491fc9e433e3044d","impliedFormat":99},{"version":"b0947262c0f6cde2bbe8f074703c5d8e44300d3fdb0c9795a2f4f37349f6b0a8","impliedFormat":99},{"version":"5f8879cfb2d158e27a0452f2e17a292a92ce57a8211231d861adbb2fc3e04d7b","impliedFormat":99},{"version":"db1e5ad825e4444ab205119f6a7f4aefb14901bff70f14859a21bb4bb52c13d4","impliedFormat":99},{"version":"11f2dde616212a4cd66fdd32ee33cddd34e9994bb7be910ca6a9582d5c31e53b","impliedFormat":99},{"version":"32946d9b07387342fb9cf4008c154645b6b4dd7276926b38b597a0444cc09a6a","impliedFormat":99},{"version":"c90f6ec2fd4e0513e839b673e8c0a802d125ee645a64367a2c6b44f9e3fed39b","impliedFormat":99},{"version":"9ddefb83d413c8c78b9f9817222b9ef345321657316b8f53fde7a8348cb7988c","impliedFormat":99},{"version":"e33d9ab5450f3159152e74332c0f50d2d24cc7fda04d307e4847cce87899fbcd","impliedFormat":99},{"version":"38d16dd85f35c4f18bd56acc9f558f48e695c3f53978591b45e26eeb740c2e35","impliedFormat":99},{"version":"716ad2c753cbeccbf21e9475f4a93d1672d71cc00e59c6f52d2ff71fd36ee607","impliedFormat":99},{"version":"86ddc441b7f809a60689b4345e52933532771a50796e99df59af1a2a16c2b5c3","impliedFormat":99},{"version":"ae69aac1676f7cbf9292c207315ef8c708aca73c5d87303b7ea9e7b06ebf1d4e","impliedFormat":99},{"version":"f5ba387808a01d1cb70e542e08d4c5d0e5cb2c95c86c3230eb0a727a1740b92e","impliedFormat":99},{"version":"cc620982c46f541201e335d0a9dff94908b556dc0440a63b80e7d9966685868e","impliedFormat":99},{"version":"b222f24090306fe30216fd0ec54f06aa6eec40fe1da3fcfb3bb31d9a5b7aca9f","impliedFormat":99},{"version":"37a8b99238cb1fb4ee2f7f02848471c12d496db13d25fd8849c30156d71b2f2f","impliedFormat":99},{"version":"0899fa64030e2a32a9cdd6d592f949d8da5496863358d0a9d0fbec642f0c9ab7","impliedFormat":99},{"version":"8c2d23dcd233b40f1d7a9d06a2bb23cf76d1f2aad054905bb369e810ca8fadad","impliedFormat":99},{"version":"185246f95696227b51d74679649a8fe46e46afb1194e3cb5fc35eeec6b127c41","impliedFormat":99},{"version":"d5fea3b30a4cb51ee830854559a068f6ffa7348881906f318593e678de096bd2","signature":"cb62249fff4d3e10ec3871edd62c2ba29c6b70d29babee56dffa03a4218ca7ce"},{"version":"50879e47381f036eeae4e9e4bce443236bc834c943eaef26e8b538985b488d14","signature":"8a2d7af1cd2abb9a9f1bb52b639981adc0f50df0c87ff3482f6520a0417db21b"},{"version":"112a02bf559b5a1e0f7ad5b3cfee9dd54c21a36923c1c38af317b924fe7448a3","signature":"7511a389505669f877f4c4a5eb7715fba76b8d1fc7a8c9b1bcdedebd0c5db123"},{"version":"071e0761717dfae80243fccb7227b7e430c4339f88b20d502edf19045428b1a3","signature":"45558a650b7d00629a33c70be53cb639a9805dae4979074104d4d37200f68e80"},{"version":"8501fe060d3b73b2702e231c3563a370ce370b9d8bcf681b9dd58511c8d1d389","signature":"bf5649a304c6f61cad612c23be0cf2ac02c757636044808d043c5a6751dcced6"},{"version":"fdb836c1a58acc30ece9a583b46586c7e7e74acfc91310232563924255d7ba43","signature":"f65025cb25b42ac868f57858fc40320824cce5046a380d70e5a1b536d47aece2"},{"version":"b8ad793dc17938bc462812e3522bbd3d62519d91d9b4a6422bed1383c2d3eb42","impliedFormat":1},{"version":"8b0b6a4c032a56d5651f7dd02ba3f05fbfe4131c4095093633cda3cae0991972","impliedFormat":1},{"version":"ff3c48a17bf10dfbb62448152042e4a48a56c9972059997ab9e7ed03b191809b","impliedFormat":1},{"version":"192a0c215bffe5e4ac7b9ff1e90e94bf4dfdad4f0f69a5ae07fccc36435ebb87","impliedFormat":1},{"version":"3ef8565e3d254583cced37534f161c31e3a8f341ff005c98b582c6d8c9274538","impliedFormat":1},{"version":"d7e42a3800e287d2a1af8479c7dd58c8663e80a01686cb89e0068be6c777d687","impliedFormat":1},{"version":"1098034333d3eb3c1d974435cacba9bd5a625711453412b3a514774fec7ca748","impliedFormat":1},{"version":"f2388b97b898a93d5a864e85627e3af8638695ebfa6d732ecd39d382824f0e63","impliedFormat":1},{"version":"6c6bd91368169cfa94b4f8cc64ebca2b050685ec76bc4082c44ce125b5530cca","impliedFormat":1},{"version":"f477375e6f0bf2a638a71d4e7a3da8885e3a03f3e5350688541d136b10b762a6","impliedFormat":1},{"version":"a44d6ea4dc70c3d789e9cef3cc42b79c78d17d3ce07f5fd278a7e1cbe824da56","impliedFormat":1},{"version":"272af80940fcc0c8325e4a04322c50d11f8b8842f96ac66cbd440835e958dd14","impliedFormat":1},{"version":"1803e48a3ec919ccafbcafeef5e410776ca0644ae8c6c87beca4c92d8a964434","impliedFormat":1},{"version":"875c43c5409e197e72ee517cb1f8fd358406b4adf058dbdc1e50c8db93d68f26","impliedFormat":1},{"version":"8854713984b9588eac1cab69c9e2a6e1a33760d9a2d182169059991914dd8577","impliedFormat":1},{"version":"e333d487ca89f26eafb95ea4b59bea8ba26b357e9f2fd3728be81d999f9e8cf6","impliedFormat":1},{"version":"2f554c6798b731fc39ff4e3d86aadc932fdeaa063e3cbab025623ff5653c0031","impliedFormat":1},{"version":"fe4613c6c0d23edc04cd8585bdd86bc7337dc6265fb52037d11ca19eeb5e5aaf","impliedFormat":1},{"version":"53b26fbee1a21a6403cf4625d0e501a966b9ccf735754b854366cee8984b711c","impliedFormat":1},{"version":"c503be3ddb3990ab27ca20c6559d29b547d9f9413e05d2987dd7c4bcf52f3736","impliedFormat":1},{"version":"598b15f0ae9a73082631d14cb8297a1285150ca325dbce98fc29c4f0b7079443","impliedFormat":1},{"version":"8c59d8256086ed17676139ee43c1155673e357ab956fb9d00711a7cac73e059d","impliedFormat":1},{"version":"cfe88132f67aa055a3f49d59b01585fa8d890f5a66a0a13bb71973d57573eee7","impliedFormat":1},{"version":"53ce488a97f0b50686ade64252f60a1e491591dd7324f017b86d78239bd232ca","impliedFormat":1},{"version":"50fd11b764194f06977c162c37e5a70bcf0d3579bf82dd4de4eee3ac68d0f82f","impliedFormat":1},{"version":"e0ceb647dcdf6b27fd37e8b0406c7eafb8adfc99414837f3c9bfd28ffed6150a","impliedFormat":1},{"version":"99579aa074ed298e7a3d6a47e68f0cd099e92411212d5081ce88344a5b1b528d","impliedFormat":1},{"version":"c94c1aa80687a277396307b80774ca540d0559c2f7ba340168c2637c82b1f766","impliedFormat":1},{"version":"ce7dbf31739cc7bca35ca50e4f0cbd75cd31fd6c05c66841f8748e225dc73aaf","impliedFormat":1},{"version":"942ab34f62ac3f3d20014615b6442b6dc51815e30a878ebc390dd70e0dec63bf","impliedFormat":1},{"version":"7a671bf8b4ad81b8b8aea76213ca31b8a5de4ba39490fbdee249fc5ba974a622","impliedFormat":1},{"version":"8e07f13fb0f67e12863b096734f004e14c5ebfd34a524ed4c863c80354c25a44","impliedFormat":1},{"version":"6f6bdb523e5162216efc36ebba4f1ef8e845f1a9e55f15387df8e85206448aee","impliedFormat":1},{"version":"aa2d6531a04d6379318d29891de396f61ccc171bfd2f8448cc1649c184becdf2","impliedFormat":1},{"version":"d422f0c340060a53cb56d0db24dd170e31e236a808130ab106f7ab2c846f1cdb","impliedFormat":1},{"version":"424403ef35c4c97a7f00ea85f4a5e2f088659c731e75dbe0c546137cb64ef8d8","impliedFormat":1},{"version":"16900e9a60518461d7889be8efeca3fe2cbcd3f6ce6dee70fea81dfbf8990a76","impliedFormat":1},{"version":"6daf17b3bd9499bd0cc1733ab227267d48cd0145ed9967c983ccb8f52eb72d6e","impliedFormat":1},{"version":"e4177e6220d0fef2500432c723dbd2eb9a27dcb491344e6b342be58cc1379ec0","impliedFormat":1},{"version":"ab710f1ee2866e473454a348cffd8d5486e3c07c255f214e19e59a4f17eece4d","impliedFormat":1},{"version":"db7ff3459e80382c61441ea9171f183252b6acc82957ecb6285fff4dca55c585","impliedFormat":1},{"version":"4a168e11fe0f46918721d2f6fcdb676333395736371db1c113ae30b6fde9ccd2","impliedFormat":1},{"version":"2a899aef0c6c94cc3537fe93ec8047647e77a3f52ee7cacda95a8c956d3623fb","impliedFormat":1},{"version":"ef2c1585cad462bdf65f2640e7bcd75cd0dbc45bae297e75072e11fe3db017fa","impliedFormat":1},{"version":"6a52170a5e4600bbb47a94a1dd9522dca7348ce591d8cdbb7d4fe3e23bbea461","impliedFormat":1},{"version":"6f6eadb32844b0ec7b322293b011316486894f110443197c4c9fbcba01b3b2fa","impliedFormat":1},{"version":"a51e08f41e3e948c287268a275bfe652856a10f68ddd2bf3e3aaf5b8cdb9ef85","impliedFormat":1},{"version":"16c144a21cd99926eeba1605aec9984439e91aa864d1c210e176ca668f5f586a","impliedFormat":1},{"version":"af48a76b75041e2b3e7bd8eed786c07f39ea896bb2ff165e27e18208d09b8bee","impliedFormat":1},{"version":"fd4107bd5c899165a21ab93768904d5cfb3e98b952f91fbf5a12789a4c0744e6","impliedFormat":1},{"version":"deb092bc337b2cb0a1b14f3d43f56bc663e1447694e6d479d6df8296bdd452d6","impliedFormat":1},{"version":"041bc1c3620322cb6152183857601707ef6626e9d99f736e8780533689fb1bf9","impliedFormat":1},{"version":"77165b117f552be305d3bc2ef83424ff1e67afb22bfabd14ebebb3468c21fcaa","impliedFormat":1},{"version":"128e7c2ffd37aa29e05367400d718b0e4770cefb1e658d8783ec80a16bc0643a","impliedFormat":1},{"version":"076ac4f2d642c473fa7f01c8c1b7b4ef58f921130174d9cf78430651f44c43ec","impliedFormat":1},{"version":"396c1e5a39706999ec8cc582916e05fcb4f901631d2c192c1292e95089a494d9","impliedFormat":1},{"version":"89df75d28f34fc698fe261f9489125b4e5828fbd62d863bbe93373d3ed995056","impliedFormat":1},{"version":"8ccf5843249a042f4553a308816fe8a03aa423e55544637757d0cfa338bb5186","impliedFormat":1},{"version":"93b44aa4a7b27ba57d9e2bad6fb7943956de85c5cc330d2c3e30cd25b4583d44","impliedFormat":1},{"version":"a0c6216075f54cafdfa90412596b165ff85e2cadd319c49557cc8410f487b77c","impliedFormat":1},{"version":"3c359d811ec0097cba00fb2afd844b125a2ddf4cad88afaf864e88c8d3d358bd","impliedFormat":1},{"version":"d8ec19be7d6d3950992c3418f3a4aa2bcad144252bd7c0891462b5879f436e4e","impliedFormat":1},{"version":"db37aa3208b48bdcbc27c0c1ae3d1b86c0d5159e65543e8ab79cbfb37b1f2f34","impliedFormat":1},{"version":"d62f09256941e92a95b78ae2267e4cf5ff2ca8915d62b9561b1bc85af1baf428","impliedFormat":1},{"version":"e6223b7263dd7a49f4691bf8df2b1e69f764fb46972937e6f9b28538d050b1ba","impliedFormat":1},{"version":"2daf06d8e15cbca27baa6c106253b92dad96afd87af9996cf49a47103b97dc95","impliedFormat":1},{"version":"1db014db736a09668e0c0576585174dbcfd6471bb5e2d79f151a241e0d18d66b","impliedFormat":1},{"version":"8a153d30edde9cefd102e5523b5a9673c298fc7cf7af5173ae946cbb8dd48f11","impliedFormat":1},{"version":"abaaf8d606990f505ee5f76d0b45a44df60886a7d470820fcfb2c06eafa99659","impliedFormat":1},{"version":"8109e0580fc71dbefd6091b8825acf83209b6c07d3f54c33afeafab5e1f88844","impliedFormat":1},{"version":"d92a80c2c05cf974704088f9da904fe5eadc0b3ad49ddd1ef70ca8028b5adda1","impliedFormat":1},{"version":"fbd7450f20b4486c54f8a90486c395b14f76da66ba30a7d83590e199848f0660","impliedFormat":1},{"version":"ece5b0e45c865645ab65880854899a5422a0b76ada7baa49300c76d38a530ee1","impliedFormat":1},{"version":"62d89ac385aeab821e2d55b4f9a23a277d44f33c67fefe4859c17b80fdb397ea","impliedFormat":1},{"version":"f4dee11887c5564886026263c6ee65c0babc971b2b8848d85c35927af25da827","impliedFormat":1},{"version":"fb8dd49a4cd6d802be4554fbab193bb06e2035905779777f32326cb57cf6a2c2","impliedFormat":1},{"version":"df29ade4994de2d9327a5f44a706bbe6103022a8f40316839afa38d3e078ee06","impliedFormat":1},{"version":"82d3e00d56a71fc169f3cf9ec5f5ffcc92f6c0e67d4dfc130dafe9f1886d5515","impliedFormat":1},{"version":"d38f45cb868a830d130ac8b87d3f7e8caff4961a3a1feae055de5e538e20879a","impliedFormat":1},{"version":"4c30a5cb3097befb9704d16aa4670e64e39ea69c5964a1433b9ffd32e1a5a3a1","impliedFormat":1},{"version":"1b33478647aa1b771314745807397002a410c746480e9447db959110999873ce","impliedFormat":1},{"version":"7b3a5e25bf3c51af55cb2986b89949317aa0f6cbfb5317edd7d4037fa52219a9","impliedFormat":1},{"version":"3cd50f6a83629c0ec330fc482e587bfa96532d4c9ce85e6c3ddf9f52f63eee11","impliedFormat":1},{"version":"9fac6ebf3c60ced53dd21def30a679ec225fc3ff4b8d66b86326c285a4eebb5a","impliedFormat":1},{"version":"8cb83cb98c460cd716d2a98b64eb1a07a3a65c7362436550e02f5c2d212871d1","impliedFormat":1},{"version":"07bc8a3551e39e70c38e7293b1a09916867d728043e352b119f951742cb91624","impliedFormat":1},{"version":"e47adc2176f43c617c0ab47f2d9b2bb1706d9e0669bf349a30c3fe09ddd63261","impliedFormat":1},{"version":"7fec79dfd7319fec7456b1b53134edb54c411ba493a0aef350eee75a4f223eeb","impliedFormat":1},{"version":"189c489705bb96a308dcde9b3336011d08bfbca568bcaf5d5d55c05468e9de7a","impliedFormat":1},{"version":"98f4b1074567341764b580bf14c5aabe82a4390d11553780814f7e932970a6f7","impliedFormat":1},{"version":"dadfa5fd3d5c511ca6bfe240243b5cf2e0f87e44ea63e23c4b2fce253c0d4601","impliedFormat":1},{"version":"2e252235037a2cd8feebfbf74aa460f783e5d423895d13f29a934d7655a1f8be","impliedFormat":1},{"version":"763f4ac187891a6d71ae8821f45eef7ff915b5d687233349e2c8a76c22b3bf2a","impliedFormat":1},{"version":"0c5f112b6d3377b9e8214d8920e1a69d8098b881d941f2ab3ca45234d13d68de","impliedFormat":1},{"version":"c7a8fda989564546024e52d1eb2b7e1f2cfb6ee0bb6d4ac8ecce18cac1dcd1c4","signature":"396a3607ca8288c7dd02dff9b04e6ffb057b3c6f3d12965421373c3da78b65cc"},{"version":"556ccd493ec36c7d7cb130d51be66e147b91cc1415be383d71da0f1e49f742a9","impliedFormat":1},{"version":"b6d03c9cfe2cf0ba4c673c209fcd7c46c815b2619fd2aad59fc4229aaef2ed43","impliedFormat":1},{"version":"95aba78013d782537cc5e23868e736bec5d377b918990e28ed56110e3ae8b958","impliedFormat":1},{"version":"670a76db379b27c8ff42f1ba927828a22862e2ab0b0908e38b671f0e912cc5ed","impliedFormat":1},{"version":"13b77ab19ef7aadd86a1e54f2f08ea23a6d74e102909e3c00d31f231ed040f62","impliedFormat":1},{"version":"069bebfee29864e3955378107e243508b163e77ab10de6a5ee03ae06939f0bb9","impliedFormat":1},{"version":"104c67f0da1bdf0d94865419247e20eded83ce7f9911a1aa75fc675c077ca66e","impliedFormat":1},{"version":"cc0d0b339f31ce0ab3b7a5b714d8e578ce698f1e13d7f8c60bfb766baeb1d35c","impliedFormat":1},{"version":"751764bb94219b4ce8f5475dc35d3de2e432fea01a0c9610cd7f69ad05e398c6","impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"a4a39b5714adfcadd3bbea6698ca2e942606d833bde62ad5fb6ec55f5e438ff8","impliedFormat":1},{"version":"bbc1d029093135d7d9bfa4b38cbf8761db505026cc458b5e9c8b74f4000e5e75","impliedFormat":1},{"version":"1f68ab0e055994eb337b67aa87d2a15e0200951e9664959b3866ee6f6b11a0fe","impliedFormat":1},{"version":"d34aa8df2d0b18fb56b1d772ff9b3c7aea7256cf0d692f969be6e1d27b74d660","impliedFormat":1},{"version":"93a3b8e57c68e348fc4054b245bd7cf4893225f56c991028844b693c2fa8c03c","impliedFormat":1},{"version":"2f5747b1508ccf83fad0c251ba1e5da2f5a30b78b09ffa1cfaf633045160afed","impliedFormat":1},{"version":"90407bbaa24977b8a6a90861148ac98d8652afe69992a90d823f29e9807fe2d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b71c603a539078a5e3a039b20f2b0a0d1708967530cf97dec8850a9ca45baa2b","impliedFormat":1},{"version":"d3f2d715f57df3f04bf7b16dde01dec10366f64fce44503c92b8f78f614c1769","impliedFormat":1},{"version":"cb90077223cc1365fa21ef0911a1f9b8f2f878943523d97350dc557973ca3823","impliedFormat":1},{"version":"18f1541b81b80d806120a3489af683edfb811deb91aeca19735d9bb2613e6311","impliedFormat":1},{"version":"232f118ae64ab84dcd26ddb60eaed5a6e44302d36249abf05e9e3fc2cbb701a2","impliedFormat":1},{"version":"035a5df183489c2e22f3cf59fc1ed2b043d27f357eecc0eb8d8e840059d44245","impliedFormat":1},{"version":"a4809f4d92317535e6b22b01019437030077a76fec1d93b9881c9ed4738fcc54","impliedFormat":1},{"version":"5f53fa0bd22096d2a78533f94e02c899143b8f0f9891a46965294ee8b91a9434","impliedFormat":1},{"version":"ab82804a14454734010dcdcd43f564ff7b0389bee4c5692eec76ff5b30d4cf66","impliedFormat":1},{"version":"bae8d023ef6b23df7da26f51cea44321f95817c190342a36882e93b80d07a960","impliedFormat":1},{"version":"26a770cec4bd2e7dbba95c6e536390fffe83c6268b78974a93727903b515c4e7","impliedFormat":1}],"root":[[406,411],[596,599],[633,638],733],"options":{"allowSyntheticDefaultImports":true,"declaration":true,"emitDecoratorMetadata":true,"experimentalDecorators":true,"module":1,"noFallthroughCasesInSwitch":false,"noImplicitAny":false,"outDir":"./dist","removeComments":true,"rootDir":"./src","skipLibCheck":true,"sourceMap":true,"strictBindCallApply":false,"strictNullChecks":false,"target":8},"referencedMap":[[736,1],[734,2],[552,3],[554,4],[548,2],[537,2],[641,2],[321,2],[59,2],[310,5],[311,5],[312,2],[313,6],[323,7],[314,2],[315,8],[316,2],[317,2],[318,5],[319,5],[320,5],[322,9],[330,10],[332,2],[329,2],[335,11],[333,2],[331,2],[327,12],[328,13],[334,2],[336,14],[324,2],[326,15],[325,16],[265,2],[268,17],[264,2],[688,2],[266,2],[267,2],[353,18],[338,18],[345,18],[342,18],[355,18],[346,18],[352,18],[337,19],[356,18],[359,20],[350,18],[340,18],[358,18],[343,18],[341,18],[351,18],[347,18],[357,18],[344,18],[354,18],[339,18],[349,18],[348,18],[366,21],[362,22],[361,2],[360,2],[365,23],[404,24],[60,2],[61,2],[62,2],[670,25],[64,26],[676,27],[675,28],[254,29],[255,26],[375,2],[284,2],[285,2],[376,30],[256,2],[377,2],[378,31],[63,2],[258,32],[259,2],[257,33],[260,32],[261,2],[263,34],[275,35],[276,2],[281,36],[277,2],[278,2],[279,2],[280,2],[282,2],[283,37],[289,38],[292,39],[290,2],[291,2],[309,40],[293,2],[294,2],[719,41],[274,42],[272,43],[270,44],[271,45],[273,2],[301,46],[295,2],[304,47],[297,48],[302,49],[300,50],[303,51],[298,52],[299,53],[287,54],[305,55],[288,56],[307,57],[308,58],[296,2],[262,2],[269,59],[306,60],[372,61],[367,2],[373,62],[368,63],[369,64],[370,65],[371,66],[374,67],[390,68],[389,69],[395,70],[387,2],[388,71],[391,68],[392,72],[394,73],[393,74],[396,75],[381,76],[382,77],[385,78],[384,78],[383,77],[386,77],[380,79],[398,80],[397,81],[400,82],[399,83],[401,84],[363,54],[364,85],[286,2],[402,86],[379,87],[403,88],[639,89],[640,90],[661,91],[662,92],[663,2],[664,93],[665,94],[674,95],[667,96],[671,97],[679,98],[677,6],[678,99],[668,100],[680,2],[682,101],[683,102],[684,103],[673,104],[669,105],[693,106],[681,107],[708,108],[666,109],[709,110],[706,111],[707,6],[731,112],[656,113],[652,114],[654,115],[705,116],[647,117],[695,118],[694,2],[655,119],[702,120],[659,121],[703,2],[704,122],[657,123],[651,124],[658,125],[653,126],[646,2],[699,127],[712,128],[710,6],[642,6],[698,129],[643,13],[644,92],[645,130],[649,131],[648,132],[711,133],[650,134],[687,135],[685,101],[686,136],[696,13],[697,137],[700,138],[715,139],[716,140],[713,141],[714,142],[717,143],[718,144],[720,145],[692,146],[689,147],[690,5],[691,136],[722,148],[721,149],[728,150],[660,6],[724,151],[723,6],[726,152],[725,2],[727,153],[672,154],[701,155],[730,156],[729,6],[739,157],[735,1],[737,158],[738,1],[741,159],[740,160],[746,161],[745,162],[744,163],[742,2],[750,164],[755,165],[751,2],[756,2],[757,166],[758,167],[743,2],[752,2],[475,168],[476,168],[477,169],[431,170],[478,171],[479,172],[480,173],[426,2],[429,174],[427,2],[428,2],[481,175],[482,176],[483,177],[484,178],[485,179],[486,180],[487,180],[488,181],[489,182],[490,183],[491,184],[432,2],[430,2],[492,185],[493,186],[494,187],[526,188],[495,189],[496,190],[497,191],[498,192],[499,193],[500,194],[501,195],[502,196],[503,197],[504,198],[505,198],[506,199],[507,2],[508,200],[510,201],[509,202],[511,203],[512,204],[513,205],[514,206],[515,207],[516,208],[517,209],[518,210],[519,211],[520,212],[521,213],[522,214],[523,215],[433,2],[434,2],[435,2],[474,216],[524,217],[525,218],[748,2],[749,2],[747,219],[754,220],[753,221],[759,2],[760,2],[761,222],[417,223],[595,224],[531,225],[557,226],[555,227],[556,228],[558,229],[535,230],[536,231],[538,2],[543,232],[416,2],[542,233],[425,234],[546,235],[539,2],[540,2],[534,236],[545,2],[544,237],[532,238],[533,239],[541,240],[565,241],[580,225],[586,242],[578,243],[587,242],[564,242],[560,244],[583,225],[559,245],[577,246],[588,247],[590,248],[582,225],[530,249],[579,2],[585,250],[561,251],[562,252],[576,243],[584,246],[575,253],[589,254],[581,242],[563,245],[418,2],[421,255],[420,255],[422,256],[424,257],[423,2],[419,258],[592,259],[591,2],[593,260],[594,261],[574,262],[572,263],[568,264],[566,265],[570,265],[569,265],[571,264],[573,264],[567,2],[415,266],[405,2],[613,267],[605,2],[618,2],[626,2],[625,2],[602,2],[632,268],[610,269],[614,2],[609,2],[617,270],[624,2],[631,271],[622,272],[606,2],[612,273],[623,2],[628,274],[600,2],[627,2],[608,2],[604,2],[615,2],[607,2],[620,2],[629,275],[611,269],[621,2],[630,2],[603,2],[601,2],[619,2],[616,276],[436,2],[553,277],[57,2],[732,278],[547,2],[549,2],[414,279],[413,2],[527,160],[529,280],[412,2],[551,281],[550,2],[58,2],[253,282],[226,2],[204,283],[202,283],[252,284],[217,285],[216,285],[117,286],[68,287],[224,286],[225,286],[227,288],[228,286],[229,289],[128,290],[230,286],[201,286],[231,286],[232,291],[233,286],[234,285],[235,292],[236,286],[237,286],[238,286],[239,286],[240,285],[241,286],[242,286],[243,286],[244,286],[245,293],[246,286],[247,286],[248,286],[249,286],[250,286],[67,284],[70,289],[71,289],[72,289],[73,289],[74,289],[75,289],[76,289],[77,286],[79,294],[80,289],[78,289],[81,289],[82,289],[83,289],[84,289],[85,289],[86,289],[87,286],[88,289],[89,289],[90,289],[91,289],[92,289],[93,286],[94,289],[95,289],[96,289],[97,289],[98,289],[99,289],[100,286],[102,295],[101,289],[103,289],[104,289],[105,289],[106,289],[107,293],[108,286],[109,286],[123,296],[111,297],[112,289],[113,289],[114,286],[115,289],[116,289],[118,298],[119,289],[120,289],[121,289],[122,289],[124,289],[125,289],[126,289],[127,289],[129,299],[130,289],[131,289],[132,289],[133,286],[134,289],[135,300],[136,300],[137,300],[138,286],[139,289],[140,289],[141,289],[146,289],[142,289],[143,286],[144,289],[145,286],[147,289],[148,289],[149,289],[150,289],[151,289],[152,289],[153,286],[154,289],[155,289],[156,289],[157,289],[158,289],[159,289],[160,289],[161,289],[162,289],[163,289],[164,289],[165,289],[166,289],[167,289],[168,289],[169,289],[170,301],[171,289],[172,289],[173,289],[174,289],[175,289],[176,289],[177,286],[178,286],[179,286],[180,286],[181,286],[182,289],[183,289],[184,289],[185,289],[203,302],[251,286],[188,303],[187,304],[211,305],[210,306],[206,307],[205,306],[207,308],[196,309],[194,310],[209,311],[208,308],[195,2],[197,312],[110,313],[66,314],[65,289],[200,2],[192,315],[193,316],[190,2],[191,317],[189,289],[198,318],[69,319],[218,2],[219,2],[212,2],[215,285],[214,2],[220,2],[221,2],[213,320],[222,2],[223,2],[186,321],[199,322],[528,323],[54,2],[55,2],[11,2],[9,2],[10,2],[15,2],[14,2],[2,2],[16,2],[17,2],[18,2],[19,2],[20,2],[21,2],[22,2],[23,2],[3,2],[24,2],[25,2],[4,2],[26,2],[30,2],[27,2],[28,2],[29,2],[31,2],[32,2],[33,2],[5,2],[34,2],[35,2],[36,2],[37,2],[6,2],[41,2],[38,2],[39,2],[40,2],[42,2],[7,2],[43,2],[48,2],[49,2],[44,2],[45,2],[46,2],[47,2],[8,2],[56,2],[53,2],[50,2],[51,2],[52,2],[1,2],[13,2],[12,2],[452,324],[462,325],[451,324],[472,326],[443,327],[442,328],[471,329],[465,330],[470,331],[445,332],[459,333],[444,334],[468,335],[440,336],[439,329],[469,337],[441,338],[446,339],[447,2],[450,339],[437,2],[473,340],[463,341],[454,342],[455,343],[457,344],[453,345],[456,346],[466,329],[448,347],[449,348],[458,349],[438,350],[461,341],[460,339],[464,2],[467,351],[406,352],[407,353],[638,354],[634,355],[596,356],[411,357],[410,353],[409,358],[408,353],[733,359],[635,360],[597,352],[599,361],[636,362],[598,6],[637,363],[633,364]],"version":"5.9.3"} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..8817a32 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,742 @@ +{ + "name": "landing-page", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "@whiskeysockets/baileys": "^7.0.0-rc10" + } + }, + "node_modules/@borewit/text-codec": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@borewit/text-codec/-/text-codec-0.2.2.tgz", + "integrity": "sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/@cacheable/memory": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@cacheable/memory/-/memory-2.0.9.tgz", + "integrity": "sha512-HdMx6DoGywB30vacDbBsITbIX4pgFqj1zsrV58jZBUw3klzkNoXhj7qOqAgledhxG7YZI5rBSJg7Zp8/VG0DuA==", + "license": "MIT", + "dependencies": { + "@cacheable/utils": "^2.4.1", + "@keyv/bigmap": "^1.3.1", + "hookified": "^1.15.1", + "keyv": "^5.6.0" + } + }, + "node_modules/@cacheable/memory/node_modules/keyv": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz", + "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==", + "license": "MIT", + "dependencies": { + "@keyv/serialize": "^1.1.1" + } + }, + "node_modules/@cacheable/node-cache": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@cacheable/node-cache/-/node-cache-1.7.6.tgz", + "integrity": "sha512-6Omk2SgNnjtxB5f/E6bTIWIt5xhdpx39fGNRQgU9lojvRxU68v+qY+SXXLsp3ZGukqoPjsK21wZ6XABFr/Ge3A==", + "license": "MIT", + "dependencies": { + "cacheable": "^2.3.1", + "hookified": "^1.14.0", + "keyv": "^5.5.5" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@cacheable/node-cache/node_modules/keyv": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz", + "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==", + "license": "MIT", + "dependencies": { + "@keyv/serialize": "^1.1.1" + } + }, + "node_modules/@cacheable/utils": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@cacheable/utils/-/utils-2.4.1.tgz", + "integrity": "sha512-eiFgzCbIneyMlLOmNG4g9xzF7Hv3Mga4LjxjcSC/ues6VYq2+gUbQI8JqNuw/ZM8tJIeIaBGpswAsqV2V7ApgA==", + "license": "MIT", + "dependencies": { + "hashery": "^1.5.1", + "keyv": "^5.6.0" + } + }, + "node_modules/@cacheable/utils/node_modules/keyv": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz", + "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==", + "license": "MIT", + "dependencies": { + "@keyv/serialize": "^1.1.1" + } + }, + "node_modules/@hapi/boom": { + "version": "9.1.4", + "resolved": "https://registry.npmjs.org/@hapi/boom/-/boom-9.1.4.tgz", + "integrity": "sha512-Ls1oH8jaN1vNsqcaHVYJrKmgMcKsC1wcp8bujvXrHaAqD2iDYq3HoOwsxwo09Cuda5R5nC0o0IxlrlTuvPuzSw==", + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "9.x.x" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@keyv/bigmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@keyv/bigmap/-/bigmap-1.3.1.tgz", + "integrity": "sha512-WbzE9sdmQtKy8vrNPa9BRnwZh5UF4s1KTmSK0KUVLo3eff5BlQNNWDnFOouNpKfPKDnms9xynJjsMYjMaT/aFQ==", + "license": "MIT", + "dependencies": { + "hashery": "^1.4.0", + "hookified": "^1.15.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "keyv": "^5.6.0" + } + }, + "node_modules/@keyv/serialize": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.1.tgz", + "integrity": "sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==", + "license": "MIT" + }, + "node_modules/@pinojs/redact": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@pinojs/redact/-/redact-0.4.0.tgz", + "integrity": "sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==", + "license": "MIT" + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.5.tgz", + "integrity": "sha512-zgXFLzW3Ap33e6d0Wlj4MGIm6Ce8O89n/apUaGNB/jx+hw+ruWEp7EwGUshdLKVRCxZW12fp9r40E1mQrf/34g==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.1.tgz", + "integrity": "sha512-vW1GmwMZNnL+gMRaovlh9yZX74kc+TTU3FObkkurpMaRtBfLP3ldjS9KQWlwZgraRE0+dheEEoAxdzcJQ8eXZg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.1.tgz", + "integrity": "sha512-GpptLrs57adMSuHi3VNj0mAF8dwh36LMaYF6XyJ6JMWlVsc+t42tm1HSEDmOs3A8fC9yyeisgLhsTVQokOZ0zw==", + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.2.tgz", + "integrity": "sha512-pa0vFRuws4wkvaXKK1uXZMAwAX4/t8ANaJo45iw/oQHNQ9q5xUzwgFmVJGXiga2BeN+zpX7Vf9vmsiIa2J+MUw==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.1.tgz", + "integrity": "sha512-oOAWABowe8EAbMyWKM0tYDKi8Yaox52D+HWZhAIJqQXbqe0xI/GV7FhLWqlEKreMkfDjshR5FKgi3mnle0h6Eg==", + "license": "BSD-3-Clause" + }, + "node_modules/@tokenizer/inflate": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@tokenizer/inflate/-/inflate-0.4.1.tgz", + "integrity": "sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "token-types": "^6.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "20.19.41", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.41.tgz", + "integrity": "sha512-ECymXOukMnOoVkC2bb1Vc/w/836DXncOg5m8Xj1RH7xSHZJWNYY6Zh7EH477vcnD5egKNNfy2RpNOmuChhFPgQ==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@whiskeysockets/baileys": { + "version": "7.0.0-rc10", + "resolved": "https://registry.npmjs.org/@whiskeysockets/baileys/-/baileys-7.0.0-rc10.tgz", + "integrity": "sha512-tVHZRIE06HlQajHcLEsCa+gnH5z+dAXPjwHsGXDNY9/Y0iqbymQzHLvh4tMH/pi/ea/D617qCQhNkDT2B0tufg==", + "deprecated": "This version is affected by a zero-day vulnerability that allows spoofing of messages, please update to\n the latest versions (6.7.22^ or 7.0.0-rc12^)! For more information, check out the public advisory at\n https://github.com/WhiskeySockets/Baileys/security/advisories/GHSA-qvv5-jq5g-4cgg", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@cacheable/node-cache": "^1.4.0", + "@hapi/boom": "^9.1.3", + "async-mutex": "^0.5.0", + "libsignal": "git+https://github.com/whiskeysockets/libsignal-node.git", + "lru-cache": "^11.1.0", + "music-metadata": "^11.12.3", + "p-queue": "^9.0.0", + "pino": "^9.6", + "protobufjs": "^7.5.6", + "whatsapp-rust-bridge": "0.5.3", + "ws": "^8.13.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "audio-decode": "^2.1.3", + "jimp": "^1.6.1", + "link-preview-js": "^3.0.0", + "sharp": "*" + }, + "peerDependenciesMeta": { + "audio-decode": { + "optional": true + }, + "jimp": { + "optional": true + }, + "link-preview-js": { + "optional": true + } + } + }, + "node_modules/@whiskeysockets/baileys/node_modules/lru-cache": { + "version": "11.5.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.1.tgz", + "integrity": "sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/async-mutex": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.5.0.tgz", + "integrity": "sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/cacheable": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-2.3.5.tgz", + "integrity": "sha512-EQfaKe09tl615iNvq/TBRWTFf1AKJNXYQSsMx0Z3EI0nA+pVsVPS8wJhnRlkbdacKPh1d0qVIhwTc2zsQNFEEg==", + "license": "MIT", + "dependencies": { + "@cacheable/memory": "^2.0.8", + "@cacheable/utils": "^2.4.1", + "hookified": "^1.15.0", + "keyv": "^5.6.0", + "qified": "^0.10.1" + } + }, + "node_modules/cacheable/node_modules/keyv": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz", + "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==", + "license": "MIT", + "dependencies": { + "@keyv/serialize": "^1.1.1" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/curve25519-js": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/curve25519-js/-/curve25519-js-0.0.4.tgz", + "integrity": "sha512-axn2UMEnkhyDUPWOwVKBMVIzSQy2ejH2xRGy1wq81dqRwApXfIzfbE3hIX0ZRFBIihf/KDqK158DLwESu4AK1w==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "license": "MIT" + }, + "node_modules/file-type": { + "version": "21.3.4", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-21.3.4.tgz", + "integrity": "sha512-Ievi/yy8DS3ygGvT47PjSfdFoX+2isQueoYP1cntFW1JLYAuS4GD7NUPGg4zv2iZfV52uDyk5w5Z0TdpRS6Q1g==", + "license": "MIT", + "dependencies": { + "@tokenizer/inflate": "^0.4.1", + "strtok3": "^10.3.4", + "token-types": "^6.1.1", + "uint8array-extras": "^1.4.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sindresorhus/file-type?sponsor=1" + } + }, + "node_modules/hashery": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/hashery/-/hashery-1.5.1.tgz", + "integrity": "sha512-iZyKG96/JwPz1N55vj2Ie2vXbhu440zfUfJvSwEqEbeLluk7NnapfGqa7LH0mOsnDxTF85Mx8/dyR6HfqcbmbQ==", + "license": "MIT", + "dependencies": { + "hookified": "^1.15.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/hookified": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.15.1.tgz", + "integrity": "sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg==", + "license": "MIT" + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/libsignal": { + "version": "6.0.0", + "resolved": "git+ssh://git@github.com/whiskeysockets/libsignal-node.git#bcea72df9ec34d9d9140ab30619cf479c7c144c7", + "license": "GPL-3.0", + "dependencies": { + "curve25519-js": "^0.0.4", + "protobufjs": "^7.5.5" + } + }, + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "license": "Apache-2.0" + }, + "node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/music-metadata": { + "version": "11.12.3", + "resolved": "https://registry.npmjs.org/music-metadata/-/music-metadata-11.12.3.tgz", + "integrity": "sha512-n6hSTZkuD59qWgHh6IP5dtDlDZQXoxk/bcA85Jywg8Z1iFrlNgl2+GTFgjZyn52W5UgQpV42V4XqrQZZAMbZTQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + }, + { + "type": "buymeacoffee", + "url": "https://buymeacoffee.com/borewit" + } + ], + "license": "MIT", + "dependencies": { + "@borewit/text-codec": "^0.2.2", + "@tokenizer/token": "^0.3.0", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "file-type": "^21.3.1", + "media-typer": "^1.1.0", + "strtok3": "^10.3.4", + "token-types": "^6.1.2", + "uint8array-extras": "^1.5.0", + "win-guid": "^0.2.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/on-exit-leak-free": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/p-queue": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.3.0.tgz", + "integrity": "sha512-7NED7xhQ74Ngp4JP/2e0VZHp7vSWfJfqeiR92jPgxsz6m0Se4P03YoTKa9dDXyZ3r6P616gUXttrB6nnHYKang==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.4", + "p-timeout": "^7.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-7.0.1.tgz", + "integrity": "sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pino": { + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-9.14.0.tgz", + "integrity": "sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w==", + "license": "MIT", + "dependencies": { + "@pinojs/redact": "^0.4.0", + "atomic-sleep": "^1.0.0", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^2.0.0", + "pino-std-serializers": "^7.0.0", + "process-warning": "^5.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.2.0", + "safe-stable-stringify": "^2.3.1", + "sonic-boom": "^4.0.1", + "thread-stream": "^3.0.0" + }, + "bin": { + "pino": "bin.js" + } + }, + "node_modules/pino-abstract-transport": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz", + "integrity": "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==", + "license": "MIT", + "dependencies": { + "split2": "^4.0.0" + } + }, + "node_modules/pino-std-serializers": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.1.0.tgz", + "integrity": "sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==", + "license": "MIT" + }, + "node_modules/process-warning": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.0.0.tgz", + "integrity": "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT" + }, + "node_modules/protobufjs": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.6.2.tgz", + "integrity": "sha512-N9EiLovGEQOJSPF26Ij7qUGvahfEnq0eeYZ02aigIedkmz1qZSwjnP9SBITHJuF/6MYbIW4HDN8zdYjsjqJKXQ==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.5", + "@protobufjs/eventemitter": "^1.1.1", + "@protobufjs/fetch": "^1.1.1", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.2", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.1", + "@types/node": ">=13.7.0", + "long": "^5.3.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/qified": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/qified/-/qified-0.10.1.tgz", + "integrity": "sha512-+Owyggi9IxT1ePKGafcI87ubSmxol6smwJ+RAHDQlx9+9cPwFWDiKFFCPuWhr9ignlGpZ9vDQLw67N4dcTVFEA==", + "license": "MIT", + "dependencies": { + "hookified": "^2.1.1" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/qified/node_modules/hookified": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/hookified/-/hookified-2.2.0.tgz", + "integrity": "sha512-p/LgFzRN5FeoD3DLS6bkUapeye6E4SI6yJs6KetENd18S+FBthqYq2amJUWpt5z0EQwwHemidjY5OqJGEKm5uA==", + "license": "MIT" + }, + "node_modules/quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", + "license": "MIT" + }, + "node_modules/real-require": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/sonic-boom": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.1.tgz", + "integrity": "sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==", + "license": "MIT", + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/strtok3": { + "version": "10.3.5", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.3.5.tgz", + "integrity": "sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA==", + "license": "MIT", + "dependencies": { + "@tokenizer/token": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/thread-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.1.0.tgz", + "integrity": "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==", + "license": "MIT", + "dependencies": { + "real-require": "^0.2.0" + } + }, + "node_modules/token-types": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.1.2.tgz", + "integrity": "sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==", + "license": "MIT", + "dependencies": { + "@borewit/text-codec": "^0.2.1", + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/uint8array-extras": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.5.0.tgz", + "integrity": "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" + }, + "node_modules/whatsapp-rust-bridge": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/whatsapp-rust-bridge/-/whatsapp-rust-bridge-0.5.3.tgz", + "integrity": "sha512-Xb3GAgtWQQJ30oI4a4pjM4+YUeli9CMLTwTIewUrb+AJMFElIkiT5uo+j1Zhc+amiV0Jj+LfX76c/EEZirJbGA==", + "license": "MIT" + }, + "node_modules/win-guid": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/win-guid/-/win-guid-0.2.1.tgz", + "integrity": "sha512-gEIQU4mkgl2OPeoNrWflcJFJ3Ae2BPd4eCsHHA/XikslkIVms/nHhvnvzIZV7VLmBvtFlDOzLt9rrZT+n6D67A==", + "license": "MIT" + }, + "node_modules/ws": { + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz", + "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..ef9f17a --- /dev/null +++ b/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "@whiskeysockets/baileys": "^7.0.0-rc10" + } +}