From 1d6f2d598ce723e50fe0439b4dd0c1f113086a57 Mon Sep 17 00:00:00 2001 From: Denozordec Date: Thu, 8 Oct 2026 14:41:40 +0700 Subject: [PATCH] =?UTF-8?q?chore(test):=20=D1=80=D0=B0=D0=B7=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D0=BD=D1=83=D1=82=D1=8C=20=D0=B8=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D0=B8=D1=82=D1=8C=20=D0=BF=D0=BE=D1=8F=D1=81?= =?UTF-8?q?=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=BE=D0=B2=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=B0=20=D0=BD=D0=B0=20=D1=81=D1=82=D0=B5=D0=BD=D0=B4?= =?UTF-8?q?=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/ux-ui-external-acceptance.md | 12 +++- docs/ux-ui-plan.md | 6 +- docs/ux-ui-progress.md | 14 +++- docs/ux-ui-stage-12.md | 12 +++- docs/ux-ui-test-server.md | 16 ++++- ...owser-outbox-retry-b55588f-2026-10-08.json | 60 ++++++++++++++++++ .../deploy-browser-b55588f-2026-10-08.json | 40 ++++++++++++ .../deployed-frontend-b55588f-2026-10-08.json | 48 ++++++++++++++ ...checkpoint-b55588f-real-320-2026-10-08.png | Bin 0 -> 37620 bytes ...ox-retry-explained-real-320-2026-10-08.png | Bin 0 -> 36073 bytes 10 files changed, 198 insertions(+), 10 deletions(-) create mode 100644 docs/ux-ui/acceptance/browser-outbox-retry-b55588f-2026-10-08.json create mode 100644 docs/ux-ui/acceptance/deploy-browser-b55588f-2026-10-08.json create mode 100644 docs/ux-ui/acceptance/deployed-frontend-b55588f-2026-10-08.json create mode 100644 docs/ux-ui/screens/outbox-retry-checkpoint-b55588f-real-320-2026-10-08.png create mode 100644 docs/ux-ui/screens/outbox-retry-explained-real-320-2026-10-08.png diff --git a/docs/ux-ui-external-acceptance.md b/docs/ux-ui-external-acceptance.md index c4017e38..f60cb0af 100644 --- a/docs/ux-ui-external-acceptance.md +++ b/docs/ux-ui-external-acceptance.md @@ -1,6 +1,6 @@ # UX/UI: протокол внешней приёмки 12.5 -Статус на2026-10-08: backend8782054/frontendf194e72, backend healthy. PG-1/2/3/4/5 приняты в описанных границах, PG-6 integrated для одного isolated instance, PG-7 real JWT/processcounts и browser restore passed. PG-8 real PG/native и browser unknown→history done приняты с fault injection после настоящего COMMIT. ROS-8/9 real API/SQL/native приняты в границах12.5.23; browser pair/duration change и delete приняты в12.5.24. ROS-2 authentication failure принят в12.5.25. PortalSSO, физический TCP disconnect, мультиэкземпляры и остальные ROS/Q/интеграции остаются открытыми. [Паспорт](ux-ui-test-server.md), [журнал](ux-ui-progress.md). +Статус на2026-10-08: backend8782054/frontendb55588f, backend healthy. Browser retry/checkpoint на реальном HTTP/PG принят в границах12.5.43–45; Telegram sender responses подменены, реальная доставка не проверена. PG-1/2/3/4/5 приняты в описанных границах, PG-6 integrated для одного isolated instance, PG-7 real JWT/processcounts и browser restore passed. PG-8 real PG/native и browser unknown→history done приняты с fault injection после настоящего COMMIT. ROS-8/9 real API/SQL/native приняты в границах12.5.23; browser pair/duration change и delete приняты в12.5.24. ROS-2 authentication failure принят в12.5.25. PortalSSO, физический TCP disconnect, мультиэкземпляры и остальные ROS/Q/интеграции остаются открытыми. [Паспорт](ux-ui-test-server.md), [журнал](ux-ui-progress.md). ## Паспорт стенда @@ -263,3 +263,13 @@ GET outbox: anonymous, неверные issuer/signature, expired и malformed Применён skill ReUI и MCP get_audit_checklist: композиция, установленные primitives, base-nova и semantic tokens сохранены; новых API/стилей/компонентов нет. Ошибка объявляется существующим role=alert, реальные секреты не добавлены; подтверждение риска и управление фокусом покрыты профильными тестами. Изменение пока локальное, удалённый frontend остаётсяf194e72. Следующий12.5.45 — production Docker build нового frontend, обновление тестового стенда и повтор сценария HTTP500 после COMMIT на отдельной БД. Локальный коммит без push. + +## 12.5.45 — production frontend с пояснением неизвестного исхода (2026-10-08) + +[Развёртывание](ux-ui/acceptance/deployed-frontend-b55588f-2026-10-08.json): чистый frontend Git archive из b55588f29be0de02639bc795801e55b89f03aad7, SHA256 f18be60c1dc8c581e26040003d2c655ee2ae1da73044d761b166ac10dca71a7e совпал после передачи. Docker context повторяет frontend staging main workflow, workspaces ограничены packages; production build, полный TypeScript-check внутри образа и export завершились с exit0. Образ mmapp-test/frontend:ux-b55588f, imageId sha256:c3ce5aa8a3dbed7eaab23178cecbce2b2c1a27c31678590b54bc27db5820e5b1; исходный frontendf194e72 сохранён для отката. .env изменён только MMAPP_IMAGE_TAG, backend8782054 прежний и healthy, frontend опубликован исключительно127.0.0.1:3000. Git/image push не выполнялся. + +[Повтор реального browser retry](ux-ui/acceptance/browser-outbox-retry-b55588f-2026-10-08.json): новый production frontend и прежний backend на отдельной PostgreSQL БД, без browser HTTP mocks. POST200/500, второй ответ потерян управляемым исключением после фактического COMMIT. Новый текст прямо в диалоге объясняет неподтверждённый исход и необходимость проверки; checkbox/форма/блокировка сохранены. Обе fixture pending/version1/retry_count0; история0, Telegram calls0. Refresh/reload сохраняют checkpoint, явная проверка снимает его без нового POST. Панель/диалог320px помещаются, JS errors0. [Диалог](ux-ui/screens/outbox-retry-explained-real-320-2026-10-08.png) и [checkpoint](ux-ui/screens/outbox-retry-checkpoint-b55588f-real-320-2026-10-08.png) просмотрены. + +[Smoke основной схемы](ux-ui/acceptance/deploy-browser-b55588f-2026-10-08.json): dashboard, servers, uptime speed, settings, filters, alerts возвращают200,320px fit, JS errors0/API errors0. Независимый контроль основной БД до/после совпадает: servers2/enabled2, speedHistory9, retention14, migrations9. Новые native тесты или сообщения не запускались. Тестовые контейнеры/сеть/туннель3018 удалены, backend fixture завершился exit0, независимый SQL подтвердил ноль его outbox-строк. Основной туннель3000 сохранён. + +Границы: управляемый HTTP500 после COMMIT вместо физического сетевого разрыва; синтетические записи и AUTH_REQUIRED=false в изолированном browser стенде. Реальные Telegram доставка/чат, Portal SSO и multi-instance остаются отдельной приёмкой. Уточнены текущие версии и устаревшая сводка плана/паспорта, исторические записи сохранены. Следующий12.5.46 — браузерные права очереди с настоящими JWT. Локальный коммит без push. diff --git a/docs/ux-ui-plan.md b/docs/ux-ui-plan.md index b6976313..df5585e9 100644 --- a/docs/ux-ui-plan.md +++ b/docs/ux-ui-plan.md @@ -1,14 +1,14 @@ # План реализации UX/UI по пятичасовым окнам -Актуальное продолжение 2026-10-08: 12.5.44 уточнил ошибку неизвестного исхода в диалоге Telegram retry: пояснение блокировки и необходимости проверки очереди/чата видно сразу вместе с деталями API. Подтверждённые отказы сохраняют прежнее поведение. Playwright8/8, scoped typecheck и lint passed, ReUI checklist проверен. Следующий 12.5.45 — сборка/развёртывание frontend и повтор реального HTTP/PG сценария. Пока runtime backend8782054/frontendf194e72 прежний; 12.5 открыт. +Актуальное продолжение 2026-10-08: 12.5.45 собрал и развернул frontendb55588f с пояснением неподтверждённого retry. Production build/full TypeScript passed; реальные browser HTTP/PG POST200/500, checkpoint/reload/320px passed; шесть основных экранов без JS/API ошибок. Backend8782054 и контрольные данные основной БД сохранены. Следующий12.5.46 — браузерные права очереди с настоящими JWT. Telegram доставка, Portal SSO и другие внешние ограничения остаются открытыми. Общий план проекта MikrotikManager. Основан на согласованном плане из задачи; точка продолжения обновлена 2026-10-08. Источник фактического прогресса, проверок и ограничений — [журнал реализации](ux-ui-progress.md). Этот документ задаёт объём и критерии завершения, журнал фиксирует результат. ## Актуальная точка продолжения — 2026-10-08 -Этапы0–11 завершены в описанных локальных границах. Этап12 остаётся открытым. На161.104.46.222 развёрнуты backend/frontend8782054; два CHR подключены. PG backup/restore/rollback, single-instance quiescence, JWT/RBAC и browser restore приняты в границах журнала. PG-8 проверен с настоящими PG/native и введённой после COMMIT ошибкой подтверждения; новый browser UI сохраняет snapshot и сверяет историю. ROS-8/9 API/SQL/native приняты в описанных границах. Browser-смена пары/длительности и удаление во время native-теста приняты в12.5.24. Реальный отказ bandwidth-аутентификации принят в12.5.25. 12.5.26 обнаружил и локально исправил30s timeout Next proxy. Исправленный frontendaa7dbdf развёрнут и проверен в12.5.27; backend8782054 прежний. ROS-3 reverse2→1/native-afterping принят в12.5.28; forward timeout открыт. Форма frontendf194e72 проверена без моков и развёрнута в12.5.29. Read-only диагностика12.5.30 не установила причину. 12.5.31 выявил текущий отказ авторизацииCHR2 вCLI/REST/SSH. В12.5.32 пользователь восстановил доступCHR2; dashboard/native1→2 passed, блокировка снята. TCP receive/both подтверждены после восстановлениядоступа в12.5.33; UDP transmit3s/API/history/UI подтверждены в12.5.34; Q-6productionenqueue/PG race принят в12.5.35; Q-4 realHTTP/PG race принят в12.5.36; Q-1productionclaim/PG/interceptedsender принят в12.5.37; 12.5.38 подтвердил SQL settlement rollback и сохранение sent после ошибки подтверждения COMMIT; 12.5.39 подтвердил unknown/processing без автоматического повтора при неопределённом ответе; 12.5.40 подтвердил задержку повтора и failed после исчерпания попыток при явном отказе; 12.5.41 подтвердил браузерные состояния очереди на HTTP/PG; 12.5.42 подтвердил production JWT/RBAC очереди на PostgreSQL; 12.5.43 подтвердил браузерный retry и checkpoint при потере HTTP receipt; 12.5.44 добавил ясное пояснение в диалоге, проверено локально; следующий 12.5.45 — production frontend build/deploy и реальная HTTP/PG проверка. [Протокол](ux-ui-external-acceptance.md) и [журнал](ux-ui-stage-12.md) сохраняют точные доказательства и ограничения. +Этапы0–11 завершены в описанных локальных границах. Этап12 открыт. На тестовом сервере161.104.46.222 работают backend8782054/frontendb55588f и два CHR. Внешние проверки подтвердили PG backup/restore/rollback, остановку фоновой работы для одного экземпляра, API JWT/RBAC и браузерные состояния восстановления. Native TCP/UDP speed, история и UI проверены в границах журнала; доступ ко второму CHR восстановлен пользователем. Очередь Telegram проверена на реальном PG: dedupe, конкурентный claim, retry/version, ошибки сохранения и неопределённый исход; ответы отправителя подменялись, реальной доставки это не доказывает. Блоки12.5.43–45 подтвердили browser retry/checkpoint и развернули понятное пояснение HTTP500. Следующий12.5.46 — браузерные права очереди с настоящими JWT. Реальная Telegram доставка, Portal SSO, физический TCP disconnect, multi-instance и остальные профильные сетевые сценарии остаются открытыми. [Протокол](ux-ui-external-acceptance.md) и [журнал](ux-ui-stage-12.md) содержат доказательства и ограничения. -Реальные pg_dump/pg_restore, PG rollback и остановка UDP worker требуют внешней приёмки. Датированные продолжения ниже — история; точный следующий шаг также указан в начале [журнала](ux-ui-progress.md). +Выполненные внешние сценарии не заменяют приёмку оставшихся интеграций и условий эксплуатации. Датированные продолжения ниже — история; точный следующий шаг указан в начале [журнала](ux-ui-progress.md). ## Цель и обязательные требования diff --git a/docs/ux-ui-progress.md b/docs/ux-ui-progress.md index ccc54a1e..032143dc 100644 --- a/docs/ux-ui-progress.md +++ b/docs/ux-ui-progress.md @@ -1,6 +1,6 @@ # UX/UI: журнал реализации -Актуальное продолжение 2026-10-08: 12.5.44 уточнил ошибку неизвестного исхода в диалоге Telegram retry: пояснение блокировки и необходимости проверки очереди/чата видно сразу вместе с деталями API. Подтверждённые отказы сохраняют прежнее поведение. Playwright8/8, scoped typecheck и lint passed, ReUI checklist проверен. Следующий 12.5.45 — сборка/развёртывание frontend и повтор реального HTTP/PG сценария. Пока runtime backend8782054/frontendf194e72 прежний; 12.5 открыт. +Актуальное продолжение 2026-10-08: 12.5.45 собрал и развернул frontendb55588f с пояснением неподтверждённого retry. Production build/full TypeScript passed; реальные browser HTTP/PG POST200/500, checkpoint/reload/320px passed; шесть основных экранов без JS/API ошибок. Backend8782054 и контрольные данные основной БД сохранены. Следующий12.5.46 — браузерные права очереди с настоящими JWT. Telegram доставка, Portal SSO и другие внешние ограничения остаются открытыми. Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения. Записи расположены от новых к старым; подробная история этапа12 также сохранена в [ux-ui-stage-12.md](ux-ui-stage-12.md). @@ -32,7 +32,17 @@ | 10 | Маршрутизация, диагностика, карта и терминал | Завершён в границах локальной приёмки 2026-10-01; блоки 10.1–10.71, внешние ограничения в 10.71 | | 11А | Пользователи, контейнеры, сертификаты и резервные копии | Завершён в границах локальной приёмки 2026-10-01; 11А.1–11А.33, внешние ограничения в 11А.33 | | 11Б | Оповещения, сбор данных, интеграции, релизы и настройки | Завершён в границах локальной приёмки 2026-10-03; ограничения и evidence в11Б.7 | -| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в описанных границах:12.3.83,main1186/1186,context221/221. Этап остаётся в работе: стенд12.5.1–3 развёрнут,bootstrap/smoke проверены;остальные сценарии12.5 не выполнены. | +| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в границах12.3.83; внешняя12.5 в работе, выполненные блоки1–45 и ограничения ниже. Runtime backend8782054/frontendb55588f. | + +## 12.5.45 — production frontend с пояснением неизвестного исхода (2026-10-08) + +[Развёртывание](ux-ui/acceptance/deployed-frontend-b55588f-2026-10-08.json): чистый frontend Git archive из b55588f29be0de02639bc795801e55b89f03aad7, SHA256 f18be60c1dc8c581e26040003d2c655ee2ae1da73044d761b166ac10dca71a7e совпал после передачи. Docker context повторяет frontend staging main workflow, workspaces ограничены packages; production build, полный TypeScript-check внутри образа и export завершились с exit0. Образ mmapp-test/frontend:ux-b55588f, imageId sha256:c3ce5aa8a3dbed7eaab23178cecbce2b2c1a27c31678590b54bc27db5820e5b1; исходный frontendf194e72 сохранён для отката. .env изменён только MMAPP_IMAGE_TAG, backend8782054 прежний и healthy, frontend опубликован исключительно127.0.0.1:3000. Git/image push не выполнялся. + +[Повтор реального browser retry](ux-ui/acceptance/browser-outbox-retry-b55588f-2026-10-08.json): новый production frontend и прежний backend на отдельной PostgreSQL БД, без browser HTTP mocks. POST200/500, второй ответ потерян управляемым исключением после фактического COMMIT. Новый текст прямо в диалоге объясняет неподтверждённый исход и необходимость проверки; checkbox/форма/блокировка сохранены. Обе fixture pending/version1/retry_count0; история0, Telegram calls0. Refresh/reload сохраняют checkpoint, явная проверка снимает его без нового POST. Панель/диалог320px помещаются, JS errors0. [Диалог](ux-ui/screens/outbox-retry-explained-real-320-2026-10-08.png) и [checkpoint](ux-ui/screens/outbox-retry-checkpoint-b55588f-real-320-2026-10-08.png) просмотрены. + +[Smoke основной схемы](ux-ui/acceptance/deploy-browser-b55588f-2026-10-08.json): dashboard, servers, uptime speed, settings, filters, alerts возвращают200,320px fit, JS errors0/API errors0. Независимый контроль основной БД до/после совпадает: servers2/enabled2, speedHistory9, retention14, migrations9. Новые native тесты или сообщения не запускались. Тестовые контейнеры/сеть/туннель3018 удалены, backend fixture завершился exit0, независимый SQL подтвердил ноль его outbox-строк. Основной туннель3000 сохранён. + +Границы: управляемый HTTP500 после COMMIT вместо физического сетевого разрыва; синтетические записи и AUTH_REQUIRED=false в изолированном browser стенде. Реальные Telegram доставка/чат, Portal SSO и multi-instance остаются отдельной приёмкой. Уточнены текущие версии и устаревшая сводка плана/паспорта, исторические записи сохранены. Следующий12.5.46 — браузерные права очереди с настоящими JWT. Локальный коммит без push. ## 12.5.44 — понятное пояснение неподтверждённого повтора в диалоге (2026-10-08) diff --git a/docs/ux-ui-stage-12.md b/docs/ux-ui-stage-12.md index 07fb5fc6..2ad6b568 100644 --- a/docs/ux-ui-stage-12.md +++ b/docs/ux-ui-stage-12.md @@ -1,6 +1,6 @@ # Этап 12: итоговая приёмка UX/UI -Актуальное продолжение 2026-10-08: 12.5.44 уточнил ошибку неизвестного исхода в диалоге Telegram retry: пояснение блокировки и необходимости проверки очереди/чата видно сразу вместе с деталями API. Подтверждённые отказы сохраняют прежнее поведение. Playwright8/8, scoped typecheck и lint passed, ReUI checklist проверен. Следующий 12.5.45 — сборка/развёртывание frontend и повтор реального HTTP/PG сценария. Пока runtime backend8782054/frontendf194e72 прежний; 12.5 открыт. +Актуальное продолжение 2026-10-08: 12.5.45 собрал и развернул frontendb55588f с пояснением неподтверждённого retry. Production build/full TypeScript passed; реальные browser HTTP/PG POST200/500, checkpoint/reload/320px passed; шесть основных экранов без JS/API ошибок. Backend8782054 и контрольные данные основной БД сохранены. Следующий12.5.46 — браузерные права очереди с настоящими JWT. Telegram доставка, Portal SSO и другие внешние ограничения остаются открытыми. План: [ux-ui-plan.md](ux-ui-plan.md). Фактические результаты: [ux-ui-progress.md](ux-ui-progress.md). Подготовлен после сводных проверок 11Б; завершение каждого блока требует локального коммита без push. @@ -1428,3 +1428,13 @@ GET outbox: anonymous, неверные issuer/signature, expired и malformed Применён skill ReUI и MCP get_audit_checklist: композиция, установленные primitives, base-nova и semantic tokens сохранены; новых API/стилей/компонентов нет. Ошибка объявляется существующим role=alert, реальные секреты не добавлены; подтверждение риска и управление фокусом покрыты профильными тестами. Изменение пока локальное, удалённый frontend остаётсяf194e72. Следующий12.5.45 — production Docker build нового frontend, обновление тестового стенда и повтор сценария HTTP500 после COMMIT на отдельной БД. Локальный коммит без push. + +## 12.5.45 — production frontend с пояснением неизвестного исхода (2026-10-08) + +[Развёртывание](ux-ui/acceptance/deployed-frontend-b55588f-2026-10-08.json): чистый frontend Git archive из b55588f29be0de02639bc795801e55b89f03aad7, SHA256 f18be60c1dc8c581e26040003d2c655ee2ae1da73044d761b166ac10dca71a7e совпал после передачи. Docker context повторяет frontend staging main workflow, workspaces ограничены packages; production build, полный TypeScript-check внутри образа и export завершились с exit0. Образ mmapp-test/frontend:ux-b55588f, imageId sha256:c3ce5aa8a3dbed7eaab23178cecbce2b2c1a27c31678590b54bc27db5820e5b1; исходный frontendf194e72 сохранён для отката. .env изменён только MMAPP_IMAGE_TAG, backend8782054 прежний и healthy, frontend опубликован исключительно127.0.0.1:3000. Git/image push не выполнялся. + +[Повтор реального browser retry](ux-ui/acceptance/browser-outbox-retry-b55588f-2026-10-08.json): новый production frontend и прежний backend на отдельной PostgreSQL БД, без browser HTTP mocks. POST200/500, второй ответ потерян управляемым исключением после фактического COMMIT. Новый текст прямо в диалоге объясняет неподтверждённый исход и необходимость проверки; checkbox/форма/блокировка сохранены. Обе fixture pending/version1/retry_count0; история0, Telegram calls0. Refresh/reload сохраняют checkpoint, явная проверка снимает его без нового POST. Панель/диалог320px помещаются, JS errors0. [Диалог](ux-ui/screens/outbox-retry-explained-real-320-2026-10-08.png) и [checkpoint](ux-ui/screens/outbox-retry-checkpoint-b55588f-real-320-2026-10-08.png) просмотрены. + +[Smoke основной схемы](ux-ui/acceptance/deploy-browser-b55588f-2026-10-08.json): dashboard, servers, uptime speed, settings, filters, alerts возвращают200,320px fit, JS errors0/API errors0. Независимый контроль основной БД до/после совпадает: servers2/enabled2, speedHistory9, retention14, migrations9. Новые native тесты или сообщения не запускались. Тестовые контейнеры/сеть/туннель3018 удалены, backend fixture завершился exit0, независимый SQL подтвердил ноль его outbox-строк. Основной туннель3000 сохранён. + +Границы: управляемый HTTP500 после COMMIT вместо физического сетевого разрыва; синтетические записи и AUTH_REQUIRED=false в изолированном browser стенде. Реальные Telegram доставка/чат, Portal SSO и multi-instance остаются отдельной приёмкой. Уточнены текущие версии и устаревшая сводка плана/паспорта, исторические записи сохранены. Следующий12.5.46 — браузерные права очереди с настоящими JWT. Локальный коммит без push. diff --git a/docs/ux-ui-test-server.md b/docs/ux-ui-test-server.md index 6eedd9ce..9dd586e7 100644 --- a/docs/ux-ui-test-server.md +++ b/docs/ux-ui-test-server.md @@ -1,6 +1,6 @@ # Тестовый сервер UX/UI — 2026-10-08 -Сервер161.104.46.222 предоставлен пользователем для временного тестирования с последующим удалением. Подготовка выполнена по структуре deploy/docker-compose.yml из main. Приложение собрано и запущено. Активный backend source8782054078304f36cc611876af2d17f87b857f60/version1.0.0-test.8782054 healthy. Frontend sourcef194e7269b1e0276f257b3fda28413958907a503/version1.0.0-test.f194e72 обновлён в12.5.29. +Сервер161.104.46.222 предоставлен пользователем для временного тестирования с последующим удалением. Подготовка выполнена по структуре deploy/docker-compose.yml из main. Приложение собрано и запущено. Активный backend source8782054078304f36cc611876af2d17f87b857f60/version1.0.0-test.8782054 healthy. Frontend sourceb55588f29be0de02639bc795801e55b89f03aad7/version1.0.0-test.b55588f обновлён в12.5.45. | Параметр | Проверенное состояние | | --- | --- | @@ -14,7 +14,7 @@ | PostgreSQL | postgres:18-alpine,18.6;mmapp-test-postgres healthy;SELECT version() passed | | Данные | Отдельный Compose project mmapp-test,том mmapp-test_mmapp-pgdata и каталог ./data | | Доступ | PostgreSQL не публикуется;frontend3000/backend8000 привязаны к127.0.0.1 после запуска | -| Образы приложения | mmapp-test/backend:ux-8782054 и mmapp-test/frontend:ux-f194e72;запущены | +| Образы приложения | mmapp-test/backend:ux-8782054 и mmapp-test/frontend:ux-b55588f;запущены | Compose SHA256:3052bd6ab5d9865f97605cebfb5ff27a4410cd3357b81153a65a87fb7c92582f. OptionalBACKEND_IMAGE_TAG позволяетобновлятьbackendотдельно. Локальный и удалённый файлы совпали. Шаблоны: [Compose](../deploy/docker-compose.test.yml), [env без секретов](../deploy/env.test.example). @@ -47,7 +47,7 @@ ssh -N -L 3000:127.0.0.1:3000 -L 8000:127.0.0.1:8000 root@161.104.46.222 [Первый smoke](ux-ui/acceptance/test-server-smoke-2026-10-07.json) обнаружил PostgreSQL timestamp в outer sampledAt Internet path. Исправлено producer ISO преобразование,без ослабленияfrontend. [Итоговый smoke](ux-ui/acceptance/test-server-smoke-fixed-2026-10-07.json):3экрана200,54чтенияAPI200,безJSerrors,320px fits,Internet path подтверждён. HTTP-моков нет. Первое повторное ожидание подписи свежести исправлено раскрытием штатного блока;ошибка данных послеpatch отсутствует. [Дашборд320px](ux-ui/screens/test-server-dashboard-320-2026-10-07.png) просмотрен. -Активные image IDs: +Image IDs при первом smoke12.5.3 (исторический снимок): - backend: sha256:57878e320b7272edcc6efe1f6f5c140295510c85cb79b8ca12a900f7654cd917 - frontend: sha256:bfba2785b33a72965a029a3692178ba69c80eca75a12934c1dcc04c7970db53f @@ -271,3 +271,13 @@ GET outbox: anonymous, неверные issuer/signature, expired и malformed Применён skill ReUI и MCP get_audit_checklist: композиция, установленные primitives, base-nova и semantic tokens сохранены; новых API/стилей/компонентов нет. Ошибка объявляется существующим role=alert, реальные секреты не добавлены; подтверждение риска и управление фокусом покрыты профильными тестами. Изменение пока локальное, удалённый frontend остаётсяf194e72. Следующий12.5.45 — production Docker build нового frontend, обновление тестового стенда и повтор сценария HTTP500 после COMMIT на отдельной БД. Локальный коммит без push. + +## 12.5.45 — production frontend с пояснением неизвестного исхода (2026-10-08) + +[Развёртывание](ux-ui/acceptance/deployed-frontend-b55588f-2026-10-08.json): чистый frontend Git archive из b55588f29be0de02639bc795801e55b89f03aad7, SHA256 f18be60c1dc8c581e26040003d2c655ee2ae1da73044d761b166ac10dca71a7e совпал после передачи. Docker context повторяет frontend staging main workflow, workspaces ограничены packages; production build, полный TypeScript-check внутри образа и export завершились с exit0. Образ mmapp-test/frontend:ux-b55588f, imageId sha256:c3ce5aa8a3dbed7eaab23178cecbce2b2c1a27c31678590b54bc27db5820e5b1; исходный frontendf194e72 сохранён для отката. .env изменён только MMAPP_IMAGE_TAG, backend8782054 прежний и healthy, frontend опубликован исключительно127.0.0.1:3000. Git/image push не выполнялся. + +[Повтор реального browser retry](ux-ui/acceptance/browser-outbox-retry-b55588f-2026-10-08.json): новый production frontend и прежний backend на отдельной PostgreSQL БД, без browser HTTP mocks. POST200/500, второй ответ потерян управляемым исключением после фактического COMMIT. Новый текст прямо в диалоге объясняет неподтверждённый исход и необходимость проверки; checkbox/форма/блокировка сохранены. Обе fixture pending/version1/retry_count0; история0, Telegram calls0. Refresh/reload сохраняют checkpoint, явная проверка снимает его без нового POST. Панель/диалог320px помещаются, JS errors0. [Диалог](ux-ui/screens/outbox-retry-explained-real-320-2026-10-08.png) и [checkpoint](ux-ui/screens/outbox-retry-checkpoint-b55588f-real-320-2026-10-08.png) просмотрены. + +[Smoke основной схемы](ux-ui/acceptance/deploy-browser-b55588f-2026-10-08.json): dashboard, servers, uptime speed, settings, filters, alerts возвращают200,320px fit, JS errors0/API errors0. Независимый контроль основной БД до/после совпадает: servers2/enabled2, speedHistory9, retention14, migrations9. Новые native тесты или сообщения не запускались. Тестовые контейнеры/сеть/туннель3018 удалены, backend fixture завершился exit0, независимый SQL подтвердил ноль его outbox-строк. Основной туннель3000 сохранён. + +Границы: управляемый HTTP500 после COMMIT вместо физического сетевого разрыва; синтетические записи и AUTH_REQUIRED=false в изолированном browser стенде. Реальные Telegram доставка/чат, Portal SSO и multi-instance остаются отдельной приёмкой. Уточнены текущие версии и устаревшая сводка плана/паспорта, исторические записи сохранены. Следующий12.5.46 — браузерные права очереди с настоящими JWT. Локальный коммит без push. diff --git a/docs/ux-ui/acceptance/browser-outbox-retry-b55588f-2026-10-08.json b/docs/ux-ui/acceptance/browser-outbox-retry-b55588f-2026-10-08.json new file mode 100644 index 00000000..0874c0f5 --- /dev/null +++ b/docs/ux-ui/acceptance/browser-outbox-retry-b55588f-2026-10-08.json @@ -0,0 +1,60 @@ +{ + "date": "2026-10-08", + "backendSource": "8782054", + "frontendSource": "b55588f", + "database": "mmapp_acceptance_20261007", + "browserHttpMocks": false, + "sqlFixture": true, + "posts": [ + { + "status": 200, + "body": { + "expectedVersion": 0, + "acknowledgedDuplicateRisk": true + } + }, + { + "status": 500, + "body": { + "expectedVersion": 0, + "acknowledgedDuplicateRisk": true + } + } + ], + "confirmedQueueCaptionDoesNotClaimDelivery": true, + "unconfirmedReceipt": { + "httpStatus": 500, + "actualCommittedRows": [ + { + "id": "acceptance-browser-retry-1791445074699-confirmed", + "status": "pending", + "resolution_version": 1, + "retry_count": 0 + }, + { + "id": "acceptance-browser-retry-1791445074699-unconfirmed", + "status": "pending", + "resolution_version": 1, + "retry_count": 0 + } + ], + "dialogPreserved": true, + "riskCheckboxPreserved": true, + "retryDisabled": true, + "checkpointSurvivesRefreshAndReload": true, + "explicitReviewClearsCheckpointWithoutPost": true, + "unknownOutcomeExplainedInsideDialog": true + }, + "historyRows": 0, + "externalSenderCalls": 0, + "retryPosts": 2, + "lostReceipts": 1, + "mobileFits": true, + "mobileDialogFits": true, + "pageErrors": [], + "limits": [ + "Synthetic queue rows; scheduler stopped; no real Telegram send or chat check", + "Backend wrapper throws after actual retry transaction committed: real HTTP500, not physical network disconnect", + "Auth false on isolated loopback stand; Portal SSO not tested" + ] +} diff --git a/docs/ux-ui/acceptance/deploy-browser-b55588f-2026-10-08.json b/docs/ux-ui/acceptance/deploy-browser-b55588f-2026-10-08.json new file mode 100644 index 00000000..20f8f295 --- /dev/null +++ b/docs/ux-ui/acceptance/deploy-browser-b55588f-2026-10-08.json @@ -0,0 +1,40 @@ +{ + "date": "2026-10-08", + "backendSource": "8782054078304f36cc611876af2d17f87b857f60", + "frontendSource": "b55588f29be0de02639bc795801e55b89f03aad7", + "httpMocks": false, + "pages": [ + { + "path": "/dashboard", + "status": 200, + "mobileFits": true + }, + { + "path": "/servers", + "status": 200, + "mobileFits": true + }, + { + "path": "/uptime?tab=speed", + "status": 200, + "mobileFits": true + }, + { + "path": "/settings", + "status": 200, + "mobileFits": true + }, + { + "path": "/filters", + "status": 200, + "mobileFits": true + }, + { + "path": "/alerts", + "status": 200, + "mobileFits": true + } + ], + "pageErrors": [], + "badApiResponses": [] +} diff --git a/docs/ux-ui/acceptance/deployed-frontend-b55588f-2026-10-08.json b/docs/ux-ui/acceptance/deployed-frontend-b55588f-2026-10-08.json new file mode 100644 index 00000000..a4802351 --- /dev/null +++ b/docs/ux-ui/acceptance/deployed-frontend-b55588f-2026-10-08.json @@ -0,0 +1,48 @@ +{ + "date": "2026-10-08", + "frontendSource": "b55588f29be0de02639bc795801e55b89f03aad7", + "backendSource": "8782054078304f36cc611876af2d17f87b857f60", + "frontendImage": "mmapp-test/frontend:ux-b55588f", + "frontendImageId": "sha256:c3ce5aa8a3dbed7eaab23178cecbce2b2c1a27c31678590b54bc27db5820e5b1", + "backendImageId": "sha256:7862c9b40a934914110da58a814d3b4770e923016b87f36f9252f8050961e79a", + "backendHealthy": true, + "health": { + "status": "ok", + "timestamp": "2026-10-08T07:39:25.082Z", + "version": "1.0.0-test.8782054", + "eventLoopDelayMs": 20, + "flowWorker": { + "alive": false, + "bound": false, + "pendingSize": 0, + "dropped": 0, + "packetsReceived": 0 + } + }, + "controlBefore": { + "servers": 2, + "enabledServers": 2, + "speedHistory": 9, + "retentionDays": 14, + "migrations": 9 + }, + "controlAfter": { + "servers": 2, + "enabledServers": 2, + "speedHistory": 9, + "retentionDays": 14, + "migrations": 9 + }, + "controlsUnchanged": true, + "frontendPorts": { + "3000/tcp": [ + { + "HostIp": "127.0.0.1", + "HostPort": "3000" + } + ] + }, + "buildExit": 0, + "sourceArchiveSha256": "f18be60c1dc8c581e26040003d2c655ee2ae1da73044d761b166ac10dca71a7e", + "push": false +} \ No newline at end of file diff --git a/docs/ux-ui/screens/outbox-retry-checkpoint-b55588f-real-320-2026-10-08.png b/docs/ux-ui/screens/outbox-retry-checkpoint-b55588f-real-320-2026-10-08.png new file mode 100644 index 0000000000000000000000000000000000000000..520c0f8bbf41e4eac392d5c5acd58b663ed084cd GIT binary patch literal 37620 zcmb@uV{j%>*Df4qVw)4&b|$tawkNi6$F_}$Ccb0awr$(~^1P?s`p%D2^`0N+M|Z8- zUAueL>fO8dwXSRJa7B3u1Xx^H5D*XqDM?Xf5D-w}@1x}h*mp~Qn6C~92r`J2sPJ$1 ztn+LbAvE>R=Ukm|D9I$!KR@!Ighe1A#SmZv!eHrtuN(Ey2Vm0bR@Q1wRW9bLX@8Ut z(5p2?xF$di--;%B#r?Be1gO>(bbDTm!Y*kb5n zi2_ju%s_u$s{hY^kk3d6c>m*V9CW7VrOnUt6;>((g&elNFPFzf8RM`&*4Eaxwul2` z!^6iXti%HYccmmG-w(@MzCR6q;)S9>hfS8gfXo>&sipkx#>Q6P&`|pF8-vO6YV+e& zGYuP$AG{+27q_so^4lFgq=@kF(iU#?x`0P>$kOdRLf z96XZN5c*uS^P}EEFyhYCR2S>7ViQpJ0vPRt?k3VM7e-!JmD&`8_ZPfAcQ&P-9Y(ht za62@6)qoG?=mnjc`|JHc@E!liMV{~@!Ios1U&lVj(f)4ReT66W@pD$AY<)Ay*#!zz^jIv zINC)reYcNjHB6@YTNw=u^+WCRou%$vpSzlhz}$EeYWGCF7yWUpTc3ttHrtG+{7*6g z+UK?mlaWYTp6E}t26kp)q<@+-u7!1AAJ-U6Mpjo;__LOi#0`5|_N!Aa8M{BI!7c^p z;9_#d>!4hUIF*~GR`SoW8zB34s$V=d$cim(lc`a0kO?2Nn{>5D5}Nu)y-L%Pv^!&j zw7h%`t%uG6@ESZ+n>p>m(hL7Suip5aaTcjrhW~@hU9SA2->$PFSlP_Wu)~kooXO)m ziRgidciZTr&rNMcGu3RbJ&Yw0_K%O?;#H;SDY#|mv2w#3z4~suvJ_4t9S(`HlWV_R z;XRAW#iMjh&2HF5`{AKCPU%BfcW0zSrc0I%d;`>XVaCGyk06CX5IIMdMe|43xb}85 zBxd7V?sF@>0c$aQQ^?nEGwXO6te*7X(iRmg_vz(!VvtGDV(_7v6`gm*mF1O~Nqj1U zh7TZ-o|VFR_|EK3vMlVePIZ`zMb0`mTBo0~Cg1Uwg(V&XdCykrKBOEH}(xbCWPB z^L(CP=vLYnMG2eogkm=?yGB&cr%+EGuG}+fKwy(=WY<4cBPCEBARrnEYQiX zW5N$X(`Z^H=;{k1FQ$+eA~on#Jsx9`1YdrGr6 zZx1Fw!vY5EIB}PcVHNK<^|;@L2no_{cF~*38QFZc!fv*FeB;noI!k8#K{uCytM&x# zD}HfyHc^mH`|(i*>lhTYz|D;SZT#>K2%}>=`^&pNv5S-e?F{;Sy_csIYiFd{W;w&8 zr_odb2%vVYVxB@e78+n#qAQ!r;P6s58w?(gy4QEJ(Z#KBvcu$?!0;;nZNjjYgY;F& zSIhK5V?Dzbqkaze9EBV0CT(XFvD6dmtf=DstU z%jb0)-e}c&u13kks=TM8=L&h)#DFn}12##C^nAH?gF5xRo}*fuNN~D=y#_rjKpT%| z+P%Ad&VCv7-JeE&X=3Mi!`GAXum?>9b?~7x1@vzh413Da-tmxav4zLWEyv|H}<9L z);vl5nh5+S*JkH6h+llqTu{ID>afxC>#nCKUI|U`#b}Q6C2PZ*3kj6I|%^FF_ahv^(B&Y~q`@i?eoj)$hfCcvtZ(rAW}_;@!*Z@B;dG z2`#0tN=vd!ejI*^@%YJTEg~W@+}P*UNx%iIqD%bz5tz_0cJivlIT?l<0kSbjV2sE7 zra!3REJznu_hW=chszy0?@@T}B#0)pkOa*vrtPclL{a`dq<6+p54oL_P>~m?kR*Hd z>Oo(ul(ha>C^@RSF0T^%Jg30jj|@1( zJx+3$Qj0Hex>mbm(Ujlp%xhxWp91KU@;5{WsS10J0t~LK73W_?#XD7>*I$QO6KhQ% zBOhla0EO2AkmF2SB$O#~bC?}L^jL1GNS)-WPHjNONMP?89akNWo8*^~_i$=Bb$W|f z@A`N__*txLdt)6f6HK1=N@OgdRL|$X_mxOvtVsZ%a26?;)v*)Y_W*hCC;&!#V54pd zZdmU!#%F+LM8Q`Nho%lOWzi5RMEU~S*}zR0;}NN@%a|eOGG1rsqy`RaDC7mf9W+-$ z9^L4rDZ80jAPPFz+d?_XOC5}3D>u~TSFcIQ4AHn&D|x(`IAk?O8eRGvdn1;iawxrU zx^d)h)gyHP(wei!>fbRpkYILMfo6817Z~gNYeq}5Pm*jSD;VA^=m^ei4X{A%u`bDs zSWTFr=w4QRk975HzGoGQUrL$18@Mb;NBjz`{g(d#eq8|j`>scPo;n|>Y0eG(;;ERo zu6?DpKK!?vR3h3RSc`_Nb{s>v+U=IZtBpWo6h6RLMDQDiU}pzV%OU-CFI~g8nbm9c zvixKv)slWN#;u{a`=tM6K1THT{h$=bH@HC-3&~nlk!GAH4FQX?0V?apM(dnQ!upFZkYxXaw>t_&UH{PL%+VgZs5q^ddt^Z!d+cU^O|=$xY~CD@#yyC5^i=XcANn$ zX75F#>XgPc2V$A4gh1hst$2p9x1zd0*E-H_?cmy~!(h|Na$-sZk(97tC5ze{#MRC6 zp7LTfZNuS9&j8r?ig(x-YV`)fb~WYA)G6cOO7wFHzhVrkO&2}~wq*5&B$yzA*R^TM zOnTHGKLo6<$E@IJvjRk&w_Zp;K_brHqlK9|kqo^3H)>o406)vAL^p1e<512qz^2Q` zeXxt!-0A9Hk9ca=rsBcfnv--k6p_R4c1c&4f0*~T^HCrf^x%U6s;@@^Ho7%XeM>!!M?5T$GA z)N+>Q4E!&RUhCASbc-egt1(0=q`b!$R|itmDsDgh?|6OoguaZMRj=QkSl6UdzM=-dFmS z;xqesA0rx4C;}uB!&g9u=^VsCw`=b!AjS|>?^(WDIPYb$D0g_TCC$477C88M7x{Dn z`n2~PE0HE+m;DB?)EmFCzzg2g|6Cg#eP2~52hah0DX7`F@DV%#tHjIFMGCFuiMKkQ z2rdrgm8FpU0p(ZD60FbF`=1SHE3IKEJc#cWgekwd0t0BxV4GgLFe`R4BkMT1J}wH? zk-g2!Hx_W2C`z&A)%#cU5fIdMca}Xn`Le*J6EB7sq4>e31hGeDMNVc|Ul=c0DQ*re z^{q&oWd)rEIs6F#Ba6Cl?XUi=iEyD)+-3BHyr1Z?pXj>E=MGRvg!eiKG2vsVU9av@ zm4C|<)NKtWld(8jfmf^Uq2Q@x3BX?`rTpfxHVAPK@SmP z8{uA`np%9`5ZyJ?IK~MvnE3NZ3>a$nm1r6?paurO8z%&PtFTsB|7e7}$?UdmQ-81!bOw}G601ZUT-*RRDBNg@v&S_E z80=r_T4V{E9bSQMP-tj-muFo+K}C+GMMMH?;%jOgp1QI-LA#B5n_%czjtM2Zky}ZU zr89H+45xAagV$cT>w^Z)J1s>0&Pho0(3_R* zOidS3XRsy}R#&yQ1o{fh%!>Jq+>=0Huy=#~qpLwVvu&hVO_{Lm(ofDuN6QHL?0$S- zGWC-KmTcbGaq<%zT-K>UF1tC>3w}KK>s%`Xi@h-|((fKXk!wcle7BxTzG|ac{G`oS zZz&*Spf$Jf$G!Mt^O(1No7sZEgCsa9;gYybAp0jD6|2PRo5IR$O$yC04RN_IQD}!2 zufCr2HA=5A`R4-JvG6wm`Nn7nPTnT}xZN!XVQX3bX@Cz)*;#o&e4^6v_4dAVnXy>x z?X?9<$afXbLgMTU#?LQ;#H{@wR;(je_u=^Ypl}{wH1Yt0PlRjH&IlU5KwDxCQBm2T zbl=?fm!(qmJ0aV<3% zsYX8mih0`;aE#bLplPm^bQ1-%K^grpPFsz&udz^eQ4(^y#y_*20@>yD;BL9yH;}Sv z-pt{X8BO%;S#Sz?8^up(aS}OtWp+gJNmQzO{Hf1ARknl~V{Ab5cQ~Bom&WS3Zh5*AALAmK^(AVQRyTu2~>0L6AGmG4bU3hw3ar|tAP^vh>1?#sQ>Dv|RG=#{lL z&r+zXyr&;WpK`y1HD4M?lmO=H7j1N_H%;Tb^%ExzI~a71isQKQUvDKk)?fzRFnY+C zTtCg9G?T$0=)A!s(i+FwU_;#eLTiXU&c2v)d>SpKdl&?XcCi5eIfe+?vXcIAo(~oX;oZ)YZ%sx8_=Aw5`@Y30nxO77Oomy#mA0q=-)?vDA!baIBl$b}qz`)D^@LrIf|lyr#C5QYOUy_&sA?)2N|X zeU6jU#ru`~>d~cMN&)wC{OEJmVcI%gJ;93seJ;;59!rX#q34%CV|26}LnEcggtYf4 zZPB-4B>Lg7jxX%e5LT3q9^03INuZ3+b5nnOy@&vEhF}eEWw%d7R`{}7iA%((jfspv z<~G#qWp>3(M`&n4|LmNTNqM#&e$=FZ8KtN*H%YK3_0Eyhs9gsI?iU^&UUYZN+}K=) za89uR-I$dpl{Kn@6&0|)kI1roge^$P9&*G~Ea{FqrRH*(`*1mViD}M?UgYpYqk%?f zr{U%C1bk==WHX@e9^K0Cw^ulQjwo7!+A59PP*Y5X(SH))3&bl=;N_ z9tM6ASg$k+*7wi>vUa<-f{J6H0Zf{tgX4))=O*VdEdNOc~>GdV(W2Ni0K&Rb9kCz-Gf!<}@S3MW2$HzF1!OJs*M|h~W zqiHWb#$TSy8m%j_D}Tk<|6DN<xr|)XwQ{GliII>L;ip z7D;}pr>Oj%vd1+Fu03TPx@CuQJ{UsELC7U| zja6NaEt$Qody6TPHW1FY*9ud)Sji;>hpVj*+xGv`!1(tg<_R}dB}PL$NR$pQ`o*Gp zOfV}cS`JRTzFA+IdlevmEqKihKYmvP9-4e>N(8Jmwk+`Fhx7LF3$tf1oNpoRtwKH^ zx@dnlI3+waRn2I8YD^Id)Zr?A;GExL`TM@>*%`XFU4QF#j9k4$;FAe&0Qqj*cu<4@ zU9EzBziBh^_fT!4R|zL-Q-}mpO79Ym5kGS#iU&FrT)wPAYQCbhSo*Sx990>;O(ARm zk5o%vWlt?32>A+K7VofpHS+m4jpsWF9u+x>lAB&1&>>NZg@Rtl+>JgyZdON|;anp$ zj$KfEjtByZ#WPUo7|!G#%72>idyVjeKj51Um?r%n&5bRZV9l{(U3$(E(28t+0+U|a z-cXZG>*Nww!AoFK4>sH2+(Ztd=mDpr=gBwXuMZea;>A=}m0g0&r#*^HSmh-tNTU^yq4F%ZUeGXIrn?`c^TLMXRDck%6{XLGMeS zED>rKTSvzfJ2=H*)Mt!sRZ1-5dOP$re{HTTuJ!CJF>|8>&Jkc?JEnmD_^Xk8agub%E;bO%$QaBTK}zr>!(?)qg%bv{l%1n6M-n@t;KU5P!=B94ym}fn7?IZsh4uNqe(XM)*2w=Id`F- zsIY{JH|5aODF8|;8~ODVt%GA?KYYX**zV+-ofwtQraZ7g&1O3|?{MVH=k^c&EnNFi zg^IEEUEoCD$zki$>A^8~ZbLT~CVVf_s+t;|(=cviQl7YLPs5l>X{Y^l3-C-{4dc33 zWt<&tSLB--Q6jM?!RYv8q$g0>B2staDqhQ{ssSOP8_kB(>dF0tivJ;i(WL!{$M*7w z=`m~0qDu$b(I(J}0Jb=+DJlnz30Kg)LTU4g6H4Ld%pP3Ww96o%5kzMz$l`3=p&kNCoP#bdHqu|oZkZm$VDff< zrE!a2wc>~Id@Rw)8HKxC)mG~ zNn}r;Xc^h9Z-p$gS z3YfUVS9fFvVB0xbhVJCUw|E|kSt`=nMrmfiF1{X21@);a@8%b22{&twv=|bt)m3zWYyfR82B`Jfenc)(s=RMAB2uGUWRs@YrB0&F@9hC*@g1|o;&x%Zc zcn8&&>?(HG(@c!j19SL6F~Qw6IVg z^b;n{Be*V4omKvz=VfRXFJz(l4kfaCZ06pnagm%HTq_P&$iUliddE8R<$sLbC52&% z#Z^3SBJq1AbpkfL*L@azFd`7~j&egzE(8yyyY_x#qVzIX_Dbk2N0V@oP^9(-pLq2q{emwapy1BY6 zF1If(>iOaqtL}Tep0dv5@|Rzj`xpWa*Eu_*Ox=qsSpj?(x#&k*r~3jkV+*yFIq&~^ zHh+^&&qhdC_u?N7k@DkDPS-MGVB@)DfzBqm9fz{Uy2sZDKT=#%MoWX<&bfzM`yF-X zW#ZsryEN{-TpykU!e}?ze%Lw!jjZN20h#Ncb#VIL@H4Q@X%m=5?g62jp_N$?5gGhp6ezTMonhoxuOGdjYkw|IJE6 z){giK9bL`r<^f=&HOQ}9p=*7j{mbKt%@Oap-+R>i&`1RuQ^r|`hqA>J> zAl{_%?5B{pUPd7eWzFS~f~O0Wzb0HclE1tdH1}JdhMXWZ>ItnfQ@|xt5WW)Lqm1V0 z@Op49C^JL?N!$Ci?nzkt-?;#hP`16Uv^_I#5Jm@ZLdV~iWf}MOcaH?~3HtW>KI$Yn zp~CaUP%ueUrkk=G=02ZIGaoq-8CoZSgK}vGPY_6wchA>#NJE-@UiXE`hJv2$so>7G z^G1Aqza!aEGQ9f#A`LNFEF+pgC9)a?9grpjI47wuWMd#d#4j<;dGdjnjgY#QCAQ?F zEL1S|`Je4fmj_9L-4su&aBx$ZA(VW5s4!3zLuGA48v3I-y5`!Da611)gP9@_a48CN zmuLgDk0uU*Eifk2na%b|UXNk!MrmdYodaZHw+{)_xaHD!PmT=LGG66iFU_{`TdCL# z&R04fKogh$o^P~G@{`qaJUQ_hBr@jC#dVwsnmd?}yN5IpQCO+U{5b$(d>#Or_84x@S-pVJ*&?bAk{_b-6oxYh1tV4-L)( zu$5^xplhtP1{N@l`CyzZJG2cLO~=3j5FHL2G-m&bz=nHiiDEw)$ki}cbi@}-SKD^F zmJbe1qzr&P7PBugQfFl{d^YcpOb2jSk$5OeVFhxjXiv?E2G7ySv0X*O9pdTo`t&gi zF~ncgx?Yz}5{Vs0=XeCwniDM1SHkl5Gr;S@+aGu#Ky<)IYe&@Cjb#>=CU@}v)S!Sj z&ih+(TiE!HXg1mB9A_>XH8CSXQ%n{0ha+&CPIB^N?SNf@t#*;*=K`ulvMX1UWb&_> zBJV%_LY8u(Nr|M+NLd}$Y3Q`Jj3PAuPOle2Ed;{?^dE}xz*XUFzJc|P&n;5nmYc)x zZ?tpdIfbav+K*SwX$N{CI^Kn0|%T+w0AIJhQVUS@;G4BKv7E+GPDWPpsSgP z0WM<{qtL*Rx1z!#sv@Jzv1+?4UEPGE{5=bLE3Qq3>;md_|A$#cMze)Hq=s1ED0Qx&&cpPA zgY-iKSey+3hIzy;DAI_`GqXs}E;miXC-&z_kT6TsC=K@5~ zsVxWOJx6C=Uc)=4WM2MA$9uae^tXgW{RTV`2mPu!oPwYBGAn%)O7gx9>DqZ+;2gy4 zhB0?;#_NpZK6Inh6=uy)FDu531bv?ZzQ*`b+LwvuVwvnH6^h@07++~Ie@~s^=v}iq zF@bz7UB%<^-bT(GSFk^kM?~0x6$S znR9u5bac?qf}V$V#udQN^ui0qj(ud{kJb#3i zfK^w6ZUo(Hfx1hr$A$#V%x_g16Ro3k|8yH@a1Ril&mp4eU=NP-$^xOv?~o7$@0_^R z<7PEGL}0Shzx}bCv&>}mR}J_ffG|Xi#wy`eNwxfkK=Yb zFT8uMjnqv$I6q(i#*bZC^f@)gy>LrZ;d?0`ffs^_pPDbLRsQe2I8W=Z{WrwK9%r(~ z*l79r&tgF5&tnzC_~z|e!svTuvp$*(;?hXQB1303tzzd69al~u{Q=>X{#136@=BF_ z-VZ$?tb>NKg5W)D?eJOi9>%W`a(rC}36J^?&8o@4-ZRtwOsH4qBDJHWMex=@+E_6w zn=*z;#v!c;a&xw!zXjV5|AmJ&FNQ&)R#4FQ$OFP3eVlQi6!k#pV{YkoK!veZD9TOf z?moQA1+vQmyu&ZB<@MjywL7j;uJd;_6*br6!Er7ofZnEmOK^+8w`-8qz%UKBJYPh9 zV(;$_(8#Q1QFQZQ_FSZdO$~Wyu8+GP@9xe!8h_PTSJ3|`RC55Gq*K(3cCmT~F_)21 zAwFek=5q}hk_^qL(?-=oHQRK+69Sk0MQ%E%wuI9`{4c|Pv-7w)6 zq}Ypx9kry*j>ZOghs;hBI5JqDo;reRO$*p;)HBQl91iua(+y63@~w|8LZl(2qknj$ z(Qcw<4M9ia*xCsWZ*Hz^mMKGa26WVTmydz0jGLf_KPm&=&QMeT`(^IjGpn*W~ta7L?At8px=%V5g?9S2*w|y+Zqj(iU zlLqhb$EbLjz4h>EsH|{$A5CN)$2;T=n1jjLZ@S+``4a2A3y^RGNx69Q2u-*H5)-17XVsgkLV4oP zS|_SGt}-qiuzMU%TNoMaAPQYH?CalNyC3@6j)g?$oUslvJq_tT^9nREdybGz)x9B+ z8|Ro;I(CY=5B?K)_*gnE#eD=LQSuqODtWT%7oQiHK3kdNmaqGp>S0thdwcKmLQh6M zgZp07DhM9((d-v@gZR(|K%z~3$Wj#NAT5^7+?Vd?yux?J5iQ8zeun4qdcP*$K1Sp6 zBHSyvQcw?6kNt#*GPa^GYb6CB@zYh>5}NfGfl~aVR!(9SG?fu}WZd|ddVfRO&>d() zkD#ftw_9u^=!v6Ts(Rgl06Ct}^QV<^K{9;jRcW2+eKd_^I!QGe-_qqxSssq^7x~vhdK)Sbz%N88S*Hb_6WDQ;z-31=mUo)c>o8iD ztYR=1zko%^?=Cmdm13Q!$^ue|5YEkVE+S!IJ!lp%77Aw=*kFpQ=}3~=4CcXsd!=a! zBOOq)Ivr{#4X$`!YHTinSpIqNb%81kG&DTkI`XDk`5cogjp*}a$U@3x5N|ALoYoL2n(zrfH%RlKo-ImZ)tTJ*6;PW$dd-doTNx|)uEpaY%Np2-|vr{?O)rT&pu?fgLJxNg2 zqfYieg$pkQxQZ5^5tqIChaH{@K}Kk%2S*1BcK~tiDQhil3xB|>TFE>6Bv7*Y55VZ#Bc((tg6)(x`2VuiPoJ>QcE@K6kEDR2Se9a7m ziMY%_Bs?())6Hycb0Rw!V2_2f6RdZ^ndnwAlMBz_TtSHlhU`#kxEcb-N>#exVylt7 z*O=#^BEAJjqJy94!$Iuh?J!x>!prA;UYcKJW;1TSrN32XEQ^FFEeLpRCqWsyyJArL zB`jR>4&b^HQGoK`ma2Q@GodFTnNlVYPh72&QybAO(V(Sjg{Fhn06W)YB7h!al3<>2 z5)XPZxNV}>*}ul0{9DGO+ofc^gCQ*&g@Apj!vC6r*_$uY(L7=q2N(E9#omw8@20s^ z>uK8_W@rxO@$Y}At2lr`SA??*%IIdQowk?f*VpetIAtw8n~{UHJ#rQY`#q+zu}Gjx z!Aw=f=C9B?Q4wGrn#?OtPRP~-?rZyv-heU$< z)rkdQO7eQi<{)>AnxGb+Q@wtOWIa6Q7%^Q*;Obm|*gy>(`0@mB$%3&taaG{)BIh1c zSHxr7eH*1{TOx=3e+IAWWk)Z$4c=rOBMIssR=Q(?Icg4Ja&z^TWiAj*9hYuj|D>g> zh^?RaA@d}Js%CyLq{1-uN#&Z}B)V!Vn_s_RMwyGHDH}r^5O@R`O3Umkl%ld~GzI~` zc%D4E8(2FBw4y{Bum>`;*CRfAtNQiUQP~k?+3L!_Z20OuvtX5?D_+m`sG_C7ZRI+( z@pQdnd`p+VH5YT`Hl71qiWBkD=Gcv48QQs6%m2m3kPSlLeDl_!m;fJQbq}=M$UWn- zoZcWDQRbS^|IP&<^UobWUBzsj*pp6tIn}<7&afw%9KX^@GW~sEXSWR|HFp^a>O0xY zt9)s3u!Q+^3{L>->YDND%df6ATQ?7qj={&|gRF)sMo@|6#}@Xg`*%03N3v+sjC7{- z5;y9|f;<0982W~E+PIr=7LZqXzW>QA8jjzip6;d@70HJwjTnj`c5Yv^p zCWL?ZW)3QDM_C;jZ0LDj%L*ffuK2ORZYBfd)rE=g;ZT_%e#H`liV)xb_%G90Ul%fv znPj+5L8|3cj|G>LIEj{)4$aD)-Ov*%1VaANg=lu`*dN#`)mhw!eTwz`SwBK3V*Sdd zrW(d`X7ask1qUmUyTLWIn$dGBX*@_rwD^e(p#Dx^Z(R0lOCV7!#a>yisSnKfVIX7d z3Z$8qo@8Pmv%1OVW@L@Caz9ZSn@#mK{WI3?J%U6?O3LDQsu>@qH@fsf#O?WWiE`Jw z9yQ94+u?LhI>CYhPS#eJDh&u4IFH-^z0F~>LP^tX(Qz)#(@jJz|0$l_b&b2Oco z4=t#*l|hKN`$?QZma1wGNr*ej--W{%LBn&ui1jEvJt?6lNawe12lKD)wE1+BVmzR` z)Yhi=QEF(q2}dU;0z+?X(Eh?vI)#i!=h_v5YUL{SjaCAII)1 z{CZ9lLFnz4dPb`{b`nHPJwm54_Ug=^R>Y@b&3RQR?KVi0_=1fmr>~EhM!FK&T^`sl zf}CZ)V?}$S1d4ZgAP;>(YCaSlBnV&HJPb+)%X^uRsu1b1ZL43bnj~uq-M~DIZy9bjz`lF?%CZ;I7bg7>v z53OFJ2bM!r>1zlC*?wpb5*$R-$-x#ShG9iR=<>+L3+6D7I>ar%#aZ@Hp93UL!3s0j1s9L7R|r}yWzP}KQ9gi7t4q*OF;xpp3K7?{${}& zz#(>RwpEV<DFViHuB8C;RO_;EQ@WSU9Q@l>h8nw$h$T z&_=EKLhJ3(zT_8^iLnA#lZp8L;?yUusUqrzu3ICmWn^fn>}>{09IL6hSw8Z$lCB$0 zSre0!Dv`@)^Fvq5%VQ~`BdAoO(NjQ`wAazp&FyFWM2r=kI#FzGN`y3Pqn&^jsGs_I ztB}2?*e{Nq=%u(QU0N1KlvFc<<%FbI4>&ioZInpq7;-y>)U}NB_dg)p;+46agdvq} z%}x)WV7IuFm*|QQGtQo}KR(8L{{40`XnGV~Jsei@@ekjdZz#pl{s0Y=lJ;l#C`9c> z)X8wSXYDeY9)7t?@kH^*oXQeRmf(g43p9h0-@et^-dgU)QQ-%AT}Hq`s^PEqNp{5< z2qLZD35{LzODLzvyPT7a|^%TA!E{ZS->QtBZ_b>2oiB4i;yup%``sjFi_+% zy1lM$%`VmE8<%*4P3T0=G*dVZaDb*1{N0-aMEloHWIp%YhwF^1Xzbnw_dK%$&NllG z5?6#s*xh2+VT~!;Ut;>lj(Gu7b{6F|$YillLF76wHuQS-ddEB!+a~O?nExwGVT7kW zRO2u=Flip{5gTdYF)k~-Pf!4#K<(Sa)Gy0(vCemmk@qP~>#g^>2<~Kw>(t|SeYnMD zXmcNz%H1x~z7F9YkuvR8OcC~-lHyOII#DnZDU^fn-cBDlNjn$8GqlT`s&3>rdxMVa4 zRt)CN`o%P*2ct>-^Q^d9?l9eIAMIQRt`+QXl!h_wAqO`FZGg-@m)*Jf@)UNS9wRb z15F;%$MY{UY^H`rRy0DrW}?v?pAv}zy=%sI0#IVc0yCla2sAA%RGKO6164o80ttwU ze4)<-6_S);T*s%1P3=NwGcyCoc6^%?pHhRom_X4r-ycvx|yA9qq6Lh2A8#_o5K z+S~+!3(tNXiO)&#R!wAHv%3U|x+)fy9e;i^(iXE{D8kfWRl4vY16NGW#;Vg zjxQQDbF6zO&CjOz-S^+#j^l>2XEcuiSfN+TUHJxp`H1HNa&UDoF2B_6;qYFbPzRWw z8iVIXJC?$x!nh74MToS+GZ&!{yS}m#^alrW+I}*TcD*K5zum)+kIx4yaxOu>4yrt+ z0`=753Pl8pCN#9J706WfM^kvEqFVN~LMwH78K=RVO748pkK9Dv;Ac|`G0X_;X$N`< zQGZLGEQ(4{diV`BlAffbP431C;64OYzxtl_3elU+|B&2QPx@t|A)7S|rLKm`G3X8o z5t0K@;W*IrMysQy+oG+k7msb3k@*Z5q3o1nI3`L*)RmS&e3qWVCmEE-i#bxfu%>l- zA`GtX1NShDF%2LkLowQmyKOsAH(Dki;pK>TUv_why?zy>yM;Sj!FWN4K|?F(hD&%q zXjCC)5`YtTH07=~x=O7%vUlSFcu-?HP2^A~wU3kTA8hEJ0?7y%?edfki^Xo^^Oxh= zE|Ajh(C!F=!nb@iZ%|)kKOK*Vi0u`)YUJTSj<=?X!JLetMNx=-=vx2r-QhZ8{iVzDhIT<-O6^E9FPHB#6o^YE|6-K zgryHzL)2BRQl&?d+j=Oy26Dx%xxf#T;P-=`$tDdju!BU<%^s_|H*v~v{`^O+SNpk} zBZuy$nYkYTDb$|%e(+7qwoeFwie&nr{2w$x{Nx7j?1JVx&mIeHA07_EqtR&E1l@%} zQE)IS-I+0c3E=5%n4qFf$3H>u5aICq8ut{UAEB<8czq>NJc=-_T~H`|ykOf)pR2gz z9PZSlUWnpFEM=TP|7zcl<4owGkX{6Zq6(WBI5Tm%p*ziLM#DCLSC<|{TFCB58wJ&> zaJA7`4A}0@)#>h+9b78wFvI(n#H14)P8NcrL z%k29S9Za)o4#W{Hc3B`hvubxehNMAPoztg0*Jt)QzdQlfM$-e zvhSJYs;52)Q+Ps7BXp=mam~?{V6AJh=}EPO|Kd>1_FJ@JyFmB)MPPI(~!w3%zxD z-=*?7;#%M_d`GJ1Ln>;UWJycfRP(+;rPK-o|!u zD>7NCvDlv%7KSbmz665L?LE=EF>auvch*%DoM*%aic@cl!>vM9Kf_=p{_2ALJgtgp z0JY?02af}SwpZN?A#nggLLW$}Sp@`sZX)tE5`N8qy&&jBpZ+payTNxI86g^(|L3=q z_4DO>^ML=gUx3hAYun1LZrDhwbpN7jVvS6V5Xki;GNM2_m@uU8SAT>l?^SDI)_AkB zMy<_X_B`kOTZ}sP1Qp<0LUZ3hmVc>xHwtlfl_W0LM7!VBE`2P4RDSweX}QZq7W*i* z37o5GzjnQiQDum8Pk>#NGu^v_8n}BEDRnbuijdgHcosK$m#=S!MOkimp7a@E)5ljvRFxQtD!nu%Q+{tPrqch66bXV>gG|8p z?c@1lMiXrM#axA50@*XGy=?wiLEYL+6p@edPxM%cJV9Cu=Vi7$hjTMO=a1o1>FB@A zq7{o{bkQ5$P0HTHl{y_ILSo8*7R5T++liG>{|1V-aQYA3V{<(h>hlY?t>xwP%I?Es<#B5O{o_HPb>#m0 z$lIR(zS|MRWpT++&rzjP;1B`$rr9Z}#<`dByK1g#I=Kc+)$4AQ$M5R&U6Q8=kreb^ z_F+!H%oeZF1m&4EW}6GoJ=x4_63cl!1TpE7e4~9EQohnAc}%nXO^e5 zU*lywAM*8z(O`h!a?>QVad;$b;dqmpqs^p- zS&r^x<7_#VR(~=2q=)s)zI3=^?WIoMZ|NHABdY@*L-XvbvT)(C+$oQ4=s}>oZ&RxZ zDQzzRJvvO@-4FX6DE*_gxena^5{&7RQjOWOhODh6cOIS0tW>=lpSlfc*7O#} zlIjxgg*w%P6U_2F*Eubnm}Y@hePLb2XP=TrY)^+uLt1hT*k|%rSk|++TqSnhCkQKh z{xzg~NM#MrDi7!1v&$uEUVnJxz0WWY{+}N7f8Uh$y7gfq-|K$PFOdY_BOEds5A2ES z=)G%&gpzoIMiL~ZyHXt>d$D(Jqb?#y2fMM`?KnZI2!Wec=M@wmr9USXUBFKmvhDXigF4MJZmYYJB-!gX*kO{;3a*#%P8f z6MaW*G8Sf|yre6CUwUPwmXXX?3@tMGjZKNIKsB?ylMEnHNuDDL}FPH?NDv7%~ zN~kq+1TO@;$L<5?A$XF9pDy32J6!}bRyMj?G(Jwy-vo>c8htoguwL2khfdk+H-3Ej zY}tpnKh)i|$IdAKJRUne43zX9_7BYqQtVzc$g0U^5h<0KR7W^B1APNpEKEi49OJMm zh?I^@Dsqd2O1Rc5A%`>c`ZrjeXuHplo3nkyom5xuqAL_Rf<0bBzmPv%lcPMGYI{bi zW>ntk2^Ibc>tW#_-Z-@8{}sLzFe(;mj5#}x@XL-2L1FC28@4{Y=H_0C&}03W>ik&q z7>1V%n8RNYfon3PgZK;{Up&9>m|A~-<-|%m5PS9A?Y21RTqOwYdE-&NZdxD8ANJyN7{N}kit;eU)RulYm z(SNY%EU*@!cD07i{>>lOjyMJucoIGw9jM!YupfN`*{g`!K|>Sar=|q2v&bqDDwiRD z_FivQBg#`zh`A`;Jk~iyk-?&Gt^uyvaxRqz;J)@MJW>;L6c6nF!~5eBlDACC)=TV} zSsfR<7DJ2|F8*p0)wtbFVtIdMe?q$?(vKs+PQ3e&{UPGo`ux5g@7evyYR$@^(Z|q2 z=Z2I8&bQ#D7UPFtiXM=OUQvsLcu)PZTTR;H>*)2*%3r&Zt~Z=tX-oy>n<1mnWyhjc zrB{&#=K;Dj%LK>^FI868@7Q_UmBxve$PTd$TUK%A)E53}WeMTALu}5BjV)dcca^5Tuy7HC($&j$VLPBVR>bzR= z`^b_XTYLi#T?)X0LeK+2)aeuNocNEIn3dh6YU1Cexz1YxBVkqbg? zWHZ^x#t^&rj|q5NtM?ejg`&=W(_7=HyQjMTA7XP6XU#XbrN}KMIV@>C1Mp`(zE6kb zGX~=dF-l27A{i5c1Ft()u@2w4p{f*$ryFRvQoEl7io4EdNCpy#KSCX?*X6)5(V~V4f4tt96>4~AVvJ3Vml)ot zW=VFZ)~H*?Tm<(a%b-See2!J<+v0Ds1$yGOnO4BS!k!0OCngH>Zcz&RU1dUIy}y|!B^F4aKBGJ4u1Ve#A49ER26}gW9VeC>$lKFyv<~qg7gW1!=8J&AVJxE2#vyNB>s5M?+RjFR`q^ zjfA=1{R+&(gIMqP+^Z)>z*Tjko2uFkJqQy>_Kd9GGp#@LJEl3!Y~NF!I3^dP)b78T zty)Z|^80l-ugy+AC8x=hU_@b*h7v9v$m>suJzXtlGios~9=;aGQcjSyW02_SY6ndt zP|x{Fzm9B5CYzP*;J#@)gGtw}mx}R+gW8c(+Zdh&E)-0O%ZCUwKi{uo4JpTKU2PH| zo2zO`-6}(tQZV!H1}mYqFAr_?6aCx+yD1#i*!GN4UZ{oh zG?kQlF*rC8m`n{;8F2_#EBtnV!q&J;|NiC9q6FL*_tDQTMAI-`)EO4k;v+6F*%GxY zRB;z-C5!R(XuK?oO9+v3$O)q(bq*Uc<{FwwG`6*oyzp{bI>rXwDxvh$4qbj=8*Huy zqDC5M=OC5gd%4sh@mE!eQR=^7oD&eHzb^Jsz~+Swi~ynT85e)b@G$d) ztHSATQ(faj-;_*$s1s&tgVbSXSRYf4m4&+qrw4|UYG@oB?pEKcF(tC(!s}8uQpM8 zGM8q=+{v;&N#ugQRY?;`sbuv$8Z3M4g&>De>xubCHTkUpv-6SU7<*1Lm6qI%Qvz`k zyD3=uqj35*POXR$yaqApqOkH8K5w?3e6SF^DJn+#_WCSEsDLGZYOI` zJSM)E*(X%+B@hLQtB*&lMC9U|jTidMai`Zf>?GE{!OCG#yT-Gtn!J!N0?P zqe-#wIiM65vyW~*TT#3w`*1b@FNhN+;A6KC@wl(H989x-*siZZnQ$S%WxM+(s-5`J z;&KxgjqyqDy=)~2L3$8PLYI<rSN)m-#M8;)>BRol8eRPZh)egxIx}V9(>*`#pW3{Kqf% zmG+56gf`12W5B4t*N>@B5AKdXKdVfK&P3wjG|d8k?Y9uMK9DE1yF!b%2Uw~#Du+TK z4I>X*$**CII8>joSq>Cj%YpQ)p;?)!l-p0|-HRZrCx!Gz0o&%8oR?Pl(ml&~Ce^(D-4 z(1NLtKRv;hQb`8w&fO_SdMTH;EhA zQdGla-QwiP=m`?Ic6y#^-DM_b>-JJE3~;L&0=@KJ`=0Z!7vx=6YEg0lzdKRX+N%Nk zF;7W^n+);ji?G2Tbwl+siSD`=EJY#8UdW((dcj4OtL)RuPok-or=Jp-yr-yiHOWun z&}N7FtShdjn1aRDWBbv#UE>Pd0M*<*e}6*H@K3i{<507aszMo78zd z@ZbeC6&2@$2~1m}^YiokyuY9PAYht%{3QyS(YBh>{L-?sM_cpj@J-J;*Y^Ks2bo@U#G#=kSZ7(^@l7nku5y`&Pan}WRMm0aa12l&R zD)0R1al~~!M{Njb7|U>=V{$?0O|$he>891I?CEvTK`iEm>@G}Vp@x> zFi&+LPSI7p^X;LEuQ@Rrhd zgkW~54g*gh+MBPT;LE_sZ*=QFaUs+qkC{s{g~=3Hl&~RvoT>Hx$Lwm0nT1$M@jvcj zqO6xTKF-<@pQ%Tf+LS)m+BUGAvoY}VT48yqSM4q$o2L_sUIB&jdWdBAlzY1hneyqT z1Si;}Z4miZgbnE06NS|ZfZO8J7M5@zt;yYhZSOLqCjx5=cyy%I+45r6kIGPDgIn9 z#+1FrSm3`KLv_e>XR`vy$F|aQ+5ZwVJDOg3Of45WeE$4oY!I+Iu|Hr&#G;=`1{kyJ zW-{A-Qx6&LOJR)Dh5R1(Z6h(S``s~`VlqBu>eEJ8_Z0=K{m?vRHSbkCFIu{z1?)J+ zT&r`(m)F7bDLbCSFhk3`kmAo(|3&bPkRO9xq5ZRbz%f?cQ@Hs*75nZbRR`*MHff6% zWAVRDnUPRh=y?>tzW0*}3}kHeXx-@aWHQC;Dp)7x&2k;xssz*wL%ChO`5h+puubeA zjPu@NHh2rk0;v{urJ7~9X$@h_Vc9I9kpIGHNzwfL&{Qr=os{Z3(7? zjXvA<7Tz_e)XxgP)1yxI3lUaBNut1X{i?^~uZC;~+xYxmO9h+wZka3|htw;NyWH-- z1s1lU@A=-{?lMtUfs1{MFj3SIAR@fDoqHh1jN4y|2kuy;nDroXvzfHc6ddUGAH5V5 znUZ`K@8LtXP>u1w*7f*9ve!IdiWKh29HMBAVc5%Wg1eiWS9ylM4lVEMhW?$!C*Yp? zV>M`(QaqfF)47RGfLdldGPFZ=%keK|Xl||gl}g--)Iu8$Iwu1r`L=)n>csEBi=5jWwQGc^Kgndh|hGfxV`=P1kS==j${hgnT?9ZoR~+KC>IVj zF$rY0-u6q7x@H#)^0UN_ht4*G=lM(PM!bl+ek~E9xRT?pYS&;-Aj4crb&{7hakUQ! zwN8deOfje7_8R-1s~S@bJU(OFiO;z%xp3Yk`WWv9v04Ixi=lN?1&_G3(^rdLXJl_oFVs&9%g0=5Ml&&E@gL)Ns_? zF=m(Fi!63^0Gh7XO$jzZaYC}VFi1oBlJz8zgU&MK=gctQC;mS_0tmxK5S4cEYx?^3 z-2%NppITI&^gGMPJaNrIAtx! z1fYc)gZe4h98c#dU1h~|a@C#+H0;GvP;Y`d$lmoCU~Gz>S&SQ-NPps-f~_z|TYc1) z6KsBeRPAO@kQrD`s^3o7_EKB#*LAmP5p^v5G0}R&P4S>nx0iPLw3~iOJh(BHy&JKtx+*sZ-K9KV~+!u<6L|mu{L*o}lO}7nBEUNPjW2tCIlM*sh z*QOlIdC8D;`HC7_|5chbJ1a2gzG#;9;N@$AwIqLABBe3&FF^05SVpPjQp`avm$tjc zgZb7?awj%RcqJI-3fI;nvGxZ17nRj+{h|$=Bh^zL{{A7ma z=H_8xFmlt=3V8z1a6{2|7_g6ewzjrC-YQ1XRv^NNy#PNGY_KnOa_!+ErBvsaP1sga zV5(ts&;>&Gi;G78PB&s4l8!cr`FhN47+q+5_rf_`9ID<)Yv`Z`Dc_;E9eS(#C=a z8_{qcB`Q@ek@A|FP~(%`-7SVBLV-ktD;_SO!u^fk{qxOcmsxI+Bz2nOE(k6eBM4Iu z(~fdif$J zXPsVO!Ksv@o*wchyAwp!&)-z>yL@S{uU_e-bo(ar`=BqJoS3k+)ym9l+#H=b=+oa&$C5)bh~KTB>|d$aGelRj&B6T(jqV#K?v0cz?S$crz9N z{0In-*dqZ;daW_{#O|@j`GWmy?y%myzm=z_#dkUr<|)#^0QRzS!7?1ZG{5 z#@1Fm{+`Ij zeS@v7_tT}Gj_U6+1^Z`umd`^uV5X5y$exkmPcXfh*w|fvHI;5Zvc6(fsj|gQ$v7%T z#y;Pp%f&}GpzH~f*H(*l&B8L8qKHJhnd!$oa1PAtA;<|)bfER^{AAJl>56urnS~{c z6pH)@Y0Bf3J?rmPTneZ=Seb7LQcX>a05?>b-C<(b_2!1inHO(pwzh=t z@H*URkLpTj=SwBZ)Kl=m15_ArhH652_4e4&LrmtHvYL=9wFXyd`(9l@lBcKkD4{(ijaI-0Q=a z5JSOR{T8xC(MWS;lpNtLt_?lt6MhWsfpAjj&jgu4&nHl+OdKAGLq0f3PA$trOOp47qgKgnp7?GEdxO!o* zYGMai4~6v(5at<`m_G=O1;+&k-^FOX!6*ys-II*-3h(`8cUz>Ursm?jz6d{8z#D-q z(B67xN0{mMvFxILCG=8E6G+;Sjfy{UJlU?{dlfHOPevpg6YI%`9Uk~N>#zfwQuI5v zGq+mv7xMS^ezRVwwKm0%gNT6mN@WtJVz49*0qoK3bb0ZUL$2m0&V#4ZNfl;<1i~L3 z=mnQB(AL4h`^8V25Bek?5^M!AVrxoJ&5|a-$ye^~lZ?DSU5>MYZXwsgz}5AEhDeTC z4AAdDvICv^+T?C*d!F)WIGZaF>Lq5@Yy^;v2p2KQq3 z5@mZdo;Vr-+8>}%hv=T3l0tqyy)#J^hi@dhi|ig~e>0;af{cW;6HVO8Dk&M4l|}3G z2v~1pfA7~2z>vqGJh$BeL-Go{vbk1H&&n8dtKMLTl>}V#Bfk-NY}VOt&tm&YZ~+2U zkTY(iot;^MXKb{}_DL-R?}PIc$*?%|7?=P;uK@b5wOWI@p9hV|CSfTOVoS>utQ;(b zk6~n@xCw04&Q#(QBNU3d($4a%7mHn-4?X#o6L2Lp%4S;;i0L}%fVp}gl%Oty`3ry0YfexN{Nfg{uPe*VEd;V{r#PGlwLTa{eFq)I0E2U zW!06iU@4mlaBas>l#I?LWRna@05I)(4rH$9Jf<^rNawLT$2mqX)mKv56|_{|?nSy* z?pHR<`8FK#yjq2w3T`|FgFom0nFVEl`y4Wa`w_w)FW~^BDj*q1t%2J@Tpu7w__{Lk z42BAUPiNERpnAS5a0^=OFivk)KFL40?+OqzCrdf-s|*uiFgw{l>=o zpQn3POiV(KfXH5{jF&A{nkiO{-wb?%37;9P8P^aqg9BXy2CXYqm7RDfZ`nCv8-4!% z`N5FcKjH5Gs|F<=7ZsP`A1!5W^?!np3jB2Y(KyFH1%JiAT)8zUXl1`1PrWnl$1bc zJAC?L`D8o<(Ryn*-|dLt5)2HM1ij?>LHzCa^cVP84p%rXSQq8W3q!X9!tGo)8ua-& zaBOpH14-(`C!9TB?{RG;UO1(z=e9d^4*7oL$|D)lIAB0Y)EA ze3p=+d!&P;h*kH(_&{OCbn^D^kgWb!TfVlr+rpjJSwu6fyzz@Juqg89KpW>~LeKxy z0=OhJaw-N<5IAxu>FGnrc1Op@(cI9m8TETTn<(Y&z`!_+J3F{-N;k&^!7Zuv;o2#{ z-$;Q5XoE6bh=jX`Fr%IIJ%EAwg}(=laxtTcNh*dES(#a?7Qtd_(fD{)Euq>*?*!MK6sRyt$=rziOp@gbZ^2_=OtaOi?6hw73}czoLei%?Y)dCP9{5#B zE~3y4&9CY1zBuT~k^Kk;RaiD4FwpaoskoVfyf=v|MB;^~i+-Ae&D0(NrSVIVGVI@i z&R`I9fAknU@k6Bu-j3eYpbikaC#V;f-a>$k_?eEGHIqA@*s~BnB34 zp)5x5H_2`Tfl@{D*PECZ?Y`=!VqiDMRLJqlva-K+mA)FrekpB|lZ}~=K)d-0I^1ou zH08-6z(o-v`GPQ44gY_`LHa+A8vmCQ_^A!~K6g%7eLQzA088$#G1U4fUO^lO_wr5Dt4YOr}R@j z$OcP0VND}%QN3Oy9VEKkq-psS^kq8eX)4 z@t6jt(jQ3JZK7A37s*9^0Lr0=CJlY`;n5|c=G8py8K_%66c<}9 z8)^FWPl%u3j~~%b*!MSjA0wOrxdm?&km~e^yHbsuF}W@HpVU%o7%BHu6&|+0#s}V+ z_rospRNnT6m#V)&&~`n!?}fG@T!iqTfe z8+ZVyfs7MhDs`&wc3x__mk8=JufF+s--X>qS8P{r#pl7I{fEO{{=8eCGEAFQL@c@|-BV~RbJq>43K{Mn-(9|wt7Yb59-xGBWbtLzlf$2CQLvn2 zb}@X(?)iZT|8&4o0@#0Bw*OI+{6<+L&F+lhWgnvEpv zADd48rdqjlD05uYprG}CWBDmWQw!O-LwLALLeJG^@)oJvFgWI5Z~H+*oLkjU$A2HNQD;IqA2*=&kvP%KF$Q(w)F2*1>DwQlbAfSjqm)##N`5 zfTE{hN3!px*DtaS4iF`YPe+K5-!2pQG!%%vp6*>~ZI zQJ3zzxI}uTn^a5(ca)Vz^f+k!wGNj&PPS7s;l3B5VZpZ{ZyIb1>0yO>hxsJGK)yy{ z-QWgJ@s(+SH@-LZWccgBevNF*%TJYB*XP#nyyvzTiH-DAJnk|>fFew*Z@@`+F_aEa z{>g1}AZHH5Db1tRP>*-&+pl?N1}|u6Ms4EHmNLxqoO29BDAlu_mrDXgH{>7e39mEv z5X{rdCNLhj1VJnBnXccyjZDg>w>!Mj#fCwT%4GD}F2!&^FV5RI?rP~8yAzLBHMt?5 za51LL7>Lq2>B_F*O=DVI>EmW0>jza@XJJ5ZxagC#wBDVzOR6VH$olc=1_3_8(rNXE zztT(epHpF6w|{UQOPAVzT!%S1KD=ivB^S}RsV z1XwH^cyl!xOB*^R4o(?ZFo_ZK6uN(&R|ITEs48aVCTqbMqh(71_ORfOzu?_w7WbpE zkZgIn9AsnJa5)K>%4w>5e(@WPfcSnJTn+KI7${a~{b;uo6-X#rgDhq|IA+x%kbDAG zHMxP(t>e-K`__^#Hu4yOqT-B{b!LQ!;N+M1d2f(LL@YbK<<$LE%I*T_GRR}KZg2gr z2FX-9dOKX!8zZL?Ju)*Kw*>^A2u-R@3LHkM6xqO_IO1I#L_)G69}dK9@%y$UNxM%!Dn70YSJ* zU;e8>kJN`(7vK|ipOmVu?WFo=jB=ouajONa6jZ@ZU)n4UHut8sQ=6q;#1m%@aLp)3e#(xM_T~21 zj{T*UVU^}tf|JU+aj&udv$aa(@~{p{EplCc7xyOh6gy2I6P_O~X30lxkMj8TuzrG9 z%X%p91XFSnj&OW^*0DF6hnPDUT;}QU(*!0Fu7{u5PQ2 zhNSR*K6X4bT%{7rLZI!gGpB`BhnSsCB7xLNoI|)zWa&zHC7!UQY*-F-kb5$#o#Iw( zT9!ILAnIO4%QvV8i*kCqhAWhvn5koISBi>k+WJurRr`fy{Ip*oe+4`r{%FD?Ta$wbx56APpT#|fD# zwi)%!!r$mYlIyL3nV-HWP1AyYll$l$@dU3V>Z2hj8Y-5E3yLsM$OZg=9gF=hn(BRe z!0JsI$vS2oF9^gg+>TIoD*{_jS=D3_0>gh@;JI*GTz7PRfuUnJEH23@&Ik(IiO3xV zU3{B@i)rzG4zj%e`ro}>U#zQiYB#N%gGMjryFbs(M?WWkq1Ee6%!!ic56SEp@An;_ zRypq6qz;{%!J*`Ku?H%QSLva+f37ndJ}}IGnT&qD2b>wfA@Ys-0Xh6>dTx(POBlcD zfhF6fH+lFEriTV5Cs_-=+;XqK5T<^&i6gju{;lDE*NBV#q1Ndkb?@%9WEnC8(qQ=r z0>#oh?uzK2KL#hNLp&W%QZQ!5gx+iQ#u7se6m-Y<62A7Cb_VlBfX4QqLT?QKhvd67 z>b*Sg_HnA^?RQ7^x}4jB9-cnRUgi>OL=PUR;jX|eXWW+*CA&5Yf3b*QFXGpQM7ShFO+Ex#!pfEOY52Xh z&vnF#v%-z)ostJGGoh&&$sHVVw;Z2j7)n*L6Q4FnQf+rW?Y6O4rq2&N0f!8%TrJ%EJ)vTB?*n1S)-MF{RBrK!oGWLH z_R8iFKA%2Gl0QefN>Y`%ih}Z0uGhGIthVBAE<-+xT2PE8m%sK>--oFUl@{VO zWRZF+VIm>y(X?<%AevSU&M5Kxq0n895Nk-3#9;Ck$|8euwdJWS^$@Y~n5RY)?66&v zAsCW%jvu0X4$gf_m+v>11W{Aj70ouLVtE3Pt*%{4 z1^eg4fI-W-$Sa_MwvKTdp8(O5Z~_M;Z>=s`JE?nX+@Yu#QrT z!_YMf%NX2&U!pe+V|X4n+0HiVf*ekQuDO?|gNj>jV;?cInh=e#fP+r7F$+NY*!V+L zB6--|eQ=TO`(FViK4{b0$1XKv}VeyY|2&G=L~rr*GD2f zUNNqzbZkW0m5(2FbDfHv3^cW2Br}2bmfqp|Fy``-M{QI~nUgBo7(c(JZl#Qh68EQM z=@e_L1Vk~n9##g4OvQIh4vDY3DRD$g6{TZ4~Tz%D?-($y;5weOM##TZnGZ z=b;SyJ6g7i7}GA$(iV}*OJ}mxZPil)F1z018%fi&S25%b9~I}J-qyU0sChYqbJYl=ct=$CS-+X zc=eKqbn=F@y4W#x7qj2~mg=59XyCOdQ;sE|BKm79oB2yFU5P^v-*{0=>&0>W4ubIO zCA5`5u2ewEh0nnij*c}+0v`mAh@%$f+NbuOGA7|QsKVu0RC-CWme7y@W_MYtaIpV@ zePKg|7{>K-Q}l4#5o-8Fg&_U8PN^STrq1B=VdcHN$rHuu-@!uEzjZtU4w|F`yMb`= zPAG~qz94G+iE8u<@*1#A{@f^>a?NF^Of5t+xV?!oVC^RB@*VkVqU91Y;M=(w2SFc& z>wUZdI$#8AVEJ;b$@{Kw{8rrP3?303<1&!I@-h;6=Y`YYje;@STthqWew&`UD(0AeiG|LDauJK<5O^TH%nxS>!XA zF~pEvaH-)%dqevrk>`SWGnV-qq9{S>^99S`@E~mT3i0TNv;TVbKO22p zctlrP4NkkY$xvl-#gAZuRo=eg-iCJv8XE;*C#}220E%3;|Gn6JvZWEO4)&XoIgrbU z{pnBD{DNdqvBy;Y(W5wi*k`kqpUCn%6xUcnYN>668ZfH73M%kMiyc1wDe9iS;fFO1 z&5a=zZ}LjJaB($|(Y@4<)&Fl~=7Yy~4YyIFWkW7KOiA2=>H;>i$q8@plbmkDd6Z}K zj|FsgnS=RS-D&}2zBUIl2yg4D#Cz}OJ;}|M92rboyte3a&FdW(-72>tv$9_8N@l1{ zv@ToI31#sRW8pnO`S+A{OvMo)asuY%mb7T=4CRKw5c%$o^?1KRsL)Z-5=R zf}!GFC#^54)tq|z9@Cut#xkep#U~PiQV(g&XYE$D@tBQ?^x@7_2Hu_P(g$0#3T%oc zPEFfR_~d6ZUT3x3VIThOyKKRlW9H77JI%oAlJ|EOHC#og?f3=`ty3w(x7Jc@N|2Px zeYUrC0h+nFvDMPf3WhPB+k)+AJal^oQ%z07#J>hof-AVN3Lrt}hB)K!R1j=Cl_%gc z7tyy$PcT~VrN(as4vh96l3LeiN6pMt*3xxf`S!?hXp2h3)&l7%v^6&Xsdab(dbcOv zKL$wPG{&(A2sLufk-A0d)O3)~`WEA1459E&%$9X!PzHQeofdbqd ztMZ49Cer=HJKS|Jo+@lK81z)v=j2UY;V!`4Y=w-F@rRuoi4BDl_`H5E)H;WNxOjZg zrFcqNq)zVU-Va5TV2YZ9lE_VMEoK9Pl_6sssS`N4=v8@2Di^Y*gS-R{ zKbkzXAL_Mw#+GMtQNloL$)ldA#fxkdo3K`vOpz=aduMWXw2dZrXLIqFYDO~?nZP5d zA$S&(L~##^uS53ky=~-09h!{(tA)p>sDM`Wr8K6Uqj5Km2!)KzT8*OEMk)#mV$$yA zSl4_xr8~&Wc_l$s%T;p3fLK;e?tvS2Kg>^nb8Z;pzV!j&?VVK+>+o>r(A-^d5M9|s@Xzj zE*9=R7cusJGp1UH++Kiq2<0Rf2p=uztW?b?!!F4Y_t<<(I-v5R@DEiEF-~S11rgtXB|uy=($M&_9lXD5FC@eXAb z7#SDngoom`<+d8BgqofHOq>ufs`LpH>=i|O^Hj%2fV>@Ja8q_(ipehe-xoHQ)FtNK(E!^>3*%i4=Y^%n&aI;VpT(r`2F9xtA0!h2ttp@+n#q6UZwCzuyBQ@w_HiuaF@w0ZdOIZohu8x6V8)7O~P^oe0V8Ows8y1t0${iTH*-~k?f*Q zB%mz?bFunYR8u25rzVT+FFQs}E99^Dew+KalVJDuFdn`Q4?VZ%@u!!40UOj8`d)c; z{rBE478tPx3pQOYI|}U`@JjLCsps)JYTO_NLDoUqq;+rt;M3EqG6@0Tmym>uYwu>E_& zqMq8AKl^z&&F`+M=;`IJE%m3Hss4-u>(?RL&9}DKw5wS)2*X(>I@xts?SL15SuKv4 z-~@Lpm%NEZN$9-LP%j+m_w*o0_%^kx1l70*OB#XCyImO|I=vr{eJGH zl6QQ-+>Om47@~xIk<;@;VuV=03IEg8zp1jK}WuHNXSHivw7bV3IJal~p3A zak#Xj%=O|hQbm3xoO*lB!9GoaSgw_lYf_V$KUgJiqggd*pOm%CuTWX87=)A@pULe6 zMJ$GrTl>*LbkA{p2Igb`q>++Q<8)ea4LMkeS_3d;U8<3VYj5@@i^iCwW8E)fsoB%D z#u^#On{L1fB@gFUbP@+ZP*heVrya=4^(2(hqr+M4;whi{HLZR|+=lcNSR`B6u6-dL3*K@pCTMFdxazBrJxDi(1sUz~~7-!4oL|eS2EE zcktxL(WZf3h*(}})=)^5{{PR%w?QH^@oJ*}j){Yjl1@!bc!yodPS8 zXay@Z^5qA#(MSNhg@Ncj+OFR_ssV&pT!{r@KKXfTx91rcfWoT6&Y5F zR}#)V;16Tz7d-!g!eQDd^SY;}|IOq(?Qo#;r$ql;^Jy3A!=%-Hn}RN79k9lcY1W4w zRWDE{HFWdd6`i7(|FeOh_V3_2bY-p>G{CELe@DHWt~8fe;u&egz?W^5S>8hnXMaNz z^$Kf0S`*t~?i%aY4-A#xv~#h2wMbT8Dy~huZw+@y*5A^YA8dXLEWjo|c-;x%QR8 za|0*g8ndmxt12HILv@7BgW-zP4#czkz7cdwLHiX0;ZUM zcaJ80iftt{Yf-+tHr{Qe`@eUemg{>wCcbsAPHq^%+SmZ~GapSJqQ$8u#;b0T47Yfq zw*y4CSA9yAyg{L}4PeBpc&jrH6(7v|9y1&Dp_APu0Y4Hj$}Z5FA%Gm@3a|1nK3Y2} zg><;61xWr}D>6>Ek~S=h#PPk-zZ%1N&KAckr@NePt;`j)u#UEutK`17>)9R-9Od|J z37cC1-xwnA!ity%NA{ZknzbeXBbLUfO~Z7i$L;L^^M0o{QL`4)JLoh7^8cv?*u99) z)%G}L-rf3wB1-pLg7xVSf(j4Oa{Z<@Na?9tHS+jNw2e?%Q7oq8V)RBdmLZdS_AO`T zn>1+f7oeYA2zH`7UpFidZol@gD82uSQC!+#7r82JLbgO|a!Zg}D4|4G32O+^TsjVz zFvQ`g;1mmwHh$fm=~{euTOIl^U=NCeLa_WAew@G(!s zW7ji8z`tn2p{rNGotDr8Q?F#`>JfND2u$veT}=(oGCk51FxfL`~tIa-rgNX(b@}0*X6q z7tnM}RcuJM;Tf8Ytk|dy5$ayNA9JryeHCOpqUz0VeC?oZ)5p_x&<$g;tSP+Bf-vsN z1u>;j3a01P8N11Ss0Q5H+aEPHQP-5!ei_i0)Q82@Us(fnb#yhg<9!{@r=40-usE3c zVOiI*s-o{E#jLiK>A44~pC)6u`LJX!XOM+s-+9v$LdjMlEi3UtCiXf}OmSK{mNv2A zh$osyY>dZud9)VShTEK>+jCi_D$%JX>XMCx350Lts%7iNe2Mk20E}9Dh4|1!kNO;i zw44!_RfB!6EqsGT+*p<59&}UGHCIyim#)Gs8?4h?OQ99zq|#;|(^mPo_-NnuZ!qb| z0uFa3N|yFg=3dasjRtNA=(c%jJN$DZ>Ybf5xgev44K3uix2)nKj^@b_($a$tE+ihd z0TLiwINxIM<8$tBz@YtFx`3I+6-SWKBI)S*zcET2gA~v4#}7v>qmU9EyxPp^*`R<= zRZs@g_7?p?d^VZ!U)Twv&!iC+KG;b9o!xH_$=tvy z4O47{OC7J-Ku{?F242Y92IoVk;ylMXvx4zGKd3ul4(iAxFP zpKP;R9x32V?>!y+nhMAT#F{dqF(DduPxCRzb%Cq3ni4-Z<~jx-Cs-NOS`q~y)XK@q zX77)mVnoiajyZr*Qer^v4vBt*XS(H;WuZ;98v@WH%_oF!{hIZ7-yfrj_^h`MdVJmP z+{a1Rm$(Af@M}WRjXAU5_y{HWm8fa2|D&(-jB2Xs_IRi&Ei@&Bj&u|Vpol_33pLb8 zlYpT}l_niQK?FnyNJo$=1VRZV1dQcDKoRLk@1lSR5m4!YaHDtKyWV@(dfzXz&di57 zGkf-jbN1~0|AiBNnRogSR$l+0C}GlSXJU&J4*~{-ZRWbhXR0)^CsVWJ^WQv##fn|& zU9E-ZgiyBUxm`Z=-r? zT2s4Hs&lP6?ht$sD&b{~=^pG7jyW2*;r1g9E-up^h+OpD(hE3hz42BwDWV~}Ld?e- zHG93UE>|r3#;qg|ZGmatmxg2b=2H06{_ekm(WZlJdsFgrkh!{*o>~T@DPW`X#ZDEe z+Jj$vl;4khjhE82LKJHysClO``GWBNGk0_5?jqq zIIc1C%uHTSbJ4)Iups-Wqn=j$CLebT2`idW+}2+EtIK`xmV{eja9b6 zIJc&1&D+JU9FTP+)BaZk`9)77guDP{se_)uK9TfzdxoP)(S%~QZ%jnbGdlsJm8?{= z9`HsYfgg7YmDV9}0gm|+NR@AyyS3w4<%`NhR0!AapzWTb+;6#G;XKj8OKER4U6zNw z)LV~hY%QOgbpw zJ#{D5;cwd1(|;s^^}rlo3;@Ff(P)~M@6Eq$+rQjb{{KhAy|y@9l^D(`tP~NyZZTyX z@Z)@+z=wSIN$QIWCpMRkx@YX2QvlZjy-O0L^3vHSTrF;bZ1Uu*d_Qn}b*Z^wmNVPt z1Q!ys9k;TcRTf2FUO!y}7c)&7ICSlKI9=cqPrswYyfH z*AQa*7BrcEMR{1IHwWHD9?(tp0V{j7+Na0##6L z10bga@!0m0RReRaVEdlsf3cCiML_di#bUb9o=8JvP9E+#)lPAufoYRH$||Jo>B<#I zxW?Ckvzd*A5BW=TRb5~1Y#qNUCMmsY-rH~3LwP1hxxetsBZ7MC#A}3zxBI^a{Q$9D zD@t@-sMNo%f3x${o{)|!gP_~a-V8G$?{chVAh8{vSq$^ae1uBsOEAyZV7t#Lx19GA znnq30aoxTZOjEnXJ+V(I)byV&@c^zxs)sX~-SK>(5HqG-c3FRS_7x)46#L#_H>Lr5 zDV9Cb(s|N(J~QGCjkik{v5L`3wG?vt}trtDW>EE|+7uPpB<7`3C-qys2hLVyGn&|VNXhqFUYL%;Ej>gFSqGFB3^ z>3_(yhY%1hk6^QXj1@r-?vaCC^1KztzxOFvoozZ-d`7jMu46VVv_C~s!4G?o>sdI~ zWmtSS!uDgj*H2B+yIPZJe+UYVq1rU|Ve|WDOtUIsAhG)67>|ZHO~xdX$IP~dobddo z?yPonSY#glI~Uz~^>UK}NFPJ&NwlqgT6v%hvjwhI+;&i?#GysT z_YsjMV8c*loX}WEZB-Df=Rdek2+B=5A%ql!LByvp<(24@zC&TRSe+)e2fSU&2ahAV z?yC~_?XLS~FDyj6PomN9Ktm!+Q^)Bc&_Fx-OO;*pN)>e3$O zj5mB9WDYI8jqUh-yo!Y-lm<3T?g(@kITc0w@IULCp)`I3^=3$=XQY^prmlfe!P_m^ zQwgmc9|FA8A&6^ka&CV}1}4i(HjN>)qMDR#5)5d15&9$h=1p1x<86jfI_OAc_)90b zk?}r5pmpXfkB$13w8ea31q*P$+6v=g!3y=s#JfGl!!iRKE+dZb;?~$t8j-zGh<6Vx zHjsS|m=c7WnRHgC>e((~zWICI!Gae$1>dU<@^j6{VY)eJMJ{_BttB!W}8Zq~|o}D_Exu;x&3nIyYH^#decwwzJ&nP%$B~PFZ;82h#5bmVRiETX&0CT1xqu#) zDQ&BlC8ks4_#>LR^&=bdK2KweoP~h{Cw!?6x1&}}8|$G#SrP@_1|f4&KcAR~ve_oQ ztQud+cm~=v(dHxS;@{^6O344(EWRjEUv)z7w`!$KgfxAlYFzdC=~WYTfY8I!pBlkS z`Mc-SmLBio6ttoE>TTk0=yAhDTH9MD2?k3lj&OCU!C^H>?M-T=>D6@$%kONR=RzFo zbI030NtRrODPm#cUi-#7`vI{g2W@-H+cD0pg{g~?Nj#l~*4>6{#aVnq9wYeom6S|t z^NnQ=>k*#F@lzv~^+p~-a@^5%|1u9YH1ym*Wx996FG*H<^mVNUvrU*h1L;@mV0|w{~HAS<%Le*H<6DW=Pr1-bJ`5!P)dYgynhh`iHV(5z!iD6=#{ycM=?SdM| znnJ4h{|Wk+c9UrF^^UnL?~g4aZvLC(4HX)R#)-|v!HO>Iu#AL6^_5g|sg!kU22aW+ zYQ1(|^^iVQ;9P}IV5E+G=T!QvgdbUS{3iTIg1n4EKR&+Otj4qp?FS5*%04VGOILLQ z008uwMta&bwVYdpz)gDEg_b|x9ACo`*~clJH5Zdk?|M5<7{7wg1ZT8#zT$k;nkWns zw<)Gl*MnL5^`DiJX? z(#iQqjjlP9;ooM`=f&)-jj@VyJ`#@Sl#lZ;FXji8++&MfrE#a(A&ZfR&2vMXG!WNt zCkV9tpyQTkb__Xs&q&swm_pFlPkqI6&X;y=f9^>(OYB`BSB(l>M{f%ydZSi$)_Yh|)TS39t0QV@b61|DMi3*ZXIT*uxPcGAV zv4m^aYp_U@;WQ)tf`{knHa~ulg$yqb%li_(7GCpOZ_h)Cvr6+07h^# KJ-iP3!G8fH=3>eK literal 0 HcmV?d00001 diff --git a/docs/ux-ui/screens/outbox-retry-explained-real-320-2026-10-08.png b/docs/ux-ui/screens/outbox-retry-explained-real-320-2026-10-08.png new file mode 100644 index 0000000000000000000000000000000000000000..27d107e4f9c5a9ede9e261227fb85400f884ca0c GIT binary patch literal 36073 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