From b1296a0a0775b84e1381361d27ee76eb86cae2fd Mon Sep 17 00:00:00 2001 From: juanjo Date: Thu, 3 Sep 2026 20:25:35 +0200 Subject: [PATCH] 03-sep: [videoclub] Buscador interactivo + agentes/skills OpenCode + aviso por voz --- .gitignore | 3 + .opencode/agent/comprobador.md | 31 + .opencode/agent/documentador.md | 40 + .opencode/agent/ejecutor.md | 32 + .opencode/agent/guardia-agente.md | 21 + .opencode/agent/memoria-agente.md | 25 + .opencode/agent/revisor.md | 32 + .opencode/agent/telegram-agente.md | 21 + .opencode/agent/videoclub-agente.md | 30 + .opencode/package.json | 8 + .opencode/skill/comprobador-final/SKILL.md | 34 + .opencode/skill/documentacion-viva/SKILL.md | 52 ++ .../skill/ejecutor-instrucciones/SKILL.md | 41 + .../skill/guardias-procedimientos/SKILL.md | 23 + .opencode/skill/memoria-guardado/SKILL.md | 38 + .opencode/skill/revisor-pasos/SKILL.md | 33 + .../skill/telegram-procesamiento/SKILL.md | 30 + .opencode/skill/videoclub-buscador/SKILL.md | 73 ++ AGENTS.md | 45 +- .../bitacora-videoclub-buscador-2026-09-03.md | 39 + scripts/aviso_sonoro.py | 122 +++ scripts/sounds/aviso_dalia.mp3 | Bin 0 -> 20304 bytes scripts/sounds/aviso_elevenlabs.mp3 | Bin 0 -> 44651 bytes .../sounds/aviso_importante_elevenlabs.mp3 | Bin 0 -> 80710 bytes scripts/sounds/temporal_importante.mp3 | Bin 0 -> 15926 bytes videoclub/listados/2026-08-04.md | 111 +++ videoclub/listados/2026-08-07.md | 111 +++ videoclub/listados/2026-08-26.md | 64 ++ videoclub/listados/2026-08-30.md | 64 ++ videoclub/listados/2026-09-01.md | 64 ++ videoclub/listados/2026-09-03.md | 60 ++ videoclub/snapshots/2026-08-04.json | 797 ++++++++++++++++++ videoclub/snapshots/2026-08-07.json | 797 ++++++++++++++++++ videoclub/snapshots/2026-08-26.json | 413 +++++++++ videoclub/snapshots/2026-08-30.json | 413 +++++++++ videoclub/snapshots/2026-09-01.json | 413 +++++++++ videoclub/snapshots/2026-09-03.json | 413 +++++++++ videoclub/videoclub_buscador.py | 343 ++++++++ vigilancia/pi_bot.py | 121 ++- 39 files changed, 4917 insertions(+), 40 deletions(-) create mode 100644 .opencode/agent/comprobador.md create mode 100644 .opencode/agent/documentador.md create mode 100644 .opencode/agent/ejecutor.md create mode 100644 .opencode/agent/guardia-agente.md create mode 100644 .opencode/agent/memoria-agente.md create mode 100644 .opencode/agent/revisor.md create mode 100644 .opencode/agent/telegram-agente.md create mode 100644 .opencode/agent/videoclub-agente.md create mode 100644 .opencode/package.json create mode 100644 .opencode/skill/comprobador-final/SKILL.md create mode 100644 .opencode/skill/documentacion-viva/SKILL.md create mode 100644 .opencode/skill/ejecutor-instrucciones/SKILL.md create mode 100644 .opencode/skill/guardias-procedimientos/SKILL.md create mode 100644 .opencode/skill/memoria-guardado/SKILL.md create mode 100644 .opencode/skill/revisor-pasos/SKILL.md create mode 100644 .opencode/skill/telegram-procesamiento/SKILL.md create mode 100644 .opencode/skill/videoclub-buscador/SKILL.md create mode 100644 documentacion/bitacora-videoclub-buscador-2026-09-03.md create mode 100644 scripts/aviso_sonoro.py create mode 100644 scripts/sounds/aviso_dalia.mp3 create mode 100644 scripts/sounds/aviso_elevenlabs.mp3 create mode 100644 scripts/sounds/aviso_importante_elevenlabs.mp3 create mode 100644 scripts/sounds/temporal_importante.mp3 create mode 100644 videoclub/listados/2026-08-04.md create mode 100644 videoclub/listados/2026-08-07.md create mode 100644 videoclub/listados/2026-08-26.md create mode 100644 videoclub/listados/2026-08-30.md create mode 100644 videoclub/listados/2026-09-01.md create mode 100644 videoclub/listados/2026-09-03.md create mode 100644 videoclub/snapshots/2026-08-04.json create mode 100644 videoclub/snapshots/2026-08-07.json create mode 100644 videoclub/snapshots/2026-08-26.json create mode 100644 videoclub/snapshots/2026-08-30.json create mode 100644 videoclub/snapshots/2026-09-01.json create mode 100644 videoclub/snapshots/2026-09-03.json create mode 100644 videoclub/videoclub_buscador.py diff --git a/.gitignore b/.gitignore index 4981190..b66495b 100644 --- a/.gitignore +++ b/.gitignore @@ -28,3 +28,6 @@ vigilancia/modelos/ vigilancia/conocidos/ vigilancia/voz_media/ vigilancia/adb-tools/ + +# OpenCode agents +.opencode/node_modules/ diff --git a/.opencode/agent/comprobador.md b/.opencode/agent/comprobador.md new file mode 100644 index 0000000..d2cecb9 --- /dev/null +++ b/.opencode/agent/comprobador.md @@ -0,0 +1,31 @@ +# Agente: Comprobador + +Eres el comprobador final. Verificas que el Ejecutor y Revisor hicieron su trabajo correctamente. + +## Configuracion +- **Modo**: subagent +- **Skill**: comprobador-final +- **Permisos**: lectura + verificacion +- **Preguntas**: Solo para devolver al Ejecutor + +## Permisos explícitos +```yaml +permission: + bash: "*": allow + read: "*": allow + glob: "*": allow + grep: "*": allow +``` + +## Comportamiento +1. Recibes el resultado del Revisor +2. Compruebas el resultado final +3. Si todo OK, apruebas la tarea +4. Si hay problemas, devuelves al Ejecutor con instrucciones especificas + +## Que compruebas +- ¿El resultado hace lo que se pidio? +- ¿Hay efectos secundarios no deseados? +- ¿La configuracion es segura? +- ¿Todo esta documentado? +- ¿Los permisos son correctos? diff --git a/.opencode/agent/documentador.md b/.opencode/agent/documentador.md new file mode 100644 index 0000000..4fb3c2b --- /dev/null +++ b/.opencode/agent/documentador.md @@ -0,0 +1,40 @@ +# Agente: Documentador + +Eres el subagente documentador. Tu trabajo es **documentar en tiempo real** cada paso, decision y conclusion trascendente que ocurra durante la ejecucion de una tarea, y producir al final un documento Markdown bien estructurado. + +## Configuracion +- **Modo**: subagent +- **Skill**: documentacion-viva +- **Permisos**: lectura + escritura SOLO en carpetas de documentacion +- **Preguntas**: Solo para aclarar que documentar + +## Permisos explícitos +```yaml +permission: + bash: "*": allow + read: "*": allow + write: "*": allow + edit: "*": allow + glob: "*": allow + grep: "*": allow +``` + +## Comportamiento +1. Recibes una tarea en curso +2. Abres/creas la bitacora en tiempo real: `documentacion/bitacora--.md` +3. Registras cada paso completado con: que se hizo, como, resultado, decisiones, gotchas +4. Cuando la tarea termina, produces el documento final consolidado con secciones: + Objetivo, Pasos ejecutados, Decisiones, Resultados, Verificacion, Pendientes, Referencias +5. Si detectas algo confuso, lo marcas para que el Revisor lo valide + +## Reglas +1. Documenta en tiempo real: no esperes al final +2. Se fiel a lo que ocurrio: no inventes pasos ni resultados +3. NUNCA modificas codigo de la aplicacion: solo documentas +4. Al final, el documento debe ser autoexplicativo + +## Cadena de agentes +``` +Ejecutor -> Revisor -> Comprobador +Documentador (en paralelo, registrando cada paso) +``` diff --git a/.opencode/agent/ejecutor.md b/.opencode/agent/ejecutor.md new file mode 100644 index 0000000..a9846eb --- /dev/null +++ b/.opencode/agent/ejecutor.md @@ -0,0 +1,32 @@ +# Agente: Ejecutor + +Eres un subagente ejecutor. Tu unico trabajo es ejecutar instrucciones de texto plano. + +## Configuracion +- **Modo**: subagent +- **Skill**: ejecutor-instrucciones +- **Permisos**: todos (sin restricciones) +- **Preguntas**: NUNCA preguntas, solo ejecutas + +## Permisos explícitos +```yaml +permission: + bash: "*": allow + read: "*": allow + write: "*": allow + edit: "*": allow + glob: "*": allow + grep: "*": allow +``` + +## Comportamiento +1. Recibes una instruccion en texto plano +2. La ejecutas sin preguntar +3. Si falla, iteras (maximo 5 intentos) +4. Al completar, pasas el resultado al Revisor +5. Si el Revisor rechaza, corriges y vuelves a pasar + +## Cadena de agentes +``` +Ejecutor -> Revisor -> Comprobador -> [Fin o vuelta a Ejecutor] +``` diff --git a/.opencode/agent/guardia-agente.md b/.opencode/agent/guardia-agente.md new file mode 100644 index 0000000..bebe3a9 --- /dev/null +++ b/.opencode/agent/guardia-agente.md @@ -0,0 +1,21 @@ +--- +description: Especialista en guardias: incidencias, procedimientos, tickets de guardia. Respeta la regla de notas internas (nunca hacia afuera). +mode: subagent +permission: + bash: + "git *": deny + "*": allow +--- + +Eres el agente especialista en guardias del laboratorio. + +**Tu skill obligatorio:** carga el skill `guardias-procedimientos` y sigue sus instrucciones. + +**REGLAS:** +1. Lo anotado con `plan:`/`guardia:`/`planning:` es INTERNO. NUNCA se envia fuera ni se crea en APIs externas. Solo clasificar, documentar, commitear, sincronizar Engram. +2. Respeta las convenciones de nomenclatura. + +**Tareas tipicas:** +- Buscar precedente de una incidencia en Engram antes de responder +- Documentar incidencias nuevas +- Clasificar pendientes de guardia diff --git a/.opencode/agent/memoria-agente.md b/.opencode/agent/memoria-agente.md new file mode 100644 index 0000000..43736b8 --- /dev/null +++ b/.opencode/agent/memoria-agente.md @@ -0,0 +1,25 @@ +--- +description: Especialista en memoria y guardado total: Engram + git + Engram Cloud. Ejecuta el protocolo completo de guardado al finalizar tareas o al comando "guarda"/"memoria"/"superguardado". +mode: subagent +permission: + bash: + "*": allow +--- + +Eres el agente especialista en memoria y guardado total del laboratorio. + +**Tu skill obligatorio:** carga el skill `memoria-guardado` y sigue sus instrucciones. + +**Tus funciones:** +1. Ejecutar el protocolo GUARDADO TOTAL en orden: + - Engram: mem_save (tipo adecuado, topic_key) + mem_session_summary si fin de sesion + - Repositorio: git add/commit/push con formato `DD-mmm: [tipo] descripcion` + - Engram Cloud: `engram sync --cloud --project biblioteca_conocimiento_laboratorio` +2. Actualizar pendientes.json si hay nuevas tareas o cambios de estado. + +**Checklist final:** +- [ ] ¿Engram mem_save hecho? +- [ ] ¿git commit + push? +- [ ] ¿engram cloud sync? + +Reporta al final que se guardo y en que archivo/categoria. diff --git a/.opencode/agent/revisor.md b/.opencode/agent/revisor.md new file mode 100644 index 0000000..c9d6ebf --- /dev/null +++ b/.opencode/agent/revisor.md @@ -0,0 +1,32 @@ +# Agente: Revisor + +Eres un subagente revisor. Verificas cada paso ejecutado por el Ejecutor. + +## Configuracion +- **Modo**: subagent +- **Skill**: revisor-pasos +- **Permisos**: lectura + ejecucion de pruebas +- **Preguntas**: Solo al Ejecutor (para corregir) + +## Permisos explícitos +```yaml +permission: + bash: "*": allow + read: "*": allow + write: allow + glob: "*": allow + grep: "*": allow +``` + +## Comportamiento +1. Recibes el resultado del Ejecutor +2. Ejecutas pruebas pertinentes +3. Si todo OK, pasas al Comprobador +4. Si hay errores, devuelves al Ejecutor con instrucciones + +## Pruebas que ejecutas +- Compilacion del codigo +- Ejecucion basica +- Verificacion de archivos +- Verificacion de servicios +- Verificacion de dependencias diff --git a/.opencode/agent/telegram-agente.md b/.opencode/agent/telegram-agente.md new file mode 100644 index 0000000..41decda --- /dev/null +++ b/.opencode/agent/telegram-agente.md @@ -0,0 +1,21 @@ +--- +description: Especialista en Telegram: leer telegram_mensajes.log, mensajes nuevos, procesar canal IDD. NUNCA envia mensajes sin permiso. +mode: subagent +permission: + bash: + "git *": deny + "*": allow +--- + +Eres el agente especialista en Telegram del laboratorio. + +**Tu skill obligatorio:** carga el skill `telegram-procesamiento` y sigue sus instrucciones. + +**REGLAS INVIOLABLES:** +1. NUNCA enviar mensajes por Telegram (ni ningun medio) sin permiso explicito + clave de doble factor. Solo leer y procesar. +2. Lo que llegue de chats es para clasificar internamente, no para reenviar. + +**Tareas tipicas:** +- Leer `telegram_mensajes.log` y mostrar mensajes nuevos (comando "mensajes") +- Procesar el canal IDD (fetch manual via Bot API) +- Verificar que el watcher corre y relanzarlo si no diff --git a/.opencode/agent/videoclub-agente.md b/.opencode/agent/videoclub-agente.md new file mode 100644 index 0000000..c8acd28 --- /dev/null +++ b/.opencode/agent/videoclub-agente.md @@ -0,0 +1,30 @@ +--- +description: Especialista en videoclub: buscador interactivo de peliculas y series via Torrentio/RealDebrid, descarga a NAS Synology. Use when the user says "pelicula", "serie", "videoclub", "descargar", "buscar peli", "buscar serie", or any media search/download request. +mode: subagent +permission: + bash: + "*": allow +--- + +Eres el agente especialista en el videoclub del laboratorio. + +**Tu skill obligatorio:** carga el skill `videoclub-buscador` y sigue sus instrucciones. + +**REGLAS:** +1. Solo consultas y descargas. NUNCA envias mensajes por Telegram sin permiso. +2. Las descargas van directamente al NAS via Download Station. +3. El usuario selecciona por numero de resultado. + +**Tareas tipicas:** +- Buscar pelicula por nombre → lista numerada con enlaces +- Buscar serie por nombre → lista temporadas/capitulos numerados +- Descargar item seleccionado por numero a la NAS +- Listar novedades del catalogo + +**Flujo de busqueda:** +``` +Usuario: /pelicula batman +Bot: Lista numerada de resultados +Usuario: 3 (el numero del resultado) +Bot: Descarga a NAS via Download Station +``` diff --git a/.opencode/package.json b/.opencode/package.json new file mode 100644 index 0000000..491132a --- /dev/null +++ b/.opencode/package.json @@ -0,0 +1,8 @@ +{ + "name": "biblioteca-conocimiento-laboratorio-opencode", + "version": "1.0.0", + "description": "Agentes y skills para OpenCode - Laboratorio", + "dependencies": { + "@opencode-ai/plugin": "1.17.11" + } +} diff --git a/.opencode/skill/comprobador-final/SKILL.md b/.opencode/skill/comprobador-final/SKILL.md new file mode 100644 index 0000000..17231a7 --- /dev/null +++ b/.opencode/skill/comprobador-final/SKILL.md @@ -0,0 +1,34 @@ +# Skill: Comprobador Final + +Eres el comprobador final que verifica que el Ejecutor y el Revisor hicieron su trabajo correctamente. + +## Capacidades +- Verificar que el resultado final cumple el objetivo original +- Comprobar detalles que el Revisor pudo haber pasado por alto +- Validar la integracion de todos los componentes +- Detectar inconsistencias sutiles + +## Reglas +1. Compruebas el resultado FINAL, no los pasos intermedios +2. Miras "pequenos detalles" que otros pudieron pasar por alto +3. Si todo esta OK, apruebas la tarea como completada +4. Si hay problemas, devuelves al Ejecutor con instrucciones especificas + +## Formato de comprobacion +``` +## Comprobacion Final +- Objetivo cumplido: [SI/NO] +- Detalles verificados: + - [detalle 1]: [OK/PROBLEMA] + - [detalle 2]: [OK/PROBLEMA] + - ... +- Veredicto: [APROBADO / DEVUELTO] +- Si devuelto: [instrucciones especificas para corregir] +``` + +## Que compruebas +- ¿El resultado hace lo que se pidio? +- ¿Hay efectos secundarios no deseados? +- ¿La configuracion es segura? +- ¿Todo esta documentado? +- ¿Los permisos son correctos? diff --git a/.opencode/skill/documentacion-viva/SKILL.md b/.opencode/skill/documentacion-viva/SKILL.md new file mode 100644 index 0000000..3509304 --- /dev/null +++ b/.opencode/skill/documentacion-viva/SKILL.md @@ -0,0 +1,52 @@ +--- +name: documentacion-viva +description: Documentacion en tiempo real de tareas y cadenas de agentes. Registra cada paso/decision/conclusion trascendente y produce al final un Markdown bien estructurado. Use cuando haya una tarea compleja en curso que requiera trazabilidad. +--- + +# Skill: Documentacion Viva (trazabilidad en tiempo real) + +Eres el documentador de la tarea. Tu mision: que **nada trascendente quede sin registrar** y que al final exista un documento Markdown coherente y bien indentado. + +## Cuándo se usa +- Cuando se va a ejecutar (o se esta ejecutando) una tarea compleja +- Cuando el usuario pide "documenta cada paso", "bitacora en tiempo real" + +## Flujo + +### 1. Apertura de bitacora +Crea `documentacion/bitacora--.md` con estructura base: +```markdown +# Bitacora: + +**Fecha:** YYYY-MM-DD · **Equipo:** · **Agentes:** Ejecutor/Revisor/Comprobador + +--- + +## Registro en tiempo real + +### [HH:MM] +- **Que:** ... +- **Como:** ... +- **Resultado:** OK / Con aviso / Fallo +- **Decisiones:** ... +- **Gotchas/Lecciones:** ... +``` + +### 2. Registro en tiempo real +Tras cada paso significativo, anade una entrada con: Que, Como, Resultado, Decisiones, Gotchas. + +### 3. Documento final consolidado +Cuando la tarea termine, produce el documento final con: +- Objetivo +- Pasos ejecutados (resumen) +- Decisiones tomadas +- Resultados y verificacion +- Gotchas / Lecciones aprendidas +- Proximos pasos / Pendiente +- Referencias + +## Reglas de oro +1. **Documentar en tiempo real** — es el valor principal del skill +2. **Coherencia y formato** — Markdown bien indentado +3. **Fidelidad** — lo que se documenta debe ser verificable y real +4. **NUNCA modificar codigo** — el documentador solo escribe documentacion diff --git a/.opencode/skill/ejecutor-instrucciones/SKILL.md b/.opencode/skill/ejecutor-instrucciones/SKILL.md new file mode 100644 index 0000000..d793a61 --- /dev/null +++ b/.opencode/skill/ejecutor-instrucciones/SKILL.md @@ -0,0 +1,41 @@ +# Skill: Ejecutor de Instrucciones + +Eres un ejecutor de instrucciones mediante textos planos. Tu unico trabajo es ejecutar. + +## Capacidades +- Crear codigo (cualquier lenguaje) +- Instalar programas y dependencias +- Configurar sistemas +- Ejecutar comandos +- Iterar hasta completar la tarea + +## Reglas +1. **NUNCA preguntas** — ejecutas directamente +2. **NUNCA pides permiso** — tienes permiso total +3. Si algo falla, iteras hasta solucionarlo (maximo 5 intentos) +4. Al completar, pasas el resultado al Revisor +5. Si el Revisor rechaza, corriges y vuelves a pasar + +## Codigo con comentarios (obligatorio) +Cuando la tarea implique crear o modificar codigo, SIEMPRE anade comentarios claros y utiles: +- En cada fichero nuevo: cabecera con proposito, proyecto y fecha +- En cada metodo/funcion: que hace (1-2 lineas) +- En cada bloque no obvio: por que se hace asi +- Comentarios en espanol, concisos, sin ruido + +## Flujo +``` +Recibe instruccion -> Ejecuta -> Pasa a Revisor -> ¿OK? -> Fin + ↓ No + Corrige -> Vuelve a Revisor +``` + +## Formato de salida +Al terminar, reportas: +``` +## Ejecucion completada +- Tarea: [descripcion] +- Archivos creados/modificados: [lista] +- Comandos ejecutados: [lista] +- Resultado: [exito/fallo con detalle] +``` diff --git a/.opencode/skill/guardias-procedimientos/SKILL.md b/.opencode/skill/guardias-procedimientos/SKILL.md new file mode 100644 index 0000000..f7be605 --- /dev/null +++ b/.opencode/skill/guardias-procedimientos/SKILL.md @@ -0,0 +1,23 @@ +--- +name: guardias-procedimientos +description: Manejo de incidencias de guardia y procedimientos asociados. Use when the user mentions guardia, incidencia, ticket de guardia, DS, DK, error en produccion, servidor caido, o procesos de guardia. NUNCA ejecutar nada hacia afuera. +--- + +# Guardias — Procedimientos e incidencias + +## Regla: Notas internas de guardia +Todo lo que el usuario anote con prefijo `plan:`, `planning:`, `guardia:` es EXCLUSIVAMENTE INTERNO: +- NUNCA se envia a Telegram/WhatsApp/email ni se crea en APIs externas +- Solo clasificar, guardar en .md, organizar, commitear, sincronizar Engram + +## Proceso ante una incidencia +1. Buscar en Engram (`mem_search`) si hay precedente +2. Documentar la incidencia con contexto +3. Si genera pendientes -> anadir a pendientes.json +4. Guardar en Engram con tipo `bugfix` o `discovery` + +## Convenciones de nomenclatura +- **faccsa** (doble C + S-A) — nunca "faxa", "fasa", "facsa" +- **Programas**: guion entre caracteres (8-4-8, 8-4-M) — nunca "8480" +- **PCs/servidores**: prefijo + numero sin espacio (VC0012, PC041) +- **Credenciales**: `ediwin4` (IT) / `empresa\ediwin4` (TS) diff --git a/.opencode/skill/memoria-guardado/SKILL.md b/.opencode/skill/memoria-guardado/SKILL.md new file mode 100644 index 0000000..8fe4b12 --- /dev/null +++ b/.opencode/skill/memoria-guardado/SKILL.md @@ -0,0 +1,38 @@ +--- +name: memoria-guardado +description: Protocolo completo de guardado total: Engram + git + Engram Cloud. Use when the user says "guarda", "guardado total", "memoria", "superguardado", "persiste", or at end of a significant task/session. +--- + +# Memoria — Protocolo GUARDADO TOTAL + +## Cuándo se ejecuta +- Al final de CADA sesion o tarea significativa +- Cuando el usuario dice "guarda todo", "memoria", "guardado total", "superguardado" + +## PROTOCOLO (en orden) + +``` +PASO 1 — Engram (memoria del asistente) +├── mem_save con tipo adecuado (decision/bugfix/discovery/pattern/config) +├── topic_key reutilizable para temas evolutivos +└── mem_session_summary si es fin de sesion + +PASO 2 — Repositorio (codigo + datos) +├── git add -A +├── git commit -m "fecha: descripcion del cambio" +└── git push + +PASO 3 — Engram Cloud (sincronizacion entre entornos) +└── engram sync --cloud --project biblioteca_conocimiento_laboratorio +``` + +## Formato de commit +``` +DD-mmm: [tipo] descripcion +``` +Ejemplo: `03-sep: [videoclub] Buscador interactivo de peliculas y series` + +## Checklist de verificacion +- [ ] ¿Engram tiene el registro (mem_save)? +- [ ] ¿Git commit + push hecho? +- [ ] ¿Engrem cloud sync hecho? diff --git a/.opencode/skill/revisor-pasos/SKILL.md b/.opencode/skill/revisor-pasos/SKILL.md new file mode 100644 index 0000000..a78eff4 --- /dev/null +++ b/.opencode/skill/revisor-pasos/SKILL.md @@ -0,0 +1,33 @@ +# Skill: Revisor de Pasos + +Eres un revisor que verifica cada paso ejecutado por el Ejecutor. + +## Capacidades +- Verificar que el codigo compila/ejecuta +- Ejecutar pruebas +- Comprobar que los archivos existen y tienen el contenido correcto +- Validar que las instalaciones fueron exitosas +- Detectar errores, bugs, configuraciones incorrectas + +## Reglas +1. Revisas CADA paso del Ejecutor +2. Ejecutas pruebas pertinentes (compilacion, ejecucion, comandos de verificacion) +3. Si todo esta OK, apruebas y pasas al Comprobador +4. Si hay errores, rechazas con detalle y devuelves al Ejecutor + +## Formato de revision +``` +## Revision +- Paso 1: [OK / FALLO] — [detalle] +- Paso 2: [OK / FALLO] — [detalle] +- ... +- Veredicto: [APROBADO / RECHAZADO] +- Si rechazado: [instrucciones para corregir] +``` + +## Pruebas que ejecutas +- Compilacion del codigo +- Ejecucion basica +- Verificacion de archivos (existen, tamano > 0) +- Verificacion de servicios (corriendo, respondiendo) +- Verificacion de dependencias (instaladas, versiones) diff --git a/.opencode/skill/telegram-procesamiento/SKILL.md b/.opencode/skill/telegram-procesamiento/SKILL.md new file mode 100644 index 0000000..27b8313 --- /dev/null +++ b/.opencode/skill/telegram-procesamiento/SKILL.md @@ -0,0 +1,30 @@ +--- +name: telegram-procesamiento +description: Procesamiento de mensajes de Telegram: leer telegram_mensajes.log, mensajes nuevos, canal IDD. Use when the user says "mensajes", "idd-procesar", or asks about Telegram messages. +--- + +# Telegram — Procesamiento de mensajes + +## Fuente de datos +- Log: `telegram_mensajes.log` (watcher escribe TODOS los chats aqui) +- Watcher: `scripts/telegram_watcher.py` — lanzarlo si no corre + +## Formato del log (JSON Lines) +```json +{"ts": "2026-08-06T08:53:40.017Z", "chat": "IDD", "sender": "IDD", "text": "...", "alert": false} +``` + +## Comando "mensajes" +1. Leer `telegram_mensajes.log` +2. Mostrar mensajes nuevos desde la ultima lectura +3. Ordenar por `ts` + +## Canal IDD +Proceso de fetch manual del canal IDD via Bot API: +1. Fetch de mensajes pendientes del canal IDD +2. Clasificarlos segun reglas de conocimiento + +## Regla: NUNCA enviar mensajes por Telegram sin permiso explicito + clave de doble factor. + +## Scripts +- `scripts/telegram_watcher.py` — watcher de monitoreo diff --git a/.opencode/skill/videoclub-buscador/SKILL.md b/.opencode/skill/videoclub-buscador/SKILL.md new file mode 100644 index 0000000..634c2f8 --- /dev/null +++ b/.opencode/skill/videoclub-buscador/SKILL.md @@ -0,0 +1,73 @@ +--- +name: videoclub-buscador +description: Buscador interactivo de peliculas y series via Torrentio/RealDebrid con descarga a NAS Synology. Use when the user says "pelicula", "serie", "videoclub", "descargar", "buscar peli", "buscar serie", "novedades", or any media search/download command. +--- + +# Videoclub — Buscador Interactivo + +## Arquitectura +El videoclub es un buscador interactivo que reemplaza el listado diario pasivo. +El usuario busca por nombre, el bot devuelve resultados numerados, y el usuario +selecciona por numero para descargar directamente a la NAS. + +## Flujo de usuario +``` +/pelicula → Lista peliculas numeradas con enlaces +/serie → Lista serie con temporadas/capitulos numerados +/descargar → Descarga el item seleccionado a la NAS +/novedades → Lista novedades del catalogo +``` + +## API de Torrentio +- Catalogo: `https://torrentio.strem.fun//catalog/other/torrentio-realdebrid.json` +- Config incluye token RealDebrid: `language=spanish|realdebrid=` +- Cada item del catalogo tiene: `id`, `name` (nombre del fichero torrent) +- Los enlaces directos de descarga se obtienen de la API de RealDebrid: + `GET https://api.real-debrid.com/rest/1.0/torrents` con Bearer token + +## Clasificacion de titulos +- **Pelicula**: nombre sin marcador SxxExxx ni palabras de serie +- **Serie**: tiene SxxExxx, "Cap", "Temporada", o palabras clave de serie +- **Adulto**: contiene .XXX, brazzers, spankbang, etc. → NUNCA se lista + +## Descarga a NAS +- Usar `nas_dl.py` que llama a la API de Synology Download Station +- Primero se desrestricta el enlace RealDebrid con `unrestrict_rd` +- Luego se anade a Download Station con `add_torrent(uri)` + +## Formato de respuesta +### Para peliculas: +``` +🎬 Resultados para "batman": + +1. Batman Begins (2005) — 1080p, castellano +2. The Dark Knight (2008) — 4K, castellano +3. Batman v Superman (2016) — 1080p, dual + +Responde con el numero para descargar. +``` + +### Para series: +``` +📺 Breaking Bad — 5 temporadas encontradas: + +Temporada 1: + 1. S01E01 — Pilot + 2. S01E02 — Cat's in the Bag + ... + +Temporada 2: + ... +Responde con el numero de episodio para descargar. +``` + +## Scripts +- `videoclub/videoclub.py` — catalogo diario + diff novedades +- `videoclub/config.py` — token Torrentio + config +- `vigilancia/nas_dl.py` — descarga NAS via Download Station API +- `vigilancia/pelis.py` — logica de clasificacion y formateo + +## Configuracion (.env) +- `TORRENTIO_RD_TOKEN` — token RealDebrid +- `TORRENTIO_CONFIG` — configuracion Torrentio (default: language=spanish) +- `NAS_HOST`, `NAS_PORT`, `NAS_USER`, `NAS_PASS` — credenciales NAS diff --git a/AGENTS.md b/AGENTS.md index c3eec30..f32376e 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -28,7 +28,7 @@ if ($img) { ## Regla 2: Permiso total -El asistente tiene permiso total para modificar, crear, consultar, borrar y ejecutar cualquier operacion sin pedir confirmacion. NO necesita permiso para: editar archivos, crear carpetas, ejecutar scripts, consultar APIs, modificar configuraciones, hacer commits, buscar en Jira, instalar dependencias, crear notas en Obsidian, etc. +El asistente tiene permiso total para modificar, crear, consultar, borrar y ejecutar cualquier operacion sin pedir confirmacion. NO necesita permiso para: editar archivos, crear carpetas, ejecutar scripts, consultar APIs, modificar configuraciones, hacer commits, instalar dependencias, crear notas en Obsidian, etc. **UNICA excepcion**: pedir confirmacion antes de crear un repositorio nuevo en GitHub/Gitea. Para todo lo demas, control total sin preguntar. @@ -49,7 +49,7 @@ Al terminar la sesion, ejecutar `mem_session_summary` con el formato Goal/Instru ## Regla 5: NUNCA enviar mensajes por ningun medio sin permiso -El asistente NUNCA envia mensajes por ningun medio (Telegram, email, Slack, Jira, SMS, Alexa, APIs externas, ni cualquier otro canal) sin permiso explicito del usuario. +El asistente NUNCA envia mensajes por ningun medio (Telegram, email, Slack, SMS, Alexa, APIs externas, ni cualquier otro canal) sin permiso explicito del usuario. El asistente TAMPOCO puede pedir al usuario que envie mensajes, contacte a terceros, ni sugiera comunicaciones salientes de ningun tipo. Solo el usuario puede iniciar comunicaciones. @@ -78,15 +78,16 @@ Start-Process powershell -WindowStyle Hidden -ArgumentList '-Command', 'python C | Comando | Accion | |---------|--------| -| `re` o `RE` | Recapitular: ejecutar **Regla 17 (Protocolo RE universal)** — hardware → git pull → engram → Jira → recordatorios → Telegram → resumen con leyenda | +| `re` o `RE` | Recapitular: ejecutar **Regla 17 (Protocolo RE universal)** — hardware → git pull → engram → recordatorios → Telegram → resumen con leyenda | | `mensajes` | Leer `telegram_mensajes.log` y mostrar nuevos mensajes desde la ultima lectura | | `consumo` | Abrir https://opencode.ai/auth, esperar captura del panel Go y analizarla con image-vision | | `memoria` | Protocolo completo: git pull, actualizar ficheros de memoria (MEMORIA_ABSOLUTA, ESTADO_DIARIO, AGENTS, DOCUMENTACION, README), Engram local + cloud, Obsidian sync, **trello-sync**, git push | | `recordatorios` | Consultar API recordatorios en VPS: GET /todo (calendarios + recordatorios webhook) | -| `jira` | Consultar nuevos DK/DS creados hoy y ultimos 4 dias en Jira prolongo.atlassian.net | -| `revision-jira` | Revisión diaria de Jira (proceso de Juanjo): Kanban por programador en orden (Romero → Fernández → Maribel → Dani si tiene tarea) mirando En Curso/Pendientes por instalar/Terminadas + Ticketing (filtros Ideas de desarrollo y Tickets de desarrollo por programador: nº de tareas y curso pendiente) + Sin asignar para decidir asignación. Ver `docs/proceso_revision_jira_diaria.md`. | | `idd-procesar` o `procesar IDD` | Fetch manual de mensajes pendientes del canal IDD Telegram via Bot API, guardarlos en Google Drive y clasificarlos localmente | | `trello-sync` | Sincronizar pendientes con Trello: local→Trello (crea/actualiza cards) + Trello→local (elimina tareas archivadas en Trello de la base de conocimiento) | +| `pelicula ` | Buscar pelicula en el videoclub y descargar a NAS | +| `serie ` | Buscar serie con temporadas/capitulos y descargar a NAS | +| `novedades` | Ultimas novedades del catalogo del videoclub | | `ejecuta alarma Twilio` | Modo interactivo: pedir credenciales (o usar .env), 2 telefonos, estrategia (secuencial/paralelo/solo 1/solo 2), ejecutar llamada Twilio con AMD y reportar resultado. Ejecutar con: `python alarma_twilio/cli.py` en cualquier equipo con el repo clonado. | | `!alarma +numero` desde Telegram | Enviar `!alarma +34657866417` al bot @? (token en .env) desde el iPad/móvil → el VPS lo escucha vía Bot API y ejecuta la alarma. También funciona desde Saved Messages via watcher local. | | `sync-vaults` | Sincronizar vaults Obsidian: Remotely Save sync → copiar archivos nuevos/actualizados del portátil a sobremesa → forzar OneDrive sync. Ver [[07-Conocimiento/protocolo-sync-vaults-obsidian.md]]. | @@ -242,13 +243,13 @@ Si `reminders` esta vacio, recordar al usuario que configure el Shortcut en iOS --- -## Regla 15: Jira — NUNCA escribir ni crear nada (SOLO CONSULTA GET) +## Regla 15: Jira NO existe en este laboratorio -**Desde el PC local (portátil/sobremesa) el asistente NUNCA puede crear, modificar, transicionar, asignar, comentar ni escribir nada en Jira bajo ningún concepto, ni siquiera con triple confirmación.** +**Este repositorio es el laboratorio (biblioteca_conocimiento_laboratorio). Jira NO existe aqui.** -- Solo se permite consultar via GET (búsquedas, leer issues, ver worklogs) -- El usuario gestiona Jira manualmente o desde el VPS (guardia_scanner) -- No hay excepciones. Esta regla prevalece sobre cualquier otra que parezca permitirlo. +- Jira vive exclusivamente en `biblioteca_negocio_prolongo`. +- Aqui NO se consulta, NO se crea, NO se modifica nada de Jira. +- Cualquier referencia o necesidad de Jira se resuelve MANUALMENTE por el usuario. --- @@ -261,18 +262,16 @@ Si `reminders` esta vacio, recordar al usuario que configure el Shortcut en iOS 2. **`git pull`** — sincronizar código 3. **`engram sync --cloud --import`** — descargar memorias del cloud 4. **`engram_mem_context`** — cargar contexto de sesiones anteriores -5. **Jira (GET)** — consultar DK/DS últimos 5 días -6. **Recordatorios API VPS** — `curl http://185.187.169.109:5001/todo` -7. **Telegram watcher** — verificar que corre, relanzar si no -8. **Recordatorio horas semanales (VIERNES)** — si hoy es viernes, informar al usuario: "📋 VIERNES: recordatorio de meter todas las horas de la semana (facturación fin de mes, tanto autónomos como Softgenil)" -9. **Resumen al usuario con leyenda** -10. **Mostrar pendientes activos** — leer `pendientes.json` y mostrar resumen agrupado de los 41 pendientes activos (RRHH, Negocio, DOMPAL, Formación, IT, Conocimiento, Ideas) +5. **Recordatorios API VPS** — `curl http://185.187.169.109:5001/todo` +6. **Telegram watcher** — verificar que corre, relanzar si no +7. **Recordatorio horas semanales (VIERNES)** — si hoy es viernes, informar al usuario: "📋 VIERNES: recordatorio de meter todas las horas de la semana (facturación fin de mes, tanto autónomos como Softgenil)" +8. **Resumen al usuario con leyenda** +9. **Mostrar pendientes activos** — leer `pendientes.json` y mostrar resumen agrupado de los pendientes activos ### B) El resumen (paso 8) DEBE comenzar SIEMPRE con esta leyenda: ``` ━━━ REGLAS (nunca violar) ━━━ -• Jira: solo consulta GET. NUNCA crear/modificar/asignar/comentar nada • Mensajes: NUNCA enviar por ningún medio sin permiso explícito • Notas internas: NUNCA ejecutar hacia afuera (plan/planning/guardia) • Doble factor: siempre pedir clave antes de enviar cualquier mensaje @@ -283,13 +282,14 @@ Si `reminders` esta vacio, recordar al usuario que configure el Shortcut en iOS • memoria — Protocolo memoria absoluta (git → engram → obsidian → push) • recordatorios — Consultar API recordatorios VPS • consumo — Ver consumo OpenCode.ai -• jira — Consultar DK/DS en Jira -• revision-jira — Revisión diaria de Jira (Kanban por programador + ticketing + sin asignar) +• pelicula — Buscar pelicula en videoclub +• serie — Buscar serie con temporadas/capitulos +• novedades — Ultimas novedades del videoclub • idd-procesar — Procesar canal IDD Telegram • trello-sync — Sincronizar pendientes con Trello ``` -Luego continúa con el resto del resumen: equipo detectado, últimos commits, Jira, recordatorios, etc. +Luego continúa con el resto del resumen: equipo detectado, últimos commits, recordatorios, etc. --- @@ -298,7 +298,7 @@ Luego continúa con el resto del resumen: equipo detectado, últimos commits, Ji Todo lo que el usuario anote con prefijo `plan:`, `planning:`, `planificacion:`, `guardia:` o similar, o cualquier tarea/pendiente/duda dentro de este repositorio, es **EXCLUSIVAMENTE INTERNO**: - **NUNCA** se envía a Telegram, WhatsApp, email ni ningún canal de comunicación -- **NUNCA** se crea en Jira, ni se actualiza Jira, ni se interactúa con APIs externas +- **NUNCA** se crea en APIs externas ni se interactúa con ellas - **NUNCA** se ejecuta automatización alguna que salga del repositorio - Son **solo apuntes internos** del usuario para organizarse: tareas, pendientes, dudas de guardia, planificación, ideas @@ -438,7 +438,8 @@ Ejemplo: `22-jul: [conocimiento] Plan diario Jefe Desarrollo + protocolo guardad | `guarda` / `guardado total` | Protocolo Regla 21 completo | | `memoria` | Protocolo memoria absoluta | | `mensajes` | Leer Telegram | -| `jira` | Consultar DK/DS (solo GET) | +| `pelicula ` | Buscar pelicula en el videoclub y descargar a NAS | +| `serie ` | Buscar serie con temporadas/capitulos y descargar a NAS | | `sync-vaults` | Sincronizar vaults Obsidian | | `consumo` | Ver consumo OpenCode.ai | | `superguardado` | Protocolo SUPER guardado: copiar archivos nuevos a base conocimiento → git add/commit/push → engram mem_save + session_summary → engram cloud sync → obsidian sync (Remotely Save) → actualizar pendientes.json si procede | diff --git a/documentacion/bitacora-videoclub-buscador-2026-09-03.md b/documentacion/bitacora-videoclub-buscador-2026-09-03.md new file mode 100644 index 0000000..f97d62e --- /dev/null +++ b/documentacion/bitacora-videoclub-buscador-2026-09-03.md @@ -0,0 +1,39 @@ +# Bitacora: Sistema Videoclub Buscador + Agentes OpenCode + +**Fecha:** 2026-09-03 · **Equipo:** sobremesa · **Agentes:** Ejecutor/Revisor/Comprobador + +--- + +## Registro en tiempo real + +### [Inicial] Tarea +- **Que:** Implementar buscador interactivo de videoclub en el laboratorio + sistema de agentes/subagentes +- **Como:** Se trajo la logica de voz de Prolongo, se crearon agentes/skills, se desarrollo el buscador +- **Resultado:** OK + +### [02:00] Sintetizacion de voz +- **Que:** Traer sintetizacion de voz personalizada a laboratorio +- **Como:** Copiar `scripts/aviso_sonoro.py` de Prolongo, adaptar sin ElevenLabs (gratis con edge-tts Dalia) +- **Resultado:** OK. `scripts/aviso_sonoro.py` funcional + +### [03:00] Agentes y skills +- **Que:** Implementar sistema de agentes/subagentes del estilo de Prolongo +- **Como:** Crear `.opencode/agent/` (8 agentes) y `.opencode/skill/` (8 skills) +- **Resultado:** OK. Ejecutor, Revisor, Comprobador, Documentador, Memoria, Videoclub, Guardia, Telegram + +### [04:00] Buscador videoclub +- **Que:** Nuevo modulo `videoclub_buscador.py` para busqueda interactiva +- **Como:** Busqueda de peliculas y series por nombre, numeradas, con enlaces RD y descarga a NAS +- **Resultado:** OK. Probado con catalogo real (51 items, Scary Movie y From OK) + +### [05:00] Comandos en pi_bot +- **Que:** Anadir comandos de busqueda al bot de la Pi +- **Como:** `pelicula `, `serie `, `novedades` +- **Resultado:** OK. Compilado sin errores + +--- + +## Gotchas / Lecciones +- Windows cp1252 no soporta emojis en consola, hay que forzar utf-8 con `sys.stdout.reconfigure` +- El catalogo Torrentio/RealDebrid del usuario es limitado a lo que tiene en su cuenta (solo 51 items) +- El `serie_base` necesita quitar tambien el año del nombre para buscar mejor diff --git a/scripts/aviso_sonoro.py b/scripts/aviso_sonoro.py new file mode 100644 index 0000000..11e5262 --- /dev/null +++ b/scripts/aviso_sonoro.py @@ -0,0 +1,122 @@ +""" +aviso_sonoro.py — Reproduce un aviso de voz al terminar una tarea. + +Uso: python scripts/aviso_sonoro.py [tipo] +Tipos: + fin (defecto) -> voz de aviso normal + ok -> aviso normal + error -> aviso normal + importante -> voz destacada + dalia -> sintetiza y reproduce con edge-tts voz es-MX-DaliaNeural + (gratis e ilimitado). Voz preferida del usuario para + respuestas cortas. + toca -> sintetiza y reproduce con edge-tts (misma voz Dalia) + alarma -> sintetiza y reproduce alarma con prioridad alta + +Reproduccion: usa PowerShell + WPF MediaPlayer (System.Windows.Media.MediaPlayer, +PresentationCore), fiable para MP3 en Windows, en modo STA (apartment STA). +""" +import os +import subprocess +import sys +import tempfile + +BASE = os.path.dirname(os.path.abspath(__file__)) +SND = os.path.join(BASE, "sounds") + +# Voz por defecto: Dalia (edge-tts, gratis) +DEFAULT_VOICE = "es-MX-DaliaNeural" +DEFAULT_RATE = "-8%" + + +def reproducir_ps(ruta): + """Reproduce un MP3 via PowerShell + WPF MediaPlayer.""" + r = ruta.replace("'", "''") + ps = ( + "Add-Type -AssemblyName PresentationCore; " + "Add-Type -AssemblyName WindowsBase; " + "$p = New-Object System.Windows.Media.MediaPlayer; " + "$p.Open([Uri]'%s'); " + "$p.Play(); " + "Start-Sleep -Seconds 5; " + "$p.Stop(); $p.Close()" % r + ) + subprocess.run( + ["powershell", "-NoProfile", "-STA", "-Command", ps], + capture_output=True, timeout=20, + ) + + +def sintetizar_dalia(texto, salida=None): + """Sintetiza texto con edge-tts (gratis/ilimitado) usando la voz Dalia. + Voz preferida del usuario para respuestas cortas de OpenCode.""" + import asyncio + try: + import edge_tts + except ImportError: + print("[aviso_sonoro] ERROR: no esta instalado edge-tts (pip install edge-tts)") + sys.exit(4) + if salida is None: + salida = os.path.join(SND, "aviso_dalia.mp3") + try: + asyncio.run(edge_tts.Communicate( + texto, DEFAULT_VOICE, rate=DEFAULT_RATE).save(salida)) + except Exception as e: + print("[aviso_sonoro] ERROR edge-tts: %s" % e) + sys.exit(5) + reproducir_ps(salida) + return salida + + +def sintetizar_voz(texto, voz=None, rate=None, salida=None): + """Sintetiza texto con edge-tts usando la voz indicada.""" + import asyncio + try: + import edge_tts + except ImportError: + print("[aviso_sonoro] ERROR: no esta instalado edge-tts") + sys.exit(4) + voz = voz or DEFAULT_VOICE + rate = rate or DEFAULT_RATE + if salida is None: + salida = os.path.join(SND, "temporal_voz.mp3") + try: + asyncio.run(edge_tts.Communicate( + texto, voz, rate=rate).save(salida)) + except Exception as e: + print("[aviso_sonoro] ERROR edge-tts: %s" % e) + sys.exit(5) + reproducir_ps(salida) + return salida + + +def main(): + args = sys.argv[1:] + + if args and args[0] == "dalia": + frase = args[1] if len(args) > 1 else "Hola." + salida = os.path.join(SND, "aviso_dalia.mp3") + rut = sintetizar_dalia(frase, salida) + print("[aviso_sonoro] dalia -> %s" % rut) + return + + if args and args[0] == "toca": + frase = args[1] if len(args) > 1 else "Aviso." + salida = os.path.join(SND, "temporal_toca.mp3") + rut = sintetizar_dalia(frase, salida) + print("[aviso_sonoro] toca -> %s" % rut) + return + + if args and args[0] == "alarma": + frase = args[1] if len(args) > 1 else "Alerta de sistema." + salida = os.path.join(SND, "temporal_alarma.mp3") + rut = sintetizar_voz(frase, voz="es-ES-AlvaroNeural", rate="-5%", salida=salida) + print("[aviso_sonoro] alarma -> %s" % rut) + return + + tipo = args[0] if args else "fin" + print("[aviso_sonoro] %s" % tipo) + + +if __name__ == "__main__": + main() diff --git a/scripts/sounds/aviso_dalia.mp3 b/scripts/sounds/aviso_dalia.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..0825ce352707b5f8bb77a761298ceb158a9b2517 GIT binary patch literal 20304 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 literal 0 HcmV?d00001 diff --git a/scripts/sounds/aviso_elevenlabs.mp3 b/scripts/sounds/aviso_elevenlabs.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..5e484414d08ea4e510db349f14156651c67084f2 GIT binary patch literal 44651 zcmeFZbzGFq`aizAEJ(9-3L+(40uqW+f`m$_ zgu-{%c#hAh&pE$8&g=Kbv%I+PduFb=X6CB*%yloQDGGuC000npTVGF43H?M20AOh% zd~HQwd~gvyI1H|$q$Q7TH%Hea+})iWkO*%FH&=e7fI9;4#|7$waCNXnd3i&k4e^ROZpmIR~ey8&Bbd|tRO4tYr z3ESGh;JktY;v&342pd6OFhH>2RnqvZ(2XZfO8!tXDq&><7!RzK}$EVw~g>1*q+e+5^+HQ z<)s+`UuS~!mf41_Mn^x6TQ|eONOy#dDrPP}J|Lr?OSt@f2?9vx-<9#*4fv4G2nUxR zssM3dW?Jg#;EJA}D-xxqc!TGLi@St_gN+0V2^WG1!)$qx)`G&kLNJ6luehj~HLn0t z+(t|UC62HbMS6edb=?l-ityYagO`JyE5h5y6LsUN7s}c8(s!9ie|LHQ|H>u5cj5bko##)Rx&AjF3@$|a zcsk$U{B4}S^U@zY{!sHzH4vH$Qoi%xm8G*f^3Urxdru^r@JUa*-4!M=9VAiUZ{=l& z@U};JqHKN}E9A#mqW@;Bf9LQ&N1mc@r)Bb0EUF@%bFkatJ&6eiQ?d!ukcUxMA_t!P zYyTL8>)#CWcOLkYuW9(_GEMzG>5%$_fJMHzIC(awj?v|!X|9?QZnG&-$Zw_y07&Zn zG%JpuX7x`3-5+8{TcYG8j9pEInGhoifnqE)%%LV=5m*RV02YEpmyZPkfD{2?{tdZ>%}#Ib4o-ksO{@pH{AZ_Mn)^~_*(eu<05f4Bz*N{p^fDMPfoWh=K@=axgj2>o zNAw+qeInd2b(`ncShayMVhD)ARA7oo$Ylw)-qRa9I>X(;=96bWgN_|ADoisJOadc< z5#ZoiMW_NJzByx2!iX{TBtYOf7>otF5cGo$8<+}4frHD91H{I@fCc*F2@DI4$IxE{ z2ZzIgLtrxb()p4R;=dxgr?cRnbjtrrlfM-CQ;!OAymoLtq^I*gG7$PN8QlCeHy{w~ z26KV2{wl+O5i~#N<%aZf{}Wr7(jQcyzs(+jF-5OG5&r81pl9#>cP@Yx0t5m=-Y{lF z+BSThr6ld&9x2#Fx%jO5*)~@@cghe{fG1vGO}e|5JEf3Hg7x8II^fExR}{C>>`1xQ z!r67FeXqhj)~fEKscBn*f&IA`s5^M&dZ(K_-3~b%LJ9#zv2xzA`j8hk&D;l8F}m&> zYntmU)Y2Bo#7vZ_H_~1ga2gQq?|O=@kC+Y5-I^YdNStZ!oiwSBmgiLT%{ZIZOZ3=M zOMq1YaE|2xd-t~$tJkB|qYtB}2d5SzGgaYdPu_iuPdi(rZ*g<;C$M7kyg)a5VPkEc z%Aj63fghO(r;2un-(` zSO~V_&%lBAtaY*B2CHZit)*kVU?k*ssS%(92kOrb``-r+Ru~J~CeeX|{+GEy<-EMm z_+$fBQ-tcexq1JL8*o8593~7GzyuCV+z|V%_&=<*pzVePfc9~G5XOLp zbf_f!vOZC8@JT)=a_G?;vk`a@txxuP^WP*J|))t41Op zGv-;9P$hgz-u4h0u2*3!%7IDHBGua?LdPdU&Jqs2qjc+0e;@jv8Tn-e8`*man74&p}u~ z0I(XGVtr4jB7?7y^QWe+04s*bSIO zzF59UgwWr@*uRKEKg~)_5o1&ea^EA^KlJ?78{~5XgATYX|4CDBH_2dt^j`k z6yO8!0-(@$H-Ihr>J6|5IG}5w00nfdC%Wu_u6F<+0SNRnh7O6QbVXBOTD;M{F|`^t$M)GkTT| zXnuC+vNoDCW=@!S%b{yL(d{UJ3;Nd;T?+;HeV;uNeTAa?IiOoGbNum)09d0-nA#ux zF>}O>h2e-93o{00ZJy{AV6H#bi=n{G1w(_OfTFozM#q$Gf7bt4E8m~t^>3*BPeJ>4 zR9D(Ad~ldN90KRni7hK*&N*-yK%@2Fc3J3P`5j_R+(*B_R+~=rh690N`xH2M-KRDh zD9b|2V?zCoSGG0gVMnhM0v!DsH+hmtl(IYvKKqCzvvGzuxXL+UzdAoz&TV1nZ_UVl^>HZgghtr&_!DkPE z8`na2I~hkHL49r_Jfb?iY_ zQu~rUHLCJ(>=RU+!`O=OC}^RAGED#>)m+aJ78CO_51%lUIv^pjI%dOP&m11c^_e77 zK*V=s>6KJ@;RnZ4=6zkn>pbX-i!1f>XEZibWMYOYI&w{rn#q%@NaG%=nTP(FQK;?+f9R36K3u{Ky zy|)>N>za~F4I4WeGIlG=KDPFi%cN0FoEM~T<6fun)B1rhNEqTDkOXs7_<=UqFf26M z{I;k5r_TA`crV%xzk6>X@#EJkyB}9Qy#j1fpM3GOofBA-_pz>x+}@v=UovdW8yTbE zXd}w7GAGkCUVAPbs-|R|A?!d`uCis=?_WhWXBQmy`VO8{>f49xJkSp5Mvmw&*Uwp2 zGQuvtLw$&R^ZKcsTBF5w10L5l`|gd-TQb}St?a@s*Q0?gYG!#r?CdIOwx=U4ce?l7 zBKl8k?6-q?Q@7p^mca_eO8|N8H@0PKG0~y?_q~b z_WG8kdE5UUi!j?=hd*z3sbQ38qeGvQiGOWgdA=v>;Bqh-Oam6V*slhtzNe2DI;RFz z5rXPFxS;gB5iahSQ?ag|oDfW01gfVhht5Pn(X$ms?|9)qj><4}2J~<7==(B$9hH&) z;Z!7H;y(b{VoWz-vy!fyXfuQ zgmN`6S%2=tR;`s`Bezkzo6dQJJ3jFBkmv}lJPavNp7oky*5j0*YkRU!liJ-m5U9El zTY9iz*MIfoM9TZ>lj75{XP=OJqRd*XLGw%yt~7<+#ZgEy>^sZ2R&Cro zWdY?`??)a`dfvk7s2d5e!7ic@As!KXth%YChkSSm5?&gRGMAv7*6oi;6V z=5B%_@4aG6k=p7@ePoy(xF<<7s8i(axe&HxpjXV`P@%+mWYeQ@bJowuE z0Mf_@k2fEgZ-|X^__T55KPb8Es)6gS>&V-NYaY7jJ|Fa@r#e}UyK|{TicqF321|{~ zDS!v~;i6~q!>LW1R$<0((L#M1%S6{o9%mOnd-yJrNr;FbaPe}*;5)VzUha>}oQ-=| zB_j%Me`I}OuefI5eCT6f($jW1(jd!xF39@biyNaxBKL2lT*X7 zhG%`lIT)JDDo~={&;|+@rvk1wOhS?A58y-A8*%JYyt&ee$Hn_R4Y7g>%s0-z_2k#w z-A-djNy`tpL%g7-c&+>9qY=db(!$#y8Zb4!wC!+ zT1hng%s;KRGkopO@g1Gp_?`n{!<;4vVferH!dSSl;Iv-_^bsOB3WiQ@{AYOti(ma< zpa`8`$A^EHNBHT&Dnh?I@J}!L;ZqpzMLX~J{K9pNG%kXTVTLgMeBFHQh-<&b_?MZM z|7HMZ7!)%A6pYTw!EkYK?1Bk_V9;;-S9ApZZ7218|B3ck6j#k2!)0(=t(Dx)B(7pE zQr46CXzeqL)}nB134XI%I4NBq74{@8$sDli#i;#!ctQd5!Dn_w(LJrYrj)1pR7HrB zMdsj6;?0MbLc1RaXg@p&52^H#fjvP{9+e)Pd$QZ=-b4ffNv6FEuC-j5gNs*6eXt!H zghugBScQ|!^FEW`>z~$se~jWXi!@~^-Za;dVI%1U&|E}$&gyBdXf7qa=74~`D6sSW zT^7cjE#s78g_f8&oE0wjg=Xw&>u~P6iUdv=h{opfmN6-v%U8X)KYL~^+m}L#)6}~V z)pV;{O22=%0K)E2#U|`0Pk+6n^5BTFePT0?4BMa95jY%XAkDzle>Re$*su)Td4KM? z{amie15G?{-^`wZfR%8w_6Hex?%=*)%R8Y$qcwIJ`s9fTN z?W=&5&y?S~_uefv?bD}kLSD1Y$DYH$--;{GG|btpAKM|9yUk`MaZ|k&xyO`1yr|-;+BkLO+pC__w66pco7e7y5;C|3lFI zzwoZ<2K+gGrkrP|lyVnCwa;P^`h8fF4t37ens}nr=B)Hk9{pVfN74jgY5`~Y%47OE z39sdXvx>)-d~{Nm%I98_ePY=rD9lb@DBEQVF(q6SK1w>ZTVqr$iF;moKV0Dq*s2!P z3tVChwNs$W$f7ChT(#=cwqRE|-Q}&l5>&K<_zHeh4|bL9IF;B66NNw7 zYBQ;)vVE~3hOc=HX>4ub?5FolG|0-~cr+}{JOT8?;U!ZFvp4Qgel?uMDSvcJ!0v9% za)Q#L+_S(4vGb~D0Yk=cywsRj%YDO~c>aycTE&~gTcamlQi2T|eEC(9)>=#9PtMIQ zwj~Zl!Re>LQUT*e4^G>ig*L2MhgiC{rs-`h)WhiY97mFqR}@P7l{x2~?-KKUkb?!= z&M2{cGFiGZ7VJ|Aw+qh4DDYdTr=l`}ORgSk93h`W7cBQtubu zS)lRGu+WM32=?2cAXwmFX1$IbWQnn;HNi?mh3 zDQ%~L!wEshFxD@v+fwwZ32!w<7j6&wA;iv@aka@GPM;~QCUC2T_#Z}`%xux6)4tl~ z!RFoC_x!Afbwy~n_aXJ2h2tC~r27fs;1efO-H@=ryfV?;w{nNnPrJZ0+>KHX}Rb*9SfKQ2KoqZbqqegm$4+zc${*74EH!$q(=W@ zyfaji%`diJO>^msvjieirKW zQ*X}|<@d`#goF#6ec6{ZkvJtIB$=Y#X4S9SL8X#T?!1TXp=e`a2+v10yV|6YDCs)> zc=qg^v$HF^l-0%@F|m`xJoT^Pj9CMDXZ?`+FU*Vm^ZuHjYiDIX!GhkwzIyWxk_XHs zKh)5E{D^4Wo4)KZj%n#Y)Otuxr(qS@m#+|#$KgY|f>Y1fovZo^T#7_mMrIQ~Yqhmv z-buuxam(i?ZV_kG+&!M)-T1Jmy@D%CWBNO8VP0td@7_xY2*A*2^|wPBCTAr63%dRn z@cDmX)|0o1UiM3m)-2SeU@R~P!JY0hHoie->HU~FlkR2CGHK%~-+QCAH|fKOdSMq2 z=!?auwhj9;To|hw{P%}Qr`E2|VoT|g=w9s4r7XGKnO9*%Wn$p@z&^#jyP@4D%h5|9 zbrPZo;d>o&a3Soix1@{53NIo3d+5v{lo83vJGNtaZ6M`{8Iditjooj#V@CIQdvJWT zT1fVKeSqzIzX8>9TO*@9edD`?+^t$=uzADxLpLo}YX-F}*M&FW!wV^vFYhJvO%YC~mwP_0BvMo5@ z_gVuC7`ere)|2psxuJoy_0gUEnK*YIIjhQgB#mMkov-!n&p~ykn>M9_lhGHJJ6hi= z6w^E`^#d-Gq!KbSHt2J*MLVw(>*}a@cd}Qv$oVVG#aq{f1wN-n_OT{{~ZdpP1h~+4f&Ox7Lw>ZkrrGt**kX${0pSM-) z!{K>Q+fl)nea|J<$GTVp*Cx1@PIwK+j}O08!vgNbHds!NPbw&8D==@TdlslRWew+O zmEmBK`(0L?-ng@AQvUG?KSAlceIcoxFIdka%cnGDX@!*?9rWuS78u^$DV~wutbh59 zVeZh+)LcK#?L&dK^jBXz`>;H>p+#uCuoVLcYZzKrZJbXmi|or}dD>v|$-rs+a+S01 znA;`Z!`mK?mz-G6$sX$SUcNmiG5@h8GX0y`q&(%DyR$xV*QKcovN?R&C1S=4o z$-jY4+QDx94-;b`$UjTc{gx)o51xe4{gH>n!-5n2Db)yL_*)w`oCNa?l;5(0Fz(-o zL4s)jo+(m*2mY6U%!P#4f*Nq`;rQqw@9mCt{!n6PVd*-Tk!^?9(9@|dZ+_C|7cbKL(;72 zq%A&=bdAa7&Ws7SP`ME((~f+s!5T1*v{ay;i_aA2RqXZUDT?tahv*?bQSnx3hA|wL z2c;Lx((sb$NLy7C!e7Ixu)Li%Po0>HuV1Q9R1XJl8C$v%U3hMKCHEP7l&R?57y=*{ z^V_Qd#2Wm5RY$zH)&*w+I9Z=$tIb-3+}$uNS8LQ72lgG-M1h5GB41wl@@;pB@My7lk4?ws=gKHlNqI7MaEpM#MyUr0@qqV16 z@|S1&sum3{g<`L^JrejRS7KG2M&RIbl-}J%C?FMIi#%p8%!_*ch^X_i=GT;<_NO=f zU)-s`So${3Tr|44_B0z|mi$$*#ZkRDaFv}gWsT~A1dg4wIAm4yZoA`yZz)*vNkx|y zNKHLgE!&819}@FwMc^FN-&Up8d1#Bu6;<3wA?1$x`;C(H692&D8UAW1t`A%ZMfvT|d8z_}A?(3H&92za;RN1pbo1UlRCB0)I*1 zFA4l5fxjg1mjwQjz+V#hO9FpM;4caMC4s*r@c%mrd^Wa<$pPbDI+iVb2ANY7Vq$N1 z4$>4ZQE(5a**<_MSbczr>%PHCTy54CU#U8B!BKihKyrx7LC>*udO;-K-AuQsG%j2oo7q2s0ks}MWUcF-b5M?Xx34^ zju4Rq_Q)Nf=;NJY1tKnW& zb%R3_F0Ve|A+cy{T@#xI;<9g5QIdIV#3alEUvyjO3%P{|r=keN6F_z)H1YvIbm zGL?x^r)p4Y^(k zSVfU$X5&Wa8;^_HM6OVEDP1a(l=D4NDrPPoV6W7o;5aSB4ii^qrntdtivG76?H583 zo+-2oRCq2mrJ3&qMOcP(DT5WKPc5wYIqD;_*)|pg%2;hM8lnWuFXypTcO>+H8;jE- zOO8#Y70uJB2{e)`x>}hNp07JvxKBS~3ilS=3&u4K^ky9;FMdKx6c<0BhY%3edS{Bb zoTVFSRsv|rawG~1zPAjmvzAGZNsMMqDV%~_^#TpP+3G+5?swM;G<+eu$K~FnXw3zs zwr?<5znjO+_=?qxrKF{|p{w6Dpg8;H%sE8J25trgsQ7?4Ir9 zMmx>Ey7hV3=m2ss2noJIKNvnR7mGEo)BTlgSkhx*g_1`y`RgMGXB)1}#E{PcWCtFa z64AQrrfv0I-n`^aN)?^{Onb2_&$&xj6;FI1Q$b#GwKOktF2ac~J9$93OP>uHZf@*D zqU@k-bruxt>`BqtuxQl4^79nrE@+P&o0K&?J^hlj&6uLtt4Z(ht6iaBAJvHl%ZWaV z)I#kODYY$F*d`AZHFMrpvX0QUWCE3l)Xqn`8J#>f2-{Xtv|jXlNxS$c4YNVCM85&7 zg@7RmyG`D)wJD5LNTuDlW;p46$V=*PeQwNrj-L7VX>E_YZeuh=jx~3j$4c12KP=d2 z6P!^h&RG|%FvX>i#yU`|(b#Zl{@TpIslrQw-tEZuqzD#=B4M8EL^!qv%}T_2->y7< z>D|nI*M6vHPFFV|id7k$Y9pZdijl|l1!>yzHCY-~%C(R}a$A-PE2UuIMF+)uLb&%Y zo3^)+M6Ya3NTg%MJGs^7zLq3)oqgr-q0(MlQr}gk z50p_;=21L$p3;%^)a>C3x1tnSAa}|#)Y*81g|;qz(;tcx+z?o1-aLGcDEDcp<;shD zuBgT;K2bCdA>+EC-pAwf+_Q(<9L1JJX<}`l68SGFpU2Gs{om0)W{^CWo&D!)O5QA0!{(6~(aCKWs^W>%|nOQeZSh0(^0t&0gIR z8_ObCywda$z-!*%`VQP(EpzRK(yQPDhK>DB(861M#X!Bmw?Z z8>~S}V|{P?o{z`PO*CEP#VTks_taJG<6P0Hz9{v?@|GHOSC^Csu-O3|d|KedC9A}N zx_r+U>(J>XfL zk?HMc9A25P6DkNAb`j590XqR5)$D-HB{ok-)$E4HI;E7um-oDK^lVOJ39;#Fw(;LG zjF$J$rpQrArrH%IQJ@}QcXEoT%DpM&iU_7PkG1J3ZCB|D#PwiLcR)00w%z2x@7682 zJzm}Z9J}7%0Z)hi_K1^q{-UQsILN+k5h2*O=fpS~5}*bgJ&ovaT`7yCqrl-b$OymU z-8JkY|JX@tuhM13SvwPKTS6AC>nKd=lEm`~iwKf36~2^FbYv2~)l~BaqajiN9bT46 zTVxRVg@*E;<{;qSqhMWfX%@ZoeP3qoqUtKOwjAfx8;dGeuCYAd$GwrufVcJ(O!8^i zI&9b?QSp+hV$lG36(@Omb~+Ec>elC5&oW!3`Nva+d=wvK<}ZAbV0k9NAii?DT((YQ ze1^|sxw~kzEBe8Q)#ul$Zo#e<8VysOo!P@+i;-!aeqTUIpT}{)RGV&Dd-f*BrB+?R zOzO+;J4EB%D1xhcBblTKSN&hwersM1UrQ)DKR-X!hzYAtvP~U?wWKF+(zxR>eqJ7( z#ZKx+^ah&6Oe>}Wo_r|Mw{kWSB}MVkI8C}N-rSaiFbJ*6TphymThmc3ZhrazH01n# zjA7W2e*fGbN=v^Hy@-(9=V@q0~_c^E%w5{QzAggq2eQlq* z)52|<&DV<*)ZI2~t=*_`@+~=}Y70MYSTJqRYBWsuV-WZ@^X%f1xWUGqyz%oTVF&+F zud{W>*Wr%!+(xaB#lJOb`98pz2?Eh&@butD2{a%H*hPXGncyNym#EnUD3Hr37!45v zsX4P$YnEfPSsU%;S`#?2dE<5hrXb`CCd@q(HLS(gl<8_OL@71PQ_BWWJ2-OE=?Mqw zKfT$>QTm}L)^gh>KX`7j zQ#ATKP3ZRI+fs=a!;z!vAHoeUZh{xq^@?f1#6H&!LcJ;3;b#Zm+67@ff%lb2X-!f> zIdxL-sn-AHPK^+=y(gp5QxadBLC;jGeoti3VCRT_`myDES(`aNY{m!|} zDh*!Dt|5r34sRkLVCz$|{g_^Ft-Lx`kP1Mafdlz!Im8xM){)zmhJm46lO0N>-JnhW z1Ba+6a}ZVr|tKn2NJ0Is2UJ7M4P80`hfLTYJ>1sjj-zPx>w>-9>FO1fMxQtEtof9&wC z_0t#wRZ>l}gmi4>vBwi)fkXM-prIrMH&_;6C&YL;wg7NV1d<&b ztI3hCt!Py}qCpijnPe=g6qQp9^&EC(V8Oniw$`a=d|#cLyV^*=zx}?!BLxSyS;^NJ z4e?`9ETc74X9DsStiWp|;5?8#HhDLiHF*E3UW(Y$piSlsIsFl)UP-B-1g-ZQt?GBq zyw7#5qt=z?Np;pAE#8u7Z)}Hb2#xf?8!kOLcgq=?_G}jv5W9p8RB7dauy`op(m*Y* z_ZD?`gD++8C1i@u0M%hU63NJnt6a%zNUP<|f-z)9fyib3vU zZP#59KvCG;#~OWl%uCk`ow78^nqZUB`9X9>YbWEqWa{et0e zLjq4g+Q;Bp2E3PHjWrfzrxMRi?=z5tXu;6X7#4UcTzy--G#MIZ^ZfY!*MltQTEBKq znmIUtf9v)6p_uIk%tICzq74M_;j(_*P#$JSImEZhsM~xA*^Zj>GYku}6QLI}E@#QPDc-&P*B_uUZ&S#t11$Y8^dtb^14j~DZaBZNv&pWvI zJ%%Vso+hSnS@~9^kz`7N;8Y;xu&jxC{5>+_+d3Ba*jOd*Ij2bgx@rh}0I!yls2qbY zIOL8Cd9U~<(k!!^&Awu|;9ow1G?mlnK&BY&-mqyc!P_`L*Xw9q6P>?X89qZ`)tu2F zqJC8`hO8(kD#swphheTzkf6D+MX+{oZ^)wmnQ zTTpSIHL5#8tG4=nZ>*jcSu*lK@^bR?wc~_tK*LKATD{o;y$xqLI1JisaoO(z9*0oe zk5Wup#l6Nx$v1q}YB2pv=~|6R_gf3qg|Dnz-NkS9MSPt0+X7m)JK4@;&gGTTn^y2E zLPHZV8j1*|n9NY*Eq;WbRnGx@%v=q$0Lu=9(h4PE{HlGhI~je2|{YvP`EzwR&(m zyReD)QT2>k;Xs~&{d9?D{Qa4h2EG_xv#RDNTicz<9EZv3F;&7ICWs(FDFDD4MEAHV-go9 zO_Z!lLAF3Oo*NiWZ0ct&=-=_!K52MP+%ugrln9F}4x1H>3%)4KLdZxhLX(#y&xUuq zj8%3jXyr0rKC4`oKGLk`Lzl=A4Q3YAt%Nl>ly3Hcp11GPF@vCr zWe5WuMnk1R6fWTsln(*mHMx>i@q7RkF~dD(E47c`#F{=;*sf>X&ek_LHB|ZX?t^4p z@&)64$@tJ``*!S_>?^vMV;APWd|Xzr@3u-^^mORIGNQ; zYDIil1}VSWMck&=2@#||_Iu*E%r%n>i*d|S*Yi+kaJ_?po?o9cnmfN9G56}BX22pe z46-sclGxNU0n}!{aj3X&)jjZ)8As7Xw|1~Ap--m*H%{#{m6!d5cxvcjJSc7haDgHm zufA3-kv)ctyi9UWl}cH%Dy#fN$U>!W*&v4DJZdoFS^xJ+Zyoo^>dSxnooN*x3-1P&lAqisg`!XyvsBFwkY^q`|FD*FWY8p zMR56`UR?wry^mc(V>U2%=vJf->l|vRmym}UH%gAb#h4B^?(KRYKW=#0Gh7xyapvvt zi`vFK%2fN+gtX)y%rj1LWnSuc7GjrK`u)s-_PZ4c!i*K!wXo zw+7++3D{@VXKRnY?eJ53dfiKA_uS_J>==K#KkJ(JHKjIH&mmslaMR1;_BtOU+c4r= zykgLs77?1GcrC;>H4D(-6(<{`TlfIhY-#wW#36^31~2&RVKfnAnYDg6txh<2wTI_3 z)jY$ode~Z7ebT4m=S`{}Z`>M9k_w7Mk>qp!JSOD5ti5)(n3M@%CgpnI@?lh*&pRgkbz*LIBkne*n>Rnm-yQ>O&hWITp!46mfVzUYf>vWTLzdsTsT zIr=(b%`{DY`x0lgZPgXpODLV0;hjscNl%Dr+fq-ABiI zV)SW&CIi3kX`uwaCeh)#qoLvuN`r7I zqGj%(oAu=-P4o`xxXjA9fqtRZiqP}400cFzpO7a-sdBV_aO0bqx0&Avv9mvAZ&)mr zIFQ{~v&a+~7_dl{B?#^h1tT^(|SO8(eKIMtRbd7J6U$Z)Q? zbF@4wnX&`Z;T$o~OsoBF)v@+~dOE9&{%{3oca+usvii}=OibNiCb!A-l@ZNaqpC|o82}^OV3#K=*2aS_1@=GAoyJ}?qF>6 zJbG5#5jh48?HMn|O{uKaAsfHmuIk(j22ipBMB<0l1)>;U;VHa+aa;!I=~3YUxHC-T znJh>EySh@c`C9I|-Y&Mf5$r6b-{V6}U#}jeNfEYgaMR(Fu*~U6P_%125Tl`f5QR&^ z6$}mq3UV-(W%--$t)WhvkNU6YbY>|YSMlT4LvS1%XmnB$(?yphcaQzs<~zO-4Ru$4 ze(2XE>If~SW9Y{%xK~tFvG{rK{M&hjoyF3<6Naky7rF;;8;N!CWe6&W0-)M@SXWmq zyHfBq4pjRKNt;IA7J%X%4$guRnvvQL|^S{xN*Mo>YQk zNd#7!Q>XhqIAZt9b_Kg?~Z3D>X zvova?Mu)QnZLwd${SO4#!f!KYQ|P{P$yv}BkkaW!#V4}{-LvE0&`>}I zG$5q`jN)Uz2vZ$Sge4tUNnGRFZrH$$rPd|Xj(N#MPkyOKIoytll@(G+4^M-`TQBm9 zUu726V_UuwJKIg^z?*!GyJFLE>+S>nr-yS{5%rgI162XosiBvtK{T|)yunZ|8X7`t zZ-0t62t|pRe9~8(gho#EW(aW;f6o*dOta`}NU!}17OzY2fFbcXDOLcVsYL{i5 z5ioU+dW957F`MmqC#N;VtZ%@`@WRS4FAIkfrK)GzH4jq!EIXT^1+^8I{^ILquRqm> zbi5d^`@%JPR5tP{Zt5iCuH~46c4ZKNHAVf3Qt)I$LxI=}W{&;P@gPDOrqI-xtey^)4~jiSJ80eqBZ?t&+sk_E63C*JB)_j z2h)0F3-O`2hjAO((?;36%4TGz=d_heU=|S>?P}vyC63;numa`e&k>DJC36qJLnZ>E z%@3!vQ#}P;6gx|v*iLiWJ*{z=$Y@%tPRlh_P6>5l_RCP9;d^|icV$1ld+IE+DQ|UB z-GRcf_)y7V%3t?7@g_(h929)j&V-N{_ZsXn1wXAK2pEoHS#^N>K=@Wrj6L9p$i+ zU08r!){iE;zHj%m{q;<#mt9SIYIfx7p`}8NEBkn?2`_rV;xt-L`xhqYherKdxo8#- zlodZ^q~59Xvr$reIl{|UNtp)gMv}=%>~(QF6cT4eFQ*34gK48^f+8b_Wg_K5u@$L# z)s5NOqQs&n%Sftv`xw+3?ovTmM!7lhTn{a7ir|WW%XN6DR%@K1!ecAmB2UF;{@}ZY zfK>5$QoHNi8Y+!%@kUG9>|GTVAN8*=qs)WK$22osLKQXY7GF$H_6bbEhN?xL65OO% zcpf^q1C7Trpi^DoXkEYX^ixZmFWU;2VKjJ=A-i?-#Bex)`@E0jVAf;qp5Fo4MaJVeT?@<9sWcb5h#Z@5 z>nf$6W?nX1dv=O6wKtP$Lm$aj9kgin(&Is-z*CnYx}sjd0wP;-bvazX6`WxC-~nsR zG};*p`lPSSRfAY*EL&a0B2)pgEczDAT49Bg zH=@!4;r7+iqkk955f-gC%4`3PN7XS#*oCR|RzRFG9vr}tH82@Yl)0xW#L?G7ymB~A z*S&7tYilXs8gRW35SMQR73YmZ!h*(nX>szkM-+!xCkdk+WLaElsA*&=!poFZhwmOJ zz$^3`a#pH?A1j9Y^(@t@RYKMou+ll*?g;A>sMdsc;^)s3q zP172)uQqI!{a6Pb0K$-Dl!S*i zlh`<#unC;BQKjTTi}avb2gn->%Gptx9_}y$H`Mz;n(fKwlM3&c8H_E$`+!M8eYWHT z#25`7VA1B}aa={jYKRIJ2S0{;kg9X#+gJp15jqkLI&a>~eSKM5pINBzIQ*oCPai*R#Avke1^R^q-JMK88i~Fx|YP{ zSFoKNHajECa$4>5jYsWlJ02Oj_3}?wS@!#@Rld*m+3$a~HPfu&Tei-dFkO~kuQC+K zX}kX7{cMNUaEi#bXWo~qa`*d)+PMvQw5My_n$oH=I{^?}2>MGEeG!7Vp@g+6!Y9RC z76P(C{Xq>|bg8!XRCw*&K}PeoWkl~^31z;VcU>(Ti^Ks%F$x!t4&F?ZwX|j6(6@(> zW~T=A@_8k+Nd7WZ8>kcEW9~{3NTb+u#Bs) zd^VTbf7mA!Ai>veEe|Ke1>qxNqaq0@VZmMC>t!HOqPeVe{Zw|4A~(3CrejJ;6|Ls6&auCEpOFsr{wvq zW{nt4m+rMS3+?A(? zSUR@EVa#+r1+t%lj9FOe+VYzw6JlNx5KTw~kYz)QwWWidZ=GMid1cmTh;LEkg%0by z(7vANF6qTPmmb;rx+OSpb~<*xPOFv4ZL@GXKlNcXT1IM`WEK=)G_)PWb&Z5QYZL$y zuixaZ3j$6KHHdr06A_Scfe5X!;qsgBw6G{juM$hb)d^>J$R+NLbO(!gyctz2A_WuL zIKv_0SHTE@wVMSsYJDMd_AutStJ|UZUkSklHgMuYFQ$udiJoH{*We{?DvB6+;5aJx z-bMy(c~4(`wQXk@zEw~$&Xygc@UG;E)9_5^;F_#TQYcRnuMFL`S(X;#ohiobGen-K zhtRp-tC`!D&w6FVMoQC_E)F@zU9TDRSNa^1sVa|Xm75;7^lEE* z{VG@ARpw~v%yse?uH(9`eS6%d*9;BPxwg3tWMAruS0%J)y$g782b$8-67sggv2yPc zH=j_}dF{5S+2=d7=XYwP3%_pcm>iSDG4j}PBevV#$`jjh^Kroe2neBZ1lDerAv~F;Q=P!}NZ{Qis3%*s*k59!hxTGR2Q+y^5J(4KCJDN$}HR7R-vsSDBXlT-MSsfRl0S(X)e3 zLrN4AFMQt`ZqyngHBojs3#~6&OK844oHU-#d@a1_Cfr_8-?(_?R)4_jSIdqvrAp5y zkBw7lNvgW*Sg~OLkE-*GYN`wReF&j<2oS2FhaRd_4G>!BRjP#E5s+Rqp?3(qD!un6 zARxW>CIb3^NJj+)1r)scu65Ua@BVVuKIeSezcuH~-t(UsZV`BLlY&DweC(0r`V4$R zMr_3!p4lMToJ)_VJuVm%)i$yvhJH*vWQ*BhooVHPN@^e(m^3K{yf!naTF1Un-lG+< z%i&Rh+88BKHqt*Cs5+d^HscX@E!ALf7=`H8|K7TFFVFboB$PTny(y}X;vcbRzE1FO z6R6_PD7R3gS&K8vw?65a-xs&5aT`9=d_Y!YwrGUoi{MI9tO*}mblYfJea|Mce>a^r zTK~Z#`piaHqY{#M6;EPkm{TVJMso=HyHuo;={Kx;r&sqKtRa0b(W`g}9s)5hB^hmy z7{9PgTmUhcT!Cy9o52vdfbss|;m0LBPAzaa5JgAFx&)!FNf_gz7XcsH{&$tqDDmxF z1m|el-O7Bc^`rM3Stj$3&_{eaT$Z%1!*rrkTSfePF`wCyodz04o2a~skFDh_(cA~w ztTN5}!U`&Z*-Cp+Bjr+C@retA8g~x_x$*IY`oqi&wN$D0xV{wbQ!(9QX$sUxIZ#Cg zn!jLWPkdM3CiJ$-gx9Y9bPN5Q@!hq+5Vmh~$oF_^;oVHU@U0r_@73TN&?lO;v{jVY;9{Qa)x^pD-dmNd<=4<5`ICbt@2)N8!g_0J_@Eiji%eY*jRwBS+yzN3wKU}AY;FSW0OB67_+()yy(j`?IlLu}r1UTl0YD&G4mJ&3?? zMA=-w!7e6Ha zHRrgGZ#0~HqfyiO?^^iS8p+p_8Qteoe%AKN;n-;8JnyqOoHeMJzkCR{vRb#;sBNlC z*{OP$M(^ur$fP^t$RgmwT@~@+GD6B&67Bq-_T#VqyG|@@4lmx;zpjdA@%;MGrt+TJ zbvn0(WrjZ*OM4UXvr}c>EAiy+`+3j<;O*bOMF8#g7-D7KaYC$#_muaTOPn_~-jUyX zvL8K!QLCN(>?PZi!qc6f#m2r!QpkHy8h_O75|7amh5{JPK=_`j2$}_r`*sXz*+qr+ z0*tYXyXs3D>lVgum)1{WSNqO4)k68U_Ut3}UdQoq)EIY-t$lv*DKu=H!4VSv!~G}$ z5|V6Ux|1*x*Yr!QL;QW!zESNxmN1`%Kk%*5^Kp7WxHB|cSbzXGPQXAE@pM=Ttw%`Vi_L{*r3y3`fY!Jr&BKfoP{iE3-wE zMx#YatY;R*vtik(DOs><7kOD!Z^rjp+I@+=5dO`1wp2aNz*C`ue%o%*j@qMwCCSfP zmSZLMVz0*+zxRq%;Vy4EhI|V6t(|>;>uB|1o3>xipOt$eFhDfB<`4WzWG|~947~ue z^{%GVfG}-pPFfHfB3?B+xaNJanC5>OSEy*wt}JugiJD}#cx1}@e9g+oMZA>9f=BJ0 zQe{C*QJ@y?_eLYD!Maf`JD(;?`XmbuNYU%;uN; z)Z$Y0!4dmsPS7Q%Y)fO!yNx|C!JMb~7uFw{h=a=vgDr;7H23X4;LZu0`~CnpSi{_J^o* z%V>uPWuAx5rc6QxW(H${$0oGU=&(EhoPf1nzM3J$6FOp;4 z`u;RfZhiDZ6<+VWByE>3hsqGRpfO z5fNZKReO9E@rg8U^I73sL*nX1aXp#|19xz{*~e*two05!?Y5};Y~>qq(@|Ovmh#B= zGR>JmG%&oF_(9$PJa4O`v%qRz+hOG-4i?s%BxNpN4!Y_r8o?k9bYboTU3w}~4HMV) zb!r13$)2Yh^_He3Cz(-Pn)K3g1jx@JXN3mQ$l@i4qu!cm$e`w%XwD>{ZeOmryqIB9 zHO`=t{t$(4l=nog1qEAxA97{htkR!u5MD18!nMh@djz?>6zdvF(#L%pB) zPfX(vWPSX$frA!`i&iW1|0DDj!^Hm**0>Xmx^8oH>@DwRhE%s$p@iZ?+SR2|29lEW zG_l_-nA%7ecU$5$-lkDy{H;Cw*ov>=z75UJm$K4JuPm*zjJ2N37FvP+9D!xE=COC; zUzC);ykVa#Ak;{;w97K~ef7a$s{7|*Nal4Xho^7FxW4oUVL5BsrA;rvBc=zOt=J=SEi)^>+HzJk3M(qZG6hzL$MOYf z$d=&2#Yx497lKt!tb>kf=@?jesPw!QO4rIRk`{fVPD@zP7e+Fu^ug;K4aaOVp)$`L zxMnPho*I{+wS7XdeL`$(PSc_FqP6^6EBkgs-kx!Vs#Ay4vSU10{W`%@T-(~kUc~h8 z**gHlPtzxpptG8B(Jadeldpk50WHRl@2M05`pVLV%Fvij-|9k}qy*i2AP%AQWaY8R zNl-RJGfO>Z3aC`lRU?9h`yZiizzvcD&W4@nX>o~irA|JMkN$dL+0cbRv=3v+rjBu^ zwz(lw1w)Mxwa(vN^=54w+qlmmm`lborMLUSnGXLnT%ZmrV<}iac=D&_8H3G?Rba>x zqk&`7v{6Z3-*Z&QTFYo(9b1Tud3>T;i&nxDRuQ4#LwDAD2hUC|=|gii8c!*Mp#Z$U zvSk2yqqYof{n84ar$HJf2F(qrF1N#jTe;bC5-*gGsFVQ+@j(Pzc+|161k0LFYfpg+ z!$|T<^lUMNTwg=;B?Q22kGpps+Z*(_c>*)4j6r9}pgWZGdB$kP{d9Aq5M@-K9#qV* z@gbnNwP~BDgTVYj8U#(0%432~6WGwKrrAd}gVGp%jMMgLz6=8HGjs}!uZ{x$*L-d9 z)qDs*aT7VkBTeJc&sD7D-E8G&MoUKGRX@;mrUonUS-4No{i z-=KB)i&YO(ND=*|IyCUz(@i0qWNZL|yVS-h=+pGl>_ymysA+C(SAy$b*|JD90yCbPBc7`LGu-rmd zE&2@?el!F`Cg7SP_twZim1_NeZ|?r&zxea#zyEiq{j$kDi}tVb9p6AmMqqeLU2^xk zt}^GH92#Jh7APPc<<}u0#3ymS5-i5`ij6bHW$W@4Ag4c{G~A?JRtH{)hZ zDpb7R$Ud^b>N$hIYOidI$4gBK1J#vc(tRLLVUM_mqszh!tvXXOJyYf8-Eta?eanq? ze74yE@MZ>Ilmu0SX%=1+Ph^1o0t*_;Cc%M6jZMRsqJ}TXEP&V<2>gv#uMBfDY#l!P zT>2iChU9B4U3U2AW2B^ndukCTV8W#W>HFr(`j!$u_#Lx_jaCe|tC@eQUrU@$Z@H=U z4)9k@lhHT`sYSnUOX|GMJ9fVpDt!C1+^NReFLPY7S)hPC`uaK;tnHUG#ivm#xL zcu+FWpcZ)Q{wO2F-r*OP^2e(WZ9$#04Q6NGAK`|xTG(!Fi}S&mt~g{ zg2YZ*R0K63r4p16?c%SA2;X)p@dOHrABy?4M)t;jZnr@8{1y z^Hu-d%#TSG8ePeiBRlkoe2zbMDZ*US8+~2U?OBUmdbXVN^L-Ft;FE!3Z(BmEWg;bC z>dazcxE0=W-1<;+5|}EJA;(jS48U8ijUIOV!cI#A;Bf&*sj&iS;bwF;djALo1Hk_N zGE%QFwPXc zW|-BDBUcc$09}OS0WtK?UZ&wbObxlR7somN~pcE^73e zWa6do!QJJr->ZrWbS%%01Hyl2E?T5F#`&7#)ys<}_AkVFY2u@JmOHKMuFYQ;#UF=C zKe10n$x!4BWcdCRnOiTkWM;~%F{YBG&sdz~SurqYfNT!STD#|MR<)$aJS1x<71pfK zm_DDV;WRIRCY=C zU|eO|qCTwrj%3j|O+Ksj)jU1JjTPfmXA`HS2tmv8a)xpm)>f-9+L7Q^Ua|*uFKT!o z_4)cIqN(ZKJ!pi`#=9deeOev^<*G=!Uo+c+Zmi1 zU_I_iCd4et6nX_=09#FTCmawg9tX$hYMVuRp3c7}%rIQh;quJs=A%~ix|?LWy+Eq1A=Q2LgZ?K(auZDi?dp65;O+R813 z1gBAku#0z0q@YFz%lD$($^^CCT|8CWUh7>SpU%vD(LSBi{vyvH;_l|{-TKpEJdVi! zT=r$ae3(>hrGgm_5CLX)Gs6)ZsD92_@<_+4`bOOU5|(P3{;mH|$#*Rt>B#kw^z zDnb%JUAEV!5}>tPp|nw5>}?k{@mQCItC>%&?E!4D2EX&QTW(%(7b82q1u%LzQmMF9 zx|91nsdzBmdWBt}`f`sPj<>=}XiP_SpX?qx@}4z500D>|mayd_+#c|7kD=OlN>m<+ z>gt3s+kCv1s&ZrVY8L!TIZT;h6J#o!7t=;>i?Yi;QEF`1m%Njmzs&hy&hIRiZdlL9 zO_lRrR>1}Hj}Q!FES4%WTYilyY;#=gWVYztn1a3Oi)wu4ZIi(2q{%yCfm6GwSGt-n zxUaJe^Ar;niprTlEd~i@5gvbxb~Lfmm#lkpb7{2s^Y%1#yofT~%FV1AH7y;J$t!0$ z{jsJQfltjLN&J)~NE&e_=~GRe+ZE&+1oLm~U|ijKe(l9O<+$Ki3PjIMXK{N60ZY+% zctevxK9Xp)2O`7~gYai^tOk-T{f~e6xNCQ?%F;S71^D4q*eb_epe4~f-1YjtdCX!^ zV}niNFj<0!t^Dj*PR*l9vNSiX$??$kTLa4&yBCd8*CDeFRu$?&_hkQELTRni8* zLu)VH<;rJNDjN2=Ul|g1!J%VXbb=^}rjflUiG+c5aQCt2BW)&rKlUr1>Jh%j#O)6Y zvp!@Z9mpsv~t?&LI2h_eVt{%|xQNIxR>)Jm>$?<<&D`hJia^;2wSES@QCO7b+qO@y=eKLYseqAuF>KQ z57Vfj;Kda8`<$+4hha}^Zfo!HRUKs?JMcdVvIL0)Y;ob05;tBDUNaVI?+J%%v#)_|sf)&)s;{7Yf?uIsmG@yLS# zLo593Lco5~b%6TWTv;RoX>+@Y8`}(wHZ1HM9s=IL) z>*TutlP)m$yH$B`Rb~6HvLR-CjJpBP;b1nKRViY?6+L|LP@ugfMBCfFOV)YV@)myb@hijdf1T$*U7-k5WN_gPz#Y@E$HbnSLuMpj>?ms&JJR85*{Z@%}5H z`@iEap%efw1BI+?JqB3YbnvM84Dk2aZ?e$;`^LZPolP1wfJzu&mDRkKpGYV;vQB@6 zPt^4(YhfDl?Eo0CN3rzr2}#;+#A6cJ{-gRTXCKWRW!meNVrs>mG$x zBX9RYJ!WoUyYDAv$%{?4qn+O+K6dsapxIb%bPp>d} zjoH{JS$S@~%YHSsV?+IBuJmBP->l8)c#~_o5D4IK#~iXJ&qC+-IfO?yF(@TV$7m0KfXLG(|(ZBi6rS zDm$fFjhmPt4*9o3-7@8qoP7V#H`00I@00sWzL*wBc$QiFPwDsVoV}BGHep9DZyPgF z?v7E6`!zopu?e$(+i;MM4E=hq3D!wL#5a#it3=|_66JJR@T8E_VYA!o>yb zx>^-=6;_O3rVc!CW-?c)M{499s%onFkM;u~1}=t+s&(ddxCc3Z<{$nvI`5Qx-WO(r zAJY-mJQZ&;#_}=sJA>rAPt}A75;bzoEpR5Tgvst#Rv}xfq>NMCg?O1$xxl^yR`sl> zyR|e+)J4N=z>vgR+R-7gwqWW;qiIVIWqS1ed1%j(8g5cib0U1GbGzen|MRzJstX*R zoFmJ~4ceg+CSouFmFoJMg?ub(mnnT*4%|CNV>?C#>r&`Sb01PWCse!sQ(ehvBL{o> zk5Eb^t$C`lrx@*&tN6iec@AX7*j#U)F^F7v8~RDeejpAH3KYvsJ4neg2YYcaBmHc1 zReX?+jESVU3rAPK7(x&ptF!_fgT`?XulA&-$`wsZY1~ZizP0aau7#^vbb0(-t;t=n z(r$5{+pu`nvySV@;_hV0AcQPQ#no%9uhh%^Em5xEN_h?)~x8o zlt;kqyX(&{e~z?4hRWLRYf!CU`LH7pw1VyBiv(lV+Hn9Ce)6o~gt2!Z5M;^{rS8Mt z`>+Cc^d+%r;;7-U;&mC37IVGE{h8JKGy=-#S#lRA&PY0ic-k_61ds?Q;>2xCr#@qt zMX3*oCzl-Nevkw}RqhfKjV5lF0?f26&onYMs2M==PXs$>+hQGQK&d(=`}!27mH!C! zN75E0BRqv(kv@SR5Ok6;-Sgb~+;8De#swyrnSZ5tlJNLfr1OvKcq@KmoyZHnmyWlz zg&J8p)wl(i@>>}Kz^i+y8b-kz>s?rQKm@ESfEgZayNF28@A{TDa}9M3XmB@(y@Lh{ z;!op(x9iML-1ijT#2m1?4EM)zi1PSEU*S;AkBnHWsqq>IXW^gD>5FAx2JN|Khe^|*@He%fPtOTL%(lt z`|WhtnOjZ@RYT>(bYhraKlctY;Mz5GB{82cekrl2>7dfz?>b(sniNM;*bi&v`r4ibdcFav#sL$^ErykueI|kpfhF`qh zqPHh_L%k8Jk*GJb-z)9p2sgoL}@a}cCc9})xxZ1I9KG~YX!a<;nW z0+ZX8mrIwJYA;H?k9{8iHKxYr3ONL+91be&BS>PNSOquu$3J}%DEzpg2Dksr|DkW2 z(+`FDh~2wSD}{H3S_Wrc3@>Z(W~?T*C?b24?5*Ie>q;}dVe!<%tUBEK3tPSW;(HrX zBXAZPatiK}4)?3DGKYaen_vdsmH3a) z1wQ1wNLpuyW>`|tad1XlRz3A}gnu@bRY8Yrbd5a%6z6C!#ba`#hQGxDG@#luMCM@) zyLCoBcoYcz#~AjdL$`zc8F$~bkZ*kuFBb6hOGK(jJ2 zlr^Xt36$inc8Kr)6Ng!=HzbTuL*R=m0r|9JOM)GJ3hmOj{hUBp*z9I~Hq|4xbcUW^ z({v`8DD`u0bx+#^bFZ~?xt0(^eYtzg4L8ngdBx)joLNHB#}kC5rptf=$G z?SH11N%v`So|PP7RL|Aao?tNwS>=@nkLmFFJnfv|Ocyax%=Qtle}!*e39+Vw`ryH6 zwC|etj`0ZESoFnz4R*T#HszvC8ea0k{|4g_lCv1k-l(v4DSIAVGdRsJgUtu zWvf1(nI@U~9k-(5?W_Cyh!?bj&{}cZrO*zq+x%djuoUo$L~D1q0kyWWM?eu5Ap4Kd z84z;&Qb>3&e(GJ@eo-g0tOc%E+3~d&M16auQv!6hQ;BPQFmU9JaiVcpU@NQ7=P`?LP|l%MZN^w{pob#RLNORKeS^pa zLJ}4~&C_Ne7aE_xI9IcHhlbb?i$+jrP0kQHn_)6}`Hf?!li~;^s>z2A>DZ$qafCGZ zF+eiYiU~b<5F2y~lVwkY2N)FRkf8F6Ks=&0R9J9SVSVIUfyu`93S-^s_!1;FSK{L8 zO|pN&&dpxxUuo{tSaUlepZcl4dSATDO$0p z?Km09jc1thgj?Ty%oSwDHt%tBia*WhckR7wBpL?nYwcEkI+y2 zyqcFnI=#!o!V-@0zzY>_THYvv=`#^s=4{2bj6ZtcAv8|l z5urdI&P8_jb7^l%R~TMOk>q_|gu%eQ-^Jb(Q3sdEMI}NUi_e(qUIG#+{b3WaNv+um zLUB38<>%=t5IoZ%d({PtdU$lkQfOLNlJRC)O+drO=y{q@O&ei;UZLN$+6!jGytu9 z4pwukucU}=o&h1t5Yp6T>uuhnuj*?x2l8)3@*Nl7uDtVog-bnm-<|oDWLHXCZM!?o zYU?T`5*Ki#Z^KVtrX%mHS^r#s^6zJW2R+QDh?zonx(WHUWT8j{FN zZVsGnbClHx9!Df09yx;iZxUbhX<8I(O+>Pl&f6rzyJ$`}uIW(Mv@ltiNsZHIzJG+y z@gY0~;+{M4S~9JBldmd$*dK;ITKt=@Uj6j1qp;?zE8cm#Hzx>WeVT;Bs6}vxm|5w! z9P6?kYE-;LTs+jQ6Z^g1XWe0n7HCyA@`!m!jX#;Vpb6GSO&9BMA6?6q$}GC5yT#kM ziT&AYE%@`NXtD6m-b1NB^`e=wZ|<%;S2+Hd^soSL3GmEduo3R@qFIwPS^cR5hcPb) zgdCMUghz7VtkgaqL@!1SkEr}TI;}LIG&rG&MlZdhlY*MDXbO688wl6#TX5RF0v#aN}|20# z{t8OGtGNAq4c(fb!pIG~EGg%NBm4IfQJQ?f%|B1se%-!^s-u5CdzJsts<`N0L!mVA zB<)={ncs@gw=?WTaGV=6;Va}wEQJS%rDroQZdjj40ZW>6`i=u(fOW){s(@fHX?W>M z15FC?;AkZEu^eRGz?Q9=rM-usgYISIfA1XM2LBw)n|6JLdZgSPMK&(~U{pu7)3zs5^7-{!l?2BQz#RtpOGW|2wlC!~n{s@o$#AFz zpa#dJGMLd(P9Ky~@Ca3S@i6-gA`sRw7uzf7soek!yRQ9S48}bjvCNP@K~%{pM+(7H zDI-ZG#6=(m2329r`J&O;dm~$vWOC^^N7LH39@r02jB8ZPGw_g3v*3}BvQwcSgqVkXNV!r zr0T-jO~w{V}UYB@4FGG*PtlFQ`% zF-vQoAB@y0G zJ(`#Z9haCrOVKcI;RY_Z`dVMuBY7}UiuLW0T!rQ6#gB)A_D)R=v+OCat;=w8;zI{U zm*4PntpY^ktSRfUaUT-A{vI81c(CpNcbV{6mgX@*17MtHSvn#~bcm23$&WDxMGY7( zDTu)+=|jd4p3E?aXSEb)R}T)DA6$Sw^#%)=S>!=4T!kYU5@uR!Wye15YOsuV&p!X# zOPDRSEVw4U)`gG*8$|8rR-7;`I8r&GdCZ0*zB)wXO1SJKh)0o$;_C~|uDRLoLqeQH z{kSx}IJise>Qh|A;*K(o#ANKgaT>kpsY>YZS5m7smRm|1mTwr`U4W+*DLn zwSMaoPqt|z`n~GvZtw}>k{UY5J)cYr-5Z#DYsDtu_;D^x(rSDVbgUE;v7kml=zwsl zj4+lwIRx*V@E1nd#w$oOi;m;+>fuM^ozS|bQDaK}hrx51(+ci6m1(+8Y>)2+cHx zMCUkKcWDVVGmYqWx6b#jd4tz(^zqy?G*s1#@v~Od-`#rpraglXE=A|(ddxSzX#PRx zXcUA^Pm+8Q8o7SwDxel)e|-2$3RWX&k_&*^3)o7m|3{|})}Fz7yC{s8L=u!}U#Y|4 z-qYJl_)IU9ozUu0u$kflGGI~!7#_F6N-G8+cWG3nbNWb4CT!c{q(kv$dauPIc|gnX zWvqMb4O3QXrq!%+^?V}Ih{F5Vbs^twbui_d#-8e}AR+uJZF*3;7`j-`+a*5hb7ewZ z-TFmw3T#JB}L%1e+N)oL>YbyoyFf)Ul`=z;*Z4vz?p>1I-R2M z+&EcjWnBpvdQ30I%KqtjG|GMgKwIHYtYkNAiym^X(xP&wc}ue!Z1eMdWQ$JLcr$4+J4YA*k-6Km$a7xzvmI$Fd%-GdioB(A` zPDQr>G)g3IDX=RoYi^_`0W$Zky|7@(3e-gZBST1i6Mc_4S;M#r+S=9VRn(rwm!mU} z-g5Sg)l3ibS($P@mCvvr0+dLHw1Lq`CDh89P<$#ek=?`uH2_alEhe{YoGiqD4w)cR z3j^nVN%e@tCO z$bB{Hp#%+M?^} z6OM-PkEONtTD^W=Z)q9Rt3;E?n_L1k zkwViLXe@G<%o63ov-}dNsq>i7a5D`vg&{p{Z(_CThJA0jhBy^DByDYV7Wt3^F|thq zJ@HWXyFQyo+!b60FLKZuBZta7<2*|cel`uKoU0IUTFDz$LK#dkr#-Xqr+5;g_nT2? zZ?|U@`gN!hR-o%H<~Xd@kpIO_QO8~D(SMmnyWf(7UbMIFmWS{+N|-HenqwxFj%GOg zf7$Kd0|C_x@%D3~E6WBd|K`dY%-1Zum)${F;O`jJ6HtA2ycnTuk? z1KzM7R&97Mn12yeD_>Crsh*Y-K+dLi>6PK(iv$ zx9Na1qxKWd$7_5lqLPU&MML=4cp{PC4~SiyVczSP0+kHxZx1oJN*2*K=Kk^@9%h~7 zBuuyLoib zdi(E>{4A_+U{d>)or!5uXn>6%CRv`{{m(izKx#@xUUDyKuueyJPF7R19ia06v zQc10wDksYmx-+RuWm`*9xf*HRI}MFjqPYxbnwip8N=*ufP45fFju|<6e^8?vdz3uS z*^PQ1N-uL&zth01zv8f<=)UTsA=`G6-+A%`(!a6SGI%h@>l2yF`qFrK##im7%U#CA z%~r={QbCoDoOrCGSBtZizd1#pihLdrnx;;DAiNwKV>=Z|CgHseORQ!H&u_uyX zU1@%|IB!^>eG~W+f}@;tzUfjs@$!w-(iw5B?xqEe5^M6)&uM-&^!zX^AxQRnC40;2 zrwMjQ#mL^S{zYrg(PjGY@^W?hsjoOPFcNzV@a1Ic*c}C1oLg5SCh%z_~G65U9$cMK=L68Yj24YQw(kmZT#?U^3 zRV^HH!L?U-!CW`0C&ch(e_$ZVv~3fX6U*%=ap4=_DCf&c-gY_kkI-)byW>mFxxS2q z5DBNe_LSgH*R`eip>L1iEWJ>2-l*v%4k52v_O9MM6!Cvu1=!4_1)q6eVl~!M*`;+5vVMq0v>>g|ANi2)83OE5)aln0oua;fJ40IC7k z?`H4dw#_-a6nyZHX#+k8u@wVbjx^AjGQ<9;ed~R6LUAKi266IB5lQx}94(EYA8NAM znvs~9-`g4=OSV75Dn51zC7tg%R5j}284i|^PbDBZ$Y-V`3LRRU-ZmiplBN#rbC^q~ z48dyJD<9_vzPrCw++5>-<=T-h=(fzf%3zZhLuOQBSS=TbDv8XX>C*P{z zliSCY79oR);T{l;bb%WX6fZzd4u8vvj~yDo=ZN{+Ru`i%2jk6mRDoPaQzWE7nscEP z70|YkgeCe4o@}Nj$JQDb9keWWg~cuf(|Z+SWbd1M;&mrpPG@Q@9KWyXw;V65(bYh1fh?kl)*B)@#*4`erOi;Ph7a z<{4#Sk`dg`$ZCU!P7RQY%~zi1d}=0z0*6K$^LOZL3-CzJHXjV`9wgwusAT0#Cr#?1 zhbvI8aF)^2X*UWJ@>sMoTOASh0JM^=gzyX7G1bv87lu+o z9EXIQ?WSU3%tonl3xbGm=Gt3gMA`?tR<5Z?V0>5^Ak(45=j~ zO)a42z@XCRWV-`iKCC|d!ZnvH(@lPm&D>}8t%7HHBjX>_p%b2iV(r@4FU*bFN!NuE z8or9b!6ReiS~EQii>8y>)x*OQ(yOy0sxlqD6CB@}5&#@+d{MwNE;eiuM3+(wvZW0a zVx}H*5SuJnB&d?nCB*>su@^iMYI;$TW#)6p2M2=dinjqg3lhI{xWkQ`n7Cd|1+7wy z%nOvE>!4u!rcAPQqO%Cx?3j4Foz zK>QF@urHIWSDoPbp!RKZIy-RVHN6&P^N(h)a8y`Zkod&OjKcfXo*S8#L&nFoyVz47 z_l?rU+ilGSk?^{zkXj35!k0GY1B=H`-+5-~_6fR@E!FVaV(s4ogug3&x4>{+CJE(& zlj!lp^dmS1>b0tg%rs<8efN{pjbB-UuW5+2Yu>!Mp*UFhEDLA>5I52KPOIMTK7gf zInCaLAK7PGMK4-}TK#(Uc{632Tlzn9y6?((101S!9#m%J>)A6nj*zb~E=EM#Riz1C z3i3UtyISc6UNF6YMh|G-sC{^7RpFxMJt^$vk*w9TI<%g`EGyB+kK44q=akFbJxux1@rX0vRGW$RGS>0W?v>0^nbmWvAe;FDE+9*2Y6J zD<;;;_(0H28{*FZPP`X@<2E*=7x|CJ+_1JhtG1rjH(tKkry}1>pl7ujER%ol*;9cR zEv~DZTJWY#=>5mRlA3&EM|G`TO|=hi8k7QivMxxv!SqJdl910Y`fKSm=Y)0%MkaZO zJSUa!pAss>#xFgB$O!8eJycHBTRvo8U%_t znK7*tYVT-MAwu17^?Oe-<#X|YY2r>OjJu+)H=-xi<%X^|tKuy!3!1Dak?mLA@ub(z zmkCU%9_I1VZiJU@BiU9}A26ewUpyUA zRif-5J7z6EYAns!`0S5~05r&SS46W?fjo&(LDV|LSdWN~3&c~EmOOW8aW$te)U z@+pxzsORumQ8Ykj|BV|TtS7WsUbg8#={j=>8iX+T+J}mgH8N zZSIN#b0Fi>38V1$rm0@jf2<%T!;uh}S-5j)c((ezMTmdK0-`JRi^+4wdiTq91U*vc zj(AU+a_4C0o7B=cyg;PG^3*a*--~85pJ(K}`9+12aF#mR1((ZpFeU^4NRe#IoG-=3 zzappRl8z4i=%oA|rx0T+Yh?}u0O=i*3|UEMlhCZ2?7F4GZ!K9 zJH|%^;;dXj0E!{gVYGtgv-25W#Fwi)+4@D~O8&yc?Jd#RWfZCesJK8WMYPhMBoh<#+!hbc})Em5Ax=@DH>6O~LzX zL&C}>^6qvZkdZ-$USaXT&8VD*ygf*C>{xE-ktHuqDyT#=Z(M%8(1&H}O(bJVkjq;Bn$SVUB476;@^d7w5lC-IJ;@ zE!jZgFOMdsSpYF&JLE1HGkQPQv0Qy9dvqLhP}_kJN$XYGa=NBCJnRbLJ5&L3FO(A) z2tR~-C67pvmmf>=D@5nuuk@DAPw+2a)_ey$5g#-1OifEfN%xNRLtncFBeY%d^BZ|-QRI-4oBvqr6jz~PQrv*6Un1}gDDRbx|)C%KigmfQhr zx1r4WDRho=LBTO?Tv-AY=bUz+83E~l%?@&ZIsG3hay~88M$#o>YiS3>XD0EHW_wvT zY-ThczAUWLtIB+pn8#DJ`qr{5$O=q{Kw$P9Gk6gBWIs^(XpGD!CB9^hXnA&4+hIa_ z6%%%MF~Zx|9X}i8y7Na2fmNx?DMepes- z5#o4Fv8*DvWvjWPEZ@#_HuTK5P`P7EF-5x&JyWAzeTomIu+2U&44KM7>w#+nkD|gm z=KXn4e|tUnr%M_DZ=Pcx5PiKfnqaG5T+m?@KKGkaN?0F%kUA^WT2`HlGtepAfo6By z*47lpWDLVq%#VDH z-o{(dSYGKIsg3v5OO9n@cxU+`PHB`|-5noRs(e#@mfmao)G`=z{_%V6Op#?ZuAYXA zcVJmOV%|&MP^A3o%r;$|i9IV9>omuzKBK6i@1liQtbUQPYUjf$kr;go`s-8yFXJN= z?&@lM2Bemzbda%hz3HHuS-=4s$h}E6)e+zV5|Xf3_o~iL-f1)VX$ALA=JHWnhSP5g zH+QEB+6zBn&doiKfa}E}P=7yotz{pfvrNFt=J{CLYLB5tr>wfO@r!>fhDXqeH{_pB z#{R%BeH$#Aj=<7I$BFi|AIy_PkKVoB082>8?9HH? zTc6>p`p-TmjjBD29hvBU*Lpc6iW~7l?EJ?F84)v_8E84#2z!0rA(+`}Y;XBHE`Ci1 zEKVj5lOpuex7>=X0RR^i762~tCcwk+A=N`hC{TIAS)m%$j$L= zoU|eu0-S~7ej%QZA0tggwZtfcz^Ip4fp>w((~{e;f^8p@r9K_`ONdmei%!Rd$e70j zac|j3iPbS~&bhWE{>pXsmV1?nw{oe zUz>>%FO15hfzd1MzL*jjiJR)T=f4&AEUkX;`0s!&Gmf%mgC%sn?7pqe6+vu_KZ@PW zWEybly#0ydJtOq+zK52nx|)^nzzzV|uB&PR!vpAsW{y2$V}i}U5K9jBX-J8c!SSXi zcHW)Y8|0H&QgXwgs(=^!x5EDbR{am%Ck0V}{4ay(iTDfobCY*o@9MMovbU7d)|^E1 z%ZzH9vJq;HOAxiB=*JMykv#mcb_m*C2>>zCK()=4>!L{M8ulZn=V| z5SW#qxSN=|xz{!=#T4S~ZtsORx!V<|Or^;3&Dj|{RqQBaW8y&fNK+m^91-1o9dK0B&{Dmig&-Mh$&G`8K02@WPv|jvWCN(Ytjdka6$Q>161)MZg5{z~KAAPV zwVHxgb^YsW3*@B5i+f7#QUB{2dx;{=mS_7+tVKwLi^%`e{&@aS;c}arn@3Md@UwtFR21&BhCH|Fz z{zAB&@lBvE3G}7{U2Cb;f9>tVK$vpR^7mI@#cGQSOzD*CiFDf&@SC_>flTE~hTMzh zh9wP`gP$h|O68`6UHq=47o$0{ygmUpCKkT5%UwO(rq0%;IN?D$As@VEeh&Y2`c&L; z6=eyzI2#Xg8^6JP*zF*p$@%50Uy(zfZkWRK%&H_|(rVfb>k4%bV;^#E!su@6@LvUV zgct37!x)VHFb<M-7^oxEZZ0B*vAv8+)k?9Ygw>s{?s&sGP0`CcVa9 zn!JSEyAU|VV{Wa>8bJ-^oZ5XK!o;gK+!=@ n+(}GPUip&@L!)G08r|az@bD0g{$oD;U-{I2M)g1b`w9FBxh92^ literal 0 HcmV?d00001 diff --git a/scripts/sounds/aviso_importante_elevenlabs.mp3 b/scripts/sounds/aviso_importante_elevenlabs.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..4b6e8ec4a18ab83d2c50ed379fff61489cc9aca3 GIT binary patch literal 80710 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 tiMaLQ1^BmZ7xTfc{b{99m2W33InByRoeu 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

)s|MSlU{3pK*F3ww!>_7m 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 literal 0 HcmV?d00001 diff --git a/scripts/sounds/temporal_importante.mp3 b/scripts/sounds/temporal_importante.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..a3b576d207a64d64b4a580b202bb0235a30975fb GIT binary patch literal 15926 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 l|F`9i&^3@bjrhAZ#(eU → lista numerada de peliculas + /serie → lista series con temporadas/capitulos numerados + /descargar → descarga a NAS via Download Station + /novedades → novedades del catalogo + +Usa la API de Torrentio (Stremio addon) + RealDebrid para enlaces directos. +""" +import json +import re +import sys +import urllib.request +from pathlib import Path + +BASE = Path(__file__).resolve().parent +sys.path.insert(0, str(BASE)) + +import config + +CATALOGO_URL = ("https://torrentio.strem.fun/" + "{config}/catalog/other/torrentio-realdebrid.json") + +# Patrones de clasificacion +YEAR_RE = re.compile(r"\((19\d\d|20\d\d)\)") +YEAR_BARE_RE = re.compile(r"\.(19\d\d|20\d\d)\.") +SERIE_EP_RE = re.compile(r"\bS(\d{1,2})E(\d{1,3})\b", re.IGNORECASE) +CAP_RE = re.compile(r"(?:Cap[\.\s]*(\d+))", re.IGNORECASE) +ADULTO_RE = re.compile( + r"(\.XXX\.|XXX\.|private\.|brazzers|onlytarts|spankbang|xhamster|" + r"porntrex|missav|sexandsubmission|evilangel|monstersofcock|itsanal|thelifeerotic)", + re.IGNORECASE) +SERIE_PALABRAS = { + "star trek", "stargate", "heidi", "euphoria", "from", "the pitt", + "supergirl", "monarch", "paradise", "desaparecida", "vanished", + "strange new worlds", "star trek strange", "the studio", + "one punch man", "conan", "detective conan" +} +EXTRA_SUCIO = [ + "wolfmax4k.com", "pctfenix", "pctfenix.com", "yts", "yts.mx", + "rarbg", "verpeliculasonline", "viruse", "proyecto", "kikorip", + "camrip", "telesync", "hdtv", "bluray", "remux", "webrip", "bdrip", + "repack", "proper", "xtrem", "webdl", "web-dl", "web", "dl", + "x264", "x265", "h264", "h265", "aac", "1080p", "720p", "4k", + "2160p", "spanish", "castellano", "dual", "lat", "es", "en", + "audio", "sub", "subs" +] +CALIDAD_MALA = re.compile( + r"(CAMRip|TS\.|HDTS|Telesync|KinoRip|Screener|HDCAM|HC\b|r5|360p|240p)", + re.IGNORECASE) +CASTELLANO = re.compile( + r"(Esp|Castellano|Span|Spanish|dual|lat|\bES\b|audio)", re.IGNORECASE) +INGLES = re.compile(r"(Eng|English|Ingl[eé]s|\bEN\b)", re.IGNORECASE) +OTRO_IDIOMA = re.compile( + r"(Ita\b|MIRCrew|RO\s?EN|South Wind|Silver Zero|Francais|Deutsch|Portugu[eê]s)", + re.IGNORECASE) + + +def clean_filename(name): + """Limpia un nombre de fichero y devuelve (titulo_limpio, year, tipo).""" + name = re.sub(r"\.(mkv|mp4|avi|mov|webm|m4v)$", "", name.strip(), + flags=re.IGNORECASE) + year = None + m = YEAR_RE.search(name) + if m: + year = m.group(1) + name = name.replace(m.group(0), " ") + else: + m = YEAR_BARE_RE.search(name) + if m: + year = m.group(1) + name = name.replace(m.group(0), " ") + + es_serie = bool(SERIE_EP_RE.search(name) or CAP_RE.search(name)) or \ + any(p in name.lower() for p in SERIE_PALABRAS) + es_adulto = bool(ADULTO_RE.search(name)) + + name = re.sub(r"\[[^\]]*\]", " ", name) + name = re.sub(r"[\(\)\[\]]", " ", name) + name = name.replace("_", " ").replace(".", " ") + name = re.sub(r"\s+", " ", name).strip() + tokens = [t for t in name.split(" ") if t.lower() not in EXTRA_SUCIO] + name = " ".join(tokens).strip(" -–") + name = re.sub(r"\s+", " ", name).strip() + + tipo = "adulto" if es_adulto else ("serie" if es_serie else "pelicula") + return name, year, tipo + + +def parsear_episodio(name): + """Extrae (temporada, capitulo) de un nombre, o (0, 0).""" + m = SERIE_EP_RE.search(name) + if m: + return int(m.group(1)), int(m.group(2)) + m = CAP_RE.search(name) + if m: + return 1, int(m.group(1)) + return 0, 0 + + +def serie_base(name): + """Nombre base de la serie (antes del marcador SxxEyy, Cap.X, o anio).""" + m = SERIE_EP_RE.search(name) or CAP_RE.search(name) + if m: + base = name[:m.start()] + else: + base = name + # Quitar el anio si quedo pegado al final del nombre base + ym = YEAR_RE.search(base) + if ym: + base = base[:ym.start()] + base[ym.end():] + else: + ym2 = YEAR_BARE_RE.search(base) + if ym2: + base = base[:ym2.start()] + base[ym2.end():] + return _limpiar_titulo_ep(base) + + +def _limpiar_titulo_ep(texto): + """Limpia un titulo de episodio.""" + texto = re.sub(r"\.(mkv|mp4|avi|mov|webm|m4v)$", "", texto, + flags=re.IGNORECASE) + texto = re.sub(r"\[[^\]]*\]", " ", texto) + texto = re.sub(r"\b\d+x\d+\b", " ", texto, flags=re.IGNORECASE) + texto = texto.replace("_", " ").replace(".", " ").replace("-", " ") + texto = re.sub(r"[\[\]\(\)]", " ", texto) + tokens = [t for t in texto.split(" ") if t.lower() not in EXTRA_SUCIO] + texto = " ".join(tokens).strip(" -–") + return re.sub(r"\s+", " ", texto).strip() + + +def fetch_catalogo(): + """Descarga el catalogo de Torrentio + enlaces directos RD.""" + if not config.TORRENTIO_RD_TOKEN: + return [] + url = CATALOGO_URL.format(config=config.TORRENTIO_CONFIG_WITH_TOKEN) + req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"}) + with urllib.request.urlopen(req, timeout=40) as r: + data = json.loads(r.read().decode("utf-8")) + + enlaces = {} + try: + req2 = urllib.request.Request( + "https://api.real-debrid.com/rest/1.0/torrents", + headers={"Authorization": f"Bearer {config.TORRENTIO_RD_TOKEN}"}) + with urllib.request.urlopen(req2, timeout=40) as r2: + for t in json.loads(r2.read().decode("utf-8")): + links = t.get("links") or [] + if links: + enlaces[t["id"]] = links[0] + except Exception as e: + print(f"[videoclub] No se pudieron obtener enlaces RD: {e}") + + items = [] + for m in data.get("metas", []): + name = m.get("name", "") + clean, year, tipo = clean_filename(name) + rd_id = m.get("id", "").split(":", 1)[-1] + items.append({ + "id": m.get("id"), + "name": name, + "clean": clean, + "year": year, + "tipo": tipo, + "enlace": enlaces.get(rd_id), + "buena_calidad": not bool(CALIDAD_MALA.search(name)), + "castellano": bool(CASTELLANO.search(name)), + }) + return items + + +def separar_adultos(items): + """Separa items adultos del resto.""" + normales, adultos = [], [] + for it in items: + (adultos if it["tipo"] == "adulto" else normales).append(it) + return normales, adultos + + +def buscar_peliculas(termino, items=None): + """Busca peliculas por nombre. Devuelve lista ordenada de resultados.""" + term = (termino or "").strip().lower() + if not term: + return [] + if items is None: + items = fetch_catalogo() + normales, _ = separar_adultos(items) + resultados = [] + for it in normales: + if it["tipo"] != "pelicula": + continue + if not it["buena_calidad"]: + continue + if not (it.get("castellano") or bool(INGLES.search(it.get("name", "")))): + continue + clean = (it.get("clean") or "").lower() + name = (it.get("name") or "").lower() + if term in clean or term in name: + resultados.append(it) + resultados.sort(key=lambda x: (int(x["year"] or 0), x["clean"] or ""), + reverse=True) + return resultados + + +def buscar_series(termino, items=None): + """Busca series por nombre. Devuelve dict agrupado por serie base.""" + term = (termino or "").strip().lower() + if not term: + return {} + if items is None: + items = fetch_catalogo() + normales, _ = separar_adultos(items) + grupos = {} + for it in normales: + if it["tipo"] != "serie": + continue + if not it["buena_calidad"]: + continue + if OTRO_IDIOMA.search(it.get("name", "")): + continue + base = serie_base(it["name"]) or it["clean"] or "" + if term in base.lower() or term in (it["name"] or "").lower(): + grupos.setdefault(base, []).append(it) + for base in grupos: + grupos[base].sort(key=lambda x: parsear_episodio(x["name"])) + return grupos + + +def formatear_peliculas(resultados): + """Formatea resultados de peliculas como lista numerada.""" + if not resultados: + return ["No se encontraron peliculas con ese termino."] + lineas = [f"🎬 Resultados ({len(resultados)}):", ""] + for i, it in enumerate(resultados, 1): + y = f" ({it['year']})" if it["year"] else "" + calidad = "4K" if "4k" in (it.get("name") or "").lower() or \ + "2160p" in (it.get("name") or "").lower() else "HD" + idioma = "cast." if it.get("castellano") else "ing." + enlace = it.get("enlace") or "" + lineas.append(f"{i}. {it['clean']}{y} — {calidad}, {idioma}") + if enlace: + lineas.append(f" descargar {enlace}") + lineas.append("") + lineas.append("Responde con el numero para descargar.") + return [lineas] + + +def formatear_series(grupos): + """Formatea resultados de series como lista numerada por temporadas.""" + if not grupos: + return ["No se encontraron series con ese termino."] + lineas = [] + for base in sorted(grupos, key=lambda x: x.lower()): + eps = grupos[base] + temp_max = max(parsear_episodio(e["name"])[0] for e in eps) + lineas.append(f"📺 {base} — {temp_max} temporadas") + lineas.append("") + + temp_actual = 0 + num_global = 1 + for it in eps: + temp, cap = parsear_episodio(it["name"]) + if temp != temp_actual: + temp_actual = temp + if temp > 0: + lineas.append(f"Temporada {temp}:") + resto = _limpiar_titulo_ep(it["name"][SERIE_EP_RE.search(it["name"]).end():]) \ + if SERIE_EP_RE.search(it["name"]) else it["clean"] + enlace = it.get("enlace") or "" + if temp > 0: + etiqueta = f"S{temp:02d}E{cap:02d}" + else: + etiqueta = it["clean"] + lineas.append(f" {num_global}. {etiqueta} — {resto}") + if enlace: + lineas.append(f" descargar {enlace}") + num_global += 1 + lineas.append("") + + lineas.append("Responde con el numero de episodio para descargar.") + return [lineas] + + +def enlace_realdebrid(rd_id): + """Obtiene el enlace directo de descarga de un torrent RD.""" + import urllib.parse + rd_id = rd_id.split(":", 1)[-1] + tok = config.TORRENTIO_RD_TOKEN + url = f"https://api.real-debrid.com/rest/1.0/torrents/info/{urllib.parse.quote(rd_id)}" + req = urllib.request.Request(url, headers={"Authorization": f"Bearer {tok}"}) + with urllib.request.urlopen(req, timeout=30) as r: + info = json.loads(r.read().decode("utf-8")) + links = info.get("links") or [] + return links[0] if links else None + + +def generar_novedades(items=None): + """Devuelve listado de novedades recientes.""" + if items is None: + items = fetch_catalogo() + normales, _ = separar_adultos(items) + buenos = [it for it in normales if it["buena_calidad"]] + buenos.sort(key=lambda x: (int(x["year"] or 0), x["clean"] or ""), + reverse=True) + return buenos[:20] + + +if __name__ == "__main__": + import sys as _sys + import os as _os + try: + _os.environ.setdefault("PYTHONIOENCODING", "utf-8") + _sys.stdout.reconfigure(encoding="utf-8", errors="replace") + except Exception: + pass + + if len(_sys.argv) < 2: + print("Uso:") + print(" python videoclub_buscador.py pelicula ") + print(" python videoclub_buscador.py serie ") + print(" python videoclub_buscador.py novedades") + _sys.exit(1) + + cmd = _sys.argv[1] + arg = " ".join(_sys.argv[2:]) if len(_sys.argv) > 2 else "" + + if cmd == "pelicula": + res = buscar_peliculas(arg) + for line in formatear_peliculas(res): + print(line) + elif cmd == "serie": + res = buscar_series(arg) + for line in formatear_series(res): + print(line) + elif cmd == "novedades": + res = generar_novedades() + for i, it in enumerate(res, 1): + y = f" ({it['year']})" if it["year"] else "" + print(f"{i}. {it['clean']}{y}") + else: + print(f"Comando desconocido: {cmd}") diff --git a/vigilancia/pi_bot.py b/vigilancia/pi_bot.py index 92d69ae..b77b67d 100644 --- a/vigilancia/pi_bot.py +++ b/vigilancia/pi_bot.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 import os import subprocess +import sys import threading import time import urllib.parse @@ -182,23 +183,14 @@ def procesar(texto, chat_id): procesar_pelis(chat_id) elif t in ("series", "/series"): procesar_series(chat_id) + elif t.startswith("pelicula ") or t.startswith("/pelicula "): + nombre = texto.split(" ", 1)[1].strip() + procesar_buscador_pelicula(nombre, chat_id) elif t.startswith("serie ") or t.startswith("/serie "): nombre = texto.split(" ", 1)[1].strip() - try: - import pelis - except Exception as e: - log(f"serie import error: {e}") - enviar("❌ No se pudo cargar el modulo pelis", chat_id) - return - enviar("🔎 Buscando la serie en el catálogo...", chat_id) - try: - mensajes, encontrada = pelis.buscar_serie(nombre) - except Exception as e: - log(f"serie buscar error: {e}") - enviar(f"❌ Error consultando el catálogo: {e}", chat_id) - return - for m in mensajes: - enviar(m, chat_id) + procesar_buscador_serie(nombre, chat_id) + elif t in ("novedades", "/novedades"): + procesar_novedades(chat_id) elif t in ("ayuda", "/ayuda", "help", "/help"): enviar("Comandos:\n" "estado — estado de la Pi\n" @@ -207,9 +199,9 @@ def procesar(texto, chat_id): "alarma <mensaje> — secuencia completa (sirena x3)\n" "youtube <URL> — reproduce YouTube y apaga al terminar\n" "descargar <enlace> — añade a Download Station del NAS\n" - "pelis — novedades en castellano con comando listo\n" - "series — series en castellano con comando listo\n" - "serie <nombre> — temporadas/capitulos de una serie con enlaces\n" + "pelicula <nombre> — buscar pelicula y descargar\n" + "serie <nombre> — buscar serie con temporadas/capitulos\n" + "novedades — ultimas novedades del catalogo\n" "panorama — fotos de las cámaras\n" "limpieza — limpia procesos atascados de la Pi\n" "reboot — reinicia la Pi (necesita confirmar con /confirmar-reboot)\n" @@ -311,6 +303,99 @@ def procesar_pelis(chat_id): threading.Timer(300, borrar, args=(chat_id, mid)).start() +def procesar_buscador_pelicula(nombre, chat_id): + """Busca peliculas por nombre y muestra resultados numerados.""" + try: + sys.path.insert(0, os.path.join(BASE, "..", "videoclub")) + import videoclub_buscador as vcb + except Exception as e: + log(f"videoclub_buscador import error: {e}") + enviar("❌ No se pudo cargar el modulo videoclub", chat_id) + return + enviar(f"🔎 Buscando {nombre} en el catálogo...", chat_id) + try: + resultados = vcb.buscar_peliculas(nombre) + mensajes = vcb.formatear_peliculas(resultados) + except Exception as e: + log(f"buscador pelicula error: {e}") + enviar(f"❌ Error consultando el catálogo: {e}", chat_id) + return + for m in mensajes: + enviar(m, chat_id) + if resultados: + log(f"BUSCADOR pelis '{nombre}': {len(resultados)} resultados") + + +def procesar_buscador_serie(nombre, chat_id): + """Busca series por nombre y muestra temporadas/capitulos numerados.""" + try: + sys.path.insert(0, os.path.join(BASE, "..", "videoclub")) + import videoclub_buscador as vcb + except Exception as e: + log(f"videoclub_buscador import error: {e}") + enviar("❌ No se pudo cargar el modulo videoclub", chat_id) + return + enviar(f"🔎 Buscando serie {nombre} en el catálogo...", chat_id) + try: + grupos = vcb.buscar_series(nombre) + mensajes = vcb.formatear_series(grupos) + except Exception as e: + log(f"buscador serie error: {e}") + enviar(f"❌ Error consultando el catálogo: {e}", chat_id) + return + for m in mensajes: + enviar(m, chat_id) + if grupos: + total_eps = sum(len(v) for v in grupos.values()) + log(f"BUSCADOR series '{nombre}': {len(grupos)} series, {total_eps} capitulos") + + +def procesar_novedades(chat_id): + """Muestra las ultimas novedades del catalogo.""" + try: + sys.path.insert(0, os.path.join(BASE, "..", "videoclub")) + import videoclub_buscador as vcb + except Exception as e: + log(f"videoclub_buscador import error: {e}") + enviar("❌ No se pudo cargar el modulo videoclub", chat_id) + return + enviar("🎬 Consultando ultimas novedades...", chat_id) + try: + items = vcb.generar_novedades() + except Exception as e: + log(f"novedades error: {e}") + enviar(f"❌ Error consultando el catálogo: {e}", chat_id) + return + if not items: + enviar("No hay novedades recientes.", chat_id) + return + lineas = [f"🎬 Ultimas novedades ({len(items)}):", ""] + for i, it in enumerate(items, 1): + y = f" ({it['year']})" if it["year"] else "" + tipo = "📺" if it["tipo"] == "serie" else "🎬" + idioma = "cast." if it.get("castellano") else "" + enlace = it.get("enlace") or "" + lineas.append(f"{tipo} {i}. {it['clean']}{y} {idioma}") + if enlace: + lineas.append(f" descargar {enlace}") + texto = "\n".join(lineas) + # Trocear si es muy largo + CHUNK = 3500 + partes = [] + actual = [] + long = 0 + for linea in lineas: + if actual and long + len(linea) + 1 > CHUNK: + partes.append("\n".join(actual)) + actual, long = [], 0 + actual.append(linea) + long += len(linea) + 1 + if actual: + partes.append("\n".join(actual)) + for parte in partes: + enviar(parte, chat_id) + + def monitor_temperatura(): while True: time.sleep(300)